Revit二次开发入门

article/2025/9/28 17:50:12

Revit二次开发入门

  1. 订购并安装Autodesk Revit
  2. 安装Visual Studio
  3. 安装Revit AddIn-Manager
    安装步骤:
    找到安装Revit解压后的文件夹,找到\Utilities\SDK目录,并运行RevitSDK.exe;
    指定安装目录(安装步骤实际上只是把一个文件夹解压,不需要太在意目标文件夹);
    在中找到文件AddIn-Manager.dll以及AddIn-Manager.addin,将这两个文件复制到C:\ProgramData\Autodesk\Revit\Addins\2020
    安装完成。
  4. 安装Revit Lookup
    Revit Lookup是由Autodesk Developer Network (ADN)技术专家Jeremy Tammik开发并开放源码的Revit数据库查看工具。利用Revit Lookup,开发者可以轻易地查看当前Revit文件中所有对象的大部分属性信息,以及对象间的关系,从而快速定位开发过程中遇到的问题。Revit

安装步骤:
在Revit Lookup项目地址中找到对应版本的发布版,在本教程中,我们找到2018.0.0.8 for Revit 2018,并下载到本地;
解压下载的文件夹到任意文件夹();
打开,并找到RevitLookup.sln文件,使用Visual Studio 2017 Community打开;
在Visual Studio菜单栏中点击生成->生成解决方案,等待生成成功;
复制\RevitLookup.addin以及\bin\Debug\RevitLookup.dll到C:\ProgramData\Autodesk\Revit\Addins\2020
Revit Lookup 安装完成
5. 使用Revit AddIn-Manager以及Revit Lookup

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

UIApplication:创建菜单
UIDocument:用户和文档的交互
Application:处理文档
Document:处理元素
Revit使用的是多文档类型。在Revit API的类结构中,应用类和文档类是处于最底层的。
Application类表示一个Revit应用,提供对文档、选项以及其他应用范围的数据的访问设置。
Document类用于表示打开的Autodesk Revit工程
Element元素在Revit里面尤为重要,用户能够看见的大多数对象都是元素,比如墙、族、族类型、族实例、标高、轴网、视图等。Revit中的大多数类都是继承自元素。元素是可序列化的,即是可以被保存到RVT项目文件里。
族对应Family,族类型对应FamilySymbol,族实例是FamilyInstance。

如何获取元素。
1、通过ID获取元素:Revit中的元素都有一个ID,我们可以通过ID来直接从文档中获取这个元素。
Document.GetElement(new ElementId(30))
2、通过过滤器获取元素:过滤器方式是API里使用最广的方式,也是推荐使用的方式。需要创建收集器与过滤器来获取用户想要的。
FilteredElementCollector=newFilteredElementCollector(doc)
3、通过选择:使用UIDocument的Selection属性,用户可以获得被选中的元素的集合。
UIDocument.Selection.GetElementIds()

元素的几个重要属性包括:
Category(类别)
Location(位置)
LevelId(标高ID)
Document(所在文档)
Parameters(所有参数)
元素的几个重要方法包括:
GetTypeId()类型ID
ChangeTypeId()修改类型ID
IsValidType()检验类型合法性
GetMaterialIds()获取材质ID
LookupParameter()查询某一参数

元素过滤器:
查找、过滤、遍历元素
基于Document;支持特定的View和元素集
支持Filter及复杂的组合Filter
Shortcut方法,快速返回。
支持集合的合并。

元素收集器:
用来迭代以及过滤元素的主要类是收集器。
过滤器操作步骤
1、 新建FilteredElementCollector实例
Var coll =new FilteredElementCollector(_doc)
2、 添加过滤条件
Coll.WherePasses(new ElementClassFilter(typeof(wall)));
3、 访问满足条件的对象
IListwalls = wallTypeCollector1.ToElements();

快速过滤器常用子类
Category
Class
CurverDriven
ElementType
OwnerView
Workset
FamilySymbol
BoundingBox
慢速过滤器常用子类
CurveElement
Room/Area/Space
FamilyInstance
XXXUsage
ElementIntersect
ElementParameter\

