Lisp Cut dim, cut hatch, align it trong AutoLisp Đã đăng Tháng 1 19, 2007 · Trả lời báo cáo Sau khi tìm hiểu, mình đã tìm được cái này trên diễn đàn. Lisp cắt Dim. Cách dùng: - Sau khi upload, dùng lệnh CD. - click điểm 1 để chọn vị trí cắt chân Dim, - click điểm 2 để chọn vị trí cắt đường Dim. Nếu không muốn cắt chân Dim hoặc đường Dim thì nhấn phím dấu cách. (defun c:cd (/ entdt dcat1 dcat2 sodimsua index sodt ssdt tt) (defun cdim (entdt pchan pduong / tt old10 old13 old14 new10 new13 new14 p10n p13n p14n p10o p13o p14o gocduong gocchan pchanb pduongb loaidim ) (defun chanvuonggoc (ph p1 p2 / ptemp pkq goc) (setq goc (+ (angle p1 p2) (/ pi 2.0)) ptemp (polar ph goc 1000.0) pkq (inters ph ptemp p1 p2 nil) ) pkq ) (setq tt (entget entdt) old10 (assoc '10 tt) old13 (assoc '13 tt) old14 (assoc '14 tt) p10o (cdr old10) p13o (cdr old13) p14o (cdr old14) loaidim (logand (cdr (assoc '70 tt)) 7) gocduong (cond ((= loaidim 1) (angle p13o p14o)) ((= loaidim 0) (cdr (assoc '50 tt))) (t nil) ) pchan (cond (pchan (list (car pchan) (cadr pchan) 0.0)) (t pchan) ) pduong (cond (pduong (list (car pduong) (cadr pduong) 0.0)) (t pduong) ) ) (if gocduong (progn (if pchan (setq pchanb (polar pchan gocduong 1000.0) p13n (chanvuonggoc (list (car p13o) (cadr p13o) 0.0) pchan pchanb) p14n (chanvuonggoc (list (car p14o) (cadr p14o) 0.0) pchan pchanb) new13 (cons 13 p13n) new14 (cons 14 p14n) tt (subst new13 old13 tt) tt (subst new14 old14 tt) ) ) (if pduong (setq pduongb (polar pduong gocduong 1000.0) p10n (chanvuonggoc (list (car p10o) (cadr p10o) 0.0) pduong pduongb) new10 (cons 10 p10n) tt (subst new10 old10 tt) ) ) (entmod tt) ) ) gocduong ) (setq ssdt (ssget '((0 . "DIMENSION"))) dcat1 (getpoint "\nDiem cat chan DIM: ") dcat2 (getpoint "\nDiem cat duong DIM: ") dcat1 (cond (dcat1 (trans dcat1 1 0)) (t nil) ) dcat2 (cond (dcat2 (trans dcat2 1 0)) (t nil) ) sodt (sslength ssdt) index 0 sodimsua 0 ) (repeat sodt (setq entdt (ssname ssdt index) index (1+ index) tt (entget entdt) ) (if (cdim entdt dcat1 dcat2) (setq sodimsua (1+ sodimsua)) ) ) (princ (strcat "\nSo duong dim da sua: " (itoa sodimsua))) )
Lisp Cut dim, cut hatch, align it
trong AutoLisp
Đã đăng · Trả lời báo cáo
Sau khi tìm hiểu, mình đã tìm được cái này trên diễn đàn.
Lisp cắt Dim.
Cách dùng:
- Sau khi upload, dùng lệnh CD.
- click điểm 1 để chọn vị trí cắt chân Dim,
- click điểm 2 để chọn vị trí cắt đường Dim.
Nếu không muốn cắt chân Dim hoặc đường Dim thì nhấn phím dấu cách.
(defun c:cd (/ entdt dcat1 dcat2 sodimsua index sodt ssdt tt)
(defun cdim (entdt pchan pduong / tt old10
old13 old14 new10 new13 new14 p10n
p13n p14n p10o p13o p14o gocduong
gocchan pchanb pduongb loaidim
)
(defun chanvuonggoc (ph p1 p2 / ptemp pkq goc)
(setq
goc (+ (angle p1 p2) (/ pi 2.0))
ptemp (polar ph goc 1000.0)
pkq (inters ph ptemp p1 p2 nil)
)
pkq
)
(setq
tt (entget entdt)
old10 (assoc '10 tt)
old13 (assoc '13 tt)
old14 (assoc '14 tt)
p10o (cdr old10)
p13o (cdr old13)
p14o (cdr old14)
loaidim (logand (cdr (assoc '70 tt)) 7)
gocduong (cond
((= loaidim 1) (angle p13o p14o))
((= loaidim 0) (cdr (assoc '50 tt)))
(t nil)
)
pchan (cond
(pchan (list (car pchan) (cadr pchan) 0.0))
(t pchan)
)
pduong (cond
(pduong (list (car pduong) (cadr pduong) 0.0))
(t pduong)
)
)
(if gocduong
(progn
(if pchan
(setq
pchanb (polar pchan gocduong 1000.0)
p13n (chanvuonggoc (list (car p13o) (cadr p13o) 0.0) pchan pchanb)
p14n (chanvuonggoc (list (car p14o) (cadr p14o) 0.0) pchan pchanb)
new13 (cons 13 p13n)
new14 (cons 14 p14n)
tt (subst new13 old13 tt)
tt (subst new14 old14 tt)
)
)
(if pduong
(setq
pduongb (polar pduong gocduong 1000.0)
p10n (chanvuonggoc (list (car p10o) (cadr p10o) 0.0) pduong pduongb)
new10 (cons 10 p10n)
tt (subst new10 old10 tt)
)
)
(entmod tt)
)
)
gocduong
)
(setq ssdt (ssget '((0 . "DIMENSION")))
dcat1 (getpoint "\nDiem cat chan DIM: ")
dcat2 (getpoint "\nDiem cat duong DIM: ")
dcat1 (cond
(dcat1 (trans dcat1 1 0))
(t nil)
)
dcat2 (cond
(dcat2 (trans dcat2 1 0))
(t nil)
)
sodt (sslength ssdt)
index 0
sodimsua 0
)
(repeat sodt
(setq entdt (ssname ssdt index)
index (1+ index)
tt (entget entdt)
)
(if (cdim entdt dcat1 dcat2)
(setq sodimsua (1+ sodimsua))
)
)
(princ (strcat "\nSo duong dim da sua: " (itoa sodimsua)))
)