소스 검색

save all the hole images when taking hole image

gsp 2 년 전
부모
커밋
14b0f8f875

+ 10 - 4
OTSIncAMeasureApp/4-OTSSamplespaceGraphicsPanel/CVisualSampleArea.cs

@@ -13,8 +13,10 @@ namespace OTSMeasureApp._4_OTSSamplespaceGraphicsPanel
      
           CRectangleGDIObject m_SampleGDIObject;//
           CRectangleGDIObject m_MeasureGDIObject;//path
-     
-      
+        public  List<CRectangleGDIObject> m_ImageGDIObjects;
+        //BSE图像帧图 为了获取位置与尺寸
+        public  List<CRectangleGDIObject> m_ImageOfFieldGDIObjects;
+
         private List<Point> polygonPathPoints;
         public float GetZoomNum()
         {
@@ -32,8 +34,12 @@ namespace OTSMeasureApp._4_OTSSamplespaceGraphicsPanel
 
             //测量区域
             m_MeasureGDIObject =  new CRectangleGDIObject();
-           
-       
+
+
+            m_ImageGDIObjects = new List<CRectangleGDIObject>();
+            m_ImageOfFieldGDIObjects = new List<CRectangleGDIObject>();
+
+
         }
 
         public CRectangleGDIObject GetSampleGDIObject()

+ 110 - 65
OTSIncAMeasureApp/4-OTSSamplespaceGraphicsPanel/OTSSamplespaceWindow.cs

@@ -42,9 +42,9 @@ namespace OTSMeasureApp
 
 
         //BSE图像
-        public static List<CRectangleGDIObject> m_ImageGDIObjects;
-        //BSE图像帧图 为了获取位置与尺寸
-        public static List<CRectangleGDIObject> m_ImageOfFieldGDIObjects;
+        public  List<CRectangleGDIObject> m_AllHoleImageGDIObjects;
+        ////BSE图像帧图 为了获取位置与尺寸
+        public  List<CRectangleGDIObject> m_AllHoleImageOfFieldGDIObjects;
         //手绘测量区域
         public static CRectangleGDIObject m_DrawMeasureGDIObject=new CRectangleGDIObject();
  
@@ -141,6 +141,7 @@ namespace OTSMeasureApp
             //手绘测量区域类型为圆形
             m_DrawMeasureType = CreateRectangleType.Circle;
             m_IsDrawMeasure = true;
+            m_DrawMeasureGDIObject = null;
             this.Cursor = Cursors.Hand;
         }
         /// <summary>
@@ -152,6 +153,7 @@ namespace OTSMeasureApp
             m_DrawMeasureType = CreateRectangleType.SampleBackGround_Rectangle;
          
             m_IsDrawMeasure = true;
+            m_DrawMeasureGDIObject = null;
             this.Cursor = Cursors.Hand;
         }
         /// <summary>
@@ -161,7 +163,7 @@ namespace OTSMeasureApp
         {
             m_DrawMeasureType = CreateRectangleType.Polygon;
             m_IsDrawMeasure = true;
-       
+            m_DrawMeasureGDIObject = null;
             this.Cursor = Cursors.Hand;
         }
 
@@ -173,7 +175,7 @@ namespace OTSMeasureApp
             //手绘测量区域类型为圆形
             m_DrawMeasureType = CreateRectangleType.CircleByThreePoints;
             m_IsDrawMeasure = true;
-      
+            m_DrawMeasureGDIObject = null;
             this.Cursor = Cursors.Hand;
         }
         public void DrawRingShapeArea()
@@ -280,7 +282,8 @@ namespace OTSMeasureApp
                 case "ShootBSEPicture":
                     //设置消息类型 拍摄样品孔
                     m_MeasureAppForm.SetRunType(MSR_RUN_TYPE.RUNSampleHoleImage);
-                   
+
+                    TransferBseImageToWindow();
                     //清除原图片信息
                     DeleteHoleBSEImageDataNoMessageBox();
                   
