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

       

Поверхности


Ориентацию поверхности частично определяют ее оцененные нормальные векторы.

Параметрическая поверхность имеет два параметра, u и v, каждое представляет  направление параметрических линий на поверхности. Если Вы берете векторное произведение u касательного вектора и v касательного вектора в той же самой точке, Вы получаете вектор, который является нормальным к поверхности. Этот вектор - естественная нормаль поверхности в той точке. Вы можете полностью изменять ориентацию поверхности,  вызывая следующую функцию:

AcGeSurface&

AcGeSurface::reverseNormal()

Поверхностный вычислитель возвращает или естественную нормаль или ее инверсию, в зависимости от того, был ли reverseNormal () вызван четный или нечетное число времен. Следующая функция возвращает значение "ИСТИННО", если ориентация поверхности - напротив естественной ориентации:

Adesk::Boolean

AcGeSurface::isNormalReversed() const

Этот пример создает круг и проектирует это на план XY. Тип проектируемого примитива тогда проверен, чтобы видеть какой примитив, в который это проектировалось:

AcGePlane plane; // Constructs XY-plane.

AcGePoint3d p1(2,3,5);

AcGeVector3d v1(1,1,1);

AcGeCircArc3d circ (p1, v1, 2.0);

AcGeEntity3d *projectedEntity = circ.project(plane,v1);

if (projectedEntity->type() == AcGe::kEllipArc3d)

...

else if (projectedEntity->type() == AcGe::kCircArc3d)

...

else if (projectedEntity->type() == AcGe::kLineSeg3d)

...

Следующий пример создает НЕОДНОРОДНЫЙ РАЦИОНАЛЬНЫЙ В-СПЛАЙН, изгибают, и находит самую близкую точку на кривой к сути p1. Самая близкая точка возвращена как объект AcGePointOnCurve3d, от которого координаты и значение параметра получены:

AcGeKnotVector knots;

AcGePoint3dArray cntrlPnts;

AcGePointOnCurve3d pntOnCrv;

AcGePoint3d p1(1,3,2);

knots.append (0.0);

knots.append (0.0);

knots.append (0.0);

knots.append (0.0);

knots.append (1.0);

knots.append (1.0);

knots.append (1.0);

knots.append (1.0);

cntrlPnts.append (AcGePoint3d(0,0,0));

cntrlPnts.append (AcGePoint3d(1,1,0));

cntrlPnts.append (AcGePoint3d(2,1,0));

cntrlPnts.append (AcGePoint3d(3,0,0));

AcGeNurbCurve3d nurb (3, knots, cntrlPnts);

nurb.getClosestPointTo(p1,pntOnCrv);

p2 = pntOnCrv.point();

double param = pntOnCrv.parameter();



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