使用(ssget "F" (list pt1 pt2))能不能过滤掉块内标注和填充
本帖最后由 xiaocainiao 于 2024-4-3 20:13 编辑(setq pt1 (getpoint))
(setq pt2 (getpoint pt1))
(setq ss (ssget "F" (list pt1 pt2)))
(setq int_list ())
(setq ssdata (ssnamex ss))
(foreach x ssdata
(foreach y
(cdddr x)
(setq int_list (cons (trans (cadr y) 0 1) int_list))
)
)想请教一下论坛的各位大神!
使用上方的代码可以获取两点连线与块内图元的交点、
但是我想过滤掉标注和填充、就是只保留与直线或多段线的交点坐标;
现在的办法是通过已获取的交点坐标、配合(nentselp pt)来判断这个点接触的块内图元是不是标注或填充、
但这样判断有个问题、就是pt这个点的位置上、可能会有重叠对象、就是同时存在直线和填充、这就导致判断出错了。
所以想请教大家!有没有其他方法可以过滤掉标注和填充的交点
直接的方法就是,炸开块再绘制一条直线,求该直线与块内非标注和填充的交点,再删除炸开的块 试试 ssgetf 后面加 filter 过滤能不能行。 Bao_lai 发表于 2024-4-3 16:34
试试 ssgetf 后面加 filter 过滤能不能行。
谢谢!这个不行的、加了过滤就选不到图块了 ssyfeng 发表于 2024-4-3 16:03
直接的方法就是,炸开块再绘制一条直线,求该直线与块内非标注和填充的交点,再删除炸开的块
大神!还有其他方法吗、炸开这个应该不行的、因为有时候是参照块、无法分解 其他方法:
读取块内为什么需要炸开呢?表记录不就是了.
把块内图元储存进list的时候过滤.
然后你就会想扫描线和每个图元求交?量小可以,量大糟糕...需要包围盒过滤..
交点重复不可怕,通过有序性剔除就好了. 你有种再说一遍 发表于 2024-4-3 18:36
其他方法:
读取块内为什么需要炸开呢?表记录不就是了.
把块内图元储存进list的时候过滤.
谢谢!貌似有点复杂、我好好捋捋 你有种再说一遍 发表于 2024-4-3 18:36
其他方法:
读取块内为什么需要炸开呢?表记录不就是了.
把块内图元储存进list的时候过滤.
刚刚想到一个简单方法、就是临时隐藏块内填充、隐藏以后再nentselp一下就行了、测试可行
页:
[1]