Revit二开–复制视图裁剪
在Revit使用过程中, 当我们想要把视图的裁剪范围调整为相同的大小和位置的时候,手动操作很难达到我们想要的结果,只能调整的尽可能的相似。还有人说可以事先调整好裁剪范围然后复制视图,这样也可以,但不能保证建模过程中不调整视图裁剪范围,如果一旦调整,就能难调整到与之前的范围一致。
今天我们采用二开的方法来解决。
步骤:
- 1 获取源视图的裁剪范围信息。
- 2 将源视图的裁剪范围信息应用到目标视图
代码已经集成到唐僧解瓦项目:
唐僧解瓦项目 github地址:
https://github.com/binbinstrong/tangsengjiewa
/// <summary>
/// 复制视图裁剪
/// </summary>
[Transaction(TransactionMode.Manual)]
class Cmd_CopyViewCut : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
var uiapp = commandData.Application;
var uidoc = uiapp.ActiveUIDocument;
var doc = uidoc.Document;
var acview = doc.ActiveView;
var collecor = new FilteredElementCollector(doc);
var planviews = collecor.OfClass(typeof(ViewPlan)).Where(m => !(m as ViewPlan).IsTemplate).OrderBy(m => m.Name);
ViewSelector selector = new ViewSelector();
selector.sourceView.ItemsSource = planviews;
selector.sourceView.DisplayMemberPath = "Name";
selector.sourceView.SelectedIndex = 0;
selector.targetViewList.ItemsSource = planviews;
selector.targetViewList.DisplayMemberPath = "Name";
selector.ShowDialog();
var sourceview = selector.sourceView.SelectionBoxItem as View;
var targetviews = selector.targetViewList.SelectedItems.Cast<ViewPlan>();
Transaction ts = new Transaction(doc, "复制裁剪");
ts.Start();
var boundingbox = sourceview.CropBox;
foreach (var targetview in targetviews)
{
targetview.CropBox = boundingbox;
var para_crop = targetview.get_Parameter(BuiltInParameter.VIEWER_CROP_REGION);
var para_crop_visible = targetview.get_Parameter(BuiltInParameter.VIEWER_CROP_REGION_VISIBLE);
para_crop_visible.Set(1);
para_crop.Set(1);
}
ts.Commit();
selector.Close();
return Result.Succeeded;
}
实现效果如下: