Возразите, что versioning с номером версии компонента данных иллюстрирован в следующих кодовых фрагментах от \objectarx\samples\polysamp\poly. cpp в ObjectARX SDK.

// Object Version

#define VERSION 1

...

Acad::ErrorStatus

AsdkPoly::dwgInFields(AcDbDwgFiler* filer)

{

...

// Object Version - must always be the first item

Adesk::Int16 version;

filer->readItem(&version);

if (version > VERSION)

return Acad::eMakeMeProxy;

...

}

Acad::ErrorStatus

AsdkPoly::dwgOutFields(AcDbDwgFiler* filer) const

{

...

// Object Version - must always be the first item

Adesk::Int16 version = VERSION;

filer->writeItem(version);

...

}

Acad::ErrorStatus

AsdkPoly::dxfInFields(AcDbDxfFiler* filer)

{

...

// Object Version

case AcDb::kDxfInt16:

Adesk::Int16 version;

version = rb. resval. rint;

if (version > VERSION)

return Acad::eMakeMeProxy;

break;

...

}

Acad::ErrorStatus

AsdkPoly::dxfOutFields(AcDbDxfFiler* filer) const

{

...

// Object Version

Adesk::Int16 version = VERSION;

filer->writeItem(AcDb::kDxfInt16, version);

...

}

Глава 13. Наследование от AcDbEntity

Эта глава описывает, как получить класс пользователя из AcDbEntity, и включает определенные примеры отмены виртуальных методов, обеспеченных AcDbEntity классом.

Перегрузка общих операции объекта, типа точек захвата объекта (гриппов), также обсуждена в этой главе.

Материал в этой главе предполагает, что Вы знакомы с материалом, представленным в главе 6, “примитивы”; глава 11, при Наследовании Заказного ObjectARX Класса ”; и глава 12, “ Происходящий от AcDbObject. ”

НЕ нашли? Не то? Что вы ищете?

§  Наследование заказных примитивов

§  Перегрузка общих функций примитива

§  Расширение функциональности примитива

§  Использование AcEdJig

Наследование Заказных примитивов

AcDbEntity - базовый класс для всех объектов базы данных, имеющих графическое представление.

AcDbEntity получен из AcDbObject. Создание заказного объекта возводит в степень следующие шаги.

Создавать заказной объект

1 Получают класс пользователя из AcDbEntity.

2 Перегружаемый все необходимые функции AcDbObject. См. главу 12, “ Происходящий от AcDbObject. ”

3 Перегрузят требуемые функции AcDbEntity. Это будет обсуждено в следующих разделах.

4 Перегрузят другие функции как необходимо, чтобы поддержать ваши заказные функциональные возможности.

5, если Вы хотите поддержать, команда MATCHPROP, осуществляет AcDbMatchProperties как расширение{*продление*} протокола.

6, если Вы хотите создать заказной, перемещаетесь{*перетаскиваете*} последовательность для вашего объекта, осуществляете вашу собственную версию AcEdJig.

Следующие разделы обсуждают эти темы{*разделы*} более подробно.

AcDbEntity перегружаемые функции

Следующие функции должны быть перегружены, когда Вы получаете класс пользователя из AcDbEntity:

virtual Adesk::Boolean

worldDraw(AcGiWorldDraw* mode);

virtual Acad::ErrorStatus

getGeomExtents(AcDbExtents& extents) const;

virtual Acad::ErrorStatus

transformBy(const AcGeMatrix3d& xform);

virtual Acad::ErrorStatus

getTransformedCopy(const AcGeMatrix3d& xform, AcDbEntity*& ent) const;

virtual Acad::ErrorStatus

getGripPoints(AcGePoint3dArray& gripPoints, AcDbIntArray& osnapModes, AcDbIntArray& geomIds) const;

virtual Acad::ErrorStatus

moveGripPointsAt( const AcDbIntArray& indices, const AcGeVector3d& offset);

AcDbEntity функции, обычно перегружаемые

Следующие функции обычно перегружаются при наследовании класса пользователя от AcDbEntity. Действительно ли Вы перегружаете эти функции, зависит от заказных функциональных возможностей, которые ваш класс поддерживает.

virtual void

viewportDraw(AcGiViewportDraw* mode);

virtual void

list() const;

virtual Acad::ErrorStatus

intersectWith(

const AcDbEntity* ent,

AcDb::Intersect intType,

AcGePoint3dArray& points,

int thisGsMarker = 0,

int otherGsMarker = 0) const;

virtual Acad::ErrorStatus

intersectWith(

const AcDbEntity* ent,

AcDb::Intersect intType,

const AcGePlane& projPlane,

AcGePoint3dArray& points,

int thisGsMarker = 0,

int otherGsMarker = 0) const;

virtual Acad::ErrorStatus

getOsnapPoints(

AcDb::OsnapMode osnapMode,

int gsSelectionMark,

const AcGePoint3d& pickPoint,

const AcGePoint3d& lastPoint,

const AcGeMatrix3d& viewXform,

AcGePoint3dArray& snapPoints,

AcDbIntArray& geomIds) const;

virtual Acad::ErrorStatus

getStretchPoints( AcGePoint3dArray&) const;

virtual Acad::ErrorStatus

moveStretchPointsAt(

const AcDbIntArray& indices,

const AcGeVector3d& offset);

virtual Acad::ErrorStatus

explode( AcDbVoidPtrArray& entitySet) const;

virtual Acad::ErrorStatus

getSubentPathsAtGsMarker(

AcDb::SubentType type,

int gsMark,

const AcGePoint3d& pickPoint,

const AcGeMatrix3d& viewXform,

int& numPaths,

AcDbFullSubentPath* & subentPaths,

int numInserts = 0,

AcDbObjectId* entAndInsertStack = NULL) const;

