EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

萧闫子 发表于 2014-1-15 13:26:55

从一个项目中加载其中的一个族到另一个项目中(用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

AK47 发表于 2014-2-20 14:10:34

顶起来…………

页: [1]
查看完整版本: 从一个项目中加载其中的一个族到另一个项目中(用API实现)