Revit 2011 API DevTV 1Copyright © 2010 Autodesk Inc.
Revit 2011 API DevTV 2Copyright © 2010 Autodesk Inc.
关于讲师
叶雄进 Joe Ye Joe.Ye@autodesk.com
Developer Consultant
ADN DevTech 部门
3年软件开发咨询
5年工程软件研发
支持APIs
Revit Architecture/Structure/MEP
AutoCAD Architecture
AutoCAD
Revit 2011 API DevTV 3Copyright © 2010 Autodesk Inc.
目标和要求
目标
掌握Revit二次开发所需条件
掌握开发完整流程。
了解Revit二次开发基本技术
需具备知识
了解Revit Architecture产品
初步了解.NET开发语言(C#/VB.NET)
Revit 2011 API DevTV 4Copyright © 2010 Autodesk Inc.
首字母缩写含义对照
ADN Autodesk Developer Network
AEC Architecture, Engineering, Construction
API Application Programming Interface
BIM Building Information Model
GUI Graphical User Interface
MEP Mechanical, Electrical, Plumbing
RAC Revit Architecture
RME Revit MEP
RST Revit Structure
SDK Software Development Kit
UI User Interface
Introduction
Revit 2011 API DevTV 5Copyright © 2010 Autodesk Inc.
Revit API 培训提纲
¾ Revit 二次开发入门
Revit 二次开发的完整过程
遍历Revit内部对象
过滤器的使用
访问和编辑对象的参数
调试工具RevitLookup
深入学习Revit编程
Revit 2011 API DevTV 6Copyright © 2010 Autodesk Inc.
Revit 二次开发所需条件
三个条件:
Revit 产品
Revit SDK
Visual Studio 2008
二次开发入门
Revit 2011 API DevTV 7Copyright © 2010 Autodesk Inc.
Revit 产品情况
Revit三个系列产品
Revit Architecture , 用于建筑设计
Revit Structure , 用来建立结构模型
Revit MEP(Mechanical, Electrical, Plumbing), 用于建筑设备设计
如何获得软件安装包
DVD 版本在ADN网站可以获得
Software & Support > Revit > Downloads
现可
中文版Revit 2011 产品
在Autodesk网站可以下载
Products > Revit Architecture, MEP, Structure > Product Download
下载最新的软件
具有独立的Server Pack,在已经安装的软件上更新。
二次开发入门
Revit 2011 API DevTV 8Copyright © 2010 Autodesk Inc.
Revit SDK
获取Revit SDK途径
产品安装包/安装光盘中有SDK
..\support\SDK\RevitSDK.zip, 在安装光盘中搜索“SDK”可找到
ADN网站
Software & Support > Revit > Downloads
链接
http://adn.autodesk.com/adn/servlet/index?siteID=4814862&id=5017413&linkID=49
01650
Autodesk网站最新下载
http://www.autodesk.com/developer ‐‐>Products & Technologies‐‐> Revit
http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=2484975
I二次开发概览
Revit 2011 API DevTV 9Copyright © 2010 Autodesk Inc.
Revit API 开发工具和语言
两种开发工具
Visual Studio
条件
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5
语言:C# 、VB.NET、Managed C++
引用接口组件文件 RevitAPI.DLL, RevitAPIUI.dll
存放目录:“[Revit XXX ver]\Program\
三个产品拥有相同的接口定义文件(RevitAPI.DLL,RevitAPIUI.DLL)
VSTA (Visual Studio Tools for Application)
使用Revit自带的开发环境
用C#,VB.Net语法
生成宏
Revit二次开发概览
Revit 2011 API DevTV 10Copyright © 2010 Autodesk Inc.
Revit API 培训提纲
Revit 二次开发入门
Revit 二次开发的完整过程
完整演示最简单命令Hello World
调试代码
命令类属性用法
输入输出参数含义
用addin文件加载外部命令
外部命令加载工具AddinManager
访问Revit内部对象
Revit数据库对象
访问和编辑对象的参数
调试工具RevitLookup
深入学习Revit编程
Revit 2011 API DevTV 11Copyright © 2010 Autodesk Inc.
用 Visual Studio 开发Revit
两种方式来扩展Revit的功能
方式一:外部命令(External Command)
功能:添加一个Revit命令
描述: 由用户点击按钮来启动命令
使用最频繁
方式二:外部应用(External Application)
功能:可以添加菜单和工具条,或其它初始化命令
描述:在启动和关闭Revit.exe时自动执行
一般会用到,用量不多
Revit 二次开发的完整过程
Revit 2011 API DevTV 12Copyright © 2010 Autodesk Inc.
演示最简单外部命令
功能:运行命令后,弹出消息框,显示Hello World
Revit 二次开发的完整过程
Revit 2011 API DevTV 13Copyright © 2010 Autodesk Inc.
创建外部命令步骤
1. 新建一个类库/Class Library 工程
2. 引用Revit接口定义文件RevitAPI.DLL 和 RevitAPIUI.DLL
将Copy Local 属性设置为False
3. 命名空间引用,如:
using Autodesk.Revit;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
…
4. 为命令类加属性
[Transaction(TransactionMode.Automatic)]
[Regeneration(RegenerationOption.Automatic)]
5. 新建类从IExternalCommand派生
6. 重载Execute()方法
7. 在Execute中添加代码来实现命令功能
Revit 二次开发的完整过程
Revit 2011 API DevTV 14Copyright © 2010 Autodesk Inc.
跟踪调试Revit程序
Revit 运行时调试
方法:Tools‐>attach to process‐>Attach to Revit.exe
特点:可以随时在VS中Detach调试,此时Revit不退出,灵活方便. 可以在
Revit不退出的情况下调试多个程序
用 Detach中断调试,继续修改代码,再次绑定来调试
技巧:
需要选择托管方式调试
从Visual Studio中启动Revit调试
方法: project properties‐>Debug‐>Start external program
特点: 结束调试时, Revit退出.
Revit 二次开发的完整过程
Revit 2011 API DevTV 15Copyright © 2010 Autodesk Inc.
Execute 参数应用
演示使用Execute的输入输出参数
获取Application对象,供本命令使用
读取版本信息
获取当前文档
……
返回提示字符串消息
返回选中对象,供用户
Revit 2011 API DevTV 16Copyright © 2010 Autodesk Inc.
Execute参数解释
public IExternalCommand.Result Execute(
ExternalCommandData commandData,
ref string message, ElementSet elements )
传入参数
ExternCommandData
由此获取应用程序对象和文档对象
传出参数
ref string:
传出提示字符串,提示用户存在的问题
ElementSet
传出一个对象集合,用户可查看其中的对象
Revit 二次开发的完整过程
Revit 2011 API DevTV 17Copyright © 2010 Autodesk Inc.
外部命令属性
命令前面的两个属性:事务和更新属性
[Transaction(TransactionMode.**)]
[Regeneration(RegenerationOption.**)]
两种事务模式
自动事务模式:TransactionMode.Automatic
手工事务模式:TransactionMode.Manual
两种模型更新选项
自动更新模式:RegenerationOption.Automatic
手工事务模式[Regeneration(RegenerationOption.Manual)]
Revit 2011 API DevTV 18Copyright © 2010 Autodesk Inc.
方式2:创建外部应用演示
实现的功能
在Revit启动时,弹出对话框
在Revit退出时,弹出一个对话框
Revit 2011 API DevTV 19Copyright © 2010 Autodesk Inc.
添加外部应用步骤
步骤与外部命令相似
不同:
新建类从IExternalApplication接口派生
实现 OnStartup() and OnShutdown() 方法
public class App : IExternalApplication
{
public IExternalApplication.Result
OnStartup( ControlledApplication application
{
CreateRibbonSamplePanel(application);
CreateRibbonInfosPanel(application);
return IExternalApplication.Result.Succeeded;
}
public IExternalApplication.Result
OnShutdown( ControlledApplication application )
{ return IExternalApplication.Result.Succeeded; }
}
Revit 二次开发的完整过程
Revit 2011 API DevTV 20Copyright © 2010 Autodesk Inc.
命令加载
方式一: 通过addin文件
*.addin 文件
可用任意文件名,只要扩展名是addin即可
只能存放在指定的目录中
C:\Documents and Settings\All Users\Application
Data\Autodesk\REVIT\Addins\201*
在该文件夹下可有多个*.addin文件并存,Revit依次加载其中设置的加载项目
External Tool
C:\SDK\RevitLookup\CS\bin\Debug\RevitLookup.dll
9631d07b‐ade1‐4ea1‐b566‐049161afcc4c
RvtMgdDbg.App
Revit 2011 API DevTV 21Copyright © 2010 Autodesk Inc.
命令加载
方式二:通过Revit.ini文件
Revit.ini 文件
该文件位于产品安装目录的Program子文件夹中
可以加载外部命令和外部应用
在2012中,不再支持这个方法
[ExternalApplications]
EACount=2
EAClassName1=RvtMgdDbg.App
EAAssembly1=C:\a\lib\revit\2011\SDK\RevitLookup\CS\bin\Debug\RevitLookup.dll
EAClassName2=RvtSamples.Application
EAAssembly2=C:\a\lib\revit\2011\SDK\Samples\RvtSamples\CS\RvtSamples.dll
Revit 2011 API DevTV 22Copyright © 2010 Autodesk Inc.
加载工具 AddinManager
加载和卸载用户的程序
加载后, 立即可以运行
无需手工编辑addin文件
自动保存加载命令
修改代码编译后立即再次运行命令
包含在SDK中,需预先安装
Revit 2011 API DevTV 23Copyright © 2010 Autodesk Inc.
Revit API 培训导航
Revit 二次开发概览
Revit 二次开发的完整过程
Revit 数据库对象
访问Revit对象
访问和编辑对象的参数
调试工具RevitLookup
深入学习Revit编程
Revit 2011 API DevTV 24Copyright © 2010 Autodesk Inc.
Revit对象分类
Elements Collection
Revit 2011 API DevTV 25Copyright © 2010 Autodesk Inc.
Revit数据库对象的基本特点
构件类型,即构件定义
存储在数据库中,作为插入到建筑模型中的对象的模板使用。在建筑
模型中不可见。
把相同的数据只保存一份
一个定义,多次使用。
例如: 柱类型
构件实例
已经插入到建筑模型中,在视图中可见。
是构件定义的引用,如果构件定义改变,实例跟着改变
例如:插入到建筑模型中的柱。
Revit 2011 API DevTV 26Copyright © 2010 Autodesk Inc.
常用类继承关系图
API Object
Element
HostObject
HostObject
Attributes
Insertable
Object
Family Symbol
Group Type
Floor Type Cont. Footing
Type
Wall Type
Wall
Floor
Clg. & Flr
Cont. Footing
RoofBase
Family Base Symbol
Family
Instance
Insertable
Instance
Family
Instance
Group
Elements Collection
Revit 2011 API DevTV 27Copyright © 2010 Autodesk Inc.
Revit API 培训导航
Revit 二次开发概览
Revit 二次开发的完整过程
Revit数据库对象
访问Revit对象
对象过滤
对象属性读取
对象的类型
类型和类别过滤
访问和编辑对象的参数
调试工具RevitLookup
深入学习Revit编程
Revit 2011 API DevTV 28Copyright © 2010 Autodesk Inc.
Revit对象过滤
2011版提供新的对象过滤方法
找出符合条件的对象集合
找出模型中窗户的数量
找出第一层有多少个窗户
Revit 2011 API DevTV 29Copyright © 2010 Autodesk Inc.
FilteredElementCollector用法
直接添加过滤条件
OfCategory
OfCategoryId
OfClass
过滤器
使用单一过滤器
多个过滤器的逻辑组合过滤器
使用LINQ
.NET 3.5 提供功能
可以做更加具体的对象过滤
Revit 2011 API DevTV 30Copyright © 2010 Autodesk Inc.
Revit对象的标识
Revit 对象的类名称
直接可以用类名唯一标识出来: 如: Wall, WallType, Floor, FloorType….
不同对象,但是共用一个类. FamilyInstance, FamilySymbol, Family, Element
Revit 对象的Category 名称.
通过Revit的Category 可以唯一标识对象的类别
门实例和门类型具有相同的Category
其它属性
如所在的楼层
如某一个参数的值
Revit 2011 API DevTV 31Copyright © 2010 Autodesk Inc.
如何识别Revit中不同对象
根据标识来识别区分不同对象
只使用类名来判断
它们的特点:
片状能容纳其它对象或特定用途的类
如:Wall、Floor、contFooting、CeilingAndFloor等系统族的实例。
如果通过类名无法分别出来,需联合对象的类别(Category)来判断
门、窗、柱等对象没有专用的类来
示,都是FamilyInstance的实例
用Category来判断其类别
用枚举型的BuiltInCategory,来创建ElementCategoryFilter对象,支持所有
国家语言。
访问Revit内部对象
Revit 2011 API DevTV 32Copyright © 2010 Autodesk Inc.
Revit API 培训导航
Revit 二次开发概览
Revit 二次开发的完整过程
Revit数据库对象
访问Revit对象
访问和编辑对象的参数
访问一个对象的所有参数
访问一个指定参数的值
修改对象的参数
调试工具RevitLookup
深入学习Revit编程
参数
•API类: Parameter
•作用:保存对象的属性
•分类:内置参数和共享参数
•优点:扩充共享参数, 没有自定义实
体的读写局限.
Revit 2011 API DevTV 34Copyright © 2010 Autodesk Inc.
访问选中对象所有参数
遍历参数集合:
Element.Parameters
演示
Revit 2011 API DevTV 35Copyright © 2010 Autodesk Inc.
访问指定参数
四种方法获取参数
Parameter( parameterId As Parameters.BuiltInParameter )
Parameter( definition As Parameters.Definition )
Parameter( guid As System.Guid )
Parameter(name As String)
修改参数值
Parameter.Set()
访问和编辑对象的参数
Revit 2011 API DevTV 36Copyright © 2010 Autodesk Inc.
调试工具之一 RevitLookup
SDK的根目录下
读取Revit对象属性和参数
提供源代码和工具类
快速查看对象数据
其它API和调试工具
Revit 2011 API DevTV 37Copyright © 2010 Autodesk Inc.
SDK中资源介绍
说明性文档
Read Me First.doc
Getting Started with the Revit API.doc
Revit Platform API Changes and Additions.doc
Revit 2011 API Namespace Remapping.xlsx
开发参考文档
RevitAPI.chm
Revit 2011 API Developer Guide.pdf
需要时阅读
RevitAddInUtility.chm –制作安装程序时
Autodesk Icon Guidelines.pdf –制作用户界面时
Revit Structure – section definitions and material properties
重要工具
Add‐In Manager
RevitLookup
VSTA Samples
Introduction
Revit 2011 API DevTV 38Copyright © 2010 Autodesk Inc.
SDK中有用的帮助
VSTA Samples
例程代码
都在Samples文件夹中
包含110多个例子
基本涵盖了Revit的API用法
工具和文档
RevitAPIDllsPathUpdater.exe
SamplesReadMe.htm
SDKSamples2011.sln
Revit 2011 API DevTV 39Copyright © 2010 Autodesk Inc.
深入学习
SDK中的资源
讨论组
http://discussion.autodesk.com > Revit Architecture > Revit API
API 培训课程
http://www.autodesk.com/apitraining
The Building Coder, Jeremy Tammik 的 Revit API 博客
http://thebuildingcoder.typepad.com
Autodesk Developer Network
http://www.autodesk.com/joinadn
DevHelp在线帮助
http://adn.autodesk.com
Revit 2011 API DevTV 40Copyright © 2010 Autodesk Inc.
Revit 2011 API DevTV �Revit 二次开发入门��叶雄进 Joe Ye �2010.5�DevTech Autodesk
关于讲师
目标和要求
首字母缩写含义对照
Revit API 培训提纲
Revit 二次开发所需条件
Revit 产品情况
Revit SDK
Revit API 开发工具和语言
Revit API 培训提纲
用 Visual Studio 开发Revit
演示最简单外部命令
创建外部命令步骤
跟踪调试Revit程序
Execute 参数应用
Execute参数解释
外部命令属性
方式2:创建外部应用演示
添加外部应用步骤
命令加载
命令加载
加载工具 AddinManager
Revit API 培训导航
Revit对象分类
Revit数据库对象的基本特点
常用类继承关系图
Revit API 培训导航
Revit对象过滤
FilteredElementCollector 用法
Revit对象的标识
如何识别Revit中不同对象
Revit API 培训导航
参数
访问选中对象所有参数
访问指定参数
调试工具之一 RevitLookup
SDK中资源介绍
SDK中有用的帮助
深入学习
Slide Number 40