From a9c091c3a71504294ff85787a27c97cdf017579c Mon Sep 17 00:00:00 2001 From: Vojtech Moravec <vojtech.moravec.st@vsb.cz> Date: Tue, 22 Sep 2020 15:08:04 +0200 Subject: [PATCH] Experimental voxel loading. --- src/main/java/azgracompress/data/Voxel.java | 2 +- .../azgracompress/io/loader/BasicLoader.java | 50 ++++++++++++++++++- .../io/loader/FlatBufferLoader.java | 3 +- .../io/loader/ImageJBufferLoader.java | 3 +- 4 files changed, 54 insertions(+), 4 deletions(-) diff --git a/src/main/java/azgracompress/data/Voxel.java b/src/main/java/azgracompress/data/Voxel.java index 7a59445..ecdd9b1 100644 --- a/src/main/java/azgracompress/data/Voxel.java +++ b/src/main/java/azgracompress/data/Voxel.java @@ -45,7 +45,7 @@ public final class Voxel { * @param voxelDims Chunk dimensions. * @return Index inside chunk dimension data array. */ - public int dataIndex(final int x, final int y, final int z, final V3i voxelDims) { + public static int dataIndex(final int x, final int y, final int z, final V3i voxelDims) { return (z * (voxelDims.getX() * voxelDims.getY())) + (y * voxelDims.getX()) + x; } diff --git a/src/main/java/azgracompress/io/loader/BasicLoader.java b/src/main/java/azgracompress/io/loader/BasicLoader.java index e626003..65bcda5 100644 --- a/src/main/java/azgracompress/io/loader/BasicLoader.java +++ b/src/main/java/azgracompress/io/loader/BasicLoader.java @@ -2,7 +2,6 @@ package azgracompress.io.loader; import azgracompress.data.*; -import javax.print.attribute.standard.RequestingUserName; import java.io.IOException; public abstract class BasicLoader { @@ -249,6 +248,55 @@ public abstract class BasicLoader { } } + private void loadVoxel(final int[] voxel, + final int voxelXOffset, + final int voxelYOffset, + final int voxelZOffset, + final V3i voxelDim) { + int srcX, srcY, srcZ; + for (int z = 0; z < voxelDim.getZ(); z++) { + srcZ = voxelZOffset + z; + if (srcZ >= dims.getZ()) { + // Handle plane overflow. + break; + } + for (int y = 0; y < voxelDim.getY(); y++) { + srcY = voxelYOffset + y; + if (srcY >= dims.getY()) { + // Handle row overflow. + break; + } + for (int x = 0; x < voxelDim.getX(); x++) { + srcX = voxelXOffset + x; + if (srcX >= dims.getX()) { + // Handle column overflow + break; + } + + voxel[Voxel.dataIndex(x, y, z, voxelDim)] = valueAt(srcZ, Block.index(x, y, dims.getX())); + } + } + } + + } + + protected int[][] experimentalLoadVoxelsImplByValueAt(final V3i voxelDim, final Range<Integer> planeRange) { + System.out.println("experimentalLoadVoxelsImplByValueAt"); + final int voxelCount = Voxel.calculateRequiredVoxelCount(dims, voxelDim); + final int voxelElementCount = (int) voxelDim.multiplyTogether(); + int[][] voxels = new int[voxelCount][voxelElementCount]; + int voxelIndex = 0; + for (int voxelZOffset = planeRange.getFrom(); voxelZOffset < planeRange.getTo(); voxelZOffset += voxelDim.getZ()) { + for (int voxelYOffset = 0; voxelYOffset < dims.getY(); voxelYOffset += voxelDim.getY()) { + for (int voxelXOffset = 0; voxelXOffset < dims.getX(); voxelXOffset += voxelDim.getX()) { + loadVoxel(voxels[voxelIndex++], voxelXOffset, voxelYOffset, voxelZOffset, voxelDim); + } + } + } + return voxels; + } + + /** * Load specified planes from dataset to voxel of specified dimensions. * This overload uses the loadPlaneData function to read src data. diff --git a/src/main/java/azgracompress/io/loader/FlatBufferLoader.java b/src/main/java/azgracompress/io/loader/FlatBufferLoader.java index 81e5d6c..8dec2ac 100644 --- a/src/main/java/azgracompress/io/loader/FlatBufferLoader.java +++ b/src/main/java/azgracompress/io/loader/FlatBufferLoader.java @@ -105,6 +105,7 @@ public class FlatBufferLoader extends BasicLoader implements IPlaneLoader { @Override public int[][] loadVoxels(final V3i voxelDim, final Range<Integer> planeRange) throws IOException { - return loadVoxelsImplByValueAt(voxelDim, planeRange); +// return loadVoxelsImplByValueAt(voxelDim, planeRange); + return experimentalLoadVoxelsImplByValueAt(voxelDim, planeRange); } } diff --git a/src/main/java/azgracompress/io/loader/ImageJBufferLoader.java b/src/main/java/azgracompress/io/loader/ImageJBufferLoader.java index c5fde4d..83b6f4d 100644 --- a/src/main/java/azgracompress/io/loader/ImageJBufferLoader.java +++ b/src/main/java/azgracompress/io/loader/ImageJBufferLoader.java @@ -104,7 +104,8 @@ public final class ImageJBufferLoader extends BasicLoader implements IPlaneLoade @Override public int[][] loadVoxels(final V3i voxelDim, final Range<Integer> planeRange) throws IOException { - return loadVoxelsImplByValueAt(voxelDim, planeRange); +// return loadVoxelsImplByValueAt(voxelDim, planeRange); + return experimentalLoadVoxelsImplByValueAt(voxelDim, planeRange); } } -- GitLab