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

Remove some code duplicates.

parent 1fc29753
No related branches found
No related tags found
No related merge requests found
...@@ -150,23 +150,12 @@ public abstract class BasicLoader { ...@@ -150,23 +150,12 @@ public abstract class BasicLoader {
if (wrappingStrategy == DataWrappingStrategy.ClampToEdge) { if (wrappingStrategy == DataWrappingStrategy.ClampToEdge) {
final int srcRow = dims.getY() - 1; final int srcRow = dims.getY() - 1;
final int dstOffset = y * blockDim.getX(); final int dstOffset = y * blockDim.getX();
for (int x = 0; x < blockDim.getX(); x++) { duplicateDataFromSrcRow(block, planeIndex, blockXOffset, blockDim, srcRow, dstOffset);
srcX = (blockXOffset + x);
if (srcX >= dims.getX())
srcX = dims.getX() - 1;
block[dstOffset + x] = valueAt(planeIndex, Block.index(srcX, srcRow, dims.getX()));
}
continue; continue;
} else if (wrappingStrategy == DataWrappingStrategy.MirroredRepeat) { } else if (wrappingStrategy == DataWrappingStrategy.MirroredRepeat) {
final int srcRow = dims.getY() - ((srcY - dims.getY()) + 1); final int srcRow = dims.getY() - ((srcY - dims.getY()) + 1);
final int dstOffset = y * blockDim.getX(); final int dstOffset = y * blockDim.getX();
for (int x = 0; x < blockDim.getX(); x++) { duplicateDataFromSrcRow(block, planeIndex, blockXOffset, blockDim, srcRow, dstOffset);
srcX = (blockXOffset + x);
if (srcX >= dims.getX())
srcX = dims.getX() - 1;
block[dstOffset + x] = valueAt(planeIndex, Block.index(srcX, srcRow, dims.getX()));
}
continue;
} }
} }
...@@ -193,6 +182,36 @@ public abstract class BasicLoader { ...@@ -193,6 +182,36 @@ public abstract class BasicLoader {
} }
} }
private void duplicateDataFromSrcRow(final int[] block,
final int planeIndex,
final int blockXOffset,
final V2i blockDim,
final int srcRow,
final int dstOffset) {
int srcX;
for (int x = 0; x < blockDim.getX(); x++) {
srcX = (blockXOffset + x);
if (srcX >= dims.getX())
srcX = dims.getX() - 1;
block[dstOffset + x] = valueAt(planeIndex, Block.index(srcX, srcRow, dims.getX()));
}
}
private void duplicateDataFromSrcRow(final int[] block,
final int[] planeData,
final int blockXOffset,
final V2i blockDim,
final int srcRow,
final int dstOffset) {
int srcX;
for (int x = 0; x < blockDim.getX(); x++) {
srcX = (blockXOffset + x);
if (srcX >= dims.getX())
srcX = dims.getX() - 1;
block[dstOffset + x] = planeData[Block.index(srcX, srcRow, dims.getX())];
}
}
private void loadBlock(final int[] block, final int[] planeData, final int blockXOffset, final int blockYOffset, final V2i blockDim) { private void loadBlock(final int[] block, final int[] planeData, final int blockXOffset, final int blockYOffset, final V2i blockDim) {
int srcX, srcY; int srcX, srcY;
for (int y = 0; y < blockDim.getY(); y++) { for (int y = 0; y < blockDim.getY(); y++) {
...@@ -206,23 +225,12 @@ public abstract class BasicLoader { ...@@ -206,23 +225,12 @@ public abstract class BasicLoader {
if (wrappingStrategy == DataWrappingStrategy.ClampToEdge) { if (wrappingStrategy == DataWrappingStrategy.ClampToEdge) {
final int srcRow = dims.getY() - 1; final int srcRow = dims.getY() - 1;
final int dstOffset = y * blockDim.getX(); final int dstOffset = y * blockDim.getX();
for (int x = 0; x < blockDim.getX(); x++) { duplicateDataFromSrcRow(block, planeData, blockXOffset, blockDim, srcRow, dstOffset);
srcX = (blockXOffset + x);
if (srcX >= dims.getX())
srcX = dims.getX() - 1;
block[dstOffset + x] = planeData[Block.index(srcX, srcRow, dims.getX())];
}
continue; continue;
} else if (wrappingStrategy == DataWrappingStrategy.MirroredRepeat) { } else if (wrappingStrategy == DataWrappingStrategy.MirroredRepeat) {
final int srcRow = dims.getY() - ((srcY - dims.getY()) + 1); final int srcRow = dims.getY() - ((srcY - dims.getY()) + 1);
final int dstOffset = y * blockDim.getX(); final int dstOffset = y * blockDim.getX();
for (int x = 0; x < blockDim.getX(); x++) { duplicateDataFromSrcRow(block, planeData, blockXOffset, blockDim, srcRow, dstOffset);
srcX = (blockXOffset + x);
if (srcX >= dims.getX())
srcX = dims.getX() - 1;
block[dstOffset + x] = planeData[Block.index(srcX, srcRow, dims.getX())];
}
continue;
} }
} }
for (int x = 0; x < blockDim.getX(); x++) { for (int x = 0; x < blockDim.getX(); x++) {
...@@ -248,6 +256,7 @@ public abstract class BasicLoader { ...@@ -248,6 +256,7 @@ public abstract class BasicLoader {
} }
} }
private void loadVoxel(final int[] voxel, final int voxelXOffset, final int voxelYOffset, final int voxelZOffset, final V3i voxelDim) { private void loadVoxel(final int[] voxel, final int voxelXOffset, final int voxelYOffset, final int voxelZOffset, final V3i voxelDim) {
int srcX, srcY, srcZ; int srcX, srcY, srcZ;
for (int z = 0; z < voxelDim.getZ(); z++) { for (int z = 0; z < voxelDim.getZ(); z++) {
...@@ -301,6 +310,14 @@ public abstract class BasicLoader { ...@@ -301,6 +310,14 @@ public abstract class BasicLoader {
} }
} }
private int[][] allocateVoxelArray(final V3i voxelDim, final Range<Integer> planeRange) {
final int voxelElementCount = (int) voxelDim.multiplyTogether();
final int rangeSize = planeRange.getTo() - planeRange.getFrom();
final V3i srcVoxel = new V3i(dims.getX(), dims.getY(), rangeSize);
final int voxelCount = Voxel.calculateRequiredVoxelCount(srcVoxel, voxelDim);
return new int[voxelCount][voxelElementCount];
}
/** /**
* Load specified planes from dataset to voxel of specified dimensions. * Load specified planes from dataset to voxel of specified dimensions.
* This overload uses the valueAt function to read src data. * This overload uses the valueAt function to read src data.
...@@ -310,11 +327,7 @@ public abstract class BasicLoader { ...@@ -310,11 +327,7 @@ public abstract class BasicLoader {
* @return Voxel data arranged in arrays. * @return Voxel data arranged in arrays.
*/ */
protected int[][] loadVoxelsImplByValueAt(final V3i voxelDim, final Range<Integer> planeRange) { protected int[][] loadVoxelsImplByValueAt(final V3i voxelDim, final Range<Integer> planeRange) {
final int voxelElementCount = (int) voxelDim.multiplyTogether(); final int[][] voxels = allocateVoxelArray(voxelDim, planeRange);
final int rangeSize = planeRange.getTo() - planeRange.getFrom();
final V3i srcVoxel = new V3i(dims.getX(), dims.getY(), rangeSize);
final int voxelCount = Voxel.calculateRequiredVoxelCount(srcVoxel, voxelDim);
final int[][] voxels = new int[voxelCount][voxelElementCount];
int voxelIndex = 0; int voxelIndex = 0;
for (int voxelZOffset = planeRange.getFrom(); voxelZOffset < planeRange.getTo(); voxelZOffset += voxelDim.getZ()) { for (int voxelZOffset = planeRange.getFrom(); voxelZOffset < planeRange.getTo(); voxelZOffset += voxelDim.getZ()) {
...@@ -346,13 +359,7 @@ public abstract class BasicLoader { ...@@ -346,13 +359,7 @@ public abstract class BasicLoader {
* @return Voxel data arranged in arrays. * @return Voxel data arranged in arrays.
*/ */
protected int[][] loadVoxelsImplByLoadPlaneData(final V3i voxelDim, final Range<Integer> planeRange) throws IOException { protected int[][] loadVoxelsImplByLoadPlaneData(final V3i voxelDim, final Range<Integer> planeRange) throws IOException {
final int voxelElementCount = (int) voxelDim.multiplyTogether(); final int[][] voxels = allocateVoxelArray(voxelDim, planeRange);
final int rangeSize = planeRange.getTo() - planeRange.getFrom();
final V3i srcVoxel = new V3i(dims.getX(), dims.getY(), rangeSize);
final int voxelCount = Voxel.calculateRequiredVoxelCount(srcVoxel, voxelDim);
final int[][] voxels = new int[voxelCount][voxelElementCount];
int voxelIndex = 0; int voxelIndex = 0;
final int[][] planesData = new int[voxelDim.getZ()][0]; final int[][] planesData = new int[voxelDim.getZ()][0];
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment