package org.jzy3d.plot3d.text;

import org.jzy3d.colors.Color;
import org.jzy3d.maths.BoundingBox3d;
import org.jzy3d.maths.Coord3d;
import org.jzy3d.plot3d.primitives.AbstractDrawable;
import org.jzy3d.plot3d.rendering.view.Camera;
import org.jzy3d.plot3d.text.align.Halign;
import org.jzy3d.plot3d.text.align.Valign;
import org.jzy3d.plot3d.transform.Transform;

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

/**
 * A {@link DrawableTextWrapper} wraps any text rendered by an {@link ITextRenderer}
 * into an {@link AbstractDrawable}, meaning it can be injected in the scene graph, and be transformed.
 * 
 * @author Martin Pernollet
 */
public class DrawableTextWrapper extends AbstractDrawable{
	public DrawableTextWrapper(ITextRenderer renderer){
		this("", new Coord3d(), Color.BLACK, renderer);
	}
	
	public DrawableTextWrapper(String txt, Coord3d position, Color color, ITextRenderer renderer){	
		super();
		this.renderer = renderer;
		configure(txt, position, color, Halign.CENTER, Valign.CENTER);
	}
	
	/*******************************************************************************************/
	
	@Override
    public void draw(GL gl, GLU glu, Camera cam){
	    doTransform(gl, glu, cam);
	    BoundingBox3d box = renderer.drawText(gl, glu, cam, txt, position, halign, valign, color,0);
	    if(box!=null)
	        bbox = box.scale(new Coord3d(1/10,1/10,1/10));
	    else
	        bbox = null;
	}
	
	@Override
    public BoundingBox3d getBounds(){
		return bbox;
	}
	
	public void configure(String txt, Coord3d position, Color color, Halign ha, Valign va){
		setText(txt);
		setPosition(position);
		setColor(color);
		setHalign(ha);
		setValign(va);	
	}
	
	public String getText(){
		return txt;
	}
	
	public void setText(String txt){
		this.txt = txt;
	}
	
	public void setPosition(Coord3d position){
		this.position = position;
	}
	
	public Coord3d getPosition(){
		return this.position;
	}
	
	public void setColor(Color color){
		this.color = color;
	}
	
	public Halign getHalign() {
		return halign;
	}

	public void setHalign(Halign halign) {
		this.halign = halign;
	}

	public Valign getValign() {
		return valign;
	}

	public void setValign(Valign valign) {
		this.valign = valign;
	}
	
	/*******************************************************************************************/
	
	@Override
    public String toString(){
		return "(TextBitmapDrawable) \""+ txt +"\" at " + position.toString() + " halign=" + halign + " valign=" + valign;
	}
	
	/********************************************************************/
	
	protected String  txt;
	protected Coord3d position;
	protected Halign  halign;
	protected Valign  valign;	
	protected Color   color;

	protected ITextRenderer renderer;

    @Override
    public void applyGeometryTransform(Transform transform) {
        position.set(transform.compute(position));
        updateBounds();
    }

    @Override
    public void updateBounds() {
        // given after drawing
    }
}

 

Ads help maintain this website.