Статьи > Тестирование статей
[Revit API] - Граница подрезки вида
(1/1)
Андрей Фазлеев:
В примере справки показано создание области подрезки вида по помещению.
Опишу принцип работы на примере построения прямоугольной границы подрезки вида:
--- Код - C# [Выбрать] --- public void ChangeViewCropRegion(View v, UV ptMin, UV ptMax) { if (v.ViewType == ViewType.ProjectBrowser) { throw new ArgumentException("Текущий вид - Диспетчер проекта. Перейдите на вид модели"); } // Получение объекта для управления границами подрезки ViewCropRegionShapeManager manager = v.GetCropRegionShapeManager(); // Обработка случая, когда на виде ни разу не была активарована подрезка вида if (!manager.Valid && !v.CropBoxVisible) { v.CropBoxVisible = true; } // Проверка возможности назначения границ подрезки вида if (manager.Valid) { // Создание списка точек для построения контура List<XYZ> points = new List<XYZ> { ConvertUV2XYZ(v,ptMin), ConvertUV2XYZ(v,new UV(ptMax.U,ptMin.V)), ConvertUV2XYZ(v,ptMax), ConvertUV2XYZ(v,new UV(ptMin.U,ptMax.V)), ConvertUV2XYZ(v,ptMin) }; // Создание объекта цепочки кривых CurveLoop loop = new CurveLoop(); // Добавление отрезков в цепочку кривых for (int i = 1; i < points.Count; i++) { loop.Append(Line.CreateBound(points[i - 1], points[i])); } // Назначение границ подрезки manager.SetCropRegionShape(loop); } else { throw new ArgumentException("Данный вид не предназначен для создания границы подрезки"); } }
Небольшой метод для перевода координат из локальной системы в систему модели:
--- Код - C# [Выбрать] --- private XYZ ConvertUV2XYZ(View v, UV pt) { return v.Origin + v.UpDirection * pt.V + v.RightDirection * pt.U; }
Минимальный тестовый пример можно скачать в прикреплённом файле.
Запуск макроса выполняется из диспетчера макросов.
Удачи!
Навигация
Перейти к полной версии