[Revit API] - Граница подрезки вида

Автор Тема: [Revit API] - Граница подрезки вида  (Прочитано 4995 раз)

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

Оффлайн Андрей ФазлеевАвтор темы

  • ADN Club
  • Сообщений: 24
  • Карма: 8
    • Andrey Stroitel
В примере справки показано создание области подрезки вида по помещению.

Опишу принцип работы на примере построения прямоугольной границы подрезки вида:
Код - C# [Выбрать]
  1.         public void ChangeViewCropRegion(View v, UV ptMin, UV ptMax)
  2.         {
  3.             if (v.ViewType == ViewType.ProjectBrowser)
  4.             {
  5.                 throw new ArgumentException("Текущий вид - Диспетчер проекта. Перейдите на вид модели");
  6.             }
  7.  
  8.             // Получение объекта для управления границами подрезки
  9.             ViewCropRegionShapeManager manager = v.GetCropRegionShapeManager();
  10.  
  11.             // Обработка случая, когда на виде ни разу не была активарована подрезка вида
  12.             if (!manager.Valid && !v.CropBoxVisible)
  13.             {
  14.                 v.CropBoxVisible = true;
  15.             }
  16.  
  17.             // Проверка возможности назначения границ подрезки вида
  18.             if (manager.Valid)
  19.             {
  20.                 // Создание списка точек для построения контура
  21.                 List<XYZ> points = new List<XYZ>
  22.                            {                                
  23.                                   ConvertUV2XYZ(v,ptMin),
  24.                                   ConvertUV2XYZ(v,new UV(ptMax.U,ptMin.V)),
  25.                                   ConvertUV2XYZ(v,ptMax),
  26.                                   ConvertUV2XYZ(v,new UV(ptMin.U,ptMax.V)),
  27.                                   ConvertUV2XYZ(v,ptMin)
  28.                            };
  29.  
  30.                 // Создание объекта цепочки кривых
  31.                 CurveLoop loop = new CurveLoop();
  32.  
  33.                 // Добавление отрезков в цепочку кривых
  34.                 for (int i = 1; i < points.Count; i++)
  35.                 {
  36.                     loop.Append(Line.CreateBound(points[i - 1], points[i]));
  37.                 }
  38.  
  39.                 // Назначение границ подрезки
  40.                 manager.SetCropRegionShape(loop);
  41.             }
  42.             else
  43.             {
  44.                 throw new ArgumentException("Данный вид не предназначен для создания границы подрезки");
  45.             }
  46.  
  47.         }

 Небольшой метод для перевода координат из локальной системы в систему модели:
Код - C# [Выбрать]
  1.         private XYZ ConvertUV2XYZ(View v, UV pt)
  2.         {
  3.             return v.Origin + v.UpDirection * pt.V + v.RightDirection * pt.U;
  4.         }

Минимальный тестовый пример можно скачать в прикреплённом файле.
Запуск макроса выполняется из диспетчера макросов.

Удачи!