1

I am struggling with computing a parallel line to the existing line in certain distance.

I have tried:
OdGeLine2d::getTrimmedOffset()
OdGeLineSeg2d::getTrimmedOffset()
OdGeLine3d::getTrimmedOffset()
OdGeLineSeg3d::getTrimmedOffset()

but all of them trow a "Not implemented" exception.

Than I tried to use a OdGeOffsetCurve2d class. Constructing of this class doesn't throw exception, but any attempt to get a point of this curve does. Same exception: "Not implemented".

So, how can a get a point that lies on the OdGeOffsetCurve2d ? Or is there any other way to compute an offset curve?

And what are all those getTrimmedOffset() methods for? Just to throw exceptions?


PS: I do not have enough reputation to create a new Teigha tag. Please, do so and edit my question. Teigha is a core library for developing CAD applications https://www.opendesign.com/.

EdChum
  • 376,765
  • 198
  • 813
  • 562
Tomas
  • 2,170
  • 10
  • 14

2 Answers2

1

If i understand correctly you are trying to create a parallel line to an already existing line.

If you not specifically looking for OdGeLine2d , i have a solution for similar problem with OdDbLine. As you already know , to construct a new line if we have its end points rest is play.
So I will help you find end Points of Parallel Line with OdDbLine Class. You can try to derive from it. My code is the .Net version code and not the c++ one.

If you have and object of OdDbLine Class lets say OdDbLine line

  • a) Get its End Points

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

  • Get the line direction, use it to compute perpendicular direction
    OdGeVector3d lineVector = GetLineVector(line); OdGeVector3d perpendicularVec = lineVector.perpVector(); perpendicularVec.normalize(); perpendicularVec = perpendicularVec.Mul(-1);

  • OffSet the Line End Points to calculated offset end points
    Offset value is the numerical distance from your current line perpendicularVec.setToProduct(perpendicularVec, offSetValue);

  • Calculated new End Points Point at Offset Location
    OdGePoint3d newOffsetStartPt = startPoint.Add(perpendicularVec); OdGePoint3d newOffsetEndPt = endPoint.Add(perpendicularVec);

    You can use the new endpoints to construct a new Line.
  • Hope it helps !!

    Alok
    • 46
    • 4
    1

    There is a shorter way to make an offset curve for a linear entity. You can make a copy of your line and move it (transform it) to a nessesary distance. Like this:

    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) );