public static void Morph(List<Dictionary<Guid, PartMorphInfo>> morphingList, RenderMesh mesh) { var morphInfos = new List<PartMorphInfo>(); foreach (var part in mesh.Parts) { morphInfos.Clear(); morphInfos.AddRange(from m in morphingList where m.ContainsKey(part.Guid) select m[part.Guid]); MorphPart(part, morphInfos.Where(mi => Math.Abs(mi.Delta) > MinFloat).ToList()); } }
public ProfileSmoothing(RenderMesh mesh, Dictionary<Guid, MeshUndoInfo> undoInfo) { renderMesh = mesh; var newMesh = renderMesh.Parts.ToDictionary(part => part.Guid, part => part.GetUndoInfo()); foreach(var oldMeshInfo in undoInfo) { MeshUndoInfo meshInfo; if(newMesh.TryGetValue(oldMeshInfo.Key, out meshInfo)) { smoothingInfo.Add(oldMeshInfo.Key, new KeyValuePair<MeshUndoInfo, MeshUndoInfo>(oldMeshInfo.Value, meshInfo)); } } }
public static void SaveObjFile(string filePath, RenderMesh mesh, MeshType type, ObjExport objExport, bool saveBrushesToTexture = false, bool isCollada = false) { var meshInfos = new List<MeshInfo>(); foreach (var part in mesh.Parts) meshInfos.Add(new MeshInfo(part, mesh.MorphScale)); SaveObjFile(filePath, meshInfos, type, objExport, saveBrushesToTexture, isCollada); }
public static void SaveObjFile(string filePath, RenderMesh mesh, MeshType type, bool saveBrushesToTexture = false) { SaveObjFile(filePath, mesh, type, null, saveBrushesToTexture); }
public static void Morph(List <Dictionary <Guid, PartMorphInfo> > morphingList, RenderMesh mesh) { var morphInfos = new List <PartMorphInfo>(); foreach (var part in mesh.Parts) { morphInfos.Clear(); morphInfos.AddRange(from m in morphingList where m.ContainsKey(part.Guid) select m[part.Guid]); MorphPart(part, morphInfos.Where(mi => Math.Abs(mi.Delta) > MinFloat).ToList()); } }
public Dictionary<Guid, PartMorphInfo> LoadPartsMorphInfo(string path, RenderMesh renderMesh) { var vertexPositions = new List<float>(); List<float> tmp = null; List<uint> uitmp = null; var vertices = new List<Vector3>(); var objModel = ObjLoader.LoadObjFile(path); if (objModel == null) { ProgramCore.EchoToLog(string.Format("Can't load obj model '{0}'", path), EchoMessageType.Error); return null; } var a = new Vector3(99999.0f, 99999.0f, 99999.0f); var b = new Vector3(-99999.0f, -99999.0f, -99999.0f); var result = new Dictionary<Guid, PartMorphInfo>(); foreach (var modelGroup in objModel.Groups) // one group - one mesh { vertexPositions.Clear(); foreach (var face in modelGroup.Value.Faces) // combine all meshes in group - to one mesh. GetObjFace(face, objModel, ref vertexPositions, ref tmp, ref tmp, ref tmp, ref tmp, ref uitmp); vertices.Clear(); for (var i = 0; i < vertexPositions.Count; i += 3) vertices.Add(new Vector3(vertexPositions[i], vertexPositions[i + 1], vertexPositions[i + 2])); PartMorphInfo morphInfo = null; var scale = ProgramCore.PluginMode && ProgramCore.MainForm.ctrlRenderControl.pickingController.ObjExport != null ? ProgramCore.MainForm.ctrlRenderControl.pickingController.ObjExport.Scale : 1.0f; var part = renderMesh.Parts.FirstOrDefault( p => (p.Name.ToLower().Contains(modelGroup.Value.Name.ToLower()) || modelGroup.Value.Name.ToLower().Contains(p.Name.ToLower())) && PartMorphInfo.CreatePartMorphInfo(vertices, p, scale, out morphInfo)); if (part != null) { result.Add(part.Guid, morphInfo); GetAABB(ref a, ref b, vertices); } } foreach (var r in result) MoveToPosition(ref r.Value.PointsMorph, a, b, Vector3.Zero); return result; }