CAD在大面积的填充中,如何检查有没有重复填充?
发布网友
发布时间:2023-02-19 02:27
我来回答
共1个回答
热心网友
时间:2023-09-24 06:18
用手工检查的话,有点不适合,效率低,可以使用autoLISP来查找填充是否重叠。
(defun C:ZX69查找填充是否重复 ( / #k1 #os1 #p2 &k1 &k2 &kw1 &kw2 i p1 ss x)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setvar "dimzin" 0)
(vl-load-com) ;;加载vlax扩展函数
(setq #os1 (getvar "osmode"))
(princ "\n请选择填充")
(setq &kw1 (ssget '((0 . "HATCH"))))
(if (/= &kw1 nil)
(progn
(setvar "osmode" 0)
(setq &k1 (ssname &kw1 0) ss (ssadd))
(while &k1
(setq &kw1 (ssdel &k1 &kw1);取得填充对象
#k1 (entget &k1);取得填充属性
#p2 (mapcar 'cdr (vl-remove-if '(lambda (X) (/= 11 (car x)) ) #k1))
;取得填充各个端点
p1 (car #p2)
#p2 (reverse #p2)
#p2 (cons p1 #p2)
)
(setq &kw2 (ssget "f" #p2 '((0 . "HATCH"))));根据端点搜索填充
(if (and (/= &kw2 nil) (> (sslength &kw2) 1));如果找到的填充超过两个那么就选择出来。
(progn
(setq i 0)
(repeat (sslength &kw2)
(setq &k2 (ssname &kw2 i)
ss (ssadd &k2 ss)
i (+ i 1)
)
)
)
)
(setq &k1 (ssname &kw1 0))
)
(setvar "osmode" #os1)
(if (> (sslength ss) 0) (sssetfirst nil ss))
)
)
(prin1)
);复制到记事本,以【.lsp】为后缀命名,autoLISP程序加载了,命令:ZX69,就可以查找重叠的填充了。
追问
加载你编辑的程序,但是输入命令出现“未知。怎么解决呢?
追答
文件命名?你文件是怎么命名的,autoLISP文件后缀是【.lsp】,
只有这个后缀才可以加载。