Пример #1
0
        public static CompositeMesh LoadHeadMesh([NotNull] string filePath)
        {
            var meshList = new List <PrettyMesh>();

            var manager = new AssetsManager();

            manager.LoadFiles(filePath);

            foreach (var assetFile in manager.assetsFileList)
            {
                foreach (var obj in assetFile.Objects)
                {
                    if (obj.type != ClassIDType.Mesh)
                    {
                        continue;
                    }

                    var mesh = obj as Mesh;

                    if (mesh == null)
                    {
                        throw new ArgumentNullException(nameof(mesh), "One of head meshes is null.");
                    }

                    var m = new MeshWrapper(manager.assetsFileList, mesh, TexturedMaterialExtraProperties.Head);
                    meshList.Add(m);
                }
            }

            var result = CompositeMesh.FromMeshes(meshList.ToArray());

            return(result);
        }
Пример #2
0
        public static MeshWrapper LoadBodyMesh([NotNull] string filePath)
        {
            MeshWrapper result = null;

            var manager = new AssetsManager();

            manager.LoadFiles(filePath);

            foreach (var assetFile in manager.assetsFileList)
            {
                foreach (var obj in assetFile.Objects)
                {
                    if (obj.type != ClassIDType.Mesh)
                    {
                        continue;
                    }

                    var mesh = obj as Mesh;

                    if (mesh == null)
                    {
                        throw new ArgumentNullException(nameof(mesh), "Body mesh is null.");
                    }

                    result = new MeshWrapper(manager.assetsFileList, mesh, TexturedMaterialExtraProperties.Body);

                    break;
                }
            }

            return(result);
        }
Пример #3
0
        public static PrettyMesh LoadBodyMesh()
        {
            MeshWrapper result = null;

            var manager = new AssetsManager();

            manager.LoadFiles(BodyModelFilePath);

            var lookup = SerializedObjectsLookup.Create(manager);

            foreach (var assetFile in manager.assetsFileList)
            {
                foreach (var obj in assetFile.Objects)
                {
                    if (obj.type != ClassIDType.Mesh)
                    {
                        continue;
                    }

                    var mesh = obj as Mesh;

                    if (mesh == null)
                    {
                        throw new ArgumentNullException(nameof(mesh), "Body mesh is null.");
                    }

                    result = new MeshWrapper(lookup, mesh, TexturedMaterialExtraProperties.Body);

                    break;
                }
            }

            return(result);
        }
Пример #4
0
 void Update()
 {
     if (batches.Count > 0)
     {
         for (int i = 0; i < batches.Count; i++)
         {
             MeshWrapper wrapper = batches[i];
             Graphics.DrawMesh(wrapper.mesh, wrapper.location, Quaternion.identity, cubeMaterial, 0);
         }
     }
 }
Пример #5
0
        public static MeshWrapper <VoxelVertex> GenerateMesh(VkDevice device, VkPhysicalDevice physicalDevice)
        {
            MeshWrapper <VoxelVertex> mesh = new MeshWrapper <VoxelVertex>();

            mesh.CreateMesh(() =>
            {
                Stopwatch stopwatch          = Stopwatch.StartNew();
                Mesh <VoxelVertex> meshlocal = _DoGenerateMesh(device, physicalDevice, true);
                Console.WriteLine($"Total time taken to make mesh: {((double)stopwatch.ElapsedTicks) / Stopwatch.Frequency * 1000} ms");
                return(meshlocal);
            },
                            () =>//Quick mesh
            {
                Stopwatch stopwatch          = Stopwatch.StartNew();
                Mesh <VoxelVertex> meshlocal = _DoGenerateMesh(device, physicalDevice, false);
                Console.WriteLine($"Total time taken to make mesh: {((double)stopwatch.ElapsedTicks) / Stopwatch.Frequency * 1000} ms");
                return(meshlocal);
            });
            return(mesh);
        }
Пример #6
0
        /// <summary>
        /// Receives Parasite Data from a given ID
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public static object[] ReceiveData(string id)
        {
            // List<object> outPut = new List<object>();

            RequestData rd = new RequestData();



            string   data     = "";
            DataType dataType = DataType.Mesh;
            int      vertices = 0;
            int      faces    = 0;

            System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();

            sw.Start();

            DataContainer dataContainer = rd.RequestDataLocal(id);
            int           dataCount     = dataContainer.Data.Length;

            object[] outPut = new object[dataCount];

            Parallel.For(0, dataCount, i =>
            {
                // for (int i = 0; i < dataContainer.Data.Length; i++)
                // {
                for (int j = 0; j < dataContainer.Data[i].Length; j++)
                {
                    if (dataContainer.Data[i][j].Node is Parasite_Mesh mesh)
                    {
                        if (mesh.VertexColors == null)
                        {
                            Mesh m    = DynamoConversion.ToDynamoType(mesh);
                            vertices  = m.VertexPositions.Length;
                            faces     = m.FaceIndices.Length;
                            outPut[i] = m;
                            dataType  = DataType.Mesh;
                        }
                        else
                        {
                            Mesh m = DynamoConversion.ToDynamoType(mesh);
                            MeshWrapper wrapper = new MeshWrapper(m.VertexNormals, m.VertexPositions, mesh.VertexColors);
                            outPut[i]           = wrapper;
                        }
                    }

                    else if (dataContainer.Data[i][j].Node is Parasite_NurbsCurve nurbsCurve)
                    {
                        outPut[i] = DynamoConversion.ToDynamoType(nurbsCurve);
                    }

                    else if (dataContainer.Data[i][j].Node is Parasite_BrepSurface brepSrf)
                    {
                        outPut[i] = DynamoConversion.ToDynamoType(brepSrf);
                    }
                    else
                    {
                        throw new ParasiteNotImplementedExceptions("Type conversion not implemented yet!");
                    }
                }
                //}
            });

            sw.Stop();

            switch (dataType)
            {
            case DataType.Mesh:
                data = string.Format("Time taken to load mesh with {0} vertices and {1} faces: {2} seconds ",
                                     vertices, faces, (sw.ElapsedMilliseconds * 0.001).ToString());

                break;
            }

            // data = string.Format("Time taken to load {0} elements: {1} seconds ", outPut.Length.ToString(), (sw.ElapsedMilliseconds * 0.001).ToString());



            MessageBox.Show(data, "Parasite.IO Data", MessageBoxButtons.OK, MessageBoxIcon.Information);


            return(outPut);
        }