fiji/3D_Viewer

NegativeArraySizeException for planar meshes

Opened this issue · 0 comments

Adding a mesh representing a plane that is aligned to the x, y or z axis can cause NegativeArraySizeException. For example:

Image3DUniverse universe = new Image3DUniverse();

// Mesh of a plane perpendicular to the z axis
float length = 1000;
float zpos = -100;
ArrayList<Point3f> triangles = new ArrayList<>();
triangles.add(new Point3f(-length/2, length/2, zpos));
triangles.add(new Point3f(length/2, length/2, zpos));
triangles.add(new Point3f(-length/2, -length/2, zpos));
triangles.add(new Point3f(length/2, length/2, zpos));
triangles.add(new Point3f(-length/2, -length/2, zpos));
triangles.add(new Point3f(length/2, -length/2, zpos));

CustomTriangleMesh mesh = new CustomTriangleMesh( triangles );
universe.addCustomMesh( mesh, "test-plane" );

universe.show();

results in:

Exception in thread "main" java.lang.NegativeArraySizeException
	at ij3d.shapes.BoundingBox.makeLine(BoundingBox.java:209)
	at ij3d.shapes.BoundingBox.<init>(BoundingBox.java:122)
	at ij3d.shapes.BoundingBox.<init>(BoundingBox.java:54)
	at ij3d.shapes.BoundingBox.<init>(BoundingBox.java:50)
	at ij3d.ContentInstant.display(ContentInstant.java:236)
	at ij3d.ContentCreator.createContent(ContentCreator.java:132)
	at ij3d.ContentCreator.createContent(ContentCreator.java:119)
	at ij3d.Image3DUniverse.createContent(Image3DUniverse.java:1175)
	at ij3d.Image3DUniverse.addCustomMesh(Image3DUniverse.java:1143)
	at develop.MinimalPlaneError.main(MinimalPlaneError.java:27)

This is an issue with drawing the BoundingBox, where it tries to draw lines that have a length of zero. This can result in n inside makeLine becoming negative.

I'd be happy to submit a PR with small changes to BoundingBox to account for this edge case.