700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Revit二次开发入门

Revit二次开发入门

时间:2019-12-17 07:24:27

相关推荐

Revit二次开发入门

Revit二次开发入门

订购并安装Autodesk Revit安装Visual Studio安装Revit AddIn-Manager

安装步骤:

找到安装Revit解压后的文件夹,找到\Utilities\SDK目录,并运行RevitSDK.exe;

指定安装目录(安装步骤实际上只是把一个文件夹解压,不需要太在意目标文件夹);

在中找到文件AddIn-Manager.dll以及AddIn-Manager.addin,将这两个文件复制到C:\ProgramData\Autodesk\Revit\Addins\

安装完成。安装Revit Lookup

Revit Lookup是由Autodesk Developer Network (ADN)技术专家Jeremy Tammik开发并开放源码的Revit数据库查看工具。利用Revit Lookup,开发者可以轻易地查看当前Revit文件中所有对象的大部分属性信息,以及对象间的关系,从而快速定位开发过程中遇到的问题。Revit

安装步骤:

在Revit Lookup项目地址中找到对应版本的发布版,在本教程中,我们找到.0.0.8 for Revit ,并下载到本地;

解压下载的文件夹到任意文件夹();

打开,并找到RevitLookup.sln文件,使用Visual Studio Community打开;

在Visual Studio菜单栏中点击生成->生成解决方案,等待生成成功;

复制\RevitLookup.addin以及\bin\Debug\RevitLookup.dll到C:\ProgramData\Autodesk\Revit\Addins\

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。