Revit二次开发
文章平均质量分 54
哀家爆
这个作者很懒,什么都没留下…
展开
-
解决插件加载动态库的冲突问题
Revit插件第三方库dll加载冲突原创 2023-05-21 23:02:05 · 795 阅读 · 0 评论 -
Transaction, Regeneration & Journaling
Revit IExternalCommand Attribute原创 2023-01-31 09:53:35 · 348 阅读 · 0 评论 -
现代计算机图形学02---3D变换
现代计算机图形学02---3D变换原创 2022-06-21 23:47:10 · 342 阅读 · 0 评论 -
现代计算机图形学01---2D变换
现代计算机图形学01---2D变换原创 2022-06-21 22:53:28 · 271 阅读 · 0 评论 -
Revit 二次开发:创建线样式
1.一般创建对象之前,会先检查一遍当前文档中是否已存在对象: /// <summary> /// 初始化线样式 /// </summary> private void InitializeGraphicsStyle() { //获得设置里面的线 var lineCategory = _document.Settings.Categories.get_It原创 2021-02-15 14:02:55 · 1584 阅读 · 0 评论 -
Revit二次开发:CurveLoop的偏移
CurveLoop的偏移,有两种:1.平面内的偏移,意思是对CurveLoop进行放大或者缩小,var newLoop = CurveLoop.CreateViaOffset(curveLoop, offset, new XYZ(0, 0, 1));上述代码,对现有的curveLoop进行偏移,按照右手螺旋法则对curveLoop里的每一条curve进行偏移,偏移值为offset2.对CurveLoop进行移动CurveLoop.CreateViaTransform(curve.原创 2021-02-06 18:06:54 · 1748 阅读 · 1 评论 -
Revit二次开发:碰撞检测中用到几个过滤器
首先2个过滤器都算是快速过滤器。BoundingBoxIntersectsFilter可以过滤出与范围框相交或者完全在范围框内部的Element;BoundingBoxIsInsideFilter可以过滤出完全在范围框内部的Element;群里大神给出的另外一个使用情况:如果想获取只与范围框相交,且不是完全在范围框内部的元素,可以2个过滤器一起使用,取2个结果的差集就行。...原创 2020-12-30 18:27:35 · 1714 阅读 · 1 评论 -
C#类库项目创建config文件
我们知道,不管是WPF项目、Winfrom项目或者是Web项目,都有专属于自己的App.config,那么类库项目的config文件如何创建和使用呢?1.添加新建项:应用程序配置文件(Application Configuration File);2.修改新建的配置文件名称:项目名称.dll.config;3.修改配置文件属性:复制到输出目录:始终复制;生成操作:内容调用:// 打开dll所在路径var dllConfig = ConfigurationManager原创 2020-11-16 16:43:39 · 3856 阅读 · 0 评论 -
Revit二次开发:关于Face的一些常用属性和方法介绍
最近在做高程点标注的时候,抛出异常,提示spot的放置点不在reference上面。摸不着头脑,只能去翻看face的具体api了。这里做个记录(以PlanarFace平面为例):PlanarFace在API中是这样定义的:Planar faces are defined by planes bounded by edge loops. The planes provide natural UV parameterization to the faces. S(u, v) = Origin原创 2020-10-19 22:28:18 · 2548 阅读 · 0 评论 -
Revit二次开发-曲线三连:判断开放曲线为顺时针还是逆时针,求某点处的外法线方向
我不太清楚是不是在几何领域,只有闭合曲线才有顺时针、逆时针一说。反正在实际开发工作中,经常会碰到需要对开放曲线做判断,是否为顺时针、逆时针方向,比如需要求开放曲线在某一点处的外法线方向,就可能需要。思路:1.前提条件:理想的开放curves(不知道怎么定义哈哈,比如需要你先做排序处理,变成首尾相连的curves);2.做一条辅助线auxiLiaryLine,连接curves的一头一尾使其变成封闭的CurveLoop;3.使用CurveLoop自带的CreateViaOffset偏移功能,以及原创 2020-10-17 05:33:15 · 1393 阅读 · 0 评论 -
Revit二次开发-曲线三连:对curves进行排序
日常开发工作中,经常会遇到这样的场景:通过手动选择(或其他手段),获取到了一些头尾相连的曲线List<Curves> curves(只限于Line和Arc),现在只知道它们是相连的,但是不知是否沿着一个方向,在集合中是否是按顺序排列?可以根据以下方式对其进行排序,达到真正的首尾相连的结果:1.首先我们找到第一根线L1,满足要求:有一端是没有其他线与其相重合的。并记录L1与其他线重合的那个端点PL1。2.然后找下一根线,满足要求:有一端点与PL1重合,并记录另一端点P2;3.重原创 2020-10-17 05:19:18 · 1309 阅读 · 1 评论 -
Revit二次开发-曲线三连:Curve属性和方法
一、Curve类中,比较让人迷惑的是有些方法中需要参数parameter。比如Curve.Evelate()方法,API中是这样定义的:public XYZ Evaluate(double parameter,bool normalized)对于Curve而言,参数parameter有两种,1.一种是normalized(归一化)类型,对于Evelate方法来说,如果normalized=true,则parameter取值范围为0-1,比如取0的时候,返回值为Curve的起点,取原创 2020-10-17 05:05:34 · 3618 阅读 · 0 评论 -
Revit 视图范围的知识总结
首先借用了别人的一张图,我们先来解释一下视图范围的几个参数值到底是什么意思。偏移值就不说了,共有四个面:1.顶部(PlanViewPlane.TopClipPlane)2.剖切面(PlanViewPlane.CutPlane)3.底部(PlanViewPlane.BottomClipPlane)4.视图深度(PlanViewPlane.ViewDepthPlane)...原创 2020-08-27 21:30:37 · 2233 阅读 · 0 评论 -
Revit 二次开发 获取与构件相交或相接触的构件
我们知道,通过过滤器ElementIntersectsElementFilter可以获取到与某构件相交的构件,但是不能获取到与其接触但未相交的元素。比如下图,两面墙都与中间的柱子相交,var column = _document.CollectAll<FamilyInstance>(BuiltInCategory.OST_StructuralColumns) ...原创 2020-04-29 11:21:52 · 3847 阅读 · 3 评论 -
Revit中门、窗的FromRoom和ToRoom属性
1.首先明确一点,经过测试发现,FromRoom和ToRoom属性并不能确定门或者窗的朝向问题,这个属性用来干嘛我也不确定。按照有些博客中的说法,门开向哪个房间,那么ToRoom属性就是哪个房间,若是想更改,可以通过door.FlipFromToRoom方法来变更门窗的这两个属性。2.门的朝向,可以通过familyinstance.FacingOrientation来判定。若在平面图中,门...原创 2020-04-10 14:44:56 · 1167 阅读 · 2 评论 -
Revit二次开发:创建剖面
首先讲点预备知识。任何一个视图View,有三个方向,分别是ViewDirection(朝着观察者的方向),RightDirection(朝着屏幕的右边),UpDirection(朝着屏幕的上边)。ViewSection.CreatSection方法,可以创建剖面,该方法中的第三个参数是一个BoundingBoxXYZ类型:sectionBox。sectionBox.Transform....原创 2019-12-26 19:21:47 · 3377 阅读 · 2 评论 -
Revit二次开发事务Transaction相关
Transaction是用来处理Revit中的有关改变模型的事务。此处提到的模型,基本上指的是一切Element,注意,像Line等不属于Element.看下面的例子SketchPlane sketchPlane = null; string txt = "Origin"; Line line = null; usi...原创 2019-06-24 15:22:39 · 1065 阅读 · 0 评论 -
Revit:处理闭合回路中Curve方向的过程中出现的循环问题
首先看一段代码:Autodesk.Revit.DB.XYZ temp = lines.get_Item(0).GetEndPoint(1); Curve temCurve = lines.get_Item(0); Profile.Append(temCurve); while (Profile.Size != lines.Size) ...原创 2018-07-04 22:03:25 · 1495 阅读 · 3 评论 -
Revit二次开发第六回:根据模型线生成扫略放样实体
一般我们提到的放样,都是在族环境中创建。如果需要根据项目环境中的模型线,生成放样实体,则需要用到接口IFamilyLoadOptions,实现族环境和项目环境的切换。直接放代码,问题都在代码中。using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Thre...原创 2018-05-30 17:49:51 · 4895 阅读 · 2 评论 -
Revit二次开发:由房间获取房间的墙
之前用的方法是由房间边界构成的Solid,计算与该Solid相交的Element,然后判断是否为墙。相对来说这个方法比较通用,可以检索出房间的楼板、窗户等各种构件。SpatialElementBoundaryOptions se=new SpatialElementBoundaryOptions(); se.SpatialElementBoundaryLoca...原创 2019-06-17 17:11:55 · 2971 阅读 · 0 评论 -
Revit二次开发:关于Face的FaceNormal和ComputeNormal
1.FaceNormal是PlanarFace的专有属性(曲面的每个点的法向量不一定相同,所以只能用下面的那个方法来计算每个点的法向量),返回的是平面的法向量;若该PlanarFace属于某一个Solid的一个面,则返回值为外法向量。2.ComputeNormal是Face的方法,返回的是在某个指定点的法向量,则返回值为外法向量。该方法需要一个参数UV point,即指定计算某个点,经验证...原创 2019-06-20 16:57:35 · 2185 阅读 · 0 评论 -
Revit二次开发第一回:主程序与WPF窗口之间的参数传递
假设主程序中有3个参数需要传入WPF窗口,可以通过构造函数的形式(Revit二开中常以MainWindow为切入口)传入,具体应做如下操作:class Program { static void Main(string[] args) { //以下为3个等待传入MainWindow的参数列表原创 2018-04-25 14:07:58 · 2435 阅读 · 0 评论 -
Revit二次开发第三回:模型线的创建与偏移
对于模型线ModelCurve的偏移,研究了好几天,终于搞定。先稍微谈下自己中间遇到的情况。1.首先,API中并没有提供直接的方法对ModelCurve进行偏移;2.考虑到模型线的创建,需要用到参数Curve,因此想到了对先Curve进行偏移,API提供了相应的方法:Curve.CreatOffset3.对Curve偏移过后,发现对应的模型线并未改变。然后才发现,需要对modelCur...原创 2018-05-19 18:38:24 · 6199 阅读 · 0 评论 -
Revit二次开发第四回:关于RevitCommandId
最近在找关于模型线倒角的API,一直未找到,无意中听同事提起以下的API可以查到Revit里面几乎所有的操作。不过可惜的是仍然没找到关于倒角的命令。。。打算自己手写算法了。RevitCommandId cmdId=RevitCommandId.LookupPostableCommandId(PostableCommand.ModelLine);uidoc.Application.PostComma...原创 2018-05-22 16:52:25 · 1970 阅读 · 1 评论 -
Revit二次开发第五回:Ribbon按钮的添加
1. 实现代码完成后,新添加一个类,Ribbonnamespace BabyTrainToolsForClass{ classRibbon : IExternalApplication //需要using Revit.UI { publicResult OnShutdown(UIControlledApplicationapplication...原创 2018-05-29 16:07:02 · 3889 阅读 · 2 评论 -
Revit二次开发第七回:Exception异常小计
抱歉这么简单的东西都要写在这里,但对我而言还是好不容易才理解到的,后面还将继续更新此类问题。对于List<Wall> wallList=new List<Wall>();Wall wall= wallList[0];if(wallList.count==0)//这里不是写null,因为上面已经声明了wallList,就不可能为Null了。{MessageBox.Show("...原创 2018-06-07 16:01:04 · 622 阅读 · 0 评论 -
Revit二次开发第十一回:InstanceVoidCutUtils
看到有人推荐用这个类来获取剪切元素balabala,吓我一跳,和我之前用的JoinGeometryUtils完全不同嘛。仔细看了一下,其他是功能完全不一样。比如,现在有一个梁,我们想在上面开一个槽,那么实际操作就可以画一个空心拉伸,去剪切,这个时候,就可以用InstanceVoidCutUtils。而JoinGeometryUtils从字面来理解,更像是两个构件之间的连接关系,而不单纯是剪切。...原创 2018-06-29 18:22:46 · 867 阅读 · 0 评论 -
Revit二次开发第八回:按ESC取消报错处理
先Mark一下,暂时还没遇到,try{ //API Operations}catch(Autodesk.Revit.Exceptions.OperationCanceledException){}原创 2018-06-19 14:03:52 · 1453 阅读 · 0 评论 -
Revit二次开发第九回:获取梁的截面宽和高
最简单的办法是,通过类型参数,获取梁的截面参数:FamilyInstance.Symbol.LookupParameter().AsValueString();FamilyInstance familyInstance = beamFoundationList[0]; string Bname = familyInstance.Symbol.LookupParameter(...原创 2018-06-26 19:26:40 · 3228 阅读 · 0 评论 -
Revit二次开发第十回:判断直线之间的关系
Curve.Intersect判断两条曲线之间的空间位置关系,以下全部是直线的试验结果:,返回值为1. SetComparisonResult.Overlap,共面且相交。2. SetComparisonResult.Subset,共线,且只有一个交点,即两条有边界直线共线且首尾相连。3. SetComparisonResult.Superset,共线;注:使用前需将其中一条曲...原创 2018-06-27 10:05:26 · 4921 阅读 · 0 评论 -
Revit二次开发第十二回:ComboBox中的楼层显示问题
楼层:标高1,标高2,。。。。对于上面的combobox,datasource=list<level>,则combobox中显示的是乱糟糟,所以我就把datasource改成了,list.selece(x=>x.name),可是这样的话,获取选择项怎么获取?其实,在combobox中,有个属性,displaymember,cboLevel.DataSource=list<L...原创 2018-07-03 15:13:21 · 585 阅读 · 0 评论 -
Revit二次开发第十三回:中的数据结构在过滤器中的使用说明
过滤器:FilteredElementCollector.OfCategory.OfClass中:OfCategory,过滤的不是族类别,而是类别,比如Wall 和WallType他们的Category都是一样的,OST_WALLS。一般在ofclass前面加一个ofcagegory,只是为了更快的过滤到所需元素。在Revit中,只有2个系统族,分别为墙和板,Wall Floor,剩下的都是Fa...原创 2018-07-03 16:23:22 · 688 阅读 · 0 评论 -
Revit二次开发第十四回:获取Level的ElementId的两种方式
先看一下,一般来说,可以这样:levelId=element.Level.Id;如果遇上Id的值为-1,即不存在,则会报错,那还可以这样:levelId=element.get_Parameter(BuiltInParameter.Instance_Reference_Level_Param).AsElementId();...原创 2018-07-03 17:22:30 · 3312 阅读 · 0 评论 -
Revit二次开发:NurbSpline中各个参数的含义
摘自百度的回答,基本满足二开需求。了解一下:NURBS是Non-Uniform Rational B-Splines的缩写,是非统一有理B样条的意思。具体解释是:.Non-Uniform(非统一):是指一个控制顶点的影响力的范围能够改变。当创建一个不规则曲面的时候这一点非常有用。同样,统一的曲线和曲面在透视投影下也不是无变化的,对于交互的3D建模来说这是一个严重的缺陷。.Rational(有理):...转载 2018-07-04 14:34:06 · 2208 阅读 · 0 评论 -
以MVVM模式创建轴网并将其动态显示
需求:打开创建的功能窗口(WPF)时,可以显示当前文档的轴网,且有横轴和纵轴的添加、删除功能。首先,基本思路是在一个Canvas布局(背景为黑色)控件中,动态的添加Line控件(红色线,当做是轴网)。在第一个版本中,实在想不到Line控件和ViewModel中的HorizontalGridsViewModel和VerticalGridsViewModel如何对应起来,稍微想了下,觉得无法用...原创 2019-01-25 23:41:04 · 214 阅读 · 0 评论 -
Revit二次开发标准模板
namespace AllViews{ [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)] [Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOp...原创 2019-06-06 22:20:19 · 955 阅读 · 0 评论 -
MVVM模式在Revit二次开发中的小案例
之前有人问到MVVM在Revit二开中怎么玩,刚好手头的项目里有一个简单的例子拿出来和大家分享一下。自己验证过,应该可以直接拿去测试。(功能就别提了啊,只是为了给大家演示一下如何使用MVVM模式而已)本例主要功能是实现了在Revit中,打开界面时,可以获取到项目中已存在的标高,并可以在界面中进行删减改操作,单击“开始生成”按钮,将开始更新项目中的实际标高。界面如下:项目目录如下:...原创 2019-06-13 15:13:25 · 868 阅读 · 0 评论 -
Revit二次开发:修改视图范围
想要修改平面视图中的视图范围,API为我们提供了PlanViewRange类。ViewPlan activeView=doc.ActiveView;//获取当前的活动视图PlanViewRange pr=activeView.GetViewRange();//获取当前视图的视图范围pr.SetOffset(PlanViewPlane.TopClipPlane,0);//顶部pr.S...原创 2019-06-14 15:59:37 · 1766 阅读 · 0 评论 -
Revit二次开发第二回:LINQ在过滤器中的使用
针对房间、房间标记等一些特殊的元素,API中提供了一些特殊的Filter以供使用,也可以直接用正常的CLASS和CATEGORY过滤器。 UIDocument uidoc = commandData.Application.ActiveUIDocument; Document doc = uidoc.Document; RoomFil...原创 2018-05-02 23:26:40 · 285 阅读 · 0 评论