我发现这是你的旧代码,稍加修改就可以了。
仍然存在一些错误,并且没有进行优化。
(defun c:VHlines ( / _Ang *error* kw e i sn ss )
;;; Tharwat 13. Dec. 2012;;;
;;; modified by miller87 27/04/2015
(defun _Ang (e) (angle (cddr (assoc 10 e)) (cddr (assoc 11 e))))
(defun *error* (msg) (princ "\n Error...*Cancelled*"))
(if (and (progn
(setq kw "Vertical"
)
)
(setq s(ssadd)
ss (ssget "_x" (list '(0 . "LINE") (cons 410 (getvar 'ctab))))
)
)
(progn
(repeat (setq i (sslength ss))
(setq sn (ssname ss (setq i (1- i)))
e(entget sn)
)
(cond ((eq kw "Vertical")
(if (or (equal (_Ang e) (* pi 0.5)) (equal (_Ang e) (* pi 1.5)))
(ssadd sn s)
)
)
((eq kw "Horizontal")
(if (or (equal (_Ang e) pi) (equal (_Ang e) 0.))
(ssadd sn s)
)
)
(t
(if (or (equal (_Ang e) (* pi 0.5)) (equal (_Ang e) (* pi 1.5)) (equal (_Ang e) pi) (equal (_Ang e) 0.))
(ssadd sn s)
)
)
)
)
(sssetfirst nil s)
)
)
(princ)
)
也许 吧:
(defun c:mvert (/ ss i en ed p1 p2 z1 z2 ll ip bn)
(and (setq ss (ssget "X" '((0 . "LINE"))))
(setq i 0)
(while (setq en (ssname ss i))
(setq ed (entget en)
p1 (cdr (assoc 10 ed))
p2 (cdr (assoc 11 ed)))
(and (equal (carp1) (carp2) 1e-8)
(equal (cadr p1) (cadr p2) 1e-8)
(setq z1 (caddr p1)
z2 (caddr p2)
ll (abs (- z1 z2))
ip (list (car p1) (cadr p2) (+ (min z1 z2) (* ll 0.5)))
bn (strcat "M" (rtos ll 2 0)))
(tblsearch "BLOCK" bn)
(entmake (list (cons 0 "INSERT")(cons 2 bn)(cons 10 ip))))
(setq i (1+ i))))
(prin1))
插入角度没有意义,因为所有线点值都是WCS。
-大卫 作品
我用我的块的正确名称进行了修改:
50M、100M、150M、200M、250M、300M
以下是最终结果:
(defun c:mvert (/ )
(and (setq ss (ssget "X" '((0 . "LINE"))))
(setq i 0)
(while (setq en (ssname ss i))
(setq ed (entget en)
p1 (cdr (assoc 10 ed))
p2 (cdr (assoc 11 ed)))
(and (equal (carp1) (carp2) 1e-
(equal (cadr p1) (cadr p2) 1e-
(setq z1 (caddr p1)
z2 (caddr p2)
ll (/ (abs (- z1 z2)) 10.0)
lll (* ll 10.0)
ip (list (car p1) (cadr p2) (+ (min z1 z2) (* lll 0.5)))
bn (strcat(rtos ll 2 0) "M"))
(tblsearch "BLOCK" bn)
(entmake (list (cons 0 "INSERT")(cons 2 bn)(cons 10 ip))))
(setq i (1+ i))))
(prin1)
)
我可以更改块的名称,但操纵lisp更令人愉快!!
谢谢David 英雄联盟
我确实假设块表定义存在。
您始终可以添加块创建或插入调用
-戴维斯
页:
1
[2]