Revit二次开发高级技术
叶雄进-橄榄山
中国Revit二次开发技术推动者和l领军者
展开
-
访问实体的几何数据时,抛出 SEHException错误(只有Release版出现)
上周处理了一个有趣的问题,与垃圾回收机制有关。当获取Revit中对象的几何信息,在一个函数来获得构件的Solid。然后在Caller中对solid包含的面进行遍历访问。加载运行编译的debug版时,没有问题,当用Release版时,出现SEHExpection异常。 --AccessViolationException - Attempted to read or write protected memory. This is often an indication that other原创 2011-02-21 13:55:00 · 2650 阅读 · 0 评论 -
Revit里模型动态更新DMU的用法
许多时候,开发者希望Revit有这样的功能。当用户对模型进行修改后,二次开发的程序能够相应用户的修改,对模型作出一些相应的修改操作。例如,一些墙上的窗户要求永远居中显示。当用户对这个墙做了长度修改,这个窗户还要自动的在墙的中心处。这就是一个比较容易理解的应用。这要求Revit具有感知用户所做的操作,并且能随后对模型作出修改。对于感知用户的操作或动作,Revit有两个办法,一个是用反应器,也就是事件原创 2013-01-09 15:19:05 · 7249 阅读 · 1 评论 -
如何编程发现钢筋的碰撞和相交
问题:现在在做一个钢筋冲突检测的功能,想判断当前项目中与指定钢筋发生冲突的对象的集合。 我查阅了API ,找到两个过滤器可用来判断相交,ElementIntersectsElementFilter和ElementIntersectsSolidFilter。但是这两个方法都不适用于钢筋对象,因为钢筋的Geometry属性无法返回solid对象。请问还有没有别的API可以实现钢筋的冲突检测?如果没有,原创 2013-03-19 12:06:20 · 7731 阅读 · 2 评论 -
Autodesk 首届中国开发者训练营于6月19-21在北京举行.
Autodesk今年6月在北京举行首届开发者训练营。Autodesk 的ADN团队每年都会举行一些培训,比如网上的产品和API新功能培训,教室培训以及一些DevTV讲座。 但是大家还是不满足我们于这些讲座。热切期望有一些更深入性的专题性讲座。把一些功能的API用法讲的更加深入透彻。基于这些需求,Autodesk今年在北京举行开发者训练营,在那里讲授分享开发专题技巧课程。我们特邀的开发主题讲座的讲员原创 2013-03-27 00:41:33 · 4228 阅读 · 11 评论 -
欧特克开发者训练营(Autodesk DevCamp 2013)的视频教程可以下载
Autodesk 2013 DevCamp China 2013年6月19-21日在京举行。该活动详情请看 http://blog.csdn.net/joexiongjin/article/details/9170205在该活动中的所有课程全部录制下来,可以到Autodesk AU China上去下载,下载列表如下。演讲人员来自Autodesk上海研究院的2为资深研发人员(刘培君,夏晓飞)和我本人原创 2013-08-21 16:35:52 · 5178 阅读 · 9 评论 -
Autodesk 2013 DevCamp China 2013年6月19-21日在京胜利举行
会议的议程和简介请看:www.autodesk.com.cn/adndevcamp看了这么多年国家和政府会议总结,使我很难脱离胜利这两个字来概括会议的结果。:) 习惯的力量太强大。事情也确实如此,这次在北京腾达大厦举行。腾达大厦最近感觉重新装修过似的,会议室的感觉比往年好多了。 :)首日大家都在一个大会议室,内容专注在云和移动开发。参会人数达100多人,会议室坐地满满的。AutoCAD 也走向云原创 2013-06-25 16:30:16 · 3587 阅读 · 5 评论 -
如何编程判别一个Revit族的主题对象是墙还是基于面?
族的“主体”参数,代码如下:family.get_Parameter(BuiltInParameter.FAMILY_HOSTING_BEHAVIOR).AsInteger(),它返回的是数值。请问返回的数值准确对应基于的主体吗?这些数值分别代码了什么?或者其他方法。谢谢!原创 2013-09-10 23:02:05 · 5444 阅读 · 2 评论 -
给Revit插件制作安装盘时,如何获取Revit的存放加载文件*.addin的目录
需求描述:在制作完插件后,我们需要制作安装盘。安装盘需要将加载文件***.addin 复制到Revit指定的目录。我们如何获取到这个目录呢?解决办法:Revit指定的存放addin文件的目录有两个,一个是对所有用户的,另一个是对当前用户的, 还有这个目录在不同的操作系统下是不同的。Windows XPC:\Documentsand Settings\All Users\Application Da原创 2013-10-10 15:56:40 · 6338 阅读 · 0 评论 -
如何用Revit API从无到有创建构建的类型对象?
绘制管道之前,必须有“管道类型”。默认模版是没有这一项的,点击REVIT命令,绘制管道, 软件会自动生成 族-管道-管道类型。 请问,不点命令,如何用程序自动生成管道类型? 答:我们可以用ElementType.Duplicagte 来创建一个已有类型的拷贝。当然这个方法对于你来讲是没有帮助的。所以在Revit2012 以及之前的版本,你所需要的无法实现。在Revit 2014里面提供了跨文件的复原创 2013-10-09 15:57:11 · 3768 阅读 · 0 评论 -
Revit编程修改板的边界(含完整源代码)
我在ADN AEC英文博客中发表了一篇文章用于修改板的边界。Revit没有直接提供API来修改板的边界。发现了这个解决方案,先写了英文版的。这里就不翻译,直接贴过来。原帖地址:http://adndevblog.typepad.com/aec/2013/10/change-the-boundary-of-floorsslabs.htmlChange the boundary of floors/s原创 2013-10-10 18:18:42 · 8195 阅读 · 4 评论 -
Revit2014 支持编程创建管道并且立即赋予系统类型名称
在Revit2013里面,当我们用NewPipe创建完成一个管道后,若这个管断是独立的没有与其它已经具有系统类型的管道或终端设备连接,这个管段的系统类型属性是没有定义的。通过编程也无法赋予系统类型。 这个问题已经办法我已经写过一个博文:http://blog.csdn.net/JoeXiongjin/article/details/8133749在Revit 2014里面,Pipe类提供了Crea原创 2013-11-25 15:21:36 · 10120 阅读 · 0 评论 -
不通过硬盘中的族文件的方式来动态生成并加载一个族Document
关于编程加载族的问题我此前写过一些文章:Autodesk北京迁入绿色办公室。以及编程后台创建族,然后在模型文件中创建该族的实例编程加载族文件(Revit2012)Revit 2013里面用程序新建族然后加载到模型中Revit最近发生了一个变化,当用LoadFamily的这个重载形式时,无需当前主文档打开事务。 有一个共同点,那就是被加载的族文档是这个函数的CallerLoadFamily(Docu原创 2014-03-04 11:30:59 · 2774 阅读 · 4 评论 -
即将到来的Autodesk 主要产品2015版 产品和API新功能在线培训(免费)
一年一度的Autodesk主要产品和API在线原创 2014-05-09 15:58:58 · 2976 阅读 · 0 评论 -
捕获参数修改事件从而修改Revit其它模型
我们收到中南市政院(Central & Southern China Municipal)的张辛平的原创 2014-04-25 15:19:23 · 3250 阅读 · 0 评论 -
为Revit的造型能力正名. Revit 二次曲面造型能力的实现. 二次曲面幕墙的实现
这是我第一次写非开发类的Revit技术文章.原创 2014-08-23 18:44:19 · 18237 阅读 · 1 评论 -
用API能否修改Revit链接模型
一直由一个疑问,可否原创 2014-08-13 15:40:53 · 8282 阅读 · 14 评论 -
读取Revit构件的材质
最近在公司正在做一个关于Revit模型展示的工具,需要获取Revit模型信息,然后在自己的3d控件中显示。通过学习,已经可以获取模型的Face,得到Mesh,进而得到三角网格和顶点数组等信息了,所以模型的样子已经可以在自制的控件中显示了,但是现在一直卡在怎么获取模型的颜色或材质上。 之前用的是得到FamilyInstance的MaterialID,但得到的是个ID列表,里面是这个原创 2014-10-16 21:03:38 · 9448 阅读 · 2 评论 -
如何编程创建Revit里面的视图过滤器对象
通过Revit界面“视图或View”命令选项卡下的“过滤器或Filters”, 用户可以创建自己的过滤器对象。这样你可以为你的过滤器结果设置不同的显示样式和特征。通过Revit 的API同样可以实现编程创建视图过滤器。下面这些代码演示了如何创建一个柱子类型的视图过滤器(给定柱子的名称)。从这里可以了解创建的过程和需要调用的函数。注意: 这里给类型名称的内置参数是:ALL_MODEL_TYPE_NA原创 2013-01-04 12:35:51 · 8656 阅读 · 1 评论 -
Revit二次开发是否支持多线程?
采用多线程可以提高效率,充分使用系统资源。很多朋友咨询Revit是否支持多线程? 这里简要说明如下:Revit不允许在多线程中都对Revit的模型进行操作和修改。如果你在其它线程只是读取Revit的模型,并没有启动事务(Transaction), 这个操作应该是安全的。如果你只是在其它线程做一些与Revit API无关的操作,那是允许的。转载请复制以下信息:原文链接: http://blog.cs原创 2012-11-16 11:31:27 · 4436 阅读 · 1 评论 -
编程修改group内对象
当对象组织到一个组(Group)内,对象就不允许修改,原因是他们已经在组的立面。有一个解决方案可以修改组内对象。基本思想就是先炸开这个组,获得组内的所有对象,已被后用。然后这些对象就是不在组内了。这时候可以用一般的修改对象的方法来修改这些对象。结束后,可以用创建新组的方法把这些对象重新组织到组内。因为Revit为提示一些警告,为了避免这个警告,可以使用事务的方式避免警告。下面例子演示了上面说的方法。原创 2011-04-14 14:49:00 · 2049 阅读 · 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 · 1962 阅读 · 0 评论 -
如何得到在指定视图下沿折线或曲线的展开剖面
用Revit产品的生成剖面功能,我们可以指定一个直线的剖切位置。然后选在这个剖先,在上下文菜单中,使用"Split Segment" 命令可以把剖切线分成多段(每段是平行的)来生成平行折线剖面。但是如果想生成剖切线不是平行的折线剖面,Revit还未没有提供这个功能。替代办法是原创 2011-09-20 01:54:24 · 9018 阅读 · 2 评论 -
如何在64位操作系统里让Revit的命令连接Access数据库?
在Revit的外部命令里打开一个数据库连接,使用了下面的代码。public class RevitCommand : IExternalCommand{ public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements) { UIA原创 2011-11-21 18:12:13 · 5471 阅读 · 2 评论 -
64 位操作系统下, Revit 如何修改代码后再次快速调试新代码
Visual Studio (简称VS)提供了暂时中断调试,然后修改代码,接着更新代码就可以实现继续调试运行的功能。但是这个再调试过程中暂时中断修改代码的功能在64位操作系统下无法实现。 这个问题导致64-位上对Revit的二次开发程序的代码修改变的比较麻烦。特别是程序开发过程中,需要反复,就显得更痛苦。这里我介绍一个办法,能大大减少痛苦,大幅提高工作效率。 :) 通常思路是先退出调试原创 2012-01-12 18:20:28 · 6124 阅读 · 7 评论 -
如果某一个对象没有提供创建函数,或创建函数无法达到期望的效果,如果创建新的这个类型的对象?
转载请复制以下信息: 原文链接: http://blog.csdn.net/joexiongjin/article/details/7399889作者: 叶雄进 出处: 我爱Revit-应用与二次开发专栏2012.3.27 Revit 已经提供了许多函数来创建新可以保存在文档中的元素,在Autodesk.Revit.Creation.Document 这个类的原创 2012-03-27 17:55:26 · 2426 阅读 · 1 评论 -
编程打断拆分构件
转载请复制以下信息: 原文链接: http://blog.csdn.net/joexiongjin/article/details/7353104作者: 叶雄进 2012.3.14 近一段时间经常受到关于构件打断差分的问题咨询。自这里写一个解决方案。方便大家快速获取。 截止Revit 2012,Revit没有提供打断对象的API。 所以只能使用替代 办法来实现。原创 2012-03-14 15:29:33 · 5077 阅读 · 3 评论 -
如何编程创建斜墙?
转载须复制以下信息: 原文链接: http://blog.csdn.net/joexiongjin/article/details/7564714作者: 叶雄进 , Autodesk ADN2012.5.14 叶老师:您好!以前看过您的一篇文章讲斜墙创建使用FaceWall.Create方法,但是没有细讲,我现在想尝试使用此方法创造斜墙,但是Reference f原创 2012-05-14 14:09:39 · 4923 阅读 · 0 评论 -
可否编程对链接模型进行修改或选择链接模型中的对象?
转载请复制以下信息: 原文链接: http://blog.csdn.net/joexiongjin/article/details/7542096作者: 叶雄进 , Autodesk, ADN2012.5.7 最近经常接到这样的问题咨询,可否编程实现对链接进来的模型文件进行修改?1. 比如建筑模型需要导入到Revit MEP中,在MEP里布置完管道后,希望在建筑的墙上原创 2012-05-07 15:52:19 · 3379 阅读 · 0 评论 -
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 · 2418 阅读 · 0 评论 -
如果获取Revit.ini文件在目标机器上的位置
原文链接: http://blog.csdn.net/joexiongjin/article/details/7699790作者: 叶雄进 , Autodesk ADN 问题:revit2008-revit2010中的二次开发要修改配置文件revit.ini,请问怎么确定它的位置? 答: 这个文件存储在Revit安装目录下。你可以通过注册表获得Revit的安装路径原创 2012-06-28 16:19:12 · 5421 阅读 · 0 评论 -
了解Revit扩展存储数据(Extensible Storage)
转载请复制以下信息:原文链接: http://blog.csdn.net/joexiongjin/article/details/7776552作者: 叶雄进 , Autodesk ADN从Revit2012开始引入了扩展存储这个新技术,就是可以把一些数据存储到Revit中的某一个对象上。扩展数据只能通过编程的方式添加到对象上,通过Revit软件的界面无法添加。这是编程的原创 2012-07-23 18:45:42 · 7646 阅读 · 0 评论 -
非模态对话框与事务
问题:在非模态对话框中添加了一个按钮,点击按钮时会启动一个事务,请问我该如何判断Revit环境中是否有事务正在运行,如果有事务正在运行时,如何把按钮变的不可用这是一个有关Revit 2012的问题。答:在Revit2012中,在非模态对话框中启动事务,然后对模型进行修改这个方法是不安全的。 可能会出现莫名其妙的错误。我们建议使用Idling事件,在对话框的按钮事件中做一原创 2012-07-24 18:52:57 · 3629 阅读 · 2 评论 -
Autodesk北京迁入绿色办公室。以及编程后台创建族,然后在模型文件中创建该族的实例
转载请复制以下信息:原文链接: http://blog.csdn.net/joexiongjin/article/details/8098505作者: 叶雄进 , Autodesk ADN这段时间在准备AutoCAD2014版的API新功能学习,在Revit上投入的时间少些,这段时间博客也更新的较慢。从这周开始加大Revit方面的时间投入。12月份有Devdays @北京原创 2012-10-22 15:00:30 · 5740 阅读 · 0 评论 -
再谈Revit二次开发的可靠性和前景
接到一个问题咨询如下信息。Revit本身的开发规范吗?Revit发展前景如何?听说了一些Revit的身世,老担心它本身的代码就不规整、严谨,程序不够稳定,在这个平台上开始大规模二次开发有很大风险。公司在选BIM软件,准备在其上二次开发,我代公司请教下叶老师,求解惑,多谢哈!之前我写过一篇Revit二次开发的前景。感觉这个提问我想再说说Revit二次开发的可靠性和前景。Rev原创 2012-10-31 14:27:08 · 14720 阅读 · 4 评论 -
Revit启动后,如何把你的命令显示在Revit的Ribbon(工具栏)上?
在开发的过程中,大家经常用AddinManager来运行你的外部命令,这样的好处是程序的修改,运行,调试速度可以很快。我就此也写过一篇文章。当你开发结束后,希望你的客户直接在Revit启动后就可以点击工具栏中的你的命令按钮,直观地使用你开发的命令。这个过程需要一些环节来实现:大体两种解决方案:简单的解决方案高级的解决方案一. 简单方案:原创 2012-11-14 15:34:48 · 18934 阅读 · 6 评论 -
如何编程在Revit里创建长度小于0.8mm的线
Revit不知为何出有一个奇怪的规矩,那就是无法绘制长度小于 0.8mm的长度的线. (0.8mm等于 32分之一英寸). 导致很多小的短线无法绘制.在轻钢薄壁构件里,其厚度有的只有0.5, 有的是0.7, 均无法绘制. 这给Revit的工作带来一些局限性.这里有一个用编程的办法来绕弯路创建小于0.8mm, 其用法确实有点难以想到.首先我们创建一个长度放大100倍的长线. 然后给这个线添加尺寸约束原创 2014-12-18 13:50:27 · 10251 阅读 · 0 评论