怎么选择这种PL线上的块
本帖最后由 llsheng_73 于 2015-11-24 10:55 编辑
(defun c:tt(/ e a b s i)
(if(and(setq e(car(entsel)))
(member(cdr(assoc 0(entget e)))'("LINE""ARC""CIRCLE""ELLIPSE""SPLINE""LWPOLYLINE""POLYLINE"))
(vlax-method-applicable-p(setq e(vlax-ename->vla-object e))'getboundingbox))
(progn(vla-getboundingbox e'a'b)
(if(setq i 0 s(ssget"X"(list'(0 . "INSERT")'(2 . "A1")'(-4 . ">=,>=")(cons 10(vlax-safearray->list a))'(-4 . "<=,<=")(cons 10(vlax-safearray->list b)))));;2组里边的块名根据自己情况更换
(progn
(repeat(sslength s)
(setq a(ssname s i)p(cdr(assoc 10(entget a))))
(if(equal(vlax-curve-getClosestPointTo e p)p 1e-8);;块插入点在线上
(setq i(1+ i))
(setq s(ssdel a s))))
(if(>(sslength s)0)(sssetfirst'nil s)
(setq s nil))
(alert(strcat(if s(itoa(sslength s))"0")"个图块被选出!\n接下来该你表演"))
;;;
)))))
没有采用在曲线上密集采点进行栏选的办法。一是因为各种曲线采点过程比较复杂才能做到拆线能很好的代替曲线,然而这并不是最主要的,更重要的是另一个原因,进行栏选所用的点不能产生自相交,因此对于drawing1中的那个自相交的样条曲线将无法得到希望的选择结果
llsheng_73 发表于 2015-11-23 19:05
没有采用在曲线上密集采点进行栏选的办法。一是因为各种曲线采点过程比较复杂才能做到拆线能很好的代 ...
请教一下,如果线和图块的连接是打断的,这种情况该如何选中连线的图块呢? llsheng_73 发表于 2015-11-23 19:05
没有采用在曲线上密集采点进行栏选的办法。一是因为各种曲线采点过程比较复杂才能做到拆线能很好的代 ...
这个太好了!不受屏幕显示限制! 光是直线的话,用坐标集来拦选可以。如果有弧度就不行。 我认为先模拟点,再通过点拦选。论坛有SPL转pline. 434939575 发表于 2015-11-21 09:58 static/image/common/back.gif
我认为先模拟点,再通过点拦选。论坛有SPL转pline.
谢谢,有例子吗??? 本帖最后由 llsheng_73 于 2015-11-21 14:39 编辑
最简单的是根据曲线的包围框进行范围选择,然后去掉不与该曲线相交的。。。
这样做的的好处是根据坐标范围进行选择比把各种曲线进行密集采点算法简单容易容易实现,不足之处是有可能需要对范围内所有待选定图元进行判断处理以剔除与该曲线不相交的
但是对各种曲线进行密集采点以保证ssget"F"能够做到无漏网之鱼虽然不用对得到的选择集进行处理,但是如果曲线本身自相交或者折返,根据采点得到的点集进行栏选时会失败
llsheng_73 发表于 2015-11-21 14:35 static/image/common/back.gif
最简单的是根据曲线的包围框进行范围选择,然后去掉不与该曲线相交的。。。
这样做的的好处是根据坐标范围 ...
是呀,为了选择线上的圆,我确实是加密了点,然后通过拉选,才成功,这样速度就慢了。 本帖最后由 juminth 于 2015-11-22 15:25 编辑
快速选择 删选块
54525596 发表于 2015-11-22 13:26 static/image/common/back.gif
是呀,为了选择线上的圆,我确实是加密了点,然后通过拉选,才成功,这样速度就慢了。
应该不会因为加密点而慢下来,拉选的方式头痛之处是如果曲线本身自相交等原因而选不到任何东东。。。 juminth 发表于 2015-11-22 15:23 static/image/common/back.gif
快速选择 删选块
工具-快速选择 1,选择pl,得到pl的BoundingBox
2.获取BoundingBox内所有块。
3.寻找快的boundary,得到边界LWPOLYLINE ,求有交点的。
估计复杂了一点。