一个项目A中有族myFamiy,我想加载到另一个打开的项目B中,通过手工的方式可以实现。在A中把族另存为myFamily.rfa 文件,然后在B中加载族即可。
如何通过编程在一个命令中实现?
这个是可以用编程方式来实现。
下面是主要步骤。
方法1. 模仿手工步骤
1. 在项目A中,通过对象访问函数找到myFamily族
2. Document myFamilyDoc = A.EditFamily(myFamily);
3. 保存myFamilyDoc, myFamilyDoc.SaveAs(rfaFileName),
4. B中加载该文件, B.LoadFamily(rfaFileName).
方法2. 直接加载到B中,简单高效
1. 在项目A中,通过对象访问函数找到myFamily族
2. Document myFamilyDoc = A.EditFamily(myFamily);
3. 加载该族到B模型中, myFamilyDoc.LoadFamily(B),或用另一个重载函数
可以通过Application.Documents 访问当前REvit中打开的多个文档。
下面是方法2的例子代码
using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using Autodesk.Revit .DB; using Autodesk.Revit.UI; using Autodesk.Revit .ApplicationServices; using Autodesk.Revit.Attributes ; [TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)] public class RevitCommand : IExternalCommand { public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements) { UIDocument uiDoc = commandData.Application.ActiveUIDocument; Autodesk.Revit.ApplicationServices.Application app = commandData.Application.Application; Transaction trans = new Transaction(uiDoc.Document); trans.Start("loadfamily"); Document myFamilyDoc = null; foreach (Document doc in commandData.Application.Application.Documents) { if (doc.PathName.ToLower() == @"c:/yejo/revit/adn/userproject/1269157/a.rvt") { FilteredElementCollector collector = new FilteredElementCollector(doc); if (collector != null) collector.OfClass(typeof(Family)); IList<Element> list = collector.ToElements(); foreach (Element f in list) { Family family = f as Family; if (family.Name == "M_Window-Square Opening") { myFamilyDoc = doc.EditFamily(family); break; } } } } //加载到当前项目中 if (myFamilyDoc != null) myFamilyDoc.LoadFamily(uiDoc.Document); trans.Commit(); return Result.Succeeded; } }