Revit二次开发---载入模型组

1.创建一个模型组

2.将模型组保存为rvt文件

3.通过程序将模型组rvt文件导入到Revit

前两步略过。

我找了半天并没有找到可以直接将rvt文件导入转换成模型组的API,

于是先用面板按钮看看流程是怎样的。

点击面板按钮将保存好的模型组rvt文件(我绘制了几面墙)加载进来

然后加载过程中弹出提示框

看到提示我了解到模型组rvt中的墙实例是被复制到当前项目文档的,

点击确定,从项目浏览器可以找到导入的模型组

分析过程:

1.模型组导出的是rvt文件,可得出加载时要把rvt文件导入

2.重复类型提示框,可得出是将模型组rvt内的实例复制到当前文档

实现过程:

1.将模型组rvt导入项目中

            //加载模型组rvt文件
            using (Transaction trans = new Transaction(doc,"loadLink"))
            {
                trans.Start();
                //1.
                FilePath path = new FilePath(_rvtPath);
                RevitLinkOptions options = new RevitLinkOptions(false);
                //revit2016/2017 对应API RevitLinkLoadResult 
                LinkLoadResult result = RevitLinkType.Create(doc, path, options);

                trans.Commit();
            }

2.将模型组rvt内实例复制到当前项目中

        2.1需要创建一个实例并读取模型组rvt内部实例

        2.2将复制过来的实例成组

        2.3发现面板载入组后项目中不会存在组实例、链接文件,所以再删除就完成了

            //加载模型组rvt文件
            using (Transaction trans = new Transaction(doc,"loadLink"))
            {
                trans.Start();
                //2.1
                //revit2016/2017 对应API RevitLinkLoadResult 
                RevitLinkInstance instance = RevitLinkInstance.Create(doc, result.ElementId);
                Location location = instance.Location;
                location.Move(new XYZ(0, 0, 0));
                //2.1
                Document linkDoc = instance2.GetLinkDocument();
                FilteredElementCollector fec = new FilteredElementCollector(linkDoc);
                ElementClassFilter filter1 = new ElementClassFilter(typeof(HostObject));
                ElementClassFilter filter2 = new ElementClassFilter(typeof(FamilyInstance));
                LogicalOrFilter logicalAndFilter = new LogicalOrFilter(filter1, filter2);
                ICollection<ElementId> lstElements = fec.WherePasses(logicalAndFilter).ToElementIds();
                //2.1
                CopyPasteOptions copy = new CopyPasteOptions();
                copy.SetDuplicateTypeNamesHandler(new CopyEventHandler());
                ICollection<ElementId> newIds = ElementTransformUtils.CopyElements(linkDoc, lstElements, doc, null, copy);
                //2.2
                string typeName = RvtTools.ElementTool.Instance.GetParameterValue(instance2.LookupParameter("类型"));
                Group group = doc.Create.NewGroup(newIds);
                group.GroupType.Name = typeName.Split('.')[0];
                //2.3
                doc.Delete(group.Id);

                trans.Commit();
            }

            //2.3
            var collector = new FilteredElementCollector(doc);
            foreach (Element element in collector.OfClass(typeof(RevitLinkType)))
            {
                ExternalFileReference extFileRef = element.GetExternalFileReference();
                if (null == extFileRef || extFileRef.GetLinkedFileStatus() != LinkedFileStatus.Loaded || !element.Name.Equals(typeName))
                    continue;
                var revitLinkType = (RevitLinkType)element;
                revitLinkType.Unload(null);
                using (Transaction trans = new Transaction(doc, "unloadLink"))
                {
                    trans.Start();
                    doc.Delete(revitLinkType.Id);
                    trans.Commit();
                }
                break;
            }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘿呦嘿呦嘿呦嘿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值