В примере
справки показано создание области подрезки вида по помещению.
Опишу принцип работы на примере построения прямоугольной границы подрезки вида:
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("Данный вид не предназначен для создания границы подрезки");
}
}
Небольшой метод для перевода координат из локальной системы в систему модели:
private XYZ ConvertUV2XYZ(View v, UV pt)
{
return v.Origin + v.UpDirection * pt.V + v.RightDirection * pt.U;
}
Минимальный тестовый пример можно скачать в прикреплённом файле.
Запуск макроса выполняется из диспетчера макросов.
Удачи!