Jelajahi Sumber

优化修改报告程序“排列图”Grid显示颗粒的算法,修改排列图中显示颗粒位置间距过远或者显示错误的问题

zhangjiaxin 2 tahun lalu
induk
melakukan
fca2c54f50

+ 1 - 1
Bin/x64/Debug/Config/ProData/lj.psf

@@ -1,2 +1,2 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<XMLData FileMark="626" Name="LiJi1" Sizes="0,0.5,1,2,5,30,100" Version="1.1.1" />
+<XMLData FileMark="626" Name="LiJi1" Sizes="0.5,1,2,5,30,100" Version="1.1.1" />

+ 2 - 5
OTSIncAReportApp/1-UI/Control_Graph/Controls/Control_DrawDistrbutionSortImage.cs

@@ -1201,12 +1201,9 @@ namespace OTSIncAReportGraph.Controls
                         }
 
                     }
-
                 }
             }
 
-
-
             //循环分栏grid,对各分栏grid进行摆放
             for (int i = 0; i < m_list_sortparticledistribution.Count(); i++)
             {
@@ -1221,12 +1218,12 @@ namespace OTSIncAReportGraph.Controls
                     ls_height = m_list_sortparticledistribution[i - 1].RectF.Y +
                         m_list_sortparticledistribution[i - 1].RectF.Height - 10;
                 }
-
                 m_list_sortparticledistribution[i].RectF = new RectangleF(
                     m_list_sortparticledistribution[i].RectF.X,
                     m_list_sortparticledistribution[i].RectF.Y + ls_height,
                     m_list_sortparticledistribution[i].RectF.Width,
-                    m_list_sortparticledistribution[i].GetSortGridHeight() + 50);//为每栏的高度增加了50补充,防止图像溢出
+                    m_list_sortparticledistribution[i].GetSoirtRealGridHeiht()
+                    /*m_list_sortparticledistribution[i].GetSortGridHeight()*/ + 50);//为每栏的高度增加了50补充,防止图像溢出
             }
 
             //然后再重新对分栏grid中的颗粒,重新进行摆放

+ 53 - 1
OTSIncAReportApp/1-UI/Control_Graph/OTSIncAReportGraphFuncation/SortParticleDistribution.cs

@@ -158,6 +158,46 @@ namespace OTSIncAReportGraph
             return i_SortGridHeight;
         }
 
+
+        /// <summary>
+        /// 获取计算Grid分栏的高度(排列图)zjx
+        /// </summary>
+        /// <returns></returns>
+        public float GetSoirtRealGridHeiht()
+        {
+
+            //设置增长的x,y轴值,+3是跳过边框的位置, 可能有个别情况,会在右侧突出占到边框的位置上
+            float f_ls_x = this.m_rectf.X + 3;
+            float f_ls_y = this.m_rectf.Y + 3;
+            float rectf_height = 0;
+            foreach (DisplayParticle dp in this.list_dparticle)
+            {
+                //判断颗粒是否显示
+                if (dp.GetPaintState() != PaintState.NOPAINT)
+                {
+                    //判断颗粒位置是否超过Grid边界
+                    if ((f_ls_x + dp.GetShowRect().Width + 6) > this.m_rectf.Width + this.m_rectf.X)
+                    {
+                        //还原x到该分栏Grid的左边框+3的位置,并且将y轴定位到下一高度的y轴位置
+                        f_ls_x = this.m_rectf.X + 3;
+                        f_ls_y = f_ls_y + rectf_height + 10;
+                    }
+                    //找到每行最长的颗粒
+                    if (rectf_height < dp.GetShowRect().Height)
+                    {
+                        rectf_height = dp.GetShowRect().Height;
+                    }
+                    //定位好该多边形后,对x轴进行增长,为下一个多边形定位好位置
+                    f_ls_x = f_ls_x + dp.GetShowRect().Width + 3;
+                }
+            }
+            //输出Y的高加上最后一行最长颗粒的高,得到Grid分栏所需要的高
+            return  f_ls_y + rectf_height;
+        }
+
+        
+
+
         /// <summary>
         /// 根据传入的2个多边形list,从大到小进行排序,两个多边形list通过guid保持一致
         /// 主要用于计算list与old_list能进行相同顺序的排序
@@ -335,6 +375,8 @@ namespace OTSIncAReportGraph
             //设置增长的x,y轴值,+3是跳过边框的位置, 可能有个别情况,会在右侧突出占到边框的位置上
             float f_ls_x = this.m_rectf.X + 3;
             float f_ls_y = this.m_rectf.Y + 3 ;
+
+            float rectf_height = 0;
             foreach (DisplayParticle dp in this.list_dparticle)
             {
                 //这里要对不显示的颗粒进行屏蔽,也就是进行不计算位置,不知道会不会有其它的影响
@@ -349,8 +391,18 @@ namespace OTSIncAReportGraph
                     {
                         //还原x到该分栏Grid的左边框+3的位置,并且将y轴定位到下一高度的y轴位置
                         f_ls_x = this.m_rectf.X + 3 ;
-                        f_ls_y = f_ls_y + this.GetSortGridHeight() / this.GetDParticleRowNumber() - 5;//在获取高度时,已经+10,所以这里再-5,颗粒近一些
+
+                        f_ls_y = f_ls_y + rectf_height + 10;
+
+                        //f_ls_y = f_ls_y + this.GetSortGridHeight() / this.GetDParticleRowNumber() - 5;//在获取高度时,已经+10,所以这里再-5,颗粒近一些
+                    }
+
+                    if (rectf_height< dp.GetShowRect().Height)
+                    {
+                        rectf_height = dp.GetShowRect().Height;
                     }
+                    
+                    
 
                     //计算出与定位的Grid的差值,然后重新排序线,用分栏Grid-颗粒的外Rect,取到x,y的差值
                     float f_cz_x = f_ls_x - dp.GetShowRect().X;