您的位置:首页 > 其它

revit二次开发,隔离构件

2015-06-09 10:01 204 查看
使用View.IsolateElementTemporary方法可以轻松实现隔离构件功能,个人认为比SDK中VisibilityCtrl更加高效。

代码如下:

var ui = commandData.Application.ActiveUIDocument;
var doc = ui.Document;

var select = ui.Selection;
var refe = select.PickObject(ObjectType.Element);

using (Transaction trans = new Transaction(doc))
{
trans.Start("isloate");
ui.ActiveView.IsolateElementTemporary(refe.ElementId);
trans.Commit();
}


但是当选择的构件是构件组的时候,用这个方法隔离会出现异常现象:选中的组构建并没有显示出来。

虽然构建组也有一个ElementId,和IsolateElementTemporary方法参数完全匹配,但是并不能用这个。

API中还提供了另外一个方法:IsolateElementsTemporary,这个方法的参数时ICollection<ElementId> .

所以实现隔离构建组的思路是:选取构建组然后获取组成员的ElementId列表。

下面代码实现隔离构件组,并导出构建组的图片,然后恢复隔离,代码如下:

public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
var ui = commandData.Application.ActiveUIDocument;
var doc = ui.Document;

var select = ui.Selection;
var refe = select.PickObject(ObjectType.Element);

//using (Transaction trans = new Transaction(doc))
//{
//    trans.Start("isloate");
//    ui.ActiveView.IsolateElementTemporary(refe.ElementId);
//    trans.Commit();
//}
var ele = doc.GetElement(refe);
if (ele is Group)
{
var g = ele as Group;
var ids = g.GetMemberIds();
using (Transaction trans = new Transaction(doc))
{
trans.Start("isloate");
ui.ActiveView.IsolateElementsTemporary(ids);
trans.Commit();

ImageExportOptions ieop = new ImageExportOptions()
{
ExportRange = ExportRange.CurrentView,
FilePath = @"g:\tt.bmp",
FitDirection = FitDirectionType.Horizontal,
HLRandWFViewsFileType = ImageFileType.BMP,
ImageResolution = ImageResolution.DPI_600,
ShadowViewsFileType = ImageFileType.BMP,
};
doc.ExportImage(ieop);

}

using (Transaction trans = new Transaction(doc))
{
trans.Start("roallback");
ui.ActiveView.DisableTemporaryViewMode(TemporaryViewMode.TemporaryHideIsolate);
trans.Commit();
}

}
return Result.Succeeded;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: