package org.jzy3d.plot3d.primitives;
import org.jzy3d.colors.IMultiColorable;
import org.jzy3d.colors.ISingleColorable;
import org.jzy3d.maths.BoundingBox3d;
import org.jzy3d.maths.Coord3d;
import org.jzy3d.plot3d.primitives.AbstractGeometry.PolygonMode;
/**
* A composite implementation of a parallelepiped, meaning it can be decomposed
* into distinct primitive for polygon ordering.
*
* Supports two kind of sub polygon: culled or simple.
*/
public class ParallelepipedComposite extends AbstractComposite implements ISingleColorable, IMultiColorable {
public enum PolygonType {
SIMPLE, CULLED
}
/** Initialize a parallelepiped. */
public ParallelepipedComposite() {
this(PolygonType.CULLED);
}
public ParallelepipedComposite(PolygonType type) {
super();
this.type = type;
}
/** Initialize a parallelepiped. */
public ParallelepipedComposite(BoundingBox3d b) {
this(b, PolygonType.CULLED);
}
public ParallelepipedComposite(BoundingBox3d b, PolygonType type) {
super();
setData(b);
}
/** Set the parallelepiped data. */
public void setData(BoundingBox3d box) {
if (bbox == null)
bbox = box;
else {
bbox.reset();
bbox.add(box);
}
quads = new Polygon[6];
quads[0] = createPolygon();
quads[0].add(new Point(new Coord3d(bbox.getXmax(), bbox.getYmin(), bbox.getZmax())));
quads[0].add(new Point(new Coord3d(bbox.getXmax(), bbox.getYmin(), bbox.getZmin())));
quads[0].add(new Point(new Coord3d(bbox.getXmax(), bbox.getYmax(), bbox.getZmin())));
quads[0].add(new Point(new Coord3d(bbox.getXmax(), bbox.getYmax(), bbox.getZmax())));
quads[1] = createPolygon();
quads[1].add(new Point(new Coord3d(bbox.getXmin(), bbox.getYmax(), bbox.getZmax())));
quads[1].add(new Point(new Coord3d(bbox.getXmin(), bbox.getYmax(), bbox.getZmin())));
quads[1].add(new Point(new Coord3d(bbox.getXmin(), bbox.getYmin(), bbox.getZmin())));
quads[1].add(new Point(new Coord3d(bbox.getXmin(), bbox.getYmin(), bbox.getZmax())));
quads[2] = createPolygon();
quads[2].add(new Point(new Coord3d(bbox.getXmax(), bbox.getYmax(), bbox.getZmax())));
quads[2].add(new Point(new Coord3d(bbox.getXmax(), bbox.getYmax(), bbox.getZmin())));
quads[2].add(new Point(new Coord3d(bbox.getXmin(), bbox.getYmax(), bbox.getZmin())));
quads[2].add(new Point(new Coord3d(bbox.getXmin(), bbox.getYmax(), bbox.getZmax())));
quads[3] = createPolygon();
quads[3].add(new Point(new Coord3d(bbox.getXmin(), bbox.getYmin(), bbox.getZmax())));
quads[3].add(new Point(new Coord3d(bbox.getXmin(), bbox.getYmin(), bbox.getZmin())));
quads[3].add(new Point(new Coord3d(bbox.getXmax(), bbox.getYmin(), bbox.getZmin())));
quads[3].add(new Point(new Coord3d(bbox.getXmax(), bbox.getYmin(), bbox.getZmax())));
quads[4] = createPolygon();
quads[4].add(new Point(new Coord3d(bbox.getXmin(), bbox.getYmin(), bbox.getZmax())));
quads[4].add(new Point(new Coord3d(bbox.getXmax(), bbox.getYmin(), bbox.getZmax())));
quads[4].add(new Point(new Coord3d(bbox.getXmax(), bbox.getYmax(), bbox.getZmax())));
quads[4].add(new Point(new Coord3d(bbox.getXmin(), bbox.getYmax(), bbox.getZmax())));
quads[5] = createPolygon();
quads[5].add(new Point(new Coord3d(bbox.getXmax(), bbox.getYmin(), bbox.getZmin())));
quads[5].add(new Point(new Coord3d(bbox.getXmin(), bbox.getYmin(), bbox.getZmin())));
quads[5].add(new Point(new Coord3d(bbox.getXmin(), bbox.getYmax(), bbox.getZmin())));
quads[5].add(new Point(new Coord3d(bbox.getXmax(), bbox.getYmax(), bbox.getZmin())));
for (Polygon p : quads)
add(p);
}
protected Polygon createPolygon() {
if (type == PolygonType.CULLED)
return new Polygon();
else if (type == PolygonType.SIMPLE)
return new SimplePolygon();
else
throw new RuntimeException("unknown polygon type: " + type);
}
public void setPolygonOffsetFill(boolean value){
for(Polygon polygon: quads)
polygon.setPolygonOffsetFillEnable(value);
}
public void setPolygonMode(PolygonMode mode){
for(Polygon polygon: quads)
polygon.setPolygonMode(mode);
}
protected Polygon quads[];
protected PolygonType type = PolygonType.CULLED;
}
Ads help maintain this website.