Example #1
0
    public IEnumerator LoadObjectFromDiskCR(string path, MeshLoader loader, GCodeHandler mc)
    {
        int layernum = 0;

        //create object to put all mesh types in
        var objectName = loader.GetObjectNameFromPath(path);

        var rootFolderOfObject = loader.dataPath + "/" + objectName;

        mc.RootForObject.transform.localPosition = Vector3.zero;
        mc.RootForObject.transform.localScale    = Vector3.one;
        mc.RootForObject.transform.localRotation = Quaternion.identity;

        SortedDictionary <int, List <string> > sortedLayers = new SortedDictionary <int, List <string> >();

        foreach (var folder in Directory.GetDirectories(rootFolderOfObject))
        {
            var files = Directory.GetFiles(folder);
            foreach (var file in Directory.GetFiles(folder))
            {
                var l = Convert.ToInt32(file.Substring(file.LastIndexOf(@" ") + 1, file.LastIndexOf(".") - file.LastIndexOf(@" ") - 1));
                if (!sortedLayers.ContainsKey(l))
                {
                    sortedLayers.Add(l, new List <string>());
                    sortedLayers[l].Add(file);
                }
                else
                {
                    sortedLayers[l].Add(file);
                }
            }
        }


        foreach (var layers in sortedLayers)
        {
            foreach (var file in layers.Value)
            {
                var typeString = file.Substring(file.LastIndexOf(@"\") + 1, file.LastIndexOf(' ') - file.LastIndexOf(@"\") - 1);
                mc.CreateTypeObject(typeString);


                var layername = file.Substring(file.LastIndexOf(@"\") + 1, file.LastIndexOf(".") - file.LastIndexOf(@"\") - 1);

                //get mesh from file
                var mesh = MeshSerializer.DeserializeMesh(File.ReadAllBytes(file));


                //get the biggest layer number
                var l = mc.createLayerObject(layername, typeString, mesh);
                if (l > layernum)
                {
                    layernum = l;
                }
            }
            yield return(null);
        }

        mc.endloading(layernum);
    }
Example #2
0
    internal void Update(GCodeHandler source)
    {
        if (loadingFromDisk == true)
        {
            loadingFromDisk = false;
            source.StartCoroutine(LoadObjectFromDiskCR(path, source));
        }

        if (loadQueue.Count > 0 && loadingFromDisk)
        {
            KeyValuePair <string, Mesh> KeyValuepPairLayer = loadQueue.Dequeue();
            dequeuedMeshes++;

            KeyValuePair <String, int> LayerInfo = source.createLayerObjects(KeyValuepPairLayer);
            string parent = LayerInfo.Key;

            //get the biggest layer number
            var l = LayerInfo.Value;
            if (l > layernum)
            {
                layernum = l;
            }

            dequeuedMeshes++;
            if (dequeuedMeshes == EnqueuedMeshes)
            {
                source.endloading(layernum);

                source.StartCoroutine(closeProgress());
                loadingFromDisk = false;
                source.doneLoading.Invoke();
                source.loading = false;
            }
        }

        //lock (meshSimplifierQueueLock)
        {
            if (meshSimplifierQueue.Count > 0)
            {
                if (meshSimplifierQueue.Peek().simplified)
                {
                    var  layer    = meshSimplifierQueue.Peek();
                    Mesh destMesh = layer.MeshSimplifier.ToMesh();
                    layer.MeshFilter.mesh = destMesh;
                    layer.MeshFilter.gameObject.GetComponent <MeshRenderer>().enabled = true;
                    string folder   = dataPath + "/" + source.RootForObject.gameObject.name + "/" + layer.MeshFilter.gameObject.transform.parent.gameObject.name + "/";
                    string fileName = layer.MeshFilter.gameObject.name + ".mesh";
                    meshLoaderDisk.SaveLayerAsAsset(destMesh, folder, fileName);
                    lock (meshSimplifierQueueLock)
                    {
                        meshSimplifierQueue.Dequeue();
                    }
                }
                if (!issimplifying && meshSimplifierQueue.Count > 0)
                {
                    issimplifying = true;
                    Task.Run(() => simplyfyOne());

                    //if (simplify.ThreadState == ThreadState.Stopped ||simplify.ThreadState == ThreadState.Unstarted )
                    //{
                    //    try
                    //    {
                    //        simplify = new Thread(simplyfyOne);
                    //        issimplifying = true;
                    //        simplify.Start();
                    //    }
                    //    catch (Exception ex)
                    //    {
                    //    }
                    //}
                }
            }
            else
            {
                //Debug.Log("nothing to simplify");
            }
        }

        gcodeMeshGenerator.Update(source, this);


        if (gcodeMeshGenerator.createdLayers == simplifiedLayers && source.loading && filesLoadingfinished)
        {
            source.StartCoroutine(closeProgress());
            filesLoadingfinished             = false;
            simplifiedLayers                 = 0;
            gcodeMeshGenerator.createdLayers = 0;
            source.endloading(layernum);
        }
    }
Example #3
0
    internal void Update(GCodeHandler source, int threadcount, float quality)
    {
        meshsimplifyquality = quality;
        gcodeMeshGenerator.Update(source, this);

        if (loadQueue.Count > 0 && loadingFromDisk)
        {
            KeyValuePair <string, Mesh> KeyValuepPairLayer = loadQueue.Dequeue();
            dequeuedMeshes++;

            KeyValuePair <String, int> LayerInfo = source.createLayerObjects(KeyValuepPairLayer);
            string parent = LayerInfo.Key;

            //get the biggest layer number

            var l = LayerInfo.Value;
            if (l > layernum)
            {
                layernum = l;
            }

            dequeuedMeshes++;
            if (dequeuedMeshes == EnqueuedMeshes)
            {
                source.endloading(layernum);
                loadingFromDisk = false;
                source.loading  = false;
            }
        }

        List <Task> tasks     = new List <Task>();
        int         lastnum   = 0;
        int         lastsaved = 0;

        while (meshSimplifierQueue.Count > lastsaved)
        {
            if (meshSimplifierQueue[lastsaved].simplified)
            {
                //Console.WriteLine("a " + DateTimeOffset.Now);
                var  layer    = meshSimplifierQueue[lastsaved];
                Mesh destMesh = layer.ToSimplify;
                meshLoaderNet.SaveLayerAsAsset(destMesh, layer.name);
                lastsaved++;

                //lock (meshSimplifierQueueLock)
                //{
                //    meshSimplifierQueue.RemoveAt(0);
                //}
            }
            else
            {
                if (tasks.Count < threadcount && meshSimplifierQueue.Count > lastnum)
                {
                    int  actnum = lastnum;
                    Task t      = Task.Run(() => simplyfyOne(actnum));
                    lastnum++;
                    tasks.Add(t);
                }
                else
                {
                    if (tasks.Count > 0)
                    {
                        Task.WaitAny(tasks[0]);
                        tasks.RemoveAt(0);
                    }
                }
                //simplyfyOne();
            }
        }


        gcodeMeshGenerator.Update(source, this);


        if (gcodeMeshGenerator.createdLayers == simplifiedLayers && source.loading && filesLoadingfinished)
        {
            //source.StartCoroutine(closeProgress());
            filesLoadingfinished             = false;
            simplifiedLayers                 = 0;
            gcodeMeshGenerator.createdLayers = 0;
            source.endloading(layernum);
        }
    }