Chuyển đến nội dung
Diễn đàn CADViet
Jin Yong

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)

Các bài được khuyến nghị

Chào các bạn. Mình có một vấn đề muốn được giúp đỡ. Trên bản vẽ của mình có rất nhiều đối tượng kiểu MTEXT ví dụ A,B,C...X,Y,Z. Bây giờ mình dùng hàm ENTSEL để chọn ra 2 đối tượng M,N bất kỳ trong số các đối tượng MTEXT trên. Sau đó dùng lệnh EXPLODE để chuyển hai đối tượng M,N về kiểu DTEXT. Bây giờ mình muốn truy xuất 2 đối tượng vừa mới phá(sau khi EXPLODE) nhưng không biết làm cách nào. Mong nhận được sự giúp đỡ của các bạn. Xin cảm ơn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

1. Có 2 loại đểu: đểu và "đểu". "Đểu" này là "đểu" khen mà bác!

2. Bác đã nói đúng. Tuy nhiên, chơi 2 biến sửa ít hơn 1 biến, nên thôi, đành chơi 2 biến vậy. Thanks 1 lần nữa.

Chào Doan Van Ha

Biến là do mình đặt ra. Bạn có thể viết gọn lại

Với hàm gom do Tue_NV định nghĩa ở trên.

(foreach keylst (mapcar '(lambda(x y) (append (list x) y)) 
            '("key1" "key2" "key3");danh sach key
             (list '(1 5 6) '( 3 5 7) '(6 4 9)); co the dinh nghia danh sach cac bien List 
          )
       (GOM keylst)
)

 

Chào các bạn. Mình có một vấn đề muốn được giúp đỡ. Trên bản vẽ của mình có rất nhiều đối tượng kiểu MTEXT ví dụ A,B,C...X,Y,Z. Bây giờ mình dùng hàm ENTSEL để chọn ra 2 đối tượng M,N bất kỳ trong số các đối tượng MTEXT trên. Sau đó dùng lệnh EXPLODE để chuyển hai đối tượng M,N về kiểu DTEXT. Bây giờ mình muốn truy xuất 2 đối tượng vừa mới phá(sau khi EXPLODE) nhưng không biết làm cách nào. Mong nhận được sự giúp đỡ của các bạn. Xin cảm ơn.

Chào damvinhduy

Bạn sử dụng cái này

(acet-explode (ssget '((0 . "MTEXT"))))

Chọn MTEXT -> nó sẽ explode thành TEXT và trả về các Text này trong 1 tập chọn

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Chào Doan Van Ha

Biến là do mình đặt ra. Bạn có thể viết gọn lại

Với hàm gom do Tue_NV định nghĩa ở trên.

Bác giúp đỡ quá tận tình, đến những 3h30 mà còn viết code trả lời! Nói tóm lại, tôi muốn như thế này:

Tôi có 1 list tên là lst (nó có thể cố định, có thể thay/thêm/loại được, và có thể ban đầu là list rỗng). Bây giờ tôi muốn có một hàm 1 biến, VD là (GOM lst) để có thể dùng nó đọc bất cứ danh sách nào. Các list này nằm tận sâu thẳm ở đâu đó ta không quan tâm mà chỉ biết tên nó là lst. Nhưng chắc để bác còn giúp người khác, chứ đến đây tôi cũng thấy tạm ổn rồi.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bác giúp đỡ quá tận tình, đến những 3h30 mà còn viết code trả lời! Nói tóm lại, tôi muốn như thế này:

Tôi có 1 list tên là lst (nó có thể cố định, có thể thay/thêm/loại được, và có thể ban đầu là list rỗng). Bây giờ tôi muốn có một hàm 1 biến, VD là (GOM lst) để có thể dùng nó đọc bất cứ danh sách nào. Các list này nằm tận sâu thẳm ở đâu đó ta không quan tâm mà chỉ biết tên nó là lst. Nhưng chắc để bác còn giúp người khác, chứ đến đây tôi cũng thấy tạm ổn rồi.

Ra ngõ gặp "Bác học" rồi.

 

Hiện nay Bạn có tiền, có rất nhiều tiền. :rolleyes:

"(nó có thể cố định, có thể thêm/bớt vào ngày mai, và có thể ban đầu là rỗng" :mellow: )

bạn có thể để trong ví-bóp, trong ngân hàng Thụy sĩ , .... nói chung là "nằm tận sâu thẳm ở đâu đó ta không quan tâm mà chỉ biết nó là tiền".

 

bạn muốn cho ai đó. :blink: (giả dụ cho tôi hay Tue_NV ...)

- bạn phải gặp nguời đó : đưa trưc tiếp

- hoặc bạn biết tài khoản ngân hàng của họ : chuyển khoản.

- thông qua các tổ chức từ thiện

....

 

Trở lại v/đề chính. bạn có lst, nhưng không có KEY của dialog làm sao CAD nó biết bạn gán cho "ai"?!

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Ra ngõ gặp "Bác học" rồi.

 

Hiện nay Bạn có tiền, có rất nhiều tiền. :rolleyes:

"(nó có thể cố định, có thể thêm/bớt vào ngày mai, và có thể ban đầu là rỗng" :mellow: )

bạn có thể để trong ví-bóp, trong ngân hàng Thụy sĩ , .... nói chung là "nằm tận sâu thẳm ở đâu đó ta không quan tâm mà chỉ biết nó là tiền".

 

bạn muốn cho ai đó. :blink: (giả dụ cho tôi hay Tue_NV ...)

- bạn phải gặp nguời đó : đưa trưc tiếp

- hoặc bạn biết tài khoản ngân hàng của họ : chuyển khoản.

- thông qua các tổ chức từ thiện

....

 

Trở lại v/đề chính. bạn có lst, nhưng không có KEY của dialog làm sao CAD nó biết bạn gán cho "ai"?!

Đây là dòng bác Tue_NV đã viết và tôi đã thanks:

- Khi cần đọc list ds2 với key là "ds2" ta viết (GOM "ds2" ds2)

Có thể tôi nói hơi ngắn gọn, và bác thì không đọc từ đầu nên chụp mũ mà làm thơ khinh người vậy thôi. Nhưng dù sao thì thơ của bác cũng có người vỗ tay rồi nên thôi.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Chào mọi người. Mình có một vấn đề muốn được giúp đỡ. mình đã load lisp vẽ cửa sổ trên diễn đàn nhưng ko sử dụng được. thường báo lỗi như sau

second point :; error: bad argument type: lentityp nil

nội dung lisp:

(defun c:w1(/ data_m l1 l2 p1 p2 check)

(defun wd_import(/ p3 p4 p5 p6)
(setq data_m (ssget))
(setq p1 (getpoint "\nfirst point :") p2 (getpoint "\nsecond point :"))
(setq l1 nil l2 nil check 1)
(if (not (= nil data_m)) (progn
(setq l1 (entget (ssname data_m 0)))
(setq l2 (entget (ssname data_m 1)))
(if (or (= nil l1) (not (= "LINE" (cdr (assoc 0 l1))))) (setq check 0))
(if (or (= nil l2) (not (= "LINE" (cdr (assoc 0 l2))))) (setq check 0))
(if (not (= 0 (-(sslength data_m) 2))) (setq check 0))
(if (= 1 check) (progn
(setq p3 (cdr (assoc 10 l1))) (setq p3 (list (nth 0 p3) (nth 1 p3)))
(setq p4 (cdr (assoc 11 l1))) (setq p4 (list (nth 0 p4) (nth 1 p4)))
(setq p5 (cdr (assoc 10 l2))) (setq p5 (list (nth 0 p5) (nth 1 p5)))
(setq p6 (cdr (assoc 11 l2))) (setq p6 (list (nth 0 p6) (nth 1 p6)))
(if (not (= nil (inters p3 p4 p5 p6 nil))) (setq check 0))
))
) (setq check 0))
(princ)
)

(defun wd_procced()

(defun mkv(/ p3 p4 p5 p6 p7 p8 p9 ls1 ls2 getom ll1)

(setq p3 (cdr (assoc 10 l1)))
(setq p4 (cdr (assoc 11 l1)))
(setq p5 (cdr (assoc 10 l2)))
(setq p6 (cdr (assoc 11 l2)))
(if (> (abs (- (nth 1 p1) (nth 1 p3)))
(abs (- (nth 1 p3) (nth 1 p4))) ) (setq check 0))
(if (> (abs (- (nth 1 p1) (nth 1 p4)))
(abs (- (nth 1 p3) (nth 1 p4))) ) (setq check 0))
(if (> (abs (- (nth 1 p2) (nth 1 p5)))
(abs (- (nth 1 p5) (nth 1 p6))) ) (setq check 0))
(if (> (abs (- (nth 1 p2) (nth 1 p6)))
(abs (- (nth 1 p5) (nth 1 p6))) ) (setq check 0))
(if (= 0 check) (princ "\ninvalid data") (progn
(setq ls1 (arlst (list (nth 1 p1) (nth 1 p2) (nth 1 p3) (nth 1 p4) )))
; (princ ls1)
(setq p7 (list (nth 0 p3) (nth 0 ls1) 0))
(setq p8 (list (nth 0 p3) (nth 1 ls1) 0))
(mkline p7 p8 l1)
(setq p7 (list (nth 0 p3) (nth 2 ls1) 0))
(setq p8 (list (nth 0 p3) (nth 3 ls1) 0))
(mkline p7 p8 l1)

(setq ls1 (arlst (list (nth 1 p1) (nth 1 p2) (nth 1 p5) (nth 1 p6) )))
; (princ ls1)
(setq p7 (list (nth 0 p5) (nth 0 ls1) 0))
(setq p8 (list (nth 0 p5) (nth 1 ls1) 0))
(mkline p7 p8 l1)
(setq p7 (list (nth 0 p5) (nth 2 ls1) 0))
(setq p8 (list (nth 0 p5) (nth 3 ls1) 0))
(mkline p7 p8 l1)

(setq p7 (list (nth 0 p3) (nth 1 ls1) 0))
(setq p8 (list (nth 0 p5) (nth 1 ls1) 0))
(mkline p7 p8 l1)
(setq p7 (list (nth 0 p3) (nth 2 ls1) 0))
(setq p8 (list (nth 0 p5) (nth 2 ls1) 0))
(mkline p7 p8 l1)

(setq getom (getvar "osmode"))
(setvar "osmode" 0)

(setq ls2 (arlst (list (nth 0 p3) (nth 0 p5))))
(setq p7 (list (nth 0 ls2) (nth 1 ls1) 0))
(setq p8 (list (nth 1 ls2) (nth 2 ls1) 0))

(setq ll1 (list
(cons 0 "line")
(cons 8 (getvar "clayer"))
))

(drawrt2 p7 p8 ll1)

(setvar "osmode" getom)
(command "erase" data_m "")

))
(princ)
)

(defun mkh(/ p3 p4 p5 p6 p7 p8 p9 ls1 ls2 getom ll1)

(setq p3 (cdr (assoc 10 l1)))
(setq p4 (cdr (assoc 11 l1)))
(setq p5 (cdr (assoc 10 l2)))
(setq p6 (cdr (assoc 11 l2)))

(if (> (abs (- (nth 0 p1) (nth 0 p3)))
(abs (- (nth 0 p3) (nth 0 p4))) ) (setq check 0))
(if (> (abs (- (nth 0 p1) (nth 0 p4)))
(abs (- (nth 0 p3) (nth 0 p4))) ) (setq check 0))
(if (> (abs (- (nth 0 p2) (nth 0 p5)))
(abs (- (nth 0 p5) (nth 0 p6))) ) (setq check 0))
(if (> (abs (- (nth 0 p2) (nth 0 p6)))
(abs (- (nth 0 p5) (nth 0 p6))) ) (setq check 0))

(if (= 0 check) (princ "\ninvalid data") (progn

(setq ls1 (arlst (list (nth 0 p1) (nth 0 p2) (nth 0 p3) (nth 0 p4) )))
; (princ ls1)
(setq p7 (list (nth 0 ls1) (nth 1 p3) 0))
(setq p8 (list (nth 1 ls1) (nth 1 p3) 0))
(mkline p7 p8 l1)
(setq p7 (list (nth 2 ls1) (nth 1 p3) 0))
(setq p8 (list (nth 3 ls1) (nth 1 p3) 0))
(mkline p7 p8 l1)

(setq ls1 (arlst (list (nth 0 p1) (nth 0 p2) (nth 0 p5) (nth 0 p6) )))
; (princ ls1)
(setq p7 (list (nth 0 ls1) (nth 1 p5) 0))
(setq p8 (list (nth 1 ls1) (nth 1 p5) 0))
(mkline p7 p8 l1)
(setq p7 (list (nth 2 ls1) (nth 1 p5) 0))
(setq p8 (list (nth 3 ls1) (nth 1 p5) 0))
(mkline p7 p8 l1)

(setq p7 (list (nth 1 ls1) (nth 1 p3) 0))
(setq p8 (list (nth 1 ls1) (nth 1 p5) 0))
(mkline p7 p8 l1)
(setq p7 (list (nth 2 ls1) (nth 1 p3) 0))
(setq p8 (list (nth 2 ls1) (nth 1 p5) 0))
(mkline p7 p8 l1)

(setq getom (getvar "osmode"))
(setvar "osmode" 0)

(setq ls2 (arlst (list (nth 1 p3) (nth 1 p5))))
(setq p7 (list (nth 1 ls1) (nth 0 ls2) 0))
(setq p8 (list (nth 2 ls1) (nth 1 ls2) 0))

(setq ll1 (list
(cons 0 "line")
(cons 8 (getvar "clayer"))
))

(drawrt3 p7 p8 ll1)

(setvar "osmode" getom)
(command "erase" data_m "")


))
(princ)
)

(setvar "cmdecho" 0) (command "undo" "mark") (setvar "cmdecho" 1)
(if (= 0 check) (princ "\ninvalid data") (progn
(if (< (abs (- (nth 0 (cdr (assoc 10 l1)))
(nth 0 (cdr (assoc 11 l1))) )) 0.00001) (mkv))
(if (< (abs (- (nth 1 (cdr (assoc 10 l1)))
(nth 1 (cdr (assoc 11 l1))) )) 0.00001) (mkh))


))

(princ)

)
(wd_import)
(ai_undo_push)
(wd_procced)
(ai_undo_pop)
)


(defun c:w2(/ data_m l1 l2 p1 p2 check)

(defun wd_import(/ p3 p4 p5 p6)
(setq data_m (ssget))
(setq p1 (getpoint "\nfirst point :") p2 (getpoint "\nsecond point :"))
(setq l1 nil l2 nil check 1)
(if (not (= nil data_m)) (progn
(setq l1 (entget (ssname data_m 0)))
(setq l2 (entget (ssname data_m 1)))
(if (or (= nil l1) (not (= "LINE" (cdr (assoc 0 l1))))) (setq check 0))
(if (or (= nil l2) (not (= "LINE" (cdr (assoc 0 l2))))) (setq check 0))
(if (not (= 0 (-(sslength data_m) 2))) (setq check 0))
(if (= 1 check) (progn
(setq p3 (cdr (assoc 10 l1))) (setq p3 (list (nth 0 p3) (nth 1 p3)))
(setq p4 (cdr (assoc 11 l1))) (setq p4 (list (nth 0 p4) (nth 1 p4)))
(setq p5 (cdr (assoc 10 l2))) (setq p5 (list (nth 0 p5) (nth 1 p5)))
(setq p6 (cdr (assoc 11 l2))) (setq p6 (list (nth 0 p6) (nth 1 p6)))
(if (not (= nil (inters p3 p4 p5 p6 nil))) (setq check 0))
))
) (setq check 0))
(princ)
)

(defun wd_procced()

(defun mkv(/ p3 p4 p5 p6 p7 p8 p9 ls1 ls2 getom ll1)

(setq p3 (cdr (assoc 10 l1)))
(setq p4 (cdr (assoc 11 l1)))
(setq p5 (cdr (assoc 10 l2)))
(setq p6 (cdr (assoc 11 l2)))
(if (> (abs (- (nth 1 p1) (nth 1 p3)))
(abs (- (nth 1 p3) (nth 1 p4))) ) (setq check 0))
(if (> (abs (- (nth 1 p1) (nth 1 p4)))
(abs (- (nth 1 p3) (nth 1 p4))) ) (setq check 0))
(if (> (abs (- (nth 1 p2) (nth 1 p5)))
(abs (- (nth 1 p5) (nth 1 p6))) ) (setq check 0))
(if (> (abs (- (nth 1 p2) (nth 1 p6)))
(abs (- (nth 1 p5) (nth 1 p6))) ) (setq check 0))
(if (= 0 check) (princ "\ninvalid data") (progn
(setq ls1 (arlst (list (nth 1 p1) (nth 1 p2) (nth 1 p3) (nth 1 p4) )))
; (princ ls1)
(setq p7 (list (nth 0 p3) (nth 0 ls1) 0))
(setq p8 (list (nth 0 p3) (nth 1 ls1) 0))
(mkline p7 p8 l1)
(setq p7 (list (nth 0 p3) (nth 2 ls1) 0))
(setq p8 (list (nth 0 p3) (nth 3 ls1) 0))
(mkline p7 p8 l1)

(setq ls1 (arlst (list (nth 1 p1) (nth 1 p2) (nth 1 p5) (nth 1 p6) )))
; (princ ls1)
(setq p7 (list (nth 0 p5) (nth 0 ls1) 0))
(setq p8 (list (nth 0 p5) (nth 1 ls1) 0))
(mkline p7 p8 l1)
(setq p7 (list (nth 0 p5) (nth 2 ls1) 0))
(setq p8 (list (nth 0 p5) (nth 3 ls1) 0))
(mkline p7 p8 l1)

(setq p7 (list (nth 0 p3) (nth 1 ls1) 0))
(setq p8 (list (nth 0 p5) (nth 1 ls1) 0))
(mkline p7 p8 l1)
(setq p7 (list (nth 0 p3) (nth 2 ls1) 0))
(setq p8 (list (nth 0 p5) (nth 2 ls1) 0))
(mkline p7 p8 l1)

(setq ls2 (arlst (list (nth 0 p3) (nth 0 p5))))

(setq ll1 (list
(cons 0 "line")
(cons 8 (getvar "clayer"))
))

(if (< (nth 0 p1) (nth 0 ls2)) (progn
(setq p7 (list (nth 0 ls2) (nth 1 ls1) 0))
(setq p8 (list (nth 1 ls2) (nth 2 ls1) 0))
(setq p7 (list (* (+ (nth 0 p7) (nth 0 p8)) 0.5) (nth 1 p7) 0))
(drawrt2 p7 p8 ll1)

(setq p7 (list (- (nth 0 ls2) 70) (- (nth 1 ls1) 100) 0))
(setq p8 (list (- (nth 0 ls2) 70) (+ (nth 2 ls1) 100) 0))
(mkline p7 p8 ll1)

(setq p9 (list (+ (nth 0 p7) 70) (nth 1 p7) 0))
(mkline p7 p9 ll1)

(setq p9 (list (+ (nth 0 p8) 70) (nth 1 p8) 0))
(mkline p8 p9 ll1)
)(progn
(setq p7 (list (nth 0 ls2) (nth 1 ls1) 0))
(setq p8 (list (nth 1 ls2) (nth 2 ls1) 0))
(setq p8 (list (* (+ (nth 0 p7) (nth 0 p8)) 0.5) (nth 1 p8) 0))
(drawrt2 p7 p8 ll1)

(setq p7 (list (+ (nth 1 ls2) 70) (- (nth 1 ls1) 100) 0))
(setq p8 (list (+ (nth 1 ls2) 70) (+ (nth 2 ls1) 100) 0))
(mkline p7 p8 ll1)

(setq p9 (list (- (nth 0 p7) 70) (nth 1 p7) 0))
(mkline p7 p9 ll1)

(setq p9 (list (- (nth 0 p8) 70) (nth 1 p8) 0))
(mkline p8 p9 ll1)
))


(command "erase" data_m "")

))
(princ)
)

(defun mkh(/ p3 p4 p5 p6 p7 p8 p9 ls1 ls2 getom ll1)

(setq p3 (cdr (assoc 10 l1)))
(setq p4 (cdr (assoc 11 l1)))
(setq p5 (cdr (assoc 10 l2)))
(setq p6 (cdr (assoc 11 l2)))

(if (> (abs (- (nth 0 p1) (nth 0 p3)))
(abs (- (nth 0 p3) (nth 0 p4))) ) (setq check 0))
(if (> (abs (- (nth 0 p1) (nth 0 p4)))
(abs (- (nth 0 p3) (nth 0 p4))) ) (setq check 0))
(if (> (abs (- (nth 0 p2) (nth 0 p5)))
(abs (- (nth 0 p5) (nth 0 p6))) ) (setq check 0))
(if (> (abs (- (nth 0 p2) (nth 0 p6)))
(abs (- (nth 0 p5) (nth 0 p6))) ) (setq check 0))

(if (= 0 check) (princ "\ninvalid data") (progn

(setq ls1 (arlst (list (nth 0 p1) (nth 0 p2) (nth 0 p3) (nth 0 p4) )))
; (princ ls1)
(setq p7 (list (nth 0 ls1) (nth 1 p3) 0))
(setq p8 (list (nth 1 ls1) (nth 1 p3) 0))
(mkline p7 p8 l1)
(setq p7 (list (nth 2 ls1) (nth 1 p3) 0))
(setq p8 (list (nth 3 ls1) (nth 1 p3) 0))
(mkline p7 p8 l1)

(setq ls1 (arlst (list (nth 0 p1) (nth 0 p2) (nth 0 p5) (nth 0 p6) )))
; (princ ls1)
(setq p7 (list (nth 0 ls1) (nth 1 p5) 0))
(setq p8 (list (nth 1 ls1) (nth 1 p5) 0))
(mkline p7 p8 l1)
(setq p7 (list (nth 2 ls1) (nth 1 p5) 0))
(setq p8 (list (nth 3 ls1) (nth 1 p5) 0))
(mkline p7 p8 l1)

(setq p7 (list (nth 1 ls1) (nth 1 p3) 0))
(setq p8 (list (nth 1 ls1) (nth 1 p5) 0))
(mkline p7 p8 l1)
(setq p7 (list (nth 2 ls1) (nth 1 p3) 0))
(setq p8 (list (nth 2 ls1) (nth 1 p5) 0))
(mkline p7 p8 l1)

(setq getom (getvar "osmode"))
(setvar "osmode" 0)

(setq ll1 (list
(cons 0 "line")
(cons 8 (getvar "clayer"))
))
(setq ls2 (arlst (list (nth 1 p3) (nth 1 p5))))
;(princ ls2)

(if (> (nth 1 p1) (nth 1 ls2)) (progn

(setq p7 (list (nth 1 ls1) (nth 0 ls2) 0))
(setq p8 (list (nth 2 ls1) (nth 1 ls2) 0))
(setq p8 (list (nth 2 ls1) (* (+ (nth 1 p7) (nth 1 p8)) 0.5) 0))

(drawrt3 p7 p8 ll1)

(setq p7 (list (- (nth 1 ls1) 100) (+ (nth 1 ls2) 70) 0))
(setq p8 (list (+ (nth 2 ls1) 100) (+ (nth 1 ls2) 70) 0))
(mkline p7 p8 ll1)

(setq p9 (list (nth 0 p7) (- (nth 1 p7) 70) 0))
(mkline p7 p9 ll1)

(setq p9 (list (nth 0 p8) (- (nth 1 p8) 70) 0))
(mkline p8 p9 ll1)
)(progn
(setq p7 (list (nth 1 ls1) (nth 0 ls2) 0))
(setq p8 (list (nth 2 ls1) (nth 1 ls2) 0))
(setq p7 (list (nth 1 ls1) (* (+ (nth 1 p7) (nth 1 p8)) 0.5) 0))

(drawrt3 p7 p8 ll1)


(setq p7 (list (- (nth 1 ls1) 100) (- (nth 0 ls2) 70) 0))
(setq p8 (list (+ (nth 2 ls1) 100) (- (nth 0 ls2) 70) 0))
(mkline p7 p8 ll1)

(setq p9 (list (nth 0 p7) (+ (nth 1 p7) 70) 0))
(mkline p7 p9 ll1)

(setq p9 (list (nth 0 p8) (+ (nth 1 p8) 70) 0))
(mkline p8 p9 ll1)


))

(setvar "osmode" getom)

(command "erase" data_m "")


))
(princ)
)

(setvar "cmdecho" 0) (command "undo" "mark") (setvar "cmdecho" 1)
(if (= 0 check) (princ "\ninvalid data") (progn
(if (< (abs (- (nth 0 (cdr (assoc 10 l1)))
(nth 0 (cdr (assoc 11 l1))) )) 0.00001) (mkv))
(if (< (abs (- (nth 1 (cdr (assoc 10 l1)))
(nth 1 (cdr (assoc 11 l1))) )) 0.00001) (mkh))


))

(princ)

)
(wd_import)
(wd_procced)
)

.

Mong nhận được sự giúp đỡ của các bạn. Xin cảm ơn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Chào Doan Van Ha

Biến là do mình đặt ra. Bạn có thể viết gọn lại

Với hàm gom do Tue_NV định nghĩa ở trên.

(foreach keylst (mapcar '(lambda(x y) (append (list x) y)) 
            '("key1" "key2" "key3");danh sach key
             (list '(1 5 6) '( 3 5 7) '(6 4 9)); co the dinh nghia danh sach cac bien List 
          )
       (GOM keylst)
)

 

 

Chào damvinhduy

Bạn sử dụng cái này

(acet-explode (ssget '((0 . "MTEXT"))))

Chọn MTEXT -> nó sẽ explode thành TEXT và trả về các Text này trong 1 tập chọn

Cảm ơn anh Tue. Hôm nay biết thêm một hàm khác nữa.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Để mở 1 file Notepad (mở tường minh để edit trên nó) ta dùng hàm:

(startapp "Notepad.exe" filename)

Vậy, để mở tường minh 1 file CSV ta phải thay "Notepad.exe" bằng gì?

Bác nào biết xin chỉ giùm, cám ơn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Để mở 1 file Notepad (mở tường minh để edit trên nó) ta dùng hàm:

(startapp "Notepad.exe" filename)

Vậy, để mở tường minh 1 file CSV ta phải thay "Notepad.exe" bằng gì?

Bác nào biết xin chỉ giùm, cám ơn.

Có thể bằng

(command "ai_editcustfile" filename)

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Có thể bằng

(command "ai_editcustfile" filename)

Chà! Có cái lệnh "ai_editcustfile" hay thế mà không biết nhỉ. Cám ơn bác rất rất nhiều nhiều!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Em có một thắc mắc sau:

Khi em gõ vào Commandline của AutoCAD dòng lệnh sau: (setq lst '(a (b c) d (e f)))

Kết quả trả về là: (A (B C) D (E F))

 

Như vậy là không có phân biệt chữ hoa và chữ thường trong AutoLisp ạ ?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Em có một thắc mắc sau:

Khi em gõ vào Commandline của AutoCAD dòng lệnh sau: (setq lst '(a (b c) d (e f)))

Kết quả trả về là: (A (B C) D (E F))

 

Như vậy là không có phân biệt chữ hoa và chữ thường trong AutoLisp ạ ?

Chào buổi sáng

Bạn dậy sớm thế :rolleyes:

Về sự phân biệt chữ hoa và chữ thường thuộc kiểu SYM thì nó như nhau

(setq b '(A (B C) D (E F)))

(equal lst b ) -> Return : T

Còn kiểu STR thì nó có phân biệt chữ hoa và chữ thường đấy nhé

 

Chúc các bạn một buổi sáng tốt lành

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Chào buổi sáng

Bạn dậy sớm thế :rolleyes:

Về sự phân biệt chữ hoa và chữ thường thuộc kiểu SYM thì nó như nhau

(setq b '(A (B C) D (E F)))

(equal lst b ) -> Return : T

Còn kiểu STR thì nó có phân biệt chữ hoa và chữ thường đấy nhé

 

Chúc các bạn một buổi sáng tốt lành

Cảm ơn bạn và cũng chúc bạn một ngày làm việc như ý nhá! (Có điều là mình thức hơi khuya thôi, chứ không phải dậy sớm, hehe)

Mình đã nhận ra sự khác nhau giữa symbol và string như sau:

Command: (setq lst '("a" a ("c" C)))

("a" A ("c" C))

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Cho em hỏi là ở chỗ nào nói về mấy cái hàm dạng acetxxx ko ạ? Thấy mấy anh ở đây dùng mà em tìm trong help của autocad không thấy. Chẳng hạn acet-dxf ?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Cho em hỏi là ở chỗ nào nói về mấy cái hàm dạng acetxxx ko ạ? Thấy mấy anh ở đây dùng mà em tìm trong help của autocad không thấy. Chẳng hạn acet-dxf ?

Bạn mở file "acetutil.chm", trong đó có nhiều hàm Acet, nhưng không đủ.

Tặng bạn cái này, tôi mót nhiều đồng trên CADViet và tổng hợp lại nhưng chưa sắp xếp.

http://www.cadviet.com/upfiles/3/cac_ham_acet.doc

  • Vote tăng 3

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

E có 1 đoạn lisp:

(setq j11 (polar j10 0 285))

(setq j12 (polar j11 (* 0.5 Pi) 150))

(setq j13 (polar j12 Pi 150))

Theo e hiểu nó vẽ từ j10 1 đoạn 285,từ j11 vẽ 1 nửa vòng tròn có đường kính 150,từ j12 vẽ 1 đường thẳng dài 150.Nay e muốn sửa lại từ j11 vẽ 1 đường thẳng dài 200 vuông góc với điểm j11 chẳng hạn thì phải viết như thế nào.Mong sự giúp đỡ của các bác.Thanks.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

E có 1 đoạn lisp:

(setq j11 (polar j10 0 285))

(setq j12 (polar j11 (* 0.5 Pi) 150))

(setq j13 (polar j12 Pi 150))

Theo e hiểu nó vẽ từ j10 1 đoạn 285,từ j11 vẽ 1 nửa vòng tròn có đường kính 150,từ j12 vẽ 1 đường thẳng dài 150.Nay e muốn sửa lại từ j11 vẽ 1 đường thẳng dài 200 vuông góc với điểm j11 chẳng hạn thì phải viết như thế nào.Mong sự giúp đỡ của các bác.Thanks.

Chào bạn hugo007!

1. Cái bạn đang xác định là 1 điểm từ 1 điểm cho trước với góc và khoảng cach cho trước.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Ý mình là vẽ 1 đoạn thẳng vuông góc quay lên với điểm cuối của đoạn thẳng 285 đó.Cảm ơn bác Tue nhiều,mong bác chỉ giúp.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Ý mình là vẽ 1 đoạn thẳng vuông góc quay lên với điểm cuối của đoạn thẳng 285 đó.Cảm ơn bác Tue nhiều,mong bác chỉ giúp.

Hề hề hề,

Bạn hiểu sai mất rồi.

Cái đoạn lisp này

(setq j11 (polar j10 0 285))

(setq j12 (polar j11 (* 0.5 Pi) 150))

(setq j13 (polar j12 Pi 150))

được dịch nghĩa ra như sau:

Đặt điểm J11 là điểm được lấy theo tọa độ độc cực tương đối đối với điểm J10 cách điểm J10 một khoảng là 285 theo hướng 0 độ.

Đặt điểm J12 là điểm được lấy theo tọa độ độc cực tương đối đối với điểm J11 cách điểm J11 một khoảng là 150 theo hướng 90 độ.

Đặt điểm J13 là điểm được lấy theo tọa độ độc cực tương đối đối với điểm J12 cách điểm J12 một khoảng là 150 theo hướng 180 độ.

 

Và như vậy là nó chả vẽ ra cái gì cả bạn ạ. Nếu bạn muốn vẽ một cái gì đó đi qua các điểm này thì cần có thêm các hàm lệnh vẽ.

Tỷ như cái yêu cầu của bạn thì sẽ phải làm như sau:

(setq j11 (polar j10 0 285))

(setq j12 (polar j11 (* 0.5 Pi) 200))

(command "line" J11 J12 "")

Bạn hãy tự suy luận tiếp nhé.

Chúc bạn vui.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Em muốn hỏi là có cái này chạy lệnh của lisp khi đang thực thi một lệnh khác hay không ạ? Ví dụ như lệnh osnap, khi đang thực hiện một lệnh nào đó mà muốn thay đổi chế độ bắt điểm ta chỉ cần gõ 'os là hiện lên bảng osnap mà không cần thoát ra khỏi lệnh hiện hành :)

À những lệnh như vậy gọi là transparent command :D

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tỷ như cái yêu cầu của bạn thì sẽ phải làm như sau:

(setq j11 (polar j10 0 285))

(setq j12 (polar j11 (* 0.5 Pi) 200))

(command "line" J11 J12 "")

Bạn hãy tự suy luận tiếp nhé.

Chúc bạn vui.

Dạ đúng như bác nói,e đang mò mẫm về lisp nên hơi gà.Cảm ơn bác và bác Tue nhiều.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Em muốn hỏi là có cái này chạy lệnh của lisp khi đang thực thi một lệnh khác hay không ạ? Ví dụ như lệnh osnap, khi đang thực hiện một lệnh nào đó mà muốn thay đổi chế độ bắt điểm ta chỉ cần gõ 'os là hiện lên bảng osnap mà không cần thoát ra khỏi lệnh hiện hành :)

À những lệnh như vậy gọi là transparent command :D

Hỏi hay trả lời đây người đẹp ^^

- Về câu hỏi, bạn có thể định nghĩa 1 lệnh Transparent bằng hàm vlax-add-cmd với tham số flag = 1 (có trong Develop Help rồi nhé ^^).

- Có 1 lưu ý nhỏ là không dùng (command) trong transparent command nhé.Cad tránh Command inside command

Ví dụ :

(defun xoa () (entdel (car(entsel "\nChon doi tuong can xoa :"))))

(vlax-add-cmd "xoa" 'xoa "xoa" 1)

=> Ok

(defun xoa () (command "erase" (car(entsel))))

(vlax-add-cmd "xoa" 'xoa "xoa" 1)

=> Crash :)

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Hỏi hay trả lời đây người đẹp ^^

- Về câu hỏi, bạn có thể định nghĩa 1 lệnh Transparent bằng hàm vlax-add-cmd với tham số flag = 1 (có trong Develop Help rồi nhé ^^).

- Có 1 lưu ý nhỏ là không dùng (command) trong transparent command nhé.Cad tránh Command inside command

Ví dụ :

(defun xoa () (entdel (car(entsel "\nChon doi tuong can xoa :"))))

(vlax-add-cmd "xoa" 'xoa "xoa" 1)

=> Ok

(defun xoa () (command "erase" (car(entsel))))

(vlax-add-cmd "xoa" 'xoa "xoa" 1)

=> Crash :)

Chào buổi sáng anh ketxu!

 

1. Tất nhiên là em hỏi rồi, nhưng khi hỏi gõ nhầm chữ, thành ra bị hiểu nhầm

2. Anh gọi là người đẹp làm em ...;;)

3. Đây là lisp của bác Tue_NV:

(defun centre(dt / cen)
(vl-load-com)
(if (or (= (cdr(assoc 0 (entget dt))) "REGION") 
(and (wcmatch (cdr(assoc 0 (entget dt))) "*POLYLINE")
(= (cdr(assoc 70 (entget dt))) 1)
)
)
(if (and (wcmatch (cdr(assoc 0 (entget dt))) "*POLYLINE")
(= (cdr(assoc 70 (entget dt))) 1)
)
(Progn
(setq cen (vlax-get (car (vlax-invoke (vla-get-modelspace (vla-get-activedocument(vlax-get-acad-object)))
'addregion (list (vlax-ename->vla-object dt)))) 'Centroid))
(entdel (entlast))
)
(setq cen (vlax-get (vlax-ename->vla-object dt) 'Centroid))
)

) 
cen
)
(defun c:cen() (centre (car(entsel "\n Pick chon doi tuong lay trong tam :")))) 

 

Sao bác ấy không dùng vlax-add-cmd mà vẫn thành transparent command được ạ :s

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Chào buổi sáng anh ketxu!

 

1. Tất nhiên là em hỏi rồi, nhưng khi hỏi gõ nhầm chữ, thành ra bị hiểu nhầm

2. Anh gọi là người đẹp làm em ...;;)

3. Đây là lisp của bác Tue_NV:

(defun centre(dt / cen)
(vl-load-com)
(if (or (= (cdr(assoc 0 (entget dt))) "REGION") 
(and (wcmatch (cdr(assoc 0 (entget dt))) "*POLYLINE")
(= (cdr(assoc 70 (entget dt))) 1)
)
)
(if (and (wcmatch (cdr(assoc 0 (entget dt))) "*POLYLINE")
(= (cdr(assoc 70 (entget dt))) 1)
)
(Progn
(setq cen (vlax-get (car (vlax-invoke (vla-get-modelspace (vla-get-activedocument(vlax-get-acad-object)))
'addregion (list (vlax-ename->vla-object dt)))) 'Centroid))
(entdel (entlast))
)
(setq cen (vlax-get (vlax-ename->vla-object dt) 'Centroid))
)

) 
cen
)
(defun c:cen() (centre (car(entsel "\n Pick chon doi tuong lay trong tam :")))) 

 

Sao bác ấy không dùng vlax-add-cmd mà vẫn thành transparent command được ạ :s

Ketxu đã thay Tue_NV giải thích cho bạn rồi đấy thôi

- Có 1 lưu ý nhỏ là không dùng (command) trong transparent command nhé.Cad tránh Command inside command

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

3. Đây là lisp của bác Tue_NV:

(defun centre(dt / cen)
(vl-load-com)
(if (or (= (cdr(assoc 0 (entget dt))) "REGION") 
(and (wcmatch (cdr(assoc 0 (entget dt))) "*POLYLINE")
(= (cdr(assoc 70 (entget dt))) 1)
)
)
(if (and (wcmatch (cdr(assoc 0 (entget dt))) "*POLYLINE")
(= (cdr(assoc 70 (entget dt))) 1)
)
(Progn
(setq cen (vlax-get (car (vlax-invoke (vla-get-modelspace (vla-get-activedocument(vlax-get-acad-object)))
'addregion (list (vlax-ename->vla-object dt)))) 'Centroid))
(entdel (entlast))
)
(setq cen (vlax-get (vlax-ename->vla-object dt) 'Centroid))
)

) 
cen
)
(defun c:cen() (centre (car(entsel "\n Pick chon doi tuong lay trong tam :")))) 

 

Sao bác ấy không dùng vlax-add-cmd mà vẫn thành transparent command được ạ :s

 

Em còn thắc mắc cái này nữa mà anh, anh ketxu chưa trả lời em dòng đỏ đậm mà :)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×