您的位置:首页 > 其它

从一个项目中加载其中的一个族到另一个项目中(用API实现)

2011-05-09 10:09 776 查看
一个项目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;

    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