从一个项目中加载其中的一个族到另一个项目中(用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的例子代码
如何通过编程在一个命令中实现?
这个是可以用编程方式来实现。
下面是主要步骤。
方法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; } }
相关文章推荐
- 编写一个函数,实现从一个字符串中,查找另一个字符串的位置(笔试题) 例如int func("12345", "34")返回值为2,即在2号位置找到字符串“34”。
- 如何加载MyEclipse的其中一个JAVA项目
- 将任务4的解决用一个项目多个文件的方式实现,其中两个类的声明放在一个.h文件中,每个类的成员函数分别放一个文件,main()函数用一个文件。
- angularjs项目需要从一个页面跳转到另一个页面,同时需要传递一个参数
- C++第六周任务5:解决用一个项目多个文件的方式实现,其中两个类的声明放在一个.h文件中,每个类的成员函数分别放一个文件,main()函数用一个文件。体会这样安排的优点。
- 一个Flash中通过AS3代码的Loader对象加载另一个SWF文件,并访问其中的文档类中的方法。
- 杂谈:一个小型WebMap项目的架构和技术实现(GmapAPI+jQuery+XML)
- 【使用JSOUP实现网络爬虫】从一个URL加载一个Document
- 杂谈:一个小型WebMap项目的架构和技术实现(GmapAPI+jQuery+XML)
- 从一个java项目里面读取多个Java文件到一个txt实现备份
- 设计一个学生类,其中包含学号、姓名、成绩等数据成员,创建学生对象并且倒入到文件file.txt,然后由文件读取到另一个学生对象并输出,试编程实现。
- 不用iframe实现在一个页面内加载另一个页面
- react实现两个方法同时执行时,其中一个能够调用另一个的执行结果
- 利用Java代码实现把一个文件从一个地方剪切到另一个地方
- 消息队列实现从一个进程向另一个进程发送一个数据块的方法
- vbs中实现启动两个应用程序,一直等到其中一个程序结束,然后关闭另一个?
- 一个小项目实现上啦刷新下拉加载
- 【使用JSOUP实现网络爬虫】从一个URL加载一个Document
- angularjs项目需要从一个页面跳转到另一个页面,同时需要传递一个参数。