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 |


