从一个项目中加载其中的一个族到另一个项目中(用API实现)
一个项目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的例子代码
view plaincopy
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
usingAutodesk.Revit .DB;
using Autodesk.Revit.UI;
using Autodesk.Revit .ApplicationServices;
using Autodesk.Revit.Attributes ;
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;
}
}作者:叶雄进文章来源:http://blog.csdn.net/joexiongjin/article/category/782739
顶起来…………
页:
[1]