Revit二次开发——族的基础

Revit将族分为系统族、内建族、标准构件族。

系统族:系统族是在 Autodesk Revit 中预定义的族,包含基本建筑构件,例如墙、窗和门。例如:基本墙系统族包含定义内墙、外墙、基础墙、常规墙和隔断墙样式的墙类型;可以复制和修改现有系统族,但不能创建新系统族;可以通过指定新参数定义新的族类型。
标准构件族:在默认情况下,在项目样板中载入标准构件族,但更多标准构件族存储在构件库中。使用族编辑器创建和修改构件。可以复制和修改现有构件族, 也可以根据各种族样板创建新的构件族。族样板可以是基于主体的样板, 也可以是独立的样板。基于主体的族包括需要主体的构件。例如:以墙族为主体的门族,独立族包括柱、树和家具;族样板有助于创建和操作构件族。标准构件族可以位于项目环境外,且具有 .rfa 扩展名,可以将它们载入项目,从一个项目传递到另一个项目,而且如果需要还可以从项目文件保存到您的库中。
内建族:内建族可以是特定项目中的模型构件,也可以是注释构件。只能在当前项目中创建内建族,因此它们仅可用于该项目特定的对象,例如:自定义墙的处理。创建内建族时,可以选择类别,且您使用的类别将决定构件在项目中的外观和显示控制。

Category、Family、FamilySymbol、FamilyInstance这四个概念之间的关系
类别(Category)>族(Family)>族模型(FamilySymbol),这三者是子集关系,而你在视图中实际绘制的墙就叫做族实例(FamilyInstance)

如果用面向对象语言中的概念来讲,族相当于类模板(Class Template),族类型相当于类(Class) ,族实例相当于对象(Object)。虽然它们在API中是使用聚合而不是继承的方式组织的,但可以用来做类比。

在这里插入图片描述

族编辑

Revit中有个很重要的概念一族(Family)。 族也是一种元素 ,它分为系统族、内建族和构建族。系统族是Revit内置的族,不可以自由编辑它的模型、类型和参数。内建族和构建族允许编辑和创建自定义的模型、类型和参数,区别是内建族只能存储在当前的项目文档里,不能被其他文档使用。编辑族( EditFamily)和载入族(LoadFamily)
在当前文档中,如果加载了一些构建族,并创建了这些族的族实例,那么,对某个族实例进行EditFamily操作,将会进人到族编辑的文档中,可以对族进行修改。这个方法是对族在内存中新创建一个独立的拷贝文档,修改编辑好这份文档之后,如果想要之前的工程文档应用这些修改,那么需要使用带有IFamilyLoadOptions接口参数的LoadFarmily重载方法重新载人族并覆盖应用到使用中的族实例中。

族类代表整个Revit族,包括了族实例所使用的族符号。

1)编辑族( EditFamily)和载入族(LoadFamily)
在当前文档中,如果加载了一些构建族,并创建了这些族的族实例,那么,对某个族实例进行EditFamily操作,将会进人到族编辑的文档中,可以对族进行修改。这个方法是对族在内存中新创建一个独立的拷贝文档,修改编辑好这份文档之后,如果想要之前的工程文档应用这些修改.那么需要使用带有IFamilyLoadOptions接口参数的LoadFamily重载方法重新载人族并覆盖应用到使用中的族实例中。

编辑和载入族的方法

方法描述
EditFamily(Family loadedFamily)从传入的构建族中获得要修改的族文档
LoadFamily ( Document targetDocument, IFamilyLoad( )ptions familyLoadOptions)将族文档的内容载人到目标文档中

Autodesk. Revit, DB. IFamilyI oad( )ptions是提供族载人选项的接口类,它有两个接口函数,可以根据需要实现这两个接口函数,在LoadFamily中就可以实现想要的功能

IFamilyLoadOptions的接口类方法

方法描述.
OnFamilyFound ( bool familyInUse, out bool overwriteParameterValues)当族实例在 目标文档中被找到时,将被触发执行的回调函数
OnSharedFamilyFound( Family sharedFamily, bool familylnUse, out FamilySource source, out bool overwriteParameterValues)当共享族实例在目标文档中被找到时,将被触发执行的回调函数

