1. RevitAPI 基础(上)
一 重要的基本设置:
1. 类库:revitAPI.DLL, revitAPIUI.DLL,个人理解前者包括了revit软件所特有的数据类型及软件中存在的全部后台数据,而后者是包含了大量与实现UI交互相关的接口,主要有IExternalCommand, IExternalApplication, Seletion选择功能, 菜单制作与任务对话框的制作
2. IExternalCommand:规定了外部命令扩展功能的接口供类(class)使用,只有一个抽象函数Execute,其有三个参数,commandData(输入参数,主要是Application, View, JournalData三种类型),message(输出参数,以string类为主,主要用来返回错误信息),elements(错误发生后高亮显示的元素)。
3.IExternalApplication:个人理解这个接口主要用于实现已有解决方案的拼接。这个接口本身定义了OnStartup和OnShutdown两个函数用于拼接已存在的dll以及定制UI,其不提供直接操作软件后台数据的方法。
4.IExternalDBApplication:这个口用于处理数据库级别的事件(即不涉及UI交互的后台数据增删改查),本质是3的一种特殊形式,其也通过上述两个方法拼接解决方案,但未提供定制UI的方法。
5.在继承IExternalCommand接口之前,必须定义事务Transaction的处理方式,[Autodesk.Revit.Attributes.Transaction(TransactionMode.Manual)]。除mannual外还有两个readonly与Automatic两种。
二 revit文档的获取(commandData, UIApplication, Application, DocumentSet, Documents, Document, ActiveDocument之间的关系)
commandData:revit后台数据的集合及相关的属性信息 UIApplication:后台数据的集合,只能通过Application方法引用,commandData和两种document都包含UIApplication。 UIDocument:个人理解其表示可交互的文档中包含信息的集合,并提供了通过不同UI交互过程提取信息的方法,如seletion交互获取文档,只能通过uiapplication进行引用。ActiveDocument:当前的活动文档,只能通过uidocument进行引用,是UIdocument的一部分。
Document:代表一个独立的工程文件,不一定是最顶级的。ActiveUIDocument.Document代表引用了当前活动文档。Documents代表后台中的全部文档,只能用Application.Documents进行引用。
真的太乱了!还是画图吧!其实最乱的就是Document和UIDocument,其主要区别在于Document中不能用seletion方法,因而其主要用过滤器过滤元素,而UIDocument中出现了大量有交互有关的方法。

