Revit二次开发之创建风管
在Revit中,风管用于连接管件,风道末端和机械设备,今天简单尝试了下使用RevitAPI创建风管,现分享下我的方法。
风管从类型上可分为三类:一般风管,软风管和风管占位符;从形状上也分为三类:椭圆管,方管和圆管。
风管的属性和方法
风管的父类MEPCurve有三个属性,如下图:

而风管本身也有两个属性,分别是DuctType和IsPlaceholder ,前者是获取管道的类型,后者为判断是否是管道占位符。
小提示:使用
Duct.Location属性,将它转型成LoactionCurve,再通过LoactionCurve.Curve属性即可获得管道对应的位置曲线。
创建一般风管
创建风管的函数
需要调用RevitAPI函数Duct.Create(Document document,ElementId systemTypeId,ElementId ductTypeId,ElementId levelId,XYZ firstPoint,XYZ secondPoint),该参数含义如下图所示:

创建一般的矩形风管
public static Duct CteDct(Document doc)
{
ElementId systemTypeId, ductTypeId, levelId;
systemTypeId = ductTypeId = levelId = ElementId.InvalidElementId;
//获取标高ID
var levelFilter = new ElementClassFilter(typeof(Level));
FilteredElementCollector levels = new FilteredElementCollector(doc);
levels = levels.WherePasses(levelFilter);
foreach (Level level in levels)
{
if (level.Name == "标高 1")
{
levelId = level.Id;
break;
}
}
if (levelId == ElementId.InvalidElementId)
{ throw new Exception("无法标高"); }
//获取类型为SupplyAir的系统类型
var systemTypeFilter = new ElementClassFilter(typeof(MEPSystemType));
FilteredElementCollector systemTypes = new FilteredElementCollector(doc);
systemTypes = systemTypes.WherePasses(systemTypeFilter);
List<MEPSystemType> systypes = new List<MEPSystemType>();
foreach (MEPSystemType element in systemTypes)
{
if (element.SystemClassification == MEPSystemClassification.SupplyAir)
{
systemTypeId = element.Id;
break;
}
}
if (systemTypeId == ElementId.InvalidElementId) { throw new Exception("无法找到系统类型"); }
//获取风管类型
var ductTypeFilter = new ElementClassFilter(typeof(DuctType));
FilteredElementCollector ductTypes = new FilteredElementCollector(doc);
var result = ductTypes.WherePasses(ductTypeFilter).ToList();
foreach (DuctType element in result)
{
ductTypeId = element.Id;
break;
}
//创建风管
using (Transaction trans = new Transaction(doc,"创建风管"))
{
trans.Start();
Duct duct = Duct.Create(doc, systemTypeId, ductTypeId, levelId, new XYZ(0, 10, 0), new XYZ(10, 0, 0));
trans.Commit();
return duct;
}
}
以上就是大体的Revit二次开发之创建风管方法和函数定义,希望能帮到有缘人,学无止境,大家加油。(我给出的代码是定义了一个静态方法,需要在函数入口处调用,需注意)
Revit二次开发之创建风管的更多相关文章
- Revit二次开发之绘制钢筋
第一次在博客园上写东西,也不知道该写些什么,我想就写点最近项目到遇到的问题吧. 最近在做一个小项目,具体需求大概是在一个revit模型中的对应的楼板位置绘制钢筋. 由于刚接触Revit二次开发,之前也 ...
- Revit二次开发初体验
最近换了下工作,由之前的互联网企业转入了BIM软件开发行列.具体原因不多说,作为一个程序员来说学习永无止境.下面来一个Hello World体验下Revit的二次开发 事前准备 VS Revit 20 ...
- revit二次开发wpf里button按钮无法实现事务
不能在revit提供的api外部使用事务,解决此方法, 1.把button里要实现的功能写到外部事件IExternalEventHandler中,注册外部事件,在button事件中.raise()使用 ...
- Revit二次开发 推荐
学习revit二次开发,建议还是先把revit熟悉一下,去建立一下模型,亲自感受一下是如何创建模型的流程,其中会遇到什么问题.这样在自己做二次开发的时候,一些问题自己就能提前想到,规避掉.我大概用了半 ...
- [Revit]Autodesk Revit 二次开发整理(资料、准备工作和环境搭建)
1 前言 Revit被Autodesk收购之后,整理和开放了一大部分API,供开发者实现自己的功能和程序,总体来说API的功能比较完善,毕竟市面上已经出现了各式各样的插件. 本人也是初学者,在Revi ...
- Revit二次开发——非模态窗口的事件处理
一.起因 自己在写revit二开时,有一个Winform窗体按钮点击事件需要 触发调用事务进行处理,结果出现“异常“Starting a transaction from an external ...
- Revit二次开发环境配置(Revit 2020 +Visual Studio 2019)
Revit二次开发环境搭建(Revit 2019+Visual Studio 2017)准备内容 Revit 2019开发环境的搭建,需要安装的内容如下: Revit 2019(主要的开发环境) Vi ...
- Revit二次开发-BIM模型导出
最近一个月一直在研究Revit二次开发-BIM模型的导出,在网上找了很多相关资料学习.下面简单介绍一下我最近做的这个BIM模型的导出功能. 开始尝试使用Revit2015的样例程序里提供的读取模型几何 ...
- revit二次开发之族的类型参数与实例参数的转换
1背景小伙伴在做revit二次开发的时候,可能需要在族环境中将族的类型参数与实例参数相互转换. 2思路1.使用族管理器FamilyManager,参见注释12.首先获取需要转换的参数(单个与批量),参 ...
随机推荐
- 羽夏看Win系统内核—— x64 番外篇
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...
- Maven项目报错:“No goals have been specified for this build”解决办法
clean install scf:run第一种解决办法:找到pom.xml文件,在<build>标签里面添加如下所示的代码即可.<defaultGoal> compile & ...
- 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
对. 因为equals()方法可以用开发者重写,hashCode()方法也可以由开发者来重写,因此它们是否相等并没有必然的关系. 如果对象要保存在HashSet或HashMap中,它们的equals( ...
- 如果一个 linux 新手想要知道当前系统支持的所有命令的列表,他需要怎么做?
使用命令 compgen -c,可以打印出所有支持的命令列表. [root@localhost ~]$ compgen -cl.lllswhichifthen elseelifficaseesacfo ...
- 什么是Spring的内部bean?
当一个bean仅被用作另一个bean的属性时,它能被声明为一个内部bean,为了定义inner bean,在Spring 的 基于XML的 配置元数据中,可以在 <property/>或 ...
- Java BlockingQueue是什么?
Java BlockingQueue是一个并发集合util包的一部分.BlockingQueue队列是一种支持操作,它等待元素变得可用时来检索,同样等待空间可用时来存储元素.
- java常用方法集合
1.获取当前日期 // 获取当前日期 public Date getDate(int num) { Calendar cal = new GregorianCalendar(); cal.setTim ...
- mac 修改环境变量bash_profile除了cd用不了其他命令,又关闭了终端
1.添加命令出错,会导致mac不能使用命令 2.打开终端再添加export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin 一条 3.可以使用命令, ...
- 详细描述一下 Elasticsearch 索引文档的过程?
协调节点默认使用文档 ID 参与计算(也支持通过 routing),以便为路由提供合适的分片. shard = hash(document_id) % (num_of_primary_shards) ...
- 在chrome浏览器英文环境下为什么上面现行代码不起作用?
因为后面的客户端区域会覆盖前面的用户区域所以上面现行代码不起作用