Есть ли способ получить минимальный BoundingBox для всех элементов в представлении с помощью Revit API?C#

Место общения программистов C#
Ответить
Anonymous
 Есть ли способ получить минимальный BoundingBox для всех элементов в представлении с помощью Revit API?

Сообщение Anonymous »

Код: Выделить всё

namespace CropboxUtil
{
[Transaction(TransactionMode.Manual)]
internal static class ViewUtility
{
public static void CropToBoundingBox(this View view, short clearance = 5)
{
Document document = view.Document;

using (var transaction = new Transaction(document))
{
transaction.Start("Visual Coordinate Grid: CropToBoundingBox");

BoundingBoxXYZ elementsBoundingBox = view.GetBoundingBoxOfElements();

if (elementsBoundingBox != null)
{
view.CropBoxActive = true;
view.CropBoxVisible = true;

view.CropBox = elementsBoundingBox;
transaction.Commit();
}
else
{
TaskDialog.Show("Error!", "Não foi possível definir os limites dos elementos!");
transaction.RollBack();
}
}
}

public static BoundingBoxXYZ GetBoundingBoxOfElements(this View view)
{
List elements = view.GetElements();

try
{
double maxX = elements.Max(e => e.get_BoundingBox(view).Max.X);
double maxY = elements.Max(e => e.get_BoundingBox(view).Max.Y);
double maxZ = elements.Max(e => e.get_BoundingBox(view).Max.Z);

double minX = elements.Min(e => e.get_BoundingBox(view).Min.X);
double minY = elements.Min(e => e.get_BoundingBox(view).Min.Y);
double minZ = elements.Min(e => e.get_BoundingBox(view).Min.Z);

XYZ max = new XYZ(maxX, maxY, maxZ);
XYZ min = new XYZ(minX, minY, minZ);

return new BoundingBoxXYZ
{
Max = max,
Min = min,
};
}
catch (Autodesk.Revit.Exceptions.ApplicationException)
{
throw;
}
}

public static List GetElements(this View view)
{
Document document = view.Document;
Category sectionCategory = Category.GetCategory(document, BuiltInCategory.OST_Sections);

return new FilteredElementCollector(document, view.Id)
.WhereElementIsNotElementType()
.WhereElementIsViewIndependent()
.Where(e => e.CanBeHidden(view))
.Where(e => e.Category != sectionCategory)
.Cast()
.ToList();
}
}
}
Когда я запускаю приведенный выше код, вызывая someViewInstanceObject.CropToBoundingBox()
Если рамка обрезки меньше ограничений объектов представления, она корректируется правильно.
/>Но если рамка обрезки больше, чем пределы объектов представления, она остается неизменной. Но это должно быть. Но его следует сжать до возможно меньшего размера, который содержит ограничения на объекты.
Есть мысли?
PS.: Параметр разрешения предназначен для использования в будущем.

Подробнее здесь: https://stackoverflow.com/questions/785 ... w-using-re
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»