无需分解多段线,用C#修改AutoCAD轻量多段线内圆弧的Normal Z值
问题描述
- 从Rhino导出的DWG文件里,轻量多段线(lightweight polyline)内的部分圆弧Normal Z值为-1,导致平面朝向相反。平时看不出异常,但和其他多段线合并时会出问题:这类Normal Z为-1的圆弧并非严格2D对象,合并后生成的是样条曲线,而非预期的轻量多段线。
- 用AutoCAD的C# API遍历多段线顶点,调用
GetArcSegmentAt()方法能获取CircularArc3d对象,也能看到异常的Normal值,但无法直接编辑该值。轻量多段线本质是2D对象,仅能就地编辑圆弧的bulge值,可这种操作没法把Normal Z值重置为正确的(0,0,1)。
已尝试的代码
acPlLwObj = acTrans.GetObject(acObj, OpenMode.ForWrite) as Polyline; for (int i = 0; i < acPlLwObj.NumberOfVertices; i++) { var acPlArc = acPlLwObj.GetArcSegmentAt(i); acPlArc.SetAxes(normalZ2d, acPlArc.ReferenceVector); } acTrans.Commit();
注:normalZ2d为Vec3D类型的(0, 0, 1)
其他尝试的问题
直接修改多段线对象的Normal值,会导致多段线绕原点沿X轴镜像到负方向,不符合需求。
核心疑问
有没有无需分解多段线再重新创建,就能通过C#修改轻量多段线内圆弧Normal Z值的方法?
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

