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















Revit二次开发入门相关推荐

  1. Revit二次开发入门秘籍 01如何入门

    关于入门 我想在开始学习之前大家应该更需要知道如何入门,对比一下我们在学校的学习,我们需要书.老师-书上呢,是有所有的知识点,有重要的,有不重要的,而老师呢,会知道哪些是重点,也就是我们考试要考的,教 ...

  2. Revit二次开发入门捷径_升维学习、降维打击

    问题 入门Revit二次开发有捷径吗? 答案 量子力学:有也没有.(皮一下:叠加态) 没有:目的地只有一个,路只有一条,学习没有捷径. 有:虽然路只有一条,但我们可以借助交通工具,缩短时间就是捷径. ...

  3. Revit二次开发入门相关安装和配置

    Revit二次开发入门相关安装和配置 最近一周,由于项目需要,需要做一个基于Revit的二次开发项目,也特意初步自学了Revit二次开发的相关知识.由于学习时间过短,了解到的只是皮毛,所有还希望大家能 ...

  4. Revit二次开发入门关键

    学会学习 什么是学习? 学得:通过学,获得的知识. 假会!眼睛:我会了!脑子:我会了!手:不,你不会!!! 习得:通过练习,获得的知识. 真会!手:我会了!基本不用经过太多的思考! 没意识到:好运~! ...

  5. Revit二次开发入门教程一(工具篇)

    对BIM开发感兴趣的读者可以关注我的BIM开发系列教程 什么是BIM开发?这篇文章可以告诉你 Revit二次开发教程提纲 Revit二次开发编程入门一(工具篇) 前言 BIM诞生的背景 Revit在B ...

  6. Revit 及 Revit二次开发入门笔记

    加入BIM相关行业后,虽然是个门外汉,但是还是下决心好好钻研,尽快创造些价值. BIM中很关键的软件Revit已下载.我下载的是2017版本,看了几节Revit视频教程,算是有了初步的了解.因为我的工 ...

  7. Revit二次开发入门[一]载入Add-In Manager

    在C:\ProgramData\Autodesk\Revit\Addins\2020下添加RevitLookup.addin和RevitLookup.dll,之后再打开revit软件会显示载入插件,将 ...

  8. bim 二次开发c语言,BIM百科 | Revit二次开发入门--创建一个简单的程序①

    获取<每日一技,我的成长轨迹>汇总 · 请访问柏慕联创官方网站: www.lcbim.com · Revit插件制作实例步骤: 1.创建你的第一步骤插件 启动 Visual C# 速成版开 ...

  9. revit二次开发概念_BIM百科 | Revit二次开发入门--创建一个简单的程序

    获取<每日一技,我的成长轨迹>汇总 · 请访问柏慕联创官方网站: www.lcbim.com · 创建一个简单的Revit外部命令程序[Revit2017+VS2015]: 1.打开VS, ...

  10. Revit二次开发入门--创建一个简单的程序

    创建一个简单的Revit外部命令程序[Revit2017+VS2015]: 1.打开VS,我的版本是VS2015,点击[新建项目]→[Visual C#]→[类库],然后输入程序名称,如:Hello ...

最新文章

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(39)-在线人数统计探讨
  2. Xamarin XAML语言教程使用属性设置进度条的当前进度
  3. 脑洞一下 | 产品经理是如何用一张小票推算店面房租的?
  4. 【Noip模拟By yxj】
  5. 同构字符串(Isomorphic Strings)
  6. 学习scorllview
  7. C++和C#的指针小解
  8. linux快速切换目录命令,Linux在命令行快速切换目录 - 米扑博客
  9. WPJAM网址导航:最轻便快捷的WordPress网址导航插件
  10. mysql -e 导出_mysql 导出数据导入数据
  11. 实验报告三 密码破解技术
  12. std::decay 类型萃取
  13. 一个女孩跳楼看到的(漫画)
  14. oracle中hint 详解
  15. Spring入门示例
  16. 如何实现国外域名调转到国内已备案ip
  17. 第一行代码 (第三版) 第八,九,十章
  18. 【ParaView教程】第四章 常见问题 —— 怎样绘制二维翼型上压力系数Cp或马赫数Mach沿翼型的变化?
  19. 【Pytorch深度学习50篇】·······第五篇:【YOLO】【1】----- YOLO V3 V4 V5的模型结构
  20. 带你走进微处理架构的世界

热门文章

  1. 【转载】acrobat 9安装教程
  2. 触发器详解——(一)D触发器
  3. 基于arm嵌入式linux毕业设计,本科毕业论文--基于arm的嵌入式系统设计.doc
  4. 面板数据,面板数据的三种基本模型
  5. OA系统中的会议管理
  6. C++Windows连点器制作
  7. 网络协议、socket、webSocket
  8. 博士申请 | 南方科技大学丁克蜜老师课题组招收全奖博士/硕士研究生
  9. 贴吧云签到php源码,求助帮忙把PHP的贴吧签到代码转换到云函数下
  10. gridview的sort_GridView中排序问题