Revit API二次开发入门,完整学习流程,附源码
2020-12-30 01:30
标签:tool att manager forms das nts 输入 初始 点击 方式一:外部命令(External Command) 功能:添加一个Revit命令 描述:由用户点击按钮来启动命令 使用最频繁 方式二:外部应用(External Application) 功能:可以添加菜单和工具条,或其他初始化命令 描述:在启动和关闭Revit.exe时自动执行 一般会用到,用量不多 功能:运行命令后,弹出消息框,显示Hello World 步骤:使用C#语言创建一个类库 演示 Revit运行时调试 方法:Tools->attach to process->Attach to Revit.exe 特点:可以随时在VS中Detach调试,此时Revit不退出,灵活方便,可以在Revit不退出的情况下调试多个程序 用Detach中断调试,继续修改代码,再次绑定来调试 演示 演示使用Execute的输入输出参数 public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) 传入参数 ExternCommandData 由此获取应用程序对象和文档对象 传出参数 ref string:传出提示字符串,提示用户存在的问题 ElementSet:传出一个对象集合,用户可查看其中的对象 命令前面的两个属性:事务和更新属性 两种事务模式 实现的功能 在Revit启动时,弹出对话框 在Revit退出时,弹出一个对话框 实现类:IExternalApplication接口派生 实现OnStartup()和OnShutdown()方法 方式一:通过addin文件 *.addin文件 可用任意文件名,只要扩展名是addin即可 只能存放在指定的目录中 C:\Documents and Settings\All Users\Application Data\Autodesk\REVIT\Addins\201* 在该文件夹下可有多个*.addin文件并存,Revit依次加载其中设置的加载项目 方式二:通过Revit.ini文件 Revit.ini 文件 该文件位于产品安装目录的Program子文件夹中 可以加载外部命令和外部应用 在2012中,不再支持这个方法 构建类型,即构件定义 存储在数据库中,作为插入到建筑模型中的对象的模板使用。在建筑模型中不可见 把相同的数据只保存一份 一个定义,多次使用 例如:柱类型 构件实例 已经插入到建筑模型中,在视图中可见。 时构件定义的引用,如果构件定义改变,实例跟着改变 例如:插入到建筑模型中的柱。 2011版提供新的对象过滤方法 找出符合条件的对象集合 找出模型中窗户的数量 找出一层中有多少个窗户 直接添加过滤条件 过滤器 使用LINQ 演示 SDK的根目录下 读取Revit对象属性和此参数 提供源代码和工具类 快速查查看对象数据 说明性文档 开发参考文档 需要时阅读 重要工具 Revit API二次开发入门,完整学习流程,附源码 标签:tool att manager forms das nts 输入 初始 点击 原文地址:https://www.cnblogs.com/chenyanbin/p/13274982.htmlRevit二次开发入门
Revit二次开发的完整过程
两种方式来扩展Revit的功能
演示最简单外部命令
导入依赖库(重要)
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace RevitDevTV
{
[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
public class DevTVHelloWorld : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
MessageBox.Show("Hello World");
return Result.Succeeded;
}
}
[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
public class ArgumentUsage : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
//获取uiapp信息
UIApplication uiApp = commandData.Application;
//获取文档级的application信息
Autodesk.Revit.ApplicationServices.Application app = uiApp.Application;
//获取当前模型
Document doc = uiApp.ActiveUIDocument.Document;
string strAppInfo = app.VersionBuild+";"+app.VersionName+";"+app.VersionNumber;
//获取当前选择集
Autodesk.Revit.UI.Selection.Selection sel = uiApp.ActiveUIDocument.Selection;
message = "当前选择集中包含如下对象";
//为了显示错误信息框,需要返回Failled
return Result.Failed;
}
}
}
跟踪调试Revit程序
Execute参数应用
Execute参数解释
外部命令属性
创建外部应用演示
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace RevitDevTV
{
[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
public class DevTVApplication : IExternalApplication
{
///
命令加载
xml version="1.0" encoding="utf‐8"?>
RevitAddIns>
AddIn Type="Application">
Name>External ToolName>
Assembly>C:\SDK\RevitLookup\CS\bin\Debug\RevitLookup.dllAssembly>
ClientId>9631d07b‐ade1‐4ea1‐b566‐049161afcc4cClientId>
FullClassName>RvtMgdDbg.AppFullClassName>
AddIn>
RevitAddIns>
[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
加载工具AddinManager
Revit数据库对象
Revit数据库对象的基本特点
常用类继承关系图
访问Revit对象
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace RevitDevTV
{
[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
public class GetAllWindows : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
//获取uiapp信息
UIApplication uiApp = commandData.Application;
//获取文档级的application信息
Autodesk.Revit.ApplicationServices.Application app = uiApp.Application;
//获取当前模型
Document doc = uiApp.ActiveUIDocument.Document;
//方式一:获得所有窗户
FilteredElementCollector collector = new FilteredElementCollector(doc);
collector.OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_Windows); //添加限制,找窗户OST_Windows
IList
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace RevitDevTV
{
[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
public class GetAllWindowsInLevel : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
//获取uiapp信息
UIApplication uiApp = commandData.Application;
//获取文档级的application信息
Autodesk.Revit.ApplicationServices.Application app = uiApp.Application;
//获取当前模型
Document doc = uiApp.ActiveUIDocument.Document;
//方式一:获得所有窗户
FilteredElementCollector collector = new FilteredElementCollector(doc);
collector.OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_Windows); //添加限制,找窗户OST_Windows
IList
FilteredElementCollector用法
Revit对象的标识
Revit对象的类名称
Revit对象的Category名称
其他属性
如何识别Revit中不同对象
访问和编辑对象的参数
访问选中对象所有参数
四种方法获取参数
修改参数值
调试工具之一 RevitLookup
SDK中资源介绍
文章标题:Revit API二次开发入门,完整学习流程,附源码
文章链接:http://soscw.com/index.php/essay/39179.html