在 TeighaOpen Design Alliance 的开发平台中evaluatePoint是一个用于几何计算和参数化评估的核心函数主要用于在参数空间和模型空间之间进行坐标转换以及计算曲线或曲面在给定参数位置上的精确几何属性。其核心作用可归纳为下表作用维度具体描述坐标与几何求值根据给定的参数如曲线上的参数t或曲面上的参数(u, v)计算并返回对应模型空间中的三维坐标点、法向量、切向量等几何信息 。参数化与逆向求参对于已知的模型空间点可利用其逆向功能通常配合其他方法找到曲面上最近点的参数坐标是实现点投影、最短距离计算的基础 。支撑高级建模操作为曲面修剪、边界生成、等参线提取、局部几何分析如曲率、连续性检查等复杂操作提供底层数据支持 。核心作用详解evaluatePoint是处理 NURBS非均匀有理 B样条曲线和曲面的关键接口。在 CAD 中复杂的几何形状通常由参数化数学形式定义evaluatePoint就是解读这种数学定义的“翻译器”。从参数到空间点的映射这是其最基本的功能。例如对于一条 NURBS 曲线其形状由控制点、节点向量和权值定义。参数t的取值范围通常被归一化到[0, 1]。调用evaluatePoint(t)即可得到该参数值对应的、在三维模型空间中的精确(x, y, z)坐标 。获取微分几何属性高级的evaluatePoint实现不仅能返回位置还能返回在该参数点处的一阶导数切向量、二阶导数与曲率相关甚至法向量对于曲面。这些信息对于分析几何特性、生成偏移曲线/曲面、进行光照渲染计算都至关重要。作为更复杂算法的基石许多 CAD 操作都依赖于密集的点求值。离散化与显示为了在屏幕上显示一条光滑曲线需要沿参数方向采样一系列t值对每个值调用evaluatePoint得到离散点然后连接成多段线。点投影将空间中的一个点投影到曲线或曲面上本质是寻找曲线上参数t使得evaluatePoint(t)的结果与目标点的距离最小。这通常需要迭代调用evaluatePoint及其导数。求交计算判断两条曲线是否相交常转化为求参数方程根的问题过程中需反复求值。典型使用方法与代码示例在 Teigha 的 C API 中evaluatePoint通常作为OdGeCurve如OdGeNurbCurve3d或OdGeSurface如OdGeNurbSurface等几何类的一个成员函数存在。以下是一个使用OdGeNurbCurve3d的evaluatePoint方法的基本示例#include OdGeNurbCurve3d.h #include iostream void evaluateCurvePointExample() { // 假设已通过某种方式如从DWG文件读取创建或获取了一条NURBS曲线 nurbCurve OdGeNurbCurve3d nurbCurve; // ... (此处省略曲线构建代码通常涉及设置控制点、节点向量、阶数等) // 定义要评估的参数值通常范围在[0, 1]或曲线的定义域内 double paramT 0.5; // 声明变量用于接收求值结果 OdGePoint3d pointOnCurve; // 三维坐标点 OdGeVector3d firstDeriv; // 一阶导数切向量 OdGeVector3d secondDeriv; // 二阶导数 // 调用 evaluatePoint 方法。 // 第二个参数指定需要计算的导数阶数0-只求位置1-位置一阶导2-位置一阶导二阶导。 // 函数返回一个状态码如 eOk 表示成功。 OdResult res nurbCurve.evaluatePoint(paramT, 2, pointOnCurve, firstDeriv, secondDeriv); if (res eOk) { std::cout 在参数 t paramT 处 std::endl; std::cout 位置坐标: ( pointOnCurve.x , pointOnCurve.y , pointOnCurve.z ) std::endl; std::cout 切向量: ( firstDeriv.x , firstDeriv.y , firstDeriv.z ) std::endl; // 可根据一阶、二阶导数进一步计算曲率等 } else { std::cerr 求值失败错误码: res std::endl; } }对于曲面OdGeNurbSurface用法类似但参数是一对(u, v)// 假设有一个 OdGeNurbSurface 对象 surface double paramU 0.3; double paramV 0.7; OdGePoint3d pointOnSurface; OdGeVector3d normalVec; // 法向量 // 计算曲面在(u,v)处的点和法向量 OdResult res surface.evaluatePoint(paramU, paramV, 0, pointOnSurface, nullptr, nullptr, normalVec); if (res eOk) { // 使用 pointOnSurface 和 normalVec }应用场景举例生成加工路径在 CAM 中需要根据 CAD 模型计算刀具中心轨迹。对于曲面精加工需要沿参数方向(u, v)密集采样对每个采样点调用evaluatePoint得到刀具接触点坐标再根据法向量计算刀位点。模型检查与分析评估曲面在特定参数线如u0.5的等参线上的连续性G0,G1,G2需要在该线附近采样多个点计算并比较位置、切向量和曲率这些计算都依赖于evaluatePoint。数据转换与导出将高精度 NURBS 模型导出为三角网格STL或其他格式时需要通过evaluatePoint在参数域内规律采样生成离散的顶点。总之evaluatePoint是 Teigha 几何内核中连接抽象的数学参数定义与具体的三维几何数据的桥梁。几乎任何需要从参数化曲线曲面获取精确几何信息的操作最终都会调用到此函数或其变体是进行高级 CAD 二次开发不可或缺的基础工具 。