Đến nội dung


Hình ảnh
5 stars - based on 24598 reviews
* * * - - 3 Bình chọn

Hướng dẫn lập trình Lisp


  • Please log in to reply
493 replies to this topic

#381 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 127 (tàm tạm)

Đã gửi 11 April 2012 - 04:28 PM

He he, cảm ơn bạn DoanVanHa, Lisp chạy rất tốt bạn ạ :D
  • 0

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#382 hienngocloveyou

hienngocloveyou

    biết vẽ line

  • Members
  • PipPip
  • 25 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 11 April 2012 - 04:51 PM

(defun c:sth()
(setq p1 (getpoint "\n chon diem bat dau"))
(setq L (getint "\n nhap chieu dai nha: "))
(setq B (getint "\n nhap chieu rong nha: "))
(command "line" (list (- (Car p1) 185) (cadr p1)) (list (+ (car p1) L) (cadr p1)) "")
(setq A (entlast))
(command "line" (list (Car p1) (+ (cadr p1) 195)) (list (car p1) (- (+ (cadr p1) B)) "")
(setq B (entlast))


(while
(setq kc (getstr "\n Khoang cach/Span :"))
(if(= "S" kc)

(while
(setq kc (getint "\n Khoang cach/Span :"))
(setq A (vlax-ename->vla-object (entlast)))
(vla-offset A kc))
)

(while
(setq kc (getint "\n Khoang cach :"))
(setq B (vlax-ename->vla-object (entlast)))
(vla-offset B kc))
)
)

Xem giúp dùm mình cái này, ý mình là ban đầu vẽ 2 line A va B, sau đó rẽ nhánh offset cho 2 line A B này, mình dùng if chương trình nó ko hiểu T_T
Mục đích là chia nhánh Span/Bay, khi chọn Span và nhập xong, thì làm sao để nó quay lại menu Span/Bay để mà rẽ nhánh 2??
  • 0

#383 hienngocloveyou

hienngocloveyou

    biết vẽ line

  • Members
  • PipPip
  • 25 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 11 April 2012 - 04:56 PM

Cho mình hỏi thêm là dùng giá trị tuyệt đối như thế nào. Như đoạn code trên mình vẽ 2 line chuẩn theo tọa độ nhưng fai click điểm đầu là 2 tọa độ dương thì 2 line mới đi đúng hướng mà mình canh tọa độ, nếu click điểm có y âm là code sai ngay, chỉnh như thế nào để 2 line đi đúng hướng mà ko fuj thuộc tọa độ điểm đầu âm hay dương ??
  • 0

#384 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6017 Bài viết
Điểm đánh giá: 3118 (tuyệt vời)

Đã gửi 11 April 2012 - 05:01 PM

(defun c:sth()
(setq p1 (getpoint "\n chon diem bat dau"))
(setq L (getint "\n nhap chieu dai nha: "))
(setq B (getint "\n nhap chieu rong nha: "))
(command "line" (list (- (Car p1) 185) (cadr p1)) (list (+ (car p1) L) (cadr p1)) "")
(setq A (entlast))
(command "line" (list (Car p1) (+ (cadr p1) 195)) (list (car p1) (- (+ (cadr p1) B)) "")
(setq B (entlast))


(while
(setq kc (getstr "\n Khoang cach/Span :"))
(if(= "S" kc)

(while
(setq kc (getint "\n Khoang cach/Span :"))
(setq A (vlax-ename->vla-object (entlast)))
(vla-offset A kc))
)

(while
(setq kc (getint "\n Khoang cach :"))
(setq B (vlax-ename->vla-object (entlast)))
(vla-offset B kc))
)
)

Xem giúp dùm mình cái này, ý mình là ban đầu vẽ 2 line A va B, sau đó rẽ nhánh offset cho 2 line A B này, mình dùng if chương trình nó ko hiểu T_T
Mục đích là chia nhánh Span/Bay, khi chọn Span và nhập xong, thì làm sao để nó quay lại menu Span/Bay để mà rẽ nhánh 2??

Hề hề hề,
T_T là cái chi chi. Người còn chả hiểu thì máy hiểu làm sao???
Chương trình viết thiếu dấu ngoặc đóng chứ chửa thấy sai cái chi. Hãy thêm nó vào và ch5y thử coi.
hề hề hề...
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#385 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5543 Bài viết
Điểm đánh giá: 2669 (tuyệt vời)

Đã gửi 11 April 2012 - 05:05 PM

Hề hề hề,
T_T là cái chi chi. Người còn chả hiểu thì máy hiểu làm sao???
Chương trình viết thiếu dấu ngoặc đóng chứ chửa thấy sai cái chi. Hãy thêm nó vào và ch5y thử coi.
hề hề hề...

Nói chung là còn nhiều thứ nữa:
1). hàm getstr ở đâu ra?
2). "S" là cái chi chi?
3). v.v...
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Và đừng làm điều ngược lại.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#386 hienngocloveyou

