锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

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

时间:2023-11-03 16:07:02 国产smd铝电解电容rvt

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 lstElements = fec.WherePasses(logicalAndFilter).ToElementIds();                 //2.1                 CopyPasteOptions copy = new CopyPasteOptions();                 copy.SetDuplicateTypeNamesHandler(new CopyEventHandler());                 ICollection 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;             }

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章