浏览代码

using unvell.D2Dlib(direct2D technology) to draw the visual stage,aim to speed up the image drawing,but failed.

gsp 1 年之前
父节点
当前提交
ed5f51250e

+ 2 - 2
OTS.sln

@@ -1,7 +1,7 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.31229.75
+# Visual Studio Version 17
+VisualStudioVersion = 17.12.35527.113 d17.12
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OTSSysMgrApp", "OTSSysMgrApp\OTSSysMgrApp.csproj", "{3FBF0B16-5E6C-4AA1-995B-471C47C5367D}"
 	ProjectSection(ProjectDependencies) = postProject

+ 1 - 1
OTSCPP/OTSClassifyEngine/OTSClassifyEngine.vcxproj

@@ -159,7 +159,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v143</PlatformToolset>
     <CLRSupport>false</CLRSupport>
     <CharacterSet>MultiByte</CharacterSet>
     <UseOfMfc>Dynamic</UseOfMfc>

+ 1 - 1
OTSCPP/OTSClrInterface/OTSClrInterface.vcxproj

@@ -157,7 +157,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v143</PlatformToolset>
     <CLRSupport>true</CLRSupport>
     <CharacterSet>MultiByte</CharacterSet>
     <UseOfMfc>Dynamic</UseOfMfc>

+ 1 - 1
OTSCPP/OTSControl/OTSControl.vcxproj

@@ -159,7 +159,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v143</PlatformToolset>
     <CharacterSet>MultiByte</CharacterSet>
     <UseOfMfc>Dynamic</UseOfMfc>
     <CLRSupport>true</CLRSupport>

+ 1 - 1
OTSCPP/OTSData/OTSData.vcxproj

@@ -161,7 +161,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v143</PlatformToolset>
     <CharacterSet>MultiByte</CharacterSet>
     <UseOfMfc>Dynamic</UseOfMfc>
     <CLRSupport>false</CLRSupport>

+ 1 - 1
OTSCPP/OTSImagePro/OTSImagePro.vcxproj

@@ -161,7 +161,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v143</PlatformToolset>
     <CharacterSet>MultiByte</CharacterSet>
     <UseOfMfc>Dynamic</UseOfMfc>
   </PropertyGroup>

+ 1 - 1
OTSCPP/OTSLog/OTSLog.vcxproj

@@ -158,7 +158,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v143</PlatformToolset>
     <CharacterSet>MultiByte</CharacterSet>
     <UseOfMfc>Dynamic</UseOfMfc>
     <CLRSupport>false</CLRSupport>

+ 1 - 1
OTSCPP/OTSRptCalculate/OTSRptCalculate.vcxproj

@@ -223,7 +223,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v143</PlatformToolset>
     <CharacterSet>MultiByte</CharacterSet>
     <UseOfMfc>Dynamic</UseOfMfc>
   </PropertyGroup>

+ 1 - 1
OTSCPP/OTSSQLiteDll/OTSSQLiteDll.vcxproj

@@ -149,7 +149,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v143</PlatformToolset>
     <CharacterSet>MultiByte</CharacterSet>
     <UseOfMfc>Dynamic</UseOfMfc>
   </PropertyGroup>

+ 1 - 1
OTSCPP/SQLite3Dll/SQLite3Dll.vcxproj

@@ -147,7 +147,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v142</PlatformToolset>
+    <PlatformToolset>v143</PlatformToolset>
     <CharacterSet>MultiByte</CharacterSet>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_oxford50|x64'" Label="Configuration">

+ 5 - 5
OTSIncAMeasureApp/0-OTSModel/OTSDataType/COTSField.cs

@@ -323,7 +323,7 @@ namespace OTSDataType
                     }
                     else
                     {
-                        log.Info("dmax=" + p.GetDMAX().ToString("F2"));
+                        //log.Info("dmax=" + p.GetDMAX().ToString("F2"));
                     }
 
                 }
@@ -343,7 +343,7 @@ namespace OTSDataType
                         }
                         else
                         {
-                            log.Info("dmin=" + p.GetDMIN().ToString("F2"));
+                            //log.Info("dmin=" + p.GetDMIN().ToString("F2"));
                         }
                     }
 
@@ -364,7 +364,7 @@ namespace OTSDataType
                         }
                         else
                         {
-                            log.Info("orientation=" + p.GetORIENTATION().ToString("F2"));
+                            //log.Info("orientation=" + p.GetORIENTATION().ToString("F2"));
                         }
 
                     }
@@ -388,7 +388,7 @@ namespace OTSDataType
                         }
                         else
                         {
-                            log.Info("aspect=" + aspect.ToString("F2"));
+                            //log.Info("aspect=" + aspect.ToString("F2"));
                         }
 
                     }
@@ -412,7 +412,7 @@ namespace OTSDataType
                         }
                         else
                         {
-                            log.Info("ferret=" + dferet.ToString("F2"));
+                            //log.Info("ferret=" + dferet.ToString("F2"));
                         }
 
                     }

+ 1 - 2
OTSIncAMeasureApp/1-OTSMeasure/Measure/BSEPicData/BSEImgFileMgr.cs

@@ -1,5 +1,4 @@
-//using CefSharp;
-//using Microsoft.Office.Interop.Word;
+
 using OTSCLRINTERFACE;
 using OTSDataType;
 using System;

+ 1 - 2
OTSIncAMeasureApp/1-OTSMeasure/Measure/ParamData/COTSMsrPrjResultData.cs

