Skip to content
Snippets Groups Projects
Commit a9c091c3 authored by Vojtech Moravec's avatar Vojtech Moravec
Browse files

Experimental voxel loading.

parent 2d23b261
Branches
No related tags found
No related merge requests found
......@@ -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;
}
......
......@@ -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.
......
......@@ -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);
}
}
......@@ -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);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment