fix: obj模型导出修复

master
tongg 5 months ago
parent 46b77ed822
commit d568b6e878
  1. 43
      Views/UserControl/ViewportData/Helper/ObjExporter.cs

@ -17,9 +17,13 @@ public class ObjExporter
.GroupBy(entity => entity.PlaneCode) .GroupBy(entity => entity.PlaneCode)
.ToDictionary(group => group.Key, group => group.ToList()); .ToDictionary(group => group.Key, group => group.ToList());
//腰 单组 //腰 单组
List<Viewport3DTriangleEntity> waistList = entities // List<Viewport3DTriangleEntity> waistList = entities
// .Where(entity => entity.PlaneType == PlaneType.Girdle)
// .ToList();
Dictionary<string, List<Viewport3DTriangleEntity>> gridleList = entities
.Where(entity => entity.PlaneType == PlaneType.Girdle) .Where(entity => entity.PlaneType == PlaneType.Girdle)
.ToList(); .GroupBy(entity => entity.PlaneCode)
.ToDictionary(group => group.Key, group => group.ToList());
//同一个面只保留外边框(除了腰) //同一个面只保留外边框(除了腰)
Dictionary<string, List<Vector3>> resultPoints = new Dictionary<string, List<Vector3>>(); Dictionary<string, List<Vector3>> resultPoints = new Dictionary<string, List<Vector3>>();
@ -35,17 +39,29 @@ public class ObjExporter
} }
resultPoints.Add(dic.Key, ViewportHelperPro.VectorClockwiseSort(new HashSet<Vector3>(tempPoints).ToList())); resultPoints.Add(dic.Key, ViewportHelperPro.VectorClockwiseSort(new HashSet<Vector3>(tempPoints).ToList()));
} }
List<Vector3> selFaceVector = new List<Vector3>();
if (waistList.Count > 0) foreach (var dic in gridleList)
{ {
foreach (var entity in waistList) List<Vector3> tempPoints = new List<Vector3>();
foreach (var entity in dic.Value)
{ {
selFaceVector.Add(entity.Point1); tempPoints.Add(entity.Point1);
selFaceVector.Add(entity.Point2); tempPoints.Add(entity.Point2);
selFaceVector.Add(entity.Point3); tempPoints.Add(entity.Point3);
} }
resultPoints.Add(dic.Key, ViewportHelperPro.VectorClockwiseSort(new HashSet<Vector3>(tempPoints).ToList()));
} }
resultPoints.Add("yao", selFaceVector); // List<Vector3> selFaceVector = new List<Vector3>();
// if (waistList.Count > 0)
// {
// foreach (var entity in waistList)
// {
// selFaceVector.Add(entity.Point1);
// selFaceVector.Add(entity.Point2);
// selFaceVector.Add(entity.Point3);
// }
// }
// resultPoints.Add("yao", selFaceVector);
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
@ -83,8 +99,13 @@ public class ObjExporter
// 获取面上的所有顶点并排序 // 获取面上的所有顶点并排序
List<Vector3> faceVertices = face.Value; List<Vector3> faceVertices = face.Value;
// Vector3 center = GetCenterOfVertices(faceVertices); if (!face.Key.StartsWith("11_"))
// faceVertices.Sort((v1, v2) => GetAngle(v1, center).CompareTo(GetAngle(v2, center))); {
Vector3 center = GetCenterOfVertices(faceVertices);
faceVertices.Sort((v1, v2) => GetAngle(v1, center).CompareTo(GetAngle(v2, center)));
}
// 正面:按顺时针顺序输出 // 正面:按顺时针顺序输出
sb.Append("f"); sb.Append("f");

Loading…
Cancel
Save