/*
* JBox2D - A Java Port of Erin Catto's Box2D
*
* JBox2D homepage: http://jbox2d.sourceforge.net/
* Box2D homepage: http://www.box2d.org
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
package org.jbox2d.collision;
//Updated to rev 56 of b2Shape.cpp/.h
// -> rev 97 of b2PolygonShape.cpp/.h
//import java.util.ArrayList;
//import java.util.List;
import java.util.Vector;
import org.jbox2d.common.*;
/**
* Convex polygon. The vertices must be in CCW order for a right-handed
* coordinate system with the z-axis coming out of the screen.
* Add vertices using PolygonDef.add(Vec2),
* and create the polygon shape using Body::createShape(ShapeDef).
*/
public class PolygonDef extends ShapeDef {
/**
* The polygon vertices in local coordinates.
*
* Accessing this field is discouraged - it remains
* public for the moment, but that is likely to change.
* Please use addVertex(Vec2) and getVertexList/Array
* instead to add to or inspect the current vertices.
*/
public Vector vertices;
public PolygonDef() {
type = ShapeType.POLYGON_SHAPE;
vertices = new Vector(10,40);
}
/** Add a vertex to the polygon. */
public void addVertex(Vec2 v) {
vertices.addElement(v);
}
/** Removes all vertices. */
public void clearVertices() {
vertices.removeAllElements();
}
/** Return the vertex list as an array. */
// when is this used? Not by the engine itself
//public Vec2[] getVertexArray() {
// return vertices.toArray(new Vec2[0]);
//}
/** Return the vertex list as a List. */
// not implemented in midp -> replace by getVertexVector?
//public List getVertexList() {
// return vertices;
//}
/**
* Build vertices to represent an axis-aligned box.
* @param hx the half-width.
* @param hy the half-height.
*/
public void setAsBox(float hx, float hy) {
vertices.removeAllElements();
vertices.addElement(new Vec2(-hx, -hy));
vertices.addElement(new Vec2(hx, -hy));
vertices.addElement(new Vec2(hx, hy));
vertices.addElement(new Vec2(-hx, hy));
}
/**
* Build vertices to represent an oriented box.
* @param hx the half-width.
* @param hy the half-height.
* @param center the center of the box in local coordinates.
* @param angle the rotation of the box in local coordinates.
*/
public void setAsBox(float hx, float hy, Vec2 center, float angle) {
setAsBox(hx, hy);
XForm xf = new XForm();
xf.position.set(center);
xf.R.set(angle);
for (int i = 0; i < vertices.size(); ++i) {
((Vec2)vertices.elementAt(i)).set(XForm.mul(xf,
(Vec2)vertices.elementAt(i) ));
}
}
/** Return the number of vertices. */
public int getVertexCount() {
return vertices.size();
}
}