@@ -817,13 +820,13 @@ namespace OTSMeasureApp
                 m_visualStage = new CVisualStage();
 
                 m_visualSamples = new List<CVisualSampleArea>();
-              
-       
-                //样品孔BSE图像
-                m_ImageGDIObjects = new List<CRectangleGDIObject>();
-                //BSE图像帧图为了获取位置与尺寸
-                m_ImageOfFieldGDIObjects = new List<CRectangleGDIObject>();
-      
+
+
+            //样品孔BSE图像
+            m_AllHoleImageGDIObjects = new List<CRectangleGDIObject>();
+            //BSE图像帧图为了获取位置与尺寸
+            m_AllHoleImageOfFieldGDIObjects = new List<CRectangleGDIObject>();
+
             this.ResizeRedraw = true;
                 control_Ruler2 = new Control_Ruler();
                 Point rulerLocation = new Point(10, this.Height - (int)(control_Ruler2.Height * 2));
@@ -1243,7 +1246,7 @@ namespace OTSMeasureApp
                                 _Point = this.PointToClient(Cursor.Position);
                                 bool IsTrue = false;
                                 //设置编辑右键菜单项
-                                foreach (CRectangleGDIObject imageItem in m_ImageGDIObjects)
+                                foreach (CRectangleGDIObject imageItem in sam2.m_ImageGDIObjects)
                                 {
                                     if (imageItem.SampleName == item.SampleName)
                                     {
@@ -1294,7 +1297,7 @@ namespace OTSMeasureApp
                                     //删除BSE照片
                                     bool IsTrue = false;
                                     //设置编辑右键菜单项
-                                    foreach (CRectangleGDIObject imageItem in m_ImageGDIObjects)
+                                    foreach (CRectangleGDIObject imageItem in item.m_ImageGDIObjects)
                                     {
                                         if (imageItem.SampleName == item.GetSampleName())
                                         {
@@ -1322,20 +1325,24 @@ namespace OTSMeasureApp
                                     return;
                                 }
                     }
-               
-                    foreach (CRectangleGDIObject item in m_ImageGDIObjects)
+                    if (GetWorkingVisualSample() != null)
                     {
-                        if (item.IfZoomContains(e.Location))
+                        foreach (CRectangleGDIObject item in GetWorkingVisualSample().m_ImageGDIObjects)
                         {
-                            //样品孔菜单
-                           
-                            _Point = this.PointToClient(Cursor.Position);
-                            //设置编辑右键菜单项
-                            SetShowCMStrip(ContextMenuType.SampleHoleBSEImage, CMStrip, false);
-                            this.CMStrip.Show(this, _Point);
-                            return;
+                            if (item.IfZoomContains(e.Location))
+                            {
+                                //样品孔菜单
+
+                                _Point = this.PointToClient(Cursor.Position);
+                                //设置编辑右键菜单项
+                                SetShowCMStrip(ContextMenuType.SampleHoleBSEImage, CMStrip, false);
+                                this.CMStrip.Show(this, _Point);
+                                return;
+                            }
                         }
+
                     }
+                   
                     //只点击样品上(测量区域被移动到其他地方)
                     for (int i = m_visualSamples.Count - 1; i >= 0; i--)
                     {
@@ -1425,7 +1432,9 @@ namespace OTSMeasureApp
 
 
                         //样品台中BSE图片
-                        MouseDownFunction(m_ImageGDIObjects, e);
+                        MouseDownFunction(GetWorkingVisualSample().m_ImageGDIObjects, e);
+
+                        MouseDownFunction(m_AllHoleImageGDIObjects, e);
 
                     }
 
@@ -1897,12 +1906,16 @@ namespace OTSMeasureApp
              
                     //样品
                     MouseMoveFucntion(GetAllVisualSampleGDIObject(), e);
-
+                if (GetWorkingVisualSample() != null)
+                {
                     //样品孔BSE图片
-                    MouseMoveFucntion(m_ImageGDIObjects, e);
-              
+                    MouseMoveFucntion(GetWorkingVisualSample().m_ImageGDIObjects, e);
+
+                }
+                MouseMoveFucntion(m_AllHoleImageGDIObjects, e);
 
-           }
+
+            }
 
           
             //显示XY轴
@@ -1992,14 +2005,18 @@ namespace OTSMeasureApp
             MouseUpFucntion(m_visualStage.GetAllGDIObject(), e);
             //样品 
             MouseUpFucntion(GetAllVisualSampleGDIObject(), e);
-   
-        
-            //样品孔中BSE图片
-            MouseUpFucntion(m_ImageGDIObjects, e);
 
-          
-        
-       }
+            if (GetWorkingVisualSample() != null)
+            {
+                //样品孔中BSE图片
+                MouseUpFucntion(GetWorkingVisualSample().m_ImageGDIObjects, e);
+
+            }
+            MouseUpFucntion(m_AllHoleImageGDIObjects, e);
+
+
+
+        }
         protected override void OnPaint(PaintEventArgs e)//处理重绘情况
         {
            
@@ -2011,10 +2028,20 @@ namespace OTSMeasureApp
 
             if (IsShowSampleHoleImage)
             {
-                if (m_ImageGDIObjects.Count > 0)
+                if (GetWorkingVisualSample() != null)
+                {
+                    if (GetWorkingVisualSample().m_ImageGDIObjects.Count > 0)
+                    {
+                        OnPaint(e, GetWorkingVisualSample().m_ImageGDIObjects);
+                    }
+
+                }
+                if (m_AllHoleImageGDIObjects.Count > 0)
                 {
-                    OnPaint(e, m_ImageGDIObjects);
+                    OnPaint(e, m_AllHoleImageGDIObjects);
+
                 }
+               
             }
             OnPaint(e, GetAllVisualFieldGdiObject());
 
@@ -2032,7 +2059,7 @@ namespace OTSMeasureApp
         }
         public  void OnPaint(PaintEventArgs e, List<CRectangleGDIObject> m_ObjectGDIObjects)//处理重绘情况
         {
-            foreach (CRectangleGDIObject item in m_ObjectGDIObjects)
+            foreach (CRectangleGDIObject item in m_ObjectGDIObjects.ToArray())
             {
                 if (item != null)
                 {
@@ -2116,8 +2143,16 @@ namespace OTSMeasureApp
                     control_Ruler2.SetValue(control_Ruler2.RulerWidth);
                 }
             }
+            if (GetWorkingVisualSample() != null)
+            {
 
-            MouseWheelFunction(m_ImageGDIObjects, e.Location, currentZoomNum);
+                MouseWheelFunction(GetWorkingVisualSample().m_ImageGDIObjects, e.Location, currentZoomNum);
+            }
+            if (m_AllHoleImageGDIObjects.Count > 0)
+            {
+                MouseWheelFunction(m_AllHoleImageGDIObjects, e.Location, currentZoomNum);
+            }
+         
 
             MouseWheelFunction(GetAllVisualSampleGDIObject(), e.Location, currentZoomNum);
             //样品孔
@@ -2399,21 +2434,25 @@ namespace OTSMeasureApp
             {
                
                     m_visualStage.cleargdiobj();
+                var sam = GetWorkingVisualSample();
 
- 
-                m_visualSamples.Clear();
-                if (m_ImageGDIObjects != null)
-                {
-                    m_ImageGDIObjects.Clear();
-                }
-                if (m_ImageOfFieldGDIObjects != null)
-                {
-                    m_ImageOfFieldGDIObjects.Clear();
-                }
-                if (m_DrawMeasureGDIObject != null)
+                if (sam != null)
                 {
-                    m_DrawMeasureGDIObject = null;
+                    if (sam.m_ImageGDIObjects != null)
+                    {
+                        sam.m_ImageGDIObjects.Clear();
+                    }
+                    if (sam.m_ImageOfFieldGDIObjects != null)
+                    {
+                        sam.m_ImageOfFieldGDIObjects.Clear();
+                    }
+                    if (m_DrawMeasureGDIObject != null)
+                    {
+                        m_DrawMeasureGDIObject = null;
+                    }
                 }
+                m_visualSamples.Clear();
+               
 
 
             }
@@ -2649,7 +2688,7 @@ namespace OTSMeasureApp
                     {
                         r.SetDisplayRefPoint(m_visualStage.GetDisplayRefPoint());
                         r.SetZoomNumber(m_visualStage.GetZoomNum());
-                        m_ImageOfFieldGDIObjects.Add(r);
+                        sam.m_ImageOfFieldGDIObjects.Add(r);
                     }
                    
                 }
