
RevitAPI
文章平均质量分 51
AaronLuu
致力于BIM在中国的推广和落地
展开
-
如何在不卸载Revit插件的情况下禁用插件?
如何在不卸载Revit插件的情况下禁用某个插件?这个问题对于Revit开发的朋友,不是问题,但对于Revit的终端用户,可能就无从下手。解决此问题的答案就是禁用插件的.addin文件。Revit的插件注册方式之一就是通过.addin文件,我们叫manifest file。文件会存放在两个位置:一个是%ALLUSERSPROFILE%\Autodesk\Revit\Addi...原创 2019-03-25 15:57:38 · 10418 阅读 · 1 评论 -
RevitAPI: 如何获取点云PointCloud数据?
通过Revit菜单的“插入>点云"操作,可以把点云数据插入到Revit中,那么如何才能获得导入的这些点云数据呢?通过使用RevitLookup查看到,点云数据在RevitAPI中表现为PointCloudInstance,再看PointCloudInstance有个方法叫GetPoints(),这个方法就是我们想要的。GetPoints()有三个参数public Point原创 2015-11-30 15:41:49 · 6329 阅读 · 2 评论 -
RevitAPI: Rebar.CreateFromCurves抛出异常: Unable to create a RebarShape based on the given curves
我们知道通过Rebar提供几个创建的函数,其中一个是CreateFromCurves,public static Rebar CreateFromCurves( Document doc, RebarStyle style, RebarBarType barType, RebarHookType startHook, RebarHookType endHook, Elem原创 2014-12-17 10:27:24 · 3320 阅读 · 3 评论 -
《Autodesk Revit二次开发基础教程》书籍终于上架了
由Autodesk中国研究院Revit开发团队的几位同事一起编撰的《Autodesk Revit二次开发基础教程》于今天在天猫同济大学出版社旗舰店正式上架,购买链接在这里:https://detail.tmall.com/item.htm?_u=m1vm4lrf259d&id=521852354085欢迎购买的朋友给我们提出指正意见。原创 2015-09-22 14:04:50 · 17255 阅读 · 16 评论 -
RevitAPI入门指南
有些朋友写信问我们哪里可以找到RevitAPI的学习资料,尤其是初学者应该怎么入手。我推荐下面几个地方:[英文] 博客:如果英文可以的话,首选我瑞士的同事Jeremy Tammiik的博客,全世界最全的写RevitAPI的博客。RevitAPI入门可以看这里。[英文] 官方:Revit官方开发者中心,有往年RevitAPI培训的视频以及相关资料,还有RevitSDK下载等等。[英文原创 2015-03-18 16:29:50 · 18847 阅读 · 0 评论 -
RevitAPI: Keynote文件的位置
有人想获取keynote文件的位置,调查了一下,好像隐藏的比较深:KeynoteTable.GetKeynoteTable(Document).GetExternalResourceReferences() 返回一个字典, 从字典里面获取 ExternalResourceReference 对象, 然后通过 InSessionPath属性获得它的路径。原创 2015-09-01 11:08:10 · 1726 阅读 · 0 评论 -
RevitAPI: PlanarFace.Normal 和 PlanarFace.FaceNormal
在Revit 2016里面PlanarFace.Normal已经被标识为Obsolete,这就意味着它在下个版本里面将被去掉,取而代之的是PlanarFace.FaceNormal属性,那么这两个有什么区别呢?我们应该用哪个呢?一般情况下我们都是推荐使用新的方法啦,即PlanarFace.FaceNormal。那么Normal属性有什么问题呢?我们来看下面的图:一个原创 2015-09-01 10:33:36 · 3027 阅读 · 0 评论 -
RevitAPI: 关闭当前文档Close Active Document
有客户想要实现关掉当前文档,再重新打开,他参考了Jeremy的博客,产生了一些Event相关的问题,只是看了半天问题描述,有点晕。我们知道要关掉一个文档可以调用UIDocument.SaveAndClose()或者Document.Close(),然而,如果要关闭当前打开的文档的话,会得到一个异常:InvalidOperationException: The active docume原创 2015-07-02 11:05:12 · 3787 阅读 · 1 评论 -
RevitAPI: 创建四通失败CrossFitting - InvalidOperationException: failed to insert cross.
最近一个客户问到一个关于创建四通的问题。我记得创建四通的函数Document.Create.NewCrossFitting传入的是4个Connector,而这4个Connector的顺序是有讲究的,应该是主干-主干-分支-分支,而不能是主干-分支-主干-分支。对此Jeremy也有一篇文章提到了这个问题:http://thebuildingcoder.typepad.com/blog/201原创 2015-06-10 17:10:39 · 2332 阅读 · 0 评论 -
RevitAPI: FamilyManager.Set - InvalidOperationException: There is no current type
在Family中调用Set(FamilyParameter)的时候,会抛出异常InvalidOperationException: There is no current type,例如下面的代码:var para = RevitDoc.FamilyManager.AddParameter("Length", BuiltInParameterGroup.INVALID, ParameterTy原创 2015-06-29 17:41:47 · 1522 阅读 · 0 评论 -
RevitAPI: Revit 2016调用NewFamilyIntance的时候抛出异常The symbol is not active
有时候,Revit 2016调用NewFamilyIntance的时候抛出异常The symbol is not active. Parameter name: symbol.这个问题解决办法是,在调用NewFamilyInstance之前,需要先判断FamilySymbol.IsActive,如果返回false的话,就要调用FamilySymbol.Activate(),把这个类型激活。原创 2015-06-23 16:26:11 · 3084 阅读 · 2 评论 -
RevitAPI: Revit 2016新功能和API介绍视频
原创 2015-05-22 18:01:19 · 1846 阅读 · 0 评论 -
RevitAPI: 如何在族里面创建一条带颜色的二维线?
我们知道,手工创建一条带颜色的线过程如下:新建族,例如,使用模板“Generic Annotation.rft” 点击菜单“创建” > “直线”,画一条线 选中该线,“管理” > ”对象样式",可以看见里面有多个类别 选中“常规注释”,修改子类别的“新建”按钮高亮,点击“新建”,新建一个子类别,并设置颜色和线宽 关闭窗口,再次选择该线 在“修改|线”,子类别下面的多选框中就出现了我原创 2015-05-22 17:20:07 · 4153 阅读 · 0 评论 -
RevitAPI: 调用NewExtrusion的时候抛出异常 One of the conditions for the inputs was not satisfied
当调用Document.FamilyCreate.NewExtrusion的时候,可能会抛出下面的异常Autodesk.Revit.Exceptions.ArgumentException: One of the conditions for the inputs was not satisfied. Consult the documentation for requirements f原创 2015-06-01 17:00:10 · 1504 阅读 · 0 评论 -
RevitAPI: Revit 2016里的Python代码例子Sample code
Revit 2016的新功能之一,就是支持Python和Ruby的宏。但是Revit 2016的SDK里面却没有示例代码,可能大家都不知道一个功能,就是示例代码都隐藏在创建出来的工程里面,如下图,注意里面的if False,它下面的函数都是示例代码,我们可以把if False去掉,然后把下面的函数向前缩进4格,然后编译,就可以在宏对话框里面看见了:原创 2016-01-14 17:37:16 · 8215 阅读 · 3 评论 -
RevitAPI: 获取图形显示选项 Graphic Display Options
有不少朋友问到如何使用api获取图形显示选项 (Graphic Display Options),我稍微调查了一下,发现api目前提供的功能还比较有限,能够获取到的信息如下图的1,2,3点使用的方法分别是:ViewDisplayModel displayModel = view.GetViewDisplayModel(); //1ViewDisplaySketchyLines s原创 2016-02-18 15:56:01 · 3658 阅读 · 0 评论 -
RevitAPI: 使用DMU(Dynamic Model Update)实现联动
我们知道Revit的一大特色功能就是关联修改,即,一处修改处处修改,比如,在三维视图修改了墙的位置,二维视图上墙的位置也跟着变化了,同时,墙上的门窗也会跟着移动。但有时候我们有自己的特殊需求,也想做到自定义的联动关系,比如我希望两面墙的总长度是固定的,增加一面墙长度之后,另外一面墙会跟着缩减。又或者,链接文档的某个构件移动了,希望主文件的某个不相关的构件也移动。这个时候,Revit本身的关系已原创 2016-02-03 14:39:14 · 5393 阅读 · 6 评论 -
Revit的journal文件在哪里
大家可能没有注意到,Revit每次运行都会产生journal,类似于我们程序的log文件,记录了用户对revit的一些操作序列。journal一般放在这样的路径下:C:\Users\<username>\AppData\Local\Autodesk\Revit\Autodesk Revit 2016\Journals我们可以通过将如下文字粘贴进Windows+R的"运行"窗口或...原创 2019-03-20 10:37:33 · 4363 阅读 · 3 评论 -
RevitAPI: Revit中求两条直线的夹角XYZ.AngleTo
写了一个小程序测试了以下AngleTo方法的返回值,代码如下:Line line1 = Line.CreateBound(new XYZ(0, 0, 0), new XYZ(10, 0, 0));Line line2 = Line.CreateBound(new XYZ(0, 0, 0), new XYZ(0, 10, 0)); // LLine line3 = Line.Cre原创 2015-02-01 17:09:43 · 4794 阅读 · 3 评论 -
Revit SDK下载地址
20190325更新:共享了如下sdkREVIT_2014_SDK.exe REVIT2015SDK_SubscriptionRelease.msi REVIT_2016_SDK.msi Revit_2017.1_SDK_(Update_Oct_19__2016).msi REVIT_2017_SDK_(Update_June_23__2016).msi REVIT_2018_1...原创 2016-09-10 15:56:27 · 16697 阅读 · 8 评论 -
RevitAPI: 新建系统族类型并创建族实例
昨天有客户问到如何通过API实现下面的步骤:1. 新建一个系统族,并修改参数2. 使用该系统族创建一个族实例,例如创建墙。回答:1. 新建族实例我们可以使用ElementType.Duplicate(string)方法,因为系统族是不允许用户创建的,我们只能复制一个。2. 创建系统族可以使用形如Wall.Create方法或者Document.Create.NewFloor这样的原创 2014-11-27 13:53:34 · 8636 阅读 · 10 评论 -
RevitAPI: 如何实现族编辑器里的连接几何图形
我们知道Revit族编辑器里面可以实现连接几何图形的操作,菜单是"修改>连接几何图形",然后选择多个几何图形进行连接。但是通过API代码如何实现呢?我们知道API有一些几何操作的方法,例如:BooleanOperationsUtils.ExecuteBooleanOperationModifyingOriginalSolid,该方法只是对两个Solid进行bool运算,并不原创 2014-11-27 14:04:21 · 6611 阅读 · 3 评论 -
RevitAPI: 如何判断天花板的族类型是否是复合结构
从Revit界面上看,复合天花板的类型有“结构”这个参数,而非复合没有,所以,其中一个解决办法就是通过判断有没有这个参数,代码如下: bool isCompondStructure = ceilingType.get_Parameter(BuiltInParameter.CEILING_STRUCTURE_ID_PARAM) != null;另外一种方式是调用GetCompoundStru原创 2014-11-27 14:40:49 · 1503 阅读 · 0 评论 -
RevitAPI:监听文档改变ControlledApplication/Application.DocumentChanged事件
很多时候,我想通过API获取上一次操作有哪些对象被创建、修改或者删除了。或者想监听文档的改变事件,一旦改变发生,程序就做一些特定的事情,例如,把这些改变记录在数据库中,再和其他应用进行交流。这个时候,就要用到ControlledApplication.DocumentChanged或者Application.DocumentChanged事件了。这里,我先推荐大家学习一个SDK里面的例子,原创 2016-02-26 17:02:05 · 3805 阅读 · 4 评论 -
RevitAPI:创建不连接任何设备的导线Wire.Create
Revit 2015暴露了一个方法用来创建导线,那就是:public class Wire{ static Wire Create(Document document, ElementId wireTypeId, ElementId viewId, WiringType wiringType, IList vertexPoints, Connector star原创 2016-02-26 16:40:32 · 1737 阅读 · 0 评论 -
RevitAPI: Document.ExportImage导出文件格式并不都是.png,即便设置了HLRandWFViewsFileType为ImageFileType.PNG
RevitAPI有导出图片的功能,那就是使用Document.ExportImage方法,一个实际的例子如下FilteredElementCollector FEC_Views = new FilteredElementCollector(OpenDoc).OfClass(typeof(View));FEC_Views.OfCategory(BuiltInCategory.OST_Views原创 2016-03-08 13:53:40 · 2711 阅读 · 0 评论 -
RevitAPI: 注意Revit 2016事件注册和注销行为的改变
在以前的Revit版本中, 我们可以在一个非模态对话框中注册或者注销一个事件,但是Revit 2016做了一些改变,不再允许这样做,凡是在非Revit主线程里面的注册或者注销事件,系统会抛出异常,如果您没有捕获这个异常,将会导致系统崩溃。官方的原话是这样的:API events - behavioral changeAlthough the Revit API has原创 2015-09-09 10:36:07 · 5183 阅读 · 6 评论 -
RevitAPI: 如何获得链接CAD里面对象的图层信息?
当导入或者链接CAD文件之后,一般我们在Revit里面选中该CAD,点击"导入实例”的“查询”,选中某个图元,就会弹出图层信息那么API如何实现此功能呢?本人刚开始并没有找到如何做到,后来偶然机会发现Line/GeometryObject类有个属性叫GraphicsStyleId,试了一下,答案就出来了。那就是,使用Selection.PickObject或Sele...原创 2016-03-18 17:33:39 · 7413 阅读 · 8 评论 -
RevitAPI: 如何使用API创建墙饰条
墙饰条对应的类是WallSweep,很明显在Document.Create下面没有NewWallSweep这样的函数,那么如何创建呢?答案就是使用WallSweep的静态函数Create:public static WallSweep Create(Wall wall, ElementId wallSweepType, WallSweepInfo wallSweepInfo);原创 2015-09-15 22:30:24 · 3615 阅读 · 0 评论 -
RevitAPI: 设置管件族的连接件的半径属性抛异常 - 如何获取关联族参数
管件族的连接件有一个属性叫“半径”,我们想使用api来修改它的值,直观的做法可能是这样的:connectorElement.Radius = 0.041;但是,Radius属性是只读的,编译不过,或者编译过了,但是抛异常。另外一种做法是使用Parameter:var radiusPara = connectorElement.get_Parameter(BuiltInPar原创 2016-02-19 11:01:17 · 3242 阅读 · 3 评论 -
RevitAPI: 如何创建云线?How to create RevisionCloud
首先通过RevitLooup工具,我们可以看到云线的类是RevisionCloud,那么创建云线的方法不是在Document.Create里面寻找,就是在自己的静态方法里面寻找。果然,被我们发现有一个静态的Create函数,如下:public static RevisionCloud Create(Document document, View view, ElementId revisi原创 2015-06-01 14:46:55 · 2131 阅读 · 1 评论 -
RevitAPI: 在墙上创建灯具族实例
有人碰到一个比较头疼的问题,就是试了好多种Document.Create.NewFamilyInstance的重载,都无法把想要的东西在墙上创建出来。下图就是他想要创建的墙上的灯具:我们手工放置的时候,可以发现它是放在墙的某个面上的,所以,基本可以排除其他NewFamilyInstance的重载函数,而只锁定下面的几个:NewFamilyInstance(Reference,原创 2015-05-18 18:44:38 · 5411 阅读 · 0 评论 -
RevitAPI: 模板文件的PipeScheduleType丢失
前段时间碰到一个很奇怪的问题,用户发给我一个rte文件,Revit 2015里面用它创建出来的文档里面没有任何PipeScheduleType,换句话说,所有的PipeType.Class都是null,即便文档里面有很多的管段和管道类型:换句话说,所有PipeType.Class都返回null。经过和开发人员沟通,这种情况应该是在文件升级的过程中产生的问题。解决方法原创 2015-05-18 16:33:29 · 1522 阅读 · 0 评论 -
RevitAPI如何区分项目参数和共享参数
给定一个Element,我们可以通过Given anElement, when you iterate it's parameter, you can check some properties of theparameter to determine if it is a project or shared parameter, please see belowexample code:原创 2014-11-17 22:40:42 · 3918 阅读 · 0 评论 -
RevitAPI: 关于一些Exception
RevitAPI的使用过程中,我们会碰到各种各样的异常(Exception),我想在这里收集一些常见的Exception,并探讨一下它们的原因以及处理办法。ModificationOutsideTransactionException首先我们看看这个异常ModificationOutsideTransactionException,对初入RevitAPI门的工程师们,这个无疑是原创 2014-12-11 10:46:29 · 3599 阅读 · 3 评论 -
RevitAPI:如何用API实现两条管道按中心线(Center Line)对齐
有客户问道如何用API实现两条管道在中心线(Center Line)上对齐,我觉得应该是有办法的,就像这样:通过获取到中心线的几何信息使用Document.Create.NewAlignment()方法创建这个对齐约束结果碰到了莫名其妙异常:ArgumentException: One of the conditions for the inputs was not satisfied原创 2014-12-22 19:05:08 · 4665 阅读 · 2 评论 -
RevitAPI: 如何获取MirrorElement函数镜像之后的结果元素
目前已经发布的Revit版本中(2015以及之前),有两个方法可以镜像元素,分别是:ElementTransformUtils.MirrorElement和ElementTransformUtils.MirrorElements但问题是这两个方法都没有返回值,这就意味着我们无法直接获取镜像之后新元素。这里我们可以通过变通的方法实现,就是利用Application.DocumentC原创 2015-01-21 12:33:33 · 2168 阅读 · 1 评论 -
RevitAPI: Revit文件打开被升级之后,Document.IsModified却返回False?
有个客户用新的Revit打开一个旧的文件,那么文件会被升级,升级之后,他认为Document.IsModified应该返回True,但实际上,返回值却是False.If we useApplication.OpenDocumentFile to open a previous Revit version RFA family (i.ewe open a Revit 2013 family原创 2014-11-27 14:59:02 · 2218 阅读 · 0 评论 -
RevitAPI: 不支持ElementClassFilter的那些类
我们使用ElementClassFilter来过滤Element的时候,经常会碰到一些异常,例如下面的:Autodesk.Revit.Exceptions.ArgumentException: Input type(Autodesk.Revit.DB.DetailLine) is of an element type that exists in the API, but not in R原创 2014-12-11 19:08:22 · 2281 阅读 · 0 评论 -
RevitAPI: 如何获取RevitLinkInstance链接模型的位置?
在RevitAPI中获取RevitLinkInstance对象然后调用Location方法的时候,发现它返回一个Location对象,该对象没有任何方法可以获取位置。RevitDoc = commandData.Application.ActiveUIDocument.Document;var linkFilter = new ElementClassFilter(typeof(RevitL原创 2014-11-27 13:27:58 · 3198 阅读 · 1 评论