Преглед на файлове

override toString() in certain math classes (#2253)

* AbstractTriangle:  override the toString() method

* Line:  override the toString() method

* AbstractTriangle:  insert 2 more spaces into the toString() result

* LineSegment:  override the toString() method

* Rectangle:  override the toString() method

* com.jme3.math tests:  add the TestToString class
Stephen Gold преди 1 година
родител
ревизия
4152c1b2f2

+ 17 - 1
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:
+     * <pre>
+     * Triangle [V1: (1.0, 0.0, 0.0)  V2: (0.0, 1.0, 0.0)  V3: (0.0, 0.0, 1.0)]
+     * </pre>
+     *
+     * @return the string representation (not null, not empty)
+     */
+    @Override
+    public String toString() {
+        return getClass().getSimpleName() + " [V1: " + get1() + "  V2: "
+                + get2() + "  V3: " + get3() + "]";
+    }
 }

+ 17 - 1
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 class Line implements Savable, Cloneable, java.io.Serializable {
             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:
+     * <pre>
+     * Line [Origin: (1.0, 0.0, 0.0)  Direction: (0.0, 1.0, 0.0)]
+     * </pre>
+     *
+     * @return the string representation (not null, not empty)
+     */
+    @Override
+    public String toString() {
+        return getClass().getSimpleName() + " [Origin: " + origin
+                + "  Direction: " + direction + "]";
+    }
 }

+ 18 - 1
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 class LineSegment implements Cloneable, Savable, java.io.Serializable {
         }
     }
 
+    /**
+     * 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:
+     * <pre>
+     * LineSegment [Origin: (1.0, 0.0, 0.0)  Direction: (0.0, 1.0, 0.0)  Extent: 1.0]
+     * </pre>
+     *
+     * @return the string representation (not null, not empty)
+     */
+    @Override
+    public String toString() {
+        return getClass().getSimpleName() + " [Origin: " + origin
+                + "  Direction: " + direction + "  Extent: " + extent + "]";
+    }
+
+    /**
     /**
      * <p>Evaluates whether a given point is contained within the axis aligned bounding box
      * that contains this LineSegment.</p><p>This function is float error aware.</p>

+ 16 - 1
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 final class Rectangle implements Savable, Cloneable, java.io.Serializable
             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:
+     * <pre>
+     * Rectangle [A: (1.0, 0.0, 0.0)  B: (2.0, 0.0, 0.0)  C: (1.0, 2.0, 0.0)]
+     * </pre>
+     *
+     * @return the string representation (not null, not empty)
+     */
+    @Override
+    public String toString() {
+        return getClass().getSimpleName() + " [A: " + a + "  B: " + b + "  C: " + c + "]";
+    }
 }

+ 87 - 0
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);
+    }
+}