为了保证草图的健壮性算法的核心在于准确计算切点。在草图中圆弧的起始角和终止角必须基于草图坐标系Sketch Coordinate System。为了让算法完全动态化我们需要引入**角度归一化Normalization**处理确保所有角度都在 $[0, 360)$ 或 $(-\pi, \pi]$ 范围内。以下是优化后的完整代码包含了计算逻辑和草图绘制方法完整的 C# 算法实现/// summary /// A形孔绘制,根据中心点坐标,长度,宽度,角度 /// /summary /// param namecenter中心点坐标/param /// param namelength中心距/param /// param namewidth圆弧直径/param /// param nameangleDegrees极角/param public void A_hole(NXOpen.Point3d center, double length, double width, double angleDegrees) { double radius width / 2.0; double angleRad angleDegrees * Math.PI / 180.0; // 1. 计算两个圆心 P1 和 P2 double halfL length / 2.0; NXOpen.Point3d p1 new NXOpen.Point3d( center.X - halfL * Math.Cos(angleRad), center.Y - halfL * Math.Sin(angleRad), center.Z); NXOpen.Point3d p2 new NXOpen.Point3d( center.X halfL * Math.Cos(angleRad), center.Y halfL * Math.Sin(angleRad), center.Z); // 计算法线基准角 double baseAngle angleDegrees; // 动态计算圆弧角度 // 左侧圆弧从 baseAngle 90 到 baseAngle 270 double start1 NormalizeAngle(baseAngle 90.0); double end1 NormalizeAngle(baseAngle 270.0); // 右侧圆弧从 baseAngle 270 到 baseAngle 450 (即 baseAngle 90) double start2 NormalizeAngle(baseAngle 270.0); double end2 NormalizeAngle(baseAngle 90.0); // 绘制 Arc(p1, radius, start1, end1); Arc(p2, radius, start2, end2); // 画两条直线连接切点 double normalAngle angleDegrees 90.0; double dx radius * Math.Cos(normalAngle * Math.PI / 180.0); double dy radius * Math.Sin(normalAngle * Math.PI / 180.0); // 直线1: P1a - P2a Line(new NXOpen.Point3d(p1.X dx, p1.Y dy, p1.Z), new NXOpen.Point3d(p2.X dx, p2.Y dy, p2.Z)); // 直线2: P1b - P2b Line(new NXOpen.Point3d(p1.X - dx, p1.Y - dy, p1.Z), new NXOpen.Point3d(p2.X - dx, p2.Y - dy, p2.Z)); } /// summary /// 辅助函数将角度规范化到 0-360 之间 /// /summary /// param nameangle/param /// returns/returns private double NormalizeAngle(double angle) { angle angle % 360.0; if (angle 0) angle 360.0; return angle; }使用方法public class chain_return { ZC_Sketch sketchnew ZC_Sketch();//新建草图 /// summary /// 生成模型 /// /summary public void dwg() { NXOpen.Point3d poit1new NXOpen.Point3d(-20, -20, 0);//创建A型孔中心点 sketch.cad.A_hole(poit1,12,8,20);//创建A型孔草图 sketch.end();//完成草图 } }结果如下,无论我们输入的条件是什么,他都会自动计算草图各项尺寸,位置角度等,可见写的好的算法一劳永逸,也不一定要完全约束,,全部会精确自动计算无误也可以不用复杂的约束技术