几何数据
几何数据代表一个构件的几何模型
在Autodesk.Revit.DB命名空间里包含了一些几何图形相关的类型,它是在API中用于几何图形的表示和处理。
从基类继承的情况分,API提供了三大种几何类型来描述和存储几何信息,分别是:
几何基元类:包括所有从GeometryObject派生出来的子类
几何辅助类:包括一些从APIObject派生出来的几何相关的子类和一些值类型。
几何集合类:包括一些实现了IEnumerable或者IEnumerator接口的几何相关的类型。
属性参数:
Options决定具体返回的具体值。
GeoElement geoElem = elem.get_Geometry(geoOptions);
Options类,用于制定返回几何数据的特征
返回的几何对象是否带参考信息:设置ComputeReferences属性为ture或false
设置返回的几何信息的详细程度:设置DetailLevel(粗略,中等,详细)
返回哪个视图的几何信息:设置View属性
两种创建Options对象的方法:
Application.CreationNewGeometryOptions()
Options的构造函数New Options()
几何对象
Geometry返回GeometryElement对象
GeometryElement.Objects返回GeometryObjectArray,包含:
Autodesk.Revit.DB…GeometryElement
Autodesk.Revit.DB…GeometryInstance(包含标准族实例几何信息)
Autodesk.Revit.DB…Solid(三维实体)
Autodesk.Revit.DB…Edge(棱边)
Autodesk.Revit.DB…Face(表面)
Autodesk.Revit.DB…Mesh(网格)
Autodesk.Revit.DB…Point(点)
几何基元类
几何基元类在API中描述图形表示,由基类GeometryObject派生,
主要有如下的类型:
1、 轮廓(Profile)
2、 面(Face)
3、 边(Edge)
4、 线(Curve)
5、 点(Point)
6、 几何元素(GeometryElement)
7、 几何实例(GeometryInstance)
8、 网格(Mesh)
9、 实体(Solid)

实体(Solid):三维实体
可以得到构成Solid的Face
Solid边(Edge)
Edge可以转换成Curve
表面积、体积

面(Face):三维空间的实体面。
Face多样性
Face的周围边(EdgeCurve)
三角化后得到Mesh
面积、法向量计算等
不能直接构造一个对象

Mesh网格/Mesh Triangle三角网格:三角化网格用于描述三维面的形状
三角形片
顶点坐标
每个三角形的三个顶点

边(Edge):三维空间实体的边。
隶属的面
每个Edge隶属两个面
可转换成几何曲线Curve
只能从Face里面取,不能直接New

线(Curve):参数曲线
几何运算对象
线的多样性
可自由创建
Line In = Line

Point/XYZ 点:三维空间中的点
XYZ代表了具体的位置坐标
可自由进行创建等
轮廓(Profile):可用来生成形状的单条线,一串连接起来的线或闭合的环。

几何元素(GeometryElement):一个元素的几何表示,包含了所有的几何信息。
几何实例(GemetryInstance):一个类型图元的实例,可以取得与该实例相关的类型图元与几何信息。
Element.Geometry属性用以获得实体对象的几何数据。
Geometry Element.Geometry[Option options]{get;}
几何辅助类:API有一些辅助类来帮助表示某些元素的几何信息。
1、 BoundingBoxXYZ:三维的长方体。
2、 Transform:仿射空间的一个变换。
3、 Reference:Revit模型中的一个几何对象的稳定引用,一般用于创建元素,比如尺寸标注。
4、 Plane:几何平面对象。
5、 Options:解析几何的用户参数选择。
6、 XYZ:三维空间坐标。
7、 UV:二维空间坐标。
8、 BoundingBoxUV:二维的长方形,平行于坐标轴。

