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));