в текущем XY плане, но
ads_matrix matrix;
{
ident_init(matrix); // Initialize to identity.
// Initialize translation vector.
matrix[0][T] = usrpt[X];
matrix[1][T] = usrpt[Y];
matrix[2][T] = usrpt[Z];
return RTNORM; // Matrix was modified.
}
Наоборот, следующая версия dragsample () масштабирует набор выборов в текущем XY плане, но не перемещает это.
int dragsample(usrpt, matrix)
ads_point usrpt
ads_matrix matrix;
{
ident_init(matrix); // Initialize to identity.
matrix[0][0] = userpt[X];
matrix[1][1] = userpt[Y];
return RTNORM; // Matrix was modified.
}
Запрос к acedDragGen () который использует функцию преобразования, напоминает это:
int rc;
ads_name ssname;
ads_point return_pt;
// Prompt the user for a general entity selection:
if (acedSSGet(NULL, NULL, NULL, NULL, ssname) == RTNORM)
rc = acedDragGen(ssname, // The new entities
"Scale the selected objects by dragging", // Prompt
0, // Display normal cursor (crosshairs)
dragsample, // Pointer to the transform function
return_pt); // Set to the specified location
Более сложные преобразования могут вращать примитивы, комбинировать{*объединять*} преобразования (как в acedXformSS () пример), и т.д.
Объединение матриц преобразования известно как матричный состав. Следующая функция составляет две матрицы преобразования, возвращая их изделие{*программу*} в resmat.
void xformcompose(ads_matrix xf1, ads_matrix xf2,
ads_matrix resmat)
{
int i, j, k;
ads_real sum;
for (i=0; i<=3; i++) {
for (j=0; j<=3; j++) {
sum = 0.0;
for (k=0; k<3; k++) {
sum += xf1[i,k] * xf2[k,j];
}
resmat[i,j] = sum;
}
}
}
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий