Skip to content

Commit 4152c1b

Browse files
authored
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
1 parent b5abd2e commit 4152c1b

File tree

5 files changed

+155
-4
lines changed

5 files changed

+155
-4
lines changed

jme3-core/src/main/java/com/jme3/math/AbstractTriangle.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2009-2020 jMonkeyEngine
2+
* Copyright (c) 2009-2024 jMonkeyEngine
33
* All rights reserved.
44
*
55
* Redistribution and use in source and binary forms, with or without
@@ -79,4 +79,20 @@ public abstract class AbstractTriangle implements Collidable {
7979
public int collideWith(Collidable other, CollisionResults results) {
8080
return other.collideWith(this, results);
8181
}
82+
83+
/**
84+
* Returns a string representation of the triangle, which is unaffected. For
85+
* example, a {@link com.jme3.math.Triangle} joining (1,0,0) and (0,1,0)
86+
* with (0,0,1) is represented by:
87+
* <pre>
88+
* Triangle [V1: (1.0, 0.0, 0.0) V2: (0.0, 1.0, 0.0) V3: (0.0, 0.0, 1.0)]
89+
* </pre>
90+
*
91+
* @return the string representation (not null, not empty)
92+
*/
93+
@Override
94+
public String toString() {
95+
return getClass().getSimpleName() + " [V1: " + get1() + " V2: "
96+
+ get2() + " V3: " + get3() + "]";
97+
}
8298
}

jme3-core/src/main/java/com/jme3/math/Line.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2009-2020 jMonkeyEngine
2+
* Copyright (c) 2009-2024 jMonkeyEngine
33
* All rights reserved.
44
*
55
* Redistribution and use in source and binary forms, with or without
@@ -274,4 +274,20 @@ public Line clone() {
274274
throw new AssertionError();
275275
}
276276
}
277+
278+
/**
279+
* Returns a string representation of the Line, which is unaffected. For
280+
* example, a line with origin (1,0,0) and direction (0,1,0) is represented
281+
* by:
282+
* <pre>
283+
* Line [Origin: (1.0, 0.0, 0.0) Direction: (0.0, 1.0, 0.0)]
284+
* </pre>
285+
*
286+
* @return the string representation (not null, not empty)
287+
*/
288+
@Override
289+
public String toString() {
290+
return getClass().getSimpleName() + " [Origin: " + origin
291+
+ " Direction: " + direction + "]";
292+
}
277293
}

jme3-core/src/main/java/com/jme3/math/LineSegment.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2009-2020 jMonkeyEngine
2+
* Copyright (c) 2009-2024 jMonkeyEngine
33
* All rights reserved.
44
*
55
* Redistribution and use in source and binary forms, with or without
@@ -720,6 +720,23 @@ public LineSegment clone() {
720720
}
721721
}
722722

