Один метод создания приложения, способного к основному рассмотрению должен осуществить полностью AcGi API. Получите ваши собственные классы выполнения из классов AcGi, типа AcGiWorldDraw и AcGiWorldGeometry. Чтобы рисовать данный примитив, вызовите его worldDraw () функцией, затем пройдите в указателе на образец вашего AcGiWorldDraw-полученного класса. Вы тогда получите повторные вызовы в различных членов вашего класса. Функции члена - графические примитивы типа круга () и ломаной линии () функции. Их будут пропускать все необходимые параметры, необходимые, чтобы рисовать их. AcGi должен быть осуществлен ведущим приложением, желающим, чтобы использовать определенный графический символ, выполняющий логику, определенную примитивами. Преимущество использования AcGi состоит в том, что приложение главного компьютера не должно знать что - нибудь относительно того, как примитив предназначен, чтобы быть представленным вне установленного набора геометрических примитивов и графических черт, типа цвета, linetype, и текстового шрифта. AutoCAD имеет его собственное внутреннее выполнение AcGi, в то время как AcGix библиотека снабжала ObjectDBX, сломает многое из комплекса, выполняющего логику, указанную AcGi в относительно простой набор графических примитивов.
Некоторые методы AcGiWorldDraw - для целей запроса (deviation() и numberOfIsolines ()) и могут использоваться примитивом, чтобы определить степень, к которой различные примитивы будут “ мозаичны; ” другими словами, насколько “плотный” линии, составляющие сферу (например) были бы.
AcGiWorldDraw:: regenType () метод может использоваться, чтобы сообщить AcGi, является ли перегенеральный запрос для каркасов или лиц с нормалями. Например, это - от acgi. h file:
// Они - текущие виды режимов регенерации области просмотра.
// Этот режим не может быть установлен пользователем, но этом можно делать запрос в случае, если Вы должны брать различные действия для различных режимов регенерации.
//
//
typedef enum {
eAcGiRegenTypeInvalid = 0,
kAcGiStandardDisplay = 2,
kAcGiHideOrShadeCommand,
kAcGiRenderCommand,
kAcGiSaveWorldDrawForR12
} AcGiRegenType;
ОБРАТИТЕ ВНИМАНИЕ Для примеров использования интерфейса AcGi, см. типовой модуль в samples/common/myacgi.*.
AcGix
Эта библиотека - двигатель, который разбивает AcGi-определенную геометрию и черты в маленький, простой набор графических примитивов, определенных в соответствии с протоколом класса AcGixVectorTaker. Это работает на зарегистрированном наборе областей просмотра, для которых приложение должно обеспечить выполнение AcGixVectorTaker и AcGiViewport. AcGix делает запрос снабженного AcGiViewport для параметров регенерации и транслирует AcGi примитивы, в которые это получает от примитивов, вызывает к снабженному vectortaker. AcGix не делает никакую интерпретацию из того, как снабженные приложением области просмотра фактически отображены. Это - до выполнения AcGixVectorTaker.
Чтобы использовать AcGix с заказной графической системой скорее чем использование SimpleView, Вы должны снабдить ваши собственные выполнение Классов AcGiViewport и AcGixVectorTaker. Фактические образцы области просмотра и vectortaker могут быть разделены между множественными областями просмотра, если это имеет смысл для вашего приложения.
Принимается, что vectortaker выполнение исполнит отсечение необходимого примитивов против степеней области просмотра. AcGix библиотека снабжена в двоичной форме с набором файлов заголовка API.
Следующие файлы заголовка содержат исходное определение AcGix API:
§ include/acgix. h
§ include/acgixcontext. h
§ include/acgixstd. h
§ include/acgixutilities. h
§ include/acgixvectortaker. h
§ include/acgixviewportset. h
§ include/acgixviewportmanager. h
AcGix клиенты связываются с release/AcGix. lib, который связывает приложение с release/AcGix. dll.
Различия AcGix от просмотра в AutoCAD
Следующие особенности не поддержаны AcGix:
§ Явный порядок рисования
§ XREF
§ отсечение Блок-ссылки
§ Перспективные виды
§ отсечение впереди / назад Области просмотра
§ Комплексные linetypes
§ Lineweight
§ Графические стили
§ разработка шрифта текста TrueType
TrueType Разработка Шрифта
Хотя ни SimpleView ни WhipView, через AcGix, не поддерживает TrueType шрифты, имеется процедура, доступная в ObjectDBX для тех, кто хотят пробовать добавить TrueType поддержку шрифта на их собственный. Механизм - textMsg () метод AcGixVectorTaker класса.
Когда объект текста TrueType должен быть отображен, AcGix вызывает textMsg () методом vectortaker. В этой точке vectortaker выполнение может или обрабатывать текст или возвращать Adesk:: kFalse, чтобы инструктировать AcGix исполнять его обработку по умолчанию, которая должна преобразовать текст в SHX шрифт (txt. shx по умолчанию) и затем исполнять стандарт SHX обработка.
Координаты, снабженные textMsg () находятся в текущих образцовых координатах.
Они могут быть преобразованы к Мировой системе координат (WCS), использование снабженного преобразовывает.
Задача представления TrueType шрифты в трехмерном пространстве сложна, и это осуществление рекомендуется только для тех смотрящий достичь полной совместимости дисплея AutoCAD. Один подход может быть только, чтобы обработать это сообщение, если текст может быть представлен в виде плана для вашей области просмотра, и иначе использовать заданную по умолчанию обработку.
TextMsg () метод определен в AcGixVectorTaker. h:
virtual Adesk::Boolean
textMsg(
Adesk::Int16 nViewportId,
const TextPacket * pPacket) = 0;
Структура TextPacket содержит информацию относительно текста плюс матрица преобразования, имел обыкновение преобразовывать от текущей модели до WCS.
struct TextPacket
{
TextPacket(
const TextInfo* pInfo,
int nColor,
const AcGeMatrix3d& xModel);
int m_nColor;
const TextInfo* m_pInfo;
const AcGeMatrix3d& m_xCurrentModelToWorld;
};
Структура TextInfo содержит всю информацию относительно текста:
struct TextInfo
{
AcGePoint3d m_Position;
AcGeVector3d m_Normal;
AcGeVector3d m_Direction;
double m_Height;
double m_Width;
double m_Oblique;
const char* m_pMsg;
Adesk::Int32 m_Length;
Adesk::Boolean m_Raw;
double m_Thickness;
const AcGiTextStyle * m_pTextStyle;
};
SimpleView
SimpleView - выборка vectortaker. Это осуществляет простого менеджера области просмотра и поставляет AcGixSimpleView. AcGixSimpleView объединяет выполнение AcGiViewport и AcGixVectorTaker в отдельный объект. Это выполнение использует GDI Windows, чтобы отобразить результатов перегенеральных на экране. Полное выполнение SimpleView снабжено в исходной форме. Это может изменяться разработчиками, кто желают определить систему управления вида, которая удовлетворяет потребности их приложения. SimpleView предназначен, чтобы демонстрировать то, что требовано, чтобы управлять размещением области просмотра и работать с AcGix, чтобы формировать полный инструмент средства просмотра и служить как отправная точка для такого выполнения.
SimpleView клиенты непосредственно связываются с библиотекой release/AcGixSimpleView. lib.
Источник и соответствующий файл проекта Microsoft Visual C++ снабжены в каталоге samples/AcGixSimpleView.
AcGixBlockView обеспечивает базовый класс для различных типов представлений, которые нужно управлять SimpleView менеджером. Это позволяет, и SimpleView и WhipView управляться полиморфно тем же самым менеджером.
Использование мьютексов баз данных
Когда приложение позволяет множественным потокам пробегать код базы данных, конфликты в конечном счете возникнут. Они будут обычно приводить к ошибкам в acdbOpenObject или в вашем коде или во внутренних выполнении API. По этой причине, AcGixSimpleView поддерживает базу данных mutex.
Всякий раз, когда один из SimpleView потоков должен войти в код базы данных, это пробует получать этот mutex, ожидая, пока это не делает. ViewAcDb использует тот же самый mutex, чтобы обратиться к базе данных. Это предотвращает эти два потока от конфликта в пределах кода базы данных.
Основная процедура для многопоточного программирования - то, что всякий раз, когда Вы запускаете операцию базы данных, назовите getDatabaseMutex () методом в начале операции, и разместите запрос к releaseDatabaseMutex () в конец.
Они вызывают, должен быть соединен, иначе ваше приложение зависнет. Это означает, что, если Вы имеете инструкцию возвращения где-нибудь в середине вашего кода, удостоверитесь, что Вы имеете запрос к releaseDatabaseMutex () прежде, чем Вы выходите. Вы должны выпустить mutex, как только Вы сделаны, иначе перегенеральный поток будет ждать навсегда.
Вы можете использовать Mutex класс, включенный в AcGixSimpleViewManager. cpp, чтобы помочь Вам гарантировать, что вызывает, соединены. AcGixSimpleViewManager класс выставляет три метода для Вас, чтобы получить mutex. DatabaseMutex () метод обеспечивается для прямого доступа к mutex. Получить и методы выпуска обеспечиваются для удобства. Методы –
void getDatabaseMutex()
void releaseDatabaseMutex()
HANDLE databaseMutex()
WhipView
WhipView библиотечные орудия AcGixView и AcGixVectorTaker на вершине WHIP! Графический акселератор. WHIP! Является графическим акселератором с 2-ым кэшем изображения, сформированным на вершине HEIDI технологии Autodesk. Это экспортирует единственную функцию API, acgixAllocateWhipView (), который создает и возвращает образец AcGixBlockView. Возвращенный образец может использоваться таким же образом как любой другой AcGixBlockView. SimpleView библиотека демонстрирует создание рисунка видов, использующих WhipView. Из-за дисплейного файла, WhipView способен обслужить некоторые действия подобно кастрюле и изменять масштаб изображения без потребности в перегенеральном. Это дает лучшее работу, чем прямое выполнение GDI SimpleView.
WhipView снабжен в двоичной форме только, и состоит из несколько DLLs и файлах поддержки, представляющих WhipView библиотеку, WHIP! Компонент, HEIDI, и HDI драйверы устройства. WhipView может использоваться независимым от SimpleView, если бы не необходимые элементы AcGixBlockView. Прямое использование WHIP!, HEIDI, и HDI драйверы ObjectDBX разработчиками не поддержан.
|
Из за большого объема этот материал размещен на нескольких страницах:
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 |


