Вычисление кривой смещения с 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) );