723+
/**
724+
* Returns a string representation of the LineSegment, which is unaffected.
725+
* For example, a segment extending from (1,0,0) to (1,1,0) is represented
726+
* by:
727+
* <pre>
728+
* LineSegment [Origin: (1.0, 0.0, 0.0) Direction: (0.0, 1.0, 0.0) Extent: 1.0]
729+
* </pre>
730+
*
731+
* @return the string representation (not null, not empty)
732+
*/
733+
@Override
734+
public String toString() {
735+
return getClass().getSimpleName() + " [Origin: " + origin
736+
+ " Direction: " + direction + " Extent: " + extent + "]";
737+
}
738+
739+
/**
723740
/**
724741
* <p>Evaluates whether a given point is contained within the axis aligned bounding box
725742
* that contains this LineSegment.</p><p>This function is float error aware.</p>

jme3-core/src/main/java/com/jme3/math/Rectangle.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2009-2021 jMonkeyEngine
2+
* Copyright (c) 2009-2024 jMonkeyEngine
33
* All rights reserved.
44
*
55
* Redistribution and use in source and binary forms, with or without
@@ -253,4 +253,19 @@ public Rectangle clone() {
253253
throw new AssertionError();
254254
}
255255
}
256+
257+
/**
258+
* Returns a string representation of the Recatangle, which is unaffected.
259+
* For example, a rectangle with vertices at (1,0,0), (2,0,0), (1,2,0), and
260+
* (2,2,0) is represented by:
261+
* <pre>
262+
* Rectangle [A: (1.0, 0.0, 0.0) B: (2.0, 0.0, 0.0) C: (1.0, 2.0, 0.0)]
263+
* </pre>
264+
*
265+
* @return the string representation (not null, not empty)
266+
*/
267+
@Override
268+
public String toString() {
269+
return getClass().getSimpleName() + " [A: " + a + " B: " + b + " C: " + c + "]";
270+
}
256271
}
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
/*
2+
* Copyright (c) 2009-2024 jMonkeyEngine
3+
* All rights reserved.
4+
*
5+
* Redistribution and use in source and binary forms, with or without
6+
* modification, are permitted provided that the following conditions are
7+
* met:
8+
*
9+
* * Redistributions of source code must retain the above copyright
10+
* notice, this list of conditions and the following disclaimer.
11+
*
12+
* * Redistributions in binary form must reproduce the above copyright
13+
* notice, this list of conditions and the following disclaimer in the
14+
* documentation and/or other materials provided with the distribution.
15+
*
16+
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
17+
* may be used to endorse or promote products derived from this software
18+
* without specific prior written permission.
19+
*
20+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22+
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23+
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24+
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25+
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26+
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27+
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28+
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29+
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30+
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31+
*/
32+
package com.jme3.math;
33+
34+
import org.junit.Assert;
35+
import org.junit.Test;
36+
37+
/**
38+
* Test various toString() methods using JUnit. See also
39+
* {@link com.jme3.math.TestTransform}.
40+
*
41+
* @author Stephen Gold
42+
*/
43+
public class TestToString {
44+
/**
45+
* Test various {@code toString()} methods against their javadoc.
46+
*/
47+
@Test
48+
public void testToString() {
49+
// Test data that's never modified:
50+
Line line = new Line(
51+
new Vector3f(1f, 0f, 0f),
52+
new Vector3f(0f, 1f, 0f));
53+
54+
LineSegment segment = new LineSegment(
55+
new Vector3f(1f, 0f, 0f), new Vector3f(0f, 1f, 0f), 1f);
56+
57+
Rectangle rectangle = new Rectangle(
58+
new Vector3f(1f, 0f, 0f),
59+
new Vector3f(2f, 0f, 0f),
60+
new Vector3f(1f, 2f, 0f));
61+
62+
Triangle triangle = new Triangle(
63+
new Vector3f(1f, 0f, 0f),
64+
new Vector3f(0f, 1f, 0f),
65+
new Vector3f(0f, 0f, 1f));
66+
67+
// Verify that the methods don't throw an exception:
68+
String lineString = line.toString();
69+
String segmentString = segment.toString();
70+
String rectangleString = rectangle.toString();
71+
String triangleString = triangle.toString();
72+
73+
// Verify that the results match the javadoc:
74+
Assert.assertEquals(
75+
"Line [Origin: (1.0, 0.0, 0.0) Direction: (0.0, 1.0, 0.0)]",
76+
lineString);
77+
Assert.assertEquals(
78+
"LineSegment [Origin: (1.0, 0.0, 0.0) Direction: (0.0, 1.0, 0.0) Extent: 1.0]",
79+
segmentString);
80+
Assert.assertEquals(
81+
"Rectangle [A: (1.0, 0.0, 0.0) B: (2.0, 0.0, 0.0) C: (1.0, 2.0, 0.0)]",
82+
rectangleString);
83+
Assert.assertEquals(
84+
"Triangle [V1: (1.0, 0.0, 0.0) V2: (0.0, 1.0, 0.0) V3: (0.0, 0.0, 1.0)]",
85+
triangleString);
86+
}
87+
}

0 commit comments

Comments
 (0)