1

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

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

但他们都抛出一个“未实施”的例外。

比我尝试使用一个OdGeOffsetCurve2d类。构造此类不会引发异常,但任何尝试获取该曲线的点都会引发异常。同样的例外:“未实施”。

那么,如何才能获得位于 上的点 OdGeOffsetCurve2d呢?或者有没有其他方法来计算偏移曲线?

所有这些getTrimmedOffset()方法的用途是什么?只是为了抛出异常?


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

4

2 回答 2

1

如果我理解正确,您正在尝试为已经存在的线创建一条平行线。

如果您不是专门寻找 OdGeLine2d ,我有一个解决 OdDbLine 类似问题的解决方案。正如你已经知道的,如果我们有它的端点休息来构造一条新线就是玩。
所以我会用 OdDbLine 类帮助你找到平行线的端点。你可以尝试从中获得。我的代码是 .Net 版本代码,而不是 c++ 代码。

如果你有OdDbLineClass 的对象让我们说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 线端点到计算的偏移端点
    偏移值是距当前线的数字距离 perpendicularVec.setToProduct(perpendicularVec, offSetValue);

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

    您可以使用新端点来构造一条新线。
  • 希望能帮助到你 !!

    于 2016-06-16T05:45:19.763 回答
    1

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

    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) );
    
    于 2016-09-08T00:54:38.370 回答