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

ADN Club => Inventor API => Тема начата: R.I.Chernov от 22-03-2017, 18:48:21

Название: Как сбросить поворот матрицы?
Отправлено: R.I.Chernov от 22-03-2017, 18:48:21
Доброго времени суток, уважаемые форумчане, помогите пожалуйста найти ответ на вопрос:
У меня есть матрица, которая была несколько раз повернута методом Matrix.SetToRotation(). Мне требуется аннулировать эти повороты, и вернуть ее в начальное положение, как это сделать?
П.С. Сразу прошу прощения, помнится мне, что в каком-то топике форума уже обсуждался данный вопрос, но я не смог найти.
Название: Re: Как сбросить поворот матрицы?
Отправлено: Александр Ривилис от 22-03-2017, 23:14:36
П.С. Сразу прошу прощения, помнится мне, что в каком-то топике форума уже обсуждался данный вопрос, но я не смог найти.
Ну если ты знаешь как ты поворачивал, то нужно произвести обратные преобразования, т.е. Matrix.SetToRotation() но угол с минусом. И так столько раз, сколько ты поворачивал. Причем порядок поворотов должен быть обратный к тому, который ты уже делал.
Название: Re: Как сбросить поворот матрицы?
Отправлено: R.I.Chernov от 23-03-2017, 12:03:21
Спасибо, Александр. Но я искал способ упростить предложенный вами вариант. Что вроде бы было свойство, которое отвечало за поворот матрицы, и что его можно было как бы "сбросить" на начальное значение.
Причем порядок поворотов должен быть обратный к тому, который ты уже делал.
Почему обратный порядок? Разницы ведь нет никакой, или я чего-то не знаю?
Название: Re: Как сбросить поворот матрицы?
Отправлено: Александр Ривилис от 23-03-2017, 12:45:08
Если поворот относительно одной оси, то порядок поворотов не важен. Если оси разные - важен.
Название: Re: Как сбросить поворот матрицы?
Отправлено: R.I.Chernov от 23-03-2017, 12:58:50
порядок поворотов не важен
Да, наверно вы правы, спасибо.
Название: Re: Как сбросить поворот матрицы?
Отправлено: Александр Ривилис от 23-03-2017, 13:43:35
Может быть до всех поворотов достаточно было запомнить состояние матрицы, а потом её восстановить?
Название: Re: Как сбросить поворот матрицы?
Отправлено: R.I.Chernov от 23-03-2017, 13:55:14
Может быть до всех поворотов достаточно было запомнить состояние матрицы, а потом её восстановить?
Спасибо за совет. Я тут пришел к такому выводу:
Если требуется запомнить какое-то определенное положение матрицы:

Код - C# [Выбрать]
  1. Inventor.Matrix oMatrix_tmp_save = oMatrix.Copy();
  2. // тут идут разные преобразования
  3. oMatrix = oMatrix_tmp_save.Copy() // возвращаем сохраненное значение;

Если же требуется матрицу вернуть в "нулевое положение". т.е., в котором она находится при создании, то проще это сделать так:
Код - C# [Выбрать]
  1. oMatrix = oTG.CreateMatrix(); // возвращаем "нулевое" значение
Ибо эффект тот же, что и если бы мы копировали. но кол-во строчек кода меньше.

Спасибо вам, Александр, за помощь!