XDrxAPI 24 个选择集处理函数帮助手册
1函数名称: xdrx-ss->ents
函数别名: xdrx-pickset->ents,xdrx-ss-to-list
描述:
将选择集转换为实体列表,支持嵌套块和DXF条件过滤
调用格式:
(xdrx-ss->ents <选择集> )
参数说明:
* <选择集>: 目标选择集(RTPICKS)
* T: 可选参数,包含嵌套块中的实体(RTT)
* DXF过滤条件: 可选参数,按DXF组码过滤实体(LIST)
返回值:
返回实体名称列表
示例用法1:
(xdrx-ss->ents (ssget))
; 将选择集转换为实体列表
示例用法2:
(xdrx-ss->ents (ssget) T)
; 转换选择集并包含嵌套块中的实体
示例用法3:
(xdrx-ss->ents (ssget) '((0 . "LINE")(8 . "A-*")))
; 只返回图层以"A-"开头且类型为LINE的实体
注意事项:
1. 不加T参数时仅处理选择集中的直接实体
2. DXF过滤条件支持通配符匹配
3. 返回的实体列表可直接用于后续操作
------------------------------------------------------------
2
函数名称: xdrx-ss-draggen
描述:
实现选择集的动态拖动交互,支持移动、旋转、缩放和镜像模式
调用格式:
(xdrx-ss-draggen <提示> <选择集/实体> <基点> [光标样式] )
参数说明:
* <提示>: 拖动时显示的提示字符串(RTSTR)
* <选择集/实体>: 目标选择集(RTPICKS)或单个实体(RTENAME)
* <基点>: 拖动的基准点(RT3DPOINT)
* [光标样式]: 可选参数,指定光标样式(0-12)(RTSHORT)
* : 可选参数,隐藏原始实体模式(RTT)
返回值:
成功返回变换矩阵,失败返回nil
示例用法1:
(xdrx-ss-draggen "拖动实体" (ssget) '(0 0 0))
; 基本拖动操作
示例用法2:
(xdrx-ss-draggen "旋转实体" ent '(0 0 0) 5 T)
; 使用旋转模式,指定光标样式5,并隐藏原始实体
拖动模式说明:
0-移动模式 1-旋转模式 2-缩放模式 3-镜像模式
注意事项:
1. 拖动过程中可按ESC取消
2. 返回的矩阵可直接用于实体变换
3. 隐藏模式下原始实体在拖动期间不可见
------------------------------------------------------------
3
函数名称: xdrx-ss-filter
函数别名: xdrx-entity-getsub
描述:
过滤实体并处理嵌套实体,支持过滤器条件
调用格式:
(xdrx-ss-filterr 实体或选择集 [过滤器])
参数说明:
* 实体或选择集: 可以是以下类型:
- 实体名(RTENAME)
- 选择集(RTPICKS)
* [过滤器]: 可选,过滤条件列表
返回值:
实体名或实体名列表 - 匹配过滤条件的实体
nil - 无匹配实体时返回nil
示例用法1:
(xdrx-ss-filterr (ssget))
; 获取当前空间中的所有实体
示例用法2:
(xdrx-ss-filterr ent '((0 . "LINE")))
; 过滤指定实体是否为直线
注意事项:
1. 自动处理嵌套实体(如块中的实体)
2. 支持标准AutoCAD过滤器语法
3. 返回结果保持原始实体层次结构
4. 适用于需要精确筛选特定类型实体的场景
5. 过滤器参数可选,不提供时返回所有实体
------------------------------------------------------------
4
函数名称: xdrx-ss-firstavaiablehome
描述:
返回API内部选择集第一个可用的位置索引
调用格式:
(xdrx-ss-firstavaiablehome)
参数说明:
无参数
返回值:
返回第一个可用位置的整数索引(RTSHORT)
示例用法:
(setq idx (xdrx-ss-firstavaiablehome))
; 获取内部选择集第一个可用位置
注意事项:
1. 主要用于API内部选择集管理
2. 索引从0开始计数
3. 最大选择集数量由系统变量"PicksetMaxHomeNum"控制
4. 可通过(xdrx-getvar "PicksetMaxHomeNum")获取最大数量
------------------------------------------------------------
5
函数名称: xdrx-ss-flt-cspace
描述:
获取当前空间信息(模型空间或图纸空间)
调用格式:
(xdrx-ss-flt-cspace)
参数说明:
无参数
返回值:
返回列表:((410 . "空间名") (67 . 类型))
类型说明:0-模型空间,1-图纸空间
示例用法:
(xdrx-ss-flt-cspace)
; 可能返回:((410 . "Model") (67 . 0)) 或 ((410 . "布局1") (67 . 1))
注意事项:
1. 主要用于空间过滤条件构造
2. 返回结果可直接用于选择集过滤
------------------------------------------------------------
6
函数名称: xdrx-ss-free
函数别名: xdrx-ss-release,xdrx-ssfree
描述:
释放选择集内存,支持释放全部或指定选择集
调用格式:
(xdrx-ss-free [选择集1 选择集2 ...])
参数说明:
* [选择集]: 可选参数,要释放的选择集变量名或对象(RTPICKS)
返回值:
无参数时返回释放的选择集总数(RTSHORT)
有参数时成功返回T,失败返回nil
示例用法1:
(xdrx-ss-free)
; 释放所有选择集
示例用法2:
(xdrx-ss-free ss1 ss2)
; 释放指定的ss1和ss2选择集
注意事项:
1. 无参数时会释放所有有名和无名的选择集
2. 释放后选择集变量将不可用
3. 建议在不再需要选择集时及时释放
------------------------------------------------------------
7
函数名称: xdrx-ssget
描述:
增强版选择集获取函数,支持自定义提示和交互处理
调用格式:
(xdrx-ssget [提示字符串] [模式] [点1] [点2] [过滤表])
参数说明:
* 提示字符串: 显示在选择过程中的自定义提示信息(RTSTR)
* 模式: 选择模式(RTSTR),支持标准模式("W","C"等)和扩展模式(":N",":S"等)
* 点1/点2: 选择区域的对角点坐标(RTPOINT/RT3DPOINT)
* 过滤表: 实体过滤条件列表(RTLB)
返回值:
1. 正常选择: 返回选择集(RTPICKS)
2. 关键字输入: 返回关键字字符串(RTSTR)
3. 取消选择: 返回nil
4. 错误情况: 返回错误代码(RTSHORT)
关键特性:
1. 自定义提示字符串
2. 关键字交互处理
3. 实时回调支持
4. 嵌套实体选择
执行流程:
1. 开始选择
2. 用户输入关键字 → 触发回调处理 → 继续选择
3. 用户选择对象 → 返回选择集
4. 用户取消 → 返回nil
两种处理方式流程对比:
1. 回调函数方式:
选择开始 → 输入关键字 → 立即执行回调 → 更新状态 → 继续选择
↓
完成选择 → 返回选择集
2. 返回值方式:
选择开始 → 输入关键字 → 返回关键字 → 外部处理 → 重新开始选择
↓
完成选择 → 返回选择集
典型应用场景:
1. 动态修改选择参数(如过滤条件)
2. 实时更新图形显示
3. 切换选择模式
4. 修改全局配置
LISP示例:
;; 基本选择带自定义提示
(setq ss (xdrx-ssget "请选择需要修改的线段:" '((0 . "LINE")))
;; 带关键字的复杂示例
(defun c:demo ()
(xdrx-initssget
"选择对象[颜色(C)/线型(L)]<退出>:"
"C_L"
""
"_handleKey"
)
(while (setq ss (xdrx-ssget))
(princ)
)
(defun _handleKey (key)
(cond
((= key "C") (设置颜色))
((= key "L") (设置线型))
)
(princ)
)
注意事项:
1. 提示字符串支持动态更新(在回调中修改)
2. 关键字不区分大小写
3. 可同时处理多个关键字
4. 回调函数必须返回nil
5. 完全兼容AutoCAD原生ssget语法
------------------------------------------------------------
8
函数名称: xdrx-ss-initget
描述:
初始化增强版选择集参数,支持多关键字和双回调机制
调用格式:
(xdrx-ss-initget
prompt-str
keywords
remove-prompt
key-callback
)
参数说明:
* prompt-str: 选择时的主提示信息(RTSTR)
* keywords: 支持的关键字,多个用"_"分隔(RTSTR)
例如: "A_B_C"表示支持A、B、C三个关键字
* remove-prompt: 移除对象时的提示信息(RTSTR)
* key-callback: 关键字处理函数名(RTSTR)
* other-callback: 可选,其他输入处理函数名(RTSTR)
返回值:
总是返回T
回调函数格式:
(defun key-handler (input-key)
;; 处理关键字逻辑
(princ);; 必须返回nil
)
(defun other-handler (user-input)
;; 处理非关键字输入
(princ);; 必须返回nil
)
示例用法1: 基本设置
(xdrx-ss-initget
"Select objects<Exit>:"
"Z_P"
""
"_zoomPanCB"
)
示例用法2: 带非关键字回调
(xdrx-ss-initget
"Input<Exit>:"
"O"
""
"_optionCB"
"_otherInputCB"
)
注意事项:
1. 必须先调用本函数再调用xdrx-ssget
2. 关键字回调优先于非关键字回调
3. 回调函数必须返回nil
4. 关键字不区分大小写
5. 支持在回调中修改全局状态
------------------------------------------------------------
9
函数名称: xdrx-ss-intersect
描述:
计算两个选择集或实体列表的交集,返回包含共同元素的新选择集
调用格式:
(xdrx-ss-intersect 选择集1 选择集2 [存储位置])
(xdrx-ss-intersect 实体列表 选择集 [存储位置])
(xdrx-ss-intersect 选择集 实体列表 [存储位置])
参数说明:
* 选择集1/选择集2: 要计算交集的选择集(RTPICKS)
* 实体列表: 实体名称列表(RTLB)
* 存储位置: 可选,指定选择集存储位置(RTSHORT)
返回值:
包含交集元素的新选择集(RTPICKS),无交集时返回空选择集
示例用法1: 基本交集
(setq ss1 (ssget))
(setq ss2 (ssget))
(setq ss-inter (xdrx-ss-intersect ss1 ss2))
示例用法2: 实体列表交集
(setq ents (list ent1 ent2 ent3))
(setq ss (ssget))
(setq ss-inter (xdrx-ss-intersect ents ss))
示例用法3: 指定存储位置
(xdrx-ss-intersect ss1 ss2 5) ; 结果存储在位置5
注意事项:
1. 实体列表中的无效实体将被忽略
2. 存储位置范围0-127,默认使用当前全局位置
3. 返回的选择集会自动释放内存
4. 对大型选择集有优化处理
5. 完全兼容AutoCAD选择集操作
------------------------------------------------------------
10
函数名称: xdrx-ss-length
描述:
计算一个或多个选择集中有效实体的总数,自动过滤无效或已删除实体
调用格式:
(xdrx-ss-length 选择集1 [选择集2 ... 选择集N])
参数说明:
* 选择集1...N: 要计算的选择集(RTPICKS),支持多个参数
返回值:
所有选择集中有效实体的总数(RTLONG)
示例用法1: 单个选择集
(setq ss (ssget))
(setq cnt (xdrx-ss-length ss)) ; 返回有效实体数
示例用法2: 多个选择集
(setq ss1 (ssget))
(setq ss2 (ssget))
(setq total (xdrx-ss-length ss1 ss2)) ; 返回总数
注意事项:
1. 仅统计有效存在的实体
2. 支持任意数量的选择集参数
3. 比标准sslength更可靠(自动处理无效实体)
4. 对大型选择集有优化处理
5. 返回值可直接用于数值计算
------------------------------------------------------------
11
函数名称: xdrx-ss-mod
描述:
根据指定条件过滤选择集或实体列表,返回符合条件的新选择集
调用格式:
(xdrx-ss-mod 选择集/实体列表 [过滤标志])
参数说明:
* 选择集/实体列表: 要过滤的选择集(RTPICKS)或实体列表(RTLB)
* 过滤标志: 位组合标志(RTSHORT),默认7(全部过滤)
- 1: 过滤锁定图层上的实体
- 2: 过滤非当前布局的实体
- 4: 过滤多段线/网格类实体
组合值示例: 3=1+2(过滤锁定和非当前布局)
返回值:
包含符合条件实体的新选择集(RTPICKS)
示例用法1: 基本过滤
(setq ss (ssget))
(setq filtered (xdrx-ss-mod ss 3)) ; 过滤锁定和非当前布局
示例用法2: 实体列表过滤
(setq ents (list ent1 ent2 ent3))
(setq filtered (xdrx-ss-mod ents 5)) ; 过滤锁定和多段线
示例用法3: 自定义标志
(xdrx-ss-mod (ssget) 2) ; 仅过滤非当前布局
注意事项:
1. 标志位可自由组合
2. 默认过滤所有条件(标志=7)
3. 返回的选择集自动管理内存
4. 对大型选择集有优化处理
5. 完全兼容AutoCAD实体操作
------------------------------------------------------------
12
函数名称: xdrx-ss-pop
描述:
从指定存储位置获取之前保存的选择集
调用格式:
(xdrx-ss-pop 存储位置)
参数说明:
* 存储位置: 选择集存储位置编号(RTSHORT),范围0-127
返回值:
存储在指定位置的选择集(RTPICKS),若位置为空则返回nil
示例用法1: 基本用法
(xdrx-ss-pop 5) ; 获取位置5存储的选择集
示例用法2: 配合使用
(xdrx-ss-initget ...) ; 初始化选择集参数
(xdrx-ssget) ; 进行选择
(setq ss (xdrx-ss-pop 0)) ; 获取默认位置选择集
注意事项:
1. 必须先通过xdrx-ssget保存选择集
2. 存储位置范围0-127
3. 返回的选择集为副本,不影响原存储
4. 位置为空时返回nil
5. 常用于选择集的多步操作
------------------------------------------------------------
13
函数名称: xdrx-ss-push
描述:
将选择集保存到指定存储位置,支持后续通过xdrx-ss-pop获取
调用格式:
(xdrx-ss-push 选择集 存储位置)
参数说明:
* 选择集: 要存储的选择集(RTPICKS)
* 存储位置: 目标位置编号(RTSHORT),范围0-127
返回值:
存储成功返回T,失败返回nil
示例用法1: 基本存储
(setq ss (ssget))
(xdrx-ss-push ss 5) ; 存储到位置5
示例用法2: 配合使用
(setq ss (ssget))
(xdrx-ss-push ss 0) ; 存储到默认位置
...其他操作...
(setq ss2 (xdrx-ss-pop 0)) ; 取出选择集
注意事项:
1. 存储位置范围0-127
2. 会对选择集进行深拷贝
3. 多次存储到同一位置会覆盖
4. 常与xdrx-ss-pop配合使用
5. 对大型选择集有优化处理
------------------------------------------------------------
14
函数名称: xdrx-ss-redraw
描述:
高亮或取消高亮显示选择集/实体,支持临时视觉效果控制
调用格式:
(xdrx-ss-redraw 选择集/实体 [控制参数])
参数说明:
* 选择集/实体: 要操作的选择集(RTPICKS)或实体(RTENAME)
* 控制参数: 可选,控制高亮状态
- T或4: 取消高亮
- 省略: 高亮显示
返回值:
总是返回T
示例用法1: 高亮选择集
(setq ss (ssget))
(xdrx-ss-redraw ss) ; 高亮显示
示例用法2: 取消高亮实体
(xdrx-ss-redraw ent T) ; 取消高亮
示例用法3: 批量操作
(xdrx-ss-redraw (list ent1 ent2 ent3) 4) ; 取消高亮
注意事项:
1. 高亮效果仅在当前会话有效
2. 支持选择集、单个实体或实体列表
3. 不影响实体实际属性
4. 常用于交互式选择反馈
5. 对大型选择集有优化处理
------------------------------------------------------------
15
函数名称: xdrx-ss-remove
描述:
从第一个选择集中移除第二个选择集包含的实体,返回新选择集
调用格式:
(xdrx-ss-remove 源选择集 要移除的选择集)
参数说明:
* 源选择集: 原始选择集(RTPICKS)
* 要移除的选择集: 需要排除的实体选择集(RTPICKS)
返回值:
移除后的新选择集(RTPICKS)
示例用法1: 基本用法
(setq ss1 (ssget))
(setq ss2 (ssget))
(setq result (xdrx-ss-remove ss1 ss2)) ; 从ss1中移除ss2的实体
示例用法2: 过滤特定实体
(setq all (ssget "X"))
(setq blocks (ssget "X" '((0 . "INSERT"))))
(setq nonBlocks (xdrx-ss-remove all blocks)) ; 移除所有图块
注意事项:
1. 参数顺序很重要
2. 返回新选择集,不影响原选择集
3. 比标准ssdel更高效
4. 支持大型选择集操作
5. 完全兼容AutoCAD实体类型
------------------------------------------------------------
16
函数名称: xdrx-ss-reset
描述:
重置指定存储位置的选择集,清空该位置内容
调用格式:
(xdrx-ss-reset 存储位置)
参数说明:
* 存储位置: 要重置的位置编号(RTSHORT),范围0-127
返回值:
重置成功返回T,失败返回nil
示例用法1: 基本用法
(xdrx-ss-reset 5) ; 重置位置5
示例用法2: 配合使用
(xdrx-ss-push (ssget) 3) ; 存储到位置3
...其他操作...
(xdrx-ss-reset 3) ; 清空位置3
注意事项:
1. 存储位置范围0-127
2. 仅清空内容,不影响其他位置
3. 常与xdrx-ss-push/xdrx-ss-pop配合使用
4. 对已清空位置再次重置仍返回T
------------------------------------------------------------
17
函数名称: xdrx-ss-setathome
描述:
将选择集存储到指定位置并返回副本,默认使用最大存储位置
调用格式:
(xdrx-ss-setathome 选择集 [存储位置])
参数说明:
* 选择集: 要存储的选择集(RTPICKS)
* 存储位置: 可选位置编号(RTSHORT),默认使用最大位置
返回值:
存储后的选择集副本(RTPICKS)
示例用法1: 默认位置存储
(setq ss (ssget))
(xdrx-ss-setathome ss) ; 存储到最大位置
示例用法2: 指定位置存储
(xdrx-ss-setathome (ssget) 5) ; 存储到位置5
注意事项:
1. 不指定位置时使用最大存储位置
2. 返回的是副本,不影响原选择集
3. 位置编号有效范围0-127,最大选择集数量由系统变量"PicksetMaxHomeNum"控制
4. 与xdrx-ss-push功能类似但返回值不同
------------------------------------------------------------
18
函数名称: xdrx-ss-subtract
描述:
计算选择集差集(A-B),支持多种参数组合和可选存储位置
调用格式:
(xdrx-ss-subtract 选择集A 选择集B [存储位置])
(xdrx-ss-subtract 实体列表 选择集 [存储位置])
(xdrx-ss-subtract 选择集 实体列表 [存储位置])
参数说明:
* 选择集A/实体列表: 被减的选择集或实体列表
* 选择集B/实体列表: 要减去的选择集或实体列表
* 存储位置: 可选结果存储位置(RTSHORT),默认当前位置
返回值:
差集运算结果的选择集(RTPICKS)
示例用法1: 选择集差集
(setq ss1 (ssget))
(setq ss2 (ssget))
(xdrx-ss-subtract ss1 ss2) ; 返回ss1有而ss2没有的实体
示例用法2: 实体列表差集
(setq ents (list ent1 ent2 ent3))
(xdrx-ss-subtract ents (ssget)) ; 返回不在选择集中的实体
注意事项:
1. 支持多种参数组合
2. 结果选择集自动管理内存
3. 存储位置范围0-127
4. 对大型选择集有优化处理
5. 完全兼容AutoCAD实体类型
------------------------------------------------------------
19
函数名称: xdrx-ss-tablesort
描述:
按表格方式排序实体,支持行列排序和自定义基点
调用格式:
(xdrx-ss-tablesort <实体/选择集> [方向向量] [模糊值] [基点类型])
参数说明:
* <实体/选择集>: 目标实体(ENAME)或选择集(PICKSET)
* 方向向量: 可选参数,排序方向向量(3DPOINT),默认X轴方向
* 模糊值: 可选参数,行/列分组模糊距离(REAL)
* 基点类型: 可选参数,实体基点类型(SHORT,1-9),对应数字小键盘位置:
1:左下角 2:下中点 3:右下角
4:左中点 5:中心点 6:右中点
7:左上角 8:上中点 9:右上角
默认5(中心点)
返回值:
返回排序后的实体列表
示例用法1:
(xdrx-ss-tablesort (ssget))
; 按X轴方向对选择集实体进行表格排序
示例用法2:
(xdrx-ss-tablesort ent_list '(0 1 0) 10.0 1)
; 按Y轴方向排序,模糊值10.0,使用基点类型1(左下角)
注意事项:
1. 支持行列双向排序
2. 基点类型1-9对应实体包围盒不同位置点
3. 模糊值控制行/列分组精度
4. 对块参照有完整支持
------------------------------------------------------------
20
函数名称: xdrx-ss-union
描述:
计算选择集并集,支持多种参数组合和可选存储位置
调用格式:
(xdrx-ss-union 选择集A 选择集B [存储位置])
(xdrx-ss-union 实体列表 选择集 [存储位置])
(xdrx-ss-union 选择集 实体列表 [存储位置])
(xdrx-ss-union 实体1 实体2 [存储位置])
参数说明:
* 选择集A/实体列表/实体1: 第一个操作对象
* 选择集B/实体列表/实体2: 第二个操作对象
* 存储位置: 可选结果存储位置(RTSHORT),默认当前位置
返回值:
并集运算结果的选择集(RTPICKS)
示例用法1: 选择集并集
(setq ss1 (ssget))
(setq ss2 (ssget))
(xdrx-ss-union ss1 ss2) ; 返回两个选择集的并集
示例用法2: 实体列表并集
(setq ents (list ent1 ent2 ent3))
(xdrx-ss-union ents (ssget)) ; 返回实体列表和选择集的并集
注意事项:
1. 支持多种参数组合
2. 自动去除重复实体
3. 存储位置范围0-127
4. 对大型选择集有优化处理
5. 完全兼容AutoCAD实体类型
------------------------------------------------------------
21
函数名称: xdrx-ss-zoom-extents
描述:
根据输入对象(点、实体或选择集)计算范围并缩放视图
调用格式:
(xdrx-ss-zoom-extents 对象1 [对象2...])
参数说明:
* 对象: 可以是以下类型:
- 点(RTPOINT/RT3DPOINT)
- 实体(RTENAME)
- 选择集(RTPICKS)
返回值:
包含两个点的列表:(最小点 最大点),表示缩放范围的边界
示例用法1: 缩放选择集
(xdrx-ss-zoom-extents (ssget)) ; 缩放至选择集范围
示例用法2: 缩放多个实体
(xdrx-ss-zoom-extents ent1 ent2 ent3) ; 缩放至多个实体范围
注意事项:
1. 自动处理WCS/UCS坐标系转换
2. 视图会放大5%作为边距
3. 支持任意数量参数组合
4. 对大型选择集有优化处理
5. 完全兼容AutoCAD实体类型
------------------------------------------------------------
22
函数名称: xdrx-ss-remove-duplicate-curve
描述:
移除重复曲线和超短曲线,保留最长曲线
调用格式:
(xdrx-ss-remove-duplicate-curve <选择集/实体> [短曲线长度] )
参数说明:
* <选择集/实体>: 要处理的曲线选择集或单个曲线实体
* [短曲线长度]: 可选,指定短曲线判定长度(默认0)
* : 可选,T表示返回统计信息,nil返回nil
返回值:
(删除的重复直线数 删除的重复圆弧数 删除的超短直线数 删除的超短圆弧数)
示例用法1:
(xdrx-ss-remove-duplicate-curve ss1)
返回: (3 2 1 0)
表示: 删除3条重复直线,2条重复圆弧,1条超短直线
示例用法2:
(xdrx-ss-remove-duplicate-curve ent1 0.1 T)
返回: (1 0 0 1)
表示: 删除1条重复直线,1条超短圆弧
备注:
1. 处理内容:
- 删除完全重复的曲线
- 删除X/Y方向偏差小于snap容差的共线直线
- 删除方向角度差小于angnap容差的近似直线
- 删除同圆心且半径差小于distsnap容差的圆弧/圆
- 删除长度小于指定值的超短直线和圆弧
2. 处理规则:
- 保留组内最长的曲线
- 原选择集变为处理后曲线的集合
- 超短曲线是否删除由distsnap系统变量控制
3. 容差控制:
- 点重合容差: distsnap系统变量
- 共线性容差: snap系统变量(X/Y方向)
- 方向容差: angnap系统变量
4. 支持处理: 直线、圆弧、圆等曲线类型
------------------------------------------------------------
23
函数名称: xdrx-ss-get-connected-group
描述:
使用R-TREE空间结构和并行计算快速获取实体的连通组
调用格式:
;; 实体模式
(xdrx-ss-get-connected-group 源实体 目标实体集 [包含自身] [使用几何相交])
;; 点集模式
(xdrx-ss-get-connected-group 源点集 目标点集列表 [包含自身] [使用几何相交])
参数说明:
* 源实体/源点集: 分析起点的实体或点集
* 目标实体集/目标点集列表: 要分析的实体集合或点集列表
* 包含自身: 可选T/nil,是否包含源实体在结果中
* 使用几何相交: 可选T/nil,是否使用精确几何相交检测
返回值:
连通组实体列表或点集列表
示例用法1: 实体连通组
(setq ent (car (entsel)))
(setq ss (ssget))
(xdrx-ss-get-connected-group ent ss T) ; 获取包含ent的连通组
示例用法2: 点集连通组
(setq pts1 (list pt1 pt2 pt3))
(setq pts2 (list (list pt4 pt5) (list pt6 pt7)))
(xdrx-ss-get-connected-group pts1 pts2 nil T) ; 获取点集连通组
注意事项:
1. 使用R-TREE空间索引加速计算
2. 支持并行处理提高性能
3. 对大型数据集有优化处理
4. 两种模式返回结果格式不同
5. 完全兼容AutoCAD实体类型
------------------------------------------------------------
24
函数名称: xdrx-ss-get-connected-groups
描述:
使用R-TREE空间结构和并行计算快速获取所有实体的连通分组
算法复杂度:
1. R-TREE构建: O(n log n)
2. 邻近查询: 平均O(log n),最坏O(n)
3. 并行分组: O(n/p) p为处理器核心数
4. 几何相交检测: O(k) k为候选对数量
调用格式:
(xdrx-ss-get-connected-groups 实体列表/点集列表 [包含自身] [使用几何相交])
参数说明:
* 实体列表/点集列表: 要分析的实体集合或点集列表
* 包含自身: 可选T/nil,是否包含自身实体在结果中
* 使用几何相交: 可选T/nil,是否使用精确几何相交检测
返回值:
分组后的嵌套列表,每个子列表为一个连通组
示例用法1: 实体分组
(setq ss (ssget))
(xdrx-ss-get-connected-groups ss T) ; 获取所有连通组
示例用法2: 点集分组
(setq pts-list (list (list pt1 pt2) (list pt3 pt4)))
(xdrx-ss-get-connected-groups pts-list nil T) ; 获取点集连通分组
注意事项:
1. 万级实体可在秒级完成分组
2. 开启几何相交会降低约30%性能
3. 并行处理对10万+数据优势明显
4. 内存占用与输入规模成线性关系
------------------------------------------------------------
感谢东哥的辛苦付出!
页:
[1]