virtual Acad::ErrorStatus

applyPartialUndo(

AcDbDwgFiler* undoFiler,

AcRxClass* classObj);

virtual void

subSetDatabaseDefaults( AcDbDatabase* pDb);

virtual void

saveAs( AcGiWorldDraw* mode, AcDb::SaveType st);

AcDbEntity Функции, редко перегружаемые

Следующие функции AcDbEntity редко перегружаются:

virtual Acad::ErrorStatus

setColor( const AcCmColor &color);

virtual Acad::ErrorStatus

setColorIndex( Adesk::UInt16 color);

virtual Acad::ErrorStatus

setLinetype( const char* newVal);

virtual Acad::ErrorStatus

setLinetype( AcDbObjectId newVal);

virtual void

getEcs( AcGeMatrix3d& retVal) const;

virtual Acad::ErrorStatus

getGsMarkersAtSubentPath(

const AcDbFullSubentPath& subPath,

AcDbIntArray& gsMarkers) const;

virtual Acad::ErrorStatus

highlight( const AcDbFullSubentPath& subId = kNullSubent) const;

virtual Acad::ErrorStatus

unhighlight( const AcDbFullSubentPath& subId = kNullSubent) const;

virtual AcDbEntity*

subentPtr( const AcDbFullSubentPath& id) const;

virtual Adesk::Boolean

saveImagesByDefault() const;

virtual void

setAttributes( AcGiSubEntityTraits* pTraits);

Следующие разделы обсуждают перегрузку нескольких обычно используемых функций.

Перегрузка Общих Функций Примитива

Общие{*обычные*} функции объекта описаны в главе 6, “примитивах”. Эта глава предполагает, что Вы знакомы с материалом, представленным там. Следующие разделы описывают, как перегрузить функции, которые отображают объекты и функции, которые используют объектные поспешные пункты{*точки*}, пункты{*точки*} власти{*захвата*}, и пункты{*точки*} протяжения. Кроме того, перегружая преобразование, пересечение, и взрывается, функции обсуждены.

Перегрузка worldDraw () и viewportDraw ()

AutoCAD называет worldDraw () и viewportDraw () функциями, чтобы отобразить объект. Вы должны осуществить worldDraw () функция для любого класса, полученного из AcDbEntity. ViewportDraw () функция необязательный.

virtual Adesk::Boolean

AcDbEntity::worldDraw( AcGiWorldDraw *pWd);

virtual void

AcDbEntity::viewportDraw( AcGiViewportDraw *pVd);

Всякий раз, когда AutoCAD должен восстановить графику, чтобы отобразить объект, worldDraw () и viewportDraw () функции называются следующим способом:

if (!entity->worldDraw(pWd))

for (each relevant viewport)

entity->viewportDraw(pVd);

WorldDraw() функция формирует часть из графического представления объекта, которое может быть определено независимо от любой частности modelspace представление{*вид*} или бумажно - пространственные контексты области просмотра. ViewportDraw () функция тогда формирует часть иждивенца представления из графики объекта. Если любая из графики объекта - иждивенец представления, worldDraw() функция должна возвратить kFalse и viewportDraw () функция должна быть осуществлена. Наоборот, если объект не имеет никакой графики иждивенца представления, то worldDraw() должна возвратить kTrue, и заказной объект не осуществляет ViewportDraw().

AcDbEntity:: worldDraw () функция берет указатель на объект AcGiWorldDraw. AcGiWorldDraw - контейнерный класс для AcGi геометрии и объектов черт. Определенно, AcGiWorldDraw содержит два других объекта:

§  AcGiWorldGeometry

§  AcGiSubEntityTraits

К объекту AcGiWorldGeometry можно обращаться изнутри worldDraw(), используя AcGiWorldDraw::geometry(), и объект AcGiSubEntityTraits можно обращаться, используя

AcGiWorldDraw:: subEntityTraits() функция. Векторы записей объекта AcGiWorldGeometry к AutoCAD освежают память, используя ее набор рисунка примитивов. Примитив - команда с самым низким уровнем Используемым, чтобы тянуть{*рисовать*} графические объекты. Объект для геометрии имеет следующие функции для рисунка примитивов во внешних мировых координатах:

§  Circle

§  Circular arc

§  Polyline

§  Polygon

§  Mesh

§  Shell

§  Text

§  Xline

§  Ray

Объект AcGiSubEntityTraits устанавливает графические атрибуты со значением, использующие его набор функций черт:

§  Color

§  Layer

§  Linetype

§  Polygon fill type

§  Selection marker

AcDbEntity:: viewportDraw () функция берет указатель на объект AcGiViewportDraw и формирует представление-определенное представление объекта. Область просмотра тянет{*рисует*} объект - также контейнерный объект для других объектов, которые включают следующее:

§  AcGiViewportGeometry

§  AcGiSubEntityTraits

§  AcGiViewport

Объект геометрии области просмотра обеспечивает тот же самый список примитивов, поскольку мировая геометрия возражает, и прибавляет к этому следующие примитивы, которые используют глаз - и координаты пространства дисплея, чтобы рисовать ломаные линии и многоугольники:

§  polylineEye ()

§  polygonEye ()

§  polylineDc ()

§  polygonDc ()

Объект черт подобъекта области просмотра - тот же самый, поскольку используемое миром рисует объект (AcGiSubEntityTraits). Объект области просмотра обеспечивает функции для запроса матриц преобразования области просмотра и рассмотрения параметров.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132