{

// Evaluate some points and derivatives using pntOnSrf

// passed in from func1.

}

Пропуская pntOnSrf к func2, вычислитель может продолжать использовать ту же самую область данных, которая использовалась для всех оценок в func1. Если func1 не передает объект AcGePointOnSurface к func2, то func2 должен объявить новый объект AcGePointOnSurface, который создаст новую область данных и повторно вычислит данные, который был вычислен в func1. Следующий код выполняется правильно; однако, это менее эффективно чем предыдущий код:

void func1 (const AcGeSurface& srf)

{

AcGePointOnSurface pntOnSrf (srf);

...

func2 (srf);

...

}

void func2 (const AcGeSurface& srf)

{

AcGePointOnSurface pntOnSrf (srf);

.

. // Оценивает некоторые точки и производные, используя новый pntOnSrf, объявленный выше.

.

}

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

Чтобы получить лучшее использование AcGePointOnCurve2d, AcGePointOnCurve3d, и классов AcGePointOnSurface, большое количество этих объектов никогда не должно быть в контексте в то же самое время для той же самой кривой или поверхности. В большинстве местоположений, только один из этих объектов должен быть в контексте для специфической кривой или поверхности.

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

Постоянные AcGe примитивы

Этот раздел описывает классы, имел обыкновение обеспечивать инерцию для AcGe примитивов, и иллюстрирует выполнение инерции. Три класса используются, чтобы обеспечить инерцию для AcGe примитивов: AcGeFiler, AcGeLibVersion, и AcGeFileIO.

AcGeFiler - абстрактный класс, формирующий интерфейс для требований преобразования в последовательную форму AcGe. Пользователь должен обеспечить выполнение, полученное из AcGeFiler. В частности читая и пишущий внешних примитивов, и всех поверхностей кроме AcGePlane, требуют dwgFiler () функция на AcGeFiler, который будет осуществлен.

AcGeLibVersion формирует версию AcGe. Это поддержано системой.

Пользователь AcGe следит за версией AcGe, используемого через глобальную переменную, AcGe:: gLibVersion. Все записи и читают AcGe примитивов, выполнены в контексте версии используемого AcGe. Как правило, пользователь должен записать AcGe:: gLibVersion к файлу перед записью любого другого AcGe примитива (соответственно, это было бы первое чтение объекта AcGe от файла в последующем чтении). Следующие функции используются, чтобы записывать и читать этот объект (также см. следующее обсуждение AcGeFileIO класса):

Acad::ErrorStatus outFields (AcGeFiler*, const AcGeLibVersion&)

Acad::ErrorStatus inFields (AcGeFiler*, AcGeLibVersion&)

Функции I/O файла AcGe примитивов - scoped в пределах AcGeFileIO класса.

Они - коллекция статических функций для чтения и записи AcGe примитивов.

AcGe Примеры Постоянства

Следующее - пример чтения и записи AcGeExternalSurface с конкретным подклассом AcGeFiler. С целью этого примера, регистратор преобразования в последовательную форму - DWG регистратор. Следовательно, это обеспечивает постоянство, читая и пишущий формат DWG:

#include "gefiler. h"

class AcDbDwgFiler;

class AcGeDwgFiler : public AcGeFiler

{

public:

// Construct the filer with DWG filer.

// All read and write methods are implemented

// by delegating to this filer.

AcGeDwgFiler (AcDbDwgFiler* = NULL);

// Read/write methods.

//

Acad::ErrorStatus readBoolean(Adesk::Boolean*);

Acad::ErrorStatus writeBoolean(Adesk::Boolean);

Acad::ErrorStatus readBool(bool*);

Acad::ErrorStatus writeBool(bool);

Acad::ErrorStatus readChar(char*);

Acad::ErrorStatus writeChar(char);

Acad::ErrorStatus readShort(short*);

Acad::ErrorStatus writeShort(short);

Acad::ErrorStatus readLong(long*);

Acad::ErrorStatus writeLong(long);

Acad::ErrorStatus readUChar(unsigned char*);

Acad::ErrorStatus writeUChar(unsigned char);

Acad::ErrorStatus readUShort(unsigned short*);

Acad::ErrorStatus writeUShort(unsigned short);

Acad::ErrorStatus readULong(unsigned long*);

Acad::ErrorStatus writeULong(unsigned long);

Acad::ErrorStatus readDouble(double*);

Acad::ErrorStatus writeDouble(double);

Acad::ErrorStatus readPoint2d(AcGePoint2d*);

Acad::ErrorStatus writePoint2d(const AcGePoint2d&);

Acad::ErrorStatus readPoint3d(AcGePoint3d*);

Acad::ErrorStatus writePoint3d(const AcGePoint3d&);

Acad::ErrorStatus readVector2d(AcGeVector2d*);

Acad::ErrorStatus writeVector2d(const AcGeVector2d&);

Acad::ErrorStatus readVector3d(AcGeVector3d*);

Acad::ErrorStatus writeVector3d(const AcGeVector3d&);

// Set/Get methods

//

AcGeDwgFiler& setDwgFiler (AcDbDwgFiler*);

AcDbDwgFiler* dwgFiler ();

protected:

AcDbDwgFiler* mpFiler;

};

// Inline methods.

//

inline

AcGeDwgFiler::AcGeDwgFiler(AcDbDwgFiler* filer) : mpFiler(filer)

{}

inline AcGeDwgFiler&

AcGeDwgFiler::setDwgFiler(AcDbDwgFiler* filer)