三 最后贴一段代码,主要是IExternalCommand的使用,遍历了用seletion选择的元素
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.Attributes;
namespace chapter2
{
[Autodesk.Revit.Attributes.Transaction(TransactionMode.Manual)]
public class class1 : IExternalCommand//让class1继承这个接口中的方法,即Execute
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
try
{
UIApplication uIApplication = commandData.Application;
UIDocument uIDocument = uIApplication.ActiveUIDocument;
Document document = uIDocument.Document;
List<ElementId> selectedElem = new List<ElementId>();
List<Element> walls = new List<Element>();
List<Element> beams = new List<Element>();
List<ElementId> beamid= new List<ElementId>();
int countW = 0;int countBeam = 0;
foreach ( var id in uIDocument.Selection.GetElementIds())
{
Element element=uIDocument.Document.GetElement(id);
if(element is Wall)
{
selectedElem.Add(id);
walls.Add(element);
countW++;
}
if (element is BeamSystem)
{
beamid.Add(id);
beams.Add(element);
countBeam++;
}
}
TaskDialog.Show("hello revit","模型中共有"+countW.ToString()+"个墙"+countBeam.ToString()+"个柱");
foreach(var wall in walls)
{ TaskDialog.Show("墙的编号是",wall.Name);}
TaskDialogResult taskDialogResult = TaskDialog.Show(
"revit",
"TES to continue," + "NO to cancel",
TaskDialogCommonButtons.Yes | TaskDialogCommonButtons.No);
if(TaskDialogResult.Yes==taskDialogResult)
{
return Result.Succeeded;
}
else if(TaskDialogResult.No == taskDialogResult)
{
return Result.Cancelled;
}
else
{
return Result.Failed;
}
}
catch
{
message = "unexpected errors";
return Result.Failed;
}
//throw new NotImplementedException();
}
}
}
1. RevitAPI 基础(上)的更多相关文章
- .net在当前日期的基础上加一天
比如今天是:2015-11-10 18:57:01,在这个基础上加一天,那么就是2015-11-11 18:57:01,代码如下: DateTime now_dt = DateTime.Now; ). ...
- 【JavaEE】SSH+Spring Security基础上配置AOP+log4j
Spring Oauth2大多数情况下还是用不到的,主要使用的还是Spring+SpringMVC+Hibernate,有时候加上SpringSecurity,因此,本文及以后的文章的example中 ...
- 在cocos code ide的基础上构建自己的lua开发调试环境
对于一种语言,其所谓开发调试环境, 大体有以下两方面的内容: 1.开发, 即代码编写, 主要是代码提示.补齐, 更高级一点的如变量名颜色等. 2.调试, 主要是运行状态下断点.查看变量.堆栈等. 现在 ...
- Android 工程在4.0基础上混淆
Android现在对安全方面要求比较高了,我今天要做的对apk进行混淆,用所有的第三方工具都不能反编译,作者的知识产权得到保障了,是不是碉堡了. 一,首先说明我这是在4.0基础上进行的. 先看看pro ...
- 框架使用的技术主要是SpringMVC 在此基础上进行扩展
框架使用的技术主要是SpringMVC 在此基础上进行扩展 1 Web前端使用 2 前段控制器采用SpringMVC零配置 3 IOC容器Spring 4 ORM使用 Mybites或者hiberna ...
- 实现Square类,让其继承自Rectangle类,并在Square类增添新属性和方法,在2的基础上,在Square类中重写Rectangle类中的初始化和打印方法
实现Square类,让其继承自Rectangle类,并在Square类增添新属性和方法,在2的基础上,在Square类中重写Rectangle类中的初始化和打印方法 #import <Found ...
- 【Xamarin开发 Android 系列 6】 Android 结构基础(上)
原文:[Xamarin开发 Android 系列 6] Android 结构基础(上) 前面大家已经熟悉了什么是Android,而且在 [Xamarin开发 Android 系列 4] Android ...
- 在Livemedia的基础上开发自己的流媒体客户端
一.背景 二.Livemedia框架介绍 1.总体框架 2.客户端框架 2.1 客户端openRTSP流程 2.2增加一种新的媒体 2.2.1增加媒体的format 2.2.2 新媒体需要考虑的问题 ...
- 使用mysqlbinlog工具的基础上及时恢复数据的位置或点
使用mysqlbinlog工具的基础上及时恢复的位置或点 MySQL备份一般采取完全备份的形式加日志备份.让我们运行一个完整备份,每天.每小时运行二进制日志备份. 这样在MySQL Server故障后 ...
- 【转】Android 工程在4.0基础上混淆
Android现在对安全方面要求比较高了,我今天要做的对apk进行混淆,用所有的第三方工具都不能反编译,作者的知识产权得到保障了,是不是碉堡了. 一,首先说明我这是在4.0基础上进行的. 先看 ...
随机推荐
- PC端网页特效
元素偏移量offset系列 offset翻译过来就是偏移量,我们使用offset系列相关属性可以动态的得到该元素的位置(偏移),大小等 获得元素距离带有定位父元素的位置 获得元素自身的大小(宽度高度) ...
- dotnet core 获取 MacAddress 地址方法
本文告诉大家如何在 dotnet core 获取 Mac 地址 因为在 dotnetcore 是没有直接和硬件相关的,所以无法通过 WMI 的方法获取当前设备的 Mac 地址 但是在 dotnet c ...
- PowerShell 拿到最近的10个系统日志
我最近发现我的程序总是调用一些不清真的代码,于是在运行的时候就退出了,我想要拿到系统的日志知道我的程序是怎么退出的,我如何通过 PowerShell 拿到最近的10个系统日志.为什么需要拿到最新10个 ...
- ZOJ Problem Set - 1090——The Circumference of the Circle
ZOJ Problem Set - 1090 The Circumference of the Circle Time Limit: 2 Seconds Memory Limit: 65 ...
- MBean 描述符
简介 Tomcat 使用 JMX MBean 来实现自身的性能管理. 每个包里的 mbeans-descriptor.xml 是针对 Catalina 的 JMX MBean 描述. 为了避免出现 “ ...
- hibernate映射-继承映射
对于面向对象的程序设计语言而言,继承和多态是两个最基本的概念.Hibernate的继承映射可以理解成持久化类之间的继承关系.例如:人和学生之间的关系.学生继承人,可以认为学生是一个特殊的人,如果对人进 ...
- Spring+dubbo错误(一)
10-21 20:51:39.593 ERROR [ContextLoader.java:351] Context initialization failed org.springframework. ...
- visio基础
右下角是一个切换文件的按钮 也可以用ctrl+tab键进行切换 页面底部左边是一个页面的增加与切换的几个按钮 这是切换页面不是切换文件 右上角这个按钮是一个功能隐藏的按钮 左上角这个按钮可以自定义快速 ...
- 014 Ceph管理和自定义CRUSHMAP
一.概念 1.1 Ceph集群写操作流程 client首先访问ceph monitor获取cluster map的一个副本,知晓集群的状态和配置 数据被转化为一个或多个对象,每个对象都具有对象名称和存 ...
- 根据设备id自动打开本设备的串口
对于串口设备经常遇到重新拔插串口设备时候,程序又需要重新选择串口打开.对此很少麻烦的要死. 现在我们可以根据该设备的id去遍历串口设备,一旦符合就打开此串口即可. public void init() ...