clone() const;

virtual void

copyFrom(const AcRxObject* pSrc);

// Do not override; AcDbObject behavior is already accounted for.

//

virtual HRESULT __stdcall

QueryInterface ( REFIID riid,

void ** ppvObject );

virtual ULONG __stdcall

AddRef();

virtual ULONG __stdcall

Release();

AcDbEntity: Функции к Перегрузке

Если Вы осуществляете заказной объект, перегружают список функций см. главу 13, “ Происходящий от AcDbEntity, ”.

AcDbCurve: Функции к Перегрузке

Класс пользователя должен перегрузить следующие функции:

virtual Adesk::Boolean

isClosed() const;

virtual Adesk::Boolean

isPeriodic() const;

virtual Adesk::Boolean

isPlanar() const;

virtual Acad::ErrorStatus

getPlane(AcGePlane&, AcDb::Planarity&) const;

virtual Acad::ErrorStatus

getStartParam(double&) const;

virtual Acad::ErrorStatus

getEndParam(double&) const;

virtual Acad::ErrorStatus

getStartPoint(AcGePoint3d&) const;

virtual Acad::ErrorStatus

getEndPoint(AcGePoint3d&) const;

virtual Acad::ErrorStatus

getPointAtParam(double, AcGePoint3d&) const;

virtual Acad::ErrorStatus

getParamAtPoint(const AcGePoint3d&, double&)const;

virtual Acad::ErrorStatus

getDistAtParam(double param, double& dist) const;

virtual Acad::ErrorStatus

getParamAtDist(double dist, double& param) const;

virtual Acad::ErrorStatus

getDistAtPoint(const AcGePoint3d&, double&) const;

virtual Acad::ErrorStatus

getPointAtDist(double, AcGePoint3d&) const;

virtual Acad::ErrorStatus

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

getFirstDeriv(

double param,

AcGeVector3d& firstDeriv) const;

virtual Acad::ErrorStatus

getFirstDeriv(

const AcGePoint3d&,

AcGeVector3d& firstDeriv) const;

virtual Acad::ErrorStatus

getSecondDeriv(

double param,

AcGeVector3d& secDeriv) const;

virtual Acad::ErrorStatus

getSecondDeriv(

const AcGePoint3d&,

AcGeVector3d& secDeriv) const;

virtual Acad::ErrorStatus

getClosestPointTo(

const AcGePoint3d& givenPnt,

AcGePoint3d& pointOnCurve,

Adesk::Boolean extend

= Adesk::kFalse) const;

virtual Acad::ErrorStatus

getClosestPointTo(

const AcGePoint3d& givenPnt,

const AcGeVector3d& normal,

AcGePoint3d& pointOnCurve,

Adesk::Boolean extend

= Adesk::kFalse) const;

virtual Acad::ErrorStatus

getOrthoProjectedCurve(

const AcGePlane&,

AcDbCurve*& projCrv) const;

virtual Acad::ErrorStatus

getProjectedCurve(

const AcGePlane&,

const AcGeVector3d& projDir,

AcDbCurve*& projCrv) const;

virtual Acad::ErrorStatus

getOffsetCurves(

double offsetDist,

AcDbVoidPtrArray& offsetCurves) const;

virtual Acad::ErrorStatus

getSpline(AcDbSpline*& spline) const;

virtual Acad::ErrorStatus

getSplitCurves(

const AcGeDoubleArray& params,

AcDbVoidPtrArray& curveSegments) const;

virtual Acad::ErrorStatus

getSplitCurves(

const AcGePoint3dArray& points,

AcDbVoidPtrArray& curveSegments) const;

virtual Acad::ErrorStatus

extend(double newParam);

virtual Acad::ErrorStatus

extend(

Adesk::Boolean extendStart,

const AcGePoint3d& toPoint);

virtual Acad::ErrorStatus

getArea(double&) const;

Реализация Элемента Функции

Когда Вы определяете новый элемент, функционируют или отменяют существующую функцию, первый запрос, который Вы обычно делаете - assertReadEnabled (), assertWriteEnabled (), или assertNotifyEnabled () чтобы проверить, что объект открытый в правильном состоянии. Из этих трех функций, assertWriteEnabled () наиболее важен. Вы можете использовать эту функцию, чтобы управлять регистрацией отмены модификации, которая встречается в функции элемента. (См. “ Отмена, и Восстановите ” на странице 324.) Даже если Вы не желаете регистрации отмены, существенно{*необходимо*} вызвать assertWriteEnabled (kFalse, kFalse);

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

Следующая таблица показывает трем возможным состояниям для открытия объекта (чтение, записывать, уведомлять) и указывает, которые утверждают, что запросы преуспевают для каждого состояния. Если объект не открытый в одном из позволенных состояний для утверждающегося функционального запроса, функция не возвращается. AutoCAD выходит, и пользователь запрошен сохранить рисунок.

Object open for

Read

Write

Notify

assertReadEnabled()

returns

returns

returns

assertWriteEnabled()

aborts

returns

aborts

assertNotifyEnabled()

returns

returns

returns

Сохранение Объектов в DWG и DXF файлах

При наследовании класса от AcDbObject, Вы нуждаетесь в дополнительной информации относительно AutoCAD файловый механизм, обеспеченный в этой главе. Следующий четыре функции используются для записи в файл объектов к DWG и DXF файлам.

Они также используются для других целей, типа имитации.

Acad::ErrorStatus

