【Revit二次开发】族

article/2025/9/28 17:28:23

  • 族实例
  • 族文档
    • Revit API中族文档相关类
    • 族参数和族类型

Revit将族分为系统族、内建族、标准构件族。
Autodesk 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( )方法检索族实例结构分析模型。

族文档

族文档表示的是Revit中的某个族文件而不是Revit项目文件。在Revit API中使用Document类表示Revit文档,其中包括了项目文档和族文档。由IsFamilyDocument属性标识文档是否为族文档。

注意:Revit API不支持对系统族进行编辑。

Revit API中族文档相关类

(1)族文档下支持的操作

  • OwnerFamily属性:拥有该族文档的族
  • FamilyCreate属性:在族文档中创建图元。
  • FamilyElementVisibility类:设置族图元在项目文档中的可见性
  • FamilyManager属性:对族类型和参数的访问
    (2)FamilyManager类的功能
  • 添加、修改和删除族类型:1. CurrentType属性:当前族类型;2. NewType()新建族类型;
  • 添加、修改和删除参数:1. AddParameter()方法添加参数; 2. Parameter属性访问参数;3. Remove()方法删除参数; 4. Set()方法设置参数; 5. MakeInstance()方法设置族参数为实例参数
    (3)LoadFamily(): 将族加载到当前文档
    (4)EditFamily(): 编辑项目中已经存在的族

族参数和族类型

FamilyManager

    public class FamilyMangerCmd : IExternalCommand{public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements){try{Document doc = commandData.Application.ActiveUIDocument.Document;if (null == doc.OwnerFamily){throw new ArgumentException("当前项目不是族项目!");}Family family = doc.OwnerFamily;Document famDoc = family.Document;if (famDoc.IsFamilyDocument){string familyTypeInfo = "族类型参数:\n";string familyInstanceInfo = "族实例参数:\n";FamilyManager familyManager = famDoc.FamilyManager;string categoryName = family.FamilyCategory.Name;FamilyType familyType = familyManager.CurrentType;FamilyParameterSet familyParams = familyManager.Parameters;foreach (FamilyParameter fp in familyParams){string tmp = "-" + fp.Definition.Name+"\n";if (fp.IsInstance){familyInstanceInfo += tmp;}else{familyTypeInfo += tmp;}}TaskDialog taskDialog = new TaskDialog(categoryName + ":"+familyType.Name);taskDialog.TitleAutoPrefix = false;taskDialog.MainContent = familyTypeInfo;taskDialog.ExpandedContent = familyInstanceInfo;taskDialog.Show();}return Autodesk.Revit.UI.Result.Succeeded;}catch (Exception ex){message = ex.Message;return Autodesk.Revit.UI.Result.Failed;}}}

http://chatgpt.dhexx.cn/article/eklnwHkr.shtml

相关文章

Revit二次开发放样融合CreateSweptBlendGeometry

生成solid的放样融合接口为CreateSweptBlendGeometry&#xff0c;参数描述如下&#xff1a; 1&#xff09;Curve pathCurve&#xff1a;路径只要一个线 2&#xff09; IList<double> pathParams&#xff1a;数组大小和截面数组一样&#xff0c;作用是定位截面数组每个截…

Revit二次开发入门

Revit二次开发入门 订购并安装Autodesk Revit安装Visual Studio安装Revit AddIn-Manager 安装步骤&#xff1a; 找到安装Revit解压后的文件夹&#xff0c;找到\Utilities\SDK目录&#xff0c;并运行RevitSDK.exe&#xff1b; 指定安装目录&#xff08;安装步骤实际上只是把一个…

Revit二次开发01-开发环境的配置(Revit2018+Visual Studio 2015)

1.软件简介 1.1 Revit 2018 SDK Revit SDK包含RevitAPI的帮助文档以及带源码的案例&#xff0c;Revit SDK需要与Revit的版本保持一致。Revit SDK中的Add-In Manager是Revit的官方插件&#xff0c;用来加载revit的插件&#xff0c;RevitAPI.chm是RevitAPI的帮助文档。 1.2 Revi…

Revit二次开发有几种方式?做Revit二次开发的必看!

Revit二次开发有三种方式&#xff1a;外部命令&#xff08;IExternalCommand&#xff09;、外部应用(IExternalApplication)和宏(Macro)。下面将简要说明外部应用、宏的开发过程&#xff0c;并着重说明外部命令的开发过程。 1.宏&#xff08;Macro&#xff09; 宏是基于RevitAP…

Revit二次开发案例一(第1讲)

这期起&#xff0c;将为大家带来二次开发的小案例讲解&#xff0c;通过借助Revit建模与二次开发&#xff0c;帮助大家快速提高开发水平&#xff0c;快快参加吧&#xff01;&#xff01;&#xff01; 族实例是通过族类型创建的&#xff0c;而创建族实例是Revit二次开发尤其重要…

【REVIT二次开发教程】01-“你好,Revit”

本教程全程采用VS2022&#xff0c;Revit2022。 1.新建项目 打开VS2022&#xff0c;创建新项目&#xff0c;选择项目类型为C#&#xff0c;Windows&#xff0c;然后点击下一步。 2.添加引用 选择右上角【解决方案管理器】中的【依赖项】&#xff0c;右键点击&#xff0c;选择【…

运放的差分放大电路

该放大器的传递函数为&#xff1a;    若R1 R3 且R2 R4&#xff0c;则公式 1 简化为&#xff1a; 应用电路&#xff1a; 电路一&#xff1a; 用运放做电流采样&#xff0c;再用单片机AD采集处理。 注&#xff1a; 1、Rp10、Rp11、Cp8、Cp9&#xff0c;是对输入做的RC…