hienngocloveyou

    biết vẽ line

  • Members
  • PipPip
  • 25 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 11 April 2012 - 05:12 PM

Mình nhớ hàm getstring là getstr fai ko nhỉ, còn S là user nhập vào để chuyển qua nhánh 2, thiếu ngoặc nào nhỉ ?? T_T
  • 0

#387 hienngocloveyou

hienngocloveyou

    biết vẽ line

  • Members
  • PipPip
  • 25 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 11 April 2012 - 07:50 PM

(defun c:sth()
(setq p1 (getpoint "\n chon diem bat dau"))
(setq L (getint "\n nhap chieu dai nha: "))
(setq B (getint "\n nhap chieu rong nha: "))

(while
(or
(initget 1 "Bay Span Exit")
(/= "Exit"
(setq ANS
(getkword "\n Bay/Span/Exit: ")
)
)
)
(cond

((="Bay" ANS)
(command "line" (list (Car p1) (+ (cadr p1) 195)) (list (car p1) (- (+ (cadr p1) B))) "")
(while
(setq kc (getint "\n Khoang cach: "))
(setq L1 (vlax-ename->vla-object (entlast)))
(vla-offset L1 kc)
))

((="Span" ANS)
(command "line" (list (- (Car p1) 185) (cadr p1)) (list (+ (car p1) L) (cadr p1)) "")
(while
(setq kc (getint "\n Khoang cach :"))
(setq L2 (vlax-ename->vla-object (entlast)))
(vla-offset L2 kc))
)
)
)
)
Các bạn xem dùm, cơ bản đã gần hoàn thành vẽ trục, nhưng còn vướng chỗ là khi vẽ 2 line cơ bản mình fu thuộc vào tọa độ click điểm, nên chỉ có thể click tọa độ dương (+x +y), nếu nhấp vào điểm có tọa độ y âm thì 2 line cơ bản ko đi chính xác, vậy có cách nào vẽ 2 line từ 1 điểm cơ bản đi theo hướng mà ko fu thuộc tọa độ âm hay dương nó ko
  • 0

#388 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5721 Bài viết
Điểm đánh giá: 2636 (tuyệt vời)

Đã gửi 11 April 2012 - 08:39 PM

Nhắc nhở bạn hienngocloveyou cho code vào thẻ code
  • 0

#389 hienngocloveyou

hienngocloveyou

    biết vẽ line

  • Members
  • PipPip
  • 25 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 12 April 2012 - 08:11 AM

sry, chua đọc nội quy diễn đàn T_T
  • 0

#390 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4328 Bài viết
Điểm đánh giá: 3830 (đỉnh cao)

Đã gửi 12 April 2012 - 09:03 AM

sry, chua đọc nội quy diễn đàn T_T

Vậy bạn sửa lại các bài viết phía trên của bạn. Bạn cho code vào thẻ code nhé. Vì có 1 số chữ có thể biến thành mặt cười B) không hiểu. Ví dụ như bài viết số 398 của bạn.
  • 0

#391 hienngocloveyou

hienngocloveyou

    biết vẽ line

  • Members
  • PipPip
  • 25 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 16 April 2012 - 09:52 AM


(defun c:dt1 ()
(setq p1 (getpoint "\n chon diem bat dau"))
(setq L (getint "\n nhap chieu dai nha: "))
(setq B (getint "\n nhap chieu rong nha: "))
(command "line" (list (Car p1) (+ (cadr p1) 195)) @B<0 "")
)
Cho mình hỏi mình vẽ line theo chiều dài và góc như trên sao ko dc nhỉ, có phải lệnh như vậy ko ?
  • 0

#392 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5721 Bài viết
Điểm đánh giá: 2636 (tuyệt vời)

Đã gửi 16 April 2012 - 10:26 AM

@B<0 : symbol => có giá trị Nil => không có ý nghĩ gì trong câu lệnh này cả
Muốn dùng thì bạn phải strcat "@" B "<0" thành 1 chuỗi khi cho vào command.
Code thừa biến L
  • 1

