编程加载族文件(Revit2012)
来源:互联网 发布:mysql 5.6 中文手册 编辑:程序博客网 时间:2024/06/05 03:03
转载请复制以下信息:
原文链接: http://write.blog.csdn.net/postedit/7636666
作者: 叶雄进 , Autodesk ADN
日期:2012.6.6
在进行Revit二次开发过程中,调用Document.LoadFamily(String, Family) ,返回的Family对象为null. 原因是什么?
我个人觉得返回null是因为已经在Document对象中存在需要加载的对象了。那么如何根据文件路径,从Document中删除这个族对象。
回答:
Revit 提供了5个重载函数LoadFamily来加载族。他们用途各不相同。
1: LoadFamily(String)
2: LoadFamily(Document)
3: LoadFamily(String, Family)
4: LoadFamily(Document, IFamilyLoadOptions)
5: LoadFamily(String, IFamilyLoadOptions, Family)
第一个函数用于加载一个族文件(.rfa) 到模型中,指定族文件的完整文件名(含目录),返回Family对象。 但是这个函数无法处理当前模型中已经有这个族的问题,如果族已经存在,无法加载。
第二个函数用于加载一个在后台打开或者仍在编辑中打开的族到模型中。这个函数有点难理解,需要吧目标模型文件作为参数放在,调用的Document是族Document,而不是模型Document
第三个函数与第一个函数差不多,只不过把返回值作为参数的形式传出来。返回值是布尔型。也无法加载已经存在的族。
第四个函数与第二个函数在功能上有类似之处,但是有些差别。 这个函数可以实现如果需要加载的族已经在当前模型文件中,该如何处理。这个函数可以加载已经存在的族。 它的第二个参数是一个接口。你需要新建一个类从这个接口派生,然后实现其两个函数:OnFamilyFound 和OnSharedFamilyFound。 前面的OnFamilyFound的意思是当发现已经存在时,你该怎么办?
bool OnFamilyFound(
bool familyInUse,
out bool overwriteParameterValues
)
familyInUse参数会告诉你这个族是否已经有实例插入到模型中。True是说这个族已经使用了,False表明尚未插入到模型中。
overwriteParameterValues 参数是你要告诉Revit是否覆盖已有族的参数值。
第五个函数实现的是加载一个存储在盘中的族文件到模型文件中。他可以加载已经存在的族。IFamilyLoadOptions 类型的参数用法与第四个一样的。
请看下面示例,演示如何加载并覆盖已经存在的族。
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) { UIApplication app = commandData.Application; Document doc = app.ActiveUIDocument.Document; Transaction trans = new Transaction(doc, "ExComm"); trans.Start(); //create a mass family and load it. Document familyDoc = app.Application.NewFamilyDocument(@"C:\ProgramData\Autodesk\RAC 2012\Family Templates\English\Metric Site.rft"); Transaction transFamily = new Transaction(familyDoc); transFamily.Start("familyCreation"); //create element in it. CurveArrArray curveArrArr = app.Application.Create .NewCurveArrArray(); CurveArray curveArr = app.Application.Create .NewCurveArray(); Curve curve1 = app.Application.Create .NewLineBound(new XYZ(0,0,0),new XYZ(1,0,0)); Curve curve2 = app.Application.Create .NewLineBound(new XYZ(1,0,0),new XYZ(1,1,0)); Curve curve3 = app.Application.Create .NewLineBound(new XYZ(1,1,0),new XYZ(0,0,0)); curveArr.Append(curve1); curveArr.Append(curve2); curveArr.Append(curve3); curveArrArr.Append(curveArr); Plane plane = app.Application.Create.NewPlane(new XYZ(0,0,1),new XYZ(0,0,0)); SketchPlane sp = familyDoc.FamilyCreate.NewSketchPlane(plane); familyDoc.FamilyCreate.NewExtrusion(true, curveArrArr, sp, 10); transFamily.Commit(); //familyDoc.SaveAs(@"c:\test\myfamily.rfa"); MyFamilyLoadOptions myOptions = new MyFamilyLoadOptions(); familyDoc.LoadFamily(doc,myOptions); //doc.LoadFamily(@"c:\test\myfamily.rfa"); trans.Commit(); return Result.Succeeded ; }} public class MyFamilyLoadOptions : IFamilyLoadOptions { public bool OnFamilyFound( bool familyInUse, ref bool overwriteParameterValues) { overwriteParameterValues = false; return true; } public bool OnSharedFamilyFound( Family sharedFamily, bool familyInUse, ref FamilySource source, ref bool overwriteParameterValues ) { overwriteParameterValues = true; return true; } }
- 编程加载族文件(Revit2012)
- 编程加载族文件(Revit2012)
- Linux下So文件的加载(C语言编程)
- DirectUI界面编程(三)从XML文件中加载界面
- python编程(动态加载)
- android ndk 编程 加载so文件时SIGILL
- OpenSSL编程初探2 --- 关于证书文件的加载
- DLL系列------编程实现感染PE文件加载DLL
- Revit2012免费版64位/32位下载附安装教程
- 加载文件
- 加载文件
- 文件加载
- Java数据库编程(加载驱动程序)
- 文件编程(一)
- 文件编程(二)
- 软件_PC机编程软件_keil之MDK的分散加载文件.SCT文件
- Spark hello word(加载本地文件和加载hdfs文件)
- 动态加载资源文件(ResourceDictionary)
- 优秀程序设计的18大原则
- 【绝对震撼】【绝对刺爆眼】性感美女,囧图爆笑,内涵漫画等等!!超赞应用,男女必备啊~
- Comparison of relational database management systems
- dm8168 vin camera port
- 初识strncmp函数
- 编程加载族文件(Revit2012)
- 设计模式个人所见
- 单文件复制到指定目录和自动运行多个.bat文件实现(2012.06.05)
- Android新手入门 FAQ
- 通过JDBC和Hibernate对Clob和Blob的操作
- American dollars
- Javascript事件绑定的几种方式
- 软件项目管理的十大定律
- 黑马程序员__java基础加强总结