 - (defun c:ttt (/)
- (if (setq s (ssget '((0 . "*polyline")
- (8 . "D01A,D02A,D03A,D04A,D05A,D05B,S01A,S01B,S02A,P05A,P04A,P03A,P02A,P01A"))))
- (progn
- (setq d1 (ssadd) d2 (ssadd) d3 (ssadd) d4 (ssadd) d5 (ssadd) d5b (ssadd)
- s1 (ssadd) s1b (ssadd) s2 (ssadd) p5 (ssadd) p4 (ssadd)
- p3 (ssadd) p2 (ssadd) p1 (ssadd)i 0)
- (while (< i (sslength s))
- (if (= "D01A" (cdr(assoc 8 (entget (ssname s i)))))
- (ssadd (ssname s i) d1))
- (if (= "D02A" (cdr(assoc 8 (entget (ssname s i)))))
- (ssadd (ssname s i) d2))
- (if (= "D03A" (cdr(assoc 8 (entget (ssname s i)))))
- (ssadd (ssname s i) d3))
- (if (= "D04A" (cdr(assoc 8 (entget (ssname s i)))))
- (ssadd (ssname s i) d4))
- (if (= "D05A" (cdr(assoc 8 (entget (ssname s i)))))
- (ssadd (ssname s i) d5))
- (if (= "D05B" (cdr(assoc 8 (entget (ssname s i)))))
- (ssadd (ssname s i) d5b))
- (if (= "S01A" (cdr(assoc 8 (entget (ssname s i)))))
- (ssadd (ssname s i) s1))
- (if (= "S01B" (cdr(assoc 8 (entget (ssname s i)))))
- (ssadd (ssname s i) s1b))
- (if (= "P05A" (cdr(assoc 8 (entget (ssname s i)))))
- (ssadd (ssname s i) p5))
- (if (= "P04A" (cdr(assoc 8 (entget (ssname s i)))))
- (ssadd (ssname s i) p4))
- (if (= "P03A" (cdr(assoc 8 (entget (ssname s i)))))
- (ssadd (ssname s i) p3))
- (if (= "P02A" (cdr(assoc 8 (entget (ssname s i)))))
- (ssadd (ssname s i) p2))
- (if (= "P01A" (cdr(assoc 8 (entget (ssname s i)))))
- (ssadd (ssname s i) p1))
- (setq i (+ i 1))
- );while
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;start d1
- (setq i 0)
- (while (< i (sslength d1))
- (setq d11 (ssname d1 i))
- (vla-getboundingbox (vlax-ename->vla-object d11) 'd1bp 'd1up)
- (if (not d1outpl)
- (setq d1outpl d11
- d1out_box (list (safearray-value d1bp) (safearray-value d1up)))
- (progn
- (vla-getboundingbox (vlax-ename->vla-object d11) 'd1bp 'd1up)
- (setq d1bp (safearray-value d1bp)
- d1up (safearray-value d1up)
- d1bp0 (car d1out_box)
- d1up0 (cadr d1out_box))
- (if (and (and (< (car d1bp) (car d1bp0))
- (< (cadr d1bp) (cadr d1bp0)))
- (and (> (car d1up) (car d1up0))
- (> (cadr d1up) (cadr d1up0)))
- )
- (setq d1outpl d11
- d1out_box (list d1bp d1up))
- )
- )
- )
- d1out_box
- (setq i (+ i 1))
- (command "line" d1bp d1up "")
- (setq d1c1 d1bp d1c2 d1up)
- );while d1 end
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;start d2
- (setq i 0)
- (while (< i (sslength d2))
- (setq d22 (ssname d2 i))
- (vla-getboundingbox (vlax-ename->vla-object d22) 'd2bp 'd2up)
- (if (not d2outpl)
- (setq d2outpl d22
- d2out_box (list (safearray-value d2bp) (safearray-value d2up)))
- (progn
- (vla-getboundingbox (vlax-ename->vla-object d22) 'd2bp 'd2up)
- (setq d2bp (safearray-value d2bp)
- d2up (safearray-value d2up)
- d2bp0 (car d2out_box)
- d2up0 (cadr d2out_box))
- (if (and (and (< (car d2bp) (car d2bp0))
- (< (cadr d2bp) (cadr d2bp0)))
- (and (> (car d2up) (car d2up0))
- (> (cadr d2up) (cadr d2up0)))
- )
- (setq d2outpl d22
- d2out_box (list d2bp d2up))
- )
- )
- )
- d2out_box
- (setq i (+ i 1))
- (command "line" d2bp d2up "")
- (setq d2c1 d2bp d2c2 d2up)
- );while d2 end
- );progn
- );if
- (princ)
- );defun
18楼的程序经测试是可用且无问题的,可加入我的主程序时出错了,下面错误提示是发现这段(command "line" d2bp d2up "")里有许多坐标,CAD命令导致错误!
Command: ttt
Select objects: Specify opposite corner: 2 found
Select objects: ; error: bad argument value: AutoCAD command: #<safearray...>
因为我的主程序里需要调用图层的坐标点,所以将18楼eachy斑竹的程序加入到我的程序里。
经测试,无限多个*pline,程序无法得到最外面的*pline(将所有选中的*pline的坐标全记录了),请eachy斑竹再帮我看看问题出在哪? |