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基础上进行的. 先看 ...
随机推荐
- TransactionDefinition接口中定义了七个事务传播行为
1.PROPAGATION_REQUIRED如果存在一个事务,则支持当前事务,如果没有事务则开启一个新的事务.使用spring声明式事务,spring使用AOP来支持声明式事务,会根据事务属性,自动在 ...
- hibernate 大对象类型的hibernate映射
在 Java 中, java.lang.String 可用于表示长字符串(长度超过 255), 字节数组 byte[] 可用于存放图片或文件的二进制数据. 此外, 在 JDBC API 中还提供了 j ...
- T-SQL代码搜索
SET ANSI_NULLS ON; SET ANSI_PADDING ON; SET ANSI_WARNINGS ON; SET CONCAT_NULL_YIELDS_NULL ON; SET NU ...
- 周志华《机器学习》高清电子书pdf分享
周志华<机器学习>高清电子书pdf下载地址 下载地址1:https://545c.com/file/20525574-415455837 下载地址2: https://pan.baidu. ...
- iptables限速
####限速 限制指定时间包的允许通过数量及并发数-m limit --limit n/{second/minute/hour}:指定时间内的请求速率"n"为速率,后面为时间分别为 ...
- 【转载】CSS filter:hue-rotate色调旋转滤镜实现按钮批量生产
文章转载自 张鑫旭-鑫空间-鑫生活 http://www.zhangxinxu.com/ 原文链接:https://www.zhangxinxu.com/wordpress/2018/11/css-f ...
- MSXM简单的使用
// xml.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <string> #include <at ...
- $loj530\ [LibreOJ\ \beta\ Round \#5]$ 最小倍数 数论
正解:数论 解题报告: 传送门$QwQ$! 不想做题,来水点儿简单点的$QwQ$. 一个显然的点在于可以直接对不同质因子分别算$n_{min}$最后取$max$. 这个正确性还是蛮显然的?因为只要有$ ...
- 如何选择API测试工具
没有最好,只有最合适. 如今,越来越多的公司正在向DevOps的方向左转,以实现持续集成和持续部署开发.这意味着我们的反馈需要比以往更快,以便确定我们的应用程序是否准备好交付.这就是API测试如此重要 ...
- 使用wordPress搭建个人博客
第一章:前期准备工作 现在比较流行的博客社区有博客园.开源中国.思否.掘金.CSDN.简书等等,平时可以在自己喜欢的社区分享交流相关专业知识.如果你想拥有一个自己的博客,下面就跟我一起了解一下,我 ...