xiaocainiao 发表于 2024-4-3 15:53:42

使用(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这个点的位置上、可能会有重叠对象、就是同时存在直线和填充、这就导致判断出错了。

所以想请教大家!有没有其他方法可以过滤掉标注和填充的交点



ssyfeng 发表于 2024-4-3 16:03:59

直接的方法就是,炸开块再绘制一条直线,求该直线与块内非标注和填充的交点,再删除炸开的块

Bao_lai 发表于 2024-4-3 16:34:10

试试 ssgetf 后面加 filter 过滤能不能行。

xiaocainiao 发表于 2024-4-3 16:59:13

Bao_lai 发表于 2024-4-3 16:34
试试 ssgetf 后面加 filter 过滤能不能行。

谢谢!这个不行的、加了过滤就选不到图块了

xiaocainiao 发表于 2024-4-3 17:01:06

ssyfeng 发表于 2024-4-3 16:03
直接的方法就是,炸开块再绘制一条直线,求该直线与块内非标注和填充的交点,再删除炸开的块

大神!还有其他方法吗、炸开这个应该不行的、因为有时候是参照块、无法分解

你有种再说一遍 发表于 2024-4-3 18:36:52

其他方法:
读取块内为什么需要炸开呢?表记录不就是了.
把块内图元储存进list的时候过滤.
然后你就会想扫描线和每个图元求交?量小可以,量大糟糕...需要包围盒过滤..
交点重复不可怕,通过有序性剔除就好了.

xiaocainiao 发表于 2024-4-3 18:40:42

你有种再说一遍 发表于 2024-4-3 18:36
其他方法:
读取块内为什么需要炸开呢?表记录不就是了.
把块内图元储存进list的时候过滤.


谢谢!貌似有点复杂、我好好捋捋

xiaocainiao 发表于 2024-4-3 19:38:07

你有种再说一遍 发表于 2024-4-3 18:36
其他方法:
读取块内为什么需要炸开呢?表记录不就是了.
把块内图元储存进list的时候过滤.


刚刚想到一个简单方法、就是临时隐藏块内填充、隐藏以后再nentselp一下就行了、测试可行
页: [1]
查看完整版本: 使用(ssget "F" (list pt1 pt2))能不能过滤掉块内标注和填充