1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Revit二次开发---载入模型组

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

时间:2019-03-01 23:55:03

相关推荐

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);//revit/ 对应API RevitLinkLoadResult LinkLoadResult result = RevitLinkType.Create(doc, path, options);mit();}

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

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

2.2将复制过来的实例成组

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

//加载模型组rvt文件using (Transaction trans = new Transaction(doc,"loadLink")){trans.Start();//2.1//revit/ 对应API RevitLinkLoadResult RevitLinkInstance instance = RevitLinkInstance.Create(doc, result.ElementId);Location location = instance.Location;location.Move(new XYZ(0, 0, 0));//2.1Document 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.1CopyPasteOptions copy = new CopyPasteOptions();copy.SetDuplicateTypeNamesHandler(new CopyEventHandler());ICollection<ElementId> newIds = ElementTransformUtils.CopyElements(linkDoc, lstElements, doc, null, copy);//2.2string typeName = RvtTools.ElementTool.Instance.GetParameterValue(instance2.LookupParameter("类型"));Group group = doc.Create.NewGroup(newIds);group.GroupType.Name = typeName.Split('.')[0];//2.3doc.Delete(group.Id);mit();}//2.3var 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);mit();}break;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。