Обратить разрез

Автор Тема: Обратить разрез  (Прочитано 3750 раз)

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

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

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Обратить разрез
« : 15-12-2020, 13:08:11 »
Как можно обратить разрез ? в его свойствах не нашел ничего

или только через Autodesk.Revit.DB.ElementTransformUtils можно (ps через это не получается)
« Последнее редактирование: 15-12-2020, 17:00:50 от enot »

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Обратить разрез
« Ответ #1 : 15-12-2020, 17:56:50 »
Тебе нужен View.CropBox. Это будет bounding box, но в отличие от того, как ты с ним обычно работаешь, здесь самым важным свойством будет Transform, именно он определяет систему координат разреза. Его BasisZ - это направление разреза. Насколько помню, тебе нужно сохранить его IsConformal, т.е. повернуть на 180 градусов и BasisZ и BasisX вокруг оси BasisY.

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Обратить разрез
« Ответ #2 : 16-12-2020, 01:02:04 »
Почему то значения для CropBox не задаются:

Код - C# [Выбрать]
  1.                        viewSection.CropBox. Transform.BasisX = new XYZ(-1, 0, 0);
  2.                        viewSection.CropBox. Transform.BasisY = new XYZ(0, -1, 0);
  3.                        viewSection.CropBox. Transform.BasisZ = new XYZ(0, 0, 1);

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Обратить разрез
« Ответ #3 : 16-12-2020, 11:00:34 »
А так и не должно. Создаешь новый BoundingBoxXYZ, присваиваешь его свойству CropBox

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Обратить разрез
« Ответ #4 : 16-12-2020, 11:03:14 »
так тоже не выходит

Код - C# [Выбрать]
  1.    Transform trans = Transform.Identity;
  2.                         trans.BasisX = new XYZ(-1, 0, 0);
  3.                         trans.BasisY = new XYZ(0, -1, 0);
  4.                         trans.BasisZ = new XYZ(0, 0, 1);
  5.  
  6.                         BoundingBoxXYZ bb = new BoundingBoxXYZ();
  7.  
  8.                         bb.Transform = trans;
  9.                    
  10.                         viewSection.CropBox = bb;

Отмечено как Решение enot 16-12-2020, 12:10:10

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Обратить разрез
« Ответ #5 : 16-12-2020, 11:53:37 »
Да, ошибся, это про создание разреза. Кстати, transform у тебя кривой, если что.

С обновлением всё как-то криво. Он действительно не реагирует на присвоение CropBox-а, ElementTransformUtils сам вид не хочет вращать. НО. Можно повернуть элемент, который показывает вид в плане.

Код - Python [Выбрать]
  1. from System.Collections.Generic import *
  2. import math
  3.  
  4. view = doc.GetElement(ElementId(206488))
  5.  
  6. viewer = view.GetDependentElements(ElementCategoryFilter(BuiltInCategory.OST_Viewers))[0]
  7.  
  8. coordinateSystem = view.CropBox.Transform
  9. axis = Line.CreateUnbound(coordinateSystem.Origin, coordinateSystem.BasisY)
  10.  
  11. tx = Transaction(doc, "ss")
  12. tx.Start()
  13.  
  14. ElementTransformUtils.RotateElement(doc, viewer, axis, math.pi)
  15.  
  16. tx.Commit()


Здесь, потенциальная проблема, что разрез не присутствует ни на одном плане (или вообще последний оставшийся в живых вид в модели xD ). В этом случае можно создать временный, после поворота разреза - удалить

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Обратить разрез
« Ответ #6 : 16-12-2020, 12:00:08 »
Кстати, transform у тебя кривой, если что
Как определяется что он кривой  ?
Создал вид
ViewSection viewSection  = ViewSection.CreateDetail(Document document, ElementId viewFamilyTypeId, BoundingBoxXYZ sectionBox);
Посмотрел координаты его Transform, запомнил;
Далее вручную отобразил разрез и посмотрел что его координаты Transform действительно изменились на эти самые
XYZ(-1, 0, 0);
XYZ(0, -1, 0);
XYZ(0, 0, 1);

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Обратить разрез
« Ответ #7 : 16-12-2020, 12:11:40 »
НО. Можно повернуть элемент, который показывает вид в плане.
Хитрейший ход конем
Спасибо !