选择图中的若干物体,则凡与这些物体相接触或相交的其它物体被自动改到“图层1”。
本帖最后由 yunfengning 于 2013-10-23 11:41 编辑申请一个lsp程序:选择图中的若干物体,则凡与这些物体相接触或相交(即粘连)的其它物体被自动改到“图层1”。
补充上传测试的DWG文件,期待高手出手。 本帖最后由 llsheng_73 于 2013-10-23 16:53 编辑
针对你所给的图形测试没问题,但对于一些其它内容,比如图块等下边的代码肯定行不通
(defun SStoES(s / m n e)
(if s(progn
(setq n(sslength s)m 0)
(while(< m n)
(setq e(if e(append e(list(ssname s m)))(list(ssname s m)))m(1+ m))))
)e)
(defun C:tt(/ s1 s e f)
(VL-LOAD-COM)
(setq la"临时图层1")
(setq s1(ssget'((0 . "LINE,LWPOLYLINE,POLYLINE,SPLINE,CIRCLE")(62 . 4))))
(if s1(progn
(setq s1(SStoES s1)
s(SStoES(ssget"X"(list(cons -4 "<NOT")(cons 8 la)(cons -4 "NOT>")))))
(foreach e s1(if(member e s)(setq s(vl-remove e s))))
(foreach e s1
(foreach f s
(if(vlax-invoke(vlax-ename->vla-object e)'IntersectWith(vlax-ename->vla-object f)0)
(vlax-put-property(vlax-ename->vla-object f)'Layer la))
)
)
)
)
) 这些物体 ? 那些?
相接触或相交?公差容忍度?
上述 得有验证的样本文件 为依据,请上传 (*.Dwg) 联系我QQ496968041 本帖最后由 Andyhon 于 2013-10-23 14:15 编辑
;;; 请依实务修订补强
(defun C:try ()
(setq ss (ssget '((0 . "Lwpolyline,Circle")))
i-1
)
(while (setq ee (ssname ss (setq i (1+ i))))
(setq dat (entget ee))
(cond
((= (dxf 0 dat) "CIRCLE")
(setq po (dxf 10 dat)
rr (dxf 40 dat)
vv 0.0
aa (/ Pi 64) ; maybe something
pts nil
)
(repeat 128 ; 360
(setq pts (cons (polar po (setq vv (+ vv aa)) rr) pts))
))
(T ; LwPolyLine
(setq pts (acet-geom-pline-point-list ee nil))
))
(setq ss2 (ssget "CP" pts))
(ssdel ee ss2)
(command "Chprop" ss2 "" "La" "1" "c" "ByLayer" "")
)
)
CAD2004测试无反应。大侠加油哈。 看来有些功课得补上
1. (defun dxf ....
2. ET (acet-***) 得靠它
论坛上有很多资料 加油 7楼llsheng_73的程序CAD2004测试符合要求,多谢哈。 这样改,图层不是乱了,
页:
[1]