昨天是参加工作整一年的好日子,在这一年中逐步开始接触C#和Revit二次开发,困扰和BUG伴随着整个学习过程。由于Revit二次开发的资料和课程不多,很多情况下都是依靠博客、技术贴和QQ群里的大神等方法度过难关。在此开始撰写博客,一是总结归纳开发过程中的所感所得,二是回报大众,共同进步。
大量的重复性工作会严重地影响效率和工作心情,这里就突出了批量修改的重要作用(请忽略logo的丑,大汗)。为了找到解决办法,咨询了不少大神,这里想要感谢一下“站楼顶望天空”,谢谢大神给予的提示和帮助。批量修改包含的方面有族名称、族类型名称、族参数、族材质等,今天只总结一下族名称和族类型名称的批量修改。修改的思路很简单,就是类似于word中的查找和替换,如图2所示,只要输入替换和被替换的内容,选择相应的族实例即可。

修改族名称在Revit中有两种思路,一种是在项目中修改,一种是在族编辑器中修改。在项目中修改需要获取项目文档,而在族编辑器中修改一般需要获取项目文档和族文档(族编辑器为FamilyManager)。
所有对族的修改必须要在相应的事务中进行。要在事件响应中修改文档,必须显式地启动一个事务,在该事务中修改文档。如果是在事件中打开事务,则事务必须在该事件响应结束前被关闭(提交或者撤销),否则在该事务中的所做的所有的修改都会被丢弃(本段摘自《二次开发基础教程》P27 同济大学出版社,给本书点个赞,真的是小白必备)。
1、族名称批量修改

        /// <summary>/// 族名称批量替换修改/// </summary>/// <param name="app"></param>public void ReplaceFamilyName(UIApplication app){UIDocument uidoc = app.ActiveUIDocument; //取得文档Document doc = uidoc.Document;//取得选择的元素Selection sel = app.ActiveUIDocument.Selection;try{var ref1 = sel.PickObjects(ObjectType.Element, "请选择模型构件");if (0 == ref1.Count){TaskDialog.Show("Revit", "你没有选任何元素.");}else{//调用文本框中的值string contentValue = MessageForm.contentValue;string replaceValue = MessageForm.replaceValue;//修改选中的族实例foreach (var reference in ref1){Element elem = doc.GetElement(reference);if (elem != null){//获得族实例FamilyInstance familyInstance = elem as FamilyInstance;FamilySymbol symbol = familyInstance.Symbol;Family family = symbol.Family;//在事务中修改文档Transaction trans = new Transaction(doc);trans.Start("changeFamilyName");family.Name = family.Name.Replace(contentValue, replaceValue);symbol.Name = symbol.Name.Replace(contentValue, replaceValue);trans.Commit();}}}}catch (Exception ex){TaskDialog.Show("info", ex.ToString());}}

族类型名称的修改和族名称大同小异,但是需要注意的是每个族实例对应的只有一个族名称,但是却可能会存在多个族类型。因此首先需要得到一个已加载的族类型(FamilySymbol)的组,这里再次强调下修改族类型可以在项目中和族管理器中进行,两者分别是依据FamilySymbol类和FamilyType类,需要注意区分。而想要得到族类型组,最好的方法就是通过元素过滤器取得(参考书P148)。另外需要注意的是修改后的族类型名称有可能和现有的族类型名称冲突,需要加以判断。不冲突的话可以使用复制方法(Duplicate),冲突的话直接切换成已有的族类型名称即可(ChangeTypeId)。目前经过我的尝试,改变族类型的方法只有通过ChangeTypeId,依据族类型的ID方可进行修改。
2、族类型名称批量修改

        /// <summary>/// 族类型名称批量替换修改/// </summary>/// <param name="app"></param>public void ReplaceSymbolName(UIApplication app){UIDocument uidoc = app.ActiveUIDocument; //取得文档Document doc = uidoc.Document;//取得选择的元素Selection sel = app.ActiveUIDocument.Selection;try{var ref1 = sel.PickObjects(ObjectType.Element, "请选择模型构件");if (0 == ref1.Count){TaskDialog.Show("Revit", "你没有选任何元素.");}else{//调用文本框中的值string contentSymbolValue = MessageForm.contentSymbolValue;string replaceSymbolValue = MessageForm.replaceSymbolValue;//修改选中的族实例foreach (var reference in ref1){Element elem2 = doc.GetElement(reference);if (elem2 != null){//获得族实例FamilyInstance familyInstance2 = elem2 as FamilyInstance;FamilySymbol symbol = familyInstance2.Symbol;Family family = symbol.Family;Transaction trans = new Transaction(doc);trans.Start("changeFamilyName");if (symbol.Name.Contains(contentSymbolValue)){string changedSymbolName = symbol.Name.Replace(contentSymbolValue, replaceSymbolValue);ElementType familySymbol = null;    //新建的族类型ElementId elementId = null;//得到一个已加载的族类型(FamilySymbol)的组FilteredElementCollector collectorSymbol = new FilteredElementCollector(doc);IList<Element> symbols = collectorSymbol.OfClass(typeof(FamilySymbol)).ToElements();bool symbolExist = false;foreach (var item in collectorSymbol){if (item.Name == changedSymbolName){symbolExist = true;elementId = item.Id;}}//判断替换后的族类型名称是否已经存在,分别处理if (symbolExist){familyInstance2.ChangeTypeId(elementId);      //依据ID改变族类型}else{familySymbol = symbol.Duplicate(changedSymbolName);     //复制生成新的族类型elementId = familySymbol.Id;     //获取新的族类型的IDfamilyInstance2.ChangeTypeId(elementId);      //依据ID改变族类型}}trans.Commit();}}}} catch (Exception ex){TaskDialog.Show("info", ex.ToString());}}