@@ -2943,15 +2982,15 @@ namespace OTSMeasureApp
             RectangleF ImgRegionF;
             float ImgRegionWidth;
             float ImgRegionHeight ;
-            if (m_ImageOfFieldGDIObjects.Count > 0)
+            if (sam.m_ImageOfFieldGDIObjects.Count > 0)
             {
-                for (int i = 0; i < m_ImageOfFieldGDIObjects.Count; i++)
+                for (int i = 0; i < sam.m_ImageOfFieldGDIObjects.Count; i++)
                 {
                    
                     var ctrlPos = m_visualStage.OTSCoordToCtrlCoord(fieldPos);
-                    if (m_ImageOfFieldGDIObjects[i].IfContains(ctrlPos))
+                    if (sam.m_ImageOfFieldGDIObjects[i].IfContains(ctrlPos))
                     { 
-                        ImgRegionF = m_ImageOfFieldGDIObjects[i].GetOrigionalDrawRegionF();
+                        ImgRegionF = sam.m_ImageOfFieldGDIObjects[i].GetOrigionalDrawRegionF();
                         ImgRegionWidth = Convert.ToInt32(ImgRegionF.Width);
                         ImgRegionHeight = Convert.ToInt32(ImgRegionF.Height);
 
@@ -2961,11 +3000,11 @@ namespace OTSMeasureApp
                         //绘制图像
                         CRectangleGDIObject createImageRect =new CRectangleGDIObject (ImgRegionF, fieldPos.X, fieldPos.Y, itemWorkSample.SampleName, itemWorkSample.NameOrHoleName, bseImage, ImgRegionWidth, ImgRegionHeight, CreateRectangleType.DrawSampleHoleBSEImage);
                         //添加至List集合中
-                        createImageRect.SetInitRegionF(m_ImageOfFieldGDIObjects[i].GetOrigionalDrawRegionF());
-                        createImageRect.NameOrHoleName = m_ImageOfFieldGDIObjects[i].NameOrHoleName;
+                        createImageRect.SetInitRegionF(sam.m_ImageOfFieldGDIObjects[i].GetOrigionalDrawRegionF());
+                        createImageRect.NameOrHoleName =sam. m_ImageOfFieldGDIObjects[i].NameOrHoleName;
                         createImageRect.SetZoomNumber(m_visualStage.GetZoomNum());
                         createImageRect.SetDisplayRefPoint(m_visualStage.GetDisplayRefPoint());
-                        m_ImageGDIObjects.Add(createImageRect);
+                        sam. m_ImageGDIObjects.Add(createImageRect);
                        
                         break;
                     }
@@ -2981,12 +3020,18 @@ namespace OTSMeasureApp
        
         public void DeleteHoleBSEImageDataNoMessageBox()
         {
-           
-                            m_ImageOfFieldGDIObjects.Clear();
-                            m_ImageGDIObjects.Clear();
-                           Invalidate();
+          
+            GetWorkingVisualSample().m_ImageOfFieldGDIObjects.Clear();
+            GetWorkingVisualSample().m_ImageGDIObjects.Clear();
+            Invalidate();
 
         }
+        public void TransferBseImageToWindow()
+        {
+            m_AllHoleImageGDIObjects.AddRange(GetWorkingVisualSample().m_ImageGDIObjects);
+            m_AllHoleImageOfFieldGDIObjects.AddRange(GetWorkingVisualSample().m_ImageOfFieldGDIObjects);
+            Invalidate();
+        }
         #endregion
 
         #region 获取样品孔图片