revit二次开发
文章平均质量分 55
niuge No.1
这个作者很懒,什么都没留下…
展开
-
游戏引擎Unity3D与BIM的结合
Unity版本:2019.4.16f1c1UnityGLTF项目地址:https://github.com/KhronosGroup/UnityGLTF1、首先需要在github上找到UnityGLTF项目,这个项目可以加载gltf。2、然后将rvt或者其他BIM模型转化成gltf文件(核心)。3、改造UnityGLTF项目,能够加载第二步导出来的bim模型。最终效果如下图:...原创 2020-12-24 09:42:22 · 4729 阅读 · 1 评论 -
Revit二次开发——不开启Dynamo使用Dynamo的类
软件环境:Revit2018 Dynamo1.2(其他待测试)1、引用的dll2、初始化Dynamo环境(这个必须在调用Dynamo类之前执行)开启Dynamo但是禁止弹出Dynamo对话框(参考链接:https://blog.csdn.net/weixin_44153630/article/details/108013243)示例代码:[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.Transact原创 2020-11-23 10:23:46 · 1863 阅读 · 8 评论 -
Revit二次开发——让窗口一直显示在Revit前面
共同精进Revit及编程开发技能兴趣群:660319009 在做开发的时候,经常会碰到这个问题,你把插件的窗口打开之后,然后运行其他软件,盖住Revit后,然后再打开Revit就会发现窗口不见了,感觉像死机一样。这个时候需要将窗口绑定到主窗口之上,也就是在view.ShowDialog()的时候,要加上两行代码: System.Windows.Interop.Windo原创 2017-12-21 13:33:06 · 4026 阅读 · 1 评论 -
Revit二次开发——从链接文件中选取指定元素
共同精进Revit及编程开发技能兴趣群:660319009 这里稍微讲一下怎么从链接文件中选取指定元素,这里以选取Space为例。 首先要另写一个Class。public class SelectionLinkFilter : ISelectionFilter { Document linkDoc = null; public bool AllowE原创 2017-12-08 13:31:39 · 3590 阅读 · 0 评论 -
Revit二次开发winform简单的标准模板以及wpf简单的标准模板
共同精进Revit及编程开发技能兴趣群:660319009 《Revit二次开发官方教程》里的代码适合练手以及功能测试,但是在实际开发中,这种代码肯定不符合开发公司的标准。 这里可以使用这个简单的标准模板,这个标准模板的主要参考revit的SDK的Samples案例以及我自己在公司开发的实践来写的。逻辑很简单,主程序类实例化窗口,一个类用来存储临时数据,然后就是主窗口。首先来看看winfo原创 2017-12-02 19:29:45 · 3511 阅读 · 0 评论 -
Revit二次开发——怎样在类中直接应用WPF窗口
共同精进Revit及编程开发技能兴趣群:660319009WPF是winform的升级版,在做Revit二次开发,用WPF界面来做会好看且方便快捷好多。那么怎么在Revit二次开发中用到WPF呢?这个也很简单。在类中,没办法直接添加WPF窗口,只能方便快捷的添加Winform窗口,所以winform常作为首选。在类中添加WPF窗口要修改一些东西:首先,在项目中添加用户控件(wpf)原创 2017-11-21 21:03:33 · 3420 阅读 · 2 评论 -
Dynamo中的Core对应着安装文件里的哪个dll文件
共同精进Revit及编程开发技能兴趣群:660319009 因为想在Python Script脚本中用到Mtah.Random()这个函数,直接用的时候,居然发现报错,然后就意识到肯定是哪个dll没引用进来。 经过反编译,最后发现是需要引用DSCoreNodes.dll这个文件。 直接放上dynamo的Python代码。 **对Revit二次开发和Dyanmo编程这块感兴趣请加qq群交...原创 2017-11-08 13:04:45 · 3343 阅读 · 0 评论 -
Revit中Dynamo编程——利用反编译工具读取Dynamo的ProtoGeometry.dll的代码
共同精进Revit及编程开发技能兴趣群:660319009 上一篇博客讲了怎么用反编译工具,这篇博客直接可以用在实战方面。我们知道Dynamo好用,其实原因是它里面封装了好多方法,免去我们重复的操作。而RevitAPI又没有那么多方法怎么办?这个时候完全可以借鉴一下Dynamo的ProtoGeometry的代码。首先来看一下对应关系:ProtoGeometry就对应着以下的方法。原创 2017-10-27 16:02:26 · 2992 阅读 · 1 评论 -
Revit明细表读取、将明细表数据存储到sql server数据库、python读取数据库
共同精进Revit及编程开发技能兴趣群:660319009 BIM运维,一个很重要的方向就是工程量。怎么读取工程量? 1)软件本身读取:即所见即所得,需要依靠软件本身的计算功能,在Revit分析里有个明细表的功能。 2)通过插件以及自制功能来获得扣减后的工程量。今天就顺带讲一下第一个功能,重点讲第二个功能怎么实现。这里我比较熟一点的是sql server数据库,所以就用这个数据库原创 2017-10-11 18:13:33 · 2104 阅读 · 0 评论 -
Revit二次开发——读取链接cad文件的地址
共同精进Revit及编程开发技能兴趣群:660319009链接cad文件的地址没法用Lookup来查找,所以常规方法读取不了这个地址。这个时候需要用如下方法来读取这个地址:Reference reference = uiDoc.Selection.PickObject(ObjectType.Element, "选择链接cad文件"); Element elem = uiDo...原创 2018-01-18 17:19:06 · 1702 阅读 · 1 评论 -
Revit二次开发——怎样建变直径螺旋箍筋
变截面螺旋箍筋是一条空间曲线,在Revit当中,空间曲线可以通过CurveByPoints来建立空间可见的螺旋曲线,也可以通过HermiteSpline在后台来建立空间曲线。其实通过LookUp,就可以看到,其实CurveByPoints就是HermiteSpline曲线。所以把这点搞清楚了就简单了,接下来就来建立一条空间变截面螺旋曲线。这里为了方便,直接用Dynamo来建螺旋箍筋...原创 2018-01-26 00:14:18 · 2869 阅读 · 0 评论 -
Revit二次开发——关联族参数
共同精进Revit及编程开发技能兴趣群:660319009在建族的时候,有个关联族参数的操作。应用场景比如:给族里的元素关联材质,关联长度等。string paramName = "材质"; FamilyParameter familyParameter = familyDoc.FamilyManager.AddParameter(paramName, BuiltI...原创 2018-02-02 11:31:17 · 3328 阅读 · 1 评论 -
怎样自己制作Dynamo软件包(1)——在GitHub上寻找原始资料
共同精进Revit及编程开发技能兴趣群:660319009GitHub上很多大牛共享的源代码,其中Dynamo的源代码也在上面,在里面有个Dynamo的软件包制作方法:https://github.com/DynamoDS/Dynamo从上面的链接中,可以找到案例以及源码。以下是简单的样例源码,可以用Visual Studio来运行,运行出来的文件放到Dynamo节点包中即可:https://gi...原创 2018-02-05 14:23:14 · 4609 阅读 · 0 评论 -
Revit二次开发——读取cad中的文字信息
Revit读取cad的文字信息需要借助Teigha的开源dll,在程序中添加下图中红色框的dll文件的引用,其他的dll文件全部放在同一个文件夹中即可,运行的时候,会自动把这些dll文件全部复制到bin文件当中,同时,在Revit中运行插件,Revit也会自动加载这些dll文件。以下是关键方法,在Revit里读取cad文字信息,图层信息,几何信息等。using System;using ...原创 2017-08-16 00:18:42 · 12862 阅读 · 34 评论 -
反编译工具——ILSpy工具和Reflector
以前总是听人说起反编译工具,没试过,今天一试吓一跳,自己做的东西不做加密保护,一个试用版的dll文件给别人,你的工作就白搭!先来看一下ILSpy工具的效果:这里我加载了一个我之前做的dll文件。 通过这个工具直接可以看到你的源代码。接下来看Reflector: 好吧,以后不能给试用版的dll文件给别人了。原创 2017-10-27 12:29:28 · 6065 阅读 · 0 评论 -
Revit中Dynamo编程——在Python Script中读写txt格式文件
毫无疑问,Python Script是一个很好的python语言的编程环境,它本身是带有很多Python的库。我们知道,在Python本身的编辑器中,是可以很方便的读写文件,所以Python Script自然也可以很方便的读写文件。这里列举一个简单的例子: 最后,在C盘搜索一下这个somefile.txt文本文档去哪里了,可以搜到Dynamo默认保存的位置在:C:\ProgramData\Auto原创 2017-09-26 00:15:40 · 1669 阅读 · 0 评论 -
Revit中Dynamo编程——在Python Script中用winform窗口
在上一篇博客中,讲了在Python Script中导入任意的dll文件,那么很自然的,如果dll文件当中包含winform窗口的类,自然可以在Dynamo中用上Revit二次开发用得顺手的窗口。 上篇博文:http://blog.csdn.net/niuge8905/article/details/78073221这里就直接演示和窗口关联起来的类,以及最终在Dynamo中的显示效果。直接修改一下上原创 2017-09-24 10:12:05 · 2428 阅读 · 0 评论 -
Revit中Dynamo编程——在Python中怎么导入任意的dll文件
其实Dynamo的Python Script就是一个很强大的可扩展的IronPython工具。我们知道IronPython可以很方便的引用dll文件。用过Unity3D的人也知道它可以很好的兼容C#和JavaScript,其实核心原理就是用的Python语言的强大的可扩展性。回头来看,Dynamo的Python Script强大可扩展性也可以借此发挥。这里直接用一个例子来说明。 首先来一个Visu原创 2017-09-23 20:35:45 · 3506 阅读 · 0 评论 -
在Revit中自由快速的给复杂结构加钢筋的办法
共同精进Revit及编程开发技能兴趣群:660319009首先得明确用哪个版本的Revit给复杂的结构加钢筋。经过尝试,发现最好的版本还是2016版本的,2017、2018的不适合给复杂结构加钢筋。原因如下:2016版本的钢筋限制只有一个面,通过调整这一个限制就可以得到我们想要的位置;2017版本的钢筋限制太多,对于复杂结构,面数过多,会导致钢筋到不了我们想要放置的位置。如原创 2017-10-06 15:18:10 · 10372 阅读 · 1 评论 -
Revit中Dynamo编程——如何保护自己的算法成果
共同精进Revit及编程开发技能兴趣群:660319009Dynamo可视化编程有诸多好处,但也有一个坏处就是没法进行算法保护。那如果我们想保护我们的算法怎么办呢?其实也是有好办法的——核心的办法就是把算法写成dll文件。1)在Visual Studio里,把算法写成类,并生成dll文件2)通过Python Script的模块,引用dll文件,引用方法见原创 2017-10-04 12:21:31 · 2428 阅读 · 1 评论 -
Revit二次开发——另存为软件崩溃的问题及解决办法
1、另存为软件崩溃的问题经过我的多次实验,发现另存为软件崩溃的原因是我安装的wps导致的。这点wps可得长点心,害苦了其他软件。2、解决办法这里另存为的代码片段如下:private void Export_Click(object sender, RoutedEventArgs e) { SaveFileDialog saveFileDia...原创 2019-03-13 10:17:56 · 1924 阅读 · 0 评论 -
Webgl展示Revit模型(带贴图)
Webgl展示的Revit模型如何带贴图?1、首先需要把Revit中每个面的材质的贴图路径找出来;2、需要在Threejs中还原出来,其中最重要的是UV计算的方法;3、因为在Revit中很多材质是材质库,所以最好在服务端放置材质图片。...原创 2019-02-26 18:05:32 · 3176 阅读 · 0 评论 -
几种Revit轻量化结果的对比
Revit轻量化,其实就是把Revit数据提取出来,然后在浏览器或者其他平台中重现出来。这里主要以转成Three.js作为对比。本文主要以样例中的Technical_school-current_m.rvt(大小15.1m,压缩rar后大小:13.9m)作为样例,:1.把Revit中每个面作为一个Three.js里的一个mesh转出来的json结果(大小28.9m,压缩rar后大小...原创 2018-12-23 23:37:38 · 14342 阅读 · 9 评论 -
Webgl显示Revit模型(二)——利用Three.js优化显示效果
Webgl显示Revit模型(一)请见:https://blog.csdn.net/niuge8905/article/details/80044802Three.js已经算是开发webgl最常用的开源库了。Autodesk团队开源了一个va3c来在web端显示revit,但是这个更新很慢,而且效果差,所以我用Three.js来做了一个优化显示效果。具体源码及步骤:http://c...原创 2018-11-01 21:59:03 · 14535 阅读 · 2 评论 -
C#计算凸包的点的方法
参考资料:https://download.csdn.net/download/u010991835/10223982http://www.cnblogs.com/HolyChen/p/5982184.html传进来点集,输出凸包的点集:#region 计算点的凸包,并返回凸包的点集 public static List<XYZ> GetConvexHullPoi...原创 2018-10-16 16:16:12 · 1953 阅读 · 5 评论 -
Revit二次开发高级应用(二)——怎样在Revit中使用多线程
在Revit中完全可以使用多线程,只是需要满足一定的规则:不改变Revit的Document文档的工作都可以在线程中完成,改变Document文档的工作都需要在主线程中完成。如下:不改变文档,只是在线程里创建辅助的线,运行之后,丝毫不错。namespace RevitUseThread{ [Autodesk.Revit.Attributes.Transaction(Autode...原创 2018-10-09 09:48:19 · 4420 阅读 · 2 评论 -
Revit二次开发高级应用(1)——利用wcf做简单的族库管理
因为对应用场景不是特别明确,暂时就用wcf做一个可以上传和下载的功能来管理族库。1、用WCF做服务端的上传下载管理首先添加上传下载的接口:[ServiceContract] public interface IFileService { //上传文件 [OperationContract] UpFileResult Up...原创 2018-10-03 13:24:22 · 2430 阅读 · 0 评论 -
Revit二次开发——如何搭建多版本的框架,方便编程
Revit基本两年一大变。所以在做开发的时候需要做多个版本的才行。但是每个版本做一个项目又很不方便,因为很多代码类似,改了前面忘了后面的版本,所以很头疼,最好能够几个版本共用一个类,不同版本通过预编译来解决。这里只说怎么解决多版本共用一个类的问题,预编译比较简单,自己去查查相关内容即可。以下是详细步骤:1.新建一个空的解决方案,然后添加两个项目,如下图:2.接下来打开...原创 2018-08-17 10:29:11 · 5526 阅读 · 1 评论 -
Revit二次开发——字体的问题
在Revit二次开发中设置文字字体还是一件比较容易的事情,因为有现成的API.首先需要获取系统文字名称,这里用最简单的方式,百度一下:https://zhidao.baidu.com/question/69549353.html获取好系统名称后,只用在Revit的API中传入系统文字的名称即可:textNoteType.get_Parameter(BuiltInParameter.TEXT_FON...原创 2018-05-31 23:47:43 · 3003 阅读 · 1 评论 -
怎样用webgl显示Revit模型
探索了一阵子,发现这个完全可以实现,模型带几何信息,带材质信息。目前还是有点缺陷,比如官方的这个例子中地形、和树木没显示出来,显示效果一般般。实现方法是通过插件把revit模型数据转成中间数据,然后webgl读取中间数据,然后重新生成最终的模型。目前还不支持直接读取rvt模型。前者可以修改代码,后者可以通过写shader来解决。结果如下图: 对Revit二次开发和Dyanmo编...原创 2018-04-22 23:39:43 · 16088 阅读 · 1 评论 -
Revit二次开发——加快过滤速度,以及对ElementIntersectsSolidFilter的API的Bug的处理办法
在Revit的API中有快过滤器和慢过滤器,其中慢过滤器和快过滤器合用会加快过滤器的速度。首先来看一个例子,以下是一个用了ElementIntersectsSolidFilter 慢过滤器的例子,如果元素多达几千个,下面最后一行代码起码耗时三四十秒: FilteredElementCollector collector = new FilteredElementCollector(revitDoc...原创 2018-03-31 12:42:22 · 2658 阅读 · 2 评论 -
Revit二次开发——利用Dispatcher类添加进度条
当程序运行时间很长,然后避免程序假死,比较好的办法是增加一个进度条,如果当前只有你的这一个功能在跑,用Dispatcher类是一个简单的好选择。这里用wpf的窗口来实现。public partial class ProgressBarView : Window { ExternalCommandData m_commandData=null; Stright...原创 2018-03-25 23:01:49 · 3237 阅读 · 0 评论 -
Revit二次开发——非模态窗口
非模态窗口有一个好处,就是可以一直停留在程序之前,然后持续完成操作。但是在Revit二次开发中,非模态窗口也有几个注意事项。1、需要在文档关闭的时候,把非模态窗口也关闭掉,不然会导致文档关闭,窗口还在这样奇怪的Bug。2、非模态的窗口的事件需要在IExternalCommand里注册。3、每个操作必须在外部事件里进行。以下代码关注后两个注意事项,第一个用上Document事件即可解决。首先在IEx...原创 2018-03-31 12:08:25 · 5555 阅读 · 1 评论 -
Revit中Dynamo编程——在Python Script中引用Python的py文件
共同精进Revit及编程开发技能兴趣群:660319009 从上两篇博文可以看到:Python Script能够很好的兼容dll文件,甚至可以把winform窗口加入进去,那么自然就可以想到:在Python Script中引用Python的py文件。ok,这里就直接给一个实例(图一是py文件,图二是Python Script): 但是比较奇怪的是,在Python Script中不能原创 2017-09-24 11:50:23 · 2183 阅读 · 0 评论 -
Revit中Dynamo编程——在Python Script中结合sql server数据库来存储材料的外观属性
共同精进Revit及编程开发技能兴趣群:660319009 首先,来看一篇博文: IronPython使用Sql Server数据库 http://blog.csdn.net/xiahn1a/article/details/45678249我们的Dynamo的Python Script环境其实也是 IronPython的一种,结合以上博客可以很好的结合数据库。我的这篇读取材料的外观属性原创 2017-09-26 15:26:37 · 1889 阅读 · 0 评论 -
Revit中Dynamo编程——Python脚本编程与RevitAPI交互的注意事项
共同精进Revit及编程开发技能兴趣群:660319009 本文转自http://www.diyitui.com/content-1436774475.32513395.html这可以说是在Dynamo中用RevitAPI的最最好的一篇文章,首先谢谢作者的翻译!!!输入变量在0.7版本之后的Dynamo中,Python脚本的节点可接受的变量数目是可变的。在0.6以前的旧版本中,每个输转载 2017-10-02 22:28:54 · 9717 阅读 · 0 评论 -
Revit中Dynamo编程——在Python中怎么利用RevitAPI来写一个过滤
这里以过滤钢筋类别为例。首先需要导入几个RevitAPI。具体代码如下: 其结果跟lookup查看的完全一致。原创 2017-09-22 21:44:27 · 3191 阅读 · 1 评论 -
Revit中Dynamo编程——Python代码(类)
Python代码的类和C#中的类的书写区别很大,一时不好转弯。先看一个例子: 来看一下图片里的AddOne的方法里有一个self,其实这个self就是对于对象自身的引用。再来看另外一个类。这个就相当于不带参数的类。 虽然用起来很不爽,但是了解规则后,用起来也就那样。self参数事实上正是方法和函数的区别。方法将他们的第一个参数绑定到所属的实例上。后续待补充。。。如果想学精,请移步http://c原创 2017-09-21 23:47:10 · 5035 阅读 · 0 评论 -
revit二次开发——自适应构件族
revit二次开发——自适应构件族原创 2017-07-01 23:00:34 · 5962 阅读 · 0 评论 -
revit 二次开发 读取材料的信息
用lookup查看材料很具有误导性。找半天才找出原因,要想找到全部材料必须通过CompoundStructureLayer来查找。附上代码(两种找材料的方式):using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threadi原创 2017-03-05 21:54:29 · 1886 阅读 · 0 评论