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



         

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


status = acedNEntSelP(NULL, usrent, usrpt, FALSE, matrix,

&containers);

if ((status != RTNORM) || (containers == NULL))

return BAD;

containent[0] = containers->resval.rlname[0];

containent[1] = containers->resval.rlname[1];

Имя наиболее удаленного контейнера (то есть примитив, первоначально вставленный в рисунок) может быть найдено последовательностью типа следующего:

// Проверить это, контейнеры не уже NULL.

rb = containers;

while (rb != NULL) {

prevrb = rb;

rb = containers->rbnext;

}

// Буфер результатов, указанный prevrb теперь содержит имя наиболее удаленного блока.

В следующем примере, текущая система координат - WCS. Использование AutoCAD, создайте блок по имени КВАДРАТ, состоящий из четырех линий.

Command: line

From point: 1,1

To point: 3,1

To point: 3,3

To point: 1,3

To point: c

Command: block

Block name (or ?): square

Insertion base point: 2,2

Select objects: Select the four lines you just drew

Select objects: ENTER

Тогда вставьте блок в UCS, вращал 45 градусов относительно Z оси.

Command: ucs

Origin/ZAxis/3point/Entity/View/X/Y/Z/Prev/Restore/Save/Del/?/

<World>: z

Rotation angle about Z axis <0>: 45

Command: insert

Block name (or ?): square

Insertion point: 7,0

X scale factor <1> / Corner / XYZ: ENTER

Y scale factor (default=X): ENTER

Rotation angle: ENTER

Если ObjectARX-приложение вызывает acedNEntSelP () (или acedNEntSel ()) и

пользователь выбирает левую нижнюю сторону квадрата, эти функции заставляют entres параметр равняться имени выбранной линии. Они устанавливают точку указки (ptres) в (6.46616, -1.0606,0.0) или близлежащее значение точки. Они возвращают матрицу преобразования (xformres) как показано в следующем рисунке.

Наконец, они заставляют список контейнерных примитивов (refstkres) направлять на одиночный буфер результатов содержащий имени примитива блока SQUARE.

0.707107

-0.707107

0.0

4.94975

0.707107

0.707107

0.0

0.707107

0.707107

-0.0

4.94975

-0.707107

0.707107

0.0

0.0

0.0

1.0

0.0

0.0

-0.0

1.0

0.0

0.0

0.0

1.0

4.94975

4.94975

0.0

ads_nentselp() result                                                 ads_nentsel() result




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