Browse Source

compdfkit(win) - 测量Demo 参数面板设置同步属性问题

zhuyi 1 year ago
parent
commit
80e28a13ce

+ 9 - 7
Demo/Examples/Compdfkit_Tools/Measure/MeasureControl.xaml.cs

@@ -63,6 +63,8 @@ namespace Compdfkit_Tools.Measure
                 default:
                     break;
             }
+
+            SettingPanel.BindMeasureSetting(e);
         }
         #region Init PDFViewer
 
@@ -283,8 +285,8 @@ namespace Compdfkit_Tools.Measure
                 if(rawAnnot.Type== C_ANNOTATION_TYPE.C_ANNOTATION_POLYGON)
                 {
                     CPDFPolygonAnnotation Annot = rawAnnot as CPDFPolygonAnnotation;
-
-                    CPDFCaptionType CaptionType = Annot.GetAreaMeasure().MeasureInfo.CaptionType;
+                    CPDFMeasureInfo measureInfo= Annot.GetAreaMeasure().MeasureInfo;
+                    CPDFCaptionType CaptionType = measureInfo.CaptionType;
                     bool IsArea = false;
                     bool IsLength = false;
                     if ((CaptionType& CPDFCaptionType.CPDF_CAPTION_AREA)== CPDFCaptionType.CPDF_CAPTION_AREA)
@@ -303,11 +305,11 @@ namespace Compdfkit_Tools.Measure
                     double currentInch = MeasureSetting.GetMeasurePDFLength(Length);
 
                     MeasureEventArgs measureEvent = new MeasureEventArgs();
-                    measureEvent.RulerTranslateUnit = MeasureSetting.RulerTranslateUnit;
-                    measureEvent.RulerTranslate = MeasureSetting.RulerTranslate;
-                    measureEvent.RulerBase = MeasureSetting.RulerBase;
-                    measureEvent.RulerBaseUnit = MeasureSetting.RulerBaseUnit;
-                    measureEvent.Precision = MeasureSetting.Precision;
+                    measureEvent.RulerTranslateUnit = measureInfo.RulerTranslateUnit;
+                    measureEvent.RulerTranslate = measureInfo.RulerTranslate;
+                    measureEvent.RulerBase = measureInfo.RulerBase;
+                    measureEvent.RulerBaseUnit = measureInfo.RulerBaseUnit;
+                    measureEvent.Precision = GetMeasureShowPrecision(measureInfo.Precision);
                     measureEvent.Type = CPDFMeasureType.CPDF_AREA_MEASURE;
                     measureEvent.Distance = string.Format(
                         "{0} {1}",

+ 157 - 19
Demo/Examples/Compdfkit_Tools/Measure/MeasureSettingPanel.xaml.cs

@@ -40,7 +40,7 @@ namespace Compdfkit_Tools.Measure
 
         public void ShowAreaAndLength(Visibility visibility)
         {
-            if (visibility==Visibility.Visible)
+            if (visibility == Visibility.Visible)
             {
                 SettingPanel.Height = 350;
             }
@@ -76,7 +76,11 @@ namespace Compdfkit_Tools.Measure
                 }
             }
 
-            SaveMeasureSetting();
+            if (UpdateArgsList != null && UpdateArgsList.Count == 0)
+            {
+                SaveMeasureSetting();
+            }
+
             if (UpdateArgsList != null && UpdateArgsList.Count > 0)
             {
                 List<AnnotArgsType> allowTypeList = new List<AnnotArgsType>()
@@ -100,11 +104,32 @@ namespace Compdfkit_Tools.Measure
                                     {
                                         CPDFDistanceMeasure lineMeasure = lineAnnot.GetDistanceMeasure();
                                         CPDFMeasureInfo measureInfo = lineMeasure.MeasureInfo;
-                                        measureInfo.Precision = MeasureSetting.GetMeasureSavePrecision();
-                                        measureInfo.RulerBase = (float)MeasureSetting.RulerBase;
-                                        measureInfo.RulerBaseUnit = MeasureSetting.RulerBaseUnit;
-                                        measureInfo.RulerTranslate = (float)MeasureSetting.RulerTranslate;
-                                        measureInfo.RulerTranslateUnit = MeasureSetting.RulerTranslateUnit;
+                                        if (PrecisionBox.SelectedValue != null)
+                                        {
+                                            ComboBoxItem checkItem = PrecisionBox.SelectedValue as ComboBoxItem;
+                                            if (double.TryParse(checkItem.Content.ToString(), out double precision))
+                                            {
+                                                measureInfo.Precision = GetMeasureSavePrecision(precision);
+                                            }
+                                        }
+                                        if (double.TryParse(RulerBaseText.Text, out double ruleBasedata))
+                                        {
+                                            measureInfo.RulerBase = (float)ruleBasedata;
+                                        }
+                                        if (RulerBaseUnitCombo.SelectedItem != null)
+                                        {
+                                            ComboBoxItem RulerBaseUnitcheckItem = RulerBaseUnitCombo.SelectedItem as ComboBoxItem;
+                                            measureInfo.RulerBaseUnit = RulerBaseUnitcheckItem.Content.ToString();
+                                        }
+                                        if (double.TryParse(RulerTranslateText.Text, out double ruletranBasedata))
+                                        {
+                                            measureInfo.RulerTranslate = (float)ruletranBasedata;
+                                        }
+                                        if (RulerTranslateCombo.SelectedItem != null)
+                                        {
+                                            ComboBoxItem RulerTranslatecheckItem = RulerTranslateCombo.SelectedItem as ComboBoxItem;
+                                            measureInfo.RulerTranslateUnit = RulerTranslatecheckItem.Content.ToString();
+                                        }
                                         lineMeasure.SetMeasureInfo(measureInfo);
                                         lineMeasure.SetMeasureScale(
                                             measureInfo.RulerBase,
@@ -124,11 +149,32 @@ namespace Compdfkit_Tools.Measure
                                     {
                                         CPDFPerimeterMeasure polylineMeasure = polylineAnnot.GetPerimeterMeasure();
                                         CPDFMeasureInfo measureInfo = polylineMeasure.MeasureInfo;
-                                        measureInfo.Precision = MeasureSetting.GetMeasureSavePrecision();
-                                        measureInfo.RulerBase = (float)MeasureSetting.RulerBase;
-                                        measureInfo.RulerBaseUnit = MeasureSetting.RulerBaseUnit;
-                                        measureInfo.RulerTranslate = (float)MeasureSetting.RulerTranslate;
-                                        measureInfo.RulerTranslateUnit = MeasureSetting.RulerTranslateUnit;
+                                        if (PrecisionBox.SelectedValue != null)
+                                        {
+                                            ComboBoxItem checkItem = PrecisionBox.SelectedValue as ComboBoxItem;
+                                            if (double.TryParse(checkItem.Content.ToString(), out double precision))
+                                            {
+                                                measureInfo.Precision = GetMeasureSavePrecision(precision);
+                                            }
+                                        }
+                                        if (double.TryParse(RulerBaseText.Text, out double ruleBasedata))
+                                        {
+                                            measureInfo.RulerBase = (float)ruleBasedata;
+                                        }
+                                        if (RulerBaseUnitCombo.SelectedItem != null)
+                                        {
+                                            ComboBoxItem RulerBaseUnitcheckItem = RulerBaseUnitCombo.SelectedItem as ComboBoxItem;
+                                            measureInfo.RulerBaseUnit = RulerBaseUnitcheckItem.Content.ToString();
+                                        }
+                                        if (double.TryParse(RulerTranslateText.Text, out double ruletranBasedata))
+                                        {
+                                            measureInfo.RulerTranslate = (float)ruletranBasedata;
+                                        }
+                                        if (RulerTranslateCombo.SelectedItem != null)
+                                        {
+                                            ComboBoxItem RulerTranslatecheckItem = RulerTranslateCombo.SelectedItem as ComboBoxItem;
+                                            measureInfo.RulerTranslateUnit = RulerTranslatecheckItem.Content.ToString();
+                                        }
                                         polylineMeasure.SetMeasureInfo(measureInfo);
                                         polylineMeasure.SetMeasureScale(
                                             measureInfo.RulerBase,
@@ -148,18 +194,39 @@ namespace Compdfkit_Tools.Measure
                                     {
                                         CPDFAreaMeasure areaMeasure = areaAnnot.GetAreaMeasure();
                                         CPDFMeasureInfo measureInfo = areaMeasure.MeasureInfo;
-                                        measureInfo.Precision = MeasureSetting.GetMeasureSavePrecision();
-                                        measureInfo.RulerBase = (float)MeasureSetting.RulerBase;
-                                        measureInfo.RulerBaseUnit = MeasureSetting.RulerBaseUnit;
-                                        measureInfo.RulerTranslate = (float)MeasureSetting.RulerTranslate;
-                                        measureInfo.RulerTranslateUnit = MeasureSetting.RulerTranslateUnit;
+                                        if (PrecisionBox.SelectedValue != null)
+                                        {
+                                            ComboBoxItem checkItem = PrecisionBox.SelectedValue as ComboBoxItem;
+                                            if (double.TryParse(checkItem.Content.ToString(), out double precision))
+                                            {
+                                                measureInfo.Precision = GetMeasureSavePrecision(precision);
+                                            }
+                                        }
+                                        if (double.TryParse(RulerBaseText.Text, out double ruleBasedata))
+                                        {
+                                            measureInfo.RulerBase = (float)ruleBasedata;
+                                        }
+                                        if (RulerBaseUnitCombo.SelectedItem != null)
+                                        {
+                                            ComboBoxItem RulerBaseUnitcheckItem = RulerBaseUnitCombo.SelectedItem as ComboBoxItem;
+                                            measureInfo.RulerBaseUnit = RulerBaseUnitcheckItem.Content.ToString();
+                                        }
+                                        if (double.TryParse(RulerTranslateText.Text, out double ruletranBasedata))
+                                        {
+                                            measureInfo.RulerTranslate = (float)ruletranBasedata;
+                                        }
+                                        if (RulerTranslateCombo.SelectedItem != null)
+                                        {
+                                            ComboBoxItem RulerTranslatecheckItem = RulerTranslateCombo.SelectedItem as ComboBoxItem;
+                                            measureInfo.RulerTranslateUnit = RulerTranslatecheckItem.Content.ToString();
+                                        }
 
                                         measureInfo.CaptionType = CPDFCaptionType.CPDF_CAPTION_NONE;
-                                        if (MeasureSetting.IsShowArea)
+                                        if ((bool)AreaCheckBox.IsChecked)
                                         {
                                             measureInfo.CaptionType |= CPDFCaptionType.CPDF_CAPTION_AREA;
                                         }
-                                        if (MeasureSetting.IsShowLength)
+                                        if ((bool)LengthCheckBox.IsChecked)
                                         {
                                             measureInfo.CaptionType |= CPDFCaptionType.CPDF_CAPTION_LENGTH;
                                         }
@@ -187,6 +254,31 @@ namespace Compdfkit_Tools.Measure
             ReturnToInfoPanel = false;
         }
 
+        private int GetMeasureSavePrecision(double Precision)
+        {
+            if (Precision == 1)
+            {
+                return CPDFMeasure.PRECISION_VALUE_ZERO;
+            }
+            if (Precision == 0.1)
+            {
+                return CPDFMeasure.PRECISION_VALUE_ONE;
+            }
+            if (Precision == 0.01)
+            {
+                return CPDFMeasure.PRECISION_VALUE_TWO;
+            }
+            if (Precision == 0.001)
+            {
+                return CPDFMeasure.PRECISION_VALUE_THREE;
+            }
+            if (Precision == 0.0001)
+            {
+                return CPDFMeasure.PRECISION_VALUE_FOUR;
+            }
+            return 0;
+        }
+
         private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
         {
             List<Key> allowKeys = new List<Key>()
@@ -225,6 +317,10 @@ namespace Compdfkit_Tools.Measure
 
         public void BindMeasureSetting()
         {
+            if (UpdateArgsList != null && UpdateArgsList.Count>0)
+            {
+                return;
+            }
             RulerBaseText.Text = MeasureSetting.RulerBase.ToString();
             RulerTranslateText.Text = MeasureSetting.RulerTranslate.ToString();
             RulerTranslateCombo.SelectedIndex = -1;
@@ -261,6 +357,48 @@ namespace Compdfkit_Tools.Measure
                 }
             }
         }
+        public void BindMeasureSetting(MeasureEventArgs measureEventArgs)
+        {
+            if (measureEventArgs != null)
+            {
+
+                RulerBaseText.Text = measureEventArgs.RulerBase.ToString();
+                RulerTranslateText.Text = measureEventArgs.RulerTranslate.ToString();
+                RulerTranslateCombo.SelectedIndex = -1;
+                RulerBaseUnitCombo.SelectedIndex = -1;
+                PrecisionBox.SelectedIndex = -1;
+                if (measureEventArgs.RulerBaseUnit == "in")
+                {
+                    RulerBaseUnitCombo.SelectedIndex = 0;
+                }
+                if (measureEventArgs.RulerBaseUnit == "cm")
+                {
+                    RulerBaseUnitCombo.SelectedIndex = 1;
+                }
+                if (measureEventArgs.RulerBaseUnit == "mm")
+                {
+                    RulerBaseUnitCombo.SelectedIndex = 2;
+                }
+
+                for (int i = 0; i < RulerTranslateCombo.Items.Count; i++)
+                {
+                    ComboBoxItem checkItem = RulerTranslateCombo.Items[i] as ComboBoxItem;
+                    if (checkItem != null && checkItem.Content.ToString() == measureEventArgs.RulerTranslateUnit.ToString())
+                    {
+                        RulerTranslateCombo.SelectedIndex = i;
+                    }
+                }
+
+                for (int i = 0; i < PrecisionBox.Items.Count; i++)
+                {
+                    ComboBoxItem checkItem = PrecisionBox.Items[i] as ComboBoxItem;
+                    if (checkItem != null && checkItem.Content.ToString() == ((decimal)measureEventArgs.Precision).ToString())
+                    {
+                        PrecisionBox.SelectedIndex = i;
+                    }
+                }
+            }
+        }
 
         private void SaveMeasureSetting()
         {