代码文件

【话不多说,上代码】

 try{//句柄UIDocument uidoc = commandData.Application.ActiveUIDocument;Document doc = uidoc.Document;//让用户选择需要算量的构件;TaskDialog.Show("提示信息", "请先框选需要汇总工程量的构件,完成后单机左上角的完成按钮!");IList<Reference> referList = uidoc.Selection.PickObjects(Autodesk.Revit.UI.Selection.ObjectType.Element,"请框选需要选中的构件");List<Element> elementList = new List<Element>();foreach (Reference refer in referList){Element referElement = doc.GetElement(refer.ElementId);elementList.Add(referElement);}//初始化数据List<Element> wallList = new List<Element>();double wallVolume = 0.000;string wallInfo = "【构件名称】" + "----" + "【构件ID】" + "----" + "【构件体积】" + "\t\n";List<Element> columnList = new List<Element>();double columnVolume = 0.000;string columnInfo = "【构件名称】" + "----" + "【构件ID】" + "----" + "【构件体积】" + "\t\n";List<Element> beamList = new List<Element>();double beamVolume = 0.000;string beamInfo = "【构件名称】" + "----" + "【构件ID】" + "----" + "【构件体积】" + "\t\n";List<Element> floorList = new List<Element>();double floorVolume = 0.000;string floorInfo = "【构件名称】" + "----" + "【构件ID】" + "----" + "【构件体积】" + "\t\n";List<Element> stairList = new List<Element>();double stairVolume = 0.000;string stairInfo = "【构件名称】" + "----" + "【构件ID】" + "----" + "【构件体积】" + "\t\n";List<Element> foundationList = new List<Element>();double foundationVolume = 0.000;string foundationInfo = "【构件名称】" + "----" + "【构件ID】" + "----" + "【构件体积】" + "\t\n";List<Element> roofList = new List<Element>();double roofVolume = 0.000;string roofInfo = "【构件名称】" + "----" + "【构件ID】" + "----" + "【构件体积】" + "\t\n";List<Element> genericList = new List<Element>();double genericVolume = 0.000;string genericInfo = "【构件名称】" + "----" + "【构件ID】" + "----" + "【构件体积】" + "\t\n";List<Element> elseList = new List<Element>();string elseInfo = "【构件名称】" + "----" + "【构件ID】" + "\t\n";//判断构件类型,统计构件体积foreach (Element elem in elementList){string name = elem.Category.Name.ToString();//计算墙体体积if (name == "墙"){wallList.Add(elem);wallInfo += (elem.Name.ToString() + "----" + elem.Id.ToString() + "----");foreach (Parameter para in elem.Parameters){if (para.Definition.Name == "体积"){wallVolume += double.Parse(para.AsValueString());wallInfo += (para.AsValueString() + "\t\n");}}}//计算结构柱体积if (name == "结构柱"){columnList.Add(elem);columnInfo += (elem.Name + "----" + elem.Id.ToString() + "----");foreach (Parameter para in elem.Parameters){if (para.Definition.Name == "体积"){columnVolume += double.Parse(para.AsValueString());columnInfo += para.AsValueString() + "\t\n";}}}//计算结构框架体积if (name == "结构框架"){beamList.Add(elem);beamInfo += (elem.Name + "----" + elem.Id.ToString() + "----");foreach (Parameter para in elem.Parameters){if (para.Definition.Name == "体积"){beamVolume += double.Parse(para.AsValueString());beamInfo += (para.AsValueString() + "\t\n");}}}//计算楼板体积if (name == "楼板"){floorList.Add(elem);floorInfo += (elem.Name + "----" + elem.Id.ToString() + "----");foreach (Parameter para in elem.Parameters){if (para.Definition.Name == "体积"){floorVolume += double.Parse(para.AsValueString());floorInfo += (para.AsValueString() + "\t\n");}}}//计算楼梯体积if (name == "楼梯"){ICollection<ElementId> stairIds = elem.GetMaterialIds(false);foreach (ElementId stairId in stairIds){stairList.Add(elem);foreach (Parameter para in elem.Parameters){if (para.Definition.Name == "族与类型"){stairInfo += (para.AsValueString() + "----");}}stairInfo += elem.Id.ToString() + "----";stairVolume += (elem.GetMaterialVolume(stairId) * 0.3048 * 0.3048 * 0.3048);stairInfo += ((elem.GetMaterialVolume(stairId) * 0.3048 * 0.3048 * 0.3048).ToString("0.000") + "\t\n");}}//计算结构基础体积if (name == "结构基础"){foundationList.Add(elem);foundationInfo += (elem.Name + "----" + elem.Id.ToString() + "----");foreach (Parameter para in elem.Parameters){if (para.Definition.Name == "体积"){foundationVolume += double.Parse(para.AsValueString());foundationInfo += (para.AsValueString() + "\t\n");}}}//计算屋顶体积if (name == "屋顶"){roofList.Add(elem);roofInfo += (elem.Name + "----" + elem.Id.ToString() + "----");foreach (Parameter para in elem.Parameters){if (para.Definition.Name == "体积"){roofVolume += double.Parse(para.AsValueString());roofInfo += (para.AsValueString() + "\t\n");}}}//计算常规模型体积if (name == "常规模型"){genericList.Add(elem);foreach (Parameter para in elem.Parameters){if (para.Definition.Name == "族与类型"){stairInfo += (para.AsValueString() + "----");}}stairInfo += (elem.Id.ToString() + "----");foreach (Parameter para in elem.Parameters){if (para.Definition.Name == "体积"){genericVolume += double.Parse(para.AsValueString());genericInfo += (para.AsValueString() + "\t\n");}}}//其他构件的显示if (name != "墙" && name != "结构柱" && name != "结构框架" && name != "楼板"&& name != "楼梯" && name != "结构基础" && name != "屋顶" && name != "常规模型"){elseList.Add(elem);foreach (Parameter para in elem.Parameters){if (para.Definition.Name == "族与类型"){elseInfo += (para.AsValueString() + "----");}}elseInfo += elem.Id.ToString() + "\t\n";}}//弹出对话框显示汇总结果GetSolidVolume_WPF getSolidVolumeWPF = new GetSolidVolume_WPF(wallList.Count(), wallVolume, wallInfo,columnList.Count(), columnVolume, columnInfo,beamList.Count(), beamVolume, beamInfo,floorList.Count(), floorVolume, floorInfo,stairList.Count(), stairVolume, stairInfo,foundationList.Count(), foundationVolume, foundationInfo,roofList.Count(), roofVolume, roofInfo,genericList.Count(), genericVolume, genericInfo,elseList.Count(), elseInfo);getSolidVolumeWPF.ShowDialog();return Result.Succeeded;}catch (Exception ex){TaskDialog.Show("错误!!!", ex.ToString());return Result.Failed;}

效果展示

这部分内容正在研究,稍后上线

Revit二次开发-【EG01】构件工程量提取相关推荐

  1. Revit二次开发——结构模型构件自动扣减

    **Revit二次开发实例--模型自动扣减** 本文章来源于微信公众号 '有福BIM' 有福BIM的第四篇原创文章! 阅读前望知悉: 我晓得各位读者和粉丝中不乏C#二开大佬 有福作为一个二开新手(编程 ...

  2. pythoncad二次开发视频_revit二次开发|bim软件二次开发|revit二次开发教程|Revit二次开发技术文档...

    二次开发 revit二次开发|bim软件二次开发|revit二次开发教程|Revit二次开发技术文档2019-07-08赞( 0 ) 记录一下CAD二次开发的一些简单实例. 1.helloworld ...

  3. Revit二次开发案例一(第1讲)

    这期起,将为大家带来二次开发的小案例讲解,通过借助Revit建模与二次开发,帮助大家快速提高开发水平,快快参加吧!!! 族实例是通过族类型创建的,而创建族实例是Revit二次开发尤其重要的,因此小伙伴 ...

  4. revit二次开发——如何选取元素(revit2016)

    revit二次开发--如何选取元素(revit2016) 这是我在网上和书中比较写出的代码,可能不是太成熟,希望大家多多指教 using System; using System.Collection ...

  5. Revit二次开发—参数的读取与写入

    关注公众号及时获取文章更新 注:本文转自公众号:BIMCoder梁老师 一.前言 在Revit二次开发中,参数是非常重要的组成部分,那么我们该如何从构件获取参数并修改该参数. 二.方法 首先得到一个E ...

  6. Revit二次开发——自动生成构件图(总结)

    之前测试导出构件图的功能实现,拆分了各模块分布进行测试: Revit二次开发--一键导出构件图(1) Revit二次开发--叠合板自动配筋(2) Revit二次开发--自动标注钢筋思路(3) 本篇为这 ...

  7. Revit二次开发之批量修改族名称及族类型名称

    昨天是参加工作整一年的好日子,在这一年中逐步开始接触C#和Revit二次开发,困扰和BUG伴随着整个学习过程.由于Revit二次开发的资料和课程不多,很多情况下都是依靠博客.技术贴和QQ群里的大神等方 ...

  8. Revit二次开发 如何获得链接CAD中所有的多段线PolyLine?

    项目场景: 最近做的这个项目,涉及到提取链接CAD中的所有多段线,并根据这些多段线的几何信息做一些分析,但是产生了一些意想不到的问题. 问题描述 通过网上流传的提取手段,并不能完全提取CAD中的所有多 ...

  9. Revit二次开发——云服务器

    本文与大家分享Revit插件与云服务器结合能做的一些事 (本篇为个人开发者角度的口水文式闲聊) 对于Revit二次开发插件,云服务器有几个应用点: 在线云族库 插件网络授权 插件的官网 安装包下载程序 ...

  10. 关于Revit二次开发的些许事

    关于Revit二次开发的些许事 关于Revit二次开发的些许事 Revit二次开发方向 岗位需求 哪些公司在招聘Revit研发岗位? 招聘的普遍岗位职责是什么? 岗位要求有哪些? 待遇是不是美丽?! ...

最新文章

  1. 选择排序算法实现思想个人理解
  2. 快速构建Windows 8风格应用6-GridView数据控件
  3. Docker与LXC、虚拟化技术的区别——虚拟化技术本质上是在模拟硬件,Docker底层是LXC,本质都是cgroups是在直接操作硬件...
  4. 暗物质组成原理当然是不存在计算机,暗物质能组成生命吗?小部分暗物质可能会相互作用...
  5. IDEA 项目结构旁边出现 0%classes,0% lines covered
  6. php保存附件到指定服务器,如何在PHP中将电子邮件附件保存到服务器?
  7. 从钱龙数据中读取股票权息信息导入到数据库
  8. 单片机STM8S测量电压电路_单片机电路设计中的10个难点
  9. sonyflake.go
  10. 双11万亿流量下的分布式缓存
  11. 使用Monit监控进程与系统状态
  12. 2016CCPC合肥赛区总结
  13. Python学习-9.Python函数定义
  14. mysql本地连接1045_MySQL密码正确却无法本地登录-1045
  15. php写2048,原生js编写2048小游戏实例代码
  16. libsvm python Linux Ubuntu下编程操作实践
  17. 多导睡眠图(PSG)数据的睡眠阶段分类
  18. Layui 个人博客网站源码 (带运行文档)
  19. 如何重设思科路由器密码并保持配置不丢失?
  20. python迭代是什么意思_python中的迭代是什么意思?

热门文章

  1. 20部商科学生必须看的好莱坞影片
  2. 关于Kubernetes中使用Helm部署应用及私有Helm源搭建的一些笔记
  3. 什么是硬分叉?什么是软分叉?什么是共识就?
  4. window7下安装Docker方法
  5. android滑动自动吸顶效果,安卓当下最流行的吸顶效果的实现(上)
  6. 西米支付:数字藏品支付通道,数字藏品对接支付接口相关知识(供参考)
  7. 渗透测试神器Nessus使用教程
  8. 详解RDD基本概念、RDD五大属性
  9. 在CDH 6.3.1上安装HAWQ 2.4.0
  10. 一本通1602烽火传递