Revit二次开发记录
1、Revit二次开发注册位置
C:\ProgramData\Autodesk\Revit\Addins\2019
Revit二次开发注册文件位置,写这里备忘一下就不用每次翻书了,等以后这种基础问题写的多了 总结一下
https://blog.csdn.net/zwz2111/article/details/107491420
讲注册比较详细的一篇文章,挺好的记录一下
2、Revit二次开发linq查询
Revit二次开发通过过滤器过滤后的元素集可以通过数据库查询的方式来进行一个筛选。(LINQ查询)
原因是每一个元素都含有很多项信息,比如id,name等信息,那一个元素集就和一个数据库相差无几了,所以设置了可以通过linq查询来实现元素筛选。这个产品设计还是挺有意思的。
3、Revit如何导出obj格式
因为想把Revit三维模型挂到WPF上面去,网上的教程说是要先转化成obj格式。但是Revit不能导出为obj,有插件但是就是比较贵,在github上找到一个项目可以导出obj格式。
项目地址在这里:
https://github.com/weiyu666/RevitExportObjAndGltf
效果:
3、Revit+WPF二次开发项目结构以及格式
3.1 项目结构
最基本的就是两个。1、 command类实现IExternalCommand接口
2、MainWindow 实现 Window接口。可以先新建一个类库,然后在类库中添加一个WPF窗口,但类库模板中本身是不支持添加WPF窗口的,要修改csproj文件,具体怎么修改见Wpf之类库无法添加wpf窗体
。修改完csproj后要在引用中添加System.xaml。
3.2项目配置及模板制作
1、创建完成项目后引用添加RevitAPI.dll和RevitAPIUI.dll两个动态链接库。
2、导入Autodesk.Revit.UI、Autodesk.Revit.Creation、Autodesk.Revit.DB三个库。
3、获取文档。
如果经常要用的话最好还是导出一个模板吧。模板文件存储地址见下方,如果要卸载这个模板就去这里把他删掉即可。
1.删除之前的模板压缩文件包 C:\Users\xxx\Documents\Visual Studio 2017\My Exported Templates
2.删除这个文件夹下相同名称的压缩包 C:\Users\xxx\Documents\Visual Studio 2017\Templates\ProjectTemplates
3.3项目逻辑
这种类库文件一开始就会执行Excute方法,在执行方法中创建一个Window对象,来做界面。通过界面来做一些信息提示、展示,并且做一定输入信息的功能。
感觉在Revit二次开发中很少会接触到对数据进行处理,也基本不需要对数据在界面上做一个展示。所以就是通过显示控件来激活命令,来操作数据,如果有必要的话数据和界面做一个binding。
4 心得
有时候如果是小功能,能用dynamo做就用dynamo做掉好了,用二开又要配置环境,又要查API,又要注意语法问题,较之dynamo太麻烦了。但dynamo封装程度较之API较高,故而自由性也较低。
5 二次开发单位问题
在二次开发中代码中得到的数据单位全部是英尺,例如上图我创建了一条100m的模型线,他返给我的长度为328.08。故而如果要把我们输入进去的参数和一些用代码得到的数据进行一个交互的话,必须把我们输入的数据单位转化为英尺。
1 毫米(mm)=0.00328083989501 英尺
所以对我们输入的参数所有都要除以3.28。
因为我们的使用习惯为公制,故而输入要公制转英制,输出是英制转公制。
输入是公制转英制,要乘以3.28;
输出是英制转公制,要除以3.28.
6 Revit元素旋转
元素旋转用ElementTransformUtils.RotateElement 方法,但是要注意这个angle用的是弧度而非角度,是弧度、弧度、弧度!
public static void RotateElement(Document document,ElementId elementToRotate,Line axis,double angle
)
7 Revit族参数的获取及设定
double h1 = instance.LookupParameter("l1/2").AsDouble();instance.LookupParameter("l1/2").Set(window1.l1/2);
8 族实例位置的获取
先获取到LocationPoint或LocationCurve,再得到点或线
XYZ point = (familyInstance.Location as LocationPoint).Point; Curve curve = (familyInstance.Location as LocationCurve).Curve;
9 射线法找单元
叶雄进老师推荐的IList FindReferencesWithContextByDirection()方法已经被移除了,现在的射线法的代码如下:
private void ReferenceIntersectElement(Document doc, View3D view3d, XYZ origin, XYZ normal){ElementClassFilter filter = new ElementClassFilter(typeof(FamilyInstance));ReferenceIntersector refInter = new ReferenceIntersector(filter, FindReferenceTarget.Element, view3d);IList<ReferenceWithContext> listContext = refInter.Find(origin, normal);foreach (ReferenceWithContext reference in listContext){Reference refer = reference.GetReference();ElementId id = refer.ElementId;FamilyInstance instance = doc.GetElement(id) as FamilyInstance;if (instance.Symbol.Family.Name.Contains("chordFamlily")){}}}
10 基于线的公制常规模型
做了一条并不是在标高平面上的模型线,然后就不知道该怎么把基于线的公制常规模型放到模型线上去。之后又时间再来研究一下这个问题。
后记:
创建族的方法就是Document.NewFamilyInstance()
但是这个方法用来放基于线的公制常规模型的时候都需要一个Face或者face的reference,这个face只能去实体里面拿,所以这个基于线的公制常规模型只能依附在实体上,无法独立做。
11 调用Revit命令行命令
UIApplication uiApp = commandData.Application;RevitCommandId revitCommandId = RevitCommandId.LookupPostableCommandId(PostableCommand.ModelLine);MessageBox.Show(uiApp.CanPostCommand(revitCommandId).ToString());uiApp.PostCommand(revitCommandId);
11 隔离图元
uiDoc.ActiveView.IsolateElementTemporary(elem.Id);
12 三维视角的转向
//三维视角的转向View3D view3D = uiDoc.Document.ActiveView as View3D;ViewOrientation3D viewOrientation3D = new ViewOrientation3D(instancePoint, XYZ.BasisZ, instanceNormalVec);view3D.SetOrientation(viewOrientation3D);
13 元素的移动
元素的移动用到的是ElementTransformUtils.CopyElement()和ElementTransformUtils.MoveElement()方法,但是好像只能是在同一个工作平面内才可以实现复制和移动。不然的话,比如复制就会给你原地复制一个,不会移动。
14 全局参数添加参数
有时候会有对构建添加一些信息的需求,那么项目参数就可以实现对某一类构件创建参数的功能,就不用一个个添加了。
15 如何在txt中写入信息
string path = @"C:\Users\zyx\Desktop\11111.txt";FileStream fs = new FileStream(path, FileMode.Append);//文本写入StreamWriter sw = new StreamWriter(fs);string str = "zyx"+ "\r\n";sw.Write(str);sw.Flush();sw.Close();
16 Revit如何过滤筛选
以常规模型实例筛选为例
FilteredElementCollector collector = new FilteredElementCollector(uiDoc.Document);ElementCategoryFilter filter = new ElementCategoryFilter(BuiltInCategory.OST_GenericModel);ICollection<Element> founds = collector.OfClass(typeof(Instance)).WherePasses(filter).ToElements();MessageBox.Show(founds.Count().ToString());foreach(Element element in founds){MessageBox.Show(element.Id.ToString());}
17 Revit如何判断元素是否相交
通过ElementIntersectsElementFilter这个过滤器来判断筛选
Document doc = uiDoc.Document;Selection sel = uiDoc.Selection; ;Reference r1 = sel.PickObject(ObjectType.Element, "Please select a Element");Element ele = doc.GetElement(r1);FilteredElementCollector collector = new FilteredElementCollector(doc);//若为true 则该过滤器相当于失效ElementIntersectsElementFilter infilter = new ElementIntersectsElementFilter(ele, false);List<Element> list = collector.OfClass(typeof(Instance)).WherePasses(infilter).ToList();
17 Revit如何给元素添加颜色
方法有很多,但通过过滤器就比较方便,暂时没空具体写了,具体方法可以百度到
Revit二次开发记录相关推荐
- revit二次开发--异形柱翻模
最近写了一个revit二次开发的异形柱翻模的功能,柱子翻模网上有很多插件可以用,我用的比较多的是红瓦,其中异形柱的翻模对于图纸的要求较高,有很多不准确的地方.很多异形柱,整体翻模出来是错误的,翻出来之 ...
- Revit二次开发之按照标高过滤元素
Revit二次开发之按照标高过滤元素 之前群里有朋友问怎么过滤特定标高的元素,当时有人回答先都过滤出来,然后遍历判断相应的标高参数来找出特定标高的元素.今天在看书的时候看到了一个可以过滤特定标高元素的 ...
- revit二次开发lookup和addin的详细安装教程
今天我会讲一下lookup的安装和Addin的安装以及他们有什么样的作用,这个在以后的开发过程中是十分的重要的,我也会根据revit二次开发的书籍进行进一步的学习和解读里面的相关的一些内容: 首先我们 ...
- Revit二次开发---关于CAD翻模第一步
2019年6月6日,南京,暴雨. 笔者改善以前关于翻模的一些想法,以减少对翻模图纸的初步处理. 以前使用使用直接链接CAD的方法生成各种三维模型.链接进来的CAD图纸需要处理,且文字读取较为困难,故使 ...
- Revit二次开发学习笔记
Revit二次开发学习笔记1 20220314: 概念:Application与Document 接口函数:IExternalCommand.ActiveView与Selection 20220316 ...
- pythoncad二次开发视频_revit二次开发|bim软件二次开发|revit二次开发教程|Revit二次开发技术文档...
二次开发 revit二次开发|bim软件二次开发|revit二次开发教程|Revit二次开发技术文档2019-07-08赞( 0 ) 记录一下CAD二次开发的一些简单实例. 1.helloworld ...
- Revit 及 Revit二次开发入门笔记
加入BIM相关行业后,虽然是个门外汉,但是还是下决心好好钻研,尽快创造些价值. BIM中很关键的软件Revit已下载.我下载的是2017版本,看了几节Revit视频教程,算是有了初步的了解.因为我的工 ...
- Revit二次开发(Revit2019+VS2017)-【NO.01】开发流程简述
Revit二次开发流程简述 一.软件的安装及配置 软件的下载与安装 软件的配置 配置AddInManager 配置RevitLookUp 检验是否配置成功 二.创建项目新建Visusl Studio项 ...
- Revit二次开发--明细表导出
这是我Revit二次开发的第一个成功的案例,代码有点拙劣,目的只为记录自己的历程. [Transaction(TransactionMode.Manual)] public class Class1 ...
- Revit二次开发 - C#程序员的佳好选择
虽然Revit的使用者和开发目前在中国都很少,但是这是个趋势. 未来Revit会在许多方面取代Autocad 做CAD二次开发的,在中国也很吃香. 但是使用C++难倒了许多人. 而Revit二次开发可 ...
最新文章
- jfinal mysql增删改查_Jfinal简单实现增删改查
- 使用Mockito时遇到的一些问题
- oracle命令行原理,Oracle命令行操作方式
- jenkins 手动执行_Jenkins Git client插件命令执行漏洞(CVE201910392)
- [转载] Java9发布回顾Java 8的十大新特性
- kettle组件-应用
- 在 HTML 语言中,试题15
- python 加汉明窗_什么是汉明窗?加Hanmming窗的作用?
- 新闻分类(文本分类)
- 电力LED时钟系统解决方案实现精确时间同步
- Java集成快递100的订阅服务和根据物流单号查询物流详情的接口
- git fetch 出错“error:failed to run repack”
- MS-DOC 文件格式概述
- 数字图像处理(入门篇)十四 透视变换
- 解决Echarts柱形图正负数在同一侧,并设置正负值不同颜色
- 第四章web服务器之httpd
- docker搭建 JRebel 验证服务器 和 IDEA 验证服务器
- 六、【中级篇】看门狗(watch dog)
- 浏览器显示”SSL证书无效”怎么办
- vue报错/ style-loader: Adds some css to the DOM by adding a style tag
热门文章
- 机械制图国家标准的绘图模板_从制图到数字制图,你知道真相吗
- 肺腑之言-写给喜欢单片机的初学者
- 十分钟搞清字符集和字符编码
- 声卡是HDA Intel,芯片为IDT 92HD81B1C5的ubuntu12.04下声音很小的解决方法
- Python爬虫 - 02.实现贴吧签到
- 飞信2008协议抓包(2)
- 计算机电源检测软件,电脑电源检测工具
- linux 安装qq2014,Ubuntu14.04安装wine QQ
- 利用selenium 实现对百度图片搜索中的图片的抓取
- EasyRecovery2020数据恢复软件激活码序列号秘钥下载及使用恢复教程