Revit 二次开发中级技术
文章平均质量分 51
叶雄进-橄榄山
中国Revit二次开发技术推动者和l领军者
展开
-
第十二届Revit开发训练营4月4日~9日在武汉举办
北京橄榄山软件有限公司 [2021]1号 关于举办第十二届Revit开发实战训练课程的通知各相关单位: 为贯彻落实住建部《2016-2020年建筑业信息化发展纲要》,提升国内建筑行业BIM科研和课题创新能力,强化企业和高校在各个分领域创新思想和工具应用,实现智慧建造、更好的设计与建造的信息交流,提高工程建设行业工作效率,促进本单位在BIM时代用创新技术成为时代先锋。北京...原创 2021-03-25 16:10:01 · 1206 阅读 · 1 评论 -
从墙获取其上的窗户
<br />窗户和门都是FamilyInstance类的实例,FamilyInstance.Host返回它所在墙的Id。<br />所以可以通过遍历整个模型中的所有窗户,如果当前窗户的Host值和墙的Id相等,那么这个窗户就是我们要获得的。<br /><br />下面是代码示例(For Revit 2010,如需要请升级代码,需要改动些)。<br /><code_begin><br />//在执行本命令之前,请选择一堵墙,然后执行本命令<br />public class GetWallFromWindow原创 2011-02-17 14:41:00 · 3588 阅读 · 0 评论 -
Document.Delete()方法的妙用
Delete方法的妙用。从帮助文档我们知道,Revit的对象删除函数Delete() 可以返回出在删除目标对象的过程中删除了多少与这个对象相关的对象,这些对象可能是一些隐藏的参考平面,尺寸线等一起删除。 可以遍历返回结果来分析这些对象。这个方法给我们带来的一个极大的用处是用于寻找与目标对象有关联的对象。原创 2011-03-12 22:52:00 · 3273 阅读 · 0 评论 -
获取墙的长宽高
在一个Revit项目里面,如何读取这堵墙的详细信息(名字,长、宽、高等),并且修改它的信息 获取对象信息是Revit开发中最基本的步骤。从Revit获取对象信息有三种方式,一个从类的属性读取,另一个是读取对象的参数值,最后一种是读取墙的几何信息。 墙的名字可以通过Wall.Name 属性获取,墙的长度可以从墙的Location 属性间接获取,或者读取wall的 ”长度“ 参数的值。高度可以从墙的四个参数读取,公式:(墙的上部连接到的楼层高度+ 上部偏移原创 2011-02-22 15:26:00 · 9567 阅读 · 16 评论 -
澄清创建参考面函数参数含义
用API创建族的时候,常常用到创建参考面。可以用 Autodesk.Create.Document.FamilyCreate.NewReferencePlane()方法和NewReferencePlane2() 方法. 今天我们只谈第一个函数。因为它有一个向量参数的含义比较模糊)原创 2011-02-23 16:02:00 · 3629 阅读 · 0 评论 -
根据共享参数来过滤满足条件的对象(代码)
<br /> <br />我们经常会添加自己的参数到对象中,一个参数可以添加到多个类别的对象。2011提供的过滤功能可以用参数的值来进行过滤。<br />下面代码可以对自定义参数按照参数值进行过滤。<br /> <br /> <br /> <br />using System;using System.Collections.Generic;using System.Text;//using System.Windows.Forms;using Autodesk.Revit .DB;原创 2011-05-13 16:45:00 · 2071 阅读 · 0 评论 -
判断一个柱子是圆柱还是矩形柱的代码
下面这段代码用来判断柱子的形状。提取柱子的几何形状,看看所有的面,如果有一个面是CylinderFace,那么其就是圆形柱子。(本命令只适用与判断是矩形柱还是圆形柱)。可以看看如何访问对象的几何信息原创 2011-05-13 15:38:00 · 5316 阅读 · 0 评论 -
如何编程修改一个隶属于视图的对象颜色
一个说明文本或说明annotation 只属于某一个视图,不是模型的组成部分。通过编程的方式,我们可以修改其中指定的几个文字或其它对象的颜色,覆盖视图的现实设置。使用View.ProjColorOverrideByElement 属性修改对象的颜色。下面是VSTA代码,可以快速专程成VS代码原创 2011-03-31 14:25:00 · 2465 阅读 · 0 评论 -
编程添加墙的一层材料或楼板的一层材料
在Revit2012中提供了墙类型、楼板类型等类型中的层编辑和新建的功能。可以修改WallType,FloorType。。等中的层。下面是代码为选择的墙的类型创建了一个保温层,并添加到墙类型中。请看详细代码。原创 2011-04-02 15:51:00 · 3598 阅读 · 0 评论 -
获得本地语言的名称(参数,参数组,单位,参数类型等)
Revit的许多名称有一个内部名称,这个不同国家语言的版本中这个内部名称都是一样的。在Revit的各种不同语言的版本中,同一个内部名称具有不同的显示字符串。比如门的门的宽度这个参数,内部名称是 BuiltInParameter.FURNITURE_WIDTH, 英文本中,这个参数名称时Width,中文版中这个参数名称是 宽度。如果找到内部名称与实际显示名称的关系呢?从Revit的2011版开始,Revit API提供了LabelUtils类获取当地名称。请看下面类的函数原创 2011-04-11 15:58:00 · 2635 阅读 · 0 评论 -
正在预备Revit几何属性访问以及对象间关系的专题讲座
这段时间做了2次讲座,比较耗费时间。Revit讲座已经在下面一篇文章提到。下载链接已经放上去了。另一个讲座AutoCAD 2012 .NET API的介绍,找点介绍了Autoloader。大家对AutocAD编程有兴趣的可以下载观看。http://download.autodesk.com/media/adn/AutoCAD_2012_NET_API_Webcast.zip原创 2011-06-21 17:59:00 · 1970 阅读 · 0 评论 -
在revit中有类似autocad的 xdata 空间可以增加额外资料的地方吗?
在Revit2011和之前的版本中,可以通过Shared Parameter来保存客户额外的数据。请看Revit的帮助。SDK中的CreateShared例子演示了其用法。但是他有一个限制,就是只能想一个类别的对象添加数据,比如像墙添加一个共享参数,那么所有的墙都会有你添加的共享参数。不管你是否需要。到了REvit2012, 有一个非常强劲的功能就是Extensible Storage功能。使用这个API可以只对你需要的对象添加数据。比如只对模型中的几个墙添加数据。具体请参考Revit帮助文档。 SDK中E原创 2011-05-03 13:44:00 · 2238 阅读 · 0 评论 -
从一个项目中加载其中的一个族到另一个项目中(用API实现)
一个项目A中有族myFamiy,我想加载到另一个打开的项目B中,通过手工的方式可以实现。在A中把族另存为myFamily.rfa 文件,然后在B中加载族即可。如何通过编程在一个命令中实现?这个是可以用编程方式来实现。下面是主要步骤,两种方法原创 2011-05-09 10:09:00 · 6826 阅读 · 3 评论 -
Revit二次开发高级专题讲座:访问Revit模型中的几何数据以及对象间关系判断方法(点击下载)
各位朋友们,这段时间没有经常更新我的博客,抱歉!几何数据访问是编写Revit程序很重要的内容。从今年开始我会编写录制一些专题讲座来介绍Revit编程。正如我之前一篇博客所说,我在准备一个讲座。由于要设计内容,创建资料(PPT),例子代码创建,已经讲座的准备工作原创 2011-07-12 13:27:23 · 5306 阅读 · 11 评论 -
如何编程创建线的样式(LineStyle)
从函数看,Revit没有直接提供方法来创建线的样式。LineStyle也没有提供Duplicate方法来复制新的样式。 我们可以通过创建一个新的线的子类别来创建一个新的线型。请看下面的代码。 [TransactionAttribute(Autodesk.Revit.Att原创 2011-10-19 11:09:31 · 3341 阅读 · 0 评论 -
Boundary的妙用(以设置文字的宽度为例)
不知大家注意到没有,在Revit视图中的文字的宽度在不同的视图比例下,同一个文字兑现给的TextNote.Width 属性值是变换的。这就给大家造成一个麻烦,那就是如何在不同的比例下,创建文字,且是文字编辑器的宽度刚好容纳下文字的宽度呢?文字是编程中大量使用的功能,所以这个应该对大家的工作有启发意义。Revit API提供了Element..Boundary(view)属性 用于获取在指定原创 2011-11-16 18:08:02 · 4252 阅读 · 1 评论 -
编程如何在墙上开圆形洞口
Revit 的自带功能以及API的功能都只能在墙上开矩形洞口。有许多的时候需要在墙上开圆形洞口。比如为暖气管道,开圆形洞口。那么有什么办法可以实现呢? 我们有一个变通的办法,就是在墙上插入一个圆形的Generic Model族实例,这个族只有一个Opening cut,放在墙上后,效果上讲与洞口一模一样,因为窗户本身并没有添加任何对象。 在Revit architecture自带族中就有一原创 2011-08-22 11:19:36 · 11304 阅读 · 11 评论 -
如何解决The following assembly name can not be resolved automatically 提示
运行Revit的二次开发命令,当用AddinManager加载后 出现一个错误对话框,上面写着The following assembly name can not be resolved automatically。类似如下: 需要按好多下Cancel或OK才能去掉这个提示,然后界面就能正常显示。特别浪费时间,搞的心情也很糟!如何去掉这个呢? 分析:从提示原创 2011-11-28 11:46:21 · 4500 阅读 · 0 评论 -
拷贝Revit中的对象的诀窍,顺论Revit中对象的拷贝
我以前有一篇文章讲到可以使用Duplicate() 方法在Revit中,如何编程创建新类型(如窗户或墙) 。 顺便说一句在以后Revit(> 2012)的类型对象复制中,慢慢从类型对象的类里面增加Create() 函数替代原来的Dupicate方法。这个方法只是局限于类型对象。Revit的对象种类很多,比如视图中可见对象,不可见的对象。如何从这些对象中拷贝创建新对象呢? 在Revit2原创 2012-01-21 15:58:16 · 9102 阅读 · 11 评论 -
我开发的LevelGenerator 一键创建多个楼层的插件发布了,公开源代码
我开发的一个Revit插件LevelGenerator 已经在Autodesk Labs上发布了。定义好楼层高度和命名规则后,一个按钮就把所定义的楼层加入到定义表中。点击“OK”就会把楼层插入到模型中。100个具有相同层高的楼层也就是几秒钟就可以创建成功。插件可以永远免费使用。这个插件是针对全球用户,考虑到不同的国家的单位设置。抱歉的是英文是界面,readme的步骤说明也是英文写的。层高单原创 2012-02-01 10:01:15 · 6155 阅读 · 7 评论 -
如何编程判断构件相交?
近日看到一个5d6d的关于Revit API的论坛 既不标识本博文章的链接,也没有说明作者就在其论坛内转载本博的文章,而且发帖人写的是论坛的管理员。 为了更好服务广大Revit API 爱好者,请该版主改正这种行为,在引用本博的帖子里至少补上本博每篇文章链接。这样本博对已有文章的修改和更新读者们有机会过来看看。如果尊重原创,请署上原作者。 应一朋友询问,写了如下的文章。 碰撞检查是原创 2012-02-21 17:26:06 · 5921 阅读 · 1 评论 -
如何编程读取墙的轮廓线
解决思路:Revit API没有直接提供接口读取墙的轮廓线。读取这个数据可以通过读取墙的几何信息(Geometry属性)获得代表这个墙的Solid,然后从这个solid中遍历solid中的所以后面找到墙的侧面(应该有两个),(判断依据是根据侧面的法向量与Wall.Orientation 向量平行) 这个方法从Revit2012(不含2012)之前的版本可以用。在Revit2012中提供了一原创 2012-02-20 11:05:56 · 8281 阅读 · 17 评论 -
如果获取条形基础的基线?
转载请复制以下信息: 原文链接: http://blog.csdn.net/joexiongjin/article/details/7399989作者: 叶雄进 2012.3.27 一般情况下Revit条状对象的基线可以通过Location属性来获得,会返回一个LocationCurve的对象。然后从LocationCurve.Curve 得到基线的信息。 但是对于Rev原创 2012-03-27 18:19:07 · 4954 阅读 · 2 评论 -
创建视图样式对象
转载请复制以下信息:原文链接: http://blog.csdn.net/joexiongjin/article/details/7433087作者: 叶雄进 2012.4.6 有开发者问到如何创建视图样式对象。这篇文章与之前我写的对象创建技巧这篇文章使用的相同的技巧,使用类型对象的Duplicate() 方法。请参看如下链接。http://blog.csdn.原创 2012-04-06 17:15:56 · 4022 阅读 · 2 评论 -
Revit二次开发文章:怎样从CurveLoop中获取其中的边
转载请复制以下信息: 原文链接: http://blog.csdn.net/joexiongjin/article/details/7528247作者: 叶雄进 , Autodesk2012.5.2 问:在Revit2013 中,可以从下面这个API中获取墙轮廓线 CurveLoop数组,但是获取不到CurveLoop的边。 IList^ pCurveLoop原创 2012-05-02 15:37:21 · 4849 阅读 · 0 评论 -
编程获取墙的原始几何尺寸
转载请复制以下信息: 原文链接: http://blog.csdn.net/joexiongjin/article/details/7474247作者: 叶雄进 2012.4.18 在Revit里面,构件之间会有互相相交的关系,彼此会相切。也可以用Revit的命令功能(Join Geometry或Unjoin Geometry)来实现构件几何相切或解除相切。这样原创 2012-04-18 17:21:17 · 5644 阅读 · 5 评论 -
获取某墙上洞口的尺寸和位置
转载请复制以下信息:原文链接: http://write.blog.csdn.net/postedit/7620609作者: 叶雄进 , Autodesk ADN 问题:通过Document.Create.NewOpening(wall, xyz1, xyz2); 可在墙上开洞。假如下次执行同样的操作revit自身会报错,没有可剪切的墙体。请问:怎样判断那个位置已经开原创 2012-05-31 17:17:05 · 4250 阅读 · 1 评论 -
如何知道本机安装了哪几个Revit产品以及他们的版本?
转载请复制以下信息: 原文链接: http://blog.csdn.net/joexiongjin/article/details/7563893作者: 叶雄进 , Autodesk ADN2012.5.14 Revit产品在本机安装后,在注册表中留下的产品安装信息很少。这一点不同于其它的一些产品,把许多的信息放在注册表里存放,包括产品安装信息,产品的路径等。注册表这个东原创 2012-05-14 10:41:59 · 7055 阅读 · 0 评论 -
如何编程计算斜墙与水平面的夹角以及斜墙相关的话题
Revit 可以创建斜墙,方法是通过先创建一个体量,然后在体量的斜面上创建斜墙。具体步骤请参考帮助。如果用API来创建斜墙,可用FaceWall.Create() 方法。 那么我们怎样辨别是垂直墙还是斜墙呢? 方法是通过墙的类名称来判断。斜墙用FaceWall类来表达,一般垂直墙用Wall类表达。 一个开发者问到一个问题,如何求出斜墙与水平面的夹角呢?方法: 用几何数据Ge原创 2011-02-21 18:24:00 · 3469 阅读 · 0 评论 -
编程创建明细表(2013 新API用法)
转载请复制以下信息: 原文链接: http://blog.csdn.net/joexiongjin/article/details/7564984作者: 叶雄进 , Autodesk ADN2012.5.14 创建明细表是Revit2013的一个比较重要的API功能增强点。可以用来创建明细表,1。指定显示那个类别的对象;2. 可以定制一个表中有那些列,列的宽度。原创 2012-05-14 14:59:09 · 6999 阅读 · 3 评论 -
在墙表面创建开关插座
转载请复制以下信息:原文链接: http://write.blog.csdn.net/postedit/7623179作者: 叶雄进 , Autodesk ADN 问题:NewFamilyInstance Method (XYZ, FamilySymbol, XYZ, Element, StructuralType) 这个函数是否可以控制插入的FamilyInstanc原创 2012-06-01 13:37:20 · 3842 阅读 · 0 评论 -
编程创建填充区域
转载请复制以下信息:原文链接: http://write.blog.csdn.net/postedit/7631601作者: 叶雄进 , Autodesk ADN Revit 2013 API提供了一个新功能用FilledRegion.Create() 方法来创建填充区域。 函数的签名如下:public static FilledRegion Create( Docu原创 2012-06-04 18:09:13 · 4671 阅读 · 1 评论 -
获取一个视图中所有可见的对象
转载请复制以下信息:原文链接: http://blog.csdn.net/joexiongjin/article/details/7641140作者: 叶雄进 , Autodesk ADN 这个问题看似比较复杂,首先要考虑数据库中的对象时具有几何属性,另外还要判断是否在当前视图可见。 所幸的是Revit API提供了一个非常好的FilteredElementCollector原创 2012-06-07 11:05:15 · 4983 阅读 · 0 评论 -
如何创建新的Ribbon 页
转载请复制以下信息:原文链接: http://blog.csdn.net/joexiongjin/article/details/7646123作者: 叶雄进 , Autodesk ADN 问题:按照现在的API,做的插件似乎只能在在附加模块中出现,但是看到好多插件菜单都是在一级菜单中,而不在附加模块中。我想问问如何实现这样的设置? 答:Revit Ribbo原创 2012-06-08 18:22:50 · 3132 阅读 · 4 评论 -
不能通过API来创建Project Parameter
问:如何使用API在项目中添加项目参数?Revit操作界面如下: 在SDK中一个例子CreateShared 介绍了如何创建共享参数,不知道如何创建项目参数(Project Parameter)? 答:在项目文档(Project document)中,我们无法用API来创建Project Parameter。 用API只能创建共享参数。如果是在族文档(Fami原创 2012-06-17 22:53:09 · 2616 阅读 · 0 评论 -
编程修改某视图中某构件的线型,颜色和线宽
原文链接: http://blog.csdn.net/joexiongjin/article/details/7671755作者: 叶雄进 , Autodesk ADN 通过Revit 的VV快捷命令可以打开一个视图设置界面。在其中可以修改构件在当前视图下的颜色,线型,填充图案,填充图案颜色等。Revit开放了接口来支持编程实现修改投影面上对象的线框颜色,线型,线宽;以及剖切面上原创 2012-06-17 22:08:12 · 8187 阅读 · 1 评论 -
获取墙的一个侧面,并且将上的点坐标转换到XOY面在墙侧面上的坐标系
一个客户问在Revit 2011上如何获得一个墙的侧面,而且把侧面坐标转到XOY平面在墙面上的坐标系。 对于同一个墙(长宽高相同), 任意旋转墙至不同的角度,获取的坐标值是相同的。 我的一篇博客也提到Revit 2012 提供的HostObjUtils类的方法,可以用HostObjUtils.GetSideFaces() 来快速获取侧面。Revit 2011 没有提供HostObjUt原创 2012-06-18 16:15:10 · 3442 阅读 · 5 评论 -
编程获取Revit视图中的所有实例对象数量
转载请复制以下信息:原文链接: http://blog.csdn.net/joexiongjin/article/details/7678923作者: 叶雄进, Autodesk ADN 问题:现在需要获取视图中的所有实例对象,包括系统族的实例与用户自建族的实例。使用OfClass(typeof(FamilyInstance))过滤方法比较容易获取用户自建族的实例,但是视图中的原创 2012-06-20 10:36:26 · 6030 阅读 · 4 评论 -
Autodesk AEC 软件的二次开发夏令营资料下载 (包含Revit的几个讲座)
原文链接: http://blog.csdn.net/joexiongjin/article/details/7699941作者: 叶雄进 , Autodesk ADN每两年,在美国的Boston附近Autodesk会举办一个AEC行业软件的开发者夏令营。涵盖的产品包括:Revit,Civil 3D, MapGuide, 2012年新添了几个关于云的讲座。演讲者部分来是ADN的技原创 2012-06-28 16:42:13 · 2428 阅读 · 0 评论 -
Revit 项目文件的版本
原文链接: http://blog.csdn.net/joexiongjin/article/details/7728473作者: 叶雄进 , Autodesk ADN一个朋友问到revit文件有几个版本,分别对应哪些revit版本?revit2008 - ?revit2009 - ?revit2010 - ?revit2011 - ?原创 2012-07-09 11:48:37 · 6605 阅读 · 0 评论