Элемент не может быть повернут в эту позицию

Автор Тема: Элемент не может быть повернут в эту позицию  (Прочитано 4698 раз)

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

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Элемент (семейство) не может быть повернут в эту позицию

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

(В семейства галочка с "Всегда вертикально" снята, "На основе рабочей плоскости" - поставлена)

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Проверяйте, что и как пытаетесь вращать.

Что-то у нас с форумом стало, так бы продемонстрировал картинку, а теперь не вставляется. Семейство можно повернуть вокруг оси OX, но нельзя вокруг оси OY

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Off-Topic: показать
Проверка вставки фото:



Уже работает!
« Последнее редактирование: 01-08-2019, 17:07:10 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Александр, спасибо!

Поправка, вот сделал семейство на основе рабочей плоскости, разместил на уровне. Поворачивается вокруг оси 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, т.е. наоборот.



Всё логично. Проверяйте код, в общем
« Последнее редактирование: 01-08-2019, 15:12:59 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Александр Ривилис, а чего он теперь так изображение обрезать стал? Показывает только центр. Вроде не было раньше так?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Александр Ривилис, а чего он теперь так изображение обрезать стал? Показывает только центр. Вроде не было раньше так?
Это другой хостинг картинок и другой плагин. Старый не работает на HTTPS. Попробую его допилить.

Допилил!!!

Off-Topic: показать
« Последнее редактирование: 01-08-2019, 17:06:43 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн maksl

  • ADN OPEN
  • Сообщений: 21
  • Карма: 4
В самом ревите есть ограничения, в частности семейства категории "Обобщенные модели" нельзя вращать в определенных плоскостях. Точнее они могут вращаться только по их вертикальной оси, которая в файле семейства Z.

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

Чекбокс "Всегда вертикально" - это про что-то другое, сейчас не вспомню.
"На основе рабочей плоскости" - это вариант, на какую базу можно расположить семейство: уровень или выбранную плоскость.

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
У меня семейство обобщенной модели. Вручную можно разместить на грани,

Пробую так:

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

Оффлайн maksl

  • ADN OPEN
  • Сообщений: 21
  • Карма: 4
Я думаю, проверить не могу, что
1) referenceDirection - это направление, вдоль которого будет направлена ось z семейства. В обычных ситуациях должна быть нормаль к текущей поверхности.
2) очень похоже, что это базовая линия, вдоль которой нужно располагать семейства на основе линии.

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
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);



Оффлайн maksl

  • ADN OPEN
  • Сообщений: 21
  • Карма: 4
Спасибо, что попоавили. Часто ожидания сильно не савпадают с логикой автодеска :)