Category

Revit

Revit二次开发博客,覆盖 API、族、几何、插件和自动化。

Revit-RAG:在 AI 和用户之间搭一座桥

引言 写在 Revit 2027 发布之后 Autodesk Revit 2027 AI Assistant 已于近日更新。新的 AI 能力已经可以更准确地拆解用户需求,引导用户选择所需数据,同时也开放了与 Claude、Cursor 等工具连通的权限。 也正因为如此,我更希望这个项目能够给一些...

Revit & MCP

Github 摘要 当前,各类AI相关资讯充斥着网络。由于近期开发工作涉及AI技术,因此撰写本文介绍MCP与Revit的联动方式,实现公众号中的"一句话建模"功能。 这只是其中一种实现方案,还存在其他技术路径。不过,这种方法能够快速落地,有助于大家迅速探索相关应用方向。 Function Cal...

在Revit中使用自适应族创建放样融合模型

大多数博客给出的方案都是如何在有自适应族的情况下进行修改定位点或是将数据传入自适应族,如何直接在族文件中创建自适应模型并将点转换为自适应点,连接自适应点成为自适应路径这种方式没有文章介绍. 下面的代码中给出了如何在自适应族文件中创建参照点并转换为自适应点连接成为路径,最终创建放样融合的办 法....

在Revit中使用自适应族创建放样融合模型

创建一个平面与模型线最终创建自适应族的案例。 这是一个我在Autodeks论坛回复的问题,这里整理一下发表在CSDN。 如果直接使用轮廓族,读取轮廓族的线段再继续创建,会出现路径发生偏转之后形状镜像显示的问题,这种情况出现的原因是因为refernce的附着面变化导致自适应族在路径偏移重新生成形状...

在Revit中实现多类别标记

