Chuyển đến nội dung
Diễn đàn CADViet
Nguyen Hoanh

Viết lisp theo yêu cầu [phần 2]

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

http://www.cadviet.com/sub/hupload.php?fok=doc1_4.doc

Bác gia_bach và anh em xem hình ảnh em gửi theo link trên này nhé, em muốn quay rất nhiều đối tượng như vậy, làm tay vo nhiều mệt quá, rất mong nhận được sự giúp đỡ của bác và anh em!

Xin chân thành 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
http://www.cadviet.com/sub/hupload.php?fok=doc1_4.doc

Bác gia_bach và anh em xem hình ảnh em gửi theo link trên này nhé, em muốn quay rất nhiều đối tượng như vậy, làm tay vo nhiều mệt quá, rất mong nhận được sự giúp đỡ của bác và anh em!

Xin chân thành cảm ơn!

Gửi bạn Lisp quay tất cả đối tuợng trong đuờng tròn.

(Tui e rằng mai mốt bạn lại yêu cầu quay thêm arc hay dimension ... )

Nhắc bạn : tại sao bạn không Upload file CAD (với file CAD mọi chuyện sẽ rõ ràng hơn).

nguời sử dụng CAD lại dùng File Word (document) để thể hiện hình ảnh (image)

(defun c:rot(/ ang axss cen lst ov ss_txt vl);Rotate text in Circle
;;  By : Gia Bach, Copyrightゥ December 2009                      ;;
;;  Contact : gia_bach @  www.CadViet.com                        ;;
 (defun TraceCIRCLE (obj / sp ep inc pt ptlst)
   (setq sp 0
  ep (* 2 pi)
  inc (/ ep 72) )
   (while (< sp ep)
     (setq pt (vlax-curve-getPointAtParam obj sp)
    ptlst (cons pt ptlst)
    sp (+ inc sp)) )
   (reverse ptlst)
   )

 (vl-load-com)
 (setq vl '("osmode" "orthomode" "cmdecho")    ; Sys Var list
ov  (mapcar 'getvar vl))                ; Get Old values
 (mapcar 'setvar vl '(0 0 0))
 (or *ang* (setq *ang* (/ pi 4)))
 (setq ang (getangle (strcat "\nNhap goc muon quay <" (angtos *ang*) ">: ")))
 (if ang (setq *ang* ang))
 (setq ang (/ (* *ang* 180.0) pi))
 (princ "\nChon vong tron de quay Text : ")
 (if (ssget (list (cons 0 "CIRCLE")))
   (vlax-for e (vla-get-activeSelectionSet (vla-get-activedocument(vlax-get-acad-object)))
     (setq lst (TraceCIRCLE e)
    cen (vlax-safearray->list (variant-value (vla-get-Center e))))
     (if (setq ss_txt (ssget "_cp" lst  ) );chi chon Txt
(vl-cmdf "_rotate" ss_txt "" cen ang) )	) )
 (mapcar 'setvar vl ov) ; reset Sys Vars
 (princ)
 )

  • Vote tăng 4

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
Gửi bạn Lisp quay tất cả đối tuợng trong đuờng tròn.

(Tui e rằng mai mốt bạn lại yêu cầu quay thêm arc hay dimension ... )

.....

Mạn phép bổ sung thêm ý của anh gia_bach

Lisp trên quay tất cả đối tuợng trong đuờng tròn và tất cả đối tuợng giao với đuờng tròn

Cảm ơn anh gia_bach rất nhiều :(

  • 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

Xin chân thành cảm ơn bác gia_bach rẩt nhìu nha! Lisp của bác đúng là cái em đang cần. Từ trước em cứ nghĩ là cái này chắc không làm được nên cứ mải miết quay tay, mặc cho số phận...Hjx hjx. HÔm nay quyết định đưa yêu cầu thử lần đầu tiên xem sao, không ngờ được bác và mọi người đáp ứng ngay. Thật quá vui mừng và nể phục. Xin chúc bác và anh em trong diễn đàn năm mới mạnh khỏe, công việc tốt và sẽ luôn sát cánh cùng anh em trong diễn đàn để có thể làm nhẹ bớt phần nào công việc thiết kế của chúng ta.

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
http://www.cadviet.com/sub/hupload.php?fok=doc1_4.doc

Bác gia_bach và anh em xem hình ảnh em gửi theo link trên này nhé, em muốn quay rất nhiều đối tượng như vậy, làm tay vo nhiều mệt quá, rất mong nhận được sự giúp đỡ của bác và anh em!

Xin chân thành cảm ơn!

Chào bạn nqt266,

Dựa vào gợi ý của bác Gia bach, mình làm thử cái lisp này theo nguyên tắc giống như cái lisp gửi bạn muoild (để move nhiều đối tượng theo nhiều khoảng cách khác nhau). Cái lisp này sẽ cho bạn rotate nhiều nhóm đối tượng trong các vòng tròn lựa chọn mà mỗi nhóm quay theo một góc khác nhau. Nhưng bạn phải nhớ cái trật tự khi lựa chọn các vòng tròn và trật tự góc quay khi nhập.

Bạn hãy thử xem nhé.

(defun TraceCIRCLE (obj / sp ep inc pt ptlst)
(setq sp 0
     ep (* 2 pi)
     inc (/ ep 72) )
(while (       (setq pt (vlax-curve-getPointAtParam obj sp)
            ptlst (cons pt ptlst)
            sp (+ inc sp)) )
(reverse ptlst)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:mulro ()
(vl-load-com)
(setq vl '("osmode" "orthomode" "cmdecho") ; Sys Var list
   ov (mapcar 'getvar vl)) ; Get Old values
(mapcar 'setvar vl '(0 0 0))
(command "undo" "be")
(setq sscir (ssget (list (cons 0 "CIRCLE")))
     n (sslength sscir)
     i 0
     lstg (list))
(while (       (setq goc (getreal "\Nhap goc quay theo do: ")
            lstg (append lstg (list goc))
            i (1+ i))
)
(setq i 0)
(while (       (setq ent (ssname sscir i)
            cen (cdr (assoc 10 (entget ent)))
            lstp (traceCircle (vlax-ename->vla-object ent))
            ss (ssget "cp" lstp))
      (command "rotate" ss "" cen (nth i lstg))
      (setq i (1+ i))
)
(command "undo" "e")
(mapcar 'setvar vl ov) ; reset Sys Vars
(princ)
)

Chúc bạn vui.

  • 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

Xin cảm ơn bác phamthanhbinh nha.Lisp của bác dùng cũng đúng như yêu cầu của em. Xin cảm ơn rất nhiiều, chúc bác năm mới khoẻ, công việc thuận lợi và có nhiều lisp hay!

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 bạn nqt266,

Dựa vào gợi ý của bác Gia bach, mình làm thử cái lisp này theo nguyên tắc giống như cái lisp gửi bạn muoild (để move nhiều đối tượng theo nhiều khoảng cách khác nhau). Cái lisp này sẽ cho bạn rotate nhiều nhóm đối tượng trong các vòng tròn lựa chọn mà mỗi nhóm quay theo một góc khác nhau. Nhưng bạn phải nhớ cái trật tự khi lựa chọn các vòng tròn và trật tự góc quay khi nhập.

Bạn hãy thử xem nhé.

Chào bác PhamthanhBinh

Thay vì nhớ trật tự góc quay khi nhập, mình nên cho hiện sáng đối tượng lên và quay đối tượng ngay tại thời điểm mà ta nhập góc vào. Chỉ cần 1 vòng While là đủ và biến lstg của bác trong code có lẽ rằng không cần thiết.

Như vậy thì bác khỏi phải nhớ cái trật tự khi lựa chọn các vòng tròn và trật tự góc quay khi nhập rồi.

 

Tue_NV xin phép bổ sung vào code Lisp việc lưu giá trị góc nhập vào cho lần sử dụng sau luôn ( ngay trong vòng lặp While), hiện sáng đối tượng, dây tóc chuột tại tâm đường tròn và quay đối tượng ngay thời điểm mà User nhập góc. Và không quay những đường tròn mà trong nó hoặc giao với nó không có đối tượng nào cả

(defun TraceCIRCLE (obj / sp ep inc pt ptlst)
(setq sp 0
ep (* 2 pi)
inc (/ ep 72) )
(while ((setq pt (vlax-curve-getPointAtParam obj sp)
ptlst (cons pt ptlst)
sp (+ inc sp)) )
(reverse ptlst)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:mulro (/ sscir i n ent cen lstp ss ang vl ov)
(vl-load-com)
(setq vl '("osmode" "orthomode" "cmdecho") ; Sys Var list
ov (mapcar 'getvar vl)) ; Get Old values
(mapcar 'setvar vl '(0 0 0))
(command "undo" "be")
(setq sscir (ssget (list (cons 0 "CIRCLE")))
n (sslength sscir)
i 0
)
(or *ang* (setq *ang* (* (/ pi 4))))
(while ((setq ent (ssname sscir i)
cen (cdr (assoc 10 (entget ent)))
lstp (traceCircle (vlax-ename->vla-object ent))
)
(if (and (setq ss (ssget "cp" lstp)) (> (sslength ss) 1))

(command "rotate" ss "" cen 
 (/ (* 180 (setq ang (getangle cen (strcat "\nNhap goc muon quay  :  "))))
  pi)
)
)
(setq i (1+ i))
(if ang (setq *ang* ang))
)
(command "undo" "e")
(mapcar 'setvar vl ov) ; reset Sys Vars
(princ)
)

@Anh giaBach : Anh cho Tue_NV hỏi chút : ý nghĩa của hàm vl-cmdf tương tự như hàm command. Em nghĩ rằng hàm vl-cmdf có ưu điểm hơn hàm command. Không biết em suy nghĩ như vậy có đúng không? Hình như các hàm Vl, Vla có tốc độ xử lý nhanh hơn các hàm trong Lisp thì phải. Không biết Tue_NV có suy nghĩ như thế đúng không?

Anh gia_bach cùng mọi người giải thích dùm Tue_NV chổ này tí nhé.

Cảm ơn anh rất nhiều

  • 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
@Anh giaBach : Anh cho Tue_NV hỏi chút : ý nghĩa của hàm vl-cmdf tương tự như hàm command. Em nghĩ rằng hàm vl-cmdf có ưu điểm hơn hàm command. Không biết em suy nghĩ như vậy có đúng không? Hình như các hàm Vl, Vla có tốc độ xử lý nhanh hơn các hàm trong Lisp thì phải. Không biết Tue_NV có suy nghĩ như thế đúng không?

Anh gia_bach cùng mọi người giải thích dùm Tue_NV chổ này tí nhé.

Cảm ơn anh rất nhiều

Hàm vl-cmdf sẽ trả về giá trị T nếu công việc diễn ra suôn sẻ, như vậy anh có thể lấy luôn hàm vl-cmdf để làm điều kiện cho if được. Nếu suôn sẻ thì biểu thứ 1, nếu không suôn sẻ thì biểu thức 2. Đó là ý kiến riêng của em.

  • 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
..........................

(traceCircle (vlax-ename->vla-object ent))

..........................

Mặc dù trong Help đối số của các hàm vlax-curve-get*** là VLA-object .

Tuy nhiên trong thực tế, các hàm vlax-curve-get*** chấp nhận cả đối số là entity (ename data type).

Do đó có thể gọi hàm traceCircle trực tiếp với ent : (traceCircle ent)

 

...........

cho Tue_NV hỏi chút : ý nghĩa của hàm vl-cmdf tương tự như hàm command. Em nghĩ rằng hàm vl-cmdf có ưu điểm hơn hàm command. Không biết em suy nghĩ như vậy có đúng không? Hình như các hàm Vl, Vla có tốc độ xử lý nhanh hơn các hàm trong Lisp thì phải.

.........

Đúng như Tue_NV nói : chức năng của vl-cmdf tương tự như hàm command.

Tuy nhiên vl-cmdf thêm chức năng xác minh (kiểm tra tính hợp lệ) các đối số và chỉ thực thi nếu đối số là hợp lệ.

Và như ý của Nataca : Hàm vl-cmdf sẽ trả về giá trị T (true) nếu công việc diễn ra suôn sẻ

Nguợc lại command thực hiện lần luợt các đối số cho đến khi lỗi được phát hiện (nếu có). Do đó, lệnh có thể được thực thi một phần và chưa hoàn toàn kết thúc.

  • 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

Các cao thủ CadViet cho mình hỏi thế này: Mình có 1 đa giác kín, muốn chọn các đối tượng năm trong đa giác đó thì khi viết lisp sẽ dùng lựa chọn đối tượng theo cách "CP" hoặc "WP" với danh sách điểm là các đỉnh của đa giác đó. Tuy nhiên nếu đa giác đó là đa giác lồi thì không có vân đề gì, còn với đa giác lõm có hình phức tạp thì thường bị lỗi. Đấy là theo suy nghĩ của mình, bác nào có cách nào hay hoặc khắc phục nhược điểm trên của mình chỉ giúp với nhé. 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
...........

với đa giác lõm có hình phức tạp thì thường bị lỗi.

...............

phức tạp cỡ nào ?

Bạn có thể cho xem tí đuợc không ? :(

Upload file CAD .........

  • 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ác cao thủ CadViet cho mình hỏi thế này: Mình có 1 đa giác kín, muốn chọn các đối tượng năm trong đa giác đó thì khi viết lisp sẽ dùng lựa chọn đối tượng theo cách "CP" hoặc "WP" với danh sách điểm là các đỉnh của đa giác đó. Tuy nhiên nếu đa giác đó là đa giác lồi thì không có vân đề gì, còn với đa giác lõm có hình phức tạp thì thường bị lỗi. Đấy là theo suy nghĩ của mình, bác nào có cách nào hay hoặc khắc phục nhược điểm trên của mình chỉ giúp với nhé. Xin cảm ơn.

Theo mình nghĩ lỗi đó đơn thuần là do Cad. Do hình phức tạp mà bạn zoom nhỏ thì việc lựa chọn đối tượng sẽ bị sai số. Cách để giảm sai số là bạn phải chia miền thành nhiều miền nhỏ thôi. Cho quét qua từng miền, đến miền nào thì zoom extend miền đó

  • 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
Gửi bạn Lisp quay tất cả đối tuợng trong đuờng tròn.

...

Khi PP chuyển các Text sang Attribute rồi làm thành Block để User dể dàng sử dụng thì Lisp của các Bác gia_bach, phamthanhbinh và Tue_NV không thể rotate các Block này được. Xin các bác giúp update Lisp trên để có thể rotate được cả các Block, đồng thời thêm khả năng chọn Line thay vì phải nhập góc muốn quay. Chắc Lisp này sẽ được nhiều Drafters sử dụng. Nếu được thì xin các Bác viết luôn Lisp dùng insert cái Block đó rồi chọn Line để rotate các đối tuợng trong đuờng tròn. Xin xem bản vẽ minh hoạ dưới đây. Thanks you

http://www.cadviet.com/upfiles/2/rotate_block.dwg

 

47735036.jpgw921.png

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
Khi PP chuyển các Text sang Attribute rồi làm thành Block để User dể dàng sử dụng thì Lisp của các Bác gia_bach, phamthanhbinh và Tue_NV không thể rotate các Block này được. Xin các bác giúp update Lisp trên để có thể rotate được cả các Block, đồng thời thêm khả năng chọn Line thay vì phải nhập góc muốn quay. Chắc Lisp này sẽ được nhiều Drafters sử dụng. Nếu được thì xin các Bác viết luôn Lisp dùng insert cái Block đó rồi chọn Line để rotate các đối tuợng trong đuờng tròn. Xin xem bản vẽ minh hoạ dưới đây. Thanks you

http://www.cadviet.com/upfiles/2/rotate_block.dwg

 

47735036.jpgw921.png

Chào Phiphi.

Lisp của anh gia_bach, anh PhamThanhBinh và của Tue_NV viết theo yêu cầu của bạn nqt266 và chỉ có thể Rotate các đối tượng nằm trong CIRCLE, chứ chưa làm với đối tượng Block có vòng tròn.

 

Nếu bạn muốn sử dụng thêm Block thì sử dụng Lisp này của Tue_NV mới viết thêm. Mình chưa đáp ứng được yêu cầu của bạn là chọn Line thay vì phải nhập góc muốn quay vì dạo này Tue_NV cũng khá bận vì công việc. KHi nào rãnh thì Tue_NV mới viết thêm cho PP được. Thông cảm nhé

Bất kể điểm chèn Block nằm ở đâu thì Lisp chỉ quay tại tâm đường tròn đó mà thôi.

Lisp chấp nhận cả CIRCLE và Block

Bạn sử dụng Lisp này thử và cho ý kiến nhé:

 

(defun TraceCIRCLE (obj / sp ep inc pt ptlst)
(setq sp 0
ep (* 2 pi)
inc (/ ep 72) )
(while ((setq pt (vlax-curve-getPointAtParam obj sp)
ptlst (cons pt ptlst)
sp (+ inc sp)) )
(reverse ptlst)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:mulro (/ sscir i n ent cen lstp ss ang vl ov)
(vl-load-com)
(setq vl '("osmode" "orthomode" "cmdecho") ; Sys Var list
ov (mapcar 'getvar vl)) ; Get Old values
(mapcar 'setvar vl '(0 0 0))
(command "undo" "be")
(setq sscir (ssget (list (cons 0 "CIRCLE,INSERT")))
n (sslength sscir)
i 0
)
(or *ang* (setq *ang* (* (/ pi 4))))
(while ((setq ent (ssname sscir i)
cen (cdr (assoc 10 (entget ent)))
)
;Xu ly Circle
(if (= (cdr (assoc 0 (entget ent))) "CIRCLE")
 (progn	
  (setq lstp (traceCircle (vlax-ename->vla-object ent))  )

    (if (and (setq ss (ssget "cp" lstp)) (> (sslength ss) 1))
(command "rotate" ss "" cen 
		(/ (* 180 (setq ang (getangle cen (strcat "\nNhap goc muon quay  :  "))))
  			pi)

)
     )
 );progn
);if
;Xu ly Block
(if (= (cdr (assoc 0 (entget ent))) "INSERT")
 (progn	
  (setq ob (vlax-ename->vla-object ent)  )
(foreach x (vlax-invoke ob 'explode)
   (if (= (vlax-get x 'ObjectName) "AcDbCircle")
     (progn
	(setq cen (vlax-safearray->list (variant-value (vla-get-Center x))))
	(command "rotate" ent "" cen 
		      (/ (* 180 (setq ang (getangle cen (strcat "\nNhap goc muon quay  :  "))))
  			pi)

        )
	(vla-erase x)
     )  (vla-erase x)
          );if
);foreach	

 );progn
);if

(setq i (1+ i))
(if ang (setq *ang* ang))
)
(command "undo" "e")
(mapcar 'setvar vl ov) ; reset Sys Vars
(princ)
)

  • 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
.........

Xin các bác giúp update Lisp trên để có thể rotate được cả các Block, đồng thời thêm khả năng chọn Line thay vì phải nhập góc muốn quay.

.........................

Gửi bác Lisp quay Block thuộc tính tại điểm chèn.

góc có thể nhập trực tiếp hoặc Pick 2 điểm.

(defun c:rob(/ ang doc ov vl)               ;Rotate Block at Center
;;  By : Gia Bach, Copyrightゥ December 2009                      ;;
;;  Contact : gia_bach @  www.CadViet.com                        ;;
 (defun *error* (msg)
   (if ov (mapcar 'setvar vl ov))
   (if (not(wcmatch (strcase msg) "*BREAK,*EXIT*,*CANCEL*"))
     (princ (strcat "\n** Error: " msg " **")))
   (princ))  
 (vl-load-com)
 (setq doc (vla-get-activedocument(vlax-get-acad-object))
vl '("osmode" "orthomode" "cmdecho")    ; Sys Var list
ov  (mapcar 'getvar vl))                ; Get Old values
 (mapcar 'setvar vl '(33 0 0))
 (or *ang* (setq *ang* (/ pi 4)))
 (princ "\n       Chon Block de quay :")
 (while (ssget (list (cons 0 "INSERT")(cons 62 1)))
   (setq ang (getangle (strcat "\nNhap goc muon quay <" (angtos *ang*) "> hay Pick diem : ")))
   (if ang (setq *ang* ang))
   (vlax-for e (vla-get-activeSelectionSet doc)
     (vla-rotate e (vla-get-InsertionPoint e) *ang*))
   (princ "\n       Chon Block de quay :")
   )
 (mapcar 'setvar vl ov) ; reset Sys Vars
 (princ)
 )

  • 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 muốn có một lisp thực hiện 2 lệnh sau:

F (fillet) enter

R (rectangle) enter

0 enter

Mong được giúp đỡ! :(

Mại dzô : Link

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 muốn có một lisp thực hiện 2 lệnh sau:

F (fillet) enter

R (rectangle) enter

0 enter

Mong được giúp đỡ! :(

Muốn giúp nhưng hông hiể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

thay vì phải lặp lại lệnh fillet (F), nhập tiếp tham số ®, rồi nhập tiếp tham số (0) mất công. Em muốn có Lisp thực hiện công việc trên. Cảm ơn bác Duy nhiều :rolleyes:

@all: sorry ở trên em nói nhầm tham số R. hi hi :(

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
thay vì phải lặp lại lệnh fillet (F), nhập tiếp tham số ®, rồi nhập tiếp tham số (0) mất công. Em muốn có Lisp thực hiện công việc trên. Cảm ơn bác Duy nhiều :rolleyes:

@all: sorry ở trên em nói nhầm tham số R. hi hi :(

Cái này bạn Nhập Bán kính bo có 1 lần rồi sử dụng cho các lần sau mà.

Nếu bạn thích thì đây :

(defun c:fr()
(setvar "FILLETRAD" 0)
(command "fillet" pause)
)

  • 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
Gửi bác Lisp quay Block thuộc tính tại điểm chèn.

góc có thể nhập trực tiếp hoặc Pick 2 điểm.

(defun c:rob(/ ang doc ov vl)               ;Rotate Block at Center
;;  By : Gia Bach, Copyrightゥ December 2009                      ;;
;;  Contact : gia_bach @  www.CadViet.com                        ;;
 (defun *error* (msg)
   (if ov (mapcar 'setvar vl ov))
   (if (not(wcmatch (strcase msg) "*BREAK,*EXIT*,*CANCEL*"))
     (princ (strcat "\n** Error: " msg " **")))
   (princ))  
 (vl-load-com)
 (setq doc (vla-get-activedocument(vlax-get-acad-object))
vl '("osmode" "orthomode" "cmdecho")    ; Sys Var list
ov  (mapcar 'getvar vl))                ; Get Old values
 (mapcar 'setvar vl '(33 0 0))
 (or *ang* (setq *ang* (/ pi 4)))
 (princ "\n       Chon Block de quay :")
 (while (ssget (list (cons 0 "INSERT")(cons 62 1)))
   (setq ang (getangle (strcat "\nNhap goc muon quay <" (angtos *ang*) "> hay Pick diem : ")))
   (if ang (setq *ang* ang))
   (vlax-for e (vla-get-activeSelectionSet doc)
     (vla-rotate e (vla-get-InsertionPoint e) *ang*))
   (princ "\n       Chon Block de quay :")
   )
 (mapcar 'setvar vl ov) ; reset Sys Vars
 (princ)
 )

Bác ráng làm cho Lisp pick luôn cả Line đê. Tkx

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ừ một yêu cầu của e mà các bác phát triển ra nhìu ghê.. Thật là hay quá. Chúc anh em diễn đàn năm mới tốt lành nha!!!

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

Xin hỏi mọi người: Với mỗi lệnh Autocad hay phần mềm trên nền Cad thì chắc đều có code lệnh đó dạng Visual Lisp, vậy code này mình có thể xem được ở đâu trong bộ cài Cad!!!

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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×