使用 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) );
我正在努力计算与现有线在一定距离内的平行线。
我试过:
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);
偏移值是与当前行的数值距离
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) );