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

代码文件

【话不多说,上代码】

 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;
            }

效果展示

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

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值