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



         

Манипуляция наборами выборов - часть 3


Если вектор масштаба - не, униформа, acedXformSS () сообщает о ошибке.

Следующий типовой код устанавливает выбор,  используя поле пересечения, и затем применяет следующую матрицу к этому.

|  0.5   0.0  0.0  20.0  |

|  0.0   0.5  0.0    5.0  |

|  0.0   0.0  0.5    0.0  |

|  0.0   0.0  0.0    1.0  |

Применение{*обращение*} этой матрицы масштабирует примитивы половиной (который перемещает их к началу координат) и транслирует их местоположение (20.0,5.0).

int rc, i, j;

ads_point pt1, pt2;

ads_matrix matrix;

ads_name ssname;

// Initialize pt1 and pt2 here.

rc = acedSSGet("C", pt1, pt2, NULL, ssname);

if (rc == RTNORM) {

// Initialize to identity.

ident_init(matrix);

// Initialize scale factors.

matrix[0][0] = matrix[1][1] = matrix[2][2] = 0.5;

// Initialize translation vector.

matrix[0][T] = 20.0;

matrix[1][T] = 5.0;

rc = acedXformSS(ssname, matrix);

}

Когда Вы вызываете acedDragGen (), Вы должны определить подобную функцию, чтобы позволить пользователям в интерактивном режиме управлять эффектом преобразования. Объявление функции должно иметь следующую форму:

Int scnf (ads_point запятая, ads_matrix mt)

Это должно возвратить RTNORM, если это изменило матрицу, RTNONE, если это делало не, или RTERROR, если это обнаруживает ошибку.

AcedDragGen () функция вызывает функцию scnf, каждый раз пользователь перемещает курсор. Scnf () функция устанавливает новое значение матрицы mt.

Когда scnf () возвращения с состоянием RTNORM, acedDragGen () применяет новую матрицу к набору выборов. Если не имеется никакой потребности изменить матрицу (для примера, если scnf () просто отображает переходные векторы с acedGrVecs ()), scnf () должен возвратить RTNONE. В этом случае{*регистре*}, acedDragGen () игнорирует mt и не преобразовывает набор выборов.

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

int dragsample(usrpt, matrix)

ads_point usrpt




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