diff --git a/jme3-core/src/main/java/com/jme3/math/AbstractTriangle.java b/jme3-core/src/main/java/com/jme3/math/AbstractTriangle.java index 87dc01d51f..df1ef1aa01 100644 --- a/jme3-core/src/main/java/com/jme3/math/AbstractTriangle.java +++ b/jme3-core/src/main/java/com/jme3/math/AbstractTriangle.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009-2020 jMonkeyEngine + * Copyright (c) 2009-2024 jMonkeyEngine * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -79,4 +79,20 @@ public abstract class AbstractTriangle implements Collidable { public int collideWith(Collidable other, CollisionResults results) { return other.collideWith(this, results); } + + /** + * Returns a string representation of the triangle, which is unaffected. For + * example, a {@link com.jme3.math.Triangle} joining (1,0,0) and (0,1,0) + * with (0,0,1) is represented by: + *
+     * Triangle [V1: (1.0, 0.0, 0.0)  V2: (0.0, 1.0, 0.0)  V3: (0.0, 0.0, 1.0)]
+     * 
+ * + * @return the string representation (not null, not empty) + */ + @Override + public String toString() { + return getClass().getSimpleName() + " [V1: " + get1() + " V2: " + + get2() + " V3: " + get3() + "]"; + } } diff --git a/jme3-core/src/main/java/com/jme3/math/Line.java b/jme3-core/src/main/java/com/jme3/math/Line.java index f215dba4d6..122b05225e 100644 --- a/jme3-core/src/main/java/com/jme3/math/Line.java +++ b/jme3-core/src/main/java/com/jme3/math/Line.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009-2020 jMonkeyEngine + * Copyright (c) 2009-2024 jMonkeyEngine * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -274,4 +274,20 @@ public Line clone() { throw new AssertionError(); } } + + /** + * Returns a string representation of the Line, which is unaffected. For + * example, a line with origin (1,0,0) and direction (0,1,0) is represented + * by: + *
+     * Line [Origin: (1.0, 0.0, 0.0)  Direction: (0.0, 1.0, 0.0)]
+     * 
+ * + * @return the string representation (not null, not empty) + */ + @Override + public String toString() { + return getClass().getSimpleName() + " [Origin: " + origin + + " Direction: " + direction + "]"; + } } diff --git a/jme3-core/src/main/java/com/jme3/math/LineSegment.java b/jme3-core/src/main/java/com/jme3/math/LineSegment.java index a1436cd518..a840f1cd09 100644 --- a/jme3-core/src/main/java/com/jme3/math/LineSegment.java +++ b/jme3-core/src/main/java/com/jme3/math/LineSegment.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009-2020 jMonkeyEngine + * Copyright (c) 2009-2024 jMonkeyEngine * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -720,6 +720,23 @@ public LineSegment clone() { } } + /** + * Returns a string representation of the LineSegment, which is unaffected. + * For example, a segment extending from (1,0,0) to (1,1,0) is represented + * by: + *
+     * LineSegment [Origin: (1.0, 0.0, 0.0)  Direction: (0.0, 1.0, 0.0)  Extent: 1.0]
+     * 
+ * + * @return the string representation (not null, not empty) + */ + @Override + public String toString() { + return getClass().getSimpleName() + " [Origin: " + origin + + " Direction: " + direction + " Extent: " + extent + "]"; + } + + /** /** *

Evaluates whether a given point is contained within the axis aligned bounding box * that contains this LineSegment.

This function is float error aware.

diff --git a/jme3-core/src/main/java/com/jme3/math/Rectangle.java b/jme3-core/src/main/java/com/jme3/math/Rectangle.java index 570e16f896..67cfcb15d7 100644 --- a/jme3-core/src/main/java/com/jme3/math/Rectangle.java +++ b/jme3-core/src/main/java/com/jme3/math/Rectangle.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009-2021 jMonkeyEngine + * Copyright (c) 2009-2024 jMonkeyEngine * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -253,4 +253,19 @@ public Rectangle clone() { throw new AssertionError(); } } + + /** + * Returns a string representation of the Recatangle, which is unaffected. + * For example, a rectangle with vertices at (1,0,0), (2,0,0), (1,2,0), and + * (2,2,0) is represented by: + *
+     * Rectangle [A: (1.0, 0.0, 0.0)  B: (2.0, 0.0, 0.0)  C: (1.0, 2.0, 0.0)]
+     * 
+ * + * @return the string representation (not null, not empty) + */ + @Override + public String toString() { + return getClass().getSimpleName() + " [A: " + a + " B: " + b + " C: " + c + "]"; + } } diff --git a/jme3-core/src/test/java/com/jme3/math/TestToString.java b/jme3-core/src/test/java/com/jme3/math/TestToString.java new file mode 100644 index 0000000000..c30c1e45ed --- /dev/null +++ b/jme3-core/src/test/java/com/jme3/math/TestToString.java @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2009-2024 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.jme3.math; + +import org.junit.Assert; +import org.junit.Test; + +/** + * Test various toString() methods using JUnit. See also + * {@link com.jme3.math.TestTransform}. + * + * @author Stephen Gold + */ +public class TestToString { + /** + * Test various {@code toString()} methods against their javadoc. + */ + @Test + public void testToString() { + // Test data that's never modified: + Line line = new Line( + new Vector3f(1f, 0f, 0f), + new Vector3f(0f, 1f, 0f)); + + LineSegment segment = new LineSegment( + new Vector3f(1f, 0f, 0f), new Vector3f(0f, 1f, 0f), 1f); + + Rectangle rectangle = new Rectangle( + new Vector3f(1f, 0f, 0f), + new Vector3f(2f, 0f, 0f), + new Vector3f(1f, 2f, 0f)); + + Triangle triangle = new Triangle( + new Vector3f(1f, 0f, 0f), + new Vector3f(0f, 1f, 0f), + new Vector3f(0f, 0f, 1f)); + + // Verify that the methods don't throw an exception: + String lineString = line.toString(); + String segmentString = segment.toString(); + String rectangleString = rectangle.toString(); + String triangleString = triangle.toString(); + + // Verify that the results match the javadoc: + Assert.assertEquals( + "Line [Origin: (1.0, 0.0, 0.0) Direction: (0.0, 1.0, 0.0)]", + lineString); + Assert.assertEquals( + "LineSegment [Origin: (1.0, 0.0, 0.0) Direction: (0.0, 1.0, 0.0) Extent: 1.0]", + segmentString); + Assert.assertEquals( + "Rectangle [A: (1.0, 0.0, 0.0) B: (2.0, 0.0, 0.0) C: (1.0, 2.0, 0.0)]", + rectangleString); + Assert.assertEquals( + "Triangle [V1: (1.0, 0.0, 0.0) V2: (0.0, 1.0, 0.0) V3: (0.0, 0.0, 1.0)]", + triangleString); + } +}