CAD二次开发中的公差控制
在CAD二次开发中Tolerance类或公差类的核心作用是为几何计算和比较提供一个可配置的精度容差标准以解决计算机浮点数运算带来的精度误差问题确保几何判断如相等、平行、垂直的准确性和可靠性。其主要功能和应用场景如下表所示功能类别具体作用应用场景示例几何相等性判断设置一个极小的距离值如1e-10当两点或两个向量之间的距离小于此值时即视为“相等”。判断两个点是否为同一个点判断两条线段是否共端点。几何关系判断基于设定的角度和距离容差判断向量间的平行、垂直、共线等关系。检查两条直线是否平行判断一个点是否在一条直线上。全局容差管理通过Tolerance.Global属性设置全局默认公差影响整个应用程序范围内的几何比较操作。统一设定整个CAD插件或脚本的几何计算精度标准。核心属性与方法在.NET API如AutoCAD .NET中Tolerance类通常包含以下关键属性// 示例设置和使用全局公差进行点比较 using Autodesk.AutoCAD.Geometry; // 1. 获取或设置全局公差 Tolerance globalTol Tolerance.Global; // 2. 关键容差属性值通常很小如1e-10 double equalPoint globalTol.EqualPoint; // 点相等距离容差 double equalVector globalTol.EqualVector; // 向量相等容差 // 3. 使用容差进行几何比较 Point3d pointA new Point3d(0, 0, 0); Point3d pointB new Point3d(0, 0, 0.0000000001); // 一个极近的点 // 不使用容差的直接比较可能因浮点误差返回false bool isExactEqual pointA pointB; // 使用容差进行比较在容差范围内视为相等 bool isTolerantEqual pointA.IsEqualTo(pointB, globalTol); // 当 pointA 与 pointB 的距离小于 globalTol.EqualPoint 时返回 true典型使用场景代码示例场景判断两条线段是否平行using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; public bool AreLinesParallel(Line line1, Line line2) { // 获取两条线段的方向向量 Vector3d vector1 line1.EndPoint - line1.StartPoint; Vector3d vector2 line2.EndPoint - line2.StartPoint; // 归一化向量可选但有助于稳定判断 vector1 vector1.GetNormal(); vector2 vector2.GetNormal(); // 使用全局公差判断向量是否平行包括同向和反向 // IsParallelTo 方法内部会使用 Tolerance.Global 的容差进行判断 return vector1.IsParallelTo(vector2); } // 或者使用自定义公差进行更严格或更宽松的判断 public bool AreLinesParallelWithCustomTol(Line line1, Line line2, double angleTolerance) { Vector3d v1 (line1.EndPoint - line1.StartPoint).GetNormal(); Vector3d v2 (line2.EndPoint - line2.StartPoint).GetNormal(); // 计算向量夹角余弦值的绝对值 double dotProduct Math.Abs(v1.DotProduct(v2)); // 如果余弦值接近1夹角接近0或180度则视为平行 // 使用自定义的角度容差例如cos(angleTolerance) return Math.Abs(1.0 - dotProduct) angleTolerance; }场景在复杂几何操作中确保鲁棒性// 在计算两条曲线的交点时公差至关重要 public Point3dCollection GetIntersectionPoints(Curve curve1, Curve curve2) { Point3dCollection intersectionPoints new Point3dCollection(); // 使用特定的公差进行相交计算 // 如果公差设置过小可能因浮点误差漏掉实际交点 // 设置过大则可能引入错误的交点。 curve1.IntersectWith(curve2, Intersect.OnBothOperands, intersectionPoints, IntPtr.Zero, IntPtr.Zero); // 后续处理交点时可能还需要用 Tolerance 来过滤或合并非常接近的点 return intersectionPoints; }重要性总结在CAD二次开发中由于所有几何坐标均以浮点数表示直接使用进行相等性比较几乎总是不可靠的。Tolerance类通过提供一个工程上合理的、可配置的误差允许范围使得开发者能够避免误判防止因微小的浮点误差将几何上相同的元素误判为不同。保证稳定性确保几何算法如求交、裁剪、偏移在各种情况下都能产生一致且符合预期结果。提供灵活性允许开发者根据具体需求如机械设计的高精度、建筑设计的相对精度调整精度标准。因此在进行任何涉及几何坐标或向量比较的CAD二次开发时使用Tolerance类而非直接比较是保证程序正确性的最佳实践。参考来源CAD 二次开发 Tolerance-公差 公差判断两个点或者两个向量是否相等、平行、垂直等Cad二次开发EqualPointcad修改快捷键_【收藏】史上最齐全的CAD大全cad指示箭头快捷键命令_CAD快捷键命令大全CAD标注快捷键命令汇总CAD 5-31 形位公差标注方法