revit二次开发,隔离构件

使用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;
        }





  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值