Document类包括LoadFamily( )和LoadF amilySymbol( )方法。.
●LoadFamily( )可将整个族及其所有类型或符号加载到项目中。
●LoadFamilySymbol( )只将指定的族符号从族文件中加载到项目中。
注意:若要提高应用程序的性能和减少内存使用,则应尽可能地加载特定的族符号而不是整个族对象。
●使用Application对象Options属性检索Options.Application对象。
●使用Options.Application对象GetLibraryPaths( )方法检索族文件路径。
●在LoadFamilySymbol()中,输入的参数Name与FamilySymbol对象Name属性返回的字符串值相同。

       Document projectDoc = ActiveUIDocument.Document;
// 这里是自定义族实例,比如门,窗,桌子…
         FamilyInstance famInst = elem as FamilyInstance;
// 编辑族,拿到族文档
Document familyDoc = projectDoc.EditFamily(famInst.Symbol.Family);
// 在族文档中添加一个新的参数
using(Transaction tran = new Transaction(projectDoc, "Edit family Document."))
{
  tran.Start();
  string paramName = "MyParam ";
  familyDoc.FamilyManager.AddParameter(paramName, BuiltInParameterGroup.PG_TEXT, ParameterType.Text, false);
  tran.Commit();
}
// 将这些修改重新载入到工程文档中
Family loadedFamily = familyDoc.LoadFamily(RevitDoc, new projectFamLoadOption());

在编辑族和载人族的时候,需要注意下面几点:
①如果当前文档正在被修改中(有打开没有被关掉的事务)或者处在只读的状态,EditFamily方法不能被调用。可以使用IsModifiable和IsReadOnly属性来判断和检查文档的状态。
②EditFamily方法也不能在动态更新机制(Dynamic Updates)中使用。
③在LoadFamily方法,可以用RevitUlFamilyLoadOptions弹出一个提示框来与用户进行交互。

族实例

Revit族实例对象类别的例子有梁、支撑、柱、家具、体量,等等。族实例对象具有更
详细的属性,以便在项目中更改族实例的类型和外观。
1.位置相关属性( Location-Related Properties )位置相关属性显示族实例对象的物理和几何特征,如方向、旋转和位置。
(1)方向(Orientation)。 对有些族实例对象,可以改变其面的朝向或把手的方向。例如,门可以面向房间或墙的外侧或内侧,把手可以放置在左侧或右侧。
(2)方向-工作平面(Orientation - Work Plane)。族实例的工作平面方向也是可以改变的。CanFlipWorkPlane为true 时,可以设置IsWorkPlaneFlipped属性。如果对不允许工作平面翻转的族实例设置此属性,则会引发异常。
(3)旋转-镜像(Rotation - Mirrored)。Mirrored 属性指示族实例对象是否已被镜像。
(4)旋转-可旋转和Rotate( ) [ Rotation - CanRotate and Rotate()]。 族实例CanRotate布尔属性用于检查族实例是否可被旋转180%。 这取决于该实例所属的族。
(5)位置(Location)。Location 属性确定项目中实例的物理位置。实例可以有点位置或线位置。
适用于Location的特点如下:
●点位置是个LocationPoint类对象-基础、门,或有点位置的桌子。
●线位置是个LocationCurve类对象-有线位置的梁。
●它们都是Location类的子类。

2.主体和主面( Host and HostFace )
Host和HostFace都是FamilyInstance属性。
(1)主体(Host)。 族实例对象有个Host属性,该属性返回其主体图元。有些族实例对象没有主体图元,如桌子和其他家具,因为没有主体图元被创建,所以Host属性不返回任何内容。然而,其他对象,如门窗,必须有主体图元。在这种情况下,Host 属性返回窗或门所在的墙图元.
(2) 主面(HostFace)。HostFace 属性获取对族实例的主体表面的参照,或若实例位于某个工作平面,则获取对底部工作平面的几何面参照。若工作平面未参照其他几何图形,或实例未嵌于某表面或工作平面,则该属性返回值为空(null)。

3.子构件及父构件( Subcomponent and Supercomponent )
FamilyInstance.GetSubComponentIds( )方法返回载入该族的族实例图元ID。 当一个“Table-Dining Round w Chairs.rfa”的实例置于某个项目中,可由GetSubComponentlds( )方法返回一组椅子图元的ID。

4.其他属性( Other Properties )
属性是特指Revit Architecture和Revit Structure中的属性。
(1)房间信息(Room Information)。族实例属性包括Room、FromRoom 和ToRoom。
(2)空间信息(Space Information)。族实例有一-个 Space属性,用于标识保存MEP实例的空间。
(3) Revit Structure 相关分析模型( Revit Structure Related Analytical Model )。GetAnalyticalModel( )方法检索族实例结构分析模型。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤影墨客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值