Возразите, что 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 |


