diff --git a/render-app/src/main/java/org/janelia/alignment/RenderTransformMeshMappingWithMasks.java b/render-app/src/main/java/org/janelia/alignment/RenderTransformMeshMappingWithMasks.java index 2cd3eba2f..10153fb26 100644 --- a/render-app/src/main/java/org/janelia/alignment/RenderTransformMeshMappingWithMasks.java +++ b/render-app/src/main/java/org/janelia/alignment/RenderTransformMeshMappingWithMasks.java @@ -155,19 +155,11 @@ private static Exception mapTriangle(final Pair ai, final double dy = affineTransform2D.d(0).getDoublePosition(1); final double[] source = new double[2]; for (int targetY = minY; targetY <= maxY; ++targetY) { - final Range xRange = triangle.intersect(targetY, minX, maxX); - /* TODO: Actually, "maxX" should be "maxX + 1" here, but we compensate for the additional "+1" below. - "maxX + 1" would be correct because intersect range upper bound is exclusive. - */ + final Range xRange = triangle.intersect(targetY, minX, maxX + 1); source[0] = xRange.from(); source[1] = targetY; affineTransform2D.apply(source, source); - lineMapper.map(source[0], source[1], dx, dy, xRange.from(), targetY, - xRange.length() + 1 - /* TODO: This "+1" is to fix the tests and be compatible to the old code. - However, it leads to pixels on the edge of neighboring triangles to be drawn twice. - */ - ); + lineMapper.map(source[0], source[1], dx, dy, xRange.from(), targetY, xRange.length()); } return null; diff --git a/render-app/src/main/java/org/janelia/alignment/Triangle.java b/render-app/src/main/java/org/janelia/alignment/Triangle.java index 545ce83fa..8d711a4ba 100644 --- a/render-app/src/main/java/org/janelia/alignment/Triangle.java +++ b/render-app/src/main/java/org/janelia/alignment/Triangle.java @@ -93,7 +93,7 @@ int length() { Range intersect(final double y, final int rangeMinX, final int rangeMaxX) { final double[] bounds = new double[]{rangeMinX, rangeMaxX}; intersect(y, bounds); - return new Range((int) Math.ceil(bounds[0]), (int) Math.ceil(bounds[1])); + return new Range((int) Math.ceil(bounds[0]), Math.min(rangeMaxX, (int) Math.floor(bounds[1] + 1))); } void intersect(final double y, final double[] bounds) {