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



         

Функции Преобразования


AcDbEntity класс предлагает две функции преобразования. TransformBy() функция применяет матрицу к объекту. GetTransformedCopy () функция дает возможность объекту возвратить копию себя С преобразованием, прикладным к этому.

Если объект однородно масштабируется и ортогональный, заданное по умолчанию выполнение AcDbEntity:: getTransformedCopy () функция имитирует объект и затем вызывает transformBy () функция на имитируемом объекте. (Используйте AcGeMatrix3d:: isUniScaledOrtho () функция, чтобы определить, масштабируется ли входная матрица однородно и ортогональный.)

Заказной AsdkPoly класс перегружает, и transformBy () функция и getTransformedCopy () функция. Когда AsdkPoly неравномерно масштабируется, это становится ломаной линией.

Acad::ErrorStatus

AsdkPoly::transformBy(const AcGeMatrix3d& xform)

{

// If we’re dragging, we aren’t really going to change our

// data, so we don’t want to make an undo recording nor do

// we really care if the object’s open for write.

//

if (mDragDataFlags & kCloneMeForDraggingCalled) {

mDragDataFlags &= kUseDragCache;

mDragPlaneNormal = mPlaneNormal;

mDragElevation = mElevation;

AcGeMatrix2d xform2d(xform.convertToLocal(mDragPlaneNormal,

mDragElevation));

mDragCenter = xform2d * center();

mDragStartPoint = xform2d * startPoint();

mDragPlaneNormal.normalize();

} else {

assertWriteEnabled();

AcGeMatrix2d xform2d(xform.convertToLocal(mPlaneNormal,

mElevation));

mCenter.transformBy(xform2d);

mStartPoint.transformBy(xform2d);

mPlaneNormal.normalize();

}

return Acad::eOk;

}

Acad::ErrorStatus AsdkPoly::getTransformedCopy(

const AcGeMatrix3d& mat,

AcDbEntity*& ent) const

{

assertReadEnabled();

Acad::ErrorStatus es = Acad::eOk;

AcGePoint3dArray vertexArray;

if ((es = getVertices3d(vertexArray)) != Acad::eOk)

{

return es;

}

for (int i = 0; i < vertexArray.length(); i++) {

vertexArray[i].transformBy(mat);

}

AcDbSpline *pSpline = NULL;

if ((es = rx_makeSpline(vertexArray, pSpline)) != Acad::eOk)

{

return es;

}

assert(pSpline != NULL);

pSpline->setPropertiesFrom(this);

ent = pSpline;

return es;

}




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