模电(十四)差分放大电路

目录 差分放大电路 双端输入双端输出 Q点分析 抑制共模信号 放大差模信号 双端输入单端输出 Q点分析 差模信号分析 共模信号分析 单端输入双端输出 单端输入单端输出 四种接法比较 具有恒流源的差分放大电路 差分放大电路的改进 差分放大电路 采用引入支流负反馈&a…

差分放大电路基础

该放大器的传递函数为&#xff1a; 若R1 R3 且R2 R4&#xff0c;则公式 1 简化为&#xff1a; 应用电路&#xff1a; 电路一&#xff1a; 用运放做电流采样&#xff0c;再用单片机AD采集处理。 注&#xff1a; 1、Rp10、Rp11、Cp8、Cp9&#xff0c;是对输入做的RC滤波&…

6.深入浅出:差分放大电路——参考《模拟电子技术基础》清华大学华成英主讲

如果你想理解差分电路共模信号和差模信号&#xff0c;共模放大倍数&#xff0c;差模放大倍数&#xff0c;共模抑制比等&#xff0c;本文或许能给你比较系统的认知&#xff0c;主要包括&#xff1a; 什么是零点漂移&#xff1f; 引入差分电路 两个共射极放大电路对称布置&…

差分放大电路的构成(零点漂移、差分放大电路是怎么构成的、共模信号、差模信号)

差分放大电路的构成 直接耦合放大电路 零点漂移现象 输入短接&#xff0c;输入为零的时候&#xff0c;输出不是一条直线&#xff0c;就是交流量不是零。 一、产生原因 温漂&#xff0c;温度变化使静态工作点发生变化&#xff0c;产生零点漂移 二、抑制温漂的方法 加射极电阻…

干货 | 教你轻松掌握差分放大电路,看完这篇不踩坑

要想掌握差分放大电路&#xff0c;首先就要知道什么是差分放大电路以及它的作用。 差分放大电路是模拟集成运算放大器输入级所采用的的电路形式&#xff0c;差分放大电路是由对称的两个基本放大电路&#xff0c;通过射极公共电阻耦合构成的&#xff0c;对称的意思就是说两个三极…

全差分运算放大器浅析

全差分放大器(Fully-Differential)是一种应用在将单端信号转换为差分信号&#xff0c;或者将差分信号转换为差分信号的芯片。 全差分放大器的配置特点&#xff0c;就是全对称匹配。即两侧输入阻抗配置完全一致&#xff08;阻抗包括源内阻&#xff09;&#xff0c;反馈配置完全…

运算放大器——4种基本运放电路(同相放大、反相放大、加法器、差分放大电路)实际设计中需要考虑的实际问题

运算放大器——4种基本运放电路(同相放大、反相放大、加法器、差分放大电路)在实际设计中需要考虑的实际问题 前言 第一篇博客就从运放入手吧&#xff0c;话不多说。正文开始&#xff1a;想必大家对运放电路都熟悉的再不能熟悉了。可是这里为什么又再拿出来写呢&#xff1f;肯…

高压电压采样之差分放大电路

在高压电压采样方案研究一文中提到&#xff0c;可以使用差分放大电路进行高压电压采样。如下图&#xff1a;   该方案有缺陷&#xff0c;如下。整车车身与12V电池负极连接到一起&#xff0c;同属于低压电路&#xff0c;我们可以称之为大地。没有绝对的绝缘体&#xff0c;电池…

电子电路:差分放大器分析

1. 差分放大器与共模抑制比 1.1差分放大器 差分放大器有两个输入端和一个输出端&#xff0c;它可以获取两个输入电压之间的差值&#xff0c;并将这个差值放大后送到输出端&#xff0c;差分放大器的模型如下&#xff1a; 输入电压 v i 1 , v i 2 v_{i1}, v_{i2} vi1​,vi2​…

常规放大电路和差分放大电路

常规放大电路和差分放大电路 0、小叙闲言 有一个两相四线的步进电机&#xff0c;需测量其A、B两相的电流大小&#xff0c;电机线圈的电阻为0.6Ω&#xff0c;电感为2.2mH。打算在A、B相各串接一个0.1Ω的采样电阻&#xff0c;然后通过放大电路&#xff0c;送到单片机采样&…

AD623单电源供电差分放大的电路设计与仿真

目录 一 前言 二 需求分析 三 放大电路设计与仿真 3.1 AD623参数 3.2 电路设计 3.3 仿真验证 一 前言 AD623单电源供电差分放大 二 需求分析 最近需要做一个拉力检测模块&#xff0c;由于所选购的拉力传感器输出的是差分信号&#xff0c;且差模电压是mv级别的&#xff…

差分运算放大器的计算

难得手工计算分析了一下&#xff0c;居然计算出来了&#xff0c;挺高兴的&#xff0c;之后要更努力 分析的关键是放大器的虚短和虚断。 首先看从V2经R3和R4到地这一回路。严格来说&#xff0c;经过R3的电流应该等于流进放大器正相输入端的电流和经过R4电阻的电流之和。但是放…

差分放大电路及动态分析

由温度引起的零点漂移成为温漂&#xff0c;引入负反馈 加入Re电阻 从抑制温度漂移的角度来说 希望Re越大越好 但是会导致放大倍数变小 加一个镜像的电路可以让两边一起浮动 但是两个Re可以共用一个 于是改成下面的 形式 Re电阻现在的作用变成了原来的两倍 可以将Vbb共用…