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(); }
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); }
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); }
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; } } }
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(); }
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); }
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); } }