将实体压缩为块
大家好假设您有4个实体,分别命名为ent(1-4)ent 1、ent 2和ent 3。Ent 4触摸Ent 2和3。
有谁能提出一种方法,将这些转化为一个选择集et,而不选择其中的多个。最终,图形中会有多组实体
可悲的是,这台计算机上没有autocad,所以我求助于mspaint进行了一个糟糕的快速修复
谢谢
奥利
你好奥利,
如果安装了Express Tools,请尝试快速选择例程
从菜单中
快速>>选择工具>>快速选择
或FS型
素描很好!
当做
杰米 虽然如果您想在LISP中使用Jammie的解决方案可能会有问题,但Express工具在LISP中很难操作。。。
谢谢,这是一个令人难以置信的方便工具,不幸的是,它并没有帮助我这个感谢虽然。
到目前为止,这与预期的最终结果不同的是,用户在开始时选择一个实体,而不是在窗口层上找到第一条非块的2点线。此外,添加到列表中还有几个警报。最终,如果满足这些条件,则当前实体将添加到包含第一个实体的连接实体的选择集。
(Defun C:test()
;Cleaning your variables
(setq temp_ent_dxfgroup nil)
;Load vlax support
(vl-load-com)
;Begin scriptiong
(Setq window_id_cntr 0)
(setq ent_test(car(entsel)))
(setq ent_test(vlax-ename->vla-object ent_test))
(setq ent_orientation (vlax-get-property ent_test 'angle))
(setq ent_length (vlax-get-property ent_test 'length))
(Setq ent_orientation(angtos ent_orientation 0)) ;Angle in degrees of first object
(setq ent_orientation(atoi ent_orientation))
(setq ent_start (vlax-curve-getStartPoint ent_test)) ;Get object startpoint
(if(or (= ent_orientation 0) (= ent_orientation 180)) ;Get orientation of the line horizontal or vertical
(progn
(setqalignment "x") ;Use this to determine which axis to set range scope
(setq static_val (cadr ent_start))
(setq start_val (car ent_start))
(if (= ent_orientation 0)
(progn
(setq param1 start_val)
(setq param2 (+ start_val ent_length))
)
)
(if (= ent_orientation 180)
(progn
(setq param1 start_val)
(setq param2 (+ start_val ent_length))
)
)
)
)
(if(or (= ent_orientation 90) (= ent_orientation 270))
(progn
(setqalignment "y")
(setq static_val (car ent_start))
(setq start_val (cadr ent_start))
(if (= ent_orientation 90)
(progn
(setq param1 start_val)
(setq param2 (+ start_val ent_length))
)
)
(if (= ent_orientation 270)
(progn
(setq param1 start_val)
(setq param2 (+ start_val ent_length))
)
)
) ; the first parameters have been derived now loop through
) ; each of the remaining entites
; first entity parameters defined create selection set and check points against definitions
(Setq sset_ent (ssget "X"
'(
(-4 . "<OR")
(-4 . "<AND")
(8 . "Windows")
(-4 . "AND>")
(-4 . "<NOT")
(0 . "INSERT")
(-4 . "NOT>")
(-4 . "OR>")
)
)
)
(setq cntr 0)
(while (< cntr (sslength sset_ent))
(setq temp_ent(ssname sset_ent cntr))
(setq temp_ent_dxfgroup(entget temp_ent))
(foreach ctemp_ent_dxfgroup
(if (= 10 (car c))
(setq p_list
(append p_list
(list
(cdr c)
)
)
)
)
)
(foreach c p_list
(Setq x_point (car c))
(Setq y_point(cadr c))
(if (= alignment "x")
(progn
(if (= y_point static_val)
(progn
(if (and (>= x_point param1)(<= x_point param2))
(alert "WORKING UPTO AND HERE")
)
)
)
)
)
(if (= alignment "y")
(progn
(if (= x_point static_val)
(progn
(if (and (>= y_point param1)(<= y_point param2))
(alert "WORKING UPTO HERE")
)
)
)
)
)
)
(Setq cntr (+ cntr 1)) ;exit while loop
)
)
可悲的是,并不是每一幅画都是我自己画的。用于绘制窗口的其他一些方法包括重叠线和矩形。
啊,不用担心,我只是想把这个想法说出来
页:
[1]