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

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 1019|回复: 1
打印 上一主题 下一主题

Revit 2013里面用程序新建族然后加载到模型中

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12396

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-15 11:49:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

我之前写了一篇文章谈到如何编程新建一个族,并加载到模型文件中。

编程加载族文件(Revit2012)

http://blog.csdn.net/joexiongjin/article/details/7636666


在Revit2013里面,用LoadFamily方法加载族文件到模型中时,发生了一个变化。 那就是LoadFamily()函数的调用必须在主模型Document的事务没有打开的时候进行。但是在Revit2012里面,主模型Document的事务可以处于打开状态,然后加载族,这个可以从上面的那篇文章看出来。


在Revit2013里面下面的代码无法加载Revit里面(考虑到上面说到的Revit2013的无需事务)

  1. <font color="#333333"><font face="Arial">[csharp] view plaincopy
  2. [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]  
  3. [Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]  
  4. [Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)]  
  5. public class RevitCommand : IExternalCommand  
  6. {  
  7.   public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)  
  8.   {  
  9.     UIApplication app = commandData.Application;  
  10.     Autodesk.Revit.DB.Document familyDoc = app.Application.NewFamilyDocument(@"C:\ProgramData\Autodesk\RAC 2013\Family Templates\English\Metric Generic Model.rft");  
  11.     Transaction transFamily = new Transaction(familyDoc);  
  12.     transFamily.Start("familyCreation");  
  13.   
  14.     CurveArrArray curveArrArr = app.Application.Create.NewCurveArrArray();  
  15.     CurveArray curveArr = app.Application.Create.NewCurveArray();  
  16.     Curve curve1 = app.Application.Create.NewLineBound(new XYZ(0, 0, 0), new XYZ(1, 0, 0));  
  17.     Curve curve2 = app.Application.Create.NewLineBound(new XYZ(1, 0, 0), new XYZ(1, 1, 0));  
  18.     Curve curve3 = app.Application.Create.NewLineBound(new XYZ(1, 1, 0), new XYZ(0, 0, 0));  
  19.     curveArr.Append(curve1);  
  20.     curveArr.Append(curve2);  
  21.     curveArr.Append(curve3);  
  22.     curveArrArr.Append(curveArr);  
  23.   
  24.     Plane plane = app.Application.Create.NewPlane(new XYZ(0, 0, 1), new XYZ(0, 0, 0));  
  25.     SketchPlane sp = familyDoc.FamilyCreate.NewSketchPlane(plane);  
  26.     familyDoc.FamilyCreate.NewExtrusion(true, curveArrArr, sp, 10);  
  27.     transFamily.Commit();  
  28.   
  29.     SaveAsOptions op1 = new SaveAsOptions();  
  30.     op1.OverwriteExistingFile = true;  
  31.   
  32.     bool re = familyDoc.SaveAs(@"c:\myfamily1.rfa", op1);  
  33.     Autodesk.Revit.DB.Document doc = app.ActiveUIDocument.Document;  
  34.       
  35.     try  
  36.     {  
  37.       MyFamilyLoadOptions myOptions = new MyFamilyLoadOptions();  
  38.       familyDoc.LoadFamily(doc, myOptions); //***报错!!   
  39.     }  
  40.     catch (Exception e)  
  41.     {  
  42.       TaskDialog.Show("load error",e.Message);  
  43.     }  
  44.   
  45.     familyDoc.Close();  
  46.     return Result.Succeeded;  
  47.   }  
  48. }  
  49.   
  50. class MyFamilyLoadOptions : IFamilyLoadOptions  
  51. {  
  52.   public bool OnFamilyFound(bool familyInUse, out bool overwriteParameterValues)  
  53.   {  
  54.     overwriteParameterValues = true;  
  55.     return true;  
  56.   }  
  57.   public bool OnSharedFamilyFound(Family sharedFamily, bool familyInUse, out FamilySource source, out bool overwriteParameterValues)  
  58.   {  
  59.     source = FamilySource.Project;  
  60.     overwriteParameterValues = true;  
  61.     return true;  
  62.   }  
  63. }  </font></font>
复制代码
但是在用这个代码是,Revit会发生错误,导致需要关闭当前文档。

解决办法:

经过一些测试,发现问题问题是因为采用了revit 2013 里面自带的族模板创建族。 在Revit2013里面如果使用Revit2012所带的族模板rft文件放入上面的代码中,则可以顺利加载进来。Revit2013和Revit2012 里面的模板族应该差别不大,所以可以通过使用Revit2012里面的族模板来解决这个问题。


[csharp] view plaincopy


  • C:\ProgramData\Autodesk\RAC <span style="color:#ff6666;">2012</span>\Family Templates\English\Metric Generic Model.rft  



另一个解决方案是还是使用Revit2013里面的族模板,创建族后,把族保存到本地,然后用LoadFamily加载本地硬盘上的那个族文件,可以顺利加载起来。



转载请复制以下信息:
原文链接: http://blog.csdn.net/joexiongjin/article/details/8702258
作者:  叶雄进 , Autodesk ADN
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对

相关帖子

工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言

30

主题

909

帖子

2581

积分

BIM总监

Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

积分
2581
2F
发表于 2014-2-20 14:20:10 | 只看该作者
顶...... 楼下跟上.....
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-9-28 20:12

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表