コード例 #1
0
        public PhotonFilePrintParameters(int parametersPos, byte[] file)
        {
            byte[] data = ArraysEmulation.CopyOfRange(file, parametersPos, parametersPos + GetByteSize());
            var    ds   = new BinaryReader(new MemoryStream(data));

            bottomLiftDistance = ds.ReadSingle();
            bottomLiftSpeed    = ds.ReadSingle();

            liftingDistance = ds.ReadSingle();
            liftingSpeed    = ds.ReadSingle();
            retractSpeed    = ds.ReadSingle();

            volumeMl    = ds.ReadSingle();
            weightG     = ds.ReadSingle();
            costDollars = ds.ReadSingle();

            bottomLightOffDelay = ds.ReadSingle();
            lightOffDelay       = ds.ReadSingle();
            bottomLayerCount    = ds.ReadInt32();

            p1 = ds.ReadInt32();
            p2 = ds.ReadInt32();
            p3 = ds.ReadInt32();
            p4 = ds.ReadInt32();
        }
コード例 #2
0
 public void Clear()
 {
     for (int y = 0; y < height; y++)
     {
         ArraysEmulation.Arraycopy(emptyRow, 0, iArray[y], 0, width);
     }
     ArraysEmulation.Arraycopy(emptyCol, 0, pixels, 0, height);
     ArraysEmulation.Arraycopy(emptyCol, 0, rowIslands, 0, height);
 }
コード例 #3
0
        public static List <PhotonFileLayer> ReadLayers(PhotonFileHeader photonFileHeader, byte[] fileContent, int margin, Action <string> reportProgress)
        {
            var photonLayer = new PhotonLayer(photonFileHeader.GetResolutionX(), photonFileHeader.GetResolutionY());

            var layers = new List <PhotonFileLayer>();

            int antiAliasLevel = 1;

            if (photonFileHeader.GetVersion() > 1)
            {
                antiAliasLevel = photonFileHeader.GetAntiAliasingLevel();
            }

            int layerCount = photonFileHeader.GetNumberOfLayers();

            var start = photonFileHeader.GetLayersDefinitionOffsetAddress();
            var ds    = new BinaryReader(new MemoryStream(fileContent, start, fileContent.Length - start));

            {
                var layerMap = new Dictionary <int, PhotonFileLayer>();
                for (int i = 0; i < layerCount; i++)
                {
                    reportProgress?.Invoke("Reading photon file layer " + (i + 1) + "/" + photonFileHeader.GetNumberOfLayers());

                    var layer = new PhotonFileLayer(ds)
                    {
                        photonFileHeader = photonFileHeader
                    };
                    layer.imageData = ArraysEmulation.CopyOfRange(fileContent, layer.dataAddress, layer.dataAddress + layer.dataSize);
                    layers.Add(layer);
                    layerMap[i] = layer;
                }

                if (antiAliasLevel > 1)
                {
                    for (int a = 0; a < (antiAliasLevel - 1); a++)
                    {
                        for (int i = 0; i < layerCount; i++)
                        {
                            reportProgress?.Invoke("Reading photon file AA " + (2 + a) + "/" + antiAliasLevel + " layer " + (i + 1) + "/" + photonFileHeader.GetNumberOfLayers());

                            var layer = new PhotonFileLayer(ds)
                            {
                                photonFileHeader = photonFileHeader
                            };
                            layer.imageData = ArraysEmulation.CopyOfRange(fileContent, layer.dataAddress, layer.dataAddress + layer.dataSize);

                            layerMap[i].AddAntiAliasLayer(layer);
                        }
                    }
                }
            }

            photonLayer.UnLink();

            return(layers);
        }
コード例 #4
0
        public void UnpackLayerImage(byte[] packedLayerImage)
        {
            Clear();
            int x           = 0;
            int y           = 0;
            int imageLength = packedLayerImage.Length;

            for (int i = 0; i < imageLength; i++)
            {
                byte rle       = packedLayerImage[i];
                byte colorCode = (byte)((rle & 0x60) >> 5);

                bool extended = (rle & 0x80) == 0x80;
                int  length   = rle & 0x1F;
                if (extended)
                {
                    i++;
                    length = (length << 8) | packedLayerImage[i] & 0x00ff;
                }

                ArraysEmulation.Fill(iArray[y], x, x + length, colorCode);

                if (colorCode == SUPPORTED)
                {
                    pixels[y] += length;
                }
                else if (colorCode == CONNECTED)
                {
                    pixels[y] += length;
                }
                else if (colorCode == ISLAND)
                {
                    rowIslands[y] += length;
                    islandCount   += length;
                    pixels[y]     += length;
                }

                x += length;
                if (x >= width)
                {
                    y++;
                    x = 0;
                }
            }
        }
コード例 #5
0
        public PhotonFilePreview(int previewAddress, byte[] file)
        {
            byte[] data = ArraysEmulation.CopyOfRange(file, previewAddress, previewAddress + 32);
            var    ds   = new BinaryReader(new MemoryStream(data));

            resolutionX  = ds.ReadInt32();
            resolutionY  = ds.ReadInt32();
            imageAddress = ds.ReadInt32();
            dataSize     = ds.ReadInt32();
            p1           = ds.ReadInt32();
            p2           = ds.ReadInt32();
            p3           = ds.ReadInt32();
            p4           = ds.ReadInt32();

            rawImageData = ArraysEmulation.CopyOfRange(file, imageAddress, imageAddress + dataSize);

            DecodeImageData();
        }
コード例 #6
0
        public byte[] PackLayerImage()
        {
            int ptr = 0;

            for (int y = 0; y < height; y++)
            {
                if (pixels[y] == 0)
                {
                    ptr = Add(ptr, OFF, width);
                }
                else
                {
                    byte current = OFF;
                    int  length  = 0;
                    for (int x = 0; x < width; x++)
                    {
                        byte next = iArray[y][x];
                        if (next != current)
                        {
                            if (length > 0)
                            {
                                ptr = Add(ptr, current, length);
                            }
                            current = next;
                            length  = 1;
                        }
                        else
                        {
                            length++;
                        }
                    }
                    if (length > 0)
                    {
                        ptr = Add(ptr, current, length);
                    }
                }
            }
            byte[] img = new byte[ptr];
            ArraysEmulation.Arraycopy(scratchPad, 0, img, 0, ptr);
            return(img);
        }
コード例 #7
0
        public PhotonFileMachineInfo(int address, int byteSize, byte[] file)
        {
            this.infoByteSize = byteSize;

            if (byteSize > 0)
            {
                byte[] data = ArraysEmulation.CopyOfRange(file, address, address + byteSize);

                var ds = new BinaryReader(new MemoryStream(data));
                {
                    u1 = ds.ReadInt32();
                    u2 = ds.ReadInt32();
                    u3 = ds.ReadInt32();
                    u4 = ds.ReadInt32();
                    u5 = ds.ReadInt32();
                    u6 = ds.ReadInt32();
                    u7 = ds.ReadInt32();

                    machineNameAddress = ds.ReadInt32();
                    machineNameSize    = ds.ReadInt32();

                    u8  = ds.ReadInt32();
                    u9  = ds.ReadInt32();
                    u10 = ds.ReadInt32();
                    u11 = ds.ReadInt32();
                    u12 = ds.ReadInt32();
                    u13 = ds.ReadInt32();
                    u14 = ds.ReadInt32();
                    u15 = ds.ReadInt32();
                    u16 = ds.ReadInt32();
                    u17 = ds.ReadInt32();
                }

                machineName = ArraysEmulation.CopyOfRange(file, machineNameAddress, machineNameAddress + machineNameSize);
            }
        }