@@ -875,8 +875,7 @@ namespace OTSModelSharp
         public CDomain CalculateMsrArea(CHole a_pHole)
         {
             CDomain pMsrArea = new CDomain(a_pHole.GetShape(), a_pHole.GetDomainRect());
-            // create measurement area
-            // reset measurement area 
+          
             // measurement area should smaller than the sample hole
             RectangleF rectMsrArea = pMsrArea.GetDomainRect();
             float nWidth = rectMsrArea.Width;

+ 511 - 68
OTSIncAMeasureApp/4-OTSSamplespaceGraphicsPanel/CDisplayGDIObject.cs

@@ -2,13 +2,16 @@
 using System.Collections.Generic;
 using System.Drawing;
 using System.Drawing.Drawing2D;
+using System.Net;
+using System.Numerics;
 using System.Windows.Forms;
+using unvell.D2DLib;
 
 namespace OTSMeasureApp
 {
     
 
-    public class CDisplayGDIObject /*: CRectangleGDIObject */// 同样的方式可以从ADraggableGDIObject生成其它图形的继承角类,比如矩形,三形等等。。
+    public class CDisplayGDIObject 
     {
         public CDisplayGDIObject()
         {
@@ -46,8 +49,7 @@ namespace OTSMeasureApp
             SetInitRegionF(m_OrigineRegionF);
             CreateType = cType;
             ID = System.Guid.NewGuid().ToString();
-            //startPoint = new PointF(rect.Left, rect.Top);
-            //EndPoint = new PointF(rect.Right, rect.Bottom);
+       
             OTSX = -1;
             OTSY = -1;
         }
@@ -230,27 +232,32 @@ namespace OTSMeasureApp
             else if (createType == CreateRectangleType.Text)
             {
                 //设置文字对齐方式
-                StringFormat sf = new StringFormat();
-                sf.Alignment = StringAlignment.Center;
-                sf.LineAlignment = StringAlignment.Center;
-                //文字颜色
-                Color myColor = OTSSamplespaceGraphicsPanelFun.GetColorValue(ColorType.FontColor);
+                //if (m_RegionF.Height > 150)//won't display when it's too small
+                //{
+                    StringFormat sf = new StringFormat();
+                    sf.Alignment = StringAlignment.Center;
+                    sf.LineAlignment = StringAlignment.Center;
+                    //文字颜色
+                    Color myColor = OTSSamplespaceGraphicsPanelFun.GetColorValue(ColorType.FontColor);
+
+                    System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
+                    SolidBrush solidBrush = new SolidBrush(Color.FromArgb(50, Color.Black));
+                    //字体大小 根据样品孔Rectangle大小
+                    float fontSize = m_RegionF.Width / 2;
+                    Font font = new Font("宋体", fontSize, FontStyle.Regular);
+                    if (fontSize == 0)
+                    {
+                        font = new Font("宋体", 5, FontStyle.Regular);
+                    }
+                    //消除锯齿
+                    e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;  //图片柔顺模式选择
+                    e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
+                    e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
+
+                    e.Graphics.DrawString(strContent, font, sampleBrush, m_RegionF, sf);
+
+                //}
                 
-                System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
-                SolidBrush solidBrush = new SolidBrush(Color.FromArgb(50, Color.Black));
-                //字体大小 根据样品孔Rectangle大小
-                float fontSize = m_RegionF.Width / 2;
-                Font font = new Font("宋体", fontSize, FontStyle.Regular);
-                if (fontSize == 0)
-                {
-                    font = new Font("宋体", 5, FontStyle.Regular);
-                }
-                //消除锯齿
-                e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;  //图片柔顺模式选择
-                e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
-                e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
-               
-                e.Graphics.DrawString(strContent, font, sampleBrush, m_RegionF, sf);
             }
             //矩形
             else if (createType == CreateRectangleType.Rectangle)
@@ -274,9 +281,7 @@ namespace OTSMeasureApp
                 Color myColor = selColor;
 
                 System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
-                //e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;  //图片柔顺模式选择
-                //e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
-                //e.Graphics.CompositingQuality = CompositingQuality.AssumeLinear;//再加一点
+      
                 if (Shape == 0)
                 {
 
@@ -378,23 +383,25 @@ namespace OTSMeasureApp
                 //设置直线位置与尺寸
                 PointF startPointF = new PointF(m_RegionF.Left, m_RegionF.Top);
                 PointF endPointF = new PointF(m_RegionF.Right, m_RegionF.Bottom);
-
-                float fontSize = m_RegionF.Width / 4;
-                Font font;
-                if (fontSize == 0)
+                if (m_RegionF.Height > 20)//won't display when it's too small,to speed up
                 {
-                    font = new Font("宋体", 5, FontStyle.Regular);
-                }
-                else
-                {
-                    font = new Font("宋体", fontSize, FontStyle.Regular);
-                }
+                    float fontSize = m_RegionF.Width / 4;
+                    Font font;
+                    if (fontSize == 0)
+                    {
+                        font = new Font("宋体", 5, FontStyle.Regular);
+                    }
+                    else
+                    {
+                        font = new Font("宋体", fontSize, FontStyle.Regular);
+                    }
                
-                StringFormat sf = new StringFormat();
-                sf.Alignment = StringAlignment.Center;
-                sf.LineAlignment = StringAlignment.Center;
-                e.Graphics.DrawString(m_sequenceNum.ToString(), font, sampleBrush, m_RegionF, sf);
-
+                    StringFormat sf = new StringFormat();
+                    sf.Alignment = StringAlignment.Center;
+                    sf.LineAlignment = StringAlignment.Center;
+                
+                    e.Graphics.DrawString(m_sequenceNum.ToString(), font, sampleBrush, m_RegionF, sf);
+                }
 
                 //绘制帧图
                 e.Graphics.DrawRectangle(pen, startPointF.X, startPointF.Y, endPointF.X - startPointF.X, endPointF.Y - startPointF.Y);
@@ -417,9 +424,7 @@ namespace OTSMeasureApp
             {
                 Color myColor = System.Drawing.Color.White;
                 System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
-                //e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;  //图片柔顺模式选择
-                //e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
-                //e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
+
                 var m_Region = new Rectangle();
                 m_Region.X = (int)m_RegionF.X;
                 m_Region.Y = (int)m_RegionF.Y;
@@ -430,19 +435,16 @@ namespace OTSMeasureApp
             //绘制样品孔BSE图像
             else if (createType == CreateRectangleType.DrawFrameOfHoleBSEImage)
             {
-                //Color myColor = System.Drawing.Color.White;
-                //System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
-                //e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;  //图片柔顺模式选择
-                //e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
-                //e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
+              
 
-                //设置直线位置与尺寸
+              
                 PointF startPointF = new PointF(m_RegionF.Left, m_RegionF.Top);
                 PointF endPointF = new PointF(m_RegionF.Right + 2, m_RegionF.Bottom + 2);
                 //绘制样品孔中图像信息
                 if (BSEImage != null)
                 {
-                    e.Graphics.DrawImage(BSEImage, startPointF.X, startPointF.Y, endPointF.X - startPointF.X, endPointF.Y - startPointF.Y);
+                    Image thumbnail = BSEImage.GetThumbnailImage((int)m_RegionF.Width + 2,(int)m_RegionF.Height + 2, null, IntPtr.Zero);
+                    e.Graphics.DrawImage(thumbnail, startPointF);/*, startPointF.X, startPointF.Y, endPointF.X - startPointF.X, endPointF.Y - startPointF.Y*/
 
                 }
             }
@@ -450,9 +452,7 @@ namespace OTSMeasureApp
             {
                 Color myColor = System.Drawing.Color.Red;
                 System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
-                //e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;  //图片柔顺模式选择
-                //e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
-                //e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
+            
                 //X轴线
                 PointF startPointX = semCenterPoint;
                 startPointX.X = startPointX.X - 3;
@@ -472,9 +472,7 @@ namespace OTSMeasureApp
             else if (createType == CreateRectangleType.DrawBSEElementSignPoint)
             {
                 System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Green);
-                //e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;  //图片柔顺模式选择
-                //e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
-                //e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
+           
                 Pen pen = new Pen(sampleBrush, 2f);
                 int X = (int)m_OrigineRegionF.X;
                 int Y = (int)m_OrigineRegionF.Y;
@@ -484,9 +482,7 @@ namespace OTSMeasureApp
             //绘制多边形测量区域
             else if (createType == CreateRectangleType.Polygon)
             {
-                //e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;  //图片柔顺模式选择
-                //e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
-                //e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
+        
                 Color myColor = selColor;
                 //System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
                 Pen pen = new Pen(myColor, 1);
@@ -510,10 +506,7 @@ namespace OTSMeasureApp
             else if (createType == CreateRectangleType.DrawPolygonFinish)
             {
                 Color myColor = selColor;
-                //System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
-                //e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;  //图片柔顺模式选择
-                //e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
-                //e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
+
                 Pen pen = new Pen(myColor, 1);
                 var m_Region = new Rectangle();
                 m_Region.X = (int)m_RegionF.X;
@@ -526,19 +519,467 @@ namespace OTSMeasureApp
             else if (createType == CreateRectangleType.CircleByThreePoints)
             {
                 Color myColor = selColor;
-                //System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
+
                 Pen p = new Pen(myColor, 1);
+
+
+                var m_Region = new Rectangle();
+                m_Region.X = (int)m_RegionF.X;
+                m_Region.Y = (int)m_RegionF.Y;
+                m_Region.Width = (int)m_RegionF.Width;
+                m_Region.Height = (int)m_RegionF.Height;
+                e.Graphics.DrawEllipse(p, m_Region);
+
+            }
+        }
+        public virtual void OnRender(D2DGraphics g)
+        {
+            if (createType == CreateRectangleType.SampleBackGround_Rectangle)
+            {
+                //获取颜色
+                Color myColor = OTSSamplespaceGraphicsPanelFun.GetColorValue(ColorType.RoundRectangleColor);
+
+                System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
+                GraphicsPath grPath = CreateRoundedRectanglePath(m_RegionF, 20);
+                //e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
+               
+                //g.FillPath(sampleBrush, grPath);
+                //e.Graphics.DrawPath(Pens.Black, grPath);
+              var  device=g.Device;
+                var brush = device.CreateSolidColorBrush(D2DColor.FromGDIColor(myColor));
+                //D2DBrush brush=new D2DBrush(sampleBrush);
+                var rect = new D2DRect(m_RegionF.Left, m_RegionF.Top, m_RegionF.Width, m_RegionF.Height);
+                var pen = device.CreatePen(D2DColor.FromGDIColor(myColor));
+                g.DrawFillRectangle(ref rect, brush, pen, 1);
+            }
+            //样品台-圆形
+            else if (createType == CreateRectangleType.SampleBackGround_Circle)
+            {
+                //获取颜色
+                Color myColor = OTSSamplespaceGraphicsPanelFun.GetColorValue(ColorType.SampleBackGroundColor);
+
+                System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
                 //e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;  //图片柔顺模式选择
                 //e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
                 //e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
+                //e.Graphics.FillEllipse(sampleBrush, m_RegionF);
+                //e.Graphics.DrawEllipse(Pens.Black, m_RegionF);
+                var brush = g.Device.CreateSolidColorBrush(D2DColor.FromGDIColor(myColor));
+                var pen = g.Device.CreatePen(D2DColor.FromGDIColor(myColor));
+                var rect = new D2DRect(m_RegionF.Left, m_RegionF.Top, m_RegionF.Width, m_RegionF.Height);
+                D2DEllipse ell = new D2DEllipse(rect);
+                g.FillEllipse(ell, brush);
+                g.DrawEllipse(ell, D2DColor.FromGDIColor(myColor));
+            }
+            //圆形
+            else if (createType == CreateRectangleType.Circle)
+            {
+                //System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(System.Drawing.Color.White);
+                //e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;  //图片柔顺模式选择
+                //e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
+                //e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
+                //e.Graphics.FillEllipse(sampleBrush, m_RegionF);
+                //e.Graphics.DrawEllipse(Pens.Black, m_RegionF);
+
 
+                var brush = g.Device.CreateSolidColorBrush(D2DColor.FromGDIColor(Color.White));
+                var pen = g.Device.CreatePen(D2DColor.FromGDIColor(Color.White));
+                var rect = new D2DRect(m_RegionF.Left, m_RegionF.Top, m_RegionF.Width, m_RegionF.Height);
+                D2DEllipse ell = new D2DEllipse(rect);
+                g.FillEllipse(ell, brush);
+                g.DrawEllipse(ell, D2DColor.FromGDIColor(Color.White));
+            }
+            //文字
+            else if (createType == CreateRectangleType.Text)
+            {
+                //设置文字对齐方式
+                
+                StringFormat sf = new StringFormat();
+                sf.Alignment = StringAlignment.Center;
+                sf.LineAlignment = StringAlignment.Center;
+                //文字颜色
+                Color myColor = OTSSamplespaceGraphicsPanelFun.GetColorValue(ColorType.FontColor);
+
+                System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
+                SolidBrush solidBrush = new SolidBrush(Color.FromArgb(50, Color.Black));
+                //字体大小 根据样品孔Rectangle大小
+                float fontSize = m_RegionF.Width / 2;
+                Font font = new Font("宋体", fontSize, FontStyle.Regular);
+                if (fontSize == 0)
+                {
+                    font = new Font("宋体", 5, FontStyle.Regular);
+                }
+                //消除锯齿
+                //e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;  //图片柔顺模式选择
+                //e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
+                //e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
+
+                //e.Graphics.DrawString(strContent, font, sampleBrush, m_RegionF, sf);
+                D2DTextFormat tf = g.Device.CreateTextFormat("宋体", fontSize);
+                var brush = g.Device.CreateSolidColorBrush(D2DColor.FromGDIColor(myColor));
+                var pen = g.Device.CreatePen(D2DColor.FromGDIColor(Color.White));
+                var rect = new D2DRect(m_RegionF.Left, m_RegionF.Top, m_RegionF.Width, m_RegionF.Height);
+                g.DrawText(strContent, brush, tf,rect);
+                //}
+
+            }
+            //矩形
+            else if (createType == CreateRectangleType.Rectangle)
+            {
+                Color myColor = System.Drawing.Color.White;
+                System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
+                //e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;  //图片柔顺模式选择
+                //e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
+                //e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
+                //e.Graphics.FillRectangle(sampleBrush, m_RegionF);
                 var m_Region = new Rectangle();
                 m_Region.X = (int)m_RegionF.X;
                 m_Region.Y = (int)m_RegionF.Y;
                 m_Region.Width = (int)m_RegionF.Width;
                 m_Region.Height = (int)m_RegionF.Height;
-                e.Graphics.DrawEllipse(p, m_Region);
+                //e.Graphics.DrawRectangle(Pens.Black, m_Region);
+
+                var brush = g.Device.CreateSolidColorBrush(D2DColor.FromGDIColor(myColor));
+                var pen = g.Device.CreatePen(D2DColor.FromGDIColor(Color.White));
+                var rect = new D2DRect(m_RegionF.Left, m_RegionF.Top, m_RegionF.Width, m_RegionF.Height);
+                g.DrawRectangle(rect, pen);
+            }
+            //选择样品台
+            else if (createType == CreateRectangleType.SelectSample)
+            {
+                Color myColor = selColor;
+
+                System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
+
+                if (Shape == 0)
+                {
+
+                    //e.Graphics.FillEllipse(sampleBrush, m_RegionF);
+                    //e.Graphics.DrawEllipse(Pens.Black, m_RegionF);
+                    var brush = g.Device.CreateSolidColorBrush(D2DColor.FromGDIColor(myColor));
+                    var pen = g.Device.CreatePen(D2DColor.FromGDIColor(myColor));
+                    var rect = new D2DRect(m_RegionF.Left, m_RegionF.Top, m_RegionF.Width, m_RegionF.Height);
+                    D2DEllipse ell = new D2DEllipse(rect);
+                    g.FillEllipse(ell, brush);
+                    g.DrawEllipse(ell, D2DColor.FromGDIColor(myColor));
+                }
+                else
+                {
+                    //e.Graphics.FillRectangle(sampleBrush, m_RegionF);
+                    var m_Region = new Rectangle();
+                    m_Region.X = (int)m_RegionF.X;
+                    m_Region.Y = (int)m_RegionF.Y;
+                    m_Region.Width = (int)m_RegionF.Width;
+                    m_Region.Height = (int)m_RegionF.Height;
+                    //e.Graphics.DrawRectangle(Pens.Black, m_Region);
+                    var brush = g.Device.CreateSolidColorBrush(D2DColor.FromGDIColor(myColor));
+                    var pen = g.Device.CreatePen(D2DColor.FromGDIColor(Color.White));
+                    var rect = new D2DRect(m_RegionF.Left, m_RegionF.Top, m_RegionF.Width, m_RegionF.Height);
+                    g.FillRectangle(rect,brush);
+                    g.DrawRectangle(rect, pen);
 
+                }
+            }
+            //测试区域
+            else if (createType == CreateRectangleType.MeasureArea)
+            {
+                Color myColor = selColor;
+                System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
+                Pen p = new Pen(myColor, 1);
+                //e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;  //图片柔顺模式选择
+                //e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;//高质量
+                //e.Graphics.CompositingQuality = CompositingQuality.HighQuality;//再加一点
+
+
+                if (Shape == 0)
+                {
+
+                    //e.Graphics.DrawEllipse(p, m_RegionF);
+
+                    var brush = g.Device.CreateSolidColorBrush(D2DColor.FromGDIColor(myColor));
+                    var pen = g.Device.CreatePen(D2DColor.FromGDIColor(myColor));
+                    var rect = new D2DRect(m_RegionF.Left, m_RegionF.Top, m_RegionF.Width, m_RegionF.Height);
+                    D2DEllipse ell = new D2DEllipse(rect);
+                    //g.FillEllipse(ell, brush);
+                    g.DrawEllipse(ell, D2DColor.FromGDIColor(myColor));
+                }
+                else
+                {
+                    var m_Region = new Rectangle();
+                    m_Region.X = (int)m_RegionF.X;
+                    m_Region.Y = (int)m_RegionF.Y;
+                    m_Region.Width = (int)m_RegionF.Width;
+                    m_Region.Height = (int)m_RegionF.Height;
+
+                    //e.Graphics.DrawRectangle(p, m_Region);
+                    var brush = g.Device.CreateSolidColorBrush(D2DColor.FromGDIColor(myColor));
+                    var pen = g.Device.CreatePen(D2DColor.FromGDIColor(Color.White));
+                    var rect = new D2DRect(m_RegionF.Left, m_RegionF.Top, m_RegionF.Width, m_RegionF.Height);
+                    //g.FillRectangle(rect, brush);
+                    g.DrawRectangle(rect, pen);
+                }
+            }
+            //绘制帧图 直线
+            else if (createType == CreateRectangleType.SingleLine)
+            {
+                //设置颜色
+                Color myColor = OTSSamplespaceGraphicsPanelFun.GetColorValue(ColorType.FieldColor);
+
+                //设置画笔
+                System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
+                Pen pen = new Pen(sampleBrush, 0.0001f);
+                //未抗锯齿
+                //e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.Default;
+                //e.Graphics.InterpolationMode = InterpolationMode.Default;
+                //e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
+                //设置直线位置与尺寸
+                PointF startPointF = new PointF(startPoint.X, startPoint.Y);
+                PointF endPointF = new PointF(endPoint.X, endPoint.Y);
+                //度量单位
+                //e.Graphics.PageUnit = GraphicsUnit.Display;
+                //e.Graphics.DrawLine(pen, startPointF, endPointF);
+                var dcolor = D2DColor.FromGDIColor(myColor);
+                var brush = g.Device.CreateSolidColorBrush(D2DColor.FromGDIColor(myColor));
+                var dpen = g.Device.CreatePen(D2DColor.FromGDIColor(Color.White));
+                var rect = new D2DRect(m_RegionF.Left, m_RegionF.Top, m_RegionF.Width, m_RegionF.Height);
+                g.DrawLine(startPoint.X, startPoint.Y, endPoint.X, endPoint.Y, dcolor);
+
+            }
+            //绘制标样
+            else if (createType == CreateRectangleType.SpecimenRectangle)
+            {
+                Color myColor = System.Drawing.Color.Black;
+                System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
+                Pen pen = new Pen(sampleBrush, 0.0001f);
+                //e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
+                var m_Region = new Rectangle();
+                m_Region.X = (int)m_RegionF.X;
+                m_Region.Y = (int)m_RegionF.Y;
+                m_Region.Width = (int)m_RegionF.Width;
+                m_Region.Height = (int)m_RegionF.Height;
+                //e.Graphics.DrawRectangle(pen, m_Region);
+                //e.Graphics.FillRectangle(sampleBrush, m_Region);
+                var brush = g.Device.CreateSolidColorBrush(D2DColor.FromGDIColor(myColor));
+                var dpen = g.Device.CreatePen(D2DColor.FromGDIColor(Color.White));
+                var rect = new D2DRect(m_RegionF.Left, m_RegionF.Top, m_RegionF.Width, m_RegionF.Height);
+                g.FillRectangle(rect, brush);
+                g.DrawRectangle(rect, dpen);
+            }
+            //绘制标样
+            else if (createType == CreateRectangleType.SpecimenCircle)
+            {
+                Color myColor = System.Drawing.Color.Black;
+                System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
+                Pen pen = new Pen(sampleBrush, 0.0001f);
+                //e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
+                //e.Graphics.DrawEllipse(pen, m_RegionF);
+                //e.Graphics.FillEllipse(sampleBrush, m_RegionF);
+                var brush = g.Device.CreateSolidColorBrush(D2DColor.FromGDIColor(myColor));
+                var dpen = g.Device.CreatePen(D2DColor.FromGDIColor(myColor));
+                var rect = new D2DRect(m_RegionF.Left, m_RegionF.Top, m_RegionF.Width, m_RegionF.Height);
+                D2DEllipse ell = new D2DEllipse(rect);
+                g.FillEllipse(ell, brush);
+                g.DrawEllipse(ell, D2DColor.FromGDIColor(myColor));
+            }
+            //绘制帧图
+            else if (createType == CreateRectangleType.FieldRectangle)
+            {
+                Color myColor = SelColor;
+                System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
+                Pen pen = new Pen(sampleBrush, 0.01f);
+                //e.Graphics.SmoothingMode = SmoothingMode.Default;
+                //设置直线位置与尺寸
+                PointF startPointF = new PointF(m_RegionF.Left, m_RegionF.Top);
+                PointF endPointF = new PointF(m_RegionF.Right, m_RegionF.Bottom);
+                if (m_RegionF.Height > 20)//won't display when it's too small,to speed up
+                {
+                    float fontSize = m_RegionF.Width / 4;
+                    Font font;
+                    if (fontSize == 0)
+                    {
+                        font = new Font("宋体", 5, FontStyle.Regular);
+                    }
+                    else
+                    {
+                        font = new Font("宋体", fontSize, FontStyle.Regular);
+                    }
+
+                    //StringFormat sf = new StringFormat();
+                    //sf.Alignment = StringAlignment.Center;
+                    //sf.LineAlignment = StringAlignment.Center;
+                    D2DTextFormat tf = g.Device.CreateTextFormat("宋体", fontSize);
+                    var txtbrush = g.Device.CreateSolidColorBrush(D2DColor.FromGDIColor(myColor));
+                    var txtpen = g.Device.CreatePen(D2DColor.FromGDIColor(Color.White));
+                    var txtrect = new D2DRect(m_RegionF.Left, m_RegionF.Top, m_RegionF.Width, m_RegionF.Height);
+                    g.DrawText(strContent, txtbrush, tf, txtrect);
+                    //e.Graphics.DrawString(m_sequenceNum.ToString(), font, sampleBrush, m_RegionF, sf);
+                }
+                var brush = g.Device.CreateSolidColorBrush(D2DColor.FromGDIColor(myColor));
+                var dpen = g.Device.CreatePen(D2DColor.FromGDIColor(Color.White));
+                var rect = new D2DRect(m_RegionF.Left, m_RegionF.Top, m_RegionF.Width, m_RegionF.Height);
+                //绘制帧图
+               g.DrawRectangle( startPointF.X, startPointF.Y, endPointF.X ,endPointF.Y, D2DColor.FromGDIColor(myColor));
+            }
+            //绘制颗粒
+            else if (createType == CreateRectangleType.ParticleLine)
+            {
+                //Color myColor = LineColor;
+                //System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
+                //Pen pen = new Pen(sampleBrush, 0.01f);
+                //e.Graphics.SmoothingMode = SmoothingMode.Default;
+                ////设置直线位置与长度
+                //PointF startPointF = LineStartPoint;
+                //float length = LineLength;
+                //PointF endPointF = new PointF(startPointF.X + length, startPointF.Y);
+                //e.Graphics.DrawLine(pen, startPointF, endPointF);
+            }
+            //矩形
+            else if (createType == CreateRectangleType.ParticleAreaRectangle)
+            {
+                //Color myColor = System.Drawing.Color.White;
+                //System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
+
+                //var m_Region = new Rectangle();
+                //m_Region.X = (int)m_RegionF.X;
+                //m_Region.Y = (int)m_RegionF.Y;
+                //m_Region.Width = (int)m_RegionF.Width;
+                //m_Region.Height = (int)m_RegionF.Height;
+                //e.Graphics.DrawRectangle(Pens.Black, m_Region);
+            }
+            //绘制样品孔BSE图像
+            else if (createType == CreateRectangleType.DrawFrameOfHoleBSEImage)
+            {
+
+
+
+                PointF startPointF = new PointF(m_RegionF.Left, m_RegionF.Top);
+                PointF endPointF = new PointF(m_RegionF.Right + 2, m_RegionF.Bottom + 2);
+                //绘制样品孔中图像信息
+                //if (BSEImage != null)
+                //{
+                //    Image thumbnail = BSEImage.GetThumbnailImage((int)m_RegionF.Width + 2, (int)m_RegionF.Height + 2, null, IntPtr.Zero);
+                //    e.Graphics.DrawImage(thumbnail, startPointF);/*, startPointF.X, startPointF.Y, endPointF.X - startPointF.X, endPointF.Y - startPointF.Y*/
+
+                //}
+                if (BSEImage != null)
+                {
+                    var d2dimg = g.Device.CreateBitmapFromGDIBitmap((Bitmap)bseImage);
+                    //Image thumbnail = BSEImage.GetThumbnailImage((int)m_RegionF.Width + 2, (int)m_RegionF.Height + 2, null, IntPtr.Zero);
+                    //e.Graphics.DrawImage(thumbnail, startPointF);/*, startPointF.X, startPointF.Y, endPointF.X - startPointF.X, endPointF.Y - startPointF.Y*/
+                    var rect = new D2DRect(m_RegionF.Left, m_RegionF.Top, m_RegionF.Width, m_RegionF.Height);
+                    g.DrawBitmap(d2dimg, rect);
+                }
+            }
+            else if (createType == CreateRectangleType.DrawSEMCenterPoint)
+            {
+                Color myColor = System.Drawing.Color.Red;
+                System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
+
+                //X轴线
+                PointF startPointX = semCenterPoint;
+                startPointX.X = startPointX.X - 3;
+                PointF endPointX = semCenterPoint;
+                endPointX.X = endPointX.X + 3;
+                //Y轴线
+                PointF startPointY = semCenterPoint;
+                startPointY.Y = startPointY.Y - 3;
+                PointF endPointY = semCenterPoint;
+                endPointY.Y = endPointY.Y + 3;
+                //绘制XY轴交叉线+ 
+                Pen pen = new Pen(sampleBrush, 0.0001f);
+                //e.Graphics.DrawLine(pen, startPointX, endPointX);
+                //e.Graphics.DrawLine(pen, startPointY, endPointY);
+
+                var dcolor = D2DColor.FromGDIColor(myColor);
+                var brush = g.Device.CreateSolidColorBrush(D2DColor.FromGDIColor(myColor));
+                var dpen = g.Device.CreatePen(D2DColor.FromGDIColor(Color.White));
+                var rect = new D2DRect(m_RegionF.Left, m_RegionF.Top, m_RegionF.Width, m_RegionF.Height);
+                g.DrawLine(startPointX.X, startPointX.Y, endPointX.X, endPointX.Y, dcolor);
+                g.DrawLine(startPointY.X, startPointY.Y, endPointY.X, endPointY.Y, dcolor);
+
+            }
+            //绘制BSE标记
+            else if (createType == CreateRectangleType.DrawBSEElementSignPoint)
+            {
+                System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Green);
+
+                Pen pen = new Pen(sampleBrush, 2f);
+                int X = (int)m_OrigineRegionF.X;
+                int Y = (int)m_OrigineRegionF.Y;
+                //e.Graphics.DrawLine(pen, new Point(X - 8, Y), new Point(X + 8, Y));
+                //e.Graphics.DrawLine(pen, new Point(X, Y - 8), new Point(X, Y + 8));
+
+
+                var dcolor = D2DColor.FromGDIColor(Color.Green);
+                var brush = g.Device.CreateSolidColorBrush(D2DColor.FromGDIColor(Color.Green));
+                var dpen = g.Device.CreatePen(D2DColor.FromGDIColor(Color.White));
+                var rect = new D2DRect(m_RegionF.Left, m_RegionF.Top, m_RegionF.Width, m_RegionF.Height);
+                g.DrawLine(X-8,Y, X+8, Y, dcolor);
+                g.DrawLine(X, Y-8, X, Y+8, dcolor);
+            }
+            //绘制多边形测量区域
+            else if (createType == CreateRectangleType.Polygon)
+            {
+
+                Color myColor = selColor;
+                //System.Drawing.SolidBrush sampleBrush = new System.Drawing.SolidBrush(myColor);
+                Pen pen = new Pen(myColor, 1);
+                if (GetPolygonPointFList().Count > 0)
+                {
+                    List<PointF> PolygonPointF = new List<PointF>();
+                    Vector2[] vec=new Vector2[GetPolygonPointFList().Count+1];
+                    for (int i= 0;i < vec.Length;i++)
+                    {
+                        vec[i]=new Vector2( m_PolygonPoints[i].X, m_PolygonPoints[i].Y);
+                    }
+                    if (PolygonDrawingEndPoint.X != 0 && PolygonDrawingEndPoint.Y != 0)
+                    {
+                        vec[m_PolygonPoints.Count] = new Vector2(PolygonDrawingEndPoint.X, PolygonDrawingEndPoint.Y);
+                    }
+
+                   g.DrawLines(vec,D2DColor.FromGDIColor(selColor));
+
+
+                }
+            }//多边形测量区域完成标识
+            else if (createType == CreateRectangleType.DrawPolygonFinish)
+            {
+                Color myColor = selColor;
+
+                Pen pen = new Pen(myColor, 1);
+                var m_Region = new Rectangle();
+                m_Region.X = (int)m_RegionF.X;
+                m_Region.Y = (int)m_RegionF.Y;
+                m_Region.Width = (int)m_RegionF.Width;
+                m_Region.Height = (int)m_RegionF.Height;
+                //e.Graphics.DrawRectangle(pen, m_Region);
+
+                var brush = g.Device.CreateSolidColorBrush(D2DColor.FromGDIColor(myColor));
+                var dpen = g.Device.CreatePen(D2DColor.FromGDIColor(Color.White));
+                var rect = new D2DRect(m_RegionF.Left, m_RegionF.Top, m_RegionF.Width, m_RegionF.Height);
+                //绘制帧图
+                g.DrawRectangle(rect,D2DColor.FromGDIColor(myColor));
+            }
+            //绘制多边形测量区域
+            else if (createType == CreateRectangleType.CircleByThreePoints)
+            {
+                Color myColor = selColor;
+
+                Pen p = new Pen(myColor, 1);
+
+
+                var m_Region = new Rectangle();
+                m_Region.X = (int)m_RegionF.X;
+                m_Region.Y = (int)m_RegionF.Y;
+                m_Region.Width = (int)m_RegionF.Width;
+                m_Region.Height = (int)m_RegionF.Height;
+                //e.Graphics.DrawEllipse(p, m_Region);
+                var brush = g.Device.CreateSolidColorBrush(D2DColor.FromGDIColor(myColor));
+                var dpen = g.Device.CreatePen(D2DColor.FromGDIColor(myColor));
+                var rect = new D2DRect(m_RegionF.Left, m_RegionF.Top, m_RegionF.Width, m_RegionF.Height);
+                D2DEllipse ell = new D2DEllipse(rect);
+                //g.FillEllipse(ell, brush);
+                g.DrawEllipse(ell, D2DColor.FromGDIColor(myColor));
             }
         }
         public  Image BSEImage
@@ -1208,7 +1649,7 @@ namespace OTSMeasureApp
         protected RectangleF m_RegionF;
         //绘制时与移动缩放时记录的位置与尺寸
         protected RectangleF m_OrigineRegionF;
-        //private GraphicsPath g_Path=new GraphicsPath();
+       
         private PointF startPoint;
         private PointF endPoint;
     
@@ -1292,7 +1733,9 @@ namespace OTSMeasureApp
         //圆形三点法
         CircleByThreePoints=17,
 
-        RingShape=18
+        RingShape=18,
+
+        SampleHoleImageBuffer=19
     }
   
 

+ 34 - 29
OTSIncAMeasureApp/4-OTSSamplespaceGraphicsPanel/OTSSamplespaceWindow.Designer.cs

@@ -2,6 +2,8 @@
 namespace OTSMeasureApp
 {
     using  MyControls;
+    using OTSMeasureApp._4_OTSSamplespaceGraphicsPanel;
+
     partial class OTSSamplespaceWindow
     {
         /// <summary>
@@ -46,10 +48,10 @@ namespace OTSMeasureApp
             this.DeleteBSEPicture = new System.Windows.Forms.ToolStripMenuItem();
             this.DeleteSampleData = new System.Windows.Forms.ToolStripMenuItem();
             this.SlopFocusMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-            this.dgvFocus = new System.Windows.Forms.DataGridView();
-            this.lblFocus = new System.Windows.Forms.Label();
+            this.pictureBox1 = new System.Windows.Forms.PictureBox();
+            this.userControl11 = new OTSMeasureApp._4_OTSSamplespaceGraphicsPanel.UserControl1();
             this.CMStrip.SuspendLayout();
-            ((System.ComponentModel.ISupportInitialize)(this.dgvFocus)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
             this.SuspendLayout();
             // 
             // CMStrip
@@ -72,7 +74,6 @@ namespace OTSMeasureApp
             this.CMStrip.Name = "CMStrip";
             this.CMStrip.Size = new System.Drawing.Size(195, 346);
             this.CMStrip.Text = "添加样品";
-            this.CMStrip.Opening += new System.ComponentModel.CancelEventHandler(this.CMStrip_Opening);
             this.CMStrip.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.CMStrip_ItemClicked);
             // 
             // AddStage
@@ -170,25 +171,30 @@ namespace OTSMeasureApp
             this.SlopFocusMenuItem.Size = new System.Drawing.Size(194, 30);
             this.SlopFocusMenuItem.Text = "斜面焦距";
             // 
-            // dgvFocus
-            // 
-            this.dgvFocus.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
-            this.dgvFocus.Location = new System.Drawing.Point(1, 1);
-            this.dgvFocus.Margin = new System.Windows.Forms.Padding(2);
-            this.dgvFocus.Name = "dgvFocus";
-            this.dgvFocus.RowTemplate.Height = 30;
-            this.dgvFocus.Size = new System.Drawing.Size(0, 0);
-            this.dgvFocus.TabIndex = 3;
-            // 
-            // lblFocus
-            // 
-            this.lblFocus.AutoSize = true;
-            this.lblFocus.Location = new System.Drawing.Point(1225, 8);
-            this.lblFocus.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
-            this.lblFocus.Name = "lblFocus";
-            this.lblFocus.Size = new System.Drawing.Size(0, 12);
-            this.lblFocus.TabIndex = 4;
-            this.lblFocus.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+            // pictureBox1
+            // 
+            this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.pictureBox1.Location = new System.Drawing.Point(0, 0);
+            this.pictureBox1.Name = "pictureBox1";
+            this.pictureBox1.Size = new System.Drawing.Size(1275, 692);
+            this.pictureBox1.TabIndex = 5;
+            this.pictureBox1.TabStop = false;
+            this.pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox1_Paint);
+            this.pictureBox1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseDown);
+            this.pictureBox1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseMove);
+            this.pictureBox1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseUp);
+            // 
+            // userControl11
+            // 
+            this.userControl11.BackgroundImage = null;
+            this.userControl11.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.userControl11.Location = new System.Drawing.Point(0, 0);
+            this.userControl11.Name = "userControl11";
+            this.userControl11.ShowFPS = false;
+            this.userControl11.Size = new System.Drawing.Size(1275, 692);
+            this.userControl11.TabIndex = 6;
+            this.userControl11.Text = "userControl11";
+            this.userControl11.MouseDown += new System.Windows.Forms.MouseEventHandler(this.userControl11_MouseDown);
             // 
             // OTSSamplespaceWindow
             // 
@@ -198,8 +204,8 @@ namespace OTSMeasureApp
             this.ClientSize = new System.Drawing.Size(1275, 692);
             this.CloseButton = false;
             this.CloseButtonVisible = false;
-            this.Controls.Add(this.lblFocus);
-            this.Controls.Add(this.dgvFocus);
+            this.Controls.Add(this.userControl11);
+            this.Controls.Add(this.pictureBox1);
             this.DockAreas = ((OTS.WinFormsUI.Docking.DockAreas)(((((OTS.WinFormsUI.Docking.DockAreas.DockLeft | OTS.WinFormsUI.Docking.DockAreas.DockRight) 
             | OTS.WinFormsUI.Docking.DockAreas.DockTop) 
             | OTS.WinFormsUI.Docking.DockAreas.DockBottom) 
@@ -218,9 +224,8 @@ namespace OTSMeasureApp
             this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.OTSSamplespaceWindow_KeyDown);
             this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.OTSSamplespaceWindow_KeyUp);
             this.CMStrip.ResumeLayout(false);
-            ((System.ComponentModel.ISupportInitialize)(this.dgvFocus)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
             this.ResumeLayout(false);
-            this.PerformLayout();
 
         }
 
@@ -238,9 +243,9 @@ namespace OTSMeasureApp
         private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
         private System.Windows.Forms.ToolStripMenuItem ShootBSEPicture;
         private System.Windows.Forms.ToolStripMenuItem SetSemData;
-        private System.Windows.Forms.DataGridView dgvFocus;
-        public System.Windows.Forms.Label lblFocus;
         public System.Windows.Forms.ContextMenuStrip CMStrip;
         private System.Windows.Forms.ToolStripMenuItem DeleteSampleData;
+        private System.Windows.Forms.PictureBox pictureBox1;
+        private UserControl1 userControl11;
     }
 }

+ 139 - 41
OTSIncAMeasureApp/4-OTSSamplespaceGraphicsPanel/OTSSamplespaceWindow.cs

@@ -10,7 +10,8 @@ using System.Collections;
 using System.Collections.Generic;
 using System.Drawing;
 using System.Windows.Forms;
-
+using unvell.D2DLib;
+using unvell.D2DLib.WinForm;
 
 namespace OTSMeasureApp
 {
@@ -136,6 +137,7 @@ namespace OTSMeasureApp
         //国际化
         OTSCommon.Language lan;
         Hashtable table;
+        public CDisplayGDIObject sampleHoleImageBuffer;
         #region 设置双缓冲
         /// <summary>
         /// 设置双缓冲
@@ -148,6 +150,8 @@ namespace OTSMeasureApp
         }
         #endregion
         CFieldPositionHelper pFieldMgr = new CFieldPositionHelper();
+
+     
         #region 构造函数 获取父窗体对象
         public OTSSamplespaceWindow(OTSIncAMeasureAppForm MeasureAppForm)
         {
@@ -850,10 +854,6 @@ namespace OTSMeasureApp
 
             ShowRulerLocation();
 
-            //图像隐藏
-            HideMessureStatuWindowBSEImage(m_MeasureAppForm);
-            //将测量结果信息状态初始化
-            InitMeasureStateInfo();
 
 
             if (m_visualSamples.Count == 0)
@@ -866,16 +866,7 @@ namespace OTSMeasureApp
             Invalidate();
         }
 
-        public void HideMessureStatuWindowBSEImage(OTSIncAMeasureAppForm m_MeasureApps)
-        {
-            m_MeasureApps.m_MessureStatuWindow.picBox.Hide();
-        }
-        #region 将测量状态进度窗口信息初始化
-        public void InitMeasureStateInfo()
-        {
-            m_MeasureAppForm.m_MeasureResultWindow.SetInit();
-        }
-        #endregion
+
 
         private void GetTriangleExcenterRadius(PointF px1, PointF px2, PointF px3, out float R, out PointF center)
         {
@@ -902,7 +893,7 @@ namespace OTSMeasureApp
 
             m_visualSamples = new List<CVisualSampleArea>();
 
-
+            
             this.ResizeRedraw = true;
             control_Ruler2 = new Control_Ruler();
             Point rulerLocation = new Point(10, this.Height - (int)(control_Ruler2.Height * 2));
@@ -910,10 +901,20 @@ namespace OTSMeasureApp
             this.Controls.Add(control_Ruler2);
             log = NLog.LogManager.GetCurrentClassLogger();
 
+            pictureBox1.BackColor = Color.Transparent;
 
+            sampleHoleImageBuffer = new CDisplayGDIObject(new RectangleF(0, 0, this.Width, this.Height), CreateRectangleType.SampleHoleImageBuffer); ;
+            sampleHoleImageBuffer.BSEImage = new Bitmap(this.Width, this.Height);
 
-
+            userControl11.BringToFront();
+            userControl11.RenderEvent += UserControl11_RenderEvent;
+            //pictureBox1.BringToFront();
+            //userControl11.Visible = false;
+            //pictureBox1.Visible = false;
         }
+
+        
+
         public static void SetShowCMStrip(ContextMenuType menuType, ContextMenuStrip cmStrip)
         {
 
@@ -1019,6 +1020,7 @@ namespace OTSMeasureApp
                 allobj.Add(s.GetSampleGDIObject());
                 allobj.Add(s.GetMeasureGDIObject());
                 allobj.AddRange(m_visualStage.FrameOfHoleGDIObjects);
+                allobj.Add(sampleHoleImageBuffer);
                 foreach (var f in s.GetMeasureFieldGDIObjects())
                 {
                     allobj.Add(f);
@@ -1120,7 +1122,7 @@ namespace OTSMeasureApp
         }
         protected override void OnMouseDown(MouseEventArgs e)
         {
-            lblFocus.Focus();
+            //lblFocus.Focus();
             bool runflag = m_MeasureAppForm.MeasureThreadRunFlag;
             
 
@@ -1946,12 +1948,12 @@ namespace OTSMeasureApp
 
                 //样品
                 MouseMoveFucntion(GetAllVisualSampleGDIObject(), e);
-                if (GetWorkingVisualSample() != null)
-                {
+                //if (GetWorkingVisualSample() != null)
+                //{
                     //样品孔BSE图片
                     MouseMoveFucntion(m_visualStage.FrameOfHoleGDIObjects, e);
 
-                }
+                //}
 
 
 
@@ -2047,51 +2049,111 @@ namespace OTSMeasureApp
 
 
 
+        }
+        public void DrawSampleHoleImage(CDisplayGDIObject img)
+        {
+            var m_RegionF = img.GetOrigionalDrawRegionF();
+            PointF startPointF = new PointF(m_RegionF.Left, m_RegionF.Top);
+            PointF endPointF = new PointF(m_RegionF.Right + 2, m_RegionF.Bottom + 2);
+            //绘制样品孔中图像信息
+            if (img.BSEImage != null)
+            {
+                Image thumbnail = img.BSEImage.GetThumbnailImage((int)m_RegionF.Width + 2, (int)m_RegionF.Height + 2, null, IntPtr.Zero);
+                var g = Graphics.FromImage(sampleHoleImageBuffer.BSEImage);
+                //g.DrawImage(img.BSEImage, startPointF.X, startPointF.Y, endPointF.X - startPointF.X, endPointF.Y - startPointF.Y); 
+                g.DrawImage(thumbnail, startPointF);
+            }
+
         }
         protected override void OnPaint(PaintEventArgs e)//处理重绘情况
         {
 
-            OnPaint(e, m_visualStage.GetAllGDIObject());
+            //OnPaint(e, m_visualStage.GetAllGDIObject());
 
+            //OnPaint(e, GetOnlyVisualSampleGDIObject());
 
 
-            OnPaint(e, GetOnlyVisualSampleGDIObject());
 
             if (IsShowSampleHoleImage)
             {
-                
-                    if (m_visualStage.FrameOfHoleGDIObjects.Count > 0)
-                    {
-                        OnPaint(e, m_visualStage.FrameOfHoleGDIObjects);
-                    }
 
-               
+                if (m_visualStage.FrameOfHoleGDIObjects.Count > 0)
+                {
+                    //sampleHoleImageBuffer = new Bitmap(this.Width, this.Height);
+                    //foreach (var frameGDI in m_visualStage.FrameOfHoleGDIObjects)
+                    //{
+                    //    DrawSampleHoleImage(frameGDI);
+                    //}
+                    //OnPaint(e, m_visualStage.FrameOfHoleGDIObjects);
+                }
 
+                e.Graphics.DrawImage(sampleHoleImageBuffer.BSEImage, sampleHoleImageBuffer.GetZoomedRegionF());
 
             }
 
+          
+           
 
-            OnPaint(e, GetAllVisualFieldGdiObject());
 
-            if (m_DrawMeasureGDIObject != null)
+        }
+        public void OnPaint(PaintEventArgs e, List<CDisplayGDIObject> m_ObjectGDIObjects)//处理重绘情况
+        {
+            foreach (CDisplayGDIObject item in m_ObjectGDIObjects.ToArray())
             {
+                if (item != null)
+                {
+                    item.OnPaint(e);
+                }
+            }
+        }
+        private void UserControl11_RenderEvent(unvell.D2DLib.D2DGraphics g)
+        {
+            //var rect = new D2DRect(0, 0, 100, 200);
+            //g.DrawRectangle(rect, D2DColor.Red);
+            //g.DrawText("Hello World", D2DColor.Yellow, this.Font, 200, 200);
+
+            //OnPaint(e, m_visualStage.GetAllGDIObject());
+            OnRender(g, m_visualStage.GetAllGDIObject());
+
+
+            OnRender(g, GetOnlyVisualSampleGDIObject());
+
+            OnRender(g, GetAllVisualFieldGdiObject());
+            if (IsShowSampleHoleImage)
+            {
+
+                if (m_visualStage.FrameOfHoleGDIObjects.Count > 0)
+                {
+                    //sampleHoleImageBuffer = new Bitmap(this.Width, this.Height);
+                    //foreach (var frameGDI in m_visualStage.FrameOfHoleGDIObjects)
+                    //{
+                    //    DrawSampleHoleImage(frameGDI);
+                    //}
+                    OnRender(g, m_visualStage.FrameOfHoleGDIObjects);
+                }
+
+                //e.Graphics.DrawImage(sampleHoleImageBuffer.BSEImage, sampleHoleImageBuffer.GetZoomedRegionF());
 
-                m_DrawMeasureGDIObject.OnPaint(e);
             }
 
+            if (m_DrawMeasureGDIObject != null)
+            {
 
+                m_DrawMeasureGDIObject.OnRender(g);
+            }
 
-            if (m_DrawPolygonFinishGDIObject != null) m_DrawPolygonFinishGDIObject.OnPaint(e);
 
 
+            if (m_DrawPolygonFinishGDIObject != null) m_DrawPolygonFinishGDIObject.OnRender(g);
+
         }
-        public void OnPaint(PaintEventArgs e, List<CDisplayGDIObject> m_ObjectGDIObjects)//处理重绘情况
+        public void OnRender(D2DGraphics g, List<CDisplayGDIObject> m_ObjectGDIObjects)//处理重绘情况
         {
             foreach (CDisplayGDIObject item in m_ObjectGDIObjects.ToArray())
             {
                 if (item != null)
                 {
-                    item.OnPaint(e);
+                    item.OnRender(g);
                 }
             }
         }
@@ -2175,11 +2237,12 @@ namespace OTSMeasureApp
             //样品孔
             MouseWheelFunction(m_visualStage.GetAllGDIObject(), e.Location, currentZoomNum);
 
-
+           
 
             base.OnMouseWheel(e);
             //重新绘制
             Invalidate();
+            userControl11.Invalidate();
         }
 
         private void MouseWheelFunction(List<CDisplayGDIObject> objList, Point mousePoint, float ZoomNum)
@@ -2760,6 +2823,7 @@ namespace OTSMeasureApp
 
 
                         m_visualStage.FrameOfHoleGDIObjects.Add(createImageRect);
+                       
                     }
 
                 }