事务类型
在API中和事务有关的主要有三个类
1、 Transaction(T)
要修改Revit文档中的模型就需要一个Transaction.在同一时间,只有一个Transaction可以被打开,不允许嵌套。每个Transaction需要一个名字,当这个Transaction被成功提交后,这个名字就会被显示在Undo菜单里
2、 TransactionGroup(TG)
用来将几个独立的事务分组,这样一个组可以同时处理许多事务。
3、 SubTransaction(ST)
一个SubTransaction可以用来提交一组操作,子事务是可选项,不是必须的。
SubTransaction必须在一个打开的Transaction中创建,在Transaction关闭(提交或撤销)前关闭(提交或撤销)

事务类型
说明:
T尽在修改Document时需要,ST/TG不是必须的,只是为了更好的组织修改。
修改的唯一性:Transaction不可嵌套
ST必须在T启动后启动,必须在T关闭前关闭。
TG启动后方可启动T:在所有T关闭后关闭。
ST和TG可嵌套但不可重合。
注意检查函数返回值。

事务开始、提交、回滚
起始化:构造函数中
开始/Start:在它实例化后开始,或者关闭后重启。
提交/Commit:当对象运行时,请求接收对象的模型改动。
回滚/Rollback:当对象运行时,所有的模型改动将被有效抛弃。

创建元素
1)创建模型元素
使用Document.Creat或对应的模型元素的静态函数创建面
使用Element子类的静态方法创建
DB.Document.Creat 返回Creation.Document
2)创建族
3)创建族类型
在创建族的时候创建类型
使用ElementType的Duplicate(复制)方法

元素的移动、复制、镜像
移动
API提供了移动元素的方法,可以把一个或几个元素从一个地方移动到另一个地方,从精确程度来说,和UI的移动命令是一样的
MoveElement(Document,ElementId,XYZ)使用给定的平移变换移动一个元素
MoveElement(Document,Icollection,XYZ)使用给定的平移变换移动元素集
镜像
API提供镜像方法创建一个或多个元素
MirrorElement(Document,ElementId,Plane)使用给定的平面创建一个元素的镜像拷贝。
MirrorElements(Document document,Icollectionelements ToMirror,Plane plane)使用给定的平面创建一个元素集合的镜像拷贝
CanMirrorElement(Document,ElementId)判断元素是否可以进行镜像操作
CanMirrorElements(Document,Icollection)判断元素级是否可以进行镜像操作

TaskDialog任务对话框
在Revit中,任务对话框是具有Revit风格的Windows对话框的替代品,是一种典型的模态对话框。
1、 在创建展示任务对话框的方法有两种;
创建并单独设值任务对话框,使用Show()方法显示给用户。
运用静态Show方法直接创建并展示给用户(仅有一个子集的选项可被设定)
2、 任务对话框可以被用于:
给用户提供信息。
询问用户,并得到反馈
允许用户选择,并执行相应命令

任务对话框的控件:
1) 标题(Title)
2) 主标题(Main Instruction)
3) 主要内容(Main Content)
4) 扩展内容(Expanded Content)
5) 命令链接(Command Links)
6) 普通按钮(Common Button)
7) 默认按钮或链接(Default button or link)
8) 不在提示复选框(DNSN Checkbox)
9) 文字信息(Footer Text)
方法:
Show()显示任务对话框
Show(String.String)显示一个包含标题,主要说明和关闭按钮的任务对话框
Show(String.TaskDialogCommomButtons)显示一个包含标题,主要说明和普通按钮的任务对话框
Show(String.String,TaskDialogCommomButtons,TaskDialogResult)显示一个包含标题,主要说明,普通按钮和默认按钮的任务对话框

Ribbon菜单
1、 选项卡页(RibbonTab):用户可以创建一个新的选项卡页,用来管理自己的面板RibbonPaneI
2、 面板(RibbonPaneI):其他控件的容器。
3、 命令按钮(PushButton):对应一个ExternalCommand,单击这个按钮,对应的ExternalCommand将被执行。
4、 下拉按钮(PulldownButton):带有下拉列表的按钮控件,表中的每个元素都是一个命令按钮,在下来列表的元素间可以加水平分割线。
5、 下拉记忆按钮(SplitButton):是下拉按钮的派生类控件,分为上下两个部分,上部分功能类似命令按钮,下部份功能类似下拉按钮。
6、 下拉组合框(ComboBox):是有下拉列表的选择控件,通过单机控件上的箭头可显示或隐藏下拉列表,此控件不支持多项选择。

