![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
revit二次开发
黑夜de骑士
建筑信息化/智慧城市/数字孪生-资深研发
北京建筑设计院-数字化外聘专家
Autodesk开发联盟-行业个人开发代表
多家国企央企设计院-数字化专家
多家建筑信息化创业公司-技术顾问
展开
-
如何在不开启Revit的情况下读取Revit的数据,甚至修改数据
一、背景小伙伴们是否需要在不开启Revit的情况下读取Revit的数据呢?二、解决思路这里给大家推荐一个SDK,不止可以读取rvt数据,甚至可以读取rfa以及修改它们。地址:https://www.opendesign.com/cn/products/bimrv详细介绍三、注意事项1.大家好,我是黑夜の骑士,欢迎大家关注我的博客,笔者将持续输出建筑信息化开发相关知识;2.欢迎加入建筑信息化开发交流群,获取更多开发资料 群号:7118442163.欢迎关注微信公众号:工程人的编程课堂4.原创 2021-06-02 17:37:14 · 2827 阅读 · 2 评论 -
Revit模型转Gltf
一、背景小伙伴们是否有需要将Revit模型转为Gltf格式呢?二、解决思路骑士特意录制了一个视频来说明如何做https://www.bilibili.com/video/BV1z54y1V7Dh如果视频链接失效:在bilibili中搜索:Revit的Web之旅简介第一步:在Revit中使用IexportContext接口导出对应模型第二步:使用Google Draco 对Gltf进一步压缩我们可以看下轻量化后的模型在网页中展示的效果三、注意事项1.大家好,我是黑夜の骑士,欢迎大家关注我原创 2021-05-30 20:49:51 · 6523 阅读 · 1 评论 -
Revit模型轻量化方法
一、背景小伙伴们在做Revit二次开发时,是否有模型轻量化的需求呢?二、解决思路骑士特意录制了一个视频来说明如何做https://www.bilibili.com/video/BV1z54y1V7Dh如果视频链接失效:在bilibili中搜索:Revit的Web之旅简介第一步:在Revit中使用IexportContext接口导出对应模型第二步:使用Google Draco 压缩算法即可我们可以看下效果三、注意事项1.大家好,我是黑夜の骑士,欢迎大家关注我的博客,笔者将持续输出建筑信息原创 2021-05-30 20:45:11 · 6456 阅读 · 0 评论 -
Revit模型如何在网页上显示
一、背景小伙伴们在做Revit二次开发时,是否需要把Revit模型放到网页上去显示呢?二、解决方案为了帮助大家解决这个问题,骑士专门出了一个教学视频,链接如下:https://www.bilibili.com/video/BV1vq4y177r6如果链接失效,就在B站搜索:Revit的Web之旅三、注意事项1.大家好,我是黑夜の骑士,欢迎大家关注我的博客,笔者将持续输出建筑信息化开发相关知识;2.欢迎加入建筑信息化开发交流群,获取更多开发资料 群号:7118442163.欢迎关注微信公众号原创 2021-05-10 22:48:22 · 3648 阅读 · 5 评论 -
Revit二次开发之获取当前电脑所有Revit版本
一、背景小伙伴们在做Revit插件安装包时,是否需要获取当前电脑已经安装了哪些版本的Revit呢?二、解决思路主要有两种思路通过注册表通过revit提供的方式这里推荐第2种方式,因为这种方式很简单,容易上手第一步:引入Revit安装目录下的RevitAddInUtility.dll文件,这个文件的使用,不需要再Revit环境下。第二步:编写代码开始查找当前电脑安装的revit版本,这里我们用一个控制台程序举例。using Autodesk.RevitAddIns;using Syst原创 2020-11-28 11:50:12 · 1277 阅读 · 0 评论 -
Revit二次开发之族库管理系统
一、背景很多小伙伴都想制作族库管理系统,但又不知从何下手,这里骑士给大家分享一下骑士做的族库管理系统,以及用到的一些技术点吧。感兴趣可以加入Q群711844216,有完整的族库开发教学。二、技术点1.族图片显示,这里推荐使用不打开族文件,直接本地读取的方式2.载入到revit中,这里推荐使用外部事件+放置事件3.wpf分页技术4.wpf展示框动态放大缩小技术5.wpf查找功能三、注意事项1.大家好,我是黑夜の骑士,欢迎大家关注我的博客,笔者将持续输出BIM相关软件开发、移动互联网开发以及原创 2020-11-21 21:50:07 · 3464 阅读 · 0 评论 -
Revit二次开发之扩展存储的使用
一、背景小伙伴们在做Revit二次开发时,是否需要扩展存储呢?这里骑士给大家介绍三种使用方式,一个是依赖某个构件存储单个属性,一个是依赖某个构件存储文件,还有一个是不依赖于构件直接进行存储。二、实现思路2.1依赖构件单个属性存储这里的例子,可以基于一个墙,添加一个额外的字符串信息 [Transaction(TransactionMode.Manual)] public class StoreSingle: IExternalCommand { Guid guid原创 2020-09-29 17:47:00 · 2408 阅读 · 0 评论 -
Revit二开之“线太短”解决方案
一、背景小伙伴们在revit中通过族放置实例时,会不会遇到以下错误呢?族 "xxx" 中出现错误但已自动解决,可能需要族创建者审阅。错误信息:"线太短。"错误解决方法: 删除图元二、解决思路1.这种时候,很有可能是给族实例赋值的时候,某个参数取值为0,或者很小。2.如果大家报这个错误不是因为参数值取0引起的,可以参考官方的这篇文章,进一步排查原因https://knowledge.autodesk.com/zh-hans/support/revit-products/troublesho原创 2020-05-14 17:21:35 · 4539 阅读 · 0 评论 -
revit二次开发之插件安装包制作
一、背景小伙伴们在revit二次开发时,会需要将自己做的插件进行打包,那么如何实现呢?二、思路笔者为此录制了一个教学视频,通俗易懂,大家直接看就行了地址:https://www.bilibili.com/video/av81051210如果链接失效,直接在b站搜索:面向工程人员的Revit二次开发11_插件安装包的制作三、注意事项1.我是黑夜の骑士,欢迎大家关注我的博客,笔者将持...原创 2020-01-27 15:58:26 · 2480 阅读 · 1 评论 -
revit二次开发之数据库的使用
一、背景小伙伴们在revit二次开发时,可能会需要在wpf上展示revit模型,那么如何实现呢?二、思路笔者为此录制了一个教学视频,通俗易懂,大家直接看就行了地址:https://www.bilibili.com/video/av80975039如果链接失效,直接在b站搜索:面向工程人员的Revit二次开发10_数据库的交互三、注意事项1.我是黑夜の骑士,欢迎大家关注我的博客,笔...原创 2019-12-28 23:37:24 · 2121 阅读 · 0 评论 -
revit二次开发之在wpf上展示revit模型
一、背景小伙伴们在revit二次开发时,可能会需要在wpf上展示revit模型,那么如何实现呢?二、思路笔者为此录制了一个教学视频,通俗易懂,大家直接看就行了地址:https://www.bilibili.com/video/av80069636如果链接失效,直接在b站搜索:面向工程人员的Revit二次开发09_WPF的使用三、注意事项1.我是黑夜の骑士,欢迎大家关注我的博客,笔...原创 2019-12-21 14:54:31 · 2411 阅读 · 0 评论 -
revit二次开发之外部事件的使用
一、背景小伙伴们在revit二次开发时,为了让UI交互更好,会用到外部事件,那么外部事件是什么,以及如何使用呢?二、思路笔者为此录制了一个教学视频,通俗易懂,大家直接看就行了地址:https://www.bilibili.com/video/av80069636如果链接失效,直接在b站搜索:面向工程人员的Revit二次开发09_WPF的使用三、注意事项1.我是黑夜の骑士,欢迎大家...原创 2019-12-21 14:53:05 · 1888 阅读 · 0 评论 -
revit二次开发之过滤器的使用
一、背景小伙伴们在revit二次开发时,会用到过滤器,那么如何使用呢?二、思路笔者为此录制了一个教学视频,通俗易懂,大家直接看就行了地址:https://www.bilibili.com/video/av76737247/如果链接失效,直接在b站搜索:面向工程人员的Revit二次开发06_Revit二次开发之过滤器的使用三、注意事项1.我是黑夜の骑士,欢迎大家关注我的博客,笔者将...原创 2019-12-21 14:40:29 · 2611 阅读 · 0 评论 -
revit二次开发之界面按钮(UIRibbon)实现
一、背景小伙伴们在进行revit二次开发时,可能需要在菜单栏上添加按钮,那么如何实现呢?二、思路笔者为此录制了一个教学视频,通俗易懂,大家直接看就行了地址:https://www.bilibili.com/video/av79481899/如果链接失效,直接在b站搜索:面向工程人员的Revit二次开发08_UIRibbon的使用三、注意事项1.我是黑夜の骑士,欢迎大家关注我的博客...原创 2019-12-21 14:36:57 · 3002 阅读 · 0 评论 -
revit二次开发之开发环境配置
一、背景刚入门revit二次开发的小伙伴遇到的第一个问题可能就是配置revit二次开发环境,如何解决这个问题呢?二、思路笔者为此录制了一个教学视频,通俗易懂,大家直接看就行了地址:https://www.bilibili.com/video/av75187399如果链接失效,直接在b站搜索:面向工程人员的Revit二次开发05_Revit二次开发环境的配置三、注意事项1.我是黑夜...原创 2019-12-21 14:30:56 · 1402 阅读 · 0 评论 -
revit二次开发之教学视频
一、背景刚入门revit二次开发的小伙伴,很多是零基础的工程人员,为了解决这个问题,博主做了revit二次开发的一系列教学视频(包括C#基础与revit二次开发两个模块),来帮助大家更好的入门。二、章节1.面向工程人员的Revit二次开发01_Vs的认识与使用2.面向工程人员的Revit二次开发02_csharp的学习(上)3.面向工程人员的Revit二次开发03_csharp的学习(中...原创 2019-12-03 13:02:40 · 1497 阅读 · 0 评论 -
revit二开之过滤族(Family)
一、背景小伙伴们在做revit二开时,可能会有过滤族(Family)的需求,如何实现呢?二、方法通过以下代码,就可以过滤出指定FamilyName的族了。var famType = new FilteredElementCollector(m_doc) .OfClass(typeof(Family)) .FirstOrDefault(x => x.Name == "Famil...原创 2019-11-21 18:31:00 · 2498 阅读 · 0 评论 -
revit二开之stackoverflow异常
一、背景最近在revit二开时,程序出错,revit直接关闭。为了捕捉错误,通过调试,还没有到断点处,就报错了,发现错误信息是stackoverflow,心里想挺有意思的,居然碰上这个错误了。二、解决思路通过观察发现原来是在程序中批量替换时,导致一个函数出现了无限递归的情况,才有了上述revit直接关闭,断点进不去的现象。所以小伙伴们在开发时,如果出现stackoverflow,可以考虑是不...原创 2019-10-18 16:46:40 · 379 阅读 · 0 评论 -
revit二开之关联族参数的实现
一、背景小伙伴们在revit二次开发时,可能需要将子族的参数关联到其所在的嵌套族,那么如何实现呢?二、思路先明白三件事:1.子族在嵌套族中是以FamilyInstance的状态存在的2.关联这件事要发生在当前嵌套族文档中3.关联的函数是:AssociateElementParameterToFamilyParameter(Parameter elementParameter,,Fa...原创 2019-09-20 13:52:21 · 3072 阅读 · 0 评论 -
如何在Dynamo(PythonScript中导入第三方模块)
一、背景小伙伴们在使用dynamo中的PythonScript节点时,为了丰富PythonScript节点的功能,那么就需要引入第三方模块。首先,我们得明白,PythonScirpt节点是基于IronPython的,因此模块的导入方式与python是不一样的。本文就介绍如何在IronPython中导入第三方模块。二、思路首先,这种模块必须是支持IronPython,而不是只支持Python...原创 2019-06-16 14:47:57 · 3416 阅读 · 2 评论 -
Revit连接Mysql数据库
背景小伙伴们在做revit二次开发时,可能会需要用到数据库。本文将介绍Revit如何连接Mysql数据库,其兄弟篇将介绍Revit如何连接Access数据库https://blog.csdn.net/birdfly2015/article/details/87922798如何连接Access数据库思路主要有两种方法:1. OleDbDataAdapter方式:填入Datatable中,...原创 2019-02-25 19:54:11 · 4416 阅读 · 2 评论 -
revit二开之获取嵌套族中的子族(过滤族)
一、背景小伙伴们在进行revit开发时,可能有过滤族的需求。这里的族(Family)不是族类型(FamilySymbol)也不是族实例(FamilyInstance),那么如何过滤呢?二、思路不管是在项目环境中,或者嵌套族环境中,使用以下代码即可//推荐FilteredElementCollector collector = new FilteredElementCollector(do...原创 2019-09-20 13:25:09 · 1833 阅读 · 0 评论 -
dynamo中如何通过节点读取cad图纸数据
欢迎加入BIM行业开发交流1群,获取开发资料 群号:711844216一、背景小伙伴们在使用dynamo时,可能需要读取Cad图纸内容,那么有没有什么比较好的方法呢?当然是有的!这里给小伙伴们推荐一个不错的节点包。二、思路在dynamo中搜索软件包“bimorph”然后按照 bimorph.com中的教程,进行使用即可。三、注意事项1.如果大家对如何在dynamo中使用python编...原创 2019-08-14 19:23:58 · 6914 阅读 · 0 评论 -
revit二次开发之多线程的正确使用
一、背景小伙伴们为了加快revit程序运行速度, 可能会考虑使用多线程,但是我们必须首先搞清楚一个问题那就是能不能使用多线程,其次再是如何使用多线程。二、思路能否使用多线程?答案是肯定的,但是有前提条件,那就是我们多线程中的代码如果调用了revit的api,很可能就会让程序崩溃,更严格一点来说就是,多线程的代码不能修改Document文档中的内容(也就是不能开启Transaction)...原创 2019-08-08 13:20:49 · 3034 阅读 · 0 评论 -
revit二次开发之批量打开族文档,样板文件,项目文件
背景小伙伴们在做revit二次开发的时候,可能需要通过程序去打开指定的族文档,样板文件,或者项目文件。思路1.这三者其实都是一样的(参见代码中的注释1)2.为了对打开的文档进行操作,必须将Document 设置为打开的文档(参见注释2)3.如果对文档进行了修改,那么需要保存(参见注释3、4)4.如果需要关闭这个打开的文档(参见注释5)程序using System;using Sy...原创 2019-05-17 18:58:32 · 4037 阅读 · 4 评论 -
Revit二次开发之在族环境中获取当前族类型的材料名称
一、背景小伙伴们在做revit二次开发的时候,在族环境中,会发现使用 **FamilyType.AsValueString()**并不能获得材料参数的字符串表示,而是获得“null”,那么我们如何获取呢?二、思路通过Material.name获取三、代码//首先得到通过族参数的名称获得这个族参数FamilyParameter familyParameter = familyManage...原创 2019-05-24 19:21:48 · 1181 阅读 · 2 评论 -
Revit二开之报错A BuiltnParameter cannot be changed from instance to type or type to instance
背景A BuiltnParameter cannot be changed from instance to type or type to instance小伙伴们在revit二次开发,对族参数批量变为实例,或者类型时,可能遇到这个错误,什么原因呢?因为这个参数是revit族自带的参数,也就是内建参数(BuiltnParameter)。如下图的结构材质就是解决思路拿结构材质来说,因为...原创 2019-05-24 19:08:54 · 490 阅读 · 0 评论 -
如何在Revit中监听键盘事件
背景小伙伴们在做revit二次开发的时候,可能会需要在自己做的插件运行时,去监听某个按键然后做出相应的反应。比如在生成一个很大的模型时,发现不对劲,想停止程序运行,这个时候就可以通过监听按键事件去取消这个正在运行的程序,或者通过监听按键事件去触发特定事件。思路为了实现全局监听,这里使用了Hook技术,详见代码中的KeyboardHook类由于hook_KeyDown的返回类型是Void,...原创 2019-03-04 19:40:03 · 2332 阅读 · 6 评论 -
Revit连接Access数据库
背景小伙伴们在做revit二次开发时,可能会需要用到数据库。本文将介绍如何在Revit如何连接Access数据库,其兄弟篇将会介绍Revit如何连接Mysql数据库。思路主要有两种方法:1. OleDbDataAdapter方式:填入datatable中,遍历行列读取2. sqlCommand方式:通过Read()方法,while循环读取本文将会介绍OleDbDataAdapter方式...原创 2019-02-25 19:36:22 · 3744 阅读 · 0 评论 -
如何在Revit中引入WPF界面(通俗易懂)
背景小伙伴们在做revit二次开发时,为了丰富开发内容,会有引入界面的需求。作为窗体程序开发,基本上有Winform与WPF两种界面,笔者推荐使用WPF。理由如下:Winform Vs WPFWinform是上一代的界面技术,而WPF是较新的界面技术,在特效方面比Winform强很多Autodesk Revit团队推荐使用WPF好了,下面开始介绍如何在revit中引入WPF界面。方...原创 2019-02-22 18:37:33 · 6693 阅读 · 5 评论 -
dynamo中使用python代码资源合集
一、背景大家在用python对dynamo编程的时候,有两个问题。一个是python不熟悉,第二个是如何用python较好的使用revit的api。针对第一个问题笔者收集了一些适合零基础看的python教程,对于在dynamo中使用来说,不需要很深入的了解,了解python的基本语法就行了。针对第二个问题,推荐了国内外一些不错的网站,里面有很多在dynamo中使用python的例子,大家可以多研...原创 2019-01-03 20:38:10 · 13889 阅读 · 1 评论 -
如何在dynamo中使用Python编程
@TOC一、为什么要使用python?Dynamo的出现,是为了方便建筑师实现参数化编程,可是当用到一定的深度以后,会发现节点太多,管理起来不方便,有些功能用节点并不能实现。python作为一种灵活的编程脚本语言,可以实现节点功能以外,还能引入第三方函数,大大增加参数化设计的方便性。本文将介绍如何在python中引用dynamo dll。二、dynamo与dll文件的关系(反编译工具的使用)...原创 2018-12-17 21:52:05 · 13329 阅读 · 1 评论 -
revit二次开发之族的类型参数与实例参数的转换
1背景小伙伴在做revit二次开发的时候,可能需要在族环境中将族的类型参数与实例参数相互转换。2思路1.使用族管理器FamilyManager,参见注释12.首先获取需要转换的参数(单个与批量),参见注释2,33.实例参数转类型参数,或者类型参数转实例转实例参数,参见注释4,53代码using System;using System.Collections.Generic;usi...原创 2019-05-17 19:16:09 · 3755 阅读 · 2 评论 -
revit二次开发之在族环境中获得所有族类型以及对其操作
一.背景小伙伴们在revit二次开发时,可能需要在族环境中获得所有的族类型,然后对其一波操作二.思路1.打开族文件.参看注释12.使用族管理器FamilyManager,参看注释23.获得此族所有的族类型FamilyTypeSet,参看注释34.操作所有族类型或者某个族类型的方法,参看注释4、55.保存,关闭此族文档,参看注释6、7三.代码using System;using ...原创 2019-05-17 19:51:13 · 5680 阅读 · 1 评论 -
如何在dynamo(Pythonscript)中使用矩阵运算(numpy的替代方法)
一、背景有个小伙伴想在dynamo中使用矩阵运算,翻译过来就是如何在Ironpython中使用矩阵运算。这里给小伙伴们讲下python与Ironpython的区别python:类似普通话,我们目前见到的python版本,基本上都是这个(比如现在很火的机器学习),通常会使用numpy库来完成矩阵运算Ironpython:类似方言,在.net平台上的python版本,由于支持Ironpytho...原创 2019-05-27 17:28:14 · 1784 阅读 · 6 评论 -
revit二次开发之程序调试
一、背景小伙伴们在revit二次开发时,需要对程序进行调试,小伙伴经常会出现以下问题打了断点,但是程序不经过那儿即使打了断点,程序也照常运行…其实出现这些问题,就是调试没有设置好。这里骑士小哥,手把手教小伙伴设置调试环境。二、基操第一步:设置断点,选中程序中的某行,然后按F9,并且重新编译程序。第二步:首先在vs的工具下面打开工具,然后选择选项第二步:在调试中打开常规,并...原创 2019-07-12 16:49:42 · 3900 阅读 · 0 评论 -
revit二开之报错不提示错误在哪行
一、背景小伙伴们在revit二次开发中,会发现程序报错,但是不提示在哪行,怎么也找不到出错的地方,这个时候,小伙伴就需要使出终极必杀了。二、绝招重启revit,这个时候代码没问题,而程序不能正常运行,那很可能就是revit自身的bug了,所以重启一下,很有可能程序就正常运行了。三、注意事项1.其实这个问题很可能是在程序中使用了大量的静态方法照成的;2.大家好,我是黑夜の骑士,欢迎大家关...原创 2019-07-12 17:22:49 · 649 阅读 · 2 评论 -
Revit二次开发之Could not load file or assembly
一、背景小伙伴们在做reivt二次开发时,如果引用了非Revit提供给我们的dll,可能会出现 "Could not load file or assembly xxx"的错误提示。那么如何解决呢?二、思路解决方案1.在vs的引用中,右键,选择其属性,然后将复制本地设置为True解决方案2,将引用的xxx.dll文件,放到revit自身的dll文件夹下,也就是RevitAPI.dll所...原创 2019-06-21 12:52:08 · 3007 阅读 · 2 评论 -
如何在Dynamo(PythonScript)中引用py文件(导入函数)
一、背景小伙伴们在dynamo中使用PythonScript时,可能有些代码可以复用,比如函数,我们就可以将其保存在py文件中,然后再不同的PythonScript中进行调用。二、思路+代码首先,我们看下情景我们在PythonScript中自定义一个函数加减的功能,然后使用它。# -*- coding: UTF-8 -*-import mathimport clr# 导入 Re...原创 2019-06-20 19:11:21 · 2688 阅读 · 1 评论 -
Revit元素与Dynamo元素之间的相互转换
一、背景小伙伴们在revit二次开发时,可能需要在C#中使用dynamo中的元素,或者在dynamo中使用Revit的元素。由于C#中对元素的数据定义与dynamo中Ironpython对元素数据定义存在一定的差异,所以就需要用到数据转换了。二、思路Revit元素,转dynamo元素,使用ToProtoType()方法dynamo元素,转Revit元素,使用ToRevitType()方法...原创 2019-06-16 13:56:39 · 3863 阅读 · 1 评论