@@ -3052,7 +3116,7 @@ namespace OTSMeasureApp
         {
 
             CDisplayGDIObject itemWorkSample;
-            //var sam = GetWorkingVisualSample();
+         
 
             itemWorkSample = GetWorkingVisualSample().GetSampleGDIObject();
             //获取样品孔BSE图像
@@ -3075,8 +3139,8 @@ namespace OTSMeasureApp
 
                             bseImage = CImageHandler.ToGrayBitmap(ImageData, m_iWidth, m_iHeigh);
                             m_visualStage.FrameOfHoleGDIObjects[i].BSEImage = bseImage;
-
-
+                            DrawSampleHoleImage(m_visualStage.FrameOfHoleGDIObjects[i]);
+                        
                             break;
                         }
                     }
@@ -3144,13 +3208,47 @@ namespace OTSMeasureApp
 
         }
 
+
+
         #endregion
 
-   
+        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
+        {
+            this.OnMouseDown(e);
+        }
+
+        private void pictureBox1_Paint(object sender, PaintEventArgs e)
+        {
+            //OnPaint(e, m_visualStage.GetAllGDIObject());
+
+            //OnPaint(e, GetOnlyVisualSampleGDIObject());
+
+            //OnPaint(e, GetAllVisualFieldGdiObject());
+
+            //if (m_DrawMeasureGDIObject != null)
+            //{
 
-        private void CMStrip_Opening(object sender, System.ComponentModel.CancelEventArgs e)
+            //    m_DrawMeasureGDIObject.OnPaint(e);
+            //}
+
+
+
+            //if (m_DrawPolygonFinishGDIObject != null) m_DrawPolygonFinishGDIObject.OnPaint(e);
+        }
+
+        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
         {
+            this.OnMouseUp(e);
+        }
 
