XDSoft 发表于 2025-5-15 12:54:11

XDrxAPI 78 个点(表)处理函数帮助手册

1
函数名称: xdrx-point-convert2d

描述:
将三维点转换为指定平面上的二维坐标。支持两种调用方式:1) 仅传入三维点时使用默认XY平面转换;2) 传入三维点和自定义平面进行转换。

调用格式:
(xdrx-point-convert2d <3d_point> )

参数说明:
* <3d_point>: 要转换的三维点
* : 可选参数,目标平面定义(默认使用XY平面)

返回值:
* 返回转换后的二维点坐标

示例用法:
(xdrx-point-convert2d '(1 2 3))
返回: (1.0 2.0)

(xdrx-point-convert2d '(1 2 3) '((0 0 0) (0 0 1)))
返回: 在Z=0平面上转换后的坐标

------------------------------------------------------------
2
函数名称: xdrx-point-dist2Line
函数别名:xdrx-point-signeddistanceto

描述:
计算点到直线的最短距离,支持多种直线类型输入(包括AcDbLine、AcDbXline、AcDbRay等实体或几何直线)。返回带符号的距离值,正负表示点在直线的哪一侧。

调用格式:
(xdrx-point-dist2Line <point> <line_entity> | <line_pts>)

参数说明:
* <point>: 要计算距离的点(二维或三维点)
* <line_entity>: 直线类实体(AcDbLine/AcDbXline/AcDbRay等)
* <line_pts>: 或直接指定直线的两个端点(两个二维或三维点)

返回值:
* 返回带符号的距离值(实数),正负表示相对直线方向的位置关系

示例用法:
(xdrx-point-dist2Line '(5 5) '((0 0) (10 0)))
返回: 5.0; 点在直线正方向一侧

(xdrx-point-dist2Line '(5 -5) (car (entsel))); 选择一条直线实体
返回: -5.0 ; 点在直线负方向一侧

------------------------------------------------------------
3
函数名称: xdrx-point-getRelationAtClosedCurve

描述:
判断点与闭合曲线(或边界)的位置关系,返回点在曲线内部、外部或边界上的状态代码。支持多段线、样条曲线等闭合曲线实体或点列表构成的闭合边界。

调用格式:
(xdrx-point-getRelationAtClosedCurve <point> <curve_entity> | <point_list>)

参数说明:
* <point>: 要判断的点(二维或三维点)
* <curve_entity>: 闭合曲线实体
* <point_list>: 或指定构成闭合边界的点列表

返回值:
* 返回表示位置关系的整数值:
-1: 点在曲线外部
0: 点在曲线边界上
1: 点在曲线内部

示例用法:
(xdrx-point-getRelationAtClosedCurve '(5 5) (car (entsel))); 选择闭合多段线
返回: 1; 表示点在内部

(xdrx-point-getRelationAtClosedCurve '(0 0) '((0 0)(10 0)(10 10)(0 10)))
返回: 0; 点在边界上

------------------------------------------------------------
4
函数名称: xdrx-point-Interpolate

描述:
在三角形区域内进行点的高程插值计算,支持返回插值点坐标或仅返回Z值。可选择沿Z方向或投影到三角形平面进行插值。

调用格式:
(xdrx-point-Interpolate <point> <triangle_points> )

参数说明:
* <point>: 要插值的点(二维或三维点)
* <triangle_points>: 定义三角形的三个点(三个二维或三维点)
* : 可选参数,控制返回类型和插值方式
* : 可选参数,控制返回类型和插值方式

返回值:
* 默认返回插值后的三维点
* 当指定参数时,仅返回插值点的Z坐标
* 当指定参数时,使用投影插值方式

示例用法:
(xdrx-point-Interpolate '(5 5) '((0 0 0)(10 0 10)(0 10 5)))
返回: (5.0 5.0 5.0); 插值后的三维点

(xdrx-point-Interpolate '(5 5) '((0 0 0)(10 0 10)(0 10 5)) T)
返回: 5.0; 仅Z坐标

------------------------------------------------------------
5
函数名称: xdrx-point-Interpolate

描述:
在多个三角形区域内进行点的插值计算,返回包含该点的三角形顶点。用于确定点位于哪个三角形内并返回该三角形的三个顶点坐标。

调用格式:
(xdrx-point-Interpolate <point> <triangle_list>)

参数说明:
* <point>: 要检测的点(二维或三维点)
* <triangle_list>: 包含多个三角形定义的列表,每个三角形由三个点组成

返回值:
* 返回包含该点的三角形的三个顶点坐标(三个三维点)
* 如果点不在任何三角形内,返回nil

示例用法:
(xdrx-point-Interpolate '(5 5) '(((0 0)(10 0)(0 10)) ((10 0)(10 10)(0 10))))
返回: ((0.0 0.0 0.0) (10.0 0.0 0.0) (0.0 10.0 0.0)); 返回包含点的三角形顶点

------------------------------------------------------------
5
函数名称: xdrx-point-inwhichtriangle

描述:
判断给定点位于哪个三角形内,并返回该三角形的三个顶点坐标。支持同时检测多个三角形区域。

调用格式:
(xdrx-point-inwhichtriangle <point> <triangle_list>)

参数说明:
* <point>: 要检测的点(二维或三维点)
* <triangle_list>: 三角形列表,每个元素是包含三个点的子列表

返回值:
* 当点在某个三角形内时,返回该三角形的三个顶点坐标
* 当点不在任何三角形内时,返回nil

示例用法:
(xdrx-point-inwhichtriangle '(5 5) '(((0 0)(10 0)(0 10)) ((10 0)(10 10)(0 10))))
返回: ((0.0 0.0 0.0) (10.0 0.0 0.0) (0.0 10.0 0.0))

------------------------------------------------------------
6
函数名称: xdrx-point-isinside

描述:
判断点是否在闭合区域/曲线内部。支持通过点列表定义的闭合区域或CAD实体(如多段线、圆等)进行判断。可处理二维和三维情况。

调用格式:
(xdrx-point-isinside <point> <boundary>)

参数说明:
* <point>: 要判断的点(二维或三维点)
* <boundary>: 边界定义,可以是:
- 点列表(定义闭合多边形)
- CAD实体(如闭合多段线、圆等)

返回值:
* 当点在内部时返回T
* 当点在外部或边界上时返回nil
* 出错时返回nil

示例用法:
(xdrx-point-isinside '(5 5) '((0 0)(10 0)(10 10)(0 10)))
返回: T; 点在多边形内

(xdrx-point-isinside '(15 15) (car (entsel))); 选择闭合多段线
返回: nil; 点在外部

------------------------------------------------------------
7
函数名称: xdrx-point-ison

描述:
判断点是否在曲线(或折线)上。支持CAD曲线实体或点列表定义的折线,可设置是否考虑曲线延伸。

调用格式:
(xdrx-point-ison <point> <curve> )

参数说明:
* <point>: 要判断的点(二维或三维点)
* <curve>: 曲线定义,可以是:
- CAD曲线实体(如直线、圆弧、多段线等)
- 点列表(定义折线)
* : 可选参数,考虑曲线延伸时使用

返回值:
* 当点在曲线上时返回T
* 当点不在曲线上时返回nil
* 出错时返回nil

示例用法:
(xdrx-point-ison '(5 5) '((0 0)(10 10)))
返回: T; 点在直线上

(xdrx-point-ison '(5 5) (car (entsel))); 选择曲线
返回: T/nil; 根据点是否在曲线上

(xdrx-point-ison '(15 15) '((0 0)(10 10)) T)
返回: T; 考虑直线延伸

------------------------------------------------------------
8
函数名称: xdrx-point-make

描述:
创建点对象。支持不指定坐标(创建在原点)或指定二维/三维坐标创建点。可以一次创建多个点。

调用格式:
(xdrx-point-make ...)

参数说明:
* : 可选参数,要创建的点坐标(二维或三维点)
- 无参数时创建原点(0,0,0)处的点
- 可接受多个点参数批量创建

返回值:
* 创建单个点时返回实体名
* 创建多个点时返回包含所有点实体名的表
* 出错时返回nil

示例用法:
(xdrx-point-make); 在原点创建点(内存实体)
返回: <图元名: 7ffff706040>

(xdrx-point-make '(5 5) '(10 10 0)); 批量创建两个点
返回: (<图元名: 7ffff706050> <图元名: 7ffff706060>)

备注:创建的内存实体,须用xdrx-free释放
------------------------------------------------------------
9
函数名称: xdrx-point-orthoProject

描述:
计算点到平面的正交投影点。支持单个点或点列表的投影计算,可自定义投影平面(默认XY平面)。

调用格式:
(xdrx-point-orthoProject <points> )

参数说明:
* <points>: 要投影的点或点列表(二维或三维点)
* : 可选参数,目标平面定义(默认使用XY平面)

返回值:
* 单个点输入时返回投影后的三维点
* 点列表输入时返回投影后的点列表
* 出错时返回nil

示例用法:
(xdrx-point-orthoProject '(1 2 3))
返回: (1.0 2.0 0.0); 投影到XY平面

(xdrx-point-orthoProject '((1 2 3)(4 5 6)) '((0 0 0)(0 1 1)))
返回: ((1.0 1.5 1.5) (4.0 5.5 5.5)); 投影到自定义平面

------------------------------------------------------------
10
函数名称: xdrx-point-project

描述:
计算点到平面的投影点(支持正交投影和方向投影)。可处理单个点或点列表,允许自定义投影方向和投影平面。

调用格式:
(xdrx-point-project <points> <plane> )

参数说明:
* <points>: 要投影的点或点列表(二维或三维点)
* <plane>: 目标平面定义(三点或法线+点定义)
* : 可选参数,指定投影方向向量(默认使用平面法线方向的正交投影)

返回值:
* 单个点输入时返回投影后的三维点
* 点列表输入时返回投影后的点列表
* 当投影方向与平面法线垂直时返回nil

示例用法:
(xdrx-point-project '(1 2 3) '((0 0 0)(1 0 0)(0 1 0)))
返回: (1.0 2.0 0.0); 正交投影到XY平面

(xdrx-point-project '(1 2 3) '((0 0 0)(0 0 1)) '(0 0 -1))
返回: (1.0 2.0 0.0); 指定方向投影

------------------------------------------------------------
11
函数名称: xdrx-point-transformby

描述:
对点或点集应用变换矩阵。支持2D/3D点和对应的变换矩阵,自动处理维度和零值容差。

调用格式:
(xdrx-point-transformby <points> <matrix>)

参数说明:
* <points>: 要变换的点或点列表(二维或三维点)
* <matrix>: 变换矩阵(2x2矩阵或4x4矩阵)

返回值:
* 返回变换后的点或点列表(保持输入维度)
* 数值小于TOL(1e-10)时自动归零

示例用法:
(xdrx-point-transformby '(1 1) '((2 0)(0 2)))
返回: (2.0 2.0); 2D点缩放

(xdrx-point-transformby '(1 1 1) '((1 0 0 1)(0 1 0 1)(0 0 1 1)(0 0 0 1)))
返回: (2.0 2.0 2.0); 3D点平移

------------------------------------------------------------
12
函数名称: xdrx-points-4corner

描述:
获取点集或多段线的四个角点(左下、左上、右上、右下)。支持直接输入点列表或选择多段线实体。

调用格式:
(xdrx-points-4corner <points> | <polyline>)

参数说明:
* <points>: 点列表(二维或三维点)
* <polyline>: 多段线实体(可选)

返回值:
* 返回四个角点的列表,顺序为:(左下 左上 右上 右下)
* 无效输入时返回nil

示例用法:
(xdrx-points-4corner '((0 0)(10 0)(10 10)(0 10)))
返回: ((0.0 0.0 0.0) (0.0 10.0 0.0) (10.0 10.0 0.0) (10.0 0.0 0.0))

(xdrx-points-4corner (car (entsel))); 选择多段线
返回: 多段线的四个角点坐标

------------------------------------------------------------
13
函数名称: xdrx-points-4minmax

描述:
获取点集或多段线的四个极值点(最小X最小Y、最小X最大Y、最大X最大Y、最大X最小Y)。支持点列表输入或多段线实体选择。

调用格式:
(xdrx-points-4minmax <points> | <polyline>)

参数说明:
* <points>: 点列表(二维或三维点)
* <polyline>: 多段线实体(可选)

返回值:
* 返回四个极值点的列表,顺序为:(最小X最小Y 最小X最大Y 最大X最大Y 最大X最小Y)
* 无效输入时返回nil

示例用法:
(xdrx-points-4minmax '((2 2)(8 2)(5 8)(2 5)))
返回: ((2.0 2.0 0.0) (2.0 5.0 0.0) (8.0 8.0 0.0) (8.0 2.0 0.0))

(xdrx-points-4minmax (car (entsel))); 选择多段线
返回: 多段线的四个极值点坐标

------------------------------------------------------------
14
函数名称: xdrx_points->box
函数别名:xdrx_points->filterbox,xdrx_points->offsetbox

描述:
根据输入点集生成边界框(矩形)。支持单个点或多个点输入,可指定UCS或WCS坐标系。

调用格式:
(xdrx-points-box <points> )

参数说明:
* <points>: 点或点列表(二维或三维点)
* : 可选参数,当输入单个点时指定矩形宽度
* : 可选参数,使用WCS坐标系(默认使用UCS)

返回值:
* 返回边界框的四个角点列表,顺序为:左下→左上→右上→右下(逆时针方向)
* 无效输入时返回nil

备注:
1. 返回点顺序为左下角开始,逆时针方向
2. 单个点输入时需配合width参数使用
3. 默认使用UCS坐标系,指定T参数时使用WCS

示例用法:
(xdrx-points-box '((1 1)(5 5)))
返回: ((1.0 1.0 0.0) (1.0 5.0 0.0) (5.0 5.0 0.0) (5.0 1.0 0.0))

(xdrx-points-box '(3 3) 4)
返回: ((-1.0 -1.0 0.0) (-1.0 7.0 0.0) (7.0 7.0 0.0) (7.0 -1.0 0.0))

------------------------------------------------------------
15
函数名称: xdrx-points-fitcircle

描述:
通过点集拟合最佳圆或圆弧(最小二乘法)。支持控制是否生成圆弧实体或仅返回几何数据。

调用格式:
(xdrx-points-fitcircle <points> )

参数说明:
* <points>: 用于拟合的点集(至少3个非共线点)
* : 可选参数,生成圆弧(默认生成圆)
* : 可选参数,不创建实体仅返回几何数据

返回值:
* 默认返回创建的圆/圆弧实体名
* 指定nil参数时返回几何数据(圆心、半径等)
* 点共线或不足3点时返回nil

备注:
1. 使用最小二乘法进行最优拟合
2. 点集需包含至少3个非共线点
3. 默认生成圆实体,T参数指定时生成圆弧

示例用法:
(xdrx-points-fitcircle '((0 1)(1 0)(0 -1)(-1 0)))
返回: <图元名: 7ffff706040>; 拟合的圆实体

(xdrx-points-fitcircle '((0 1)(1 0)(0 -1)) T)
返回: <图元名: 7ffff706050>; 拟合的圆弧实体

------------------------------------------------------------
16
函数名称: xdrx-points-concavehull

描述:
计算点集的凹包(非凸包)。通过alpha参数控制凹包紧密度,可选择返回点列表或多段线实体。

调用格式:
(xdrx-points-concavehull <points> )

参数说明:
* <points>: 输入点集(二维或三维点)
* : 可选参数,控制凹包紧密度(默认值=当前捕捉距离)
* : 可选参数,直接返回点列表而非创建多段线

返回值:
* 默认返回创建的凹包多段线实体
* 指定T参数时返回凹包点列表
* 无效输入时返回nil

备注:
1. alpha值越大,凹包越接近凸包;值越小,凹包凹陷越明显
2. 三维点将投影到XY平面处理
3. 至少需要3个点才能计算有效凹包

示例用法:
(xdrx-points-concavehull '((0 0)(5 0)(10 0)(10 10)(5 5)(0 10)))
返回: <图元名: 7ffff706040>; 凹包多段线

(xdrx-points-concavehull '((0 0)(5 0)(10 0)(10 10)(5 5)(0 10)) 2.5 T)
返回: ((0 0)(5 5)(10 10)(10 0)(0 0)); 凹包点列表

------------------------------------------------------------
17
函数名称: xdrx_points->fitellipse

描述:
通过点集拟合最佳椭圆或椭圆弧(最小二乘法)。支持控制是否生成椭圆弧实体或仅返回几何数据。

调用格式:
(xdrx_points->fitellipse <points> )

参数说明:
* <points>: 用于拟合的点集(至少5个点)
* : 可选参数,生成椭圆弧(默认生成完整椭圆)
* : 可选参数,不创建实体仅返回几何数据

返回值:
* 默认返回创建的椭圆/椭圆弧实体名
* 指定nil参数时返回几何数据
* 点不足5个或拟合失败时返回nil

备注:
1. 使用最小二乘法进行最优拟合
2. 点集需包含至少5个点才能有效拟合椭圆
3. 拟合质量通过内部误差率评估,过低将返回nil
4. 默认生成完整椭圆,T参数指定时生成椭圆弧

示例用法:
(xdrx_points->fitellipse '((0 2)(1 1)(2 0)(1 -1)(0 -2)(-1 -1)(-2 0)(-1 1)))
返回: <图元名: 7ffff706040>; 拟合的椭圆实体

(xdrx_points->fitellipse '((0 2)(1 1)(2 0)(1 -1)(0 -2)) T)
返回: <图元名: 7ffff706050>; 拟合的椭圆弧实体

------------------------------------------------------------
18
函数名称: xdrx_points->fitline
函数别名:xdrx-points->line

描述:
通过点集拟合最佳直线(最小二乘法)。可返回直线实体或拟合参数,支持控制是否输出详细信息。

调用格式:
(xdrx_points->fitline <points> )

参数说明:
* <points>: 用于拟合的点集(至少2个点)
* : 可选参数,返回包含详细拟合信息的列表
* : 可选参数,不创建实体仅返回数据

返回值:
* 默认返回创建的直线实体名
* 指定T参数时返回列表: (实体名 斜率 截距 相关系数)
* 点不足2个时返回nil

备注:
1. 使用最小二乘法计算最佳拟合直线
2. 相关系数(r)越接近1表示拟合越好
3. 三维点将投影到当前UCS的XY平面处理

示例用法:
(xdrx_points->fitline '((1 1)(2 2)(3 3)(4 4)))
返回: <图元名: 7ffff706040>; 拟合直线

(xdrx_points->fitline '((1 1)(2 2)(3 3)) T)
返回: (<图元名: 7ffff706050> 1.0 0.0 1.0); 带参数的拟合结果

------------------------------------------------------------
19
函数名称: xdrx_points->polygon

描述:
根据输入点集生成凹多边形。支持多种输入方式(点列表、选择集、图元名),可选择返回点列表或创建多段线实体。

调用格式:
(xdrx_points->polygon <points> )

参数说明:
* <points>: 输入点集,可以是:
- 点列表(二维或三维点)
- 选择集(RTPICKS)
- 点图元名(RTENAME)
* : 可选参数,直接创建多段线实体

返回值:
* 默认返回多边形顶点坐标列表
* 指定T参数时返回创建的多段线实体名
* 无效输入时返回nil

备注:
1. 自动处理点集的顺序生成合理多边形
2. 三维点将投影到XY平面处理
3. 至少需要3个点才能生成有效多边形

示例用法:
(xdrx_points->polygon '((0 0)(5 0)(10 5)(5 10)(0 10)))
返回: ((0 0)(5 0)(10 5)(5 10)(0 10)); 多边形顶点

(xdrx_points->polygon (ssget) T); 选择点集
返回: <图元名: 7ffff706040>; 生成的多段线

------------------------------------------------------------
20
函数名称: xdrx-points-regularcontour

描述:
将输入点集或建筑轮廓线规则化为正交多边形。可调整最小边长、最大角度和偏移量参数,支持返回点列表或创建多段线实体。

调用格式:
(xdrx-points-regularcontour <input> )

参数说明:
* <input>: 输入数据,可以是:
- 点列表(二维或三维点)
- 多段线图元名(RTENAME)
- 选择集(RTPICKS)
* : 可选参数,最小边长限制(默认1.0)
* : 可选参数,最大角度容差(默认0.0)
* : 可选参数,轮廓偏移量(默认1.0)
* : 可选参数,返回点列表而非创建实体

返回值:
* 默认返回创建的规则化多段线实体名
* 指定T参数时返回规则化后的点列表
* 无效输入时返回nil

备注:
1. 专门用于建筑轮廓的正则化处理
2. 自动调整轮廓使其正交化
3. 保留原始多段线属性(当输入为实体时)
4. 三维点将投影到XY平面处理

示例用法:
(xdrx-points-regularcontour '((0 0)(10 0)(10 5)(5 5)(5 10)(0 10)))
返回: <图元名: 7ffff706040>; 规则化后的多段线

(xdrx-points-regularcontour (car (entsel)) 2.0 5.0 1.5 T)
返回: ((0 0)(10 0)(10 10)(0 10)); 规则化后的点列表

------------------------------------------------------------
21
函数名称: xdrx_points->voronoi

描述:
生成点集的Voronoi图(泰森多边形)。支持输入点集或选择点实体,可指定边界多边形或自动计算凸包边界。

调用格式:
(xdrx_points->voronoi <points> )

参数说明:
* <points>: 输入点集,可以是:
- 点列表(二维或三维点)
- 点实体名(RTENAME)
- 选择集(RTPICKS)
* : 可选参数,边界多边形(点列表或多段线实体)
* : 可选参数,直接创建Voronoi图实体

返回值:
* 默认返回列表: ((图元名 生成点)...)
* 指定T参数时直接创建Voronoi图实体
* 无效输入时返回nil

备注:
1. 未指定边界时自动计算点集的凸包作为边界
2. 三维点将投影到XY平面处理
3. 每个Voronoi单元关联原始生成点
4. 支持批量处理大量点集

示例用法:
(xdrx_points->voronoi '((0 0)(5 5)(10 0)))
返回: ((<图元名1> (0 0)) (<图元名2> (5 5)) (<图元名3> (10 0)))

(xdrx_points->voronoi (ssget) T); 选择点集并直接创建
; 在图中生成Voronoi图实体

------------------------------------------------------------
22
函数名称: xdrx-points-area

描述:
计算点集围合区域的面积。使用鞋带公式(Shoelace formula)计算简单多边形的面积,支持二维和三维点输入。

调用格式:
(xdrx-points-area <points>)

参数说明:
* <points>: 定义多边形的点集(二维或三维点列表)

返回值:
* 返回多边形面积(实数)
* 点少于3个时返回0.0

备注:
1. 使用鞋带公式计算简单多边形面积
2. 三维点的Z坐标不影响计算结果
3. 点集应按照多边形顶点顺序排列
4. 不自动闭合多边形(首尾点相同则视为闭合)

示例用法:
(xdrx-points-area '((0 0)(10 0)(10 10)(0 10)))
返回: 100.0; 正方形面积

(xdrx-points-area '((0 0)(5 5)(10 0)))
返回: 25.0; 三角形面积

------------------------------------------------------------
23
函数名称: xdrx-points-boundingboxintersectwith

描述:
计算两个多边形边界框的相交点。支持不同相交模式设置,返回所有相交点坐标。

调用格式:
(xdrx-points-boundingboxintersectwith <points1> <points2> )

参数说明:
* <points1>: 第一个多边形的点集(二维或三维点列表)
* <points2>: 第二个多边形的点集(二维或三维点列表)
* : 可选参数,相交模式:
- 0: 不延伸(kOnBothOperands,默认)
- 1: 延伸第一个多边形(kExtendThis)
- 2: 延伸第二个多边形(kExtendArg)
- 3: 延伸两个多边形(kExtendBoth)

返回值:
* 返回相交点列表(三维点)
* 无相交时返回nil
* 无效输入时返回nil

备注:
1. 自动将输入点集转换为临时多段线进行计算
2. 三维点将投影到XY平面处理
3. 支持四种不同的边界相交模式
4. 结果点保持原始Z坐标(三维点输入时)

示例用法:
(xdrx-points-boundingboxintersectwith '((0 0)(5 0)(5 5)(0 5)) '((4 4)(9 4)(9 9)(4 9)))
返回: ((5.0 4.0 0.0) (4.0 5.0 0.0)); 两个正方形的相交点

(xdrx-points-boundingboxintersectwith pts1 pts2 1); 延伸第一个多边形
------------------------------------------------------------
24
函数名称: xdrx-points-box

描述:
该函数根据输入的点集计算最小包围盒。可以处理2D和3D点集,支持WCS和UCS坐标系。

调用格式:
(xdrx-points-box <point1> <point2> ... )

参数说明:
* <point1>, <point2>, ...: 输入的点集(2D或3D点)
* : 可选参数,指定使用WCS坐标系(世界坐标系)

返回值:
返回包围盒的四个角点坐标(3D点列表),如果输入点不足则返回nil

示例用法:
(xdrx-points-box '(0 0 0) '(10 10 0))
返回: ((0.0 0.0 0.0) (10.0 0.0 0.0) (10.0 10.0 0.0) (0.0 10.0 0.0))

------------------------------------------------------------
25
函数名称: xdrx-points-centroid

描述:
该函数计算输入点集的几何中心(质心)。可以处理2D和3D点集,自动将2D点转换为3D点(z=0)。

调用格式:
(xdrx-points-centroid <point1> <point2> ...)

参数说明:
* <point1>, <point2>, ...: 输入的点集(2D或3D点)

返回值:
返回点集的几何中心坐标(3D点),如果输入点不足3个则返回nil

示例用法:
(xdrx-points-centroid '(0 0 0) '(10 0 0) '(10 10 0) '(0 10 0))
返回: (5.0 5.0 0.0)

------------------------------------------------------------
26
函数名称: xdrx-points-chull

描述:
该函数计算输入点集的凸包(Convex Hull)。可以处理2D点集,支持返回点列表或绘制多边形实体。

调用格式:
(xdrx-points-chull (list <point1> <point2> ...) )

参数说明:
* (list <point1> <point2> ...): 输入的点集列表(2D点)
* : 可选参数,非nil时返回绘制多边形实体,nil时返回凸包点列表

返回值:
根据draw-flag返回凸包点列表或多边形实体,如果输入点不足3个则返回nil

示例用法:
(xdrx-points-chull (list '(0 0) '(5 0) '(5 5) '(0 5) '(2 2)))
返回: ((0.0 0.0) (5.0 0.0) (5.0 5.0) (0.0 5.0))

------------------------------------------------------------
27
函数名称: xdrx-points-closestatdist

描述:
该函数查找距离指定点特定范围内的最近点集。支持输入点实体、选择集或坐标点,返回满足距离条件的点列表。

调用格式:
(xdrx-points-closestatdist <base-point> <radius> )

参数说明:
* <base-point>: 基准点(2D或3D点)
* <radius>: 搜索半径(正数)
* : 可选的点集(坐标点/点实体/选择集)
* : 可选参数,非nil时绘制连接线

返回值:
返回满足距离条件的点列表(包含基准点),如果没有点满足条件则返回nil

示例用法:
(xdrx-points-closestatdist '(5 5 0) 10.0 '((0 0 0) '(10 0 0) '(10 10 0)))
返回: ((5.0 5.0 0.0) (10.0 0.0 0.0) (10.0 10.0 0.0))

------------------------------------------------------------
28
函数名称: xdrx-points-closestpair

描述:
该函数查找点集中距离最近的点对(可能有多对距离相同的点对)。支持2D点集输入,可以返回点对列表或绘制连接线。

调用格式:
(xdrx-points-closestpair (list <point1> <point2> ...) )

参数说明:
* (list <point1> <point2> ...): 输入的点集列表(2D点)
* : 可选参数,非nil时绘制连接线,nil时返回点对列表

返回值:
根据draw-flag返回最近点对列表或T(绘制成功),如果输入点不足3个则返回nil

示例用法:
(xdrx-points-closestpair (list '(0 0) '(1 1) '(5 5) '(6 6)))
返回: (((0.0 0.0 0.0) (1.0 1.0 0.0)) ((5.0 5.0 0.0) (6.0 6.0 0.0)))

------------------------------------------------------------
29
函数名称: xdrx-points-closestpairs

描述:
该函数查找点集中所有距离小于指定半径的点对。支持3D点集输入,可以返回点对列表或绘制连接线。

调用格式:
(xdrx-points-closestpairs <radius> )

参数说明:
* <radius>: 搜索半径(正数)
* : 可选的点集(坐标点/点实体/选择集)
* : 可选参数,非nil时绘制连接线

返回值:
返回满足条件的点对列表或T(绘制成功),如果没有点满足条件则返回nil

示例用法:
(xdrx-points-closestpairs 10.0 '((0 0 0) '(5 0 0) '(15 0 0) '(20 0 0)))
返回: (((0.0 0.0 0.0) (5.0 0.0 0.0)) ((15.0 0.0 0.0) (20.0 0.0 0.0)))

------------------------------------------------------------
30
函数名称: xdrx-points-closestpointpairs

描述:
该函数查找点集中所有最近点对(可能有多对距离相同的点对)。支持2D/3D点集输入,可以返回点对列表或绘制连接线,支持单点模式查找最近点。

调用格式:
(xdrx-points-closestpointpairs )

参数说明:
* : 首参数为T时启用单点模式,nil时为全局模式
* : 输入的点集(坐标点/点实体/选择集)
* : 可选参数,非nil时绘制连接线

返回值:
返回最近点对列表(包含距离)或T(绘制成功),如果输入点不足则返回nil

示例用法:
(xdrx-points-closestpointpairs nil '((0 0) '(1 1) '(5 5) '(6 6)))
返回: (((0.0 0.0 0.0) (1.0 1.0 0.0) 1.414) ((5.0 5.0 0.0) (6.0 6.0 0.0) 1.414))

------------------------------------------------------------
31
函数名称: xdrx-points-compress

描述:
该函数对输入点集进行压缩处理,移除重复或相近的点。支持2D/3D点集输入,可指定压缩模式和容差。

调用格式:
(xdrx-points-compress <point1> <point2> ... )

参数说明:
* <point1>, <point2>, ...: 输入的点集(2D或3D点)
* : 可选参数,压缩模式(整数)
* : 可选参数,压缩容差值(实数)

返回值:
返回压缩后的点集列表,如果输入点不足则返回nil

示例用法:
(xdrx-points-compress '(0 0 0) '(0.1 0.1 0) '(1 1 0) '(1.1 1.1 0) 0 0.2)
返回: ((0.0 0.0 0.0) (1.0 1.0 0.0))

------------------------------------------------------------
32
函数名称: xdrx-points-connect

描述:
该函数提供两种点集连接方式:
1. 最短路径连接(可能产生交叉)
2. 非交叉连接(优化路径避免线段交叉)
支持3D点集输入,可控制是否绘制多段线实体。

调用格式:
(xdrx-points-connect )

参数说明:
* : 连接模式
- 0: 最短路径连接(默认)
- 1: 非交叉连接
* : 输入的点集(坐标点/点实体/选择集)
* : 可选参数,非nil时绘制多段线实体

返回值:
返回连接后的点序列或实体名,如果输入点不足则返回nil

示例用法:
(xdrx-points-connect 1 '((0 0 0) '(5 5 0) '(10 0 0))) ; 非交叉模式
返回: ((0.0 0.0 0.0) (5.0 5.0 0.0) (10.0 0.0 0.0))

------------------------------------------------------------
33
函数名称: xdrx-points-dcs2ucs

描述:
该函数将点坐标从显示坐标系(DCS)转换为用户坐标系(UCS)。支持2D和3D点转换。

调用格式:
(xdrx-points-dcs2ucs <point1> )

参数说明:
* <point1>, : 需要转换的点坐标(2D或3D点)

返回值:
返回转换后的点坐标列表,如果没有有效输入则返回nil

示例用法:
(xdrx-points-dcs2ucs '(100 200))
返回转换后的UCS坐标点

------------------------------------------------------------
34
函数名称: xdrx-points-dcs2wcs

描述:
该函数将点坐标从显示坐标系(DCS)转换为世界坐标系(WCS)。支持2D和3D点转换。

调用格式:
(xdrx-points-dcs2wcs <point1> )

参数说明:
* <point1>, : 需要转换的点坐标(2D或3D点)

返回值:
返回转换后的点坐标列表,如果没有有效输入则返回nil

示例用法:
(xdrx-points-dcs2wcs '(100 200))
返回转换后的WCS坐标点

------------------------------------------------------------
35
函数名称: xdrx-points-delaunay

描述:
该函数基于输入点集生成Delaunay三角网。支持3D点集输入,可选择返回三角面列表或直接绘制三角面实体。

调用格式:
(xdrx-points-delaunay )

参数说明:
* : 输入的点集(坐标点/点实体/选择集)
* : 可选参数,非nil时直接绘制三角面实体

返回值:
返回三角面顶点列表(每组3个点)或T(绘制成功),如果输入点不足3个则返回nil

示例用法:
(xdrx-points-delaunay '((0 0 0) '(1 0 0) '(0 1 0) '(1 1 0)))
返回: (((0.0 0.0 0.0) (1.0 0.0 0.0) (0.0 1.0 0.0))
      ((1.0 0.0 0.0) (1.0 1.0 0.0) (0.0 1.0 0.0)))

------------------------------------------------------------
36
函数名称: xdrx-points-ecs2ucs

描述:
该函数将点坐标从实体坐标系(ECS)转换为用户坐标系(UCS)。需要提供法向量参数,支持2D和3D点转换。

调用格式:
(xdrx-points-ecs2ucs <normal_vector> <point1> )

参数说明:
* <normal_vector>: 实体坐标系法向量(3D点)
* <point1>, : 需要转换的点坐标(2D或3D点)

返回值:
返回转换后的点坐标列表,如果没有有效输入则返回nil

示例用法:
(xdrx-points-ecs2ucs '(0 0 1) '(100 200))
返回转换后的UCS坐标点

------------------------------------------------------------
37
函数名称: xdrx-points-ecs2wcs

描述:
该函数将点坐标从实体坐标系(ECS)转换为世界坐标系(WCS)。需要提供法向量参数,支持2D和3D点转换。

调用格式:
(xdrx-points-ecs2wcs <normal_vector> <point1> )

参数说明:
* <normal_vector>: 实体坐标系法向量(3D点)
* <point1>, : 需要转换的点坐标(2D或3D点)

返回值:
返回转换后的点坐标列表,如果没有有效输入则返回nil

示例用法:
(xdrx-points-ecs2wcs '(0 0 1) '(100 200))
返回转换后的WCS坐标点

------------------------------------------------------------
38
函数名称: xdrx-points-ghull

描述:
该函数使用Graham扫描算法计算2D点集的凸包。返回按顺时针或逆时针顺序排列的凸包顶点。

调用格式:
(xdrx-points-ghull <point1> <point2> ...)

参数说明:
* <point1>, <point2>, ...: 输入的2D点集

返回值:
返回构成凸包的点列表(按顺序排列),如果输入点不足3个则返回nil

示例用法:
(xdrx-points-ghull '(0 0) '(1 1) '(0 1) '(1 0))
返回: ((0.0 0.0) (1.0 0.0) (1.0 1.0) (0.0 1.0))

------------------------------------------------------------
39
函数名称: xdrx-points-hullwidth

描述:
该函数计算点集凸包的宽度(最小平行线间距)及对应的平行线对。基于Graham扫描算法先计算凸包,再计算最小宽度。

调用格式:
(xdrx-points-hullwidth <point1> <point2> ...)

参数说明:
* <point1>, <point2>, ...: 输入的2D点集(3D点将自动转换为2D)

返回值:
返回列表包含宽度值和两个端点坐标,格式:(宽度 端点1 端点2)
如果输入点不足3个则返回nil

示例用法:
(xdrx-points-hullwidth '(0 0) '(1 1) '(0 1) '(1 0))
返回: (1.414 (0.0 0.0 0.0) (1.0 1.0 0.0))

------------------------------------------------------------
40
函数名称: xdrx-points-iscolinear

描述:
该函数判断点集是否共线。支持2D/3D点集输入,可指定容差值。

调用格式:
(xdrx-points-iscolinear <point1> <point2> ... )

参数说明:
* <point1>, <point2>, ...: 输入的点集(2D或3D点)
* : 可选参数,共线判断容差值(默认使用系统捕捉容差)

返回值:
如果点集共线返回T,否则返回nil

示例用法:
(xdrx-points-iscolinear '(0 0 0) '(1 1 0) '(2 2 0))
返回: T

------------------------------------------------------------
41
函数名称: xdrx-points-isinscreen

描述:
该函数判断点是否在当前视口的屏幕范围内。支持2D/3D点输入。

调用格式:
(xdrx-points-isinscreen <point1> )

参数说明:
* <point1>, : 输入的点坐标(2D或3D点)

返回值:
如果所有点都在屏幕范围内返回T,否则返回nil

示例用法:
(xdrx-points-isinscreen '(100 200))
返回: T (如果点在当前视口可见范围内)

------------------------------------------------------------
42
函数名称: xdrx-points-isinside

描述:
该函数判断点或曲线是否在另一闭合曲线内部。支持点集、曲线实体或几何曲线对象作为输入。

调用格式:
(xdrx-points-isinside <边界曲线|点集> <测试点|曲线> )

参数说明:
* <边界曲线|点集>: 闭合曲线实体或点集(定义多边形边界)
* <测试点|曲线>: 测试点/点集或曲线实体
* : 可选参数,非nil时返回所有内部点

返回值:
如果测试对象完全在边界内返回T,部分在边界内返回内部点列表,否则返回nil

示例用法:
(xdrx-points-isinside (entsel) '(100 100))
返回: T (如果点在闭合曲线内)

------------------------------------------------------------
43
函数名称: xdrx-points-isrectangle

描述:
该函数判断点集或曲线是否构成矩形。支持点集、多段线实体或复合曲线作为输入。

调用格式:
(xdrx-points-isrectangle <点集|曲线> [方向点])

参数说明:
* <点集|曲线>: 输入的点集(至少4个点)或曲线实体
* [方向点]: 可选参数,指定矩形方向向量(3D点)

返回值:
如果输入构成矩形则返回矩形顶点列表(4个点),否则返回nil

示例用法:
(xdrx-points-isrectangle '((0 0) (10 0) (10 5) (0 5)))
返回: ((0.0 0.0 0.0) (10.0 0.0 0.0) (10.0 5.0 0.0) (0.0 5.0 0.0))

------------------------------------------------------------
44
函数名称: xdrx-points-isselfintersect

描述:
该函数判断点集形成的多边形是否自相交。支持2D/3D点集输入。

调用格式:
(xdrx-points-isselfintersect <point1> <point2> ...)

参数说明:
* <point1>, <point2>, ...: 输入的点集(2D或3D点)

返回值:
如果多边形自相交返回T,否则返回nil

示例用法:
(xdrx-points-isselfintersect '(0 0) '(2 0) '(1 1) '(1 -1))
返回: T (形成自相交的蝴蝶结形状)

------------------------------------------------------------
45
函数名称: xdrx-points-issquare

描述:
该函数判断点集或曲线是否构成正方形。支持点集、多段线实体或复合曲线作为输入。

调用格式:
(xdrx-points-issquare <点集|曲线> [方向点])

参数说明:
* <点集|曲线>: 输入的点集(至少4个点)或曲线实体
* [方向点]: 可选参数,指定正方形方向向量(3D点)

返回值:
如果输入构成正方形则返回正方形顶点列表(4个点),否则返回nil

示例用法:
(xdrx-points-issquare '((0 0) (1 0) (1 1) (0 1)))
返回: ((0.0 0.0 0.0) (1.0 0.0 0.0) (1.0 1.0 0.0) (0.0 1.0 0.0))

------------------------------------------------------------
46
函数名称: xdrx-points-matrix

描述:
该函数生成矩阵排列的点集。支持两种调用方式:指定行列间距或指定每行列的间距数组。

调用格式1(固定间距):
(xdrx-points-matrix <基点> <行数> <列数> <行间距> <列间距>)

调用格式2(变间距):
(xdrx-points-matrix <基点> <行间距数组> <列间距数组>)

参数说明:
* <基点>: 矩阵起始点(3D点)
* <行数>, <列数>: 矩阵的行列数量(整数)
* <行间距>, <列间距>: 固定的行列间距值(实数)
* <行间距数组>, <列间距数组>: 每行/列间距的数组(数值列表)

返回值:
返回矩阵排列的点集列表(二维数组)

示例用法1:
(xdrx-points-matrix '(0 0 0) 3 4 10 15)
返回3行4列,行距10列距15的点矩阵

示例用法2:
(xdrx-points-matrix '(0 0 0) '(10 15 20) '(5 10 15 20))
返回变间距的点矩阵

------------------------------------------------------------
47
函数名称: xdrx-points-maxareabox

描述:
该函数计算点集的最大面积包围矩形。基于Graham扫描算法先计算凸包,再计算最大面积矩形。

调用格式:
(xdrx-points-maxareabox <point1> <point2> ...)

参数说明:
* <point1>, <point2>, ...: 输入的2D点集(3D点将自动转换为2D)

返回值:
返回最大面积矩形的四个顶点坐标列表(按顺时针或逆时针顺序)
如果输入点不足3个则返回nil

示例用法:
(xdrx-points-maxareabox '(0 0) '(1 1) '(0 1) '(1 0))
返回: ((0.0 0.0 0.0) (1.0 0.0 0.0) (1.0 1.0 0.0) (0.0 1.0 0.0))

------------------------------------------------------------
48
函数名称: xdrx-points-maxdiameter

描述:
该函数计算点集凸包的最大直径(最远点对距离)。基于Graham扫描算法先计算凸包,再计算最大直径。

调用格式:
(xdrx-points-maxdiameter <point1> <point2> ...)

参数说明:
* <point1>, <point2>, ...: 输入的2D点集(3D点将自动转换为2D)

返回值:
返回列表包含直径值和两个端点坐标,格式:(直径 端点1 端点2)
如果输入点不足3个则返回nil

示例用法:
(xdrx-points-maxdiameter '(0 0) '(3 0) '(1 2) '(2 1))
返回: (3.0 (0.0 0.0 0.0) (3.0 0.0 0.0))

------------------------------------------------------------
49
函数名称: xdrx-points-maxperimeterbox

描述:
该函数计算点集的最大周长包围矩形。基于Graham扫描算法先计算凸包,再计算最大周长矩形。

调用格式:
(xdrx-points-maxperimeterbox <point1> <point2> ...)

参数说明:
* <point1>, <point2>, ...: 输入的2D点集(3D点将自动转换为2D)

返回值:
返回最大周长矩形的四个顶点坐标列表(按顺时针或逆时针顺序)
如果输入点不足3个则返回nil

示例用法:
(xdrx-points-maxperimeterbox '(0 0) '(1 1) '(0 2) '(2 0))
返回: ((0.0 0.0 0.0) (2.0 0.0 0.0) (2.0 1.0 0.0) (0.0 2.0 0.0))

------------------------------------------------------------
50
函数名称: xdrx-points-mhull

描述:
该函数使用Melkman算法计算点集的凸包。这是一个在线算法,特别适合在已有凸包上添加新点时快速更新。

调用格式:
(xdrx-points-mhull <point1> <point2> ...)

参数说明:
* <point1>, <point2>, ...: 输入的2D点集(3D点将自动转换为2D)

返回值:
返回凸包顶点坐标列表(按逆时针顺序)
如果所有点共线则返回nil

示例用法:
(xdrx-points-mhull '(0 0) '(1 1) '(0 1) '(1 0))
返回: ((0.0 0.0) (1.0 0.0) (1.0 1.0) (0.0 1.0))

算法特点:
1. 时间复杂度O(n)
2. 适合动态添加点的情况
3. 要求输入点已按x坐标排序
4. 处理共线点时会自动优化

------------------------------------------------------------
51
函数名称: xdrx-points-mincircle

描述:
该函数计算包围点集的最小圆(最小包围圆)。使用最小包围圆算法计算能够包含所有输入点的最小半径圆。

调用格式:
(xdrx-points-mincircle <point1> <point2> ...)

参数说明:
* <point1>, <point2>, ...: 输入的3D点集

返回值:
返回包含圆心和半径的列表,格式:(圆心坐标 半径)
如果输入点不足3个则返回nil

示例用法:
(xdrx-points-mincircle '(0 0 0) '(1 0 0) '(0 1 0))
返回: ((0.5 0.5 0.0) 0.707107)

------------------------------------------------------------
52
函数名称: xdrx-points-minmaxpoint

描述:
该函数在点集中查找相对于基准点的最小或最大距离点。可以指定查找最近点或最远点。

调用格式:
(xdrx-points-minmaxpoint <基准点> <point1> <point2> ... )

参数说明:
* <基准点>: 作为参考点的3D点
* <point1>, <point2>, ...: 要比较的3D点集
* : 可选参数,指定时查找最远点,默认查找最近点

返回值:
返回距离基准点最近或最远的点坐标

示例用法1(查找最近点):
(xdrx-points-minmaxpoint '(0 0 0) '(1 0 0) '(0 2 0) '(0 0 3))
返回: (1.0 0.0 0.0)

示例用法2(查找最远点):
(xdrx-points-minmaxpoint '(0 0 0) '(1 0 0) '(0 2 0) '(0 0 3) T)
返回: (0.0 0.0 3.0)

------------------------------------------------------------
53
函数名称: xdrx-points-mirror

描述:
该函数对点集进行镜像变换。通过指定镜像轴线,计算点集关于该轴线的对称点。

调用格式:
(xdrx-points-mirror <轴线起点> <轴线终点> <point1> <point2> ...)

参数说明:
* <轴线起点>, <轴线终点>: 定义镜像轴线的两个3D点
* <point1>, <point2>, ...: 需要进行镜像变换的3D点集

返回值:
返回镜像变换后的点坐标列表

示例用法:
(xdrx-points-mirror '(0 0 0) '(1 1 0) '(1 0 0) '(0 1 0))
返回: ((0.0 1.0 0.0) (1.0 0.0 0.0))

注意事项:
1. 镜像轴线由两个点确定
2. 所有点将转换为WCS坐标系进行计算
3. 至少需要提供两个点定义轴线和一个待镜像点

------------------------------------------------------------
54
函数名称: xdrx-points-move

描述:
该函数对点集进行平移变换。支持三种调用方式:方向向量+距离、位移向量、起点+终点向量。

调用格式1(方向+距离):
(xdrx-points-move <方向向量> <距离> <point1> <point2> ...)

调用格式2(位移向量):
(xdrx-points-move <位移向量> <point1> <point2> ...)

调用格式3(起点+终点):
(xdrx-points-move (<point1> <point2> ...) <起点> <终点>)

参数说明:
* <方向向量>: 平移方向的单位向量
* <距离>: 平移距离(实数)
* <位移向量>: 完整的平移向量
* <起点>, <终点>: 定义平移向量的两个点
* <point1>, <point2>, ...: 需要平移的点集

返回值:
返回平移后的点坐标列表

示例用法1:
(xdrx-points-move '(1 0 0) 5 '(0 0 0) '(1 1 1))
返回: ((5.0 0.0 0.0) (6.0 1.0 1.0))

示例用法2:
(xdrx-points-move '(2 2 0) '(0 0 0) '(1 1 1))
返回: ((2.0 2.0 0.0) (3.0 3.0 1.0))

------------------------------------------------------------
55
函数名称: xdrx-points-nearpt

描述:
该函数在点集中查找距离指定几何对象最近的点。支持多种几何对象类型,包括曲线、线段和实体边界。

调用格式1(几何对象+点集):
(xdrx-points-nearpt <几何对象> <point1> <point2> ...)

调用格式2(线段+点集):
(xdrx-points-nearpt (<起点> <终点>) <point1> <point2> ...)

调用格式3(纯点集):
(xdrx-points-nearpt <point1> <point2> ...)

参数说明:
* <几何对象>: 曲线实体或几何曲线对象
* <起点>, <终点>: 定义线段的两个点
* <point1>, <point2>, ...: 要搜索的点集

返回值:
返回距离几何对象最近的点坐标

示例用法1(曲线实体):
(xdrx-points-nearpt <曲线实体> '(0 0 0) '(1 1 1) '(2 2 2))
返回: (1.0 1.0 1.0)

示例用法2(线段):
(xdrx-points-nearpt ('(0 0 0) '(1 0 0)) '(0 1 0) '(1 1 0) '(2 0 0))
返回: (1.0 0.0 0.0)

------------------------------------------------------------
56
函数名称: xdrx-points-normal

描述:
该函数计算点集的法向量。通过输入的三维点集计算拟合平面的法向量。

调用格式:
(xdrx-points-normal <point1> <point2> ...)

参数说明:
* <point1>, <point2>, ...: 输入的三维点集(至少需要3个点)

返回值:
返回计算得到的法向量坐标
如果点集无法计算法向量则返回nil

示例用法:
(xdrx-points-normal '(0 0 0) '(1 0 0) '(0 1 0))
返回: (0.0 0.0 1.0)

注意事项:
1. 输入点必须为三维坐标
2. 至少需要3个不共线的点才能计算有效法向量
3. 返回的法向量已归一化为单位向量

------------------------------------------------------------
57
函数名称: xdrx-points-offset

描述:
该函数对点集或曲线进行偏移操作,生成偏移后的点集。支持多种偏移模式,包括简单线段偏移和复杂多边形偏移。

调用格式:
(xdrx-points-offset <距离> <point1> <point2> ... )

参数说明:
* <距离>: 偏移距离(实数),正负值控制偏移方向
* <point1>, <point2>, ...: 输入的点集或曲线实体
* : 可选参数,指定时禁用延伸模式

返回值:
返回偏移后的点坐标列表

示例用法1(点集偏移):
(xdrx-points-offset 0.5 '(0 0) '(1 0) '(1 1) '(0 1))
返回: ((0.5 0.5) (0.5 1.5) (1.5 1.5) (1.5 0.5))

示例用法2(曲线实体偏移):
(xdrx-points-offset 0.5 <曲线实体>)
返回: 偏移后的点坐标列表

注意事项:
1. 对于闭合多边形,偏移方向由点集顺序决定
2. 支持曲线实体作为输入
3. 可通过T参数控制是否延伸偏移结果
4. 对于直线段,会生成矩形偏移结果

------------------------------------------------------------
58
函数名称: xdrx-points-orthoproject

描述:
该函数计算点集在指定平面上的正交投影。支持自定义投影平面,默认投影到XY平面。

调用格式1(单点投影):
(xdrx-points-orthoproject <点坐标> [<投影平面>])

调用格式2(多点投影):
(xdrx-points-orthoproject (<点1> <点2> ...) [<投影平面>])

参数说明:
* <点坐标>: 单个3D点坐标
* (<点1> <点2> ...): 多个3D点组成的列表
* [<投影平面>]: 可选参数,定义投影平面(默认XY平面)

返回值:
返回投影后的点坐标(单个点或点列表)

示例用法1(单点投影):
(xdrx-points-orthoproject '(1 2 3))
返回: (1.0 2.0 0.0)

示例用法2(多点投影到自定义平面):
(xdrx-points-orthoproject ('(1 2 3) '(4 5 6)) '(0 0 0 1 0 0 0 1 0))
返回: ((1.0 2.0 0.0) (4.0 5.0 0.0))

------------------------------------------------------------
59
函数名称: xdrx-points-project
函数别名: xdrx-points-projection

描述:
该函数计算点集在指定平面上的投影点,支持正交投影和方向投影两种模式。可以指定投影方向向量,默认使用平面法向量方向。

调用格式1(正交投影):
(xdrx-points-project <点或点集> <投影平面>)

调用格式2(方向投影):
(xdrx-points-project <点或点集> <投影平面> <方向向量>)

参数说明:
* <点或点集>: 单个3D点或点列表
* <投影平面>: 定义投影平面的参数
* <方向向量>: 可选,指定投影方向(不能与平面法向量垂直)

返回值:
返回投影后的点坐标(单个点或点列表)

示例用法1(正交投影):
(xdrx-points-project '(1 2 3) '(0 0 0 1 0 0 0 1 0))
返回: (1.0 2.0 0.0)

示例用法2(方向投影):
(xdrx-points-project '(1 2 3) '(0 0 0 1 0 0 0 1 0) '(0 0 1))
返回: (1.0 2.0 0.0)

注意事项:
1. 方向向量不能与平面法向量垂直
2. 支持单个点或多个点的投影计算
3. 平面参数需要提供足够定义平面的信息
------------------------------------------------------------
60
函数名称: xdrx-points-qhull

描述:
该函数计算点集的凸包(Convex Hull),支持返回点列表或直接绘制凸包多边形。使用CGAL库计算凸包。

调用格式1(返回点列表):
(xdrx-points-qhull (<点1> <点2> ...))

调用格式2(绘制凸包):
(xdrx-points-qhull (<点1> <点2> ...) T)

参数说明:
* (<点1> <点2> ...): 输入的点集列表(至少需要3个点)
* T: 可选参数,指定时直接绘制凸包多边形

返回值:
1. 无T参数时返回凸包点坐标列表
2. 有T参数时返回绘制的多边形实体名
3. 点数不足时返回nil

示例用法1(返回点列表):
(xdrx-points-qhull ('(0 0) '(1 0) '(0 1) '(0.5 0.5)))
返回: ((0.0 0.0) (1.0 0.0) (0.0 1.0))

示例用法2(绘制凸包):
(xdrx-points-qhull ('(0 0) '(1 0) '(0 1) '(0.5 0.5)) T)
返回: <图元名: 7ffff706040>

注意事项:
1. 输入点集至少需要3个不共线点
2. 返回的凸包点按顺时针或逆时针顺序排列
3. 绘制选项会创建红色闭合多段线
------------------------------------------------------------
61
函数名称: xdrx-points-removedup
函数别名:xdrx-points-removeduplicate

描述:
该函数移除点集中的重复点,支持自定义容差判断。使用全局变量distSnap作为默认容差。

调用格式1(默认容差):
(xdrx-points-removedup <点1> <点2> ...)

调用格式2(指定容差):
(xdrx-points-removedup <点1> <点2> ... <容差>)

参数说明:
* <点1>, <点2>, ...: 输入的点集
* <容差>: 可选参数,判断点重复的距离容差

返回值:
返回去重后的点坐标列表

示例用法1(默认容差):
(xdrx-points-removedup '(0 0) '(0 0) '(1 1))
返回: ((0.0 0.0) (1.0 1.0))

示例用法2(指定容差):
(xdrx-points-removedup '(0 0) '(0.1 0.1) '(1 1) 0.15)
返回: ((0.0 0.0) (1.0 1.0))

注意事项:
1. 默认使用系统变量distSnap作为容差
2. 支持2D和3D点
3. 容差参数可以是实数或整数
------------------------------------------------------------
62
函数名称: xdrx-points-rotate

描述:
该函数对点集进行旋转变换,支持2D和3D点坐标。旋转中心点和角度可自定义,自动处理UCS到WCS的坐标转换。

调用格式:
(xdrx-points-rotate <基点> <旋转角度> <点1> <点2> ...)

参数说明:
* <基点>: 旋转中心点坐标
* <旋转角度>: 旋转角度(度),支持整数或实数
* <点1>, <点2>, ...: 需要旋转的点集

返回值:
返回旋转后的点坐标列表

示例用法1(2D点旋转):
(xdrx-points-rotate '(0 0) 90 '(1 0) '(0 1))
返回: ((0.0 1.0) (-1.0 0.0))

示例用法2(3D点旋转):
(xdrx-points-rotate '(0 0 0) 45 '(1 0 0) '(0 1 0))
返回: ((0.7071 0.7071 0.0) (-0.7071 0.7071 0.0))

注意事项:
1. 自动处理UCS到WCS坐标转换
2. 旋转角度单位为度
3. 3D点的Z坐标保持不变
------------------------------------------------------------
63
函数名称: xdrx-points-scale

描述:
该函数对点集进行缩放变换,支持2D和3D点坐标。缩放中心点和比例可自定义,自动处理UCS到WCS的坐标转换。

调用格式:
(xdrx-points-scale <基点> <缩放比例> <点1> <点2> ...)

参数说明:
* <基点>: 缩放中心点坐标
* <缩放比例>: 缩放比例系数,支持整数或实数
* <点1>, <点2>, ...: 需要缩放的点集

返回值:
返回缩放后的点坐标列表

示例用法1(2D点缩放):
(xdrx-points-scale '(0 0) 2 '(1 0) '(0 1))
返回: ((2.0 0.0) (0.0 2.0))

示例用法2(3D点缩放):
(xdrx-points-scale '(0 0 0) 0.5 '(1 0 0) '(0 1 0))
返回: ((0.5 0.0 0.0) (0.0 0.5 0.0))

注意事项:
1. 自动处理UCS到WCS坐标转换
2. 缩放比例>1为放大,0<比例<1为缩小
3. 3D点的Z坐标保持不变
------------------------------------------------------------
64
函数名称: xdrx-points-selfintersects

描述:
该函数检测点集形成的多段线是否存在自相交情况,返回所有自相交点及相关线段信息。

调用格式:
(xdrx-points-selfintersects <点1> <点2> ...)

参数说明:
* <点1>, <点2>, ...: 输入的点集(至少需要4个点)

返回值:
返回包含自相交信息的列表,每个元素格式为:
(交点坐标 线段1图元名 线段2图元名)
若无自相交则返回nil

示例用法:
(xdrx-points-selfintersects '(0 0) '(1 1) '(1 0) '(0 1))
返回: (((0.5 0.5) <图元名1> <图元名2>))

注意事项:
1. 输入点集至少需要4个点才能形成自相交
2. 返回的线段图元是临时创建的虚拟图元
3. 结果中包含所有自相交点及其对应的线段对
------------------------------------------------------------
65
函数名称: xdrx-points-shortestpaths

描述:
该函数计算点集中两点之间的所有最短路径,支持点集、多段线实体或选择集作为输入。

调用格式:
(xdrx-points-shortestpaths <点集/实体> <起点> <终点>)

参数说明:
* <点集/实体>: 点列表、多段线图元名或选择集
* <起点>: 路径起点坐标
* <终点>: 路径终点坐标

返回值:
返回包含所有最短路径的列表,每条路径是一个点坐标列表

示例用法1(点集输入):
(xdrx-points-shortestpaths ('(0 0) '(1 0) '(1 1) '(0 1)) '(0 0) '(1 1))
返回: (((0.0 0.0) (1.0 0.0) (1.0 1.0)) ((0.0 0.0) (0.0 1.0) (1.0 1.0)))

示例用法2(实体输入):
(xdrx-points-shortestpaths <多段线图元> '(0 0) '(1 1))
返回: 多段线顶点构成的最短路径

注意事项:
1. 起点和终点不能相同
2. 支持2D和3D点坐标
3. 返回所有可能的最短路径
------------------------------------------------------------
66
函数名称: xdrx-points-simplify

描述:
该函数对多段线或点集进行简化处理,支持多种简化算法,包括Visvalingam-Whyatt、Douglas-Peucker等算法。

调用格式1(实体简化):
(xdrx-points-simplify <多段线图元> [方法] [参数1] [参数2] [参数3] )

调用格式2(点集简化):
(xdrx-points-simplify (<点1> <点2> ...) [方法] [参数1] [参数2] [参数3] )

参数说明:
* <多段线图元>/<点集>: 多段线图元名或点坐标列表
* [方法]: 可选简化方法(0-VW,1-DP,2-RW,3-Opheim)
* [参数1]: 简化容差(默认0.1)
* [参数2]: 角度阈值(默认2.0)
* [参数3]: 三角形面积阈值(默认1.0)
* : 可选参数,禁用弧长权重

返回值:
返回简化后的点坐标列表或(原始顶点数 简化后顶点数)列表

示例用法1(实体简化):
(xdrx-points-simplify <多段线图元> 1 0.5)
返回: (100 50); 表示从100个顶点简化到50个

示例用法2(点集简化):
(xdrx-points-simplify ('(0 0) '(1 1) '(2 2)) 0 1.0)
返回: ((0.0 0.0) (2.0 2.0))

注意事项:
1. 默认使用VW+DP组合算法
2. 支持闭合多段线处理
3. 参数T可禁用弧长权重计算
------------------------------------------------------------
67
函数名称: xdrx-points-sortoncurve

描述:
该函数将点集或实体按照它们在曲线上的投影位置进行排序,支持多种输入类型和去重选项。

调用格式1(基本排序):
(xdrx-points-sortoncurve <曲线> <点集/实体集>)

调用格式2(带去重):
(xdrx-points-sortoncurve <曲线> <点集/实体集> T)

参数说明:
* <曲线>: 曲线图元、点列表或几何曲线对象
* <点集/实体集>: 需要排序的点坐标或实体列表
* T: 可选参数,启用去重功能

返回值:
返回排序后的点列表或实体列表,每个元素包含:
(投影点坐标 原始点坐标) 或 实体名

示例用法1(点集排序):
(xdrx-points-sortoncurve <曲线图元> ('(1 2) '(3 4) '(5 6)))
返回: (((1.1 2.1) (1 2)) ((3.2 4.2) (3 4)) ((5.3 6.3) (5 6)))

示例用法2(实体排序):
(xdrx-points-sortoncurve <曲线图元> (<实体1> <实体2>) T)
返回: (<实体名1> <实体名2>)

注意事项:
1. 支持直线、圆弧、多段线等多种曲线类型
2. 实体输入时会自动获取其关键点进行排序
3. T参数可去除重复投影点
------------------------------------------------------------
68
函数名称: xdrx-points-tablesort

描述:
该函数对点集进行表格化排序,支持按指定方向排序和容差分组,返回按行列组织的点坐标列表。

调用格式1(默认X方向排序):
(xdrx-points-tablesort <点集> [容差])

调用格式2(指定方向排序):
(xdrx-points-tablesort <点集> <方向向量> [容差])

参数说明:
* <点集>: 点图元、选择集或坐标列表
* <方向向量>: 可选,排序方向向量(默认X轴方向)
* [容差]: 可选,分组容差值(默认使用系统变量distSnap)

返回值:
返回二维列表,格式为:
((行1点列) (行2点列) ...)
每行内的点按指定方向排序

示例用法1(默认排序):
(xdrx-points-tablesort ('(0 0) '(1 1) '(0 1) '(1 0)))
返回: (((0.0 0.0) (1.0 0.0)) ((0.0 1.0) (1.0 1.0)))

示例用法2(指定方向):
(xdrx-points-tablesort <选择集> '(0 1 0) 0.5)
返回: 按Y轴方向排序的点阵

注意事项:
1. 支持点图元、选择集和坐标列表输入
2. 默认按X轴方向分组,Y轴方向排序
3. 容差参数控制点分组精度
------------------------------------------------------------
69
函数名称: xdrx-points-transform

描述:
该函数对点集进行矩阵变换,支持2D和3D变换矩阵,自动处理零值容差。

调用格式1(3D变换):
(xdrx-points-transform <点集> <3D变换矩阵>)

调用格式2(2D变换):
(xdrx-points-transform <点集> <2D变换矩阵>)

参数说明:
* <点集>: 2D或3D点坐标列表
* <变换矩阵>: 2D或3D变换矩阵

返回值:
返回变换后的点坐标列表

示例用法1(3D变换):
(xdrx-points-transform ('(1 1 1) '(2 2 2)) '((1 0 0 0)(0 1 0 0)(0 0 1 0)(1 1 1 1)))
返回: ((2.0 2.0 2.0) (3.0 3.0 3.0))

示例用法2(2D变换):
(xdrx-points-transform ('(1 1) '(2 2)) '((1 0 0)(0 1 0)(1 1 1)))
返回: ((2.0 2.0) (3.0 3.0))

注意事项:
1. 自动识别2D/3D矩阵类型
2. 自动处理小于TOL的值为0
3. 支持混合2D/3D点输入
------------------------------------------------------------
70
函数名称: xdrx-points-transformby

描述:
该函数对点集进行原地矩阵变换,直接修改输入参数而不创建新列表,适合处理大型点集。

调用格式:
(xdrx-points-transformby <变换矩阵> <点集>)

与xdrx-points-transform的区别:
1. transformby直接修改输入点集,transform返回新列表
2. transformby适合处理大型点集(内存效率高)
3. transformby不返回新列表,直接修改参数
4. transform保持原始数据不变,返回变换结果

参数说明:
* <变换矩阵>: 2D或3D变换矩阵
* <点集>: 需要变换的点坐标列表(将被直接修改)

返回值:
无显式返回值(直接修改输入参数)

示例用法:
(setq pts '((1 1)(2 2)))
(xdrx-points-transformby '((1 0 0)(0 1 0)(1 1 1)) pts)
; pts现在为((2 2)(3 3))

注意事项:
1. 会直接修改输入的点集参数
2. 自动处理小于TOL的值为0
3. 支持2D/3D混合点输入
------------------------------------------------------------
71
函数名称: xdrx-points-ucs2dcs

描述:
该函数将点坐标从用户坐标系(UCS)转换为显示坐标系(DCS),支持2D和3D点输入。

调用格式:
(xdrx-points-ucs2dcs <点集>)

参数说明:
* <点集>: 需要转换的点坐标列表(2D或3D)

返回值:
返回转换后的2D点坐标列表

示例用法1(3D点转换):
(xdrx-points-ucs2dcs '(1 1 1))
返回: (100.0 100.0)

示例用法2(2D点转换):
(xdrx-points-ucs2dcs ('(1 1) '(2 2)))
返回: ((100.0 100.0) (200.0 200.0))

注意事项:
1. 3D点会被转换为2D显示坐标
2. 直接修改输入参数
3. 若无有效点则返回nil
------------------------------------------------------------
72
函数名称: xdrx-points-ucs2ecs

描述:
该函数将点坐标从用户坐标系(UCS)转换为实体坐标系(ECS),需要指定法向量方向。

调用格式:
(xdrx-points-ucs2ecs <法向量> <点集>)

参数说明:
* <法向量>: 3D向量,定义ECS平面的法线方向
* <点集>: 需要转换的点坐标列表(2D或3D)

返回值:
返回转换后的3D点坐标列表

示例用法1(3D点转换):
(xdrx-points-ucs2ecs '(0 0 1) '(1 1 1))
返回: (1.0 1.0 0.0)

示例用法2(2D点转换):
(xdrx-points-ucs2ecs '(0 0 1) ('(1 1) '(2 2)))
返回: ((1.0 1.0 0.0) (2.0 2.0 0.0))

注意事项:
1. 法向量会被自动归一化
2. 2D点会被转换为3D坐标(z=0)
3. 若无有效点则返回nil
4. 第一个参数必须是3D向量
------------------------------------------------------------
73
函数名称: xdrx-points-ucs2wcs

描述:
该函数将点坐标从用户坐标系(UCS)转换为世界坐标系(WCS),支持2D和3D点输入。

调用格式:
(xdrx-points-ucs2wcs <点集>)

参数说明:
* <点集>: 需要转换的点坐标列表(2D或3D)

返回值:
返回转换后的点坐标列表(2D点转为2D坐标,3D点转为3D坐标)

示例用法1(3D点转换):
(xdrx-points-ucs2wcs '(1 1 1))
返回: (10.0 10.0 10.0)

示例用法2(2D点转换):
(xdrx-points-ucs2wcs ('(1 1) '(2 2)))
返回: ((10.0 10.0) (20.0 20.0))

注意事项:
1. 2D点保持2D输出,3D点保持3D输出
2. 直接修改输入参数
3. 若无有效点则返回nil
4. 转换基于当前UCS设置
------------------------------------------------------------
74
函数名称: xdrx-points-union

描述:
该函数对点集进行布尔并集运算,生成多边形并返回合并后的点集。

调用格式1(单点集):
(xdrx-points-union <点集>)

调用格式2(多点集):
(xdrx-points-union <点集1> <点集2> ...)

参数说明:
* <点集>: 3D点坐标列表或多个点集列表

返回值:
返回合并后的点集列表

示例用法1(单点集):
(xdrx-points-union '((0 0 0)(1 0 0)(1 1 0)(0 1 0)))
返回: ((0 0 0)(1 0 0)(1 1 0)(0 1 0))

示例用法2(多点集):
(xdrx-points-union '((0 0 0)(1 0 0)(1 1 0)) '((0.5 0.5 0)(1.5 0.5 0)(1.5 1.5 0)))
返回: 合并后的多边形点集

注意事项:
1. 仅处理3D点集
2. 会自动创建临时多边形实体进行计算
3. 若点共线则返回原始点集
4. 支持多个点集的连续合并
------------------------------------------------------------
75
函数名称: xdrx-points-wcs2dcs

描述:
该函数将点坐标从世界坐标系(WCS)转换为显示坐标系(DCS),支持2D和3D点输入。

调用格式:
(xdrx-points-wcs2dcs <点集>)

参数说明:
* <点集>: 需要转换的点坐标列表(2D或3D)

返回值:
返回转换后的2D点坐标列表

示例用法1(3D点转换):
(xdrx-points-wcs2dcs '(1 1 1))
返回: (100.0 100.0)

示例用法2(2D点转换):
(xdrx-points-wcs2dcs ('(1 1) '(2 2)))
返回: ((100.0 100.0) (200.0 200.0))

注意事项:
1. 3D点会被转换为2D显示坐标
2. 直接修改输入参数
3. 若无有效点则返回nil
4. 转换基于当前视图设置
------------------------------------------------------------
76
函数名称: xdrx-points-wcs2ecs

描述:
该函数将点坐标从世界坐标系(WCS)转换为实体坐标系(ECS),需要指定法向量方向。

调用格式:
(xdrx-points-wcs2ecs <法向量> <点集>)

参数说明:
* <法向量>: 3D向量,定义ECS平面的法线方向
* <点集>: 需要转换的点坐标列表(2D或3D)

返回值:
返回转换后的3D点坐标列表

示例用法1(3D点转换):
(xdrx-points-wcs2ecs '(0 0 1) '(1 1 1))
返回: (1.0 1.0 0.0)

示例用法2(2D点转换):
(xdrx-points-wcs2ecs '(0 0 1) ('(1 1) '(2 2)))
返回: ((1.0 1.0 0.0) (2.0 2.0 0.0))

注意事项:
1. 法向量会被自动归一化
2. 2D点会被转换为3D坐标(z=0)
3. 若无有效点则返回nil
4. 第一个参数必须是3D向量
5. 转换基于当前WCS设置
------------------------------------------------------------
77
函数名称: xdrx-points-wcs2ucs

描述:
该函数将点坐标从世界坐标系(WCS)转换为用户坐标系(UCS),支持2D和3D点输入。

调用格式:
(xdrx-points-wcs2ucs <点集>)

参数说明:
* <点集>: 需要转换的点坐标列表(2D或3D)

返回值:
返回转换后的3D点坐标列表

示例用法1(3D点转换):
(xdrx-points-wcs2ucs '(1 1 1))
返回: (0.5 0.5 0.5)

示例用法2(2D点转换):
(xdrx-points-wcs2ucs ('(1 1) '(2 2)))
返回: ((0.5 0.5 0.0) (1.0 1.0 0.0))

注意事项:
1. 2D点会被转换为3D坐标(z=0)
2. 直接修改输入参数
3. 若无有效点则返回nil
4. 转换基于当前UCS设置
------------------------------------------------------------
78
函数名称: xdrx-points-x_order

描述:
该函数根据X坐标顺序获取点集中的指定位置点,支持2D和3D点输入。

调用格式:
(xdrx-points-x_order <点集> <顺序号>)

参数说明:
* <点集>: 点坐标列表(2D或3D)
* <顺序号>: 整数,指定要获取的点在X排序中的位置(从1开始)

返回值:
返回按X坐标排序后指定位置的3D点

示例用法1(获取X排序第2的点):
(xdrx-points-x_order '((2 2)(1 1)(3 3)) 2)
返回: (2.0 2.0 0.0)

示例用法2(获取X排序第1的点):
(xdrx-points-x_order '((0 0 1)(1 1 0)(-1 2 3)) 1)
返回: (-1.0 2.0 3.0)

注意事项:
1. 顺序号从1开始计数
2. 2D点会被转换为3D坐标(z=0)
3. 顺序号取绝对值
4. 若参数无效则返回nil
------------------------------------------------------------


页: [1]
查看完整版本: XDrxAPI 78 个点(表)处理函数帮助手册