pDrawable->viewportDraw(pVd);

}

Для заказных примитивов, AutoCAD вызывает ваш setAttributes (), worldDraw (), и viewportDraw () функциями, если Вы перегрузили их. AutoCAD проходит в соответствующих объектах AcGi к этим функциям. Это позволило бы AutoCAD отобразить ваш заказной примитив, также, как если это был встроенный примитив.

SetAttributes() функция инициализирует атрибуты для примитива, типа цвета, уровня, и linetype. WorldDraw () функция формирует часть из графического представления примитива, которое может быть определено независимым от любого специфического вида пространства модели или контекстов области просмотра пространства листа. ViewportDraw () функция тогда формирует часть иждивенца представления из графики примитива. Если любая из графики примитива - иждивенец представления, worldDraw () должен возвратить kFalse, и viewportDraw () должен быть осуществлен.

Наоборот, если примитив не имеет никакой графики иждивенца представления, то worldDraw () должен возвратить kTrue, и заказной примитив не осуществляет viewportDraw ().

Следующая иллюстрация показывает последовательность, в которой рисунок AutoCAD с двумя областями просмотра восстанавливается. В этом примере рисунок содержит два блока, Блок и Блок. Блок разрушен в его составляющие части, линию и круг. Блок состоит из заказного примитива. Заказной примитив разрушен, чтобы показать порядок, в котором функции вызваны, поскольку рисунок сгенерирован:

Объект AcGiContext обеспечивает общий контекст, к которому можно обращаться в течение всех частей процесса регенерации. Это обеспечивает информацию относительно текущего состояния перегенеральных. Например, Вы можете получить текущую базу данных от объекта AcGiContext в любое время в течение процесса регенерации.

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

Иерархия классов для AcGi следующая:

Базовый класс AcGiCommonDraw формирует общие функциональные возможности AcGiViewportDraw и AcGiWorldDraw. Базовый класс AcGiGeometry формирует общие функциональные возможности AcGiViewportGeometry и AcGiWorldGeometry. Эти базовые классы позволяют Вам записывать большее количество общего кода, который может обрабатывать оба случая, если желательно.

SetAttributes Функция

AcGi выполнение вызывает setAttributes() функцией на drawable, чтобы получить генерала, выполняющего атрибуты, которые нужно использовать для геометрии объекта, типа цвета, уровня, и linetype. Этот запрос сделан до запроса worldDraw() функции объекта, и AcGi использует возвращаемое значение, чтобы решить, как обработать наиболее эффективно объект позже.

Обычно Вы не будете должны перегрузить setAttributes () функция, но если Вы делаете так, Вы должны вызвать выполнение базового класса сначала и возвращать те же самые флажки в возвращаемом значении. Единственное чередование, которое может быть сделано, должно добавить дополнительные флажки к возвращаемому значению. Для подробной информации относительно флажков возвращения, см. AcGiDrawable:: setAttributes () в ObjectARX Ссылке.

Заданное по умолчанию выполнение AcDbEntity:: setAttributes () основывает цвет, уровень, linetype, lineweight и графический стиль, используя текущие свойства примитива, и возвращаемое значение включает флажок kDrawableIsEntity.

WorldDraw () Функция

WorldDraw() функция - первичный механизм для drawable, чтобы отобразить себя. От этого повторного вызова drawable использует AcGiSubEntityTraits и интерфейсы AcGiWorldGeometry, чтобы сообщить AcGi выполнение, как этот drawable должен быть представлен во всех активных областях просмотра. Для информации, которая является определенной к некоторым областям просмотра, viewportDraw () повторный вызов обеспечивается (см. “ viewportDraw () Функцию ” на странице 688).

AcDbEntity:: worldDraw () функция берет указатель на объект AcGiWorldDraw. AcGiWorldDraw - контейнерный класс для AcGi геометрии и объектов черт. Определенно, AcGiWorldDraw содержит два других объекта:

§  AcGiWorldGeometry

§  AcGiSubEntityTraits

К объекту AcGiWorldGeometry можно обращаться изнутри worldDraw() используя AcGiWorldDraw::geometry(), к объекту AcGiSubEntityTraits можно обращаться, используя AcGiWorldDraw::subEntityTraits().

Объект AcGiWorldGeometry записывает векторы на дисплей AutoCAD, использующий его набор рисунка примитивов. Примитив - команда с самым низким уровнем, имел обыкновение рисовать графические примитивы. Мировой объект геометрии имеет следующие функции для рисунка примитивов в мировых координатах, которые унаследованы от AcGiGeometry:

§  Circle

§  Circular arc

§  Polyline

§  Polygon

§  Mesh

§  Shell

§  Text

§  Xline

§  Ray

§  Draw

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

