コード例 #1
0
ファイル: Morphing.cs プロジェクト: reward-hunters/PrintAhead
 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());
     }
 }
コード例 #2
0
 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));
         }
     }
 }
コード例 #3
0
ファイル: ObjSaver.cs プロジェクト: reward-hunters/PrintAhead
        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);
        }
コード例 #4
0
ファイル: ObjSaver.cs プロジェクト: reward-hunters/PrintAhead
 public static void SaveObjFile(string filePath, RenderMesh mesh, MeshType type, bool saveBrushesToTexture = false)
 {
     SaveObjFile(filePath, mesh, type, null, saveBrushesToTexture);
 }
コード例 #5
0
ファイル: Morphing.cs プロジェクト: wiplug/HeadShop
        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());
            }
        }
コード例 #6
0
        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;
        }