|
|
|
@ -893,7 +893,10 @@ public class ViewportHelperPro |
|
|
|
|
var valueFloat = ValueFormat(paramValue.ToString(), param, true); |
|
|
|
|
Logger.Info($"【面文本生成】 {valueFloat} -- {valueIndex}"); |
|
|
|
|
var facetTextPoint = GetOffsetCenter(facetPoints, ViewportManager.CenterVector); |
|
|
|
|
result.Add(DisplayText3D($"{valueFloat} \r\n {facetIndex}", new Vector3(facetTextPoint.X, facetTextPoint.Y + 0.1f, facetTextPoint.Z))); |
|
|
|
|
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) |
|
|
|
|
{ |
|
|
|
@ -920,6 +923,105 @@ public class ViewportHelperPro |
|
|
|
|
result.Add(DisplayText3D($"{valueFloat} \r\n {facetIndex}", facetTextPoint)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (string.IsNullOrWhiteSpace(valKey)) |
|
|
|
|
{ |
|
|
|
|
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>(); |
|
|
|
|
|
|
|
|
|
allStartEntityGroupByFacet[$"13_{i}"].ForEach(e => |
|
|
|
|
{ |
|
|
|
|
pointsTemp.Add(e.Point1); |
|
|
|
|
pointsTemp.Add(e.Point2); |
|
|
|
|
pointsTemp.Add(e.Point3); |
|
|
|
|
}); |
|
|
|
|
int upperGridleIndex = ((i + 1) * 2) >= 16 ? 1 : ((i + 1) * 2); |
|
|
|
|
// allUpperGridleEntityGroupByFacet[$"14_{upperGridleIndex}"].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++) |
|
|
|
|
{ |
|
|
|
|
var valIndex = i + 1; |
|
|
|
|
var paramValue = detail[$"{valParam}_{valIndex}"]; |
|
|
|
|
var valueFloat = ValueFormat(paramValue.ToString(), valParam); |
|
|
|
|
var finalValue = PlaneType.StarFacet == selFacetType |
|
|
|
|
? valueFloat |
|
|
|
|
: (100 - (double.Parse(valueFloat))).ToString(); |
|
|
|
|
result.Add(DisplayText3D($"{finalValue}%", new Vector3(points[i].X,points[i].Y-0.2f,points[i].Z))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
}else if (PlaneType.LowerGirdleFact == selFacetType) |
|
|
|
|
{ |
|
|
|
|
//下腰面: 在底面的点显示 下腰比 |
|
|
|
|
string valParam = "LOWER_HALVES_RATIO"; |
|
|
|
|
|
|
|
|
|
List<Viewport3DTriangleEntity> allLowerGirdleEntity = |
|
|
|
|
ViewportManager.ViewportTriangle.FindAll(e => e.PlaneType == PlaneType.LowerGirdleFact); |
|
|
|
|
var allLowerGirdleGroupByFacet = allLowerGirdleEntity.GroupBy(entity => entity.PlaneCode) |
|
|
|
|
.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))); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|