Thứ Tư, 21 tháng 9, 2011

Lisp quay mọi loại đối tượng quanh tâm chính nó.

*Lisp này mình sưu tầm chủ yếu là để học, có 2 điều mình học đc rong lisp này
-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 )
))




6 nhận xét:

  1. 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)
    )

    Trả lờiXóa
  2. 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.

    Trả lờiXóa
  3. 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 ạ

    Trả lờiXóa
  4. 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 )
    ))

    Trả lờiXóa
  5. Thks bác Duy nhá Cheer!!

    Trả lờiXóa
  6. Nếu em chỉ muốn đối tượng được chọn là text và mtext thôi thì sửa như thế nào hả bác?

    Trả lờiXóa

Khi viết nhận xét mong bạn không đứng vai trò nặc danh! Bạn có thể chọn Name/Url trong đó Url là http://duy782006.blogspot.com/ như vậy hay hơn nặc danh bạn nhé.