ObjectARX, AutoCAD. Среда программирования библиотеки C++

Функции Кривой


Абстрактный класс AcDbCurve обеспечивает множество функций для действия на кривых, включая функции для проектирования, распространения{*продления*}, и кривых смещения, также как набора функций для запроса параметров кривой. Кривые могут быть определены или в пространстве{*пробеле*} параметра или в Декартовом координатном пространстве. Трехмерная кривая - функция одного параметра (f (t)), в то время как трехмерная поверхность - функция двух параметров (f (u, v)). Конверсионные функции позволяют Вам конвертировать{*преобразовывать*} данные от его представления параметра до точек в Декартовой системе координат.

Сплайны, например, являются лучшими представленными в пространстве{*пробеле*} параметра. Чтобы разбивать сплайн на три равных части, Вы сначала находите параметры, которые соответствуют точкам сплайна и затем работают на сплайне в пространстве{*пробеле*} параметра.

Кривые могут использоваться как границы вырезки, границы продления, и как объекты конструкции для создания сложных трехмерных примитивов.

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

// Accepts an ellipse object ID, opens the ellipse, and uses

// its getOrthoProjectedCurve member function to create a

// new ellipse that is the result of a projection onto the

// plane with normal <1,1,1>. The resulting ellipse is

// added to the model space block Table Record.

//

void

projectEllipse(AcDbObjectId ellipseId)

{



AcDbEllipse *pEllipse;

acdbOpenObject(pEllipse, ellipseId, AcDb::kForRead);

// Now project the ellipse onto a plane with a

// normal of <1, 1, 1>.

//

AcDbEllipse *pProjectedCurve;

pEllipse->getOrthoProjectedCurve(AcGePlane(

AcGePoint3d::kOrigin, AcGeVector3d(1, 1, 1)),

(AcDbCurve*&)pProjectedCurve);

pEllipse->close();

AcDbObjectId newCurveId;

addToModelSpace(newCurveId, pProjectedCurve);

}

// Accepts an ellipse object ID, opens the ellipse, and uses

// its getOffsetCurves() member function to create a new

// ellipse that is offset 0.5 drawing units from the

// original ellipse.

//

void

offsetEllipse(AcDbObjectId ellipseId)

{

AcDbEllipse *pEllipse;

acdbOpenObject(pEllipse, ellipseId, AcDb::kForRead);

// Now generate an ellipse offset by 0.5 drawing units.

//

AcDbVoidPtrArray curves;

pEllipse->getOffsetCurves(0.5, curves);

pEllipse->close();

AcDbObjectId newCurveId;

addToModelSpace(newCurveId, (AcDbEntity*)curves[0]);

}



Содержание раздела