Lisp quay mọi loại đối tượng quanh tâm chính nó.
20:40 Được đăng bởi Phạm Quốc Duy
-1.Cách ứng sử với từng đối tượng trong 1 nhóm đối tượng mà lâu nay mình viết hơi dài nay theo kiểu ày thì tiết kệm kha khá.
-2. Cách lưu lại giá trị nhập vào như trên.
Bạn copy nội dung và tạo file lisp nhé!
(defun c:rb()
(defun ST:Geom-Center (ent / p1 p2)
(vla-getboundingbox (vlax-ename->vla-object ent) 'p1 'p2)
(setq p1 (vlax-safearray->list p1)
p2 (vlax-safearray->list p2)
pt (mapcar '* (mapcar '+ p1 p2) '(0.5 0.5 0.5))
)
)
(or ang (setq ang 180))
(setq ang (cond ((getreal (strcat "\nGoc quay < " (rtos ang 2 2) " >:")))(ang)))
(foreach e (acet-ss-to-list (ssget))
(command ".rotate" e "" "_non" (ST:Geom-Center e) ang )
))





































14:20 Ngày 23 tháng 2 năm 2012
Em đang tự học Lisp.Anh xem giùm em có lỗi chỗ nào mà chạy ko được ạ.Em cám ơn anh !
(defun C:DRWHATCH (/ OLD_CMDECHO PT HATCH_NAME HATCH_SCALE HATCH_ANGLE)
(prompt "\n DRWHATCH- Draw hatch by picking points ")
(setq OLD_CMDECHO (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq HATCH_NAME (getstring "\n Hatch pattern name : "))
(setq HATCH_SCALE (getdist "\n Hatch scale : "))
(setq HATCH_ANGLE (getreal "\n Hatch angle : "))
(setq PT (getpoint "\n First point : "))
(command ".pline" PT)
(while (setq PT (getpoint PT "\n Next point : "))
(command PT)
)
(command "C")
(command ".Select" "L")
(command ".HATCH" HATCH_NAME HATCH_SCALE HATCH_ANGLE "L" "")
(command ".erase" "P" "")
(setvar "CMDECHO" OLD_CMDECHO)
(prompt "\n\n Program complete ")
(princ)
)
19:25 Ngày 23 tháng 2 năm 2012
1-Dòng (command ".Select" "L") bạn thiếu một dấu "" nên lệnh chọn chưa kết thúc. Thật ra dòng này thừa vì chỉ cần chọn last trong lúc thực hiện lệnh hatch là được.
2-Sửa thành như sau: là chạy phe phé :-D
(defun C:DRWHATCH (/ OLD_CMDECHO PT HATCH_NAME HATCH_SCALE HATCH_ANGLE)
(prompt "\n DRWHATCH- Draw hatch by picking points ")
(setq OLD_CMDECHO (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq HATCH_NAME (getstring "\n Hatch pattern name : "))
(setq HATCH_SCALE (getdist "\n Hatch scale : "))
(setq HATCH_ANGLE (getreal "\n Hatch angle : "))
(setq PT (getpoint "\n First point : "))
(command ".pline" PT)
(while (setq PT (getpoint PT "\n Next point : "))
(command PT)
)
(command "C")
(command "hatch" HATCH_NAME HATCH_SCALE HATCH_ANGLE "last" "")
(command ".erase" "P" "")
(setvar "CMDECHO" OLD_CMDECHO)
(prompt "\n\n Program complete ")
(princ)
)
3-Bạn dùng nhập chuỗi để báo tên kiểu hatch là cực kỳ oái ăm. Vì ai mà nhớ nổi. Và bạn cũng không lưu giá trị lần trước nên có khi dùng lisp này vẽ chập hơn của cad cũng nên.
23:46 Ngày 23 tháng 2 năm 2012
Dạ được rồi ạ.Cám ơn anh ! Em mới học nên còn máy móc như trong sách hướng dẫn.Em sẽ tìm hiểu thêm ạ
01:31 Ngày 26 tháng 3 năm 2012
Bạn MKHOA. Muốn quay cố định 90 thì dùng cái này.
(defun c:rb()
(defun ST:Geom-Center (ent / p1 p2)
(vla-getboundingbox (vlax-ename->vla-object ent) 'p1 'p2)
(setq p1 (vlax-safearray->list p1)
p2 (vlax-safearray->list p2)
pt (mapcar '* (mapcar '+ p1 p2) '(0.5 0.5 0.5))
)
)
(foreach e (acet-ss-to-list (ssget))
(command ".rotate" e "" "_non" (ST:Geom-Center e) 90 )
))
21:47 Ngày 27 tháng 3 năm 2012
Thks bác Duy nhá Cheer!!