使用 Teigha 4.1.1 计算偏移曲线

Computing offset curve with Teigha 4.1.1

我正在努力计算与现有线在一定距离内的平行线。

我试过:
OdGeLine2d::getTrimmedOffset()
OdGeLineSeg2d::getTrimmedOffset()
OdGeLine3d::getTrimmedOffset()
OdGeLineSeg3d::getTrimmedOffset()

但他们都抛出了 "Not implemented" 异常。

比我尝试使用 OdGeOffsetCurve2d class。构造此 class 不会抛出异常,但任何尝试获取此曲线的点都会抛出异常。同样的例外:"Not implemented".

那么,如何获得位于 OdGeOffsetCurve2d 上的点?或者还有其他计算偏移曲线的方法吗?

那些 getTrimmedOffset() 方法有什么用?只是抛出异常?


PS:我没有足够的声誉来创建新的 Teigha 标签。请这样做并编辑我的问题。 Teigha 是用于开发 CAD 应用程序的核心库 https://www.opendesign.com/

如果我理解正确的话,您是在尝试创建一条与现有直线平行的直线。

如果您不是专门寻找 OdGeLine2d ,我有一个与 OdDbLine 类似的问题的解决方案。 正如您已经知道的那样,如果我们有它的端点 rest 来构造一条新线是游戏。
所以我将帮助您找到与 OdDbLine Class 平行线的端点。 你可以尝试从中推导出来。 我的代码是 .Net 版本代码而不是 c++ 版本。

如果您有 OdDbLine Class 的对象,那么可以说 OdDbLine line

  • a) 获取其终点

    OdGePoint3d startPoint = new OdGePoint3d(); line.getStartPoint(startPoint);
    OdGePoint3d endPoint = new OdGePoint3d(); line.getEndPoint(endPoint);

  • 获取直线方向,用它来计算垂直方向
    OdGeVector3d lineVector = GetLineVector(line); OdGeVector3d perpendicularVec = lineVector.perpVector(); perpendicularVec.normalize(); perpendicularVec = perpendicularVec.Mul(-1);

  • OffSet the Line End Points to calculated offset end points
    偏移值是与当前行的数值距离 perpendicularVec.setToProduct(perpendicularVec, offSetValue);

  • 在偏移位置计算出新的终点点
    OdGePoint3d newOffsetStartPt = startPoint.Add(perpendicularVec); OdGePoint3d newOffsetEndPt = endPoint.Add(perpendicularVec);

    您可以使用新端点来构造新线。
  • 希望对您有所帮助!!

    有一种更短的方法可以为线性实体制作偏移曲线。您可以复制您的线条并将其移动(转换)到必要的距离。像这样:

    OdGeLine2d ln(OdGePoint2d::kOrigin, OdGeVector2d::kXAxis);
    const double dOffsetDistance = 100.0;
    
    OdGeVector2d vOffset = ln.direction().perpVector(); //ccw rotation
    vOffset.normalize();
    vOffset *= dOffsetDistance;
    
    ln.transformBy( OdGeMatrix2d::translation(vOffset) );