ObjectARX, AutoCAD. Среда программирования библиотеки C++



         

Контекст примитива и координатное преобразовывание данных - часть 4


М00 М01 М02 М03

X' Y' Z' 1.0    =   X Y Z 1.0    x  

М10 М11 М12 М13

М20 М21 М22 М23

  0.0   0.0   0.0   1.0

Хотя матричный формат различен, формулы эквивалентны, те для типа ads_matrix, и единственного изменения{*замены*}, требуемого, чтобы приспособить mcs2wcs () для использования с acedNEntSel () должны объявить матричный параметр как массив четырех точек.

void mcs2wcs(xform, entpt, is_pt, worldpt);

ads_point xform[4]; // 4x3 version

ads_point entpt, worldpt;

int is_pt;

Форма тождества 4x3 матрица следующие:

1 0 0

0 1 0

0 0 1

0 0 0

В дополнение к использованию различного матричного соглашения, acedNEntSel () не позволяет программе определять точку указки.

Контекстные Данные

Функция acedNEntSelP () обеспечивает параметр для контекстных данных, refstkres. (Это - другая особенность, не обеспеченная acedEntSel ()). Refstkres параметр - указатель на список связей буферов результатов, который содержит названия{*имена*} контейнерных блоков примитива. Список заказывается{*упорядочивает*} от самого низкого до самого высокого. Другими словами, имя в списке - имя блока, содержащего выбранный примитив, и фамилия в списке - имя блока, который был непосредственно вставлен в рисунок. Следующий рисунок показывает формат этого списка.

Если выбранный примитив entres - не,  вложенный примитив, refstkres - указатель NULL. Это - удобный способ проверить, действительно ли координаты примитива должны быть оттранслированы. (Поскольку xformres возвращен как единичная матрица для примитивов, которые не вложены, применяя это к координатам таких примитивов не никакой вред, но стоит некоторое бесполезное время выполнения.)

Используя объявления от предыдущего acedNEntSelP () пример, имя блока, который немедленно содержит выбранный пользователем примитив, может быть найден следующим кодом (в acedNEntSelP () запрос, pickflag параметр - FALSE для интерактивного выбора).




Содержание  Назад  Вперед