Вычисление кривой смещения с Teigha 4.1.1

Я борюсь с вычислением параллельной линии к существующей линии на определенном расстоянии.

Я пытался:
OdGeLine2d::getTrimmedOffset()
OdGeLineSeg2d::getTrimmedOffset()
OdGeLine3d::getTrimmedOffset()
OdGeLineSeg3d::getTrimmedOffset()

но все они создают исключение "не реализовано".

Чем я пытался использовать OdGeOffsetCurve2d учебный класс. Построение этого класса не вызывает исключения, но любая попытка получить точку этой кривой делает. То же исключение: "Не реализовано".

Итак, как можно получить точку, которая лежит на OdGeOffsetCurve2d? Или есть какой-то другой способ для вычисления кривой смещения?

И что это все getTrimmedOffset() методы для? Просто, чтобы бросить исключения?


PS: У меня недостаточно репутации, чтобы создать новый тег Teigha. Пожалуйста, сделайте это и отредактируйте мой вопрос. Teigha - это базовая библиотека для разработки приложений САПР https://www.opendesign.com/.

2 ответа

Решение

Если я правильно понимаю, вы пытаетесь создать параллельную линию к уже существующей линии.

Если вы специально не ищете OdGeLine2d, у меня есть решение для аналогичной проблемы с OdDbLine. Как вы уже знаете, построить новую линию, если у нас есть ее конечные точки, остальное - игра.
Поэтому я помогу вам найти конечные точки параллельной линии с помощью класса OdDbLine. Вы можете попытаться извлечь из этого. Мой код - это код версии.Net, а не код C++.

Если у вас есть и объект OdDbLine Класс скажем OdDbLine line

  • а) получить свои конечные точки

    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) );
    
    Другие вопросы по тегам