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



         

Классы cпециальной оценки - часть 5


void getClosestPointTo (

const AcGePoint3d& pnt3d,

AcGePointOnSurface& closestPoint,

const AcGeTol& =AcGeContext::gTol) const;

Эта функция возвращает самую близкую точку на поверхности к точке ввода pnt3d. Самая близкая точка возвращена как объект AcGePointOnSurface, который содержит значение параметра, точку пространства модели, и другую информацию относительно той специфической точки на поверхности. Все функции в AcGe

библиотеке, которые возвращают объект AcGePointOnSurface как параметр вывода (не-константа),  уже вызвали setSurface () и setParameter () для того параметра. Поэтому, после запроса такой функции, Вы не должны сбросить значение параметра или поверхность. Например, следующий код получает значение параметра, точку пространства модели, и первые производные самой близкой точки на поверхности srf к сути pnt3d:

// Вычислить самую близкую точку на поверхности к pnt3d.

AcGePointOnSurface closestPoint;

srf.getClosestPointTo (pnt3d, closestPoint);

// Получить значение параметра, точку пространства модели, и первую производную

// Векторы самой близкой точки.

AcGePoint2d param = closestPoint.parameter ();

AcGePoint3d pnt3d = closestPoint.point ();

AcGeVector3d uFirstPartial = closestPoint.uDeriv (1),

vFirstPartial = closestPoint.vDeriv (1);

Ни один из вызывов point (), uDeriv (), или vDeriv () не должен определить поверхность или значение параметра, потому что они были уже установлены getClosestPointTo(). Вообще, setSurface () и setParameter () не должен быть вызван, если Вы явно не намереваетесь изменить поверхность или значение параметра объекта AcGePointOnSurface. Например, первая инструкция в следующем коде косвенно вызывает setSurface () и setParameter (). Вторые и третьи инструкции неэффективны, потому что они делают ненужным, вызывает к setSurface () и setParameter (), используя точный те же самые параметры как первая инструкция.

AcGePoint3d pnt3d = pntOnSrf.point (srf, param);

AcGeVector3d uFirstPartial = pntOnSrf.uDeriv (1, srf, param);




Содержание  Назад  Вперед