ソースを参照

mxg:导出墙边界取底边;MEPCurve读取参数:注释;执行完成后删除模型文件

mengxiangge 5 年 前
コミット
7606e1f1bd

+ 5 - 1
Dispatcher/Client/Start/RevitCmdExecutor.cs

@@ -49,7 +49,11 @@ namespace Client.Start
                 process.Close();//结束
                 msg = ReadResultString(resultFilePath);
                 Console.WriteLine(DateTime.Now + " 命令执行完成:" + revitCmd);
-
+                //执行完成后,删除文件
+                foreach (var f in filePathList)
+                {
+                    File.Delete(f);
+                }
             }
             catch (Exception e)
             {

+ 23 - 1
Executer/DataExport/RevitToJBim/Common/RevitUtil.cs

@@ -114,6 +114,28 @@ namespace RevitToJBim.Common
 
             return parameters;
         }
+        /// <summary>
+        /// 获取设备设施的参数
+        /// </summary>
+        /// <param name="space"></param>
+        /// <returns></returns>
+        public static List<Parameter> GetMEPCurveParameters(MEPCurve curve)
+        {
+            List<string> parameterNames = new List<string>() { MBIBuiltInParameterName.MEPCurveComments};
+            List<Parameter> parameters = new List<Parameter>();
+            foreach (var parameterName in parameterNames)
+            {
+                var revitParameter = curve.GetParameter(parameterName);
+                if (revitParameter != null)
+                {
+                    var parameter = new Parameter(ParameterUtil.FindParameterDefine(parameterName));
+                    parameter.Value = revitParameter.AsString();
+                    parameters.Add(parameter);
+                }
+            }
+
+            return parameters;
+        }
 
         /// <summary>
         /// 获取部件所关联的设备
@@ -230,7 +252,7 @@ namespace RevitToJBim.Common
              */
             List<List<XYZ>> polygons = new List<List<XYZ>>();
             #region 过滤墙的顶面         
-            List<PlanarFace> faces = wall.GetTopFaces();
+            List<PlanarFace> faces = wall.GetBottomFaces();
             #endregion
             foreach (PlanarFace face in faces)
             {

+ 2 - 0
Executer/DataExport/RevitToJBim/ComponentParse/ParseDuct.cs

@@ -54,6 +54,8 @@ namespace RevitToJBim.ComponentParse
             Polygon outLine = new Polygon(locations);
             jDuct.OutLine.Add(outLine);
             context.AddBimObject(jDuct);
+            //Parameters
+            jDuct.Parameters = RevitUtil.GetMEPCurveParameters(duct);
             #region 关联数据处理相关
             #region 系统关系
             var pipeId = duct.Id.ToString();

+ 2 - 0
Executer/DataExport/RevitToJBim/ComponentParse/ParsePipe.cs

@@ -56,6 +56,8 @@ namespace RevitToJBim.ComponentParse
             Polygon outLine = new Polygon(locations);
             jPipe.OutLine.Add(outLine);
             context.AddBimObject(jPipe);
+            //Parameters
+            jPipe.Parameters = RevitUtil.GetMEPCurveParameters(pipe);
             #region 关联数据处理相关
             #region 系统关系
             var pipeId = pipe.Id.ToString();

+ 25 - 6
Executer/DataExport/RevitToJBim/Extension/WallExtension.cs

@@ -19,21 +19,40 @@ namespace RevitToJBim.Extension
 {
     public static class WallExtension
     {
-        public static List<PlanarFace> GetTopFaces(this Wall wall)
+        /// <summary>
+        /// 获取墙底面的轮廓,主要处理门窗分割墙问题
+        /// </summary>
+        /// <param name="wall"></param>
+        /// <returns></returns>
+        public static List<PlanarFace> GetBottomFaces(this Wall wall)
         {
-            var solids = Extension.GeometryElementExtension.GetSolids(wall, wall.Document.GetUseView());
+            var solids = Extension.GeometryElementExtension.GetSolids(wall);
             //var topZ = wall.GetTopStaticHeight();
-            //比较最大值不靠谱,取当前面中高度最高的
-            double topZ = double.MinValue;
+            
+            
+            double volume = double.MinValue;
             List<PlanarFace> faces = new List<PlanarFace>();
             foreach (var solid in solids)
             {
+                var tempVolume = solid.Volume;
+                double topZ = double.MaxValue;
+                //取体积最大的Solid
+                if (tempVolume.IsThan(volume))
+                {
+                    volume = tempVolume;
+                    faces.Clear();
+                }
+                else
+                {
+                    continue;
+                }
                 foreach (Face face in solid.Faces)
                 {
-                    if (face is PlanarFace planarFace && planarFace.FaceNormal.IsEqual(XYZ.BasisZ))
+                    if (face is PlanarFace planarFace && planarFace.FaceNormal.IsEqual(-XYZ.BasisZ))
                     {
                         var tempZ = planarFace.Origin.Z;
-                        if (tempZ.IsThan(topZ))
+                        //取底面FaceNormal为(0,0,-1),Z最小
+                        if (tempZ.IsLess(topZ))
                         {
                             faces.Clear();
                             topZ = tempZ;

+ 11 - 0
Executer/DataExport/RevitToJBim/MBI/MBIBuiltInParameterName.cs

@@ -29,5 +29,16 @@ namespace RevitToJBim.MBI
         /// 空间编号
         /// </summary>
         public readonly static string SpaceNumber = "编号";
+
+        /// <summary>
+        /// 管道-注释
+        /// </summary>
+        public readonly static string MEPCurveComments = "注释";
+
+
+        /// <summary>
+        /// 管道-标记
+        /// </summary>
+        public readonly static string MEPCurveNumber = "标记";
     }
 }