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

ADN Club => Revit API => Тема начата: enot от 01-08-2019, 13:07:58

Название: Элемент не может быть повернут в эту позицию
Отправлено: enot от 01-08-2019, 13:07:58
Элемент (семейство) не может быть повернут в эту позицию

Как решить это программно?

(В семейства галочка с "Всегда вертикально" снята, "На основе рабочей плоскости" - поставлена)
Название: Re: Элемент не может быть повернут в эту позицию
Отправлено: Александр Игнатович от 01-08-2019, 13:29:51
Проверяйте, что и как пытаетесь вращать.

Что-то у нас с форумом стало, так бы продемонстрировал картинку, а теперь не вставляется. Семейство можно повернуть вокруг оси OX, но нельзя вокруг оси OY
Название: Re: Элемент не может быть повернут в эту позицию
Отправлено: Александр Ривилис от 01-08-2019, 13:49:12
Off-Topic: показать
Проверка вставки фото:

(https://i.ibb.co/RCgS8Zk/2018-06-05-16-38-29.png) (https://ibb.co/RCgS8Zk)

Уже работает!
Название: Re: Элемент не может быть повернут в эту позицию
Отправлено: Александр Игнатович от 01-08-2019, 13:58:10
Александр, спасибо!

Поправка, вот сделал семейство на основе рабочей плоскости, разместил на уровне. Поворачивается вокруг оси Z как угодно, вокруг оси X или Y, соответственно выдает ошибку.

Скриптик на Iron Python shell:
Код - Python [Выбрать]
  1. import math
  2.  
  3. tx = Transaction(doc, "ss")
  4. tx.Start()
  5.  
  6. ElementTransformUtils.RotateElement(doc, selection[0].Id, Line.CreateUnbound(selection[0].Location.Point, XYZ.BasisZ), 0.5*math.pi) # работает
  7. #ElementTransformUtils.RotateElement(doc, selection[0].Id, Line.CreateUnbound(selection[0].Location.Point, XYZ.BasisX), 0.5*math.pi) # а так нет
  8.  
  9. tx.Commit()

Разместил его же на грани стены, теперь работает если указать ось BasisX, т.е. наоборот.

(https://i.ibb.co/QY30ppG/image.png)

Всё логично. Проверяйте код, в общем
Название: Re: Элемент не может быть повернут в эту позицию
Отправлено: Александр Игнатович от 01-08-2019, 13:59:32
Александр Ривилис, а чего он теперь так изображение обрезать стал? Показывает только центр. Вроде не было раньше так?
Название: Re: Элемент не может быть повернут в эту позицию
Отправлено: Александр Ривилис от 01-08-2019, 14:02:02
Александр Ривилис, а чего он теперь так изображение обрезать стал? Показывает только центр. Вроде не было раньше так?
Это другой хостинг картинок и другой плагин. Старый не работает на HTTPS. Попробую его допилить.

Допилил!!!

Off-Topic: показать
(https://i.ibb.co/CPGW0sG/2019-08-01-14-46-57.png) (https://ibb.co/XYRVJkR)
Название: Re: Элемент не может быть повернут в эту позицию
Отправлено: maksl от 01-08-2019, 17:05:15
В самом ревите есть ограничения, в частности семейства категории "Обобщенные модели" нельзя вращать в определенных плоскостях. Точнее они могут вращаться только по их вертикальной оси, которая в файле семейства Z.

А категорию "Оборудование" спокойно можно вращать по всем осям.

Чекбокс "Всегда вертикально" - это про что-то другое, сейчас не вспомню.
"На основе рабочей плоскости" - это вариант, на какую базу можно расположить семейство: уровень или выбранную плоскость.
Название: Re: Элемент не может быть повернут в эту позицию
Отправлено: enot от 01-08-2019, 17:53:03
У меня семейство обобщенной модели. Вручную можно разместить на грани,

Пробую так:

1.)

Код - C# [Выбрать]
  1. Reference reference = SketchPlane.GetPlaneReference(); // вертикальный SketchPlane
  2. doc.Create.NewFamilyInstance(reference, XYZ location,XYZ referenceDirection, FamilySymbol symbol)

location - произвольная точка на SketchPlane;
Непонятно что подавать в referenceDirection ?

..-------------------
2.)
также не совсем понятно что подавать в качестве линии Curve в методе:
https://www.revitapidocs.com/2019/d8e0a91a-b062-3a86-6d8e-779534459ff4.htm
Название: Re: Элемент не может быть повернут в эту позицию
Отправлено: maksl от 01-08-2019, 19:37:07
Я думаю, проверить не могу, что
1) referenceDirection - это направление, вдоль которого будет направлена ось z семейства. В обычных ситуациях должна быть нормаль к текущей поверхности.
2) очень похоже, что это базовая линия, вдоль которой нужно располагать семейства на основе линии.
Название: Re: Элемент не может быть повернут в эту позицию
Отправлено: Александр Игнатович от 01-08-2019, 20:19:19
1) referenceDirection - это направление, вдоль которого будет направлена ось z семейства. В обычных ситуациях должна быть нормаль к текущей поверхности.

Нет. Из справки:
Цитировать
Note that this direction defines the rotation of the instance on the face, and thus cannot be parallel to the face normal.

2) очень похоже, что это базовая линия, вдоль которой нужно располагать семейства на основе линии.

Тоже мимо, семейства на основе линии создаются другим оверлоадом метода NewFamilyInstance

Теперь по сути вопроса. Вообще можно указать XYZ.Zero, тогда вставится по умолчанию.

Из справки:
Цитировать
A vector that defines the direction of the family instance.

Да, не совсем понятно, согласен. По факту вектор определяет направление вектора X в семействе в пространстве модели.

На горизонтальном SketchPlane-е для простоты создаются 2 экземлпяра семейства (простенький кривенький параллелепипед):
Код - C# [Выбрать]
  1. doc.Create.NewFamilyInstance(reference, XYZ.Zero, XYZ.BasisX, symbol);
  2. doc.Create.NewFamilyInstance(reference, XYZ.Zero, XYZ.BasisY, symbol);

(https://i.postimg.cc/jLq8vLCH/cross.png) (https://postimg.cc/jLq8vLCH)
Название: Re: Элемент не может быть повернут в эту позицию
Отправлено: maksl от 01-08-2019, 20:56:58
Спасибо, что попоавили. Часто ожидания сильно не савпадают с логикой автодеска :)