fix: 3D模型双向交互

master
Tongg 5 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>
/// 显示线段长度mm
/// 选择面生成文本信息
/// </summary>
/// <param name="entities">三角形集合</param>
/// <param name="textColor">文字颜色</param>
/// <param name="showAll">是否显示全部(false:只显示不重复)</param>
/// <param name="valKey">指定数据集</param>
/// <returns></returns>
public static List<GeometryModel3D> GenerateLineTextModels(List<Viewport3DTriangleEntity> entities,
Color4? textColor = null,bool showAll = false)
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>();
if (selFacetType == PlaneType.Girdle)
if (selFacetType == PlaneType.Girdle && string.IsNullOrWhiteSpace(valKey))
{
Logger.Info($"【面文本生成】 命中面{selFacetType},是腰");
// 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();
Logger.Info($"【面文本生成】 {valueFloat} -- {valueIndex}");
var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector);
result.Add(DisplayText3D($"{valueFloat}", facetTextPoint, textColor));
result.Add(DisplayText3D($"{valueFloat}", facetTextPoint));
// foreach (var kv in groupedDic)
// {
// var value = kv.Value;
@ -569,6 +567,11 @@ public class ViewportHelperPro
// */
//
// }
}else if (selFacetType == PlaneType.Girdle && string.IsNullOrWhiteSpace(valKey))
{
Logger.Info($"【面文本生成】 命中面{selFacetType},是腰,显示值{valKey}");
}
else
{
@ -579,6 +582,7 @@ public class ViewportHelperPro
var groupedDic = facetTypeAll.GroupBy(entity => entity.PlaneCode)
.ToDictionary(group => group.Key, group => group.ToList());
Logger.Info($"【面文本生成】 同类面{groupedDic.Count}个");
var valueIndex = 1;
foreach (var kv in groupedDic)
{
var value = kv.Value;
@ -587,7 +591,7 @@ public class ViewportHelperPro
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 = 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)
{
continue;
@ -604,10 +608,31 @@ public class ViewportHelperPro
var valueFloat = ValueFormat(paramValue.ToString(),param);
Logger.Info($"【面文本生成】 {valueFloat} -- {facetIndex}");
var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector);
result.Add(DisplayText3D($"{valueFloat}", facetTextPoint, textColor));
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);
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)
{
@ -631,7 +656,7 @@ public class ViewportHelperPro
var valueFloat = ValueFormat(paramValue.ToString(),param);
Logger.Info($"【面文本生成】 {valueFloat} -- {facetIndex}");
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="selType">生成范围</param>
/// <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));
if(res != null)
return GentrateChosenView(res, selType);
return GentrateChosenView(res, valKey, selType);
return new List<GeometryModel3D>();
}
@ -702,7 +727,7 @@ public class ViewportHelperPro
/// <param name="selType">生成范围</param>
/// <returns></returns>
/// <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)
{
@ -739,7 +764,7 @@ public class ViewportHelperPro
case SelShowType.LengthText:
//选中面 每条边长度标记
// if(PlaneType.Girdle == entity.PlaneType)break;
result.AddRange(GenerateLineTextModels(selPanel));
result.AddRange(GenerateLineTextModels(selPanel, valKey));
break;
case SelShowType.BorderAngle:
//选中面 每条边向内的夹角
@ -1377,13 +1402,23 @@ public class ViewportHelperPro
{
switch (type)
{
case "DIAMETER": return hasUnit ? $"{v.ToString("F1")}mm" : v.ToString("F1");
case "CROWN_ANGLE":
case "DIAMETER":
v = Math.Floor(v * 10) / 10;
return hasUnit ? $"{v.ToString("F1")}mm" : v.ToString("F1");
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":
//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:
v = Math.Floor(v * 1000) / 1000;
return hasUnit ? $"{(v*100).ToString("F1")}%" : (v*100).ToString("F1");
}
}

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

Loading…
Cancel
Save