- 博客(35)
- 资源 (5)
- 收藏
- 关注
原创 Revit二次开发之视图过滤器
获得当前视图的所有过滤器 ICollection collection = doc.ActiveView.GetFilters(); 获得每个过滤器的名字 for (int i = 0; i < collection.Count; i++) { FilterElement filter = doc.GetElement(collectio...
2018-10-24 07:36:36 1043 3
原创 Revit二次开发之空闲事件与DocumentChanged事件解决方案
前段时间做Revit开发项目时遇到一个棘手的问题,我们都知道Revit运行环境是不允许多线程并发的,也就是说同一时刻只能有一个事务或操作运行,然后可以根据具体情况去触发不同的响应事件,如DocumentOpend,DocumentChanged等,那么问题是什么呢?问题是有时我们希望通过外部命令PostCommand调用Revit本身的命令,如调用绘制桥架命令,但是我们希望在此命令执行后去触...
2018-10-24 07:35:19 2414 2
原创 Revit二次开发之记录PromptForFamilyInstancePlacement函数放置构件的个数
大家都知道UIDcument下有一个实时预览拖拽函数PromptForFamilyInstancePlacement,当然针对这个函数本身来说,没啥特别的,就是传递一个FamilySymbol类型而已,那么有时我们希望在使用这个函数退出后我们能够立即获得被放置的构件,那怎么办呢?其实我们可以使用DocumentChanged事件去做监控,在拖拽函数之前注册DocumentChanged事件,在拖拽...
2018-10-24 07:33:28 1523
原创 Revit二次开发之基于面和工作平面布置实例
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { UIApplication uiApp = commandData.Application; UIDocument uidoc = u...
2018-10-24 07:32:49 3789
转载 使用DataSet Datatable更新数据库的三种实现方法
使用DataSet Datatable更新数据库的三种实现方法,包括CommandBuilder 方法、DataAdapter 更新数据源以及使用sql语句更新一、自动生成命令的条件 CommandBuilder 方法a)动态指定 SelectCommand 属性b)利用 CommandBuilder 对象自动生成 DataAdapter 的 DeleteCommand、InsertC...
2018-10-24 07:30:57 614
原创 Revit二次开发之向Rveit窗体发送虚拟按键
有时候我们需要能够发送虚拟按键到Revit中,调用命令也好触发外部命令窗体也好,总之知道怎么发送虚拟按键还是有点必要的了,当然离不开WIndowsAPI了——上代码这里我们声明两个函数一个是设置窗体焦点,一个是发送虚拟按键! [DllImport("user32.dll")]internal static extern bool SetForegroundWindow(IntPtr...
2018-10-23 07:43:30 413
原创 Revit二次开发之控制按钮在不同视图下的可用状态
有时候我们希望某个外部命令或者通俗的说某个按钮只能在平面视图下可用,而在三维视图下不可用,那怎么办呢?其实Revit API 已经给我们开放了一个接口:IExternalCommandAvailability 我们需要在外部命令里新建一个类然后继承这个接口,然后在外部应用(也就是IExternalApplication)的相应按钮命令下指定目标属性即可! using Autodesk.R...
2018-10-23 07:42:46 645
原创 Revit二次开发之ExternalEvent实现非模态窗体
Revit从2013版之后就不允许在外部窗体下直接开启事务,当然我们可以使用模态窗体阻止线程的运行,其实说白了窗体不就是用户与程序的交互界面么,在窗体上设置好数据然后传递给主程序么,但是我们需要更强的数据交互功能,或者连续的命令调用。那么这个时候模态窗体就显得非常笨拙了,好在RevitAPI给我们提供了两个外部事件,一个是Idling,一个是ExternalEvent,那么上篇我们已经讲过Idli...
2018-10-23 07:42:00 1611
原创 Revit二次开发番外篇之窗体切换焦点
最近有很多Revit二次开发的朋友有一个疑惑就是:我们做好的非模态窗体,设置好参数输入后,点击按钮命令后,Rveit没有立刻进入到激活状态,怎么解决呢?,那么出现这种问题的原因是,我们做的非模态窗体在执行相应命令后,窗体并没有关闭或是隐藏,就一直处于激活状态,导致Rveit不能立刻激活或者拿到焦点,解决办法如下:我们可以使用WindowsAPI下的两个函数 GetActiveWindow(),Se...
2018-10-23 07:40:47 1303
原创 Revit二次开发之通过写族给火警设备绑定探测圈
我们知道Revit二次开发环境无法实现像CAD那样,实时预览和区域检测功能,比如我们想在放置感烟探测器或监控探头时,能够实时预览到它的覆盖范围,辅助我们确定一个空间内需要放置探头的数量,其实我们可以通过写族的方式——为探头设备添加一个探测圈,并设置参数半径绑定,实现参数化,这样我们在布置探头时就可以动态的改变这个探头的探测范围,进而实时预览不同的布置方案,核心代码如下: 本博文这里,假设感...
2018-10-23 07:40:12 403
原创 Revit二次开发之ExporterIFCUtils 获得墙上的柱子 墙连接的墙,闭合曲线面积
UIApplication uiapp = commandData.Application; UIDocument uidoc = uiapp.ActiveUIDocument; Document doc = uidoc.Document; Reference refer_1 = uidoc.Selection.Pick...
2018-10-23 07:39:24 1221
原创 Rveit二次开发之创建墙饰条和过滤对应轮廓族
Reference refer = uidoc.Selection.PickObject(ObjectType.Element, ""); Wall wall = doc.GetElement(refer) as Wall; //IList list = new FilteredElementCollector(doc).OfCategor...
2018-10-23 07:38:44 598
原创 Revit二次开发之视图过滤器
获得当前视图的所有过滤器 ICollection collection = doc.ActiveView.GetFilters(); 获得每个过滤器的名字 for (int i = 0; i < collection.Count; i++) { FilterElement filter = doc.GetElement(collectio...
2018-10-23 07:38:11 2433
原创 Revit二次开发之利用交互实现拾取图元的面
Reference refer = uidoc.Selection.PickObject(ObjectType.Face,new FaceFiler(doc), ""); PlanarFace face = doc.GetElement(refer).GetGeometryObjectFromReference(refer) as PlanarFace; 过滤器一...
2018-10-23 07:37:29 574
原创 Revit二次开发之标注矩形洞口的边
public void BackOpeningGeometry( Element elem,Document doc) { ReferenceArray array = new ReferenceArray(); Options option =new Options(); option.Compute...
2018-10-23 07:36:56 694
原创 Revit二次开发之射线相交法
using Autodesk.Revit.UI;using Autodesk.Revit.DB;using Autodesk.Revit.Attributes;using System.Windows.Media.Imaging;using Autodesk.Revit.UI.Selection; namespace HelloWorld{ [Transact...
2018-10-22 08:37:13 2147
原创 Revit二次开发之利用AdWindows在任意选项卡上创建按钮
为了达到目的我们又不得不需要AdWindows.dll这个类库的帮助了——正所谓 夏日消溶,江河横溢,人或为鱼鳖。我们也玩转一下Revit——上代码! using Autodesk.Revit.UI;using Autodesk.Revit.DB;using Autodesk.Revit.Attributes;using System.Windows.Media.Imaging...
2018-10-22 08:36:28 1185 1
原创 Revit二次开发之屏幕坐标到Revit视图坐标的转换
有时我们需要对屏幕坐标进行转换,也就是我们的鼠标点击的屏幕位置转换到视图坐标里,这个功能很有必要,本测试代码是点击窗体按钮,在按钮相对视图的位置生成两个参照平面,相交点为鼠标点击的那一点——上代码喽! using Autodesk.Revit.UI;using Autodesk.Revit.DB;using Autodesk.Revit.Attributes;using Au...
2018-10-22 08:35:14 2519 4
原创 Revit二次开发之创建房间,根据房间边界创建楼板等
以前就已经对创建房间有过了解,只是点到为止没有进一步的深究下去,今天有点时间就整理一下思路,留着以后备用。其实创建完房间后,可以算房间面积,空间体积什么的,也可以获得房间的边界线去做一些工作,比如生成楼板,墙踢脚线,墙饰条等等,其实原理都一样就是利用房间的闭合曲线! 首先来一个批量创建房间的代码,这里就只写步骤了,不拷贝整个工程了 UIApplication uiApp = c...
2018-10-22 08:34:21 6050 2
原创 Revit二次开发之通过写族给火警设备绑定探测圈
我们知道Revit二次开发环境无法实现像CAD那样,实时预览和区域检测功能,比如我们想在放置感烟探测器或监控探头时,能够实时预览到它的覆盖范围,辅助我们确定一个空间内需要放置探头的数量,其实我们可以通过写族的方式——为探头设备添加一个探测圈,并设置参数半径绑定,实现参数化,这样我们在布置探头时就可以动态的改变这个探头的探测范围,进而实时预览不同的布置方案,核心代码如下: 本博文这里,假设感...
2018-10-22 08:33:20 378
原创 Revit二次开发之细说链接文件的应用(布置建筑柱外皮,楼板开洞)
记得刚接触BIM技术的时候,那么所谓的六大专业,建筑,结构,水,暖,动,电利用Revit建模,就实行了各专业协同的建模方式,利用中心文件作为媒介,使各个专业能够链接其他专业的模型做进一步的工作,所以说到链接,最近整理了一下以前做过的项目——就是在建筑模型里链接结构模型,为结构柱放上建筑柱外皮,也就是我们常说的抹灰,一般是水泥砂浆做的,那么问题来了 如果这里有几百根结构柱需要放置外皮,那么人工来做的...
2018-10-22 08:32:38 2015
原创 Revit二次开发之根据房间的墙,利用墙饰条制作墙踢脚
这段时间有一些开发同仁问了一些关于房间放置踢脚或一些相关的问题,所以今天趁着有点时间,觉得还是写一点心得体会和大家分享一下,其实我们得到了房间后,还是可以做很多事情,不仅能能获得房间的边界线,还可以获得组成房间闭合区域的图元,如墙,建筑柱,门,窗等,最近公司的设计四院要求做一个算量的插件,就是根据每一个房间的属性做地面和墙体的排砖,然后做对应的算量工作,当然算量可以使用很多软件,这里只是举一...
2018-10-22 08:31:29 1346
原创 Revit二次开发之替换墙的构造层信息
UIDocument uidoc=commandData.Application.ActiveUIDocument; Document doc=uidoc.Document; Material material=new FilteredElementCollector(doc).OfClass(typeof(Material)).Cast().F...
2018-10-22 08:30:47 1137
原创 Revit 二次开发创建房间的两种常用方法
1,使用闭合路径 Transaction ts = new Transaction(doc, "BIM"); ts.Start(); try { Level level = uidoc.ActiveView.GenLevel; PlanTopolog...
2018-10-22 08:30:04 3304
原创 Revit二次开发之风管机械设置
UIDocument uidoc = commandData.Application.ActiveUIDocument; Document doc = uidoc.Document; Autodesk.Revit.DB.View view = doc.ActiveView; Transaction ts = new Tr...
2018-10-22 08:29:13 966
原创 Revit二次开发之递归实现查找相连接的管道系统
最近有人提出一个问题 ,就是根据选择的一根管道 ,获得与这根管道相连接的管道系统中的其他图元,包括弯头,闸阀等管道附件及管件,那么对于这个问题,我们第一时间想到的就是根据管道和管道附件特有的连接件属性来做判断,从一根管道获得它的一段的连接件,根据连接件获得它的Owner 再根据Owner获得所属的连接件 以此类推的向下查找 直到某个连接件下再也没有其他可连接的图元,这是典型的递推原理,代码和示例图...
2018-10-19 11:59:05 1904
原创 Revit二次开发之标注矩形洞口的边
public void BackOpeningGeometry( Element elem,Document doc) { ReferenceArray array = new ReferenceArray(); Options option =new Options(); option.Compute...
2018-10-19 11:58:23 426
原创 Revit二次开发之 构件的连接和剪切
UIApplication uiapp = commandData.Application; UIDocument uidoc = uiapp.ActiveUIDocument; Document doc = uiapp.ActiveUIDocument.Document; Reference refer_1 = ...
2018-10-19 11:57:47 4766 1
原创 基于WinForm开发的Ribbon界面案例的扩展
增加 Ribbon 三联排小按钮 文本菜单的动态添加删除及提示 ribbon按钮的动态添加删除 checkbox按钮下拉按钮样式 public partial class Form1 : Form { public Form1() { InitializeComponent(); ...
2018-10-19 11:57:06 1489 1
原创 基于WinForm开发的Ribbon界面案例
使用 Winform开发插件或软件时,创建Ribbon界面是比较难的,大部分第三方Ribbon控件不是针对WPF开发的 就是不能免费授权,以下的AERibbonControl库 是自定义开发的 可以免费使用 可以满足大部分的需要,后续将持续扩展 添加更多灵活的按钮类型 和必要的快速访问栏的创建 创建选项卡等方式和revit类似: UIApplication ui...
2018-10-19 11:56:26 7575 2
原创 Winform上实现Ribbon界面的雏形
winform里使用 再也无需采用第三方Ribbon库 自定义实现 效果不错 以后留着再升级完成 可以一起探讨探讨
2018-10-19 11:55:43 1221
原创 Revit二次开发之获取构件Connector
1.Revit二次开发公用专业中的管道,风管,桥架,导线等系统族 要想获取它的连接件 需要将其转化为MEPCurve 如: UIApplication uiapp = commandData.Application; UIDocument uidoc = uiapp.ActiveUIDocument; Document do...
2018-10-19 11:54:57 2300
原创 Revit二次开发之 有点时间 分析一下Reference
Reference 是Revit对象的引用 也是二次开发必须了解和熟练掌握的技能之一,对象引用包括 图元基础引用 可以根据此引用 实现图元转化 参数信息过滤和设置,此外对于标注来说更重要的是 Face-面引用 Curve-线引用 Point-点引用。那么根据Revit版本的不同对象的引用获取 也会有所不同 需要查找API做相应的匹配,如 轴线的引用在2014版时还可以通过点引用获得Grid g...
2018-10-19 11:41:30 3190 1
原创 Revit二次开发之单位转换
Revit内部基本单位是英尺,如果要获取或设置构件参数数值需要进行单位转换,比如转换为基本的毫米或米等单位1.可以使用常规方式进行转换: 1英尺等于0.3047999995367米,等于304.7999995367毫米 2.可以使用RevitAPI内置的转换函数进行目标单位的转换 使用UnitUtils函数的public static double Convert(doub...
2018-10-19 11:40:12 2796
原创 Revit二次开发之 自定义选项卡排在最前端
引用AdWindows.dll类库 Autodesk.Windows.RibbonControl ribbon = AutodeskWindows.ComponentManager.Ribbon; Autodesk.Windows.RibbonTab rt = null; foreach (Autodesk.Windows.RibbonTab...
2018-10-19 11:37:59 1314
基于Winform开发的Ribbon控件 可以用于使用开发Ribbon界面程序 或二次开发的资源嵌入
2018-11-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人