{

mpFiler = filer;

return *this;

}

inline AcDbDwgFiler*

AcGeDwgFiler::dwgFiler()

{

return mpFiler;

}

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

Другие функции осуществлены тем же самым способом:

Acad::ErrorStatus AcGeDwgFiler::readBoolean(Adesk::Boolean* data)

{

return mpFiler? mpFiler->readBoolean(data) : Acad::eNoDatabase;

}

Acad::ErrorStatus AcGeDwgFiler::writeBoolean(Adesk::Boolean data)

{

return mpFiler?

mpFiler->writeBoolean(data) : Acad::eNoDatabase;

}

Следующий пример иллюстрирует постоянный класс, который использует AcGeExternalSurface. Код после объявления класса иллюстрирует чтение и запись внешнего поверхностного класса. В частности обратите внимание на это: AcGe:: gLibVersion написан из первого и впоследствии читать сначала до записи или чтения внешнего поверхностного класса:

class AcGeExternalCurve2d;

class AcGeExternalCurve3d;

class AcGeExternalBoundedSurface;

class AcGeExternalSurface;

class AcGePersistentXEnt : public AcDbObject

{

public:

ACRX_DECLARE_MEMBERS (AcGePersistentXEnt);

AcGePersistentXEnt ();

~AcGePersistentXEnt ();

Acad::ErrorStatus dwgOutFields (AcDbDwgFiler*) const;

Acad::ErrorStatus dwgInFields (AcDbDwgFiler*);

AcGeExternalSurface* mpXSrf;

};

Реализация этого класса следующая:

ACRX_DXF_DEFINE_MEMBERS(

AcGePersistentXEnt, AcDbObject, 0,

GEPERSISTENT, "GeometryLib");

Acad::ErrorStatus

AcGePersistentXEnt::dwgOutFields(AcDbDwgFiler* filer) const

{

assertReadEnabled();

Acad::ErrorStatus stat = AcDbObject::dwgOutFields(filer);

if (stat!= Acad::eOk)

{

ADS_ASSERT(0);

return stat;

}

// Only interested in a file filer.

//

if (filer->filerType() != AcDb::kFileFiler)

return stat;

AcGeDwgFiler geDwgFiler(filer);

stat = AcGeFileIO::outFields(

&geDwgFiler,

AcGe::gLibVersion);

if ((stat = AcGeFileIO::outFields(&geDwgFiler, *mpXSrf)) != Acad::eOk)

return stat;

return stat;

}

Acad::ErrorStatus

AcGePersistentXEnt::dwgInFields(AcDbDwgFiler* filer)

{

assertWriteEnabled();

Acad::ErrorStatus stat = AcDbObject::dwgInFields(filer);

if (stat!= Acad::eOk)

{

ADS_ASSERT(0);

return stat;

}

// Only interested in a file filer.

//

if (filer->filerType() != AcDb::kFileFiler)

return stat;

AcGeDwgFiler geDwgFiler(filer);

AcGeLibVersion gelibVersion;

if ((stat = AcGeFileIO::inFields(&geDwgFiler, gelibVersion)) != Acad::eOk)

return stat;

acutPrintf("\n... Reading External Surface\n");

mpXSrf = new AcGeExternalSurface;

ADS_ASSERT(mpXSrf);

if ((stat = AcGeFileIO::inFields(&geDwgFiler, *mpXSrf, gelibVersion)) != Acad::eOk)

return stat;

return stat;

}

Глава 28.Использование Библиотеки Контурных представлений

Эта глава показывает, как использовать AcBr библиотеку (libacbr. dll), чтобы обратиться к топологическим, геометрическим, и аналитическим данным, содержащимся в некоторых примитивах AutoCAD, типа solids, тел, и областей{*регионов*} (то есть объекты класса AcDb3dSolid, AcDbBody, и AcDbRegion), и бесчисленных производных типов (например, объекты класса AcDbPart, AcAsSurface, и совместимых определенных клиентом типов). С целью краткости, эта глава обращается к всем этим объектам все вместе как solids.

§  Краткий обзор

§  Домен{*область*}

§  Ограничения

§  Иерархия Классов

§  Топологические Объекты

§  AcBr Описания Класса

§  Перечислимые типы

§  Формирование Приложения

Краткий обзор

AcBr библиотека может использоваться со следующими примитивами AutoCAD:

§  AcDb3dSolid представляет твердый; это включает один или большее количество объемов.

§  AcDbRegion представляет плоскую поверхность; это могло бы содержать множественные компланарные поверхности.

§  AcDbBody - конкретный базовый класс для всех объектов контурного представления, не охваченных AcDb3dSolid или AcDbRegion, включая производные типы, определенные Autodesk Mechanical Desktop и клиентские приложения.

§  AcDbPart представляет твердый или тело листа в контексте трансляции{*блока*} или особенности в Autodesk Mechanical Desktop.

§  AcAsSurface представляет отдельную поверхность как тело листа в Autodesk Mechanical Desktop.

AcBr библиотека обеспечивает доступ только для чтения к подмножеству данных моделирования, содержащихся в AutoCAD solids. Эти solids не требованы, чтобы быть базой данных, активной, и может быть создан способом из следующих путей:

§  команды создания объекта AutoCAD (типа СФЕРЫ), или эквивалентных сценариев AutoLISP.

§  Autodesk Механические команды создания Объекта оперативной памяти (типа ADREVOLVE), или эквивалентных сценариев AutoLISP.

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