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

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 2107|回复: 47
打印 上一主题 下一主题

Revit 二次开发 - 多文档处理

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

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

积分
12408

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-9 11:44:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一个实用性很强的问题,和大家分享一下我的实现方式。

首先声明实现基于Revit 2011。程序需要在一个打开的项目文档中再打开另外一个族文档,并且将对族进行读写操作。在两篇Jeremy的博客里分别找到了部分答案,组合之后最终解决了问题。

1. 在文档中打开另一个文档
需要注意的是 Autodesk.Revit.ApplicationServices.Application.OpenDocumentFile(filePath) 无法满足要求。该方法只是在内存中打开文档,并不会创建新文档对应的视图,当然就更谈不上切换到新文档视图了。可行的方法是纯C#桌面编程:System.Diagnostics.Process.Start(filePath)。该方法无论在Add-In之内还是之外都有效。

2. 在文档中创建新文档,并将用户界面切换到新文档
有些小复杂,但是思路依然可以在Jeremy博客中找到,核心操作有四步:
1) 创建新文档对象(在内存中)
Autodesk.Revit.DB.Document dbDoc = Autodesk.Revit.ApplicationServices.Application.NewFamilyDocument(templateFilePath)
2) 创建新文档的专属文档视图 UIDocument
Autodesk.Revit.UI.UIDocument uiDoc = new Autodesk.Revit.UI.UIDocument(dbDoc);
3) 在新文档希望的视图中创建一个元素
Jeremy博客里提到的是创建一根线(BoundLine),但是这种元素在我的族模板中无法创建。所以我创建了一个参考平面(ReferencePlane,记为 referencePlaneInNewDoc)。虽然没有经过全面测试,不过个人认为参考平面应该适用于绝大多数(也可能全部)族模板。
4. 调用 UIDocument.ShowElement(referencePlaneInNewDoc) 将用户界面切换到新文档中参考平面所在视图
这个方法有两个效果:切换用户界面到新文档;切换到新文档的指定视图

以下是我的代码(抱歉,有点儿乱)

  1. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">[csharp] view plaincopy</span>
  2. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">string templatePath = RevitDocument.GetTemplatePath(transElem.RevitTemplate);  </span>
  3. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">Document modelDBDoc = m_serviceApp.NewFamilyDocument(templatePath);  </span>
  4. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">  </span>
  5. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">FilteredElementCollector collector = new FilteredElementCollector(modelDBDoc);  </span>
  6. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">IList<Element> views = collector.OfClass(typeof(Autodesk.Revit.DB.View)).ToElements();  </span>
  7. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">Autodesk.Revit.DB.View frontView = null;  </span>
  8. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">foreach (Element viewElem in views)  </span>
  9. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">{  </span>
  10. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">    if (viewElem.Name == "Front")  </span>
  11. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">    {  </span>
  12. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">        frontView = viewElem as Autodesk.Revit.DB.View;  </span>
  13. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">        break;  </span>
  14. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">    }  </span>
  15. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">}  </span>
  16. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">  </span>
  17. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">Transaction transModel = new Transaction(modelDBDoc, "构件");  </span>
  18. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">transModel.Start();  </span>
  19. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">  </span>
  20. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">Autodesk.Revit.UI.UIDocument modelUIDoc = new Autodesk.Revit.UI.UIDocument(modelDBDoc);  </span>
  21. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">XYZ bubbleEnd = new XYZ(0, -1, 0);  </span>
  22. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">XYZ freeEnd = new XYZ(0, 1, 0);  </span>
  23. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">XYZ cutVec = new XYZ(0, 0, 1);  </span>
  24. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">ReferencePlane refPlane = modelDBDoc.FamilyCreate.NewReferencePlane(bubbleEnd, freeEnd, cutVec, frontView);  </span>
  25. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">try  </span>
  26. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">{  </span>
  27. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">    modelUIDoc.ShowElements(refPlane);  </span>
  28. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">}  </span>
  29. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">catch (Exception ex)  </span>
  30. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">{  </span>
  31. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">    System.Diagnostics.Debug.WriteLine(ex);  </span>
  32. <span style="color: rgb(105, 105, 105); font-family: 'Microsoft Yahei', Simsun; ">}  </span>
复制代码
如果希望在新文档完成操作之后再将用户界面切换回原始文档,同样可以利用 UIDocument.ShowElement()。方法是切换步骤1)之前选取原始文档中的某个元素(记为 elementInOrigDoc)并保存,然后在完成了对新文档的操作之后,调用 UIDocument.ShowElement(elementInOrigDoc)。
原文链接:http://blog.csdn.net/flower4wine/article/details/6838917
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对

相关帖子

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

8

主题

877

帖子

1362

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1362
推荐
发表于 2014-2-25 10:29:11 | 只看该作者
路过!!! 不发表意见……

10

主题

918

帖子

1471

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1471
推荐
发表于 2014-2-20 15:11:05 | 只看该作者
(*^__^*) 嘻嘻……

4

主题

846

帖子

1300

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1300
推荐
发表于 2014-3-18 10:59:35 | 只看该作者
(*^__^*) 嘻嘻……

31

主题

1019

帖子

1897

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

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

本版积分规则

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

GMT+8, 2024-11-30 12:15

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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