实现Revit中多类别标记的方法 1. 标记方法的关键词: IndependentTag 2. 在创建标记中有两个方法,输入的参数基本一致,但是还是有所区别,下面描述和图片可以更好的区分 第一个函数:通过 实际的项目坐标点 不需要制定标记类型创建多类别标记 Create Method (Docu...

在Revit中临时隐藏和取消隐藏图元

临时隐藏,网络上面的代码有很多,我这里直接把代码放上来 但是大部分的博客只是讲了如何隐藏构件, 但是现实构件的节点文章只是将构件显示的界面表达出来,但是在实际项目中,用户想的大部分还是直接取消临时隐藏模式,继续进行工作。 这一篇文章讲的是如何启动Revit显示隐藏构件的窗口 取消隐藏: 1. 确...

在Revit中创建选择过滤器

过滤器分为选择过滤器与规则过滤器 规则过滤器可以看我之前写的这一篇文章: 选择过滤器顾名思义就是可以将选择的构件ID集合传入并加入到视图过滤器中,有一些场景需要对某些构件进行过滤选择,但是没有共同的逻辑规则进行筛选的情况下可以选择使用选择过滤器. 下面是我的代码,增加了截面填充突然与实体填充样式...

在Revit中实现凸包算法

引用 《计算几何》 导言:凸包的例子 前言 1. 算法的基本逻辑与理念来自于《计算几何》这本书,后面其他几章的演示也都会在Revit中实现调试,希望能够每个算法都找一个合适的实现方向在Revit中实现 2. 所有的代码都是c 编写并在Revit中调试,因为部分接口与判定使用了Revit API,...

Revit Add-in Manager 多重依赖无法更新的问题解决办法

我使用的是Add in Manager 是这个开源项目 项目逻辑 1. 项目采取的办法是通过加载 RevitAddinManage 这个dll,并在文件中动态加载用户的测试dll从而达到快速加载,快速测试的目的 2. 通过这种办法可以将多个程序附加到revit中并进行测试 问题点 1. 我有一个...

Revit 使用依赖反转进行开发

依赖注入的技术已经很成熟,本文主要是说明一下Revit中的适用版本与介绍相关的开源项目。 版本问题 版本 目前的依赖注入包无法支持Revit 2020 以下的版本,原因是因为包中的依赖项与Revit本身的依赖项不一致导致的,所以说如果使用Revit + DI 进行开发需要再2020以上 。 如果...

RevitNet 调用 Revit API 中射线法求模型同一个构件出现两个不同值的问题记录

射线法求交是很多三维模型求碰撞和测量间距最常用的节点,但是再使用射线法将 target 设置为 element 的时候会发现会出现两个相同的值。 下面用楼板距离,下图中会出现两个不同的值,在我修改板厚之后发现正好是板厚的距离,可以猜测射线法会对两个face进行判定相交,但是与我们需要的每个ele...

Revit二次开发 Grid无法获取reference的报错

在Revit2018以后,修改了Grid的Reference获取办法,需要使用下面的代码进行获取 而在之前是需要获取Grid的Curve.Reference才能进行标注创建 改动应该是为了更加安全便捷的获取Grid的Refence而做出的修改。关于这个事情的官方回答详情可以看下面这篇文章

Arc 打断拆分成多个线段

公司插件的梁齐斜板功能更新,设计师提出需求可以拆分弧梁,并能对齐到板顶。 本文只讨论拆分弧梁,椭圆再后续更新。 1. 首先看以下弧形的创建api API中提供了三种方法 第一种时指定起点与终点,最后选择顶点形成的弧形 第二种是指定面,半径,起点角度与终点角度 第三种则是弧形中心点,半径,起点角度...

Revit二次开发 PromptForFamilyInstancePlacement 方法报错的解决办法

参照 1. 这里是一些使用钩子进行取消的方案,但是在我的函数中运行失败,在这里记录一下后续在研究失败原因 2. 查阅SDK的内容,但是也是运行失败,放在这里看看后续有没有启发 解决方案 https://thebuildingcoder.typepad.com/blog/2017/05/promp...

Revit 二次开发 创建零件

有的项目需要使用零件进行地砖的划分,比如这样: 使用零件可以很好的统计数量,设置铺设缝等数据,所以下面提供一个可以创建零件的方法 1. 首先需要创建零件不见 2. 在零件中添加分割,此处线段不需要检查碰撞或者封闭之类,直接计算出值和边界线传入即可 3. 找到缝隙的para并设定值 使用以上三步即...

Revit 二次开发修改填充区域线样式

做了一个自动测算净高的插件,需要通过注释块标记高度,但是出来的时候会有边界线,如下图,通过filledregionType的lineweight定义宽度失败,通过LineStyleId进行设置,但是直接获取LineStyle样式只会获取管理 线样式里面的线,没有我们需要的<不可见线 这个分类。...

Revit 二次开发 创建紧凑型pushbutton

为了好理解叫做紧凑型Button起始应该是栈式Button,关键词 StackedItems ,效果如下图 https://knowledge.autodesk.com/support/revit/learn explore/caas/CloudHelp/cloudhelp/2014/ENU/R...

创建链接模型标注

创建Floor等有实体形状的标注 今天在回答Revit API Forum的问题的时候发现一个问题,如何获取链接模型的reference从而实现标注 ,我便使用 CreateLinkReference(doc) 这个方法直接获取,结果创建dimension失败 报错有无效的reference,后...

Revit二次开发 创建空心模型并与指定构件剪切

具体API可以查阅官方文档,这里提供剪切的关键词 Void 总述 应用场景 在实际项目中,想要做一个族剪切构件,需要创建一个空心拉伸,然后执行剪切命令剪切掉我们希望剪切的模型构件 在算量的时候应用比较广执行连接/剪切命令,或者实际工程中的连接顺序 或是在精度要求高或者业主拖着不给结算的项目中也会...

Revit 二次开发 未能加载文件或程序集“Microsoft.Xaml.Behaviors”或它的某一个依赖项

写了几个WPF界面,在addinmangager时没有发现问题,当编到一个addin文件中打包时,报错 未能加载文件或程序集“Microsoft.Xaml.Behaviors, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项 修改多次未果,后来想起来Revit...

Inno Setup 创建Revit安装包

之前通过NSIS打包文件后来发现 ,使用了一下发现相较于NSIS个人感觉Inno稍微好一点,整个操作界面会比NSIS要简洁许多,有汉化版可以添加我这里用的是英文原版 向导设置 1. 安装后创建新的文件向导 File New 2. 点击Next进入设置界面 因为打包的安装包大部分是放在指定的文件夹...

Inno-Setup 读取带空格路径导致无法启动外部程序

安装包完成安装时可以启动外部程序将Revit的Addin文件复制到相应的版本文件位置中,但是我使用 如果用户安装选择的 C:\Program Files (x86) 默认路径将会导致传入的字符串自动分割为数组导致程序运行错误 去stackflow提问,找到解决方案,下面把解决方案和相应连接放到下...

Revit 二次开发 HOF 方式调用transaction

再看《C 函数式编程》一书的时候看到HOF的概念,感觉在日常开发的过程中可以使用此方式整理一个拓展方法,实现程序的快速调用。 1. Transaction函数继承自 IDisposable 2. 我们平时开发需要使用using内部对Revit进行操作。实现自动拆卸 3. 我们需要创建一个泛型函数...

Revit自动更新 - C++ FtpGetFiles()

FtpGetFiles()函数详细解释详见官方文档 https://docs.microsoft.com/en us/windows/win32/api/wininet/nf wininet ftpgetfilea 网上搜这个函数发现这个函数介绍的有点少,所以将自己运行成功的代码放上来希望能够帮...

Revit二次开发 创建适配多版本项目(2)

https://www.cnblogs.com/ponus/p/11046624.html !comments 可以按照上方链接地址访问原作者博客和github 此处按照自己的情况记录了一下项目迁移时遇到的问题 多版本项目搭建 1. 创建新项目后,打开配置管理器创建多个版本的编译管理器 2. 卸...

Revit二次开发 新创建构件无法使用JoinGeometry等问题

问题场景: 实现梁间墙封堵的功能,在我创建墙后希望将上部梁与墙连接处理,呈现更好的视觉效果,但是在我创建墙体后直接使用joinGeometry将会报错无法连接。 解决办法: 刷新一下文档 代码: 修改前: 修改后:

折线多边形的原位放大

@[toc] 需要生成的效果 吊坑或集水坑的基本原理是按照板边界外侧生成一圈墙体进行封堵 折线多边形的原位缩放两种办法 一种是周培德的计算几何 算法设计与分析(第三版)中的办法另外一种是引用自 的办法,最后第二种可以解决项目问题,但是两种算法都写了一遍就都分析一下,这种情况以后还会遇到方便回查。...

Revit二次开发 自动生成剖面楼梯标注

引用 前置 样式 内容 上面链接文件中提供了一种屏幕坐标转换为项目坐标的办法,原理时通过屏幕中的点与边界的比例换算到项目中计算得出,但是博主的方法只适用于XY平面的情况下,如果应用到剖面中就无法满足了,剖面会出现正交剖面及平行XY轴切割或是斜向剖面,所以下面的使用了博主的思想修改了一下方法 1....

关于Revit中楼梯竖向标注的问题记录及生成方式的解决方案

最终成果 成果还需要补充,目前只完成了楼梯部分还需要 1. 外侧墙体做联动标注 2. 考虑到正向中分专业建模的情况还需要对链接模型进行处理 3. 用户自定义选取竖向标注位置 4. 做尺寸标注字体避开梯段 5. 标高与尺寸标注样式的选择问题 对齐竖向标注位置 楼梯架构 楼梯的开发首先需要分清这几个...

Revit 二次开发 ManageMC3.0 引用冲突

生成项目是发现这个警告但是不影响程序正常运行,搜索这个dll的作用发现是在Revit中才会出现的链接库,查看自己引用的dll文件发现 adwindows.dll 文件引用的2019导致版本冲突,问题不大但还是记录下来,防止再次粗心出错。

Revit PromptForFamilyInstancePlacementOptions 族放置API

这段时间在做族库,在做到最后需要与Revit连同时,希望可以用户选择下载然后直接在Revit中布置构件,查找API ,发现可以使用 PromptForFamilyInstancePlacementOptions 方法实现族放置。 代码 比较简单,只不过需要记住,由于 PromptForFamil...

Revit二次开发 斜面上旋转基于面构件错误的问题

今天修改了一下之前的功能,测试时发现无法在斜面上旋转基于面的构件,检查了一下午,从面的获取到tranform的转换都核查的一遍发现没有错误,最后发现应该是旋转时AXIS参数的问题,检查AXIS的向量与斜面的FACE.NORMAL一致,垂直于指定面,但是每次旋转都出错,之后将旋转轴设置为(0,0,...

使用C++进行Revit二次开发

由于VC++是在CLR中被编译所以无法达到加密的效果,如果想要保护自己的代码还是建议使用C++做核心算法,C 做交互。 由于做族库中,考虑到连接数据库代码可能会被反编译,上个版本中我采用的是WCF的方式与服务器数据交互,文章可在我前几篇找到,但是最近在学习QT相尝试使用QT+C++或是VC++开...

Revit Winform显示在Revit上层

引用文章: 当我们使用模态窗体时,当焦点不在窗体上时,窗体会隐藏在所有层级后方,如果遇到不熟悉的用户会不停点击按钮,从而生成多个窗体。并且对于单一窗体的交互也不友好。 在网站中搜索,经常会告诉大家设置 TopMost 但是这一操作会把窗体设置为最顶层,当我们使用其他应用程序,如:浏览器。窗体依旧...

Revit 左右值编码存储分级树形结构设计

近期在进行族库管理的开发,原来的想法通过左右插值进行族库的层级管理后来模拟了一下发现对于后期新增大量的项目族库会有不少的负担,所以把这个想方法记录下来,给有需要的人吧。 如果不涉及大批量的修改,可以使用这种办法,但是整个房建行业恐怕只有规范硬编码之类的能够适合。 左右值比较的关系主要和下图一样...

Revit MEP中Connector连接器的问题

在Revit二次开发中,相较于土建模块多出了管道系统模块,每个机电管件与管道之间连接由Connector控制,从而将整个管道系统串联起来 如果在LookUp中点开管道可以看到分为ConnectorManagement 与 All Refs两个类,之中都存储了Connector,刚接触的人可能会觉...

Revit 二次开发 遍历相同楼层所有可以连接墙体

目的:是为了将所有没有连接到一起的墙体进行连接,满足出图要求,刚开始采用深度遍历的方式发现会报错:堆栈溢出,原因是循环层数太多导致,之后优化了一下遍历方式使用广度遍历,问题解决。下面贴出两种获取墙体并连接的方式 Element.GetgeneratingElementIds 这个方法可以获得连接...

Revit导出DWGExportSetting

今天发现Revit中并没有提供导出 导出设置 的按键,查阅API发现这块属于 DWGExportSetting 类型,如果导出就只能自己写接口进行导出。大部分导出这个位置的应该关注的是图层修改器,这里因为他的加载标准,图层修改器是无法读取,如果需要传递图层需要传递项目标准或自己写接口进行传递,这...

Revit中实现WCF客户端部署

在之前的WCF文章中,成功创建了本地部署与服务器部署,但是当我想要在Revit端实现读取数据库信息 于是创建了一个项目测试效果。 参考案例: 代码 服务端 csharp 客户端 1. 添加引用项目 2. csharp 重点是: 如果刚开始学习有些混乱,uri的位置一般就是引用服务的位置 上面网址...

Revit中ComputerStructure中的ShellType

今天碰到一个群友问关于 设置出错的问题 There must be at least one core layer, i.e. one layer which is not a shell layer. 发现这块没有涉及过,便研究了一下 报错的翻译为:需要存在至少一个核心层 这块单纯的开发人员可...

Revit 自启动插件管理小工具制作

在安装过多插件时会导致Revit启动时报错:由于数量超过18个无法加载后续产品的错误,大部分许可文件会放置在 C:\ProgramData\Autodesk\Revit\Addins\ 下,通过修改后缀名即可将拒绝文件的启动。对于像某些产品会一次性防止十几个许可文件,设计工程师修改起来比较复杂所...

Revit 二次开发 获取多段轴网的location

点开多段轴网会发现轴网类型为 MultiSegmentGrid ,里面没有Locaiton可以获取,如果想要获取路径可以通过两种方式进行获取 方式一: Revit中可以进行编辑草图模式的均可以通过删除构件收集 构件ID 进行获取相应路径 代码可以参照叶雄进的获取板边界文章进行获取 方式二:直接...

Revit Dcokpane 某个 ItemsControl 与它的项源不一致

今天再可停靠窗口进行点击按钮从而再 DataGrid 中上传数据时,发现多次上传会出现问题<span style="color:Red" 某个 ItemsControl 与它的项源不一致 </span ,后来再查问题时发现是因为由于有多线程异常导致的问题。 原因应该是可停靠面板与Revit本身时...

revit二次开发 Idling&ExternalEvent 空闲事件与外部事件

Idling&ExternalEvent 空闲事件与外部事件 空闲事件 空闲事件是指在revit无操作时执行命令 解释 code <span style="color:red" TIPS:在挂载事件后最好后缀卸载事件,不然事件不会停止将一直重复 idling 里面的操作:smile cat:</...

Revit二次开发 房间分割线ID重复的问题

今天在检索房间分隔线时,发现如果墙体中端??与其他墙体有连接, 会将房间分隔线断开,可以看到此处位置房间边界变为五段 本身并没有什么太大的影响,但是如果我们点开里面 Line 里面的 ElementID 进行查看时,会发现 Element重复的问题,如果开发者在此处进行重复线段的提起那判断并将I...

使用NSIS制作revit插件安装包

@ 使用NSIS制作revit插件安装包 下载 Addin文件 == 我们需要将addin文件进行单独存放 == 位置放在读取文件的section后就可 修改脚本文件 1. 增加对addin文件的路径自动修改 在NSIS 中 $1 代表字符串,其中上面三行是组装目标路径, Push <Assem...

revit二次开发可停靠面板上点击按钮与revit主窗口交互

创建可停靠窗口 Github地址 引用 创建WPF窗口 添加完WPF窗口后将 usercontrol 修改为 Page ,F7切入后台同样修改为Page,同时需要引用 Autodesk.Revit.UI.IDockablePaneProvider 页面位置使用Dockpositon枚举值进行控制...

Revit二次开发 将构件信息导入到数据库中

revit中构件数据量较大,在做标准化或者审核软件的时候需要用到数据库,将数据导入数据库使得计算能够脱离软件进行计算也算是一种另类的软件 减负 demo 1. 获取构件 测试项目随便框选几个构件进行输出数据 2. 连接数据库 因为是测试所以将mysql连接设置为本地连接,这一步应该是创建Mysq...

REVIT构件连接与实例类型连接接点

构件之间的连接接口为: JoinGeometryUntils 实例之间的允许连接;墙体为: WallUntils 结构框架为: StructuralFramingUtils

Revit二次开发在visual studio 2019中使用git进行版本控制

参考链接 == == 安装配置 安装git打开git bash后输入命令 git config 确定是否安装 git config global user.name "youname" 填写github注册ID git config global user.email "emailaddress...

Revit 二次开发放置基于面的族时生成错误

目前还未找出,碰到这种情况需要做角度的二次校正 在进行基于面的族放置开发时,运行程序,发现停车位的位置全部变化,只有原点位置能够对齐 通过排查发现怀疑与板本身的向量有关,==即板放样线条的第一条线==,通过对四个方向不同板进行分析可以发现基于面的族基础预览位置在不断进行改变,并于向量保持平行状态...

2016RevitAPI一次性生成多个构件

今天检索API发现一个比较有意思的类:FamilyInstanceCreationData 通过传入参数可以使用doc.Create.NewFamilyInstances2()一次生成所有构件。 这个类可以用于翻模或调整构件的情况。在方法中自带两种方法.axis&&.RotateAngle可以省...

获取项目内所有的房间

revit中element与room类不想通,想要取得项目中所有的room类需要 获取。

Revit二次开发结构柱Solid.Faces取值出现问题

由于项目需要,需要对结构柱顶面进行取值。在对顶面取值中发现edge长度取值错误,通过lookup发现取出顶面含有六条边:( 作为一个矩形柱是不可能的事情。但是没有思考清楚问什么会出现多取两个值的情况,而且里面边长只有一个符合柱本身需求。 第一次取值使用的是familyinstance情况下直接取...

Revit二次开发使用投影到面Project坐标提取错误

今天在写代码的时候使用face.Project这个节点取投影点,实现通过点的修改完成对斜面的附着功能。在之前使用这个节点的时候没有发现问题,今天测试时如果将目标便宜到很低的一个点,是同投影到面节点,最终会造成一个比较大的误差。(如果是自己的节点使用错误,希望能够留言提醒 。 !)。 可以看到两个...

Revit二次开发在项目中给链接模型附加过滤器

视图过滤器分为规则过滤器与选择过滤器: 选择过滤器:需要传入elementId列表对指定的Element进行操作 规则过滤器:通过对指定参数的规则描述,传入categeorys的Id进行操作 具体可参照API update 2019 API删除掉SET 命令与模型颜色指定方法,颜色附加未实验,需...

Revit墙体构造层修改与查询

Revit墙体构造层修改与查询 一直想用博客记录下自己的一些问题和解决方案,今天是在CSDN上的第一篇博客,其余的会陆续从知乎转移过来 参考链接:https://blog.csdn.net/u010585773/article/details/83267911 在Revit中如果对墙体厚度进行数...