AcGi использует тот же самый setAttributes (), worldDraw (), и viewportDraw () логика на этом объекте, поскольку это использует на вашем объекте.

Объект AcGiSubEntityTraits устанавливает графические атрибуты со значением, использующие его набор функций черт:

§  Color

§  Layer

§  Linetype

§  Polygon fill type

§  Selection marker

§  Line weight (вес Линии)

§  Thickness (Толщина)

§  Графическое имя стиля (не должен измениться в течение worldDraw () или viewportDraw ())

ViewportDraw () Функция

Если drawable возвращает ложь от worldDraw () повторный вызов, это вызывает viewportDraw () однажды для каждой активной области просмотра, чтобы позволить drawable описывать его область просмотра-определенный дисплей. AcGiViewportDraw и AcGiViewportGeometry близко связаны с worldDraw () эквиваленты, потому что они происходят от тех же самых базовых классов.

ViewportDraw () функция работает подобным способом как worldDraw (). AcDbEntity:: viewportDraw () функция берет указатель на объект AcGiViewportDraw и формирует представление-определенное представление примитива. Область просмотра рисует объект, также обеспечивает доступ к другим объектам, которые включают следующее:

§  AcGiViewportGeometry

§  AcGiSubEntityTraits

§  AcGiViewport

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

§  polylineEye ()

§  polygonEye ()

§  polylineDc ()

§  polygonDc ()

Объект черт подпримитива области просмотра - тот же самый, поскольку используемое миром рисует объект (AcGiSubEntityTraits). Объект области просмотра обеспечивает функции для запроса матриц преобразования области просмотра и рассмотрения параметров.

ПРЕДУПРЕЖДЕНИЕ! Указатель на объект AcGi типа AcGiWorldDraw или AcGiViewportDraw не должен быть сохранен как глобальная или статическая переменная. Не сохраните копии указателей на объекты AcGi поперек, вызывает к worldDraw () и viewportDraw (). Однажды это возвращение функций, указатели больше не имеют силу.

Тип Регенерации Области просмотра

С тех пор AcGi - только спецификация интерфейса, это может использоваться для многих различных целей. В AutoCAD AcGi спецификация имеет несколько различных выполнения, каждый с определенной целью. 2D-display канал используется, чтобы генерировать 2-ые изображения, отображенные на экране, и имеется различная трехмерная система для постоянно представляемых видов. В дополнение к этим связанным дисплеем выполнению, имеется несколько другие, включая любого, что Вы можете развиваться.

Важно знать два других AcGi выполнения, используемые двигателем базы данных. Первый - для полномочного графического генерирования, и второй используется, чтобы взорвать объект в основные ObjectDBX примитивы. Полномочное графическое выполнение используется, когда заказной объект сохранен, сохранять графику в метафайле, который можно повторно запускать, когда рисунок загружен на системе, где заказное приложение не доступно. Взрывающееся выполнение используется взрывающимся механизмом и обнаружить границы в пределах сложного объекта.

Это могло бы быть важно для Вас, чтобы различить между этими различными выполнением.

Поэтому, AcGi выставляет тип регенерации области просмотра, котором можно делать запрос от вашего worldDraw () метод.

Тип регенерации области просмотра установлен в соответствии с AutoCAD. Вы можете сделать запрос его значения, используя AcGiWorldDraw:: regenType () функция. Значения для AcGiRegenType

    kAcGiStandardDisplay - типичный режим рисунка и используется, когда пользователь выпускает команду REGEN или редактирует вход. Примитивы должны быть представлены в каркасе в этом режиме. kAcGiHideOrShadeCommand исполняет удаление невидимой линии и указывает, что команда HIDE ИЛИ SHADE - в действительности. Примитивы должны быть представлены, используя лица в этом режиме. kAcGiRenderCommand использует материалы и модели распространения света, чтобы создать реалистично затененное изображение трехмерной модели и используется, когда пользователь выпускает команду RENDER. Примитивы должны быть представлены, используя лица в этом режиме. kAcGiSaveWorldDrawForR12 - тип, используемый для взрывающейся операции. kAcGiSaveWorldDrawForProxy - тип, используемый для генерирования полномочной графики. В этом случае все ваше исполнение должно быть сделано в worldDraw () так как viewportDraw () не поддержан для полномочной графики.

Установка Черт Примитива

Имеются три уровня, от которых цвет примитива, уровень, и значения linetype может быть установлен: drawable уровень, уровень подпримитивов, и подпримитивный уровень. Другие черты могут сходим только один или два из уровней:

§  Drawable уровень. Выполнение setAttributes () определяет, что заданные по умолчанию черты для примитивов имели обыкновение отображать drawable. Для большинства примитивов, полный объект представлен, используя текущие свойства примитива: linetype, цвет, уровень, и так далее.

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