Revit二次开发知识分享
文章平均质量分 53
baobao熊
这个作者很懒,什么都没留下…
展开
-
Revit二次开发知识分享(二十四)实现鼠标可视化跟随动画效果
群友询问:怎样子实现在批量选择完管道,在点击放置标签时,想有一个可视化跟随的动画效果。然后研究了一番,下面提供了一个简易版的实行方案,大家可以参考学习。原创 2023-03-23 12:01:55 · 1590 阅读 · 5 评论 -
Revit二次开发知识分享(二十三)动态控制按钮是否可用
我们想通过代码动态精确控制PushButton在哪些指定的情况下是不能使用的,哪些情况下是可以使用的 ,下面分享的是相关的api。原创 2022-12-26 22:40:28 · 269 阅读 · 0 评论 -
Revit二次开发知识分享(二十二)可停靠窗口 Page
可停靠窗口的初步实现原创 2022-10-24 22:51:04 · 1009 阅读 · 0 评论 -
Revit二次开发知识分享(二十一)修改墙的厚度(楼板同理)
[Transaction(TransactionMode.Manual)] public class ChangeWallThicknessDemo : IExternalCommand { public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { UIDocument uidoc = command原创 2022-05-09 00:46:19 · 3146 阅读 · 0 评论 -
Revit二次开发知识分享(二十)控制结构框架的“不允许连接”功能类
在做项目中遇到过创建梁的时候,其中一端需要设置不允许连接。因此找到了这个类(如下图)这个类里面提供了对结构框架的边缘点修改方式,包括“不允许连接”和“翻转结构框架终点”两个主要的功能。同意连接。参数中int值输入“0”或“1”,分别代表起点和终点。不允许谅解。参数同上翻转终点。参数同上然后墙体的不允许连接类是WallUtils,提供了打开和关闭的静态方法。希望这个类能帮助你解决问题,今天分享就到这里了~~...原创 2022-01-24 00:24:15 · 1019 阅读 · 0 评论 -
Revit二次开发知识分享(十九)控制轴网“隐藏编号”按钮
这段时间工作有一个新的想法,就是怎样子去操控轴网的编号显示还是隐藏,如下图。花了点时间研究了一番,发现Revit是有提供对应的API给我们去控制的,下面给大家详细讲讲,Just Do It~~~显示编号方法里面需要传入两个参数,DatuEnds是一个枚举值,枚举值中的参数对应修改的位置,选择是起点还是终点。View参数对应的是需要显示编号的视图。隐藏编号方法里面的参数和显示编号的参数是一样的,这里不多加赘述。基本的API就是上面这些,只要是DatumPlane下面的子类都有这个方法,说明标高原创 2021-10-24 19:58:07 · 921 阅读 · 4 评论 -
Revit二次开发知识分享(十八)管道的布管系统知识
这次主要分享的是Revit管线中的布管系统配置相关的API,案例讲解的是弯头的设置,其他的操作步骤是相似的。直接上代码,GoGoGo~~获取数据 //选择管道 Reference selRef = uidoc.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element); Pipe selPipe = doc.GetElement(selRef) as Pipe;原创 2021-05-03 00:58:46 · 1023 阅读 · 0 评论 -
Revit二次开发知识分享(十七)梁板柱开洞的使用
下面使用的API全是2019版本的API噢~~开洞的方法是RevitAPI中直接提供的(如下图),里面一共有四个创建的重载方法。1、给梁,柱子和撑杆来开洞的,现在也仅支持XYZ三个方向上的开洞。2、给屋顶、楼板和天花板开洞,后面的bool属性,提供的是,是否垂直于所在面去开洞3、在两个标高之间竖向开一个洞。4、给墙体开洞示例仅写了梁的开洞示例,如果大家有墙体开洞的需求可以在评论区告诉我,我再添加进去。 UIDocument uidoc = commandData.App原创 2021-04-12 23:48:01 · 1130 阅读 · 8 评论 -
Revit二次开发知识分享(十六)怎样子标注一根线
我们知道API中有提供一个获取点Reference的方法,如下图可是我们每次通过线取的时候,都会报错,取不到对应的Reference。这里我也去试了一下,发现其中的问题,这个对线取点的话,需要是通过构件的Geometry里面的Curve才是可以的。下面演示的是选择一根modelCurve为例。 UIDocument uidoc = commandData.Application.ActiveUIDocument; Document doc = uidoc.Document;原创 2021-04-03 00:45:25 · 481 阅读 · 0 评论 -
Revit二次开发知识分享(十五)获的与线相交的构件
这里是实现获取相交的一种方法,以选择相交柱子为示例。主要是把线构建成一个实体Solid然后再去计算相交。上代码~~ UIDocument uidoc = commandData.Application.ActiveUIDocument; Document doc = uidoc.Document; //收集所有的柱子 FilteredElementCollector columnFC = new FilteredElementCo原创 2021-04-01 22:14:47 · 1003 阅读 · 0 评论 -
Revit二次开发知识分享(十四) 选择轴网快速生成标注
这次分享的是一个小功能。选择几根相互平行的轴网,然后快速生成标注,内容仅提供学习和参考,延展性很大,可自行开发。上代码Just Do It~~ UIDocument uidoc = commandData.Application.ActiveUIDocument; Document doc = uidoc.Document; List<Reference> selRefList = uidoc.Selection.PickO原创 2021-03-21 00:05:07 · 712 阅读 · 0 评论 -
Revit二次开发知识分享(十三)拆分孤立楼板
项目中会遇到存在多个独立的楼板组合成一个大楼板的情况,去下图:今天分享的知识是把楼板给拆分开,变成单个独立的楼板,如下图:上代码,Just Do It~~~ UIDocument uidoc = commandData.Application.ActiveUIDocument; Document doc = uidoc.Document; Reference selRef = uidoc.Selection.PickObject原创 2021-03-18 00:44:04 · 2429 阅读 · 2 评论 -
Revit二次开发知识分享(十二)给Revit发送Esc按键
这里提供一个有时可行,有时不灵的办法,仅供参考学习。发现有改进的地方,可以联系博主一起讨论改进,上代码。先整一个帮助的类里面包含键盘的消息 public static class Helper { [DllImport("user32.dll")] private static extern IntPtr SetActiveWindow(IntPtr hWnd); [DllImport("user32.dll")] [ret原创 2020-10-31 18:57:16 · 1421 阅读 · 8 评论 -
Revit二次开发知识分享(十一)放置实例
我们有时候想在选择点放置实例的时候,想和revit本身的放置实例显示一样,有一个实例跟着鼠标去放置。这样子可以更加方便操作者知道自己放置实例的相对位置。先上代码,后解释,Just Do It~~~ try { uidoc.PromptForFamilyInstancePlacement(fs); } catch {原创 2020-10-30 23:15:01 · 1357 阅读 · 0 评论 -
Revit二次开发知识分享(十) 预览界面
需要用到预览界面一般都是在族库,或者想展示正在输入数据是怎样子才会用到。这里只是简单的运用RevitAPI中的方法去实现这个功能,然后把这个功能展示在WPF界面上。而且需要注意的一点是,预览界面调用的时候,是不能手动对Revit做一些操作的,但是代码可以。先上示例代码,后讲解 Just Do It~~主程序中代码:public class PreviewControlCmd : IExternalCommand { public Result Execute(ExternalCo原创 2020-10-18 15:45:13 · 1487 阅读 · 0 评论 -
Revit二次开发知识分享(九)判断墙与墙是否相连
在运用的时候,会遇到想找收集相链接的墙,用API提供的方法的话,总是会出错。会漏掉一些自己需要的墙,因此,下面封装了一个可以计算墙的是否连接的方法,先上代码后讲解Just Do It!!! public bool IsConnected(Wall judgeWall, Wall proWall) { bool result = false; Line judgeLocationLine = ((judgeWall.Locati原创 2020-10-02 15:53:45 · 1304 阅读 · 3 评论 -
Revit二次开发知识分享(八)控制显示隐藏的图元按钮
在项目中操作的时候,有时候需要到打开“显示隐藏的图元”按钮,然后收集图元等操作。API中也停供了相对应的代码,这里我封装成一个方法,方便日后调用,先上代码后讲解,Just Do It!!!public void OpenRevealHiddenElements(Autodesk.Revit.DB.View view) { var a = view.TemporaryViewModes; if (a.RevealHiddenElements)原创 2020-10-01 14:10:03 · 760 阅读 · 0 评论 -
revit二次开发知识分享(七)几何体的布尔运算
revitAPI中只提供了几何体相关的布尔运算,是下面的这些方法(如图)方法后缀是否加ModifyingOriginalSolid的区别在于,没加是对几何体进行操作,并且操作完后生成一个新的几何体,而对原本的几何体没有改变任何东西。如果加了,就是直接对原本的几何体进行操作。今天主要是介绍ExecuteBooleanOperation方法的使用。先上操作后讲解 Just Do It!!!Solid s = BooleanOperationsUtils.ExecuteBooleanOperation(s原创 2020-09-19 15:26:52 · 3171 阅读 · 0 评论 -
revit二次开发知识分享(六)如何新建面积方案
系统自带的面积方案只有这几种(如下图),如果在代码中想实现生成一个新的面积方案的话,我们该怎么操作呢?比如生成一个“标准层面积”的面积方案,并且生成新的面积平面。先上代码后讲解,Just Do It!!!//创建面积方案public static AreaScheme CreateAreaView(Document doc, string name) { AreaScheme areaScheme = new FilteredElementCollector(d原创 2020-09-19 15:24:55 · 824 阅读 · 3 评论 -
Revit二次开发知识分享(五)单位转换问题
我们在实际项目中用代码读取到的数据的单位都是用英尺。如果不清楚这个,在做一些输入数值指定数值的功能时就会出错。因此,RevitAPI中提供了单位转换的方法。DisplayUnitType是一个枚举类,里面有不同的单位的选择,可以自己去了解一下。下面我把经常用到的一些方法放到下面。/// <summary> /// 英尺转毫米 /// </summary> /// <param name="b"></param&g原创 2020-09-06 16:40:49 · 809 阅读 · 0 评论 -
Revit二次开发知识分享(四) 计算Face的中心点
我们经常会遇到,我们需要一个面上的中心点的时候,API并没有给出一个直接的方法,这样子我们需要自己去用几何知识去计算出一个面的中心点。不管这个面的形状是怎样子的,都可以算出一个在这个面的凸起点围起来的最大轮廓线。先上代码后讲解,Just Do It!!! public static XYZ GetFaceCenter(this Face temFace) { var faceBound = temFace.GetBoundingBox();原创 2020-09-03 21:59:11 · 1403 阅读 · 2 评论 -
Revit二次开发知识分享(三) 判断点是否在一个闭合轮廓内
由于现在API没有提供此类的判断。因此,只能我们自己去封装一个方法去使用。先上代码后讲解,Just Do It!!! public static bool IsInsideOutline(this XYZ TargetPoint,List<Line> lines) { bool result = true; int insertCount = 0; Line rayLine = Line.CreateBo原创 2020-08-28 18:16:21 · 1821 阅读 · 0 评论 -
Revit二次开发知识分享(二) View相关知识分享
今天分享的知识点比较杂碎,也是平时在学习和工作中经常会使用到的知识。切换视图代码切换视图,需要注意的是,切换视图不需要开启事务。List<ViewPlan> allView = new FilteredElementCollector(doc).OfClass(typeof(ViewPlan)).Cast<ViewPlan>().ToList();uidoc.ActiveView = allView[0];刷新界面一般切换完后需要处理这个视图里面的构件时,这个时候往往原创 2020-08-11 21:42:31 · 1282 阅读 · 0 评论 -
Revit二次开发知识分享(一)房间轮廓线
我们在平时项目中经常会需要收集该楼层的所有房间并且获得其房间轮廓线去辅助完成其他的功能。下面我们讲一下怎样子收集房间轮廓线://先获得当前的视图View view = doc.ActiveView;//然后再搜索再当前视图中的房间,案例选取其中的一个房间Room room1 = new FilteredElementCollector(doc, view.Id).OfClass(typeof(SpatialElement)).Cast<Room>().FirstOrDefault();原创 2020-08-02 22:19:17 · 2335 阅读 · 0 评论