Использование кодов типа строительства списка просто. В acutBuildList () запросу, вложенный список предшествует тип результата, закодируют RTLB (для Списка, начинают) и сопровождается типом результата, закодируют RTLE (для Списка Конец). Точечная пара может также быть создана. Точечные пары также начинаются с RTLB и конца с RTLE; точка обозначена типом результата, закодируют RTDOTE, и появляется между двумя членами пары.
ПРИМЕЧАНИЕ Это – изменение от более ранних версий. Приложения, которые не получают точечную пару от AutoLISP больше, должны изменить формат точечной пары перед возвращением этого с acedRetList () (. Более ранний порядок, с RTDOTE в конец, все еще поддерживается.)
ПРЕДУПРЕЖДЕНИЕ! AcutBuildList () функция не проверяет правильно построенный список AutoLISP. Например, если RTLB и коды RTLE не сбалансированы, эта ошибка не обнаружена. Если список хорошо не сформирован, AutoLISP может терпеть неудачу. Исключение кода RTLE, как гарантируют, будет фатальной ошибкой.
Следующий типовой кодовый фрагмент создает вложенный список, чтобы возвратиться AutoLISP:
res_list = acutBuildList(
RTLB, // Begin sublist.
RTSHORT, 1,
RTSHORT, 2,
RTSHORT, 3,
RTLE, // End sublist.
RTSHORT, 4,
RTSHORT, 5,
0);
if (res_list == NULL) {
acdbFail("Couldn’t create list\n");
return BAD;
}
acedRetList(res_list);
acutRelRb(res_list);
The list that this example returns to AutoLISP has the following form:
((1 2 3) 4 5)
The following code fragment constructs a dotted pair to return to AutoLISP:
res_list = acutBuildList(
RTLB, // Begin dotted pair.
RTSTR, "Sample",
RTDOTE,
RTSTR, "Strings",
RTLE, // End dotted pair.
0);
if (res_list == NULL) {
acdbFail("Couldn’t create list\n");
return BAD;
}
acedRetList(res_list);
acutRelRb(res_list);
Список, который этот пример возвращается AutoLISP, имеет следующую форму:
((“Sample” . “Strings”))
ОБРАТИТЕ ВНИМАНИЕ В AutoLISP, кодах группы DXF связери точечных пар и значениях. В ObjectARX-приложении это ненужно, потому что единственный{*отдельный*} буфер результатов содержит, и код группы (в его restype поле) и значении (в его resval поле). В то время как ObjectARX обеспечивает коды типа строительства списка как удобство, большинство ObjectARX-приложений не требует их.
Списки Примитива с Кодами DXF в ObjectARX
Как предварительно упомянуто, списки с кодами группы DXF представляют примитивы AutoCAD. AcutBuildList() функция создает такие списки. Чтобы создавать примитив, вызовите, и acutBuildList () и acdbEntMake ().
ОБРАТИТЕ ВНИМАНИЕ, что определения Примитива начинают с нуля (0) группы, которая описывает тип примитива. Поскольку списки прошли к acutBuildList () закончены с 0 (или RTNONE), это создает конфликт. Специальный тип результата закодирует RTDXF0, решает конфликт. Создайте нулевую группу в списках DXF, пропускал к acutBuildList () с RTDXF0. Если Вы пытаетесь заменять литеральный нуль на RTDXF0, acutBuildList () усекает список.
Следующий типовой кодовый фрагмент создает список DXF, который описывает круг и затем передает новый примитив к acdbEntMake (). Круг центрирован в (4,4), имеет радиус 1, и окрашен красным:
struct resbuf *newent;
ads_point center = {4.0, 4.0, 0.0};
newent = acutBuildList(
RTDXF0, "CIRCLE",
62, 1, // 1 == red
10, center,
40, 1.0, // Radius
0 );
if (acdbEntMake(newent) != RTNORM) {
acdbFail("Error making circle entity\n");
return BAD;
}
Команда и Функциональные Списки Обращения
Наконец, acutBuildList () вызван в сочетании с acedCmd (), который берет список буфера результата, чтобы вызвать AutoCAD, командует, и с acedInvoke (), который вызывает внешнюю функцию от различного
ObjectARX-приложение.
Следующий типовой кодовый фрагмент вызывает acutBuildList () и acedInvoke () чтобы вызвать команду RESET, определенную приложением выборки gravity. c:
struct resbuf *callist, *results = NULL;
callist = acutBuildList(RTSTR, "c:reset", 0);
if (acedInvoke(callist, &results) == RTERROR)
acdbFail("Cannot run RESET -- GRAVITY program may not be loaded\n");
acutRelRb(callist);
acutRelRb(results);
Эксклюзивные типы для расширенных данных
Расширенные данные (xdata) могут включать двоичные данные, организованные в куски переменной длины. Они обработаны структурой ads_binary, следующим образом:
struct ads_binary { // Binary data chunk structure
short clen; // Length of chunk in bytes
char *buf; // Binary data
};
Значение clen поля должно быть в диапазоне от 0 до 127. Если приложение требует больше чем 127 байтов двоичных данных, это должно организовать данные в множественные куски.
С Выпуском 13, DXF представление таблицы идентификаторов может включать расширенные данные примитива. Xdata возвращен как метка.
ОБРАТИТЕ ВНИМАНИЕ, что не имеется никакого механизма для возвращения двоичных данных к AutoLISP. Двоичные куски можно пропускать к другим внешним функциям посредством acedInvoke (), но только, когда они принадлежат группам (1004 в пределах расширенных данных примитива.
Вы не можете проходить, изолировал двоичные куски.
Xdata может также включать длинные целых числа. Ads_u_val объединение resval поля буфера результатов включает, и ads_binary и длинного члена для обработки расширенных данных примитива.
ОБРАТИТЕ ВНИМАНИЕ, что не имеется никакого механизма для возвращения длинного целого числа к AutoLISP. Длинные целых числа можно пропускать к другим внешним функциям посредством acedInvoke (), но только, когда они принадлежат группам (1071 в пределах расширенных данных примитива. В AutoLISP, 1071 группы поддержаны как реальные значения.
Проблемы глобализации текстовых строк
Выпуск AutoCAD 13 был расширен с поддержкой локализации, чтобы делать AutoCAD более подходящим для международных клиентов. С этой поддержкой, пользователь AutoCAD может вводить команды в местные не-английские языки, и дисплей показывает сообщения на местном языке. Поддержка для наборов символов с множественным языком вовлекает из символы из других кодовых страниц.
Иногда строки кодовой страницы системы в a. dwg файл имеют из - code-page символов, чтобы отобразить сообщения на другом языке. Эти символы не имеют никакого нормального представления в наборе символов родной системы. “\U+XXXX” и “\M+XXXX” escape-последовательности представляют эти специальные символы в строках кодовой страницы системы. XXXX - последовательность четырех шестнадцатеричных цифр, которые определяют или Уникод (единственно - символьное кодирование) идентификатор или Многобайтовый Формат обмена (MIF) закодированного символа.
Как часть усилия глобализации Autodesk, следующие функции ObjectARX существования ранее были изменены, чтобы улучшить обработку рисунков, созданных с различными версиями языка AutoCAD:
AcdbXdSize Возвращает число байтов памяти, необходимой для списка расширенных данных примитива.
AcdbXdRoom Возвращает число байтов памяти, которую примитив имеет доступный для расширенных данных.
Эти функции рассчитывают из - code-page символов по-другому.
AcdbXdSize () и acdbXdRoom () функции теперь признают “\U+XXXX” как 1 байт, но другие функции ObjectARX признают “\U+XXXX” как 7 байтов. Азиатская версия AutoCAD признает “\M+XXXX” как 2 байта.
ОБРАТИТЕ ВНИМАНИЕ На ObjectARX-приложения, которые делают явные предположения относительно предела строковой длины имен таблицы идентификаторов, и НА ТЕКСТОВЫЕ примитивы воздействуют символы " из страницы коды ".
Глава 21. Точки ввода в процессе выполнения
ObjectARX позволяет приложениям настраивать обработку входную точки. Приложение может связывать новые объектные точки привязок и автопривязывать линии выравнивания с заказными и существующими примитивами, и может контролировать, входная точка обрабатывает и изменяет входные точки. Эта глава обсуждает эти темы.
§ Заказные Режимы объектной привязки
§ Ввод направляют Управление
Заказные режимы объектной привязки
ObjectARX обеспечивает способность создать заказные режимы объектной привязки. Эти режимы позволяют приложениям связывать новые объектные поспешные точки и Автопоспешные линии выравнивания с заказными и существующими примитивами. Чтобы создавать заказной режим объектной привязки, Вы должны делать следующее:
§ Создают и регистрируют заказной режим объектной привязки.
§ Создают классы расширения протокола, чтобы исполнить входную обработку точки.
§ Создают заказной глиф.
Следующие секции обсуждают эти предметы более подробно.
Создание и регистрация заказного режима объектной привязки
Чтобы создавать заказной режим объектной привязки, Вы должны получить подкласс из AcDbCustomOsnapMode и регистрировать это с заказным объектным поспешным менеджером.
Использование заказного объектного менеджера привязок
Заказной объектный менеджер привязки обрабатывает регистрацию заказных режимов объектной привязки. Это может использоваться, чтобы добавлять, удалять, активизировать, и дезактивировать заказные режимы объектной привязки. Заказной объектный поспешный менеджер также может использоваться, чтобы сделать запрос, зарегистрирован ли указанный режим объектной привязки и активный.
Имеется единственный заказной объектный менеджер привязок для всего приложения. После того, как зарегистрирован, заказной режим объектной привязки может применяться в любом открытом документе.
Следующая глобальная функция может использоваться, чтобы обратиться к заказному объектному менеджеру:
AcDbCustomOsnapManager *
acdbCustomOsnapManager() const;
Как правило, заказные режимы объектной привязки зарегистрированы, когда приложение загружено и удалены, когда приложение разгружено, хотя они могут быть зарегистрированы и удалены в любое время.
Создание Заказных Режимов объектной привязки
Заказные режимы объектной привязки позволяют разработчику устанавливать следующие атрибуты:
§ Ключевое слово
Заказное объектное поспешное ключевое слово, что пользователь типы в, чтобы активизировать объектную привязку. И местные и глобальные ключевые слова должны быть определены.
|
Из за большого объема этот материал размещен на нескольких страницах:
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 |


