package org.jzy3d.plot3d.primitives;

import org.jzy3d.colors.Color;
import org.jzy3d.colors.ColorMapper;
import org.jzy3d.colors.IMultiColorable;
import org.jzy3d.colors.ISingleColorable;
import org.jzy3d.maths.BoundingBox3d;
import org.jzy3d.maths.Coord3d;
import org.jzy3d.plot3d.rendering.view.Camera;
import org.jzy3d.plot3d.transform.Transform;

import com.jogamp.opengl.GL;
import com.jogamp.opengl.glu.GLU;




/** A Parallelepiped is a parallelepiped rectangle that is Drawable 
 * and Wireframeable.
 * A future version of Rectangle3d should consider it as a Composite3d.
 * 
 * This class has been implemented for debugging purpose and inconsistency
 * of its input w.r.t other primitives should not be considered
 * (no setData function).
 * 
 * @author Martin Pernollet
 */
public class Parallelepiped extends AbstractWireframeable implements ISingleColorable, IMultiColorable{
	
	/** Initialize a parallelepiped.*/
	public Parallelepiped(){
		super();
		bbox = new BoundingBox3d();		
	}
	
	/** Initialize a parallelepiped.*/
	public Parallelepiped(BoundingBox3d b){
		super();
		bbox = new BoundingBox3d();
		setData(b);	
	}
	
	/* */

	@Override
    public void draw(GL gl, GLU glu, Camera cam){
		for(Polygon quad: quads)
			quad.draw(gl, glu, cam);	
	}
	
	@Override
    public void setTransform(Transform transform){
		this.transform = transform;
		for(Polygon quad: quads)
			quad.setTransform(transform);
	}
		
	/* */

	@Override
    public void setWireframeColor(Color color){
	    if(quads!=null)
    		for(Polygon quad: quads)
    			quad.setWireframeColor(color);
	}
	
	@Override
    public void setWireframeDisplayed(boolean status){
	    if(quads!=null)
    		for(Polygon quad: quads)
    			quad.setWireframeDisplayed(status);
	}
	
	@Override
    public void setWireframeWidth(float width){
	    if(quads!=null)
    		for(Polygon quad: quads)
    			quad.setWireframeWidth(width);
	}
	
	@Override
    public void setFaceDisplayed(boolean status){
	    if(quads!=null)
    		for(Polygon quad: quads)
    			quad.setFaceDisplayed(status);
	}
	
	@Override
    public Color getWireframeColor(){
		return quads[0].getWireframeColor();
	}
	
	@Override
    public boolean getWireframeDisplayed(){
		return quads[0].getWireframeDisplayed();
	}
	
	@Override
    public float getWireframeWidth(){
		return quads[0].getWireframeWidth();
	}

	@Override
    public boolean getFaceDisplayed(){
		return quads[0].getFaceDisplayed();
	}
	
	/**********************************************************************/

	/** Set the parallelepiped data.*/
	public void setData(BoundingBox3d box){
		bbox.reset();
		bbox.add(box);
		
		quads = new Polygon[6];
		
		quads[0] = new Polygon();
		quads[0].add(new Point(new Coord3d(bbox.getXmax(), bbox.getYmin(), bbox.getZmax())), false); 
		quads[0].add(new Point(new Coord3d(bbox.getXmax(), bbox.getYmin(), bbox.getZmin())), false); 
		quads[0].add(new Point(new Coord3d(bbox.getXmax(), bbox.getYmax(), bbox.getZmin())), false); 
		quads[0].add(new Point(new Coord3d(bbox.getXmax(), bbox.getYmax(), bbox.getZmax())), false); 
		quads[0].updateBounds();
		
		quads[1] = new Polygon();
		quads[1].add(new Point(new Coord3d(bbox.getXmin(), bbox.getYmax(), bbox.getZmax())), false); 
		quads[1].add(new Point(new Coord3d(bbox.getXmin(), bbox.getYmax(), bbox.getZmin())), false); 
		quads[1].add(new Point(new Coord3d(bbox.getXmin(), bbox.getYmin(), bbox.getZmin())), false); 
		quads[1].add(new Point(new Coord3d(bbox.getXmin(), bbox.getYmin(), bbox.getZmax())), false); 
		quads[1].updateBounds();
		
		quads[2] = new Polygon();
		quads[2].add(new Point(new Coord3d(bbox.getXmax(), bbox.getYmax(), bbox.getZmax())), false); 
		quads[2].add(new Point(new Coord3d(bbox.getXmax(), bbox.getYmax(), bbox.getZmin())), false); 
		quads[2].add(new Point(new Coord3d(bbox.getXmin(), bbox.getYmax(), bbox.getZmin())), false); 
		quads[2].add(new Point(new Coord3d(bbox.getXmin(), bbox.getYmax(), bbox.getZmax())), false); 
		quads[2].updateBounds();
		
		
		quads[3] = new Polygon();
		quads[3].add(new Point(new Coord3d(bbox.getXmin(), bbox.getYmin(), bbox.getZmax())), false); 
		quads[3].add(new Point(new Coord3d(bbox.getXmin(), bbox.getYmin(), bbox.getZmin())), false); 
		quads[3].add(new Point(new Coord3d(bbox.getXmax(), bbox.getYmin(), bbox.getZmin())), false); 
		quads[3].add(new Point(new Coord3d(bbox.getXmax(), bbox.getYmin(), bbox.getZmax())), false); 
		quads[3].updateBounds();
		
		quads[4] = new Polygon();
		quads[4].add(new Point(new Coord3d(bbox.getXmin(), bbox.getYmin(), bbox.getZmax())), false); 
		quads[4].add(new Point(new Coord3d(bbox.getXmax(), bbox.getYmin(), bbox.getZmax())), false); 
		quads[4].add(new Point(new Coord3d(bbox.getXmax(), bbox.getYmax(), bbox.getZmax())), false); 
		quads[4].add(new Point(new Coord3d(bbox.getXmin(), bbox.getYmax(), bbox.getZmax())), false); 
		quads[4].updateBounds();
		
		quads[5] = new Polygon();
		quads[5].add(new Point(new Coord3d(bbox.getXmax(), bbox.getYmin(), bbox.getZmin())), false); 
		quads[5].add(new Point(new Coord3d(bbox.getXmin(), bbox.getYmin(), bbox.getZmin())), false); 
		quads[5].add(new Point(new Coord3d(bbox.getXmin(), bbox.getYmax(), bbox.getZmin())), false); 
		quads[5].add(new Point(new Coord3d(bbox.getXmax(), bbox.getYmax(), bbox.getZmin())), false); 
		quads[5].updateBounds();
	}
	
	/* */

	@Override
    public void setColorMapper(ColorMapper mapper){
		this.mapper = mapper;
		
		for(Polygon quad:quads){
			quad.setColorMapper(mapper);
		}
	}
	
	@Override
    public ColorMapper getColorMapper(){
		return mapper;
	}
	
	/*public void setColors(ColorMapper mapper){
		for(Polygon quad:quads){
			quad.setColors(mapper);
		}
	}*/

	@Override
    public void setColor(Color color){
		this.color = color;
		
		for(Polygon quad: quads)
			quad.setColor(color);
	}
	
	@Override
    public Color getColor(){
		return color;
	}
		
	
	@Override
    public void applyGeometryTransform(Transform transform){
	    for(Polygon quad: quads){
	        quad.applyGeometryTransform(transform);
	    }
    }
	
	/* */

	private ColorMapper mapper;
	private Polygon quads[];
	private Color color;
    @Override
    public void updateBounds() {
        throw new RuntimeException("not implemented");
    }
}

 

Ads help maintain this website.