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



         

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


AcGeVector3d vFirstPartial = pntOnSrf.uDeriv (1, param);

Этот код выполняется правильно; однако более эффективно записать это следующим образом:

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

AcGeVector3d uFirstPartial = pntOnSrf.uDeriv ();

AcGeVector3d vFirstPartial = pntOnSrf.uDeriv ();

AcGePointOnCurve2d, AcGePointOnCurve3d, и классы AcGePointOnSurface не только обеспечивают способ формировать пространство параметра и информацию пространства модели точки на кривой или поверхности, они также обеспечивают более простой и более естественный интерфейс к кривой и поверхностным вычислителям чем традиционные вычислители. Типичный вычислитель поверхности Стиля C смотрит кое-что вроде следующего:

void evaluate (

int numDeriv, double u, double v, Point& pnt,

Vector[] derivArray);

 Здесь, Вы определяете, что  значение параметра (значение параметра поверхности - точка 2D, чей координаты - u, v) и запрос, сколько производных должны быть возвращены. Вычислитель тогда вычисляет точку и требуемые производные в указанном значении параметра. При требовании производных, Вы должны знать порядок, в котором они возвращены. Например, является ли смешанным частичным сохраненным в четвертом или пятом элементе массива? Вы должны также удостовериться, что Вы не проходите в массиве, который является слишком маленьким, иначе наложение записей памяти произойдет. Это может быть проблема, когда вычислитель первоначально вызван для нулевых производных или одной производной (с размером массива 2 для derivArray) и позже измененный, чтобы возвратить две производной. Если Вы забываете увеличивать размер derivArray, то наложение записей памяти происходит, потому что вычислитель возвращает пять производных векторов (две первых производной и три вторых производной) в массив, который может только держать два вектора.

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




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