AcDbObject::dwgOut(AcDbDwgFiler* filer);

Acad::ErrorStatus

AcDbObject::dwgIn(AcDbDwgFiler* filer);

Acad::ErrorStatus

AcDbObject::dxfOut(

AcDbDxfFiler* filer,

Adesk::Boolean allXdFlag,

Adesk::uchar* regAppTable) const);

Acad::ErrorStatus

AcDbObject::dxfIn(AcDbDxfFiler* filer);

Каждая функция берет указатель на файл как первый параметр. AcDbObject записывает данные к и читает данные от файла. FilerType перечисление позволяет Вам задать тип файла:

·  kFileFiler (used for DWG and DXF files)

·  kCopyFiler

·  kUndoFiler

·  kBagFiler (used with acdbEntMake(), acdbEntMod(), and acdbEntGet())

·  kIdXlateFiler

·  kPageFiler

·  kDeepCloneFiler

·  kWBlockCloneFiler

·  kPurgeFiler

DwgOut () и dwgIn () функции в свою очередь вызывают dwgOutFields () и dwgInFields (), соответственно, и DXF, файловые функции вызывают аналогичный набор функций для DXF. Если Вы получаете класс пользователя от AcDbObject, Вы будете должны отменить следующие виртуальные функции, которые используются для постоянного хранения объектов также как для копирования и отменяют операции:

    dwgOutFields () dwgInFields () dxfOutFields () dxfInFields ()

DwgOut () Функция

DwgOut () функция, которая вызывает{*называет*} dwgOutFields (), вызван следующими командами и условиями{*состояниями*}:

§  SAVE (uses kFileFiler)

§  SAVEAS (uses kFileFiler)

§  WBLOCK (uses kWblockCloneFiler and kIdXlateFiler)

§  INSERT, XREF (use kDeepCloneFiler and kIdXlateFiler)

§  COPY (использует тех же самых регистраторов как INSERT; копия требует записывающий состояние объекта и затем чтения этому назад в к объекту того же самого класса)

§  PURGE (uses a kPurgeFiler)

§  Любое время объект просматривается из (использует kPageFiler)

§  Любое время объект изменяется (для регистрации отмены; использует kUndoFiler)

DwgIn () Функция

DwgIn () функция, которая вызывает dwgInFields (), вызван следующими командами и условиями{*состояниями*}:

§  OPEN (использует kFileFiler)

§  UNDO (использует kUndoFiler)

§  INSERT, COPY, XREF (используйте kDeepCloneFiler и kIdXlateFiler)

§  WBLOCK (использует kWblockCloneFiler и kIdXlateFiler)

§  Любое время объект просматривается в (использует kPageFiler)

DxfOut () Функция

DxfOut () функция, которая вызывает{*называет*} dxfOutFields (), вызван следующими командами и функциями:

§  WBLOCK

§  SAVE

§  SAVEAS

§  acdbEntGet ()

DxfIn () Функция

DxfIn () функция, которая вызывает{*называет*} dxfInFields (), вызван следующим

Команды и функции:

§  OPEN

§  INSERT

§  acdbEntMod() или acdbEntMake()

Проверка ошибок

Когда Вы пишете в filer, Вы не должны исполнить промежуточную проверку ошибок. Как только с состоянием ошибки сталкиваются, filer возвращает то же самое состояние ошибки всем запросам записи, пока состояние не очищено регистратором.

Каждый класс filer имеет getFilerStatus () функция, которая возвращает его состояние.

Когда Вы считываете файл, Вы можете хотеть проверить состояние filer, если Вы полагаетесь на успех или неудачу для вашего следующего шага.

Реализация DWG Файловые Функции

Если Вы осуществляете dwgOutFields () и dwgInFields () для нового класса, Вы должны сначала вызвать assertReadEnabled () или assertWriteEnabled () чтобы гарантировать, что объект открыт в правильном состоянии.

Следующая вещь, которую ваш полученный класс должен делать, состоит в том, чтобы вызвать ту же самую функцию (например, dwgOutFields ()) на родительском классе. Этот процесс упомянут как передача сообщений высшего качества. Следующее - пример:

AcDbDerivedClass:: dwgOutFields (...);

{

AssertReadEnabled ()

MyParent:: dwgOutFields ();

// Исполнить класс - определенные операции после супер-передачи сообщений.

}

Если Вы забываете вызывать соответствующее сообщение родительского класса, вы получите ошибку во время выполнения программы.

После супер-передачи сообщений, Вы записываете или читаете поля. Вы можете улучшать выполнение, проверяя тип регистратора. Например, если тип регистратора - kIdXlateFiler, и ваш класс не определяет любые связи ссылки, Вы можете просто возвращаться.

С DWG файлами, Вы должны записывать и читать, вызывает тот же самый заказ{*порядок*}. Если запросы не соответствуют, получены, классы будут перепутаны. Если Вы имеете любые данные переменная-размера, помещаете индекс сначала.

Типовой Код для dwgOutFields ()

Большинство запросов регистратора - writeItem (), функция элемента, которая была перезагружена для всех поддержанных типов данных. Имеются также другие функции, типа writeInt32 () используемый в следующем примере, который может использоваться, чтобы поддержать автоматическое приведение типа. Такие функции вынуждают параметр быть обработанными как указанный тип независимо от его фактического типа в памяти.

Из за большого объема этот материал размещен на нескольких страницах:
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