Esempio n. 1
0
        private void Timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            double plannedSpeed = Math.Round(realTimeLength * 1.0 / totalLength, 2);

            long downloadSpeed = realTimeLength - lastlLength;

            lastlLength = realTimeLength;

            timeCost++;

            OnProgressHandler?.Invoke(fileName, timeCost, plannedSpeed, downloadSpeed);
        }
        private void Timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            double plannedSpeed = Math.Round(realTimeLength * 1.0 / totalLength, 2);

            if (plannedSpeed == double.NaN)
            {
                //Stop();
                return;
            }

            long downloadSpeed = realTimeLength - lastlLength;

            lastlLength = realTimeLength;

            timeCost++;

            OnProgressHandler?.Invoke(timeCost, plannedSpeed, downloadSpeed);
        }
Esempio n. 3
0
        private static byte[] WriteMain(VoxelData data, OnProgressHandler onProgress)
        {
            const float STEP_COUNT = 5f;

            List <byte> bytes = new List <byte>();

            if (data.Voxels.Count > 1)
            {
                // PACK
                //bytes.AddRange(WritePack(data));
            }

            for (int i = 0; i < data.Voxels.Count; i++)
            {
                if (onProgress != null)
                {
                    onProgress.Invoke((i + 1) / STEP_COUNT / data.Voxels.Count);
                }

                // SIZE
                bytes.AddRange(WriteSize(data.Voxels[i]));
                // XYZI
                bytes.AddRange(WriteVoxels(data.Voxels[i]));
            }

            // RGBA
            if (onProgress != null)
            {
                onProgress.Invoke((2 / STEP_COUNT));
            }

            bytes.AddRange(WritePalette(data.Palette));


            // TGS
            var tgsList = new SortedList <int, byte[]>();

            if (onProgress != null)
            {
                onProgress.Invoke(3 / STEP_COUNT);
            }

            // nTRN
            foreach (var t in data.Transforms)
            {
                tgsList.Add(t.Key, WriteTransform(t.Key, t.Value));
            }

            // nGRP
            foreach (var g in data.Groups)
            {
                tgsList.Add(g.Key, WriteGroup(g.Key, g.Value));
            }

            // nSHP
            foreach (var s in data.Shapes)
            {
                tgsList.Add(s.Key, WriteShape(s.Key, s.Value));
            }

            for (int i = 0; i < tgsList.Keys.Count; i++)
            {
                bytes.AddRange(tgsList[tgsList.Keys[i]]);
            }

            if (onProgress != null)
            {
                onProgress.Invoke(4 / STEP_COUNT);
            }
            // MATL
            for (int i = 0; i < data.Materials.Count; i++)
            {
                bytes.AddRange(WriteMaterial(data.Materials[i]));
            }

            if (onProgress != null)
            {
                onProgress.Invoke(5 / STEP_COUNT);
            }
            // RIGG
            foreach (var r in data.Rigs)
            {
                bytes.AddRange(WriteRig(r.Key, r.Value));
            }

            return(bytes.ToArray());
        }
Esempio n. 4
0
        private static VoxelData GetVoxelDataFromVox(byte[] voxBytes, OnProgressHandler onProgress)
        {
            VoxelData data = new VoxelData();

            if (!CheckID(voxBytes, "VOX "))
            {
                Debug.LogError("Error with Magic Number. The file is not a vox file.");
                return(null);
            }

            using (MemoryStream ms = new MemoryStream(voxBytes)) {
                using (BinaryReader br = new BinaryReader(ms)) {
                    // VOX_
                    br.ReadInt32();

                    // VERSION
                    data.Version = System.BitConverter.ToInt32(br.ReadBytes(4), 0);

                    // MAIN
                    byte[] chunkId          = br.ReadBytes(4);
                    int    mainChunkSize    = br.ReadInt32();
                    int    mainChildrenSize = br.ReadInt32();
                    br.ReadBytes(mainChunkSize);
                    if (!CheckID(chunkId, "MAIN"))
                    {
                        Debug.LogError("Error with Main Chunk ID");
                        return(null);
                    }

                    // Containt
                    int     readSize = 0;
                    Vector3 tempSize = new Vector3();

                    while (readSize < mainChildrenSize)
                    {
                        string id = GetID(br.ReadBytes(4));
                        readSize += 4;

                        switch (id)
                        {
                        case "PACK":
                            readSize += ReadPackChunk(br);
                            break;

                        case "SIZE":
                            readSize += ReadSizeChunk(br, out tempSize);
                            break;

                        case "XYZI":
                            int[,,] tempVoxels = new int[(int)tempSize.x, (int)tempSize.y, (int)tempSize.z];
                            readSize          += ReadVoxelChunk(br, ref tempVoxels);
                            data.Voxels.Add(tempVoxels);
                            break;

                        case "RGBA":
                            readSize += ReadPalattee(br, ref data.Palette);
                            break;

                        case "nTRN":
                            readSize += ReadTransform(br, ref data);
                            break;

                        case "nGRP":
                            readSize += ReadGroup(br, ref data);
                            break;

                        case "nSHP":
                            readSize += ReadShape(br, ref data);
                            break;

                        case "MATL":
                            readSize += ReadMaterial(br, ref data);
                            break;

                        case "RIGG":
                            readSize += ReadRig(br, ref data, 0);
                            break;

                        case "_RIG":
                            readSize += ReadRig(br, ref data, VoxelData.RigData.CURRENT_VERSION);
                            break;

                        default:
                            int chunkSize    = br.ReadInt32();
                            int childrenSize = br.ReadInt32();
                            br.ReadBytes(chunkSize + childrenSize);
                            readSize += chunkSize + childrenSize + 4 + 4;
                            break;
                        }
                    }

                    if (onProgress != null)
                    {
                        onProgress.Invoke((float)readSize / mainChildrenSize);
                    }

                    // Add Default Node if No Node
                    if (data.Transforms.Count == 0)
                    {
                        data.ResetToDefaultNode();
                    }
                }
            }
            return(data);
        }
Esempio n. 5
0
 public void snapshot(Java.Lang.Object p0)
 {
     _handler?.Invoke(p0);
 }