应用Revit结合CAD图纸生成地形实体和地质模型

    由于本人是岩土工程,研究方向主要偏向于支挡防护工程,不可避免要在BIM软件中进行地形实体的构建。经过资料的搜集和整理,发现利用Revit的Dynamo可以进行操作。但是利用Dynamo 节点搭建的脚本需要读取高程点的资料,而我手中没有高程点的数据,经过各种咨询并查询相关插件未果,决定自己编写针对CAD地形图生成高程点的插件,先放插件代码图。


                // 开启事务处理
                using (Transaction trans = db.TransactionManager.StartTransaction())
                {
                    List polylines = new List();
                    //筛选等高线
                    TypedValue[] typedValue =
                    {
                        new TypedValue((int) DxfCode.Operator,"" ),
                    };
                    PromptSelectionOptions promptSelection = new PromptSelectionOptions();
                    promptSelection.MessageForAdding = "请选择等高线";
                    SelectionFilter selection = new SelectionFilter(typedValue);
                    var selectionResult = ed.GetSelection(promptSelection, selection);
// 判断选择是否成功
                    if (selectionResult.Status == PromptStatus.OK)
                    {
                        var workbook = new XLWorkbook();
                        var sheet = workbook.AddWorksheet("开始");
                        workbook.SaveAs(@"C:\Users\wangjiaran\Desktop\新建文件夹\123.xlsx");	                        
                        SelectionSet aaDGX = selectionResult.Value;
                        int nCount = aaDGX.Count;
                        ObjectId[] objectIds = aaDGX.GetObjectIds();//通过Id对实体进行操作
                        for (int i = 0; i < nCount; i++)
                        {
                            var sheet0 = workbook.AddWorksheet("高程点" + i);
                            string[] header = { "X", "Y", "Z" };
                            var row1 = sheet0.FirstRow();
                            row1.Cell(1).Value = header[0];
                            row1.Cell(2).Value = header[1];
                            row1.Cell(3).Value = header[2];
                            // 获取多段线实体对象
                         Polyline pLine = trans.GetObject(objectIds[i], OpenMode.ForRead) as Polyline;
                            //多线段是否闭合 pline.Closed
                            string isclosed = pLine.Closed.ToString();
                            //多线段起始点 pline.StartPoint
                            //多线段结束点 pline.EndPoint
//多段线顶点数
                            int vertexNum = pLine.NumberOfVertices;
                            Point3d point;
                            // 遍历获取多段线顶点坐标
                            for (int j = 0; j < vertexNum; j++)
                            {point = pLine.GetPoint3dAt(j);
                                var row = sheet0.Row(j + 2);
                                string contx = point.X.ToString();
                                string conty = point.Y.ToString();
                                string contz = point.Z.ToString();
                                row.Cell(1).Value = contx;
                                row.Cell(2).Value = conty;
                                row.Cell(3).Value = contz;
                                workbook.Save();
                            }
                        }
                    }
                    trans.Commit();
              

注意的是调用了ClosedXML 程序包,输出Excel格式如图示。

应用Revit结合CAD图纸生成地形实体和地质模型_第1张图片

保存文件后打开Revit,利用Dynamo编写脚本,如图示。 

应用Revit结合CAD图纸生成地形实体和地质模型_第2张图片

                                                                 创建地形点第1 部分

应用Revit结合CAD图纸生成地形实体和地质模型_第3张图片

 创建地形点第2部分

注意:1.若Excel有非数字信息,在生成点的时候会报错,需要对列表进行更多处理。我选择的是对Excel进行修改,由于是插件写出的Excel,其录入格式是固定的,可以在sheet选卡右击,选择全部sheet,然后删去表头,可解决点位报错问题。2.若点有重复,在生成三角网格是也会报错。

        在第一步的基础上,我们已经在Dynamo中创建了等高线的几何点,利用这些几何点进行拓扑,生成三角网格曲面。将三角网格曲面输入安装的PolySurface节点包,进而生成波利曲面。将曲面的边缘投影在一个高程低于曲面最低点的平面上和一个高程高于曲面最高点的平面上,将两条投影得到的轮廓线融合成几何体,利用Split进行剪切,获得目标几何体。

        在面对点重复,无法生存三角网格的问题上,由于所包含的点位过多,对计算机处理的负担过大,所以进行了简化操作。利用PruneDuplicates节点,对一定区域内的点进行剔除。传入所有的点,传入密度区间(一个代表直径是几米的数值)。即可将数据进行简化,即降低了数据的密度,也解决了问题。注意的是如果简化区域过大,会导致信息缺失,地形模型会出现较大误差。

具体操作见下图。

应用Revit结合CAD图纸生成地形实体和地质模型_第4张图片

 生成地形表面和实体(1)

应用Revit结合CAD图纸生成地形实体和地质模型_第5张图片

 生成地形表面和实体(2)

完成了上述步骤,实体地形也就创建完成了,对于地层的分割可以参照这一设计思路,李彤Split节点进行操作,下面是成果图。

应用Revit结合CAD图纸生成地形实体和地质模型_第6张图片

 某地区工程实例1

应用Revit结合CAD图纸生成地形实体和地质模型_第7张图片

 某地区工程实例2

欢迎大家提出宝贵意见,科研路上是孤军奋战。

你可能感兴趣的:(BIM,地质模型,visual,studio,c#,小程序,其他)