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);