Skip to content

Commit 5b9fc87

Browse files
authored
AreaUtils: Migrated package to com.jme3.util (#1826)
* AreaUtils: Migrated package to `com.jme3.util` * com.jme3.uitl.AreaUtils: removed code duplicates - added `final` class specifier * com.jme3.util.AreaUtils: fixed duplication build error * utils/AreaUtils.java: full migration to the utility package * scene/control/AreaUtils.java: removed utility methods - delegated functionality to `jme3.utils.AreaUtils` * scene/AreaUtils: fixed `jme3.util` package linking typo
1 parent 7f927f0 commit 5b9fc87

File tree

2 files changed

+104
-38
lines changed

2 files changed

+104
-38
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2009-2021 jMonkeyEngine
2+
* Copyright (c) 2009-2022 jMonkeyEngine
33
* All rights reserved.
44
*
55
* Redistribution and use in source and binary forms, with or without
@@ -41,48 +41,26 @@
4141
* functions are very loose approximations.
4242
* @author Joshua Slack
4343
* @version $Id: AreaUtils.java 4131 2009-03-19 20:15:28Z blaine.dev $
44+
* @deprecated use {@link com.jme3.util.AreaUtils} instead, due to wrong package
4445
*/
45-
46+
@Deprecated
4647
public class AreaUtils {
4748
/**
4849
* A private constructor to inhibit instantiation of this class.
4950
*/
5051
private AreaUtils() {
5152
}
5253

53-
/**
54-
* Estimate the screen area of a bounding volume. If the volume isn't a
55-
* BoundingSphere, BoundingBox, or OrientedBoundingBox, 0 is returned.
56-
*
57-
* @param bound The bounds to calculate the volume from.
58-
* @param distance The distance from camera to object.
59-
* @param screenWidth The width of the screen.
60-
* @return The area in pixels on the screen of the bounding volume.
61-
*/
62-
public static float calcScreenArea(BoundingVolume bound, float distance, float screenWidth) {
63-
if (bound.getType() == BoundingVolume.Type.Sphere){
64-
return calcScreenArea((BoundingSphere) bound, distance, screenWidth);
65-
}else if (bound.getType() == BoundingVolume.Type.AABB){
66-
return calcScreenArea((BoundingBox) bound, distance, screenWidth);
67-
}
68-
return 0.0f;
69-
}
70-
71-
private static float calcScreenArea(BoundingSphere bound, float distance, float screenWidth) {
72-
// Where is the center point and a radius point that lies in a plan parallel to the view plane?
73-
// // Calc radius based on these two points and plug into circle area formula.
74-
// Vector2f centerSP = null;
75-
// Vector2f outerSP = null;
76-
// float radiusSq = centerSP.subtract(outerSP).lengthSquared();
77-
float radius = (bound.getRadius() * screenWidth) / (distance * 2);
78-
return radius * radius * FastMath.PI;
79-
}
80-
81-
private static float calcScreenArea(BoundingBox bound, float distance, float screenWidth) {
82-
// Calc as if we are a BoundingSphere for now...
83-
float radiusSquare = bound.getXExtent() * bound.getXExtent()
84-
+ bound.getYExtent() * bound.getYExtent()
85-
+ bound.getZExtent() * bound.getZExtent();
86-
return ((radiusSquare * screenWidth * screenWidth) / (distance * distance * 4)) * FastMath.PI;
87-
}
88-
}
54+
/**
55+
* Estimate the screen area of a bounding volume. If the volume isn't a
56+
* BoundingSphere, BoundingBox, or OrientedBoundingBox, 0 is returned.
57+
*
58+
* @param bound The bounds to calculate the volume from.
59+
* @param distance The distance from camera to object.
60+
* @param screenWidth The width of the screen.
61+
* @return The area in pixels on the screen of the bounding volume.
62+
*/
63+
public static float calcScreenArea(BoundingVolume bound, float distance, float screenWidth) {
64+
return com.jme3.util.AreaUtils.calcScreenArea(bound, distance, screenWidth);
65+
}
66+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
/*
2+
* Copyright (c) 2009-2022 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.util;
33+
34+
import com.jme3.bounding.BoundingBox;
35+
import com.jme3.bounding.BoundingSphere;
36+
import com.jme3.bounding.BoundingVolume;
37+
import com.jme3.math.FastMath;
38+
39+
/**
40+
* <code>AreaUtils</code> is used to calculate the area of various objects, such as bounding volumes. These
41+
* functions are very loose approximations.
42+
*
43+
* @author Joshua Slack
44+
* @version $Id: AreaUtils.java 4131 2009-03-19 20:15:28Z blaine.dev $
45+
*/
46+
public final class AreaUtils {
47+
/**
48+
* A private constructor to inhibit instantiation of this class.
49+
*/
50+
private AreaUtils() {
51+
}
52+
53+
/**
54+
* Estimate the screen area of a bounding volume. If the volume isn't a
55+
* BoundingSphere, BoundingBox, or OrientedBoundingBox, 0 is returned.
56+
*
57+
* @param bound The bounds to calculate the volume from.
58+
* @param distance The distance from camera to object.
59+
* @param screenWidth The width of the screen.
60+
* @return The area in pixels on the screen of the bounding volume.
61+
*/
62+
public static float calcScreenArea(BoundingVolume bound, float distance, float screenWidth) {
63+
if (bound.getType() == BoundingVolume.Type.Sphere) {
64+
return calcScreenArea((BoundingSphere) bound, distance, screenWidth);
65+
} else if (bound.getType() == BoundingVolume.Type.AABB) {
66+
return calcScreenArea((BoundingBox) bound, distance, screenWidth);
67+
}
68+
return 0.0f;
69+
}
70+
71+
private static float calcScreenArea(BoundingSphere bound, float distance, float screenWidth) {
72+
// Where is the center point and a radius point that lies in a plan parallel to the view plane?
73+
// // Calc radius based on these two points and plug into circle area formula.
74+
// Vector2f centerSP = null;
75+
// Vector2f outerSP = null;
76+
// float radiusSq = centerSP.subtract(outerSP).lengthSquared();
77+
float radius = (bound.getRadius() * screenWidth) / (distance * 2);
78+
return radius * radius * FastMath.PI;
79+
}
80+
81+
private static float calcScreenArea(BoundingBox bound, float distance, float screenWidth) {
82+
// Calc as if we are a BoundingSphere for now...
83+
float radiusSquare = bound.getXExtent() * bound.getXExtent()
84+
+ bound.getYExtent() * bound.getYExtent()
85+
+ bound.getZExtent() * bound.getZExtent();
86+
return ((radiusSquare * screenWidth * screenWidth) / (distance * distance * 4)) * FastMath.PI;
87+
}
88+
}

0 commit comments

Comments
 (0)