创建Ribbon菜单
一般都在IExternalApplication的OnStartup函数里面,
IExternalCommand也可以行
创建RibbonTab
UIControlledApplication.CreateRibbonTab(string)
UIApplication.CreatRibbonTab(string)
创建RibbonPanel
UIControlledApplication.CreateRibbonPanel(tabName,panelName)
UIApplication.CreatRibbonPanel(tabName,panelName)
在这里插入图片描述
在这里插入图片描述
事件:
事件是什么:
事件是Revit界面或API执行过程中触发的特定的动作。
事件和委托的区别:
事件是一种特殊的委托,或者说是受限制的委托,是委托一种特殊应用,只能施加+=,-=操作符,使用中,委托常用来表达回调,事件表达外发的接口。
如何订阅事件
步骤一:
需要一个函数在得到事件通知后进行响应和处理。
步骤二:
使用之前定义的处理函数在Revit中注册该事件。
如何注销事件
如果是在IExternalApplication.OnStartup()函数中注册的事件,通常建议在IExternalApplication.OnShutdown()函数中注销。
如何触发事件
通过注册事件,一个插件程序能在某个动作即将发生或刚发生后得到通知,然后根据这个动作采取行动。某些事件是成对的,一个出发在某个动作发生前(Pre-event),另一个刚触发在这个动作发生后(Post-event)。
在这里插入图片描述
预备事件Pre-Event/事后事件Post-Event
DocumentClosing
DocumentClosed
级别
界面UI级别
应用Application级别
文档Document级别
事件也可分为
数据库(DB)事件
界面(UI)事件

Revit事件简介
一些事件只是只读的。这意味着在执行这些事件的时候,模型是无法被修改的
一些常规的事件(非只读)在执行时也有可能无法修改模型。这是因为该模型处在一个无法被修改的状态。
可以通过属性Document.IsModifiable和Document.IsReadOnly来检查文档是否可以被修改。

族简介
族是一个包含通用属性(称作参数)集和相关图形表示的图元组。
同一个族都具有相关的图形表示和一组相同的参数(族类型参数)。
在API中,提供了一系列的类和方法来提供管理组文档,包括族类型和族参数的管理、几何图元的管理、几何图元的可见性管理、族文档和工程文档交互(编辑族和载入族)等。
族类型和族参数管理
FamilyManager
FamilyType
FamilyParamenter
几何图元的管理
FamilyItemFactory
几何图元的可见性管理
FamilyElementVisibility
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


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

相关文章

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

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

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

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

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

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

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

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

运放的差分放大电路

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

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

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

差分放大电路基础

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

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

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

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

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

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

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

全差分运算放大器浅析

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

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

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

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

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

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

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

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

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

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

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

差分运算放大器的计算

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

差分放大电路及动态分析

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

(十)【模电】(多级放大电路)差分放大电路

[模电专栏] 文章目录 A 差分放大电路A.a 零点漂移现象及其产生的原因A.b 长尾式差分放大电路的组成A.c 长尾式差分放大电路的分析A.c.a 静态分析A.c.b 动态分析 A.d 差分放大电路的四种接法A.d.a 双端输入单端输出差分放大电路A.d.b 单端输入双端输出差分放大电路 A.e 具有恒流…

差分放大电路在信号传输的作用及设计原理

一、为什么要有差分放大电路 1.将一个信号从一个地方传输到另一个地方,如果近距离的传输那么直接用串口,IIC等常用的通信方式就行了;如果长距离传输呢? 2.长距离传输至少要考虑传输过程中,外界环境对信号的影响。 3.先…