|
|
@ -1,5 +1,6 @@ |
|
|
|
using System.Collections.ObjectModel; |
|
|
|
using System.Collections.ObjectModel; |
|
|
|
using System.IO; |
|
|
|
using System.IO; |
|
|
|
|
|
|
|
using System.Text; |
|
|
|
using System.Windows; |
|
|
|
using System.Windows; |
|
|
|
using System.Windows.Media; |
|
|
|
using System.Windows.Media; |
|
|
|
using System.Windows.Media.Animation; |
|
|
|
using System.Windows.Media.Animation; |
|
|
@ -21,6 +22,9 @@ using HelixToolkit.Wpf; |
|
|
|
using MeshBuilder = HelixToolkit.Wpf.SharpDX.MeshBuilder; |
|
|
|
using MeshBuilder = HelixToolkit.Wpf.SharpDX.MeshBuilder; |
|
|
|
using OrthographicCamera = HelixToolkit.Wpf.SharpDX.OrthographicCamera; |
|
|
|
using OrthographicCamera = HelixToolkit.Wpf.SharpDX.OrthographicCamera; |
|
|
|
using System.Windows.Input; |
|
|
|
using System.Windows.Input; |
|
|
|
|
|
|
|
using SparkClient.Model.Extension; |
|
|
|
|
|
|
|
using SparkClient.Model.Helper; |
|
|
|
|
|
|
|
using MessageBox = SparkClient.Views.Dialog.MessageBox; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace SparkClient.Views.UserControl.ViewportData.Helper; |
|
|
|
namespace SparkClient.Views.UserControl.ViewportData.Helper; |
|
|
@ -583,110 +587,181 @@ public class ViewportHelperPro |
|
|
|
/// <returns></returns> |
|
|
|
/// <returns></returns> |
|
|
|
public static List<GeometryModel3D> GenerateLineTextModels(List<Viewport3DTriangleEntity> entities, string valKey = "") |
|
|
|
public static List<GeometryModel3D> GenerateLineTextModels(List<Viewport3DTriangleEntity> entities, string valKey = "") |
|
|
|
{ |
|
|
|
{ |
|
|
|
Logger.Info("【面文本生成】开始生成面相关文本信息"); |
|
|
|
|
|
|
|
var selFacet = entities; |
|
|
|
|
|
|
|
var selFacetType = entities.First().PlaneType; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var result = new List<GeometryModel3D>(); |
|
|
|
var result = new List<GeometryModel3D>(); |
|
|
|
if (selFacetType == PlaneType.Girdle && string.IsNullOrWhiteSpace(valKey)) |
|
|
|
string steps = ViewportManager.DiamondType.Split(" ").Last(); |
|
|
|
|
|
|
|
if (Common.RunMode == 0 && steps.StartsWith("S")) |
|
|
|
{ |
|
|
|
{ |
|
|
|
// Logger.Info($"【面文本生成】 命中面{selFacetType},是腰"); |
|
|
|
Logger.Info("【面文本生成】开始生成面相关文本信息"); |
|
|
|
// List<Viewport3DTriangleEntity> facetTypeAll = |
|
|
|
var selFacet = entities; |
|
|
|
// ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == selFacetType); |
|
|
|
var selFacetType = entities.First().PlaneType; |
|
|
|
// var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode) |
|
|
|
|
|
|
|
// .ToDictionary(group => group.Key, group => group.ToList()); |
|
|
|
|
|
|
|
// Logger.Info($"【面文本生成】 腰由{groupedDic.Count}个面组成"); |
|
|
|
|
|
|
|
// |
|
|
|
|
|
|
|
// var selPlaneCode = entities.First().PlaneCode; |
|
|
|
|
|
|
|
// Logger.Info($"【面文本生成】 当前选择{selPlaneCode}"); |
|
|
|
|
|
|
|
// |
|
|
|
|
|
|
|
// List<Vector3> facetPoints = new List<Vector3>(); |
|
|
|
|
|
|
|
// entities.ForEach(e => { facetPoints.Add(e.Point1); facetPoints.Add(e.Point2); facetPoints.Add(e.Point3); }); |
|
|
|
|
|
|
|
// var facetIndex = -1; |
|
|
|
|
|
|
|
// int.TryParse(selPlaneCode.Split("_")[1], out facetIndex); |
|
|
|
|
|
|
|
// |
|
|
|
|
|
|
|
// if (facetIndex == -1) |
|
|
|
|
|
|
|
// { |
|
|
|
|
|
|
|
// Logger.Info($"【面文本生成】 面索引解析失败{selPlaneCode}"); |
|
|
|
|
|
|
|
// return result; |
|
|
|
|
|
|
|
// } |
|
|
|
|
|
|
|
// int linePointType = facetIndex % 4; |
|
|
|
|
|
|
|
// Console.WriteLine(facetIndex); |
|
|
|
|
|
|
|
// switch (linePointType) |
|
|
|
|
|
|
|
// { |
|
|
|
|
|
|
|
// case 0: |
|
|
|
|
|
|
|
// case 2: |
|
|
|
|
|
|
|
// var longestLine1 = GetLeftOrRightLineSegment(facetPoints, facetIndex >= 25 && facetIndex <= 57 ? true : false); |
|
|
|
|
|
|
|
// result.Add(DisplayLineModel3D(new List<Tuple<Vector3, Vector3>>() { longestLine1 }, new Color4(1f, 0, 0, 1f), 2f)); |
|
|
|
|
|
|
|
// break; |
|
|
|
|
|
|
|
// case 1: |
|
|
|
|
|
|
|
// case 3: |
|
|
|
|
|
|
|
// var longestLine2 = GetLeftOrRightLineSegment(facetPoints, facetIndex >= 25 && facetIndex <= 57 ? false : true); |
|
|
|
|
|
|
|
// result.Add(DisplayLineModel3D(new List<Tuple<Vector3, Vector3>>() { longestLine2 }, new Color4(1f, 0, 0, 1f), 2f)); |
|
|
|
|
|
|
|
// break; |
|
|
|
|
|
|
|
// } |
|
|
|
|
|
|
|
// |
|
|
|
|
|
|
|
// if (result.Exists(e => e == null)) |
|
|
|
|
|
|
|
// { |
|
|
|
|
|
|
|
// Logger.Info("目标线段为空"); |
|
|
|
|
|
|
|
// return result; |
|
|
|
|
|
|
|
// } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//开始找值[选中线的值] |
|
|
|
|
|
|
|
// string param = string.Empty; |
|
|
|
if (selFacetType == PlaneType.Girdle && string.IsNullOrWhiteSpace(valKey)) |
|
|
|
// var valueIndex = 0; |
|
|
|
{ |
|
|
|
// if (facetIndex % 8 == 0 || (facetIndex + 1) % 8 == 0) |
|
|
|
// Logger.Info($"【面文本生成】 命中面{selFacetType},是腰"); |
|
|
|
// { |
|
|
|
// List<Viewport3DTriangleEntity> facetTypeAll = |
|
|
|
// //上腰面 |
|
|
|
// ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == selFacetType); |
|
|
|
// Logger.Info($"【面文本生成】 腰面值 波峰【上腰面】"); |
|
|
|
// var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode) |
|
|
|
// valueIndex = (int)Math.Ceiling(facetIndex / 8.0) == 8 ? 0 : (int)Math.Ceiling(facetIndex / 8.0); |
|
|
|
// .ToDictionary(group => group.Key, group => group.ToList()); |
|
|
|
// param = "GIRDLE_BONE"; |
|
|
|
// Logger.Info($"【面文本生成】 腰由{groupedDic.Count}个面组成"); |
|
|
|
// } else if (linePointType == 3 || linePointType == 0) |
|
|
|
// |
|
|
|
// { |
|
|
|
// var selPlaneCode = entities.First().PlaneCode; |
|
|
|
// //风筝面 |
|
|
|
// Logger.Info($"【面文本生成】 当前选择{selPlaneCode}"); |
|
|
|
// Logger.Info($"【面文本生成】 腰面值 波峰【风筝面】"); |
|
|
|
// |
|
|
|
// valueIndex = (facetIndex / 8); |
|
|
|
// List<Vector3> facetPoints = new List<Vector3>(); |
|
|
|
// param = "GIRDLE_BEZEL"; |
|
|
|
// entities.ForEach(e => { facetPoints.Add(e.Point1); facetPoints.Add(e.Point2); facetPoints.Add(e.Point3); }); |
|
|
|
// } |
|
|
|
// var facetIndex = -1; |
|
|
|
// else |
|
|
|
// int.TryParse(selPlaneCode.Split("_")[1], out facetIndex); |
|
|
|
// { |
|
|
|
// |
|
|
|
// //腰厚比 |
|
|
|
// if (facetIndex == -1) |
|
|
|
// Logger.Info($"【面文本生成】 腰面值 波峰【腰厚比】"); |
|
|
|
// { |
|
|
|
// valueIndex = (facetIndex / 4); |
|
|
|
// Logger.Info($"【面文本生成】 面索引解析失败{selPlaneCode}"); |
|
|
|
// param = "GIRDLE_VALLEY"; |
|
|
|
// return result; |
|
|
|
// } |
|
|
|
// } |
|
|
|
// |
|
|
|
// int linePointType = facetIndex % 4; |
|
|
|
// valueIndex += 1; |
|
|
|
// Console.WriteLine(facetIndex); |
|
|
|
// var detail = ViewportManager.DiamondData[$"{param}_DETAIL"]; |
|
|
|
// switch (linePointType) |
|
|
|
// if (detail == null) |
|
|
|
// { |
|
|
|
// { |
|
|
|
// case 0: |
|
|
|
// Logger.Info($"【面文本生成】 {param}_DETAIL Key不存在"); |
|
|
|
// case 2: |
|
|
|
// return result; |
|
|
|
// var longestLine1 = GetLeftOrRightLineSegment(facetPoints, facetIndex >= 25 && facetIndex <= 57 ? true : false); |
|
|
|
// } |
|
|
|
// result.Add(DisplayLineModel3D(new List<Tuple<Vector3, Vector3>>() { longestLine1 }, new Color4(1f, 0, 0, 1f), 2f)); |
|
|
|
// Logger.Info($"【面文本生成】 {param}_DETAIL == {detail}"); |
|
|
|
// break; |
|
|
|
// var paramValue = detail[$"{param}_{valueIndex}"]; |
|
|
|
// case 1: |
|
|
|
// if (paramValue == null) |
|
|
|
// case 3: |
|
|
|
// { |
|
|
|
// var longestLine2 = GetLeftOrRightLineSegment(facetPoints, facetIndex >= 25 && facetIndex <= 57 ? false : true); |
|
|
|
// Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{valueIndex} Key不存在"); |
|
|
|
// result.Add(DisplayLineModel3D(new List<Tuple<Vector3, Vector3>>() { longestLine2 }, new Color4(1f, 0, 0, 1f), 2f)); |
|
|
|
// return result; |
|
|
|
// break; |
|
|
|
// } |
|
|
|
// } |
|
|
|
// Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{valueIndex} ==={paramValue}"); |
|
|
|
// |
|
|
|
// var valueFloat = (Math.Floor(float.Parse(paramValue.ToString()) * 1000) / 10).ToString(); |
|
|
|
// if (result.Exists(e => e == null)) |
|
|
|
// Logger.Info($"【面文本生成】 {valueFloat} -- {valueIndex}"); |
|
|
|
// { |
|
|
|
// var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector); |
|
|
|
// Logger.Info("目标线段为空"); |
|
|
|
// result.Add(DisplayText3D($"{valueFloat}", facetTextPoint)); |
|
|
|
// return result; |
|
|
|
List<Viewport3DTriangleEntity> facetTypeAll = |
|
|
|
// } |
|
|
|
ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == selFacetType); |
|
|
|
|
|
|
|
var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode) |
|
|
|
//开始找值[选中线的值] |
|
|
|
.ToDictionary(group => group.Key, group => group.ToList()); |
|
|
|
// string param = string.Empty; |
|
|
|
List<string> girdleKey = new List<string> { "GIRDLE_BEZEL", "GIRDLE_BONE", "GIRDLE_VALLEY" }; |
|
|
|
// var valueIndex = 0; |
|
|
|
var girdleResultDic = new Dictionary<string, Dictionary<string, List<Viewport3DTriangleEntity>>>(); |
|
|
|
// if (facetIndex % 8 == 0 || (facetIndex + 1) % 8 == 0) |
|
|
|
foreach (var key in girdleKey) |
|
|
|
// { |
|
|
|
|
|
|
|
// //上腰面 |
|
|
|
|
|
|
|
// Logger.Info($"【面文本生成】 腰面值 波峰【上腰面】"); |
|
|
|
|
|
|
|
// valueIndex = (int)Math.Ceiling(facetIndex / 8.0) == 8 ? 0 : (int)Math.Ceiling(facetIndex / 8.0); |
|
|
|
|
|
|
|
// param = "GIRDLE_BONE"; |
|
|
|
|
|
|
|
// } else if (linePointType == 3 || linePointType == 0) |
|
|
|
|
|
|
|
// { |
|
|
|
|
|
|
|
// //风筝面 |
|
|
|
|
|
|
|
// Logger.Info($"【面文本生成】 腰面值 波峰【风筝面】"); |
|
|
|
|
|
|
|
// valueIndex = (facetIndex / 8); |
|
|
|
|
|
|
|
// param = "GIRDLE_BEZEL"; |
|
|
|
|
|
|
|
// } |
|
|
|
|
|
|
|
// else |
|
|
|
|
|
|
|
// { |
|
|
|
|
|
|
|
// //腰厚比 |
|
|
|
|
|
|
|
// Logger.Info($"【面文本生成】 腰面值 波峰【腰厚比】"); |
|
|
|
|
|
|
|
// valueIndex = (facetIndex / 4); |
|
|
|
|
|
|
|
// param = "GIRDLE_VALLEY"; |
|
|
|
|
|
|
|
// } |
|
|
|
|
|
|
|
// |
|
|
|
|
|
|
|
// valueIndex += 1; |
|
|
|
|
|
|
|
// var detail = ViewportManager.DiamondData[$"{param}_DETAIL"]; |
|
|
|
|
|
|
|
// if (detail == null) |
|
|
|
|
|
|
|
// { |
|
|
|
|
|
|
|
// Logger.Info($"【面文本生成】 {param}_DETAIL Key不存在"); |
|
|
|
|
|
|
|
// return result; |
|
|
|
|
|
|
|
// } |
|
|
|
|
|
|
|
// Logger.Info($"【面文本生成】 {param}_DETAIL == {detail}"); |
|
|
|
|
|
|
|
// var paramValue = detail[$"{param}_{valueIndex}"]; |
|
|
|
|
|
|
|
// if (paramValue == null) |
|
|
|
|
|
|
|
// { |
|
|
|
|
|
|
|
// Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{valueIndex} Key不存在"); |
|
|
|
|
|
|
|
// return result; |
|
|
|
|
|
|
|
// } |
|
|
|
|
|
|
|
// Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{valueIndex} ==={paramValue}"); |
|
|
|
|
|
|
|
// var valueFloat = (Math.Floor(float.Parse(paramValue.ToString()) * 1000) / 10).ToString(); |
|
|
|
|
|
|
|
// Logger.Info($"【面文本生成】 {valueFloat} -- {valueIndex}"); |
|
|
|
|
|
|
|
// var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector); |
|
|
|
|
|
|
|
// result.Add(DisplayText3D($"{valueFloat}", facetTextPoint)); |
|
|
|
|
|
|
|
List<Viewport3DTriangleEntity> facetTypeAll = |
|
|
|
|
|
|
|
ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == selFacetType); |
|
|
|
|
|
|
|
var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode) |
|
|
|
|
|
|
|
.ToDictionary(group => group.Key, group => group.ToList()); |
|
|
|
|
|
|
|
List<string> girdleKey = new List<string> { "GIRDLE_BEZEL", "GIRDLE_BONE", "GIRDLE_VALLEY" }; |
|
|
|
|
|
|
|
var girdleResultDic = new Dictionary<string, Dictionary<string, List<Viewport3DTriangleEntity>>>(); |
|
|
|
|
|
|
|
foreach (var key in girdleKey) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
var resultDic = new Dictionary<string, List<Viewport3DTriangleEntity>>(); |
|
|
|
|
|
|
|
for (int i = 0; i < groupedDic.Count; i++) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
switch (key) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
case "GIRDLE_BEZEL": if (i % 8 == 4) resultDic.Add($"0_{i}", groupedDic[$"0_{i}"]); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case "GIRDLE_BONE": if (i % 8 == 0) resultDic.Add($"0_{i}", groupedDic[$"0_{i}"]); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case "GIRDLE_VALLEY": if (i % 4 == 2) resultDic.Add($"0_{i}", groupedDic[$"0_{i}"]); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
girdleResultDic.Add(key, resultDic); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
foreach (var gridleResult in girdleResultDic) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
foreach (var dic in gridleResult.Value) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
//高亮四边形左边的线,并绑定值 |
|
|
|
|
|
|
|
List<Vector3> facetPoints = new List<Vector3>(); |
|
|
|
|
|
|
|
dic.Value.ForEach(e => { facetPoints.Add(e.Point1); facetPoints.Add(e.Point2); facetPoints.Add(e.Point3); }); |
|
|
|
|
|
|
|
//高亮的线 |
|
|
|
|
|
|
|
var facetIndex = int.Parse(dic.Key.Split("_")[1]) - 1; |
|
|
|
|
|
|
|
if ("GIRDLE_VALLEY".Equals(gridleResult.Key)) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
var showLine =GetLeftOrRightLineSegment(facetPoints, facetIndex >= 25 && facetIndex <= 57 ? true : false);; |
|
|
|
|
|
|
|
if (showLine == null) continue; |
|
|
|
|
|
|
|
result.Add(DisplayLineModel3D(new List<Tuple<Vector3, Vector3>>() { showLine }, new Color4(1f, 0, 0, 1f), 2f)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//文字显示位置 |
|
|
|
|
|
|
|
var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector); |
|
|
|
|
|
|
|
var resIndex = gridleResult.Value.Keys.ToList().IndexOf(dic.Key); |
|
|
|
|
|
|
|
if (resIndex == -1) continue; |
|
|
|
|
|
|
|
resIndex += 1; |
|
|
|
|
|
|
|
var detail = ViewportManager.DiamondData[$"{gridleResult.Key}_DETAIL"]; |
|
|
|
|
|
|
|
if (detail == null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Logger.Info($"【面文本生成】 {gridleResult.Key}_DETAIL Key不存在"); |
|
|
|
|
|
|
|
return result; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
Logger.Info($"【面文本生成】 {gridleResult.Key}_DETAIL == {detail}"); |
|
|
|
|
|
|
|
var paramValue = detail[$"{gridleResult.Key}_{resIndex}"]; |
|
|
|
|
|
|
|
if (paramValue == null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Logger.Info($"【面文本生成】 {gridleResult.Key}_DETAIL.{gridleResult.Key}_{resIndex} Key不存在"); |
|
|
|
|
|
|
|
return result; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var valueFloat = ValueFormat(paramValue.ToString(), gridleResult.Key, false); |
|
|
|
|
|
|
|
result.Add(DisplayText3D($"{valueFloat}", facetTextPoint)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else if (selFacetType == PlaneType.Girdle && !string.IsNullOrWhiteSpace(valKey)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
Logger.Info($"【面文本生成】 命中面{selFacetType},是腰,显示值{valKey}"); |
|
|
|
|
|
|
|
/*** |
|
|
|
|
|
|
|
* GIRDLE_BEZEL 风筝 |
|
|
|
|
|
|
|
* GIRDLE_BONE 上腰 |
|
|
|
|
|
|
|
* GIRDLE_VALLEY 波谷 |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
List<Viewport3DTriangleEntity> facetTypeAll = |
|
|
|
|
|
|
|
ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == selFacetType); |
|
|
|
|
|
|
|
var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode) |
|
|
|
|
|
|
|
.ToDictionary(group => group.Key, group => group.ToList()); |
|
|
|
var resultDic = new Dictionary<string, List<Viewport3DTriangleEntity>>(); |
|
|
|
var resultDic = new Dictionary<string, List<Viewport3DTriangleEntity>>(); |
|
|
|
for (int i = 0; i < groupedDic.Count; i++) |
|
|
|
for (int i = 0; i < groupedDic.Count; i++) |
|
|
|
{ |
|
|
|
{ |
|
|
|
switch (key) |
|
|
|
switch (valKey) |
|
|
|
{ |
|
|
|
{ |
|
|
|
case "GIRDLE_BEZEL": if (i % 8 == 4) resultDic.Add($"0_{i}", groupedDic[$"0_{i}"]); |
|
|
|
case "GIRDLE_BEZEL": if (i % 8 == 4) resultDic.Add($"0_{i}", groupedDic[$"0_{i}"]); |
|
|
|
break; |
|
|
|
break; |
|
|
@ -696,335 +771,345 @@ public class ViewportHelperPro |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
girdleResultDic.Add(key, resultDic); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
foreach (var gridleResult in girdleResultDic) |
|
|
|
if (resultDic.Count == 0) |
|
|
|
{ |
|
|
|
{ |
|
|
|
foreach (var dic in gridleResult.Value) |
|
|
|
Logger.Info($"【面文本生成】 关联面获取失败"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
foreach (var dic in resultDic) |
|
|
|
{ |
|
|
|
{ |
|
|
|
//高亮四边形左边的线,并绑定值 |
|
|
|
//高亮四边形左边的线,并绑定值 |
|
|
|
List<Vector3> facetPoints = new List<Vector3>(); |
|
|
|
List<Vector3> facetPoints = new List<Vector3>(); |
|
|
|
dic.Value.ForEach(e => { facetPoints.Add(e.Point1); facetPoints.Add(e.Point2); facetPoints.Add(e.Point3); }); |
|
|
|
dic.Value.ForEach(e => { facetPoints.Add(e.Point1); facetPoints.Add(e.Point2); facetPoints.Add(e.Point3); }); |
|
|
|
//高亮的线 |
|
|
|
//高亮的线 |
|
|
|
|
|
|
|
// var showLine = GetLeftParallelLineSegment(facetPoints); |
|
|
|
var facetIndex = int.Parse(dic.Key.Split("_")[1]) - 1; |
|
|
|
var facetIndex = int.Parse(dic.Key.Split("_")[1]) - 1; |
|
|
|
if ("GIRDLE_VALLEY".Equals(gridleResult.Key)) |
|
|
|
var showLine =GetLeftOrRightLineSegment(facetPoints, facetIndex >= 25 && facetIndex <= 57 ? true : false);; |
|
|
|
{ |
|
|
|
if (showLine == null) continue; |
|
|
|
var showLine =GetLeftOrRightLineSegment(facetPoints, facetIndex >= 25 && facetIndex <= 57 ? true : false);; |
|
|
|
|
|
|
|
if (showLine == null) continue; |
|
|
|
|
|
|
|
result.Add(DisplayLineModel3D(new List<Tuple<Vector3, Vector3>>() { showLine }, new Color4(1f, 0, 0, 1f), 2f)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//文字显示位置 |
|
|
|
//文字显示位置 |
|
|
|
var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector); |
|
|
|
var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector); |
|
|
|
var resIndex = gridleResult.Value.Keys.ToList().IndexOf(dic.Key); |
|
|
|
var resIndex = resultDic.Keys.ToList().IndexOf(dic.Key); |
|
|
|
if (resIndex == -1) continue; |
|
|
|
if (resIndex == -1) continue; |
|
|
|
resIndex += 1; |
|
|
|
resIndex += 1; |
|
|
|
var detail = ViewportManager.DiamondData[$"{gridleResult.Key}_DETAIL"]; |
|
|
|
var detail = ViewportManager.DiamondData[$"{valKey}_DETAIL"]; |
|
|
|
if (detail == null) |
|
|
|
if (detail == null) |
|
|
|
{ |
|
|
|
{ |
|
|
|
Logger.Info($"【面文本生成】 {gridleResult.Key}_DETAIL Key不存在"); |
|
|
|
Logger.Info($"【面文本生成】 {valKey}_DETAIL Key不存在"); |
|
|
|
return result; |
|
|
|
return result; |
|
|
|
} |
|
|
|
} |
|
|
|
Logger.Info($"【面文本生成】 {gridleResult.Key}_DETAIL == {detail}"); |
|
|
|
Logger.Info($"【面文本生成】 {valKey}_DETAIL == {detail}"); |
|
|
|
var paramValue = detail[$"{gridleResult.Key}_{resIndex}"]; |
|
|
|
var paramValue = detail[$"{valKey}_{resIndex}"]; |
|
|
|
if (paramValue == null) |
|
|
|
if (paramValue == null) |
|
|
|
{ |
|
|
|
{ |
|
|
|
Logger.Info($"【面文本生成】 {gridleResult.Key}_DETAIL.{gridleResult.Key}_{resIndex} Key不存在"); |
|
|
|
Logger.Info($"【面文本生成】 {valKey}_DETAIL.{valKey}_{resIndex} Key不存在"); |
|
|
|
return result; |
|
|
|
return result; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
result.Add(DisplayLineModel3D(new List<Tuple<Vector3, Vector3>>() { showLine }, new Color4(1f, 0, 0, 1f), 2f)); |
|
|
|
var valueFloat = ValueFormat(paramValue.ToString(), gridleResult.Key, false); |
|
|
|
var valueFloat = ValueFormat(paramValue.ToString(), valKey, true); |
|
|
|
result.Add(DisplayText3D($"{valueFloat}", facetTextPoint)); |
|
|
|
result.Add(DisplayText3D($"{valueFloat} \r\n {resIndex}", facetTextPoint)); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else if (selFacetType == PlaneType.Girdle && !string.IsNullOrWhiteSpace(valKey)) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Logger.Info($"【面文本生成】 命中面{selFacetType},是腰,显示值{valKey}"); |
|
|
|
|
|
|
|
/*** |
|
|
|
|
|
|
|
* GIRDLE_BEZEL 风筝 |
|
|
|
|
|
|
|
* GIRDLE_BONE 上腰 |
|
|
|
|
|
|
|
* GIRDLE_VALLEY 波谷 |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
List<Viewport3DTriangleEntity> facetTypeAll = |
|
|
|
|
|
|
|
ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == selFacetType); |
|
|
|
|
|
|
|
var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode) |
|
|
|
|
|
|
|
.ToDictionary(group => group.Key, group => group.ToList()); |
|
|
|
|
|
|
|
var resultDic = new Dictionary<string, List<Viewport3DTriangleEntity>>(); |
|
|
|
|
|
|
|
for (int i = 0; i < groupedDic.Count; i++) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
switch (valKey) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
case "GIRDLE_BEZEL": if (i % 8 == 4) resultDic.Add($"0_{i}", groupedDic[$"0_{i}"]); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case "GIRDLE_BONE": if (i % 8 == 0) resultDic.Add($"0_{i}", groupedDic[$"0_{i}"]); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case "GIRDLE_VALLEY": if (i % 4 == 2) resultDic.Add($"0_{i}", groupedDic[$"0_{i}"]); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
if (resultDic.Count == 0) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Logger.Info($"【面文本生成】 关联面获取失败"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
foreach (var dic in resultDic) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
//高亮四边形左边的线,并绑定值 |
|
|
|
|
|
|
|
List<Vector3> facetPoints = new List<Vector3>(); |
|
|
|
|
|
|
|
dic.Value.ForEach(e => { facetPoints.Add(e.Point1); facetPoints.Add(e.Point2); facetPoints.Add(e.Point3); }); |
|
|
|
|
|
|
|
//高亮的线 |
|
|
|
|
|
|
|
// var showLine = GetLeftParallelLineSegment(facetPoints); |
|
|
|
|
|
|
|
var facetIndex = int.Parse(dic.Key.Split("_")[1]) - 1; |
|
|
|
|
|
|
|
var showLine =GetLeftOrRightLineSegment(facetPoints, facetIndex >= 25 && facetIndex <= 57 ? true : false);; |
|
|
|
|
|
|
|
if (showLine == null) continue; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//文字显示位置 |
|
|
|
|
|
|
|
var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector); |
|
|
|
|
|
|
|
var resIndex = resultDic.Keys.ToList().IndexOf(dic.Key); |
|
|
|
|
|
|
|
if (resIndex == -1) continue; |
|
|
|
|
|
|
|
resIndex += 1; |
|
|
|
|
|
|
|
var detail = ViewportManager.DiamondData[$"{valKey}_DETAIL"]; |
|
|
|
|
|
|
|
if (detail == null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Logger.Info($"【面文本生成】 {valKey}_DETAIL Key不存在"); |
|
|
|
|
|
|
|
return result; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
Logger.Info($"【面文本生成】 {valKey}_DETAIL == {detail}"); |
|
|
|
|
|
|
|
var paramValue = detail[$"{valKey}_{resIndex}"]; |
|
|
|
|
|
|
|
if (paramValue == null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Logger.Info($"【面文本生成】 {valKey}_DETAIL.{valKey}_{resIndex} Key不存在"); |
|
|
|
|
|
|
|
return result; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
result.Add(DisplayLineModel3D(new List<Tuple<Vector3, Vector3>>() { showLine }, new Color4(1f, 0, 0, 1f), 2f)); |
|
|
|
|
|
|
|
var valueFloat = ValueFormat(paramValue.ToString(), valKey, true); |
|
|
|
|
|
|
|
result.Add(DisplayText3D($"{valueFloat} \r\n {resIndex}", facetTextPoint)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Logger.Info($"【面文本生成】 命中面{selFacetType},不是腰"); |
|
|
|
|
|
|
|
//查找同类面 |
|
|
|
|
|
|
|
List<Viewport3DTriangleEntity> facetTypeAll = |
|
|
|
|
|
|
|
ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == selFacetType); |
|
|
|
|
|
|
|
var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode) |
|
|
|
|
|
|
|
.ToDictionary(group => group.Key, group => group.ToList()); |
|
|
|
|
|
|
|
Logger.Info($"【面文本生成】 同类面{groupedDic.Count}个"); |
|
|
|
|
|
|
|
var valueIndex = 1; |
|
|
|
|
|
|
|
//台面显示 |
|
|
|
|
|
|
|
if (selFacetType == PlaneType.TableFacet) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
List<Vector3> tablePointList = new List<Vector3>(); |
|
|
|
|
|
|
|
foreach (var entity in groupedDic["11_0"]) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
tablePointList.Add(entity.Point1); |
|
|
|
|
|
|
|
tablePointList.Add(entity.Point2); |
|
|
|
|
|
|
|
tablePointList.Add(entity.Point3); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
HashSet<Vector3> tablePointSet = new HashSet<Vector3>(tablePointList); |
|
|
|
|
|
|
|
tablePointList = VectorClockwiseSort(tablePointSet.ToList()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<Tuple<Vector3, Vector3>> line = new List<Tuple<Vector3, Vector3>>(); |
|
|
|
|
|
|
|
for (int i = 0; i < tablePointList.Count / 2; i++) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
line.Add(new Tuple<Vector3, Vector3>(tablePointList[i], tablePointList[i+tablePointList.Count / 2])); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
string param = "TABLE"; |
|
|
|
|
|
|
|
var detail = ViewportManager.DiamondData[$"{param}_DETAIL"]; |
|
|
|
|
|
|
|
for (int i = 0; i < line.Count; i++) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Vector3 point = line[i].Item2; |
|
|
|
|
|
|
|
var valueFloat = ValueFormat(detail[$"{param}_{i+1}"].ToString(), param, true); |
|
|
|
|
|
|
|
result.Add(DisplayText3D($"{valueFloat}", new Vector3(point.X, point.Y - 0.4f, point.Z))); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
result.Add( DisplayLineModel3D(line, new Color4(1f, 0, 0, 1f), 0.7f)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
foreach (var kv in groupedDic) |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
var value = kv.Value; |
|
|
|
Logger.Info($"【面文本生成】 命中面{selFacetType},不是腰"); |
|
|
|
var key = kv.Key; |
|
|
|
//查找同类面 |
|
|
|
var facetIndex = -1; |
|
|
|
List<Viewport3DTriangleEntity> facetTypeAll = |
|
|
|
int.TryParse(key.Split("_")[1], out facetIndex); |
|
|
|
ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == selFacetType); |
|
|
|
List<Vector3> facetPoints = new List<Vector3>(); |
|
|
|
var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode) |
|
|
|
value.ForEach(e => { facetPoints.Add(e.Point1); facetPoints.Add(e.Point2); facetPoints.Add(e.Point3); }); |
|
|
|
.ToDictionary(group => group.Key, group => group.ToList()); |
|
|
|
var param = string.IsNullOrWhiteSpace(valKey) ? ViewportManager.DicFacetToValueParam.ContainsKey(selFacetType) ? ViewportManager.DicFacetToValueParam[selFacetType] : null : valKey; |
|
|
|
Logger.Info($"【面文本生成】 同类面{groupedDic.Count}个"); |
|
|
|
if (param == null) |
|
|
|
var valueIndex = 1; |
|
|
|
|
|
|
|
//台面显示 |
|
|
|
|
|
|
|
if (selFacetType == PlaneType.TableFacet) |
|
|
|
{ |
|
|
|
{ |
|
|
|
continue; |
|
|
|
List<Vector3> tablePointList = new List<Vector3>(); |
|
|
|
} |
|
|
|
foreach (var entity in groupedDic["11_0"]) |
|
|
|
|
|
|
|
|
|
|
|
if (groupedDic.Count == 1) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
var paramValue = ViewportManager.DiamondData[$"{param}"]; |
|
|
|
|
|
|
|
if (paramValue == null) |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
Logger.Info($"【面文本生成】 {param} Key不存在"); |
|
|
|
tablePointList.Add(entity.Point1); |
|
|
|
continue; |
|
|
|
tablePointList.Add(entity.Point2); |
|
|
|
|
|
|
|
tablePointList.Add(entity.Point3); |
|
|
|
} |
|
|
|
} |
|
|
|
var valueFloat = ValueFormat(paramValue.ToString(), param, true); |
|
|
|
HashSet<Vector3> tablePointSet = new HashSet<Vector3>(tablePointList); |
|
|
|
Logger.Info($"【面文本生成】 {valueFloat} -- {facetIndex}"); |
|
|
|
tablePointList = VectorClockwiseSort(tablePointSet.ToList()); |
|
|
|
var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector); |
|
|
|
|
|
|
|
result.Add(DisplayText3D($"{valueFloat}", facetTextPoint)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else if (groupedDic.Count == 16) |
|
|
|
List<Tuple<Vector3, Vector3>> line = new List<Tuple<Vector3, Vector3>>(); |
|
|
|
{ |
|
|
|
for (int i = 0; i < tablePointList.Count / 2; i++) |
|
|
|
facetIndex += 1; |
|
|
|
|
|
|
|
valueIndex = facetIndex == 16 ? 1 : facetIndex % 2 == 0 ? valueIndex + 1 : valueIndex; |
|
|
|
|
|
|
|
var detail = ViewportManager.DiamondData[$"{param}_DETAIL"]; |
|
|
|
|
|
|
|
if (detail == null) |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
Logger.Info($"【面文本生成】 {param}_DETAIL Key不存在"); |
|
|
|
line.Add(new Tuple<Vector3, Vector3>(tablePointList[i], tablePointList[i+tablePointList.Count / 2])); |
|
|
|
continue; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
Logger.Info($"【面文本生成】 {param}_DETAIL == {detail}"); |
|
|
|
string param = "TABLE"; |
|
|
|
var paramValue = detail[$"{param}_{valueIndex}"]; |
|
|
|
var detail = ViewportManager.DiamondData[$"{param}_DETAIL"]; |
|
|
|
if (paramValue == null) |
|
|
|
for (int i = 0; i < line.Count; i++) |
|
|
|
{ |
|
|
|
{ |
|
|
|
Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{valueIndex} Key不存在"); |
|
|
|
Vector3 point = line[i].Item2; |
|
|
|
continue; |
|
|
|
var valueFloat = ValueFormat(detail[$"{param}_{i+1}"].ToString(), param, true); |
|
|
|
|
|
|
|
result.Add(DisplayText3D($"{valueFloat}", new Vector3(point.X, point.Y - 0.4f, point.Z))); |
|
|
|
} |
|
|
|
} |
|
|
|
Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{valueIndex} ==={paramValue}"); |
|
|
|
result.Add( DisplayLineModel3D(line, new Color4(1f, 0, 0, 1f), 0.7f)); |
|
|
|
|
|
|
|
|
|
|
|
var valueFloat = ValueFormat(paramValue.ToString(), param, true); |
|
|
|
} |
|
|
|
Logger.Info($"【面文本生成】 {valueFloat} -- {valueIndex}"); |
|
|
|
|
|
|
|
var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector); |
|
|
|
|
|
|
|
if(PlaneType.LowerGirdleFact == selFacetType) |
|
|
|
|
|
|
|
result.Add(DisplayText3D($"\r\n\r\n{valueFloat} \r\n {facetIndex}", new Vector3(facetTextPoint.X, facetTextPoint.Y, facetTextPoint.Z))); |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
result.Add(DisplayText3D($"{valueFloat} \r\n {facetIndex}", new Vector3(facetTextPoint.X, facetTextPoint.Y + 0.1f, facetTextPoint.Z))); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else if (ViewportManager.DiamondData.Count > 1 && facetIndex != -1) |
|
|
|
foreach (var kv in groupedDic) |
|
|
|
{ |
|
|
|
{ |
|
|
|
facetIndex += 1; |
|
|
|
var value = kv.Value; |
|
|
|
|
|
|
|
var key = kv.Key; |
|
|
|
var detail = ViewportManager.DiamondData[$"{param}_DETAIL"]; |
|
|
|
var facetIndex = -1; |
|
|
|
if (detail == null) |
|
|
|
int.TryParse(key.Split("_")[1], out facetIndex); |
|
|
|
|
|
|
|
List<Vector3> facetPoints = new List<Vector3>(); |
|
|
|
|
|
|
|
value.ForEach(e => { facetPoints.Add(e.Point1); facetPoints.Add(e.Point2); facetPoints.Add(e.Point3); }); |
|
|
|
|
|
|
|
var param = string.IsNullOrWhiteSpace(valKey) ? ViewportManager.DicFacetToValueParam.ContainsKey(selFacetType) ? ViewportManager.DicFacetToValueParam[selFacetType] : null : valKey; |
|
|
|
|
|
|
|
if (param == null) |
|
|
|
{ |
|
|
|
{ |
|
|
|
Logger.Info($"【面文本生成】 {param}_DETAIL Key不存在"); |
|
|
|
|
|
|
|
continue; |
|
|
|
continue; |
|
|
|
} |
|
|
|
} |
|
|
|
Logger.Info($"【面文本生成】 {param}_DETAIL == {detail}"); |
|
|
|
|
|
|
|
var paramValue = detail[$"{param}_{facetIndex}"]; |
|
|
|
if (groupedDic.Count == 1) |
|
|
|
if (paramValue == null) |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{facetIndex} Key不存在"); |
|
|
|
var paramValue = ViewportManager.DiamondData[$"{param}"]; |
|
|
|
continue; |
|
|
|
if (paramValue == null) |
|
|
|
} |
|
|
|
{ |
|
|
|
Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{facetIndex} ==={paramValue}"); |
|
|
|
Logger.Info($"【面文本生成】 {param} Key不存在"); |
|
|
|
|
|
|
|
continue; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
var valueFloat = ValueFormat(paramValue.ToString(), param, true); |
|
|
|
|
|
|
|
Logger.Info($"【面文本生成】 {valueFloat} -- {facetIndex}"); |
|
|
|
|
|
|
|
var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector); |
|
|
|
|
|
|
|
result.Add(DisplayText3D($"{valueFloat}", facetTextPoint)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else if (groupedDic.Count == 16) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
facetIndex += 1; |
|
|
|
|
|
|
|
valueIndex = facetIndex == 16 ? 1 : facetIndex % 2 == 0 ? valueIndex + 1 : valueIndex; |
|
|
|
|
|
|
|
var detail = ViewportManager.DiamondData[$"{param}_DETAIL"]; |
|
|
|
|
|
|
|
if (detail == null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Logger.Info($"【面文本生成】 {param}_DETAIL Key不存在"); |
|
|
|
|
|
|
|
continue; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
Logger.Info($"【面文本生成】 {param}_DETAIL == {detail}"); |
|
|
|
|
|
|
|
var paramValue = detail[$"{param}_{valueIndex}"]; |
|
|
|
|
|
|
|
if (paramValue == null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{valueIndex} Key不存在"); |
|
|
|
|
|
|
|
continue; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{valueIndex} ==={paramValue}"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var valueFloat = ValueFormat(paramValue.ToString(), param, true); |
|
|
|
|
|
|
|
Logger.Info($"【面文本生成】 {valueFloat} -- {valueIndex}"); |
|
|
|
|
|
|
|
var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector); |
|
|
|
|
|
|
|
if(PlaneType.LowerGirdleFact == selFacetType) |
|
|
|
|
|
|
|
result.Add(DisplayText3D($"\r\n\r\n{valueFloat} \r\n {facetIndex}", new Vector3(facetTextPoint.X, facetTextPoint.Y, facetTextPoint.Z))); |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
result.Add(DisplayText3D($"{valueFloat} \r\n {facetIndex}", new Vector3(facetTextPoint.X, facetTextPoint.Y + 0.1f, facetTextPoint.Z))); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else if (ViewportManager.DiamondData.Count > 1 && facetIndex != -1) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
facetIndex += 1; |
|
|
|
|
|
|
|
|
|
|
|
var valueFloat = ValueFormat(paramValue.ToString(), param, true); |
|
|
|
var detail = ViewportManager.DiamondData[$"{param}_DETAIL"]; |
|
|
|
Logger.Info($"【面文本生成】 {valueFloat} -- {facetIndex}"); |
|
|
|
if (detail == null) |
|
|
|
var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector); |
|
|
|
{ |
|
|
|
result.Add(DisplayText3D($"{valueFloat} \r\n {facetIndex}", facetTextPoint)); |
|
|
|
Logger.Info($"【面文本生成】 {param}_DETAIL Key不存在"); |
|
|
|
|
|
|
|
continue; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
Logger.Info($"【面文本生成】 {param}_DETAIL == {detail}"); |
|
|
|
|
|
|
|
var paramValue = detail[$"{param}_{facetIndex}"]; |
|
|
|
|
|
|
|
if (paramValue == null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{facetIndex} Key不存在"); |
|
|
|
|
|
|
|
continue; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
Logger.Info($"【面文本生成】 {param}_DETAIL.{param}_{facetIndex} ==={paramValue}"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var valueFloat = ValueFormat(paramValue.ToString(), param, true); |
|
|
|
|
|
|
|
Logger.Info($"【面文本生成】 {valueFloat} -- {facetIndex}"); |
|
|
|
|
|
|
|
var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector); |
|
|
|
|
|
|
|
result.Add(DisplayText3D($"{valueFloat} \r\n {facetIndex}", facetTextPoint)); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (string.IsNullOrWhiteSpace(valKey)) |
|
|
|
if (string.IsNullOrWhiteSpace(valKey)) |
|
|
|
{ |
|
|
|
|
|
|
|
if (PlaneType.StarFacet == selFacetType || PlaneType.UpperGirdleFacet == selFacetType) |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
//星刻面: 在底面的点显示 星刻面长度比 |
|
|
|
if (PlaneType.StarFacet == selFacetType || PlaneType.UpperGirdleFacet == selFacetType) |
|
|
|
//上腰面: 在顶面的点显示 对应星刻面的 1-星刻面长度比 |
|
|
|
|
|
|
|
string valParam = "STAR"; |
|
|
|
|
|
|
|
List<Viewport3DTriangleEntity> allStartEntity = |
|
|
|
|
|
|
|
ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == PlaneType.StarFacet); |
|
|
|
|
|
|
|
var allStartEntityGroupByFacet = allStartEntity.GroupBy(entity => entity.PlaneCode) |
|
|
|
|
|
|
|
.ToDictionary(group => group.Key, group => group.ToList()); |
|
|
|
|
|
|
|
List<Viewport3DTriangleEntity> allUpperGridleEntity = |
|
|
|
|
|
|
|
ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == PlaneType.UpperGirdleFacet); |
|
|
|
|
|
|
|
var allUpperGridleEntityGroupByFacet = allUpperGridleEntity.GroupBy(entity => entity.PlaneCode) |
|
|
|
|
|
|
|
.ToDictionary(group => group.Key, group => group.ToList()); |
|
|
|
|
|
|
|
List<Vector3> points = new List<Vector3>(); |
|
|
|
|
|
|
|
for (int i = 0; i < allStartEntityGroupByFacet.Count; i++) |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
List<Vector3> pointsTemp = new List<Vector3>(); |
|
|
|
//星刻面: 在底面的点显示 星刻面长度比 |
|
|
|
|
|
|
|
//上腰面: 在顶面的点显示 对应星刻面的 1-星刻面长度比 |
|
|
|
allStartEntityGroupByFacet[$"13_{i}"].ForEach(e => |
|
|
|
string valParam = "STAR"; |
|
|
|
|
|
|
|
List<Viewport3DTriangleEntity> allStartEntity = |
|
|
|
|
|
|
|
ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == PlaneType.StarFacet); |
|
|
|
|
|
|
|
var allStartEntityGroupByFacet = allStartEntity.GroupBy(entity => entity.PlaneCode) |
|
|
|
|
|
|
|
.ToDictionary(group => group.Key, group => group.ToList()); |
|
|
|
|
|
|
|
List<Viewport3DTriangleEntity> allUpperGridleEntity = |
|
|
|
|
|
|
|
ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == PlaneType.UpperGirdleFacet); |
|
|
|
|
|
|
|
var allUpperGridleEntityGroupByFacet = allUpperGridleEntity.GroupBy(entity => entity.PlaneCode) |
|
|
|
|
|
|
|
.ToDictionary(group => group.Key, group => group.ToList()); |
|
|
|
|
|
|
|
List<Vector3> points = new List<Vector3>(); |
|
|
|
|
|
|
|
for (int i = 0; i < allStartEntityGroupByFacet.Count; i++) |
|
|
|
{ |
|
|
|
{ |
|
|
|
pointsTemp.Add(e.Point1); |
|
|
|
List<Vector3> pointsTemp = new List<Vector3>(); |
|
|
|
pointsTemp.Add(e.Point2); |
|
|
|
|
|
|
|
pointsTemp.Add(e.Point3); |
|
|
|
allStartEntityGroupByFacet[$"13_{i}"].ForEach(e => |
|
|
|
}); |
|
|
|
{ |
|
|
|
int upperGridleIndex = ((i + 1) * 2) >= 16 ? 1 : ((i + 1) * 2); |
|
|
|
pointsTemp.Add(e.Point1); |
|
|
|
// allUpperGridleEntityGroupByFacet[$"14_{upperGridleIndex}"].ForEach(e => |
|
|
|
pointsTemp.Add(e.Point2); |
|
|
|
// { |
|
|
|
pointsTemp.Add(e.Point3); |
|
|
|
// pointsTemp.Add(e.Point1); |
|
|
|
}); |
|
|
|
// pointsTemp.Add(e.Point2); |
|
|
|
int upperGridleIndex = ((i + 1) * 2) >= 16 ? 1 : ((i + 1) * 2); |
|
|
|
// pointsTemp.Add(e.Point3); |
|
|
|
// allUpperGridleEntityGroupByFacet[$"14_{upperGridleIndex}"].ForEach(e => |
|
|
|
// }); |
|
|
|
// { |
|
|
|
allUpperGridleEntityGroupByFacet[$"14_{upperGridleIndex-1}"].ForEach(e => |
|
|
|
// pointsTemp.Add(e.Point1); |
|
|
|
|
|
|
|
// pointsTemp.Add(e.Point2); |
|
|
|
|
|
|
|
// pointsTemp.Add(e.Point3); |
|
|
|
|
|
|
|
// }); |
|
|
|
|
|
|
|
allUpperGridleEntityGroupByFacet[$"14_{upperGridleIndex-1}"].ForEach(e => |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
pointsTemp.Add(e.Point1); |
|
|
|
|
|
|
|
pointsTemp.Add(e.Point2); |
|
|
|
|
|
|
|
pointsTemp.Add(e.Point3); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
Vector3? mostFrequent = pointsTemp |
|
|
|
|
|
|
|
.GroupBy(v => v) |
|
|
|
|
|
|
|
.Select(group => new { Vector = group.Key, Count = group.Count() }) |
|
|
|
|
|
|
|
.OrderByDescending(x => x.Count) |
|
|
|
|
|
|
|
.FirstOrDefault()?.Vector; |
|
|
|
|
|
|
|
if(mostFrequent.HasValue) |
|
|
|
|
|
|
|
points.Add(mostFrequent.Value); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
var detail = ViewportManager.DiamondData[$"{valParam}_DETAIL"]; |
|
|
|
|
|
|
|
for (int i = 0; i < 8; i++) |
|
|
|
{ |
|
|
|
{ |
|
|
|
pointsTemp.Add(e.Point1); |
|
|
|
var valIndex = i + 1; |
|
|
|
pointsTemp.Add(e.Point2); |
|
|
|
var paramValue = detail[$"{valParam}_{valIndex}"]; |
|
|
|
pointsTemp.Add(e.Point3); |
|
|
|
var valueFloat = ValueFormat(paramValue.ToString(), valParam); |
|
|
|
}); |
|
|
|
var finalValue = PlaneType.StarFacet == selFacetType |
|
|
|
Vector3? mostFrequent = pointsTemp |
|
|
|
? valueFloat |
|
|
|
.GroupBy(v => v) |
|
|
|
: (100 - (double.Parse(valueFloat))).ToString(); |
|
|
|
.Select(group => new { Vector = group.Key, Count = group.Count() }) |
|
|
|
result.Add(DisplayText3D($"{finalValue}%", new Vector3(points[i].X,points[i].Y-0.2f,points[i].Z))); |
|
|
|
.OrderByDescending(x => x.Count) |
|
|
|
} |
|
|
|
.FirstOrDefault()?.Vector; |
|
|
|
|
|
|
|
if(mostFrequent.HasValue) |
|
|
|
}else if (PlaneType.LowerGirdleFact == selFacetType) |
|
|
|
points.Add(mostFrequent.Value); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
var detail = ViewportManager.DiamondData[$"{valParam}_DETAIL"]; |
|
|
|
|
|
|
|
for (int i = 0; i < 8; i++) |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
var valIndex = i + 1; |
|
|
|
//下腰面: 在底面的点显示 下腰比 |
|
|
|
var paramValue = detail[$"{valParam}_{valIndex}"]; |
|
|
|
string valParam = "LOWER_HALVES_RATIO"; |
|
|
|
var valueFloat = ValueFormat(paramValue.ToString(), valParam); |
|
|
|
|
|
|
|
var finalValue = PlaneType.StarFacet == selFacetType |
|
|
|
List<Viewport3DTriangleEntity> allLowerGirdleEntity = |
|
|
|
? valueFloat |
|
|
|
ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == PlaneType.LowerGirdleFact); |
|
|
|
: (100 - (double.Parse(valueFloat))).ToString(); |
|
|
|
var allLowerGirdleGroupByFacet = allLowerGirdleEntity.GroupBy(entity => entity.PlaneCode) |
|
|
|
result.Add(DisplayText3D($"{finalValue}%", new Vector3(points[i].X,points[i].Y-0.2f,points[i].Z))); |
|
|
|
.ToDictionary(group => group.Key, group => group.ToList()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var detail = ViewportManager.DiamondData[$"{valParam}_DETAIL"]; |
|
|
|
|
|
|
|
for (int i = 0; i < 8; i++) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
var valIndex = i + 1; |
|
|
|
|
|
|
|
//获取点 |
|
|
|
|
|
|
|
List<Vector3> pointsTemp = new List<Vector3>(); |
|
|
|
|
|
|
|
allLowerGirdleGroupByFacet[$"22_{i*2}"].ForEach(e => |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
pointsTemp.Add(e.Point1); |
|
|
|
|
|
|
|
pointsTemp.Add(e.Point2); |
|
|
|
|
|
|
|
pointsTemp.Add(e.Point3); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
float? maxY = pointsTemp.Any() ? pointsTemp.Max(v => v.Y) : (float?)null; |
|
|
|
|
|
|
|
Vector3? points = pointsTemp |
|
|
|
|
|
|
|
.Where(v => maxY.HasValue && v.Y == maxY.Value) |
|
|
|
|
|
|
|
.GroupBy(v => v) |
|
|
|
|
|
|
|
.Select(g => new { Point = g.Key, Count = g.Count() }) |
|
|
|
|
|
|
|
.OrderByDescending(x => x.Count) |
|
|
|
|
|
|
|
.ThenByDescending(x => x.Point.Y) |
|
|
|
|
|
|
|
.FirstOrDefault()?.Point; |
|
|
|
|
|
|
|
if(!points.HasValue)continue; |
|
|
|
|
|
|
|
Vector3 point = points.Value; |
|
|
|
|
|
|
|
//取值 |
|
|
|
|
|
|
|
var paramValue = detail[$"{valParam}_{valIndex}"]; |
|
|
|
|
|
|
|
var valueFloat = ValueFormat(paramValue.ToString(), valParam); |
|
|
|
|
|
|
|
result.Add(DisplayText3D($"{valueFloat}%", new Vector3(point.X,point.Y+0.2f,point.Z))); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}else if (Common.RunMode == 1) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
// |
|
|
|
|
|
|
|
var selFacetType = entities.First().PlaneType; |
|
|
|
|
|
|
|
|
|
|
|
}else if (PlaneType.LowerGirdleFact == selFacetType) |
|
|
|
string step = ViewportManager.DiamondType.Split(" ").Last(); |
|
|
|
|
|
|
|
if ("S1".Equals(step)) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
try |
|
|
|
{ |
|
|
|
{ |
|
|
|
//下腰面: 在底面的点显示 下腰比 |
|
|
|
//有效数据 |
|
|
|
string valParam = "LOWER_HALVES_RATIO"; |
|
|
|
List<Viewport3DTriangleEntity> facetTypeAll = |
|
|
|
|
|
|
|
ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == selFacetType); |
|
|
|
List<Viewport3DTriangleEntity> allLowerGirdleEntity = |
|
|
|
var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode) |
|
|
|
ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == PlaneType.LowerGirdleFact); |
|
|
|
|
|
|
|
var allLowerGirdleGroupByFacet = allLowerGirdleEntity.GroupBy(entity => entity.PlaneCode) |
|
|
|
|
|
|
|
.ToDictionary(group => group.Key, group => group.ToList()); |
|
|
|
.ToDictionary(group => group.Key, group => group.ToList()); |
|
|
|
|
|
|
|
Logger.Info($"【面文本生成】 [工厂模式]同类面{groupedDic.Count}个"); |
|
|
|
|
|
|
|
|
|
|
|
var detail = ViewportManager.DiamondData[$"{valParam}_DETAIL"]; |
|
|
|
foreach (var kv in groupedDic) |
|
|
|
for (int i = 0; i < 8; i++) |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
var valIndex = i + 1; |
|
|
|
var value = kv.Value; |
|
|
|
//获取点 |
|
|
|
var key = kv.Key; |
|
|
|
List<Vector3> pointsTemp = new List<Vector3>(); |
|
|
|
var facetIndex = -1; |
|
|
|
allLowerGirdleGroupByFacet[$"22_{i*2}"].ForEach(e => |
|
|
|
int.TryParse(key.Split("_")[1], out facetIndex); |
|
|
|
|
|
|
|
List<Vector3> facetPoints = new List<Vector3>(); |
|
|
|
|
|
|
|
value.ForEach(e => |
|
|
|
{ |
|
|
|
{ |
|
|
|
pointsTemp.Add(e.Point1); |
|
|
|
facetPoints.Add(e.Point1); |
|
|
|
pointsTemp.Add(e.Point2); |
|
|
|
facetPoints.Add(e.Point2); |
|
|
|
pointsTemp.Add(e.Point3); |
|
|
|
facetPoints.Add(e.Point3); |
|
|
|
}); |
|
|
|
}); |
|
|
|
float? maxY = pointsTemp.Any() ? pointsTemp.Max(v => v.Y) : (float?)null; |
|
|
|
var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector); |
|
|
|
Vector3? points = pointsTemp |
|
|
|
facetIndex += 1; |
|
|
|
.Where(v => maxY.HasValue && v.Y == maxY.Value) |
|
|
|
if (valKey.IsNullOrEmpty()) |
|
|
|
.GroupBy(v => v) |
|
|
|
{ |
|
|
|
.Select(g => new { Point = g.Key, Count = g.Count() }) |
|
|
|
//显示两个值 |
|
|
|
.OrderByDescending(x => x.Count) |
|
|
|
var param = new List<string> { "CROWN_ANGLE", "CROWN_HEIGHT" }; |
|
|
|
.ThenByDescending(x => x.Point.Y) |
|
|
|
|
|
|
|
.FirstOrDefault()?.Point; |
|
|
|
StringBuilder sbShowText = new StringBuilder(); |
|
|
|
if(!points.HasValue)continue; |
|
|
|
foreach (var p in param) |
|
|
|
Vector3 point = points.Value; |
|
|
|
{ |
|
|
|
//取值 |
|
|
|
var detail = ViewportManager.DiamondData[$"{p}_DETAIL"]; |
|
|
|
var paramValue = detail[$"{valParam}_{valIndex}"]; |
|
|
|
var paramValue = detail[$"{p}_{facetIndex}"]; |
|
|
|
var valueFloat = ValueFormat(paramValue.ToString(), valParam); |
|
|
|
var valueFloat = ValueFormat(paramValue.ToString(), p, true); |
|
|
|
result.Add(DisplayText3D($"{valueFloat}%", new Vector3(point.X,point.Y+0.2f,point.Z))); |
|
|
|
sbShowText.Append(valueFloat); |
|
|
|
|
|
|
|
sbShowText.Append("\r\n"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sbShowText.Append($" {facetIndex}"); |
|
|
|
|
|
|
|
result.Add(DisplayText3D(sbShowText.ToString(), |
|
|
|
|
|
|
|
new Vector3(facetTextPoint.X, facetTextPoint.Y - 0.4f, facetTextPoint.Z))); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
//显示一个值 |
|
|
|
|
|
|
|
StringBuilder sbShowText = new StringBuilder(); |
|
|
|
|
|
|
|
var detail = ViewportManager.DiamondData[$"{valKey}_DETAIL"]; |
|
|
|
|
|
|
|
var paramValue = detail[$"{valKey}_{facetIndex}"]; |
|
|
|
|
|
|
|
var valueFloat = ValueFormat(paramValue.ToString(), valKey, true); |
|
|
|
|
|
|
|
sbShowText.Append(valueFloat); |
|
|
|
|
|
|
|
sbShowText.Append("\r\n"); |
|
|
|
|
|
|
|
sbShowText.Append($" {facetIndex}"); |
|
|
|
|
|
|
|
result.Add(DisplayText3D(sbShowText.ToString(), |
|
|
|
|
|
|
|
new Vector3(facetTextPoint.X, facetTextPoint.Y - 0.2f, facetTextPoint.Z))); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
catch (Exception ex) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
new MessageBox().Show($"面取值错误:{ex.Message}"); |
|
|
|
|
|
|
|
return result; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
return result; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|