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

ADN Club => Revit API => Тема начата: enot от 15-12-2020, 13:08:11

Название: Обратить разрез
Отправлено: enot от 15-12-2020, 13:08:11
Как можно обратить разрез ? в его свойствах не нашел ничего

или только через Autodesk.Revit.DB.ElementTransformUtils можно (ps через это не получается)
Название: Re: Обратить разрез
Отправлено: Александр Игнатович от 15-12-2020, 17:56:50
Тебе нужен View.CropBox. Это будет bounding box, но в отличие от того, как ты с ним обычно работаешь, здесь самым важным свойством будет Transform, именно он определяет систему координат разреза. Его BasisZ - это направление разреза. Насколько помню, тебе нужно сохранить его IsConformal, т.е. повернуть на 180 градусов и BasisZ и BasisX вокруг оси BasisY.
Название: Re: Обратить разрез
Отправлено: enot от 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);
Название: Re: Обратить разрез
Отправлено: Александр Игнатович от 16-12-2020, 11:00:34
А так и не должно. Создаешь новый BoundingBoxXYZ, присваиваешь его свойству CropBox
Название: Re: Обратить разрез
Отправлено: enot от 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;
Название: Re: Обратить разрез
Отправлено: Александр Игнатович от 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 ). В этом случае можно создать временный, после поворота разреза - удалить
Название: Re: Обратить разрез
Отправлено: enot от 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);
Название: Re: Обратить разрез
Отправлено: enot от 16-12-2020, 12:11:40
НО. Можно повернуть элемент, который показывает вид в плане.
Хитрейший ход конем
Спасибо !