31 TEveTextGL::TEveTextGL() :
42 Bool_t TEveTextGL::SetModel(TObject* obj,
const Option_t* )
44 fM = SetModelDynCast<TEveText>(obj);
51 void TEveTextGL::SetBBox()
53 fBoundingBox.SetEmpty();
60 void TEveTextGL::DirectDraw(TGLRnrCtx & rnrCtx)
const
62 static const TEveException eH(
"TEveTextGL::DirectDraw ");
64 Int_t fm = fM->GetFontMode();
65 if (fm == TGLFont::kBitmap || fm == TGLFont::kPixmap || fm == TGLFont::kTexture)
66 rnrCtx.RegisterFont(fM->GetFontSize(), fM->GetFontFile(), fM->GetFontMode(), fFont);
68 rnrCtx.RegisterFontNoScale(fM->GetFontSize(), fM->GetFontFile(), fM->GetFontMode(), fFont);
70 fFont.SetDepth(fM->GetExtrude());
73 if (fBoundingBox.IsEmpty() && fFont.GetMode() > TGLFont::kPixmap)
76 fFont.BBox(fM->GetText(), bbox[0], bbox[1], bbox[2],
77 bbox[3], bbox[4], bbox[5]);
79 if (fFont.GetMode() == TGLFont::kExtrude) {
81 Float_t tmp = bbox[2];
82 bbox[2] = bbox[5] * fM->GetExtrude();
83 bbox[5] = tmp * fM->GetExtrude();
85 bbox[2] = -0.005*(bbox[4] - bbox[1]);
86 bbox[5] = -0.005*(bbox[4] - bbox[1]);
89 TGLVertex3 low (bbox[0], bbox[1], bbox[2]);
90 TGLVertex3 high(bbox[3], bbox[4], bbox[5]);
92 TEveTextGL* ncthis =
const_cast<TEveTextGL*
>(
this);
93 ncthis->fBoundingBox.SetAligned(low, high);
94 ncthis->UpdateBoundingBoxesOfPhysicals();
99 fFont.PreRender(fM->GetAutoLighting(), fM->GetLighting());
100 switch (fFont.GetMode())
102 case TGLFont::kBitmap:
103 case TGLFont::kPixmap:
104 if (rnrCtx.Selection()) {
106 const GLdouble *pm = rnrCtx.RefCamera().RefLastNoPickProjM().CArr();
109 glGetDoublev(GL_MODELVIEW_MATRIX, mm);
110 glGetIntegerv(GL_VIEWPORT, vp);
112 fX[0][0] = fX[0][1] = fX[0][2] = 0;
114 gluProject(fX[0][0], fX[0][1], fX[0][2], mm, pm, vp, &x, &y, &z);
116 fFont.BBox(fM->GetText(), bbox[0], bbox[1], bbox[2],
117 bbox[3], bbox[4], bbox[5]);
118 gluUnProject(x + bbox[0], y + bbox[1], z, mm, pm, vp, &fX[0][0], &fX[0][1], &fX[0][2]);
119 gluUnProject(x + bbox[3], y + bbox[1], z, mm, pm, vp, &fX[1][0], &fX[1][1], &fX[1][2]);
120 gluUnProject(x + bbox[3], y + bbox[4], z, mm, pm, vp, &fX[2][0], &fX[2][1], &fX[2][2]);
121 gluUnProject(x + bbox[0], y + bbox[4], z, mm, pm, vp, &fX[3][0], &fX[3][1], &fX[3][2]);
130 glRasterPos3i(0, 0, 0);
131 fFont.Render(fM->GetText());
134 case TGLFont::kOutline:
135 case TGLFont::kExtrude:
136 case TGLFont::kPolygon:
137 glPolygonOffset(fM->GetPolygonOffset(0), fM->GetPolygonOffset(1));
138 if (fM->GetExtrude() != 1.0) {
140 glScalef(1.0f, 1.0f, fM->GetExtrude());
141 fFont.Render(fM->GetText());
144 fFont.Render(fM->GetText());
147 case TGLFont::kTexture:
148 glPolygonOffset(fM->GetPolygonOffset(0), fM->GetPolygonOffset(1));
149 fFont.Render(fM->GetText());
152 throw(eH +
"unsupported FTGL-type.");