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



         

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


void mcs2wcs(xform, entpt, is_pt, worldpt)

ads_matrix xform;

ads_point entpt, worldpt;

int is_pt;

{

int i, j;

worldpt[X] = worldpt[Y] = worldpt[Z] = 0.0;

for (i=X; i<=Z; i++)

for (j=X; j<=Z; j++)

worldpt[i] += xform[i][j] * entpt[j];

if (is_pt) // If it’s a point, add in the displacement

for (i=X; i<=Z; i++)

worldpt[i] += xform[i][T];

}

Следующий кодовый фрагмент показывает, как mcs2wcs () мог бы использоваться в конъюнкции с acedNEntSelP () чтобы транслировать значения точки в поток WCS.

ads_name usrent, containent;

ads_point usrpt, defpt, wcspt;

ads_matrix matrix;

struct resbuf *containers, *data, *rb, *prevrb;

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

&containers);

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

return BAD;

data = acdbEntGet(usrent);

// Extract a point (defpt) from the data obtained by calling

// acdbEntGet() for the selected kind of entity.

.

.

.

mcs2wcs(matrix, defpt, TRUE, wcspt);

AcedNEntSelP () функция также позволяет программе определять точку указки. Pickflag параметр определяет, действительно ли acedNEntSelP () называется в интерактивном режиме.

В следующем примере, acedNEntSelP () запрос определяет его собственную точку для выбора примитива и не запрашивает пользователя. Pickflag параметр ИСТИНЕН, чтобы указать, что запрос поставляет{*снабжает*} его собственному значению точки (также, подсказка - NULL).

ads_point ownpoint;

ownpoint[X] = 2.7; ownpoint[Y] = 1.5; ownpoint[Z] = 0.0;

status = acedNEntSelP(NULL, usrent, ownpt, TRUE, matrix, &containers);

AcedNEntSel () функция обеспечивается для совместимости с существующими ObjectARX-приложениями. Новые приложения должны быть написаны, используя acedNEntSelP ().

Модель к Мировой Матрице преобразования, возвращенной запросом к acedNEntSel () имеет ту же самую цель как возвращенное acedNEntSelP (), но это - 4x3, матрица — прошла как массив четырех точек —, который использует соглашение, что точка - строка скорее чем столбец. Преобразование описано следующим матричным умножением:




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