+        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
+        {
+            this.OnMouseMove(e);
+        }
+
+        private void userControl11_MouseDown(object sender, MouseEventArgs e)
+        {
+            this.pictureBox1_MouseDown(sender, e);
         }
     }
 }

+ 13 - 7
OTSIncAMeasureApp/4-OTSSamplespaceGraphicsPanel/VisualStage.cs

@@ -49,7 +49,8 @@ namespace OTSMeasureApp._4_OTSSamplespaceGraphicsPanel
 
         private List<CDisplayGDIObject> frameOfHoleGDIObjects;// record all the position of the sampleHole image
         public List<CDisplayGDIObject> FrameOfHoleGDIObjects { get => frameOfHoleGDIObjects; set => frameOfHoleGDIObjects = value; }
-
+      
+      
         public StageDrawingData GetOTSSampleStageData()
         {
             return m_OTSSampleStageData;
@@ -71,11 +72,11 @@ namespace OTSMeasureApp._4_OTSSamplespaceGraphicsPanel
             //样品孔文字内容
             m_ContentGDIObjects = new List<CDisplayGDIObject>();
 
-            m_OTSSampleStageData = new StageDrawingData();
+            m_OTSSampleStageData = oTSSampleStageData;
 
             frameOfHoleGDIObjects = new List<CDisplayGDIObject>();
-
-            SetOTSSampleStageData(oTSSampleStageData ?? throw new ArgumentNullException(nameof(oTSSampleStageData)));
+         
+           
         }
 
         public CVisualStage()