新手之作,有错误或者改进之处欢迎大家指正,当然有不懂的地方大家也可以一起交流,努力!

Revit二次开发之批量修改族名称及族类型名称相关推荐

  1. revit二次开发之批量打开族文档,样板文件,项目文件

    欢迎加入BIM行业开发交流1群 群号:711844216(满),二群群号:1016453207 1背景 小伙伴们在做revit二次开发的时候,可能需要通过程序去打开指定的族文档,样板文件,或者项目文件 ...

  2. Revit二次开发之判断一个族实例是否基于面创建【比目鱼原创】

    =========[更多高级应用请关注公众号]======== =================================== Revit中有些族是不基于面创建,有些族是基于面创建(如环形吸顶 ...

  3. Revit二次开发—获取并修改指定标高

    关注公众号及时获取文章更新 FilteredElementCollector collector = new FilteredElementCollector(doc); List<Elemen ...

  4. 【Revit 二次开发 】创建带箭头的文字注释(字体设置+引线箭头设置)

    此篇文章仅是自己的开发经验分享,不具备官方参考价值,如有不足,欢迎批评指正 开发目的: 创建一个带箭头的文字注释 字体为新宋体,大小2.5mm,宽度系数0.7,箭头为30度实心箭头 like this ...

  5. Revit二次开发——族库管理插件的开发思路

    Revit二次开发--族库管理插件的开发思路 成熟的BIM团队都会有自己的族库及项目样板文件 在项目样板中载入常用的族及配置好管道系统为项目节约了初始环节的时间 然鹅,项目开展阶段仍需载入新的族 或是 ...

  6. Revit二次开发—载入族并交互式放置

    文章目录 核心代码 问题一:按esc取消放置时报错 问题二:如何在放置一个族实例之后退出放置 问题三:已存在所载入族时,如何正常放置 参考资料 核心代码 using (Transaction tx = ...

  7. Revit二次开发之族库管理系统

    一.背景 很多小伙伴都想制作族库管理系统,但又不知从何下手,这里骑士给大家分享一下骑士做的族库管理系统,以及用到的一些技术点吧.感兴趣可以加入Q群711844216,有完整的族库开发教学. 二.技术点 ...

  8. revit二次开发--异形柱翻模

    最近写了一个revit二次开发的异形柱翻模的功能,柱子翻模网上有很多插件可以用,我用的比较多的是红瓦,其中异形柱的翻模对于图纸的要求较高,有很多不准确的地方.很多异形柱,整体翻模出来是错误的,翻出来之 ...

  9. Revit二次开发从入门到精通学习之路, (含Revit二次开发教程下载)

    Revit二次开发从入门到精通学习之路 Autodesk Joe Ye叶雄进 2. 18 2014    yexiongjin@hotmail.com Revit在国内的应用越来越广泛, Revit ...

最新文章

  1. 影像组学视频学习笔记(30)-SMOTE解决数据不平衡的问题、Li‘s have a solution and plan.
  2. SQL中的left outer join,inner join,right outer join用法
  3. 两数相加python代码实现(leetcode2)
  4. SpringBoot静态资源配置原理(源码)
  5. anaconda的简单使用教程(虚拟环境安装)
  6. 人工智能进行时:人类的未来与未来的人类
  7. Android多媒体框架图
  8. (转载)每位开发人员都应铭记的10句编程谚语
  9. 搜索的逻辑即是用户的逻辑
  10. 酷Q萌萌机器人_替代qqbot,使用酷q机器人实现qq机器人
  11. 视频教程-excel VBA编程番外篇(字典+正则表达式+FSO)-Office/WPS
  12. am3352 安装ssl
  13. 自学c语言要下载什么软件下载,你学c语言用的什么app?
  14. Gym - 100886B 2015-2016 Petrozavodsk Winter Training Camp, Saratov SU Contest B - Game on Bipartite
  15. PCB的板层设计和布线
  16. 精通Matlab数字图像处理与识别nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
  17. 扇贝python编程课 百度云,扇贝编程python课程分享
  18. Dnguard旗舰版代加密加壳服务 20/次
  19. android 版本更新和下载安装适配7.0 8.0 9.0
  20. ElasticSearch--索引与类型

热门文章

  1. html圆形图片怎么加白边框,带图片,带文字,有白边框的这种图片怎么制作的?...
  2. 【干货】Android系统定制基础篇:第十三部分(开放root权限、禁止应用旋转、隐藏状态栏和导航栏)
  3. ubuntu14.04加mac实现键鼠共享(Mouse and Keyboard Sharing)的方法及尝试
  4. revit2014项目样板_HTML5模板:适用于任何项目的基本样板
  5. Hibernate 实体 MySql 关键字问题处理
  6. Linux内核基础——Linux源码阅读工具Source Insight4.0
  7. 多个短视频+背景音乐合成
  8. Koodo Reader Mac开源免费Epub阅读器2020-10-24
  9. 人生原理 之 学习论
  10. 【实战】——基于机器学习回归模型对广州二手房价格进行分析及模型评估