嗨,Jozef,
很抱歉,由于工作负荷过重,回复时间太晚。
我已经修改了程序,将动态块“Flow Damper JL”和相关标记字符串“SIZE”包括在内,因此请尝试以下程序并告诉我。
- (defun c:Test (/ int sel ent get obj bks lws ins)
- ;; Tharwat . Date: 19.Jun.2018 ;;
- (and
- (setq int -1
- sel (ssget "_:L"
- '((-4 . "<OR")
- (-4 . "<AND")
- (0 . "*POLYLINE")
- (6 . "TZB_100,TZB_125,TZB_160")
- (-4 . "AND>")
- (-4 . "<AND")
- (0 . "INSERT")
- (2 . "`*U*,Flow damper-JL,dn_cu")
- (-4 . "AND>")
- (-4 . "OR>")
- )
- )
- )
- (progn
- (while (setq ent (ssname sel (setq int (1+ int))))
- (cond ((wcmatch (cdr (assoc 0 (setq get (entget ent)))) "*LINE")
- (setq lws (cons get lws))
- )
- ((wcmatch (vla-get-effectivename
- (setq obj (vlax-ename->vla-object ent))
- )
- "Flow damper-JL,dn_cu"
- )
- (setq bks (cons (list obj get) bks))
- )
- )
- )
- (and bks lws)
- )
- (foreach lw lws
- (foreach bk bks
- (and
- (setq ins (cdr (assoc 10 (cadr bk))))
- (or (equal
- (distance
- (vlax-curve-getclosestpointto (cdr (assoc -1 lw)) ins)
- ins
- )
- 0.0
- 1e-4
- )
- (vlax-invoke
- (car bk)
- 'intersectwith
- (vlax-ename->vla-object (cdr (assoc -1 lw)))
- AcExtendnone
- )
- )
- (vl-some
- '(lambda (att)
- (and
- (wcmatch (vla-get-tagstring att) "DN,SIZE")
- (progn (vla-put-textstring att (substr (cdr (assoc 6 lw)) 5)) t)
- )
- )
- (vlax-invoke (car bk) 'getattributes)
- )
- (setq bks (vl-remove bk bks))
- )
- )
- )
- )
- (princ)
- ) (vl-load-com)
|