@@ -220,7 +221,7 @@ namespace OTSMeasureApp._4_OTSSamplespaceGraphicsPanel
 
             m_totalCtrlWidth = ctrlWidth;
             m_totalCtrlHeight = ctrlHeight;
-         
+
 
 
             return;
@@ -241,7 +242,7 @@ namespace OTSMeasureApp._4_OTSSamplespaceGraphicsPanel
             //声明中心点变量
            
         }
-
+       
         public void DrawSampleStage()
         {
             StageDrawingData SData = GetOTSSampleStageData();
@@ -265,7 +266,8 @@ namespace OTSMeasureApp._4_OTSSamplespaceGraphicsPanel
                 RectangleF Bourary;
              
                 Bourary = GetCtrlCoordRectF(stageLeftTop, stageRightBottom);
-
+               
+                //sampleHoleImageBuffer = new Bitmap((int)Bourary.Width, (int)Bourary.Height);
                 CDisplayGDIObject CreateBourary;
                 //0:圆角矩形 1:圆形 2:文字 3:矩形
                 if (SData.bStageShape == (ShapeType.RECTANGLE))
@@ -348,6 +350,8 @@ namespace OTSMeasureApp._4_OTSSamplespaceGraphicsPanel
         
          
                 m_SpecimenGDIObjects.Add(CreateSTD);
+
+             
                 return;
             }
             catch (Exception ex)
