package org.jzy3d.plot3d.text.renderers.jogl;

import java.awt.Font;
import java.awt.geom.Rectangle2D;

import org.jzy3d.colors.Color;
import org.jzy3d.maths.BoundingBox3d;
import org.jzy3d.maths.Coord2d;
import org.jzy3d.maths.Coord3d;
import org.jzy3d.plot3d.rendering.view.Camera;
import org.jzy3d.plot3d.text.AbstractTextRenderer;
import org.jzy3d.plot3d.text.ITextRenderer;
import org.jzy3d.plot3d.text.align.Halign;
import org.jzy3d.plot3d.text.align.Valign;

import com.jogamp.opengl.GL;
import com.jogamp.opengl.glu.GLU;
import com.jogamp.opengl.util.awt.TextRenderer;

public class JOGLTextRenderer extends AbstractTextRenderer implements ITextRenderer {
	public JOGLTextRenderer() {
		this(new DefaultTextStyle(java.awt.Color.BLUE));
	}
	
	public JOGLTextRenderer(ITextStyle style) {
		this.font = new Font("Serif", Font.PLAIN, 72);
		this.renderer = new TextRenderer(font, true, true, style);
		this.style = style;
	}
	
	@Override
	public void drawSimpleText(GL gl, GLU glu, Camera cam, String s, Coord3d position, Color color,int fonttype) {
		renderer.begin3DRendering();
		renderer.draw3D(s, position.x, position.y, position.z, 0.01f);
		renderer.flush();
		renderer.end3DRendering();
	}
	
	@Override
	public BoundingBox3d drawText(GL gl, GLU glu, Camera cam, String s, Coord3d position, Halign halign, Valign valign, Color color, Coord2d screenOffset, Coord3d sceneOffset, int fontype) {
        //gl.getGL2().glPushMatrix();

        renderer.begin3DRendering();
		if(LAYOUT){ // work in progress
			Rectangle2D d = style.getBounds(s, font, renderer.getFontRenderContext());
			Coord3d left2d = cam.modelToScreen(gl, glu, position);
			Coord2d right2d = new Coord2d(left2d.x+(float)d.getWidth(), left2d.y+(float)d.getHeight());
			Coord3d right3d = cam.screenToModel(gl, glu, new Coord3d(right2d,0));
			Coord3d offset3d = right3d.sub(position).div(2);//.mul(0.1f);
			Coord3d real = position.add(sceneOffset).sub(offset3d);
			renderer.draw3D(s, real.x, real.y, real.z, 1);//0.005f);
		}
		else{
			Coord3d real = position.add(sceneOffset);
			renderer.draw3D(s, real.x, real.y, real.z, 1);//0.005f);
		}
		renderer.flush();
		renderer.end3DRendering();
		
		//gl.getGL2().glPopMatrix();
		
		return null;
	}
	
	protected boolean LAYOUT  = false;	
	
	protected Font font;
	protected TextRenderer.RenderDelegate style;
	protected TextRenderer renderer;
}

 

Ads help maintain this website.