diff --git a/App.xaml.cs b/App.xaml.cs
index a73012c..c2129ac 100644
--- a/App.xaml.cs
+++ b/App.xaml.cs
@@ -2,6 +2,8 @@
using System.Data;
using System.IO;
using System.Windows;
+using System.Windows.Media;
+using System.Windows.Threading;
using log4net.Config;
using SparkClient.Model.Helper;
@@ -19,5 +21,8 @@ public partial class App : Application
XmlConfigurator.Configure(new FileInfo("log4net.config"));
//运行是否需要归档
Log4NetHelper.ArchiveOldLogs();
+ //打开数据库连接
+ //读取数据库多语言配置
+
}
}
\ No newline at end of file
diff --git a/Language/zh_CN.xaml b/Language/zh_CN.xaml
index 139a449..adf2446 100644
--- a/Language/zh_CN.xaml
+++ b/Language/zh_CN.xaml
@@ -141,6 +141,7 @@
显示选择面的边框
显示选择面边框长度文本
显示选择面夹角角度文本
+ 显示关联信息文本
显示选择面的同类面
显示瑕疵面
显示正方向标识
diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs
index 43de02f..f5d49fc 100644
--- a/MainWindow.xaml.cs
+++ b/MainWindow.xaml.cs
@@ -3,6 +3,7 @@ using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
+using System.Windows.Interop;
using System.Windows.Media;
using System.Windows.Media.Animation;
using HandyControl.Controls;
@@ -37,7 +38,14 @@ public partial class MainWindow
this.WindowState = WindowState.Minimized;
};
}
+
+ // 强制设置应用窗口大小为 1920x1080
+ this.Width = 1920;
+ this.Height = 1080;
+
}
+
+ public static extern int GetDpiForSystem();
protected override void OnContentRendered(EventArgs e)
{
diff --git a/Resource/Images/UIResource/03-0.jpg b/Resource/Images/UIResource/03-0.jpg
new file mode 100644
index 0000000..ccf3d51
Binary files /dev/null and b/Resource/Images/UIResource/03-0.jpg differ
diff --git a/SparkClient.csproj b/SparkClient.csproj
index 0a74727..a9cc9e6 100644
--- a/SparkClient.csproj
+++ b/SparkClient.csproj
@@ -74,7 +74,7 @@
Always
- PreserveNewest
+ Always
@@ -181,6 +181,8 @@
+
+
diff --git a/SparkClient.sln.DotSettings.user b/SparkClient.sln.DotSettings.user
index 2d9f5d5..2523794 100644
--- a/SparkClient.sln.DotSettings.user
+++ b/SparkClient.sln.DotSettings.user
@@ -34,6 +34,7 @@
ForceIncluded
ForceIncluded
ForceIncluded
+ ForceIncluded
ForceIncluded
ForceIncluded
ForceIncluded
diff --git a/Views/BaseWindow/BaseControl.xaml b/Views/BaseWindow/BaseControl.xaml
index e108de6..642d869 100644
--- a/Views/BaseWindow/BaseControl.xaml
+++ b/Views/BaseWindow/BaseControl.xaml
@@ -45,14 +45,15 @@
-
+
-
-
-
-
-
+
+
+
+
+
+
diff --git a/Views/UserControl/Viewport3D.xaml b/Views/UserControl/Viewport3D.xaml
index 805f4dd..8f918b4 100644
--- a/Views/UserControl/Viewport3D.xaml
+++ b/Views/UserControl/Viewport3D.xaml
@@ -63,8 +63,9 @@
-
-
+
+
+
diff --git a/Views/UserControl/Viewport3D.xaml.cs b/Views/UserControl/Viewport3D.xaml.cs
index fa4f246..f09fc84 100644
--- a/Views/UserControl/Viewport3D.xaml.cs
+++ b/Views/UserControl/Viewport3D.xaml.cs
@@ -44,16 +44,18 @@ public partial class Viewport3D
//选项初始化 显示-后端-管理类 一致
ViewportRightMenuSelectFaceFrame.IsEnabled = ViewportRightMenuSelectFace.IsChecked ;
- ViewportRightMenuSelectFaceLengthText.IsEnabled = ViewportRightMenuSelectFace.IsChecked ;
- ViewportRightMenuSelectFaceAngleText.IsEnabled = ViewportRightMenuSelectFace.IsChecked ;
+ // ViewportRightMenuSelectFaceLengthText.IsEnabled = ViewportRightMenuSelectFace.IsChecked ;
+ // ViewportRightMenuSelectFaceAngleText.IsEnabled = ViewportRightMenuSelectFace.IsChecked ;
+ ViewportRightMenuSelectFaceText.IsCheckable = ViewportRightMenuSelectFace.IsChecked ;
ViewportRightMenuSelectFaceKind.IsEnabled = ViewportRightMenuSelectFace.IsChecked ;
ViewportRightMenuShowModelFace.IsChecked = true;
ViewportRightMenuShowModelFrame.IsChecked = true;
ViewportRightMenuShowLighting.IsChecked = true;
ViewportRightMenuSelectFace.IsChecked = ViewportManager.DoubleClickSelect;
ViewportRightMenuSelectFaceFrame.IsChecked = ViewportManager.DoubleClickSelectShowBorder;
- ViewportRightMenuSelectFaceLengthText.IsChecked = ViewportManager.DoubleClickSelectShowBorderLength;
- ViewportRightMenuSelectFaceAngleText.IsChecked = ViewportManager.DoubleClickSelectShowBorderAngle;
+ // ViewportRightMenuSelectFaceLengthText.IsChecked = ViewportManager.DoubleClickSelectShowBorderLength;
+ // ViewportRightMenuSelectFaceAngleText.IsChecked = ViewportManager.DoubleClickSelectShowBorderAngle;
+ ViewportRightMenuSelectFaceText.IsChecked = ViewportManager.DoubleClickSelectShowInfoText;
ViewportRightMenuSelectFaceKind.IsChecked = ViewportManager.DoubleClickSelectShowPlaneType;
@@ -262,8 +264,9 @@ public partial class Viewport3D
private void MenuItem_OnCheckedChanged(object sender, RoutedEventArgs e)
{
ViewportRightMenuSelectFaceFrame.IsEnabled = ViewportRightMenuSelectFace.IsChecked ;
- ViewportRightMenuSelectFaceLengthText.IsEnabled = ViewportRightMenuSelectFace.IsChecked ;
- ViewportRightMenuSelectFaceAngleText.IsEnabled = ViewportRightMenuSelectFace.IsChecked ;
+ // ViewportRightMenuSelectFaceLengthText.IsEnabled = ViewportRightMenuSelectFace.IsChecked ;
+ // ViewportRightMenuSelectFaceAngleText.IsEnabled = ViewportRightMenuSelectFace.IsChecked ;
+ ViewportRightMenuSelectFaceText.IsCheckable = ViewportRightMenuSelectFace.IsChecked ;
ViewportRightMenuSelectFaceKind.IsEnabled = ViewportRightMenuSelectFace.IsChecked ;
var controlName = ((MenuItem)sender).Name.ToString();
@@ -313,6 +316,11 @@ public partial class Viewport3D
ViewportManager.DoubleClickSelectShowBorderLength = checkResult;
ViewportManager.ResetChooseAddModels();
break;
+ case "ViewportRightMenuSelectFaceText":
+ //双击选择面的边框长度文字
+ ViewportManager.DoubleClickSelectShowInfoText = checkResult;
+ ViewportManager.ResetChooseAddModels();
+ break;
case "ViewportRightMenuSelectFaceAngleText":
//双击选择面的边框夹角文字
ViewportManager.DoubleClickSelectShowBorderAngle = checkResult;
diff --git a/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs b/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs
index 82798bf..ba2b326 100644
--- a/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs
+++ b/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs
@@ -431,8 +431,11 @@ public class ViewportHelperPro
public static List GenerateLineTextModels(List entities,
Color4? textColor = null,bool showAll = false)
{
+ var selFacet = entities;
+ var selFacetType = entities.First().PlaneType;
+
var result = new List();
- if (entities.Count > 0 && entities[0].PlaneType == PlaneType.Girdle)
+ if (selFacetType == PlaneType.Girdle)
{
if (ViewportManager.MainModelGirdleMaxLines != null || ViewportManager.MainModelGirdleMinLines != null ||
ViewportManager.MainModelGirdleAvgLines != null)
@@ -447,30 +450,52 @@ public class ViewportHelperPro
}
else
{
- var selFaceVector = entities
- .SelectMany(entity => new[] { entity.Point1, entity.Point2, entity.Point3 })
- .Distinct()
- .ToList();
- var uniqueLines = new HashSet();
- var sortedVectors = VectorClockwiseSort(selFaceVector);
- for (int i = 0; i < sortedVectors.Count; i++)
- {
- var current = sortedVectors[i];
- var next = sortedVectors[(i + 1) % sortedVectors.Count];
+ //查找同类面
+ List facetTypeAll =
+ ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == selFacetType);
+ var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode)
+ .ToDictionary(group => group.Key, group => group.ToList());
+
+ /***
+ * 思路:
+ * 1、以面分组,1组为台面、底面,8组、16组、64组、other
+ * 2、每组数据区别
+ * 1组:取第一个数据
+ * 8组:按索引0-7 -> 1-8
+ * 16组:1-2、3-4、5-6、7-8、9-10、11-12、13-14、15-0共享数据
+ * 64组:这组特殊理论上是腰,按照else里的东西来
+ * 3、这个方法是主动点击,被动触发理论上通用
+ * 4、主动触发:循环遍历面组,根据面类型获取算法存储的数据,在Manager里制定面-参数的一对多关系,主动触发时,取参数的首位为默认
+ * 5、被动触发:根据结果页传入的参数编号,找到对应的面,循环遍历面组,根据面类型获取算法存储的数据,根据被动传入参数找到值
+ * 6、 ①组面可能由至少两个三角形组成,计算出三角形拼接出的多边形的中心作为文字显示的中心
+ * ②在从算法结果数据对应好面组的索引,做成值-组面id的文本,计算出这个文本的大小
+ * ③在拼接的图片中心,平行于平面,向中心点外偏移“文本大小高度+0.1"个单位 显示文本
+ */
- double length = (next - current).Length();
- string lineKey = $"{length:F2}";
- if (showAll == false)
- {
- if (uniqueLines.Contains(lineKey)) continue;
- uniqueLines.Add(lineKey);
- }
- var midPoint = (current + next) / 2;
- var text = $"{length:F2}mm";
- var textY = midPoint.Y > ViewportManager.CenterVector.Y ? midPoint.Y + 0.3f : midPoint.Y - 0.3f;
- var lengthTextModel = DisplayText3D(text, new Vector3(midPoint.X, textY, midPoint.Z),next - current, textColor);
- result.Add(lengthTextModel);
- }
+ // var selFaceVector = entities
+ // .SelectMany(entity => new[] { entity.Point1, entity.Point2, entity.Point3 })
+ // .Distinct()
+ // .ToList();
+ // var uniqueLines = new HashSet();
+ // var sortedVectors = VectorClockwiseSort(selFaceVector);
+ // for (int i = 0; i < sortedVectors.Count; i++)
+ // {
+ // var current = sortedVectors[i];
+ // var next = sortedVectors[(i + 1) % sortedVectors.Count];
+ //
+ // double length = (next - current).Length();
+ // string lineKey = $"{length:F2}";
+ // if (showAll == false)
+ // {
+ // if (uniqueLines.Contains(lineKey)) continue;
+ // uniqueLines.Add(lineKey);
+ // }
+ // var midPoint = (current + next) / 2;
+ // var text = $"{length:F2}mm";
+ // var textY = midPoint.Y > ViewportManager.CenterVector.Y ? midPoint.Y + 0.3f : midPoint.Y - 0.3f;
+ // var lengthTextModel = DisplayText3D(text, new Vector3(midPoint.X, textY, midPoint.Z),next - current, textColor);
+ // result.Add(lengthTextModel);
+ // }
}
@@ -1106,11 +1131,11 @@ public class ViewportHelperPro
avgLine = lineLengths.OrderBy(l => Math.Abs(l.Length - lineLengths.Average(ll => ll.Length)))
.First().Line;
}
- private static float CalculateLength(Tuple line)
+ private static double CalculateLength(Tuple line)
{
Vector3 startPoint = line.Item1;
Vector3 endPoint = line.Item2;
- return Vector3.Distance(startPoint, endPoint);
+ return Math.Round(Vector3.Distance(startPoint, endPoint), 2);
}
#endregion
diff --git a/Views/UserControl/ViewportData/Helper/ViewportManager.cs b/Views/UserControl/ViewportData/Helper/ViewportManager.cs
index 00ec596..2c2d301 100644
--- a/Views/UserControl/ViewportData/Helper/ViewportManager.cs
+++ b/Views/UserControl/ViewportData/Helper/ViewportManager.cs
@@ -91,6 +91,8 @@ public class ViewportManager
public static bool DoubleClickSelectShowBorderLength = false;
//选中边框夹角文字
public static bool DoubleClickSelectShowBorderAngle = false;
+
+ public static bool DoubleClickSelectShowInfoText = false;
//选中同类面
public static bool DoubleClickSelectShowPlaneType = true;
//选中三角形代码
@@ -112,8 +114,8 @@ public class ViewportManager
HashSet models = new HashSet();
models.Add(SelShowType.SelPanel);
if(DoubleClickSelectShowBorder) models.Add(SelShowType.Border);
- if (DoubleClickSelectShowBorderLength) models.Add(SelShowType.LengthText);
- if (DoubleClickSelectShowBorderAngle) models.Add(SelShowType.BorderAngle);
+ if (DoubleClickSelectShowInfoText) models.Add(SelShowType.LengthText);
+ // if (DoubleClickSelectShowBorderAngle) models.Add(SelShowType.BorderAngle);
if (DoubleClickSelectShowPlaneType) models.Add(SelShowType.IsTypePanel);
ChooseAddModels.AddRange( ViewportHelperPro.GentrateChosenView(ChooseTriangleCode, models.ToArray()));
ChooseAddModels.ForEach(e => _viewport.Items.Add(e));