@@ -356,6 +360,8 @@ namespace OTSMeasureApp._4_OTSSamplespaceGraphicsPanel
                 NLog.LogManager.GetCurrentClassLogger().Error( ex.ToString() );
             }
         }
+       
+       
         public CDisplayGDIObject GetCtrlCoordRect(PointF OTSLeftTop, PointF OTSRightBottom, CreateRectangleType type, string content, string name)
         {
             try

+ 18 - 0
OTSIncAMeasureApp/OTSIncAMeasureApp.csproj

@@ -214,6 +214,14 @@
     <Prefer32Bit>true</Prefer32Bit>
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="d2dlibexport, Version=1.5.0.0, Culture=neutral, PublicKeyToken=7afcd1746c161a40, processorArchitecture=AMD64">
+      <HintPath>..\packages\unvell.D2DLib-x64.1.5.0\lib\net462\d2dlibexport.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="d2dwinform, Version=1.5.0.0, Culture=neutral, PublicKeyToken=7afcd1746c161a40, processorArchitecture=AMD64">
+      <HintPath>..\packages\unvell.D2DLib-x64.1.5.0\lib\net462\d2dwinform.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
     <Reference Include="FEIApiControl">
       <HintPath>..\OpenDll\FEIAPI\FEIApiControl.dll</HintPath>
     </Reference>
@@ -266,6 +274,7 @@
     </Reference>
     <Reference Include="System.Design" />
     <Reference Include="System.Management" />
+    <Reference Include="System.Numerics" />
     <Reference Include="System.Runtime.Remoting" />
     <Reference Include="System.Security" />
     <Reference Include="System.Windows.Forms.DataVisualization" />
@@ -391,6 +400,12 @@
     <Compile Include="4-OTSSamplespaceGraphicsPanel\RingGdiDataInput.Designer.cs">
       <DependentUpon>RingGdiDataInput.cs</DependentUpon>
     </Compile>
+    <Compile Include="4-OTSSamplespaceGraphicsPanel\UserControl1.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="4-OTSSamplespaceGraphicsPanel\UserControl1.Designer.cs">
+      <DependentUpon>UserControl1.cs</DependentUpon>
+    </Compile>
     <Compile Include="4-OTSSamplespaceGraphicsPanel\VisualStage.cs" />
     <Compile Include="5-OTSMeasureStatuImageFun\frmSpecialGrayParticle.cs">
       <SubType>Form</SubType>
@@ -638,6 +653,9 @@
     <EmbeddedResource Include="4-OTSSamplespaceGraphicsPanel\RingGdiDataInput.resx">
       <DependentUpon>RingGdiDataInput.cs</DependentUpon>
     </EmbeddedResource>
+    <EmbeddedResource Include="4-OTSSamplespaceGraphicsPanel\UserControl1.resx">
+      <DependentUpon>UserControl1.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="5-OTSMeasureStatuImageFun\Control_Ruler.resx">
       <DependentUpon>Control_Ruler.cs</DependentUpon>
     </EmbeddedResource>

+ 2 - 5
OTSIncAMeasureApp/Program.cs

@@ -46,14 +46,11 @@ namespace OTSMeasureApp
                 MessageBox.Show("Only one measurement program can be run!", "please confirm", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                 Environment.Exit(0);//退出程序  
             }
-            //AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
+           
 
             Application.EnableVisualStyles();
             Application.SetCompatibleTextRenderingDefault(false);
-            //OTSSplashScreen_IncA sp = new OTSSplashScreen_IncA();
-            //sp.Show();
-            //var f = ;
-            //f.sp = sp;
+            
             Application.Run(new OTSIncAMeasureAppForm());
            
         }

+ 1 - 0
OTSIncAMeasureApp/packages.config

@@ -15,4 +15,5 @@
   <package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net48" />
   <package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net48" />
   <package id="System.ValueTuple" version="4.5.0" targetFramework="net48" />
+  <package id="unvell.D2DLib-x64" version="1.5.0" targetFramework="net48" />
 </packages>