00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 package org.scilab.modules.renderer.utils.textRendering;
00015
00016 import java.awt.Font;
00017 import java.awt.geom.Rectangle2D;
00018
00019 import javax.media.opengl.GL;
00020
00021 import com.sun.opengl.util.j2d.TextRenderer;
00022
00027 public class SciTextRenderer {
00028
00029 private static final float EPSILON = 1.0e-4f;
00030
00032 private float fontSize;
00033
00035 private TextRenderer renderer;
00036
00038 private float scaleFactor;
00039
00040 private boolean useFractionalMetrics;
00041
00047 public SciTextRenderer(TextRenderer renderer, float fontSize) {
00048 this.fontSize = fontSize;
00049 this.renderer = renderer;
00050 setUseFractionalMetrics(true);
00051 updateScaleFactor();
00052 }
00053
00057 private void updateScaleFactor() {
00058
00059 this.scaleFactor = fontSize / renderer.getFont().getSize2D();
00060
00061
00062
00063
00064 }
00065
00066
00067
00078 public void draw3D(GL gl, String str, double x, double y, double z, double angle) {
00079
00080
00081
00082
00083
00084
00085
00086 if (useFractionalMetrics) {
00087 renderer.draw3D(str, (float) x, (float) y, (float) z, scaleFactor);
00088 } else {
00089
00090
00091 renderer.draw3D(str, (float) x, (float) y, (float) z, 1.0f + EPSILON);
00092 }
00093
00094
00095
00096
00097 }
00098
00104 public void setUseFractionalMetrics(boolean useFractionalMetrics) {
00105 this.useFractionalMetrics = useFractionalMetrics;
00106 if (useFractionalMetrics) {
00107 renderer.setSmoothing(true);
00108 } else {
00109 renderer.setSmoothing(false);
00110 }
00111 updateScaleFactor();
00112 }
00113
00117 public void begin3DRendering() {
00118 renderer.begin3DRendering();
00119 }
00120
00124 public void end3DRendering() {
00125 renderer.end3DRendering();
00126 }
00127
00131 public Font getFont() {
00132
00133 return renderer.getFont().deriveFont(fontSize);
00134 }
00135
00141 public void setFontSize(float newFontSize) {
00142 this.fontSize = newFontSize;
00143 updateScaleFactor();
00144 }
00145
00152 public void setColor(double red, double green, double blue) {
00153 renderer.setColor((float) red, (float) green, (float) blue, 1.0f);
00154 }
00155
00160 public void setColor(double[] color) {
00161 renderer.setColor((float) color[0], (float) color[1], (float) color[2], 1.0f);
00162 }
00163
00169 public Rectangle2D getBounds(String str) {
00170 Rectangle2D res = renderer.getBounds(str);
00171
00172
00173 res.setRect(res.getX(), res.getY(),
00174 res.getWidth() * scaleFactor,
00175 res.getHeight() * scaleFactor);
00176 return res;
00177 }
00178
00179
00180 }