fix: 3D模型双向交互

master
Tongg 11 months ago
parent ec94c84f91
commit 174d0245c5
  1. 71
      Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs
  2. 24
      Views/UserControl/ViewportData/Helper/ViewportManager.cs

@ -444,21 +444,19 @@ public class ViewportHelperPro
} }
/// <summary> /// <summary>
/// 显示线段长度mm /// 选择面生成文本信息
/// </summary> /// </summary>
/// <param name="entities">三角形集合</param> /// <param name="entities">三角形集合</param>
/// <param name="textColor">文字颜色</param> /// <param name="valKey">指定数据集</param>
/// <param name="showAll">是否显示全部(false:只显示不重复)</param>
/// <returns></returns> /// <returns></returns>
public static List<GeometryModel3D> GenerateLineTextModels(List<Viewport3DTriangleEntity> entities, public static List<GeometryModel3D> GenerateLineTextModels(List<Viewport3DTriangleEntity> entities, string valKey = "")
Color4? textColor = null,bool showAll = false)
{ {
Logger.Info("【面文本生成】开始生成面相关文本信息"); Logger.Info("【面文本生成】开始生成面相关文本信息");
var selFacet = entities; var selFacet = entities;
var selFacetType = entities.First().PlaneType; var selFacetType = entities.First().PlaneType;
var result = new List<GeometryModel3D>(); var result = new List<GeometryModel3D>();
if (selFacetType == PlaneType.Girdle) if (selFacetType == PlaneType.Girdle && string.IsNullOrWhiteSpace(valKey))
{ {
Logger.Info($"【面文本生成】 命中面{selFacetType},是腰"); Logger.Info($"【面文本生成】 命中面{selFacetType},是腰");
// if (ViewportManager.MainModelGirdleMaxLines != null || ViewportManager.MainModelGirdleMinLines != null || // if (ViewportManager.MainModelGirdleMaxLines != null || ViewportManager.MainModelGirdleMinLines != null ||
@ -547,7 +545,7 @@ public class ViewportHelperPro
var valueFloat = (Math.Floor(float.Parse(paramValue.ToString())*1000)/10).ToString(); var valueFloat = (Math.Floor(float.Parse(paramValue.ToString())*1000)/10).ToString();
Logger.Info($"【面文本生成】 {valueFloat} -- {valueIndex}"); Logger.Info($"【面文本生成】 {valueFloat} -- {valueIndex}");
var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector); var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector);
result.Add(DisplayText3D($"{valueFloat}", facetTextPoint, textColor)); result.Add(DisplayText3D($"{valueFloat}", facetTextPoint));
// foreach (var kv in groupedDic) // foreach (var kv in groupedDic)
// { // {
// var value = kv.Value; // var value = kv.Value;
@ -569,6 +567,11 @@ public class ViewportHelperPro
// */ // */
// //
// } // }
}else if (selFacetType == PlaneType.Girdle && string.IsNullOrWhiteSpace(valKey))
{
Logger.Info($"【面文本生成】 命中面{selFacetType},是腰,显示值{valKey}");
} }
else else
{ {
@ -579,6 +582,7 @@ public class ViewportHelperPro
var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode) var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode)
.ToDictionary(group => group.Key, group => group.ToList()); .ToDictionary(group => group.Key, group => group.ToList());
Logger.Info($"【面文本生成】 同类面{groupedDic.Count}个"); Logger.Info($"【面文本生成】 同类面{groupedDic.Count}个");
var valueIndex = 1;
foreach (var kv in groupedDic) foreach (var kv in groupedDic)
{ {
var value = kv.Value; var value = kv.Value;
@ -587,7 +591,7 @@ public class ViewportHelperPro
int.TryParse(key.Split("_")[1], out facetIndex); int.TryParse(key.Split("_")[1], out facetIndex);
List<Vector3> facetPoints = new List<Vector3>(); List<Vector3> facetPoints = new List<Vector3>();
value.ForEach(e => { facetPoints.Add(e.Point1); facetPoints.Add(e.Point2); facetPoints.Add(e.Point3); }); value.ForEach(e => { facetPoints.Add(e.Point1); facetPoints.Add(e.Point2); facetPoints.Add(e.Point3); });
var param = ViewportManager.DicFacetToValueParam.ContainsKey(selFacetType) ? ViewportManager.DicFacetToValueParam[selFacetType] : null; var param = string.IsNullOrWhiteSpace(valKey)? ViewportManager.DicFacetToValueParam.ContainsKey(selFacetType) ? ViewportManager.DicFacetToValueParam[selFacetType] : null : valKey;
if (param == null) if (param == null)
{ {
continue; continue;
@ -604,10 +608,31 @@ public class ViewportHelperPro
var valueFloat = ValueFormat(paramValue.ToString(),param); var valueFloat = ValueFormat(paramValue.ToString(),param);
Logger.Info($"【面文本生成】 {valueFloat} -- {facetIndex}"); Logger.Info($"【面文本生成】 {valueFloat} -- {facetIndex}");
var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector); var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector);
result.Add(DisplayText3D($"{valueFloat}", facetTextPoint, textColor)); result.Add(DisplayText3D($"{valueFloat}", facetTextPoint));
}else if (groupedDic.Count == 16) }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);
Logger.Info($"【面文本生成】 {valueFloat} -- {valueIndex}");
var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector);
result.Add(DisplayText3D($" {facetIndex} \r\n {valueFloat}", new Vector3(facetTextPoint.X, facetTextPoint.Y+0.1f, facetTextPoint.Z)));
} else if (ViewportManager.DiamondData.Count > 1 && facetIndex != -1) } else if (ViewportManager.DiamondData.Count > 1 && facetIndex != -1)
{ {
@ -631,7 +656,7 @@ public class ViewportHelperPro
var valueFloat = ValueFormat(paramValue.ToString(),param); var valueFloat = ValueFormat(paramValue.ToString(),param);
Logger.Info($"【面文本生成】 {valueFloat} -- {facetIndex}"); Logger.Info($"【面文本生成】 {valueFloat} -- {facetIndex}");
var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector); var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector);
result.Add(DisplayText3D($" {facetIndex} \r\n {valueFloat}", facetTextPoint, textColor)); result.Add(DisplayText3D($" {facetIndex} \r\n {valueFloat}", facetTextPoint));
} }
} }
@ -687,11 +712,11 @@ public class ViewportHelperPro
/// <param name="triangleCode">三角形ID</param> /// <param name="triangleCode">三角形ID</param>
/// <param name="selType">生成范围</param> /// <param name="selType">生成范围</param>
/// <returns></returns> /// <returns></returns>
public static List<GeometryModel3D> GentrateChosenView(string triangleCode, params SelShowType[] selType) public static List<GeometryModel3D> GentrateChosenView(string triangleCode, string valKey = "", params SelShowType[] selType)
{ {
var res = ViewportManager.ViewportTriangle.Find(e => triangleCode.Equals(e.TriangleCode)); var res = ViewportManager.ViewportTriangle.Find(e => triangleCode.Equals(e.TriangleCode));
if(res != null) if(res != null)
return GentrateChosenView(res, selType); return GentrateChosenView(res, valKey, selType);
return new List<GeometryModel3D>(); return new List<GeometryModel3D>();
} }
@ -702,7 +727,7 @@ public class ViewportHelperPro
/// <param name="selType">生成范围</param> /// <param name="selType">生成范围</param>
/// <returns></returns> /// <returns></returns>
/// <exception cref="Exception"></exception> /// <exception cref="Exception"></exception>
public static List<GeometryModel3D> GentrateChosenView(Viewport3DTriangleEntity entity, params SelShowType[] selType) public static List<GeometryModel3D> GentrateChosenView(Viewport3DTriangleEntity entity, string valKey = "", params SelShowType[] selType)
{ {
if (entity == null || entity.TriangleCode == null || entity.TriangleCode.Length == 0) if (entity == null || entity.TriangleCode == null || entity.TriangleCode.Length == 0)
{ {
@ -739,7 +764,7 @@ public class ViewportHelperPro
case SelShowType.LengthText: case SelShowType.LengthText:
//选中面 每条边长度标记 //选中面 每条边长度标记
// if(PlaneType.Girdle == entity.PlaneType)break; // if(PlaneType.Girdle == entity.PlaneType)break;
result.AddRange(GenerateLineTextModels(selPanel)); result.AddRange(GenerateLineTextModels(selPanel, valKey));
break; break;
case SelShowType.BorderAngle: case SelShowType.BorderAngle:
//选中面 每条边向内的夹角 //选中面 每条边向内的夹角
@ -1377,13 +1402,23 @@ public class ViewportHelperPro
{ {
switch (type) switch (type)
{ {
case "DIAMETER": return hasUnit ? $"{v.ToString("F1")}mm" : v.ToString("F1"); case "DIAMETER":
case "CROWN_ANGLE": v = Math.Floor(v * 10) / 10;
return hasUnit ? $"{v.ToString("F1")}mm" : v.ToString("F1");
case "PAV_ANGLE": case "PAV_ANGLE":
case "TWIST": return hasUnit ? $"{v.ToString("F1")}°" : v.ToString("F1"); case "TWIST":
v = Math.Floor(v * 10) / 10;
return hasUnit ? $"{v.ToString("F1")}°" : v.ToString("F1");
case "CROWN_ANGLE":
v = Math.Floor(v * 10) / 10;
return hasUnit ? $"{v.ToString("F1")}°" :v.ToString("F1");
case "TABLE": case "TABLE":
//var vv = v % 0.5 // case "CROWN HEIGHT":
// case "PAV DEPTH":
v *= 100;
return hasUnit ? $"{(Math.Round(v / 0.5) * 0.5).ToString("F1")}%" : (Math.Round(v / 0.5) * 0.5).ToString("F1");
default: default:
v = Math.Floor(v * 1000) / 1000;
return hasUnit ? $"{(v*100).ToString("F1")}%" : (v*100).ToString("F1"); return hasUnit ? $"{(v*100).ToString("F1")}%" : (v*100).ToString("F1");
} }
} }

@ -105,7 +105,7 @@ public class ViewportManager
/// <summary> /// <summary>
/// 重置选中的面 /// 重置选中的面
/// </summary> /// </summary>
public static void ResetChooseAddModels() public static void ResetChooseAddModels(string valType = "")
{ {
if (string.IsNullOrWhiteSpace(ChooseTriangleCode)) if (string.IsNullOrWhiteSpace(ChooseTriangleCode))
{ {
@ -120,7 +120,7 @@ public class ViewportManager
if (DoubleClickSelectShowInfoText) models.Add(SelShowType.LengthText); if (DoubleClickSelectShowInfoText) models.Add(SelShowType.LengthText);
// if (DoubleClickSelectShowBorderAngle) models.Add(SelShowType.BorderAngle); // if (DoubleClickSelectShowBorderAngle) models.Add(SelShowType.BorderAngle);
if (DoubleClickSelectShowPlaneType) models.Add(SelShowType.IsTypePanel); if (DoubleClickSelectShowPlaneType) models.Add(SelShowType.IsTypePanel);
ChooseAddModels.AddRange( ViewportHelperPro.GentrateChosenView(ChooseTriangleCode, models.ToArray())); ChooseAddModels.AddRange( ViewportHelperPro.GentrateChosenView(ChooseTriangleCode,valType, models.ToArray()));
ChooseAddModels.ForEach(e => _viewport.Items.Add(e)); ChooseAddModels.ForEach(e => _viewport.Items.Add(e));
} }
/// <summary> /// <summary>
@ -158,7 +158,7 @@ public class ViewportManager
ClearDicModels(); ClearDicModels();
} }
ChooseTriangleCode = entities[0].TriangleCode; ChooseTriangleCode = entities[0].TriangleCode;
ResetChooseAddModels(); ResetChooseAddModels(planTypeStr);
} }
#region 面 - 数据固定绑定 #region 面 - 数据固定绑定
@ -170,13 +170,31 @@ public class ViewportManager
{ PlaneType.StarFacet, "STAR"}, { PlaneType.StarFacet, "STAR"},
{ PlaneType.TableFacet, "TABLE"}, { PlaneType.TableFacet, "TABLE"},
{ PlaneType.Culet, "COC"}, { PlaneType.Culet, "COC"},
{ PlaneType.LowerGirdleFact, "LOWER_HALVES_RATIO"},
}; };
// 数据 -> 面 // 数据 -> 面
public static Dictionary<string, PlaneType> DicValueParamToFacet = new Dictionary<string, PlaneType>() public static Dictionary<string, PlaneType> DicValueParamToFacet = new Dictionary<string, PlaneType>()
{ {
{"CROWN_ANGLE", PlaneType.UpperMainFacet}, {"CROWN_ANGLE", PlaneType.UpperMainFacet},
{"PAV_ANGLE", PlaneType.PavilionMainFacet}, {"PAV_ANGLE", PlaneType.PavilionMainFacet},
//新加
{"TOTAL_DEPTH", PlaneType.PavilionMainFacet},
{"TABLE", PlaneType.TableFacet},
{"CROWN_HEIGHT", PlaneType.UpperMainFacet},
{"PAV_DEPTH", PlaneType.PavilionMainFacet},
{"STAR", PlaneType.StarFacet}, {"STAR", PlaneType.StarFacet},
{"LOWER_HALVES_RATIO", PlaneType.LowerGirdleFact},
{"CULET", PlaneType.Culet},
{"TOC", PlaneType.TableFacet},
{"COC", PlaneType.Culet},
{"TWIST", PlaneType.UpperMainFacet},
{"CULET_TO_TABLE", PlaneType.Culet},
{"GIRDLE_BEZEL", PlaneType.Girdle},
{"GIRDLE_BONE", PlaneType.Girdle},
{"GIRDLE_VALLEY", PlaneType.Girdle},
}; };
#endregion #endregion
#endregion #endregion

Loading…
Cancel
Save