#393 hienngocloveyou

hienngocloveyou

    biết vẽ line

  • Members
  • PipPip
  • 25 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 16 April 2012 - 11:05 AM


(setq A1 (strcat "@" B "<0")
mình thử thì A1 kết quả trả lại là @, nó ko hiểu B đã gán ở trên.
  • 0

#394 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5543 Bài viết
Điểm đánh giá: 2669 (tuyệt vời)

Đã gửi 16 April 2012 - 11:16 AM


(setq A1 (strcat "@" B "<0")
mình thử thì A1 kết quả trả lại là @, nó ko hiểu B đã gán ở trên.


(setq A1 (strcat "@" (itoa B) "<0"))

  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Và đừng làm điều ngược lại.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#395 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5721 Bài viết
Điểm đánh giá: 2636 (tuyệt vời)

Đã gửi 16 April 2012 - 11:55 AM

B của bạn là 1 số INTEGER, bạn phải chuyển nó về chuỗi trong hàm strcat đã chứ :| Mà cũng k có trường hợp nào bạn sai đối số mà nó trả về @ cho bạn như bạn nói được ^^
  • 1

#396 hienngocloveyou

hienngocloveyou

    biết vẽ line

  • Members
  • PipPip
  • 25 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 16 April 2012 - 01:48 PM


(defun c:sth()
(vl-load-com)
(setq p1 (getpoint "\n chon diem bat dau"))
(setq L (getint "\n nhap chieu dai nha: "))
(setq B (getint "\n nhap chieu rong nha: "))
(while
(or
(initget 1 "Bay Span Exit")
(/= "Exit"
(setq ANS
(getkword "\n Bay/Span/Exit: ")
)
)
)
(cond
((="Bay" ANS)
(setq A1 (strcat "@" (itoa B) "<90"))
(command "line" p1 A1"")
(while
(setq kc (getint "\n Khoang cach: "))
(setq L1 (vlax-ename->vla-object (entlast)))
(vla-offset L1 kc)
)
)
((="Span" ANS)
(setq A2 (strcat "@" (itoa L) "<180"))
(command "line" p1 A2"")
(while
(setq kc (getint "\n Khoang cach :"))
(setq L2 (vlax-ename->vla-object (entlast)))
(vla-offset L2 kc))
)
)
)

Em viết cái lisp này để vẽ các đường lưới giao nhau, nhưng bị trục trặc 1 chỗ, nó offset ko tạo ra các lưới giao nhau, ban đầu em nghĩ nó offset theo trục X,Y dương, nên em vẽ 2 line theo hướng 0 với 90 độ tức là điểm p1 góc dưới bên trái lưới,nhưng đến phần offset thì 2 phương đi 2 phương khác nhau, có cách nào khắc phục ko ạ. Thanks
  • 0

#397 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5721 Bài viết
Điểm đánh giá: 2636 (tuyệt vời)

Đã gửi 16 April 2012 - 01:53 PM

Dùng command để chỉ định hướng Offset thay cho vla-offset, hoặc dùng vla-copy. Lưới đều thì nên dùng array, lưới lệch thì mới offset hoặc copy, tùy bạn chọn
  • 0

#398 hienngocloveyou

hienngocloveyou

    biết vẽ line

  • Members
  • PipPip
  • 25 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 16 April 2012 - 02:01 PM

Cám ơn anh đã trả lời, nếu dùng lệnh offset thông thường thì điểm chọn phía phụ thuộc điểm pick của mình,trong command offset có option nào chọn phía là trục dương ko nhỉ ???
  • 0

#399 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4328 Bài viết
Điểm đánh giá: 3830 (đỉnh cao)

Đã gửi 16 April 2012 - 02:34 PM

Cám ơn anh đã trả lời, nếu dùng lệnh offset thông thường thì điểm chọn phía phụ thuộc điểm pick của mình,trong command offset có option nào chọn phía là trục dương ko nhỉ ???

Không có option nào chọn phía là trục dương,
bạn có thể tự tính toán phía điểm pick của mình
  • 0

#400 đinh văn sang

đinh văn sang

    Chưa sử dụng CAD

  • Members
  • Pip
  • 2 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 16 April 2012 - 04:26 PM

Lần đầu tiên mình cảm thấy rất thích thú đối với Cad là khi mình dùng một Lisp để đo chiều dài của một cung hoặc một đường Spline, và cũng thắc mắc rất nhiều để làm sao tạo được Lisp.hihi. bây giờ thì sẽ cố gắng thui
  • 0