revit二次开发,隔离构件
2015-06-09 10:01
204 查看
使用View.IsolateElementTemporary方法可以轻松实现隔离构件功能,个人认为比SDK中VisibilityCtrl更加高效。
代码如下:
但是当选择的构件是构件组的时候,用这个方法隔离会出现异常现象:选中的组构建并没有显示出来。
虽然构建组也有一个ElementId,和IsolateElementTemporary方法参数完全匹配,但是并不能用这个。
API中还提供了另外一个方法:IsolateElementsTemporary,这个方法的参数时ICollection<ElementId> .
所以实现隔离构建组的思路是:选取构建组然后获取组成员的ElementId列表。
下面代码实现隔离构件组,并导出构建组的图片,然后恢复隔离,代码如下:
代码如下:
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; }
相关文章推荐
- 我对Java Serializable(序列化)的理解和总结
- HTML5 特性
- C#中字典的使用
- 软件测试基础知识一张图搞定
- postgresql常用命令
- EditText和输入法相关的问题
- 【Java GUI】文本框和文本区
- Android Studio 常用快捷键
- jsp基础
- Java利用ShutDownHook关闭系统资源
- Android Studio --> Gradle Build设置自动
- linux netstat 统计连接数
- 苹果推出全平台通用的开发者计划--Apple Developer Program
- (转载)如何借助KeePassX在Linux上管理多个密码
- C# List<>与Array性能比较
- qt4.8到qt5.2windows版本的升级遇到的实际问题.
- osg窗口的创建(二)
- JavaScript原型链和instanceof运算符的暧昧关系
- codemirror
- hibernate 配置文件介绍