Однако, это конечно дезориентирует пользователям рисунков вашей программы.

Разработчики, обладающие утвержденным - позволенным AutoCAD, вероятно, будут видеть, утверждает результат assert() при загрузке рисунка, который был сохранен без надлежащего внимания к области просмотра. Экспериментирование демонстрирует, который параметры являются лучшими для вашего приложения и геометрии. Чтобы устанавливать область просмотра пространства модели, вставьте следующее:

// Набор некоторая информация области просмотра.

AcDbViewportTable* pViewportTable;

if (db. getViewportTable(pViewportTable, AcDb::kForRead) == Acad::eOk)

{

// Find the first viewport and open it for write.

AcDbViewportTableRecord *pRecord;

if (pViewportTable->getAt( "*ACTIVE", pRecord, AcDb::kForWrite) == Acad::eOk)

{

pRecord->setCenterPoint(AcGePoint2d(0.5, 0.5));

pRecord->setHeight(1.0);

pRecord->setWidth(1.0);

pRecord->close();

}

pViewportTable->close();

}

Подробности относительно областей просмотра

Имеются несколько тонкости относительно различной области просмотра, напечатывает AcDb, которые стоят обзор.

Объект AcDbDatabase может содержать и области просмотра пространства листа и пространство модели.

Они представлены различными типами AcDb внутренне.

Области просмотра Пространства модели представлены AcDbViewportTableRecords, которые содержатся в AcDbViewportTable. Они полностью несвязанны с AcDbViewport примитивами. Выпуск AutoCAD 13 и выше требует существования по крайней мере одного AcDbViewportTableRecord в AcDbViewportTable. Это будет названо “*ACTIVE”, который подразумевает, что это была активная область просмотра, когда рисунок был сохранен. Больше чем одна область просмотра могут быть “*ACTIVE” одновременно. Незаконно иметь ViewportTableRecord без имени.

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

Области просмотра Пространства листа представлены AcDbViewport. Они могут только существовать в пределах записи таблицы блоков пространства листа AcDbBlockTable. Само пространство листа должно иметь основную область просмотра пространства листа как AcDbViewport примитив в записи таблицы блоков пространства листа. В AutoCAD, эта заданная по умолчанию область просмотра создана автоматически, когда TILEMODE 0 команды выполнен. Имеется предположение в API, что эта область просмотра будет создана автоматически. Таким образом, когда новый AcDbViewport инициализирован и добавлен к записи таблицы блоков пространства листа, если основная область просмотра пространства листа еще не существует, это будет создано в течение завершения нового AcDbViewport. Обратите внимание, что это означает, что никогда не необходимо создать основную область просмотра пространства листа явно. Это совершенно имеет силу, чтобы добавить примитивы к пространству листа без когда-либо создания области просмотра пространства листа. Это - то, потому что AutoCAD может успешно открывать рисунок этого характера и автоматически создаст основную область просмотра пространства листа первый раз, когда TILEMODE, 0 команды используется. AutoCAD должен правильно отобразить примитивы в записи таблицы блоков пространства листа в пределах основной области просмотра пространства листа в то время.

В ObjectDBX, AcDbViewport::number () функция будет всегда возвращаться -1.

В ObjectARX, это сообщает о номере области просмотра текущей области просмотра в редакторе AutoCAD. Поскольку AutoCAD – не активен в ObjectDBX, это значение не имеет никакого значения. ObjectDBX обеспечивает acdbGetCurVportId () функцией, которая возвращает текущий объект ID области просмотра, когда рисунок был сохранен.

Строго рекомендуется, чтобы Вы делали обзор ObjectARX SDK документация относительно областей просмотра всех типов.

Всегда проверяйте Ваши рисунки в AutoCAD 2000

В течение развития, разработчики приложения ObjectDBX должны часто проверять законность их выполнения, открывая чертежные файлы, сохраненные их приложением в AutoCAD 2000. Это также поможет Вам в определении как к лучшему набору ваша область просмотра пространства модели.

Использование DWG файлов более ранних версий

Когда ObjectDBX открывает любой чертежный файл, это преобразовывает файл к формату AutoCAD. ObjectDBX может читать им в и сохранять их, отступает как Выпуск 13, Выпускает 14, или AutoCAD 2000, и данные не будут изменяться всегда. Это означает, что рисунок оригинала и копия, созданная с ObjectDBX смотрят тот же самый когда открыто в AutoCAD.

Для Выпуска 12 и более ранних рисунков, однако, различия в формате рисунка делают преобразование намного более обширным. Из-за этого, когда Выпуск 12 или ранее DWG файл преобразован и затем сохраненный ObjectDBX, это может появляться "от центра" первый раз, когда это открыто в AutoCAD. Причина для этого - та часть конверсионного процесса, использования AutoCAD вовлекают установление вида, основанного на ситуации работы с окнами. ObjectDBX не имеет окна, и так не может устанавливать то же самое вид. Выполнение ZOOM ALL или Изменяют масштаб изображения Степеней от подменю ZOOM меню AutoCAD View, будет более недавний рисунок.

При оценке выполнения ObjectDBX, пожалуйста имеют в виду, что чтение Выпуска AutoCAD, 14 и более ранних рисунков заставляют преобразование иметь место, который воздействует на открытое время.

Расширенные данные примитива

Регистрация Расширенных Данных Примитива (EED) поддержана в ObjectDBX. Несколько незначительных различий от ObjectARX API существуют, однако. Чтобы использовать EED, приложение должно быть зарегистрировано с базой данных. В ObjectARX API, acdbRegApp () функция наиболее вероятно использовалась бы. Этот интерфейс не поддержан в ObjectDBX, так что альтернативные функции для регистрации приложения и имеющий дело resbuf цепочки описаны здесь.

Чтобы регистрировать ваше приложение, используйте функции AcDbDatabase, чтобы получить regapp таблицу, и добавлять запись:

registerApplication(AcDbDatabase* pDatabase)

{

AcDbRegAppTable *pRegAppTable;

AcDbObjectId blockId;

if (pDatabase->getRegAppTable(pRegAppTable, AcDb::kForWrite) == Acad::eOk)

{

AcDbRegAppTableRecord *pRecord = new AcDbRegAppTableRecord;

if (pRecord)

{

pRecord->setName("ACDBTEST_APP"); // For example

if (pRegAppTable->add(blockId, pRecord) == Acad::eOk)

pRecord->close();

else

delete pRecord;

}

pRegAppTable->close();

}

}

EED добавлен к AcDbEntity как resbuf цепочка. При использовании resbuf типы, которые требуют, указатели (подобно resval. rstring), убеждаются, что разместили указатель с acdbAlloc () функция, и удалили это с acdbFree () функция ( Объявляемый в dbmain. h файле).

Растровые Изображения

Если Вы желаете записать приложение ObjectDBX, которое управляет растровыми примитивами, Вы должны сначала связаться с Модулем Поддержки Отображения (ISM) DBX, затем иметь ваше приложение, явно загружают это DBX файл перед попыткой вызвать любой из растровых API. Например, если Вы использовали AutoCAD LT уровень поддержки ACIS, включаете этот запрос:

AcRxDynamicLinker - > loadModule ("acIsmobj. dbx");

Если Вы читаете DWG файл, который содержит растровые примитивы, ObjectDBX будет пытаться загружать acIsmObj. dbx после столкновения с AcDbRasterImage примитивом в чертежном файле. ObjectDBX будет только искать сохраненный путь загрузочный модуль.

Это отличается от AutoCAD, который кроме того ищет путь поиска файлов AutoCAD.

Помните, что читатели Двигателя Изображения (ie*rd. dll, в этом случае) должны быть в том же самом каталоге как ism*.dbx файлы. Это не достаточно для этих файлов, чтобы быть на пути поиска файлов; вместо этого они должны быть в том же самом местоположении как ism*.dbx. Это поведение соответствует таковому AutoCAD.

Известные Ограничения

Пожалуйста делайте обзор секции “Советов” для AcDbDimension класса в ObjectARX Ссылке, которая документирует поведение AcDbDimension примитивов во внешней базе данных. С целью изменения или создания новых AcDbDimension примитивов API, каждая ObjectDBX база данных ведет себя как внешняя база данных. Таким образом, недавно созданный или изменяемый объект AcDbDimension будет иметь его набор dimBlockId к NULL. При запросе acdbMakeDatabaseCurrent () функция не достаточна изменить поведение, зарегистрированное в ObjectARX Readme. Это не предотвращает создание имеющего силу рисунка, поскольку AutoCAD способен к производству правильного dimBlockID для AcDbDimension в перегенеральное время.

Глава 26. Библиотека графического интерфейса

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

    AcGi Краткий обзор Установка Черт Примитива Примитивы Использование Drawables в Вашем Объекте Tessellation Isolines Преобразования Использование границ обрезки в AcGi

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

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

AcGi библиотека позволяет примитивам сделать запрос для информации относительно процесса регенерации, и детализировать набор примитивов, использующих классы геометрии.

Обратитесь к AcGi, происходит в пределах следующего три функции члена базового класса AcGiDrawable:

Adesk::Boolean

worldDraw( AcGiWorldDraw*);

void

viewportDraw( AcGiViewportDraw*);

Adesk::UInt32

setAttributes( AcGiDrawableTraits*);

AcDbEntity наследует эти функции от AcGiDrawable. Как правило, при осуществлении заказного примитива, Вы перегрузите эти функции и обеспечите ваше собственное выполнение.

Когда AutoCAD должен восстановить графику, чтобы отобразить примитив, это вызывает эти функции следующим способом:

AcGiDrawable *pDrawable;

pDrawable->setAttributes(pDt);

if (!pDrawable->worldDraw(pWd))

{

for each viewport

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