FamilyInstance Rotation property

Автор Тема: FamilyInstance Rotation property  (Прочитано 4690 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн sdv79Автор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
FamilyInstance Rotation property
« : 22-09-2020, 16:38:57 »
Подскажите как определить угол поворота.
Revit LookUp и
Код - C# [Выбрать]
  1. var rotation = (familyInstance.Location as LocationPoint).Rotation;
  2.  

выдает один и тот же результат.



Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: FamilyInstance Rotation property
« Ответ #1 : 22-09-2020, 16:44:55 »
Я бы использовал систему координат:
Код - C# [Выбрать]
  1. familyInstance.GetTotalTransform()

Либо свойства FacingOrientation / HandOrientation

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: FamilyInstance Rotation property
« Ответ #2 : 22-09-2020, 16:50:20 »
Вот эти направления, только, соответственно в координатах проекта будут как раз FacingOrientation (transform.BasisY) и HandOrientation (transform.BasisX)



Оффлайн sdv79Автор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
Re: FamilyInstance Rotation property
« Ответ #3 : 22-09-2020, 16:52:55 »
GetTotalTransform не дает поворота


Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: FamilyInstance Rotation property
« Ответ #4 : 22-09-2020, 16:55:41 »
Вообще-то даёт. Целых 3. Вокруг всех осей.

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: FamilyInstance Rotation property
« Ответ #5 : 22-09-2020, 16:57:50 »
Полагаю, что тебе интересен поворот в плоскости X0Y. Тогда просто найди угол между XYZ.BasisX и transform.BasisX

Оффлайн sdv79Автор темы

  • ADN OPEN
  • **
  • Сообщений: 64
  • Карма: 0
Re: FamilyInstance Rotation property
« Ответ #6 : 22-09-2020, 17:15:00 »
Получилось с костылями, в радианах
Код - C# [Выбрать]
  1.  var familyInstanceTransform = familyInstance.GetTransform();
  2.  
  3.  var objectRotation = familyInstanceTransform.BasisX.AngleOnPlaneTo(familyInstanceTransform.OfVector(familyInstanceTransform.BasisX), familyInstanceTransform.BasisZ);
  4.  

Отмечено как Решение sdv79 22-09-2020, 20:11:28

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: FamilyInstance Rotation property
« Ответ #7 : 22-09-2020, 18:14:23 »
Перемудрил, хоть и верный ответ получил в итоге  ;D

Смотри на простом примере. Пусть семейство повернуто на 30 градусов в плоскости X0Y, т.е. familyInstanceTransform.BasisX / familyInstanceTransform.BasisY также повернут на 30 градусов, дальше ты просишь:
Код - C# [Выбрать]
  1. familyInstanceTransform.OfVector(familyInstanceTransform.BasisX)

Здесь familyInstanceTransform.BasisX - вектор в локальной системе координат ты просишь перевести в глобальную, т.е. к повороту вектора (30 градусов) добавляется поворот системы координат familyInstanceTransform так же 30 градусов, т.е. в глобальной системе координат это будет вектор, повернутый на 60 градусов.

Теперь на шаг назад. Ты вычисляешь угол поворота между векторами 30 градусов (familyInstanceTransform.BasisX) и 60 градусов, закономерно получая поворот на 30 градусов :-)

В общем, для плоскости X0Y всё намного проще:
Код - C# [Выбрать]
  1. XYZ.BasisX.AngleOnPlaneTo(familyInstanceTransform.BasisX, XYZ.BasisZ)

Для поворотов в остальных основных плоскостях по аналогии.