Сообщество программистов Autodesk в СНГ

ADN Club => ObjectARX => Тема начата: VLADIMIRnext от 09-06-2022, 18:15:25

Название: ucs
Отправлено: VLADIMIRnext от 09-06-2022, 18:15:25
Здравствуйте, я получил матрицу, описывающую UCS
Код - C++ [Выбрать]
  1.         resbuf result;
  2.         acedGetVar(_T("VIEWCTR"), &result);
  3.         AcGePoint3d center(result.resval.rpoint[X], result.resval.rpoint[Y], result.resval.rpoint[Z]);
  4.  
  5.         acedGetVar(_T("VIEWSIZE"), &result);
  6.         double height = result.resval.rreal;
  7.  
  8.         acedGetVar(_T("SCREENSIZE"), &result);
  9.         double width = height * result.resval.rpoint[X] / result.resval.rpoint[Y];
  10.  
  11.         matrix.entry[1][1] = -1;
  12.         matrix.entry[0][3] = center.x - (width / 2);
  13.         matrix.entry[1][3] = center.y + (height / 2);
  14.  
Игрек повернут вниз, начальная точка находится сверху слева на текущем окне.

Я получаю точки, допустим прямой (getStretchPoints) в WCS.
Не совсем понимаю, мне нужно трансформировать их по этой матрице чтобы получить их координаты в моей ucs? то есть point.transformBy(matrix).
Просто я когда так делаю, икс координата улетает куда-то, а игрек нормально трансформируется.

Если по другому делать, как мне получить нужную матрицу преобразования чтобы трансформировать координаты из WCS, в мою UCS?
Название: Re: ucs
Отправлено: Александр Ривилис от 09-06-2022, 18:22:06
Если по другому делать, как мне получить нужную матрицу преобразования чтобы трансформировать координаты из WCS, в мою UCS?
acedGetCurrentUCS возвращает матрицу преобразования UCS->WCS. Тебе нужна обратная матрица.
Название: Re: ucs
Отправлено: VLADIMIRnext от 10-06-2022, 11:33:58
Да, спасибо разобрался