#include "TEveStraightLineSetGL.h"
#include "TEveStraightLineSet.h"
#include "TGLIncludes.h"
#include "TGLRnrCtx.h"
#include "TGLSelectRecord.h"
ClassImp(TEveStraightLineSetGL);
TEveStraightLineSetGL::TEveStraightLineSetGL() : TGLObject(), fM(0)
{
fMultiColor = kTRUE;
}
Bool_t TEveStraightLineSetGL::SetModel(TObject* obj, const Option_t* )
{
fM = SetModelDynCast<TEveStraightLineSet>(obj);
return kTRUE;
}
void TEveStraightLineSetGL::SetBBox()
{
SetAxisAlignedBBox(((TEveStraightLineSet*)fExternalObj)->AssertBBox());
}
Bool_t TEveStraightLineSetGL::ShouldDLCache(const TGLRnrCtx& rnrCtx) const
{
if (rnrCtx.Selection()) return kFALSE;
return TGLObject::ShouldDLCache(rnrCtx);
}
void TEveStraightLineSetGL::Draw(TGLRnrCtx& rnrCtx) const
{
if (rnrCtx.IsDrawPassOutlineLine())
return;
TGLObject::Draw(rnrCtx);
}
void TEveStraightLineSetGL::DirectDraw(TGLRnrCtx& rnrCtx) const
{
TEveStraightLineSet& mL = * fM;
if (mL.GetDepthTest() == kFALSE && rnrCtx.Selection() == kFALSE)
{
glPushAttrib(GL_VIEWPORT_BIT);
glDepthRange(0, 0.1);
}
if (mL.GetRnrLines() && mL.GetLinePlex().Size() > 0)
{
glPushAttrib(GL_LINE_BIT | GL_ENABLE_BIT);
glDisable(GL_LIGHTING);
TGLUtil::LineWidth(mL.GetLineWidth());
if (mL.GetLineStyle() > 1) {
Int_t fac = 1;
UShort_t pat = 0xffff;
switch (mL.GetLineStyle()) {
case 2: pat = 0x3333; break;
case 3: pat = 0x5555; break;
case 4: pat = 0xf040; break;
case 5: pat = 0xf4f4; break;
case 6: pat = 0xf111; break;
case 7: pat = 0xf0f0; break;
case 8: pat = 0xff11; break;
case 9: pat = 0x3fff; break;
case 10: pat = 0x08ff; fac = 2; break;
}
glLineStipple(1, pat);
glEnable(GL_LINE_STIPPLE);
}
Bool_t changePM = rnrCtx.Selection() && mL.GetLineWidth() > rnrCtx.GetPickRadius();
if (changePM)
TGLUtil::BeginExtendPickRegion((Float_t) rnrCtx.GetPickRadius() / mL.GetLineWidth());
TEveChunkManager::iterator li(mL.GetLinePlex());
if (rnrCtx.SecSelection())
{
GLuint name = 0;
glPushName(1);
glPushName(0);
while (li.next())
{
TEveStraightLineSet::Line_t& l = * (TEveStraightLineSet::Line_t*) li();
glLoadName(l.fId);
{
glBegin(GL_LINES);
glVertex3f(l.fV1[0], l.fV1[1], l.fV1[2]);
glVertex3f(l.fV2[0], l.fV2[1], l.fV2[2]);
glEnd();
}
name ++;
}
glPopName();
glPopName();
}
else
{
glBegin(GL_LINES);
while (li.next())
{
TEveStraightLineSet::Line_t& l = * (TEveStraightLineSet::Line_t*) li();
glVertex3f(l.fV1[0], l.fV1[1], l.fV1[2]);
glVertex3f(l.fV2[0], l.fV2[1], l.fV2[2]);
}
glEnd();
}
if (changePM)
TGLUtil::EndExtendPickRegion();
glPopAttrib();
}
if (mL.GetRnrMarkers() && mL.GetMarkerPlex().Size() > 0)
{
TEveChunkManager::iterator mi(mL.GetMarkerPlex());
Float_t* pnts = new Float_t[mL.GetMarkerPlex().Size()*3];
Float_t* pnt = pnts;
while (mi.next())
{
TEveStraightLineSet::Marker_t& m = * (TEveStraightLineSet::Marker_t*) mi();
pnt[0] = m.fV[0];
pnt[1] = m.fV[1];
pnt[2] = m.fV[2];
pnt += 3;
}
if (rnrCtx.SecSelection()) glPushName(2);
TGLUtil::RenderPolyMarkers((TAttMarker&)mL, mL.GetMainTransparency(),
pnts, mL.GetMarkerPlex().Size(),
rnrCtx.GetPickRadius(),
rnrCtx.Selection(),
rnrCtx.SecSelection());
if (rnrCtx.SecSelection()) glPopName();
delete [] pnts;
}
if (mL.GetDepthTest() == kFALSE && rnrCtx.Selection() == kFALSE)
glPopAttrib();
}
void TEveStraightLineSetGL::ProcessSelection(TGLRnrCtx& ,
TGLSelectRecord& rec)
{
if (rec.GetN() != 3) return;
if (rec.GetItem(1) == 1)
{
printf("selected line %d\n", rec.GetItem(2));
}
else
{
TEveStraightLineSet::Marker_t& m = * (TEveStraightLineSet::Marker_t*) fM->GetMarkerPlex().Atom(rec.GetItem(2));
printf("Selected point %d on line %d\n", rec.GetItem(2), m.fLineId);
}
}
TEveStraightLineSetGL.cxx:1 TEveStraightLineSetGL.cxx:2 TEveStraightLineSetGL.cxx:3 TEveStraightLineSetGL.cxx:4 TEveStraightLineSetGL.cxx:5 TEveStraightLineSetGL.cxx:6 TEveStraightLineSetGL.cxx:7 TEveStraightLineSetGL.cxx:8 TEveStraightLineSetGL.cxx:9 TEveStraightLineSetGL.cxx:10 TEveStraightLineSetGL.cxx:11 TEveStraightLineSetGL.cxx:12 TEveStraightLineSetGL.cxx:13 TEveStraightLineSetGL.cxx:14 TEveStraightLineSetGL.cxx:15 TEveStraightLineSetGL.cxx:16 TEveStraightLineSetGL.cxx:17 TEveStraightLineSetGL.cxx:18 TEveStraightLineSetGL.cxx:19 TEveStraightLineSetGL.cxx:20 TEveStraightLineSetGL.cxx:21 TEveStraightLineSetGL.cxx:22 TEveStraightLineSetGL.cxx:23 TEveStraightLineSetGL.cxx:24 TEveStraightLineSetGL.cxx:25 TEveStraightLineSetGL.cxx:26 TEveStraightLineSetGL.cxx:27 TEveStraightLineSetGL.cxx:28 TEveStraightLineSetGL.cxx:29 TEveStraightLineSetGL.cxx:30 TEveStraightLineSetGL.cxx:31 TEveStraightLineSetGL.cxx:32 TEveStraightLineSetGL.cxx:33 TEveStraightLineSetGL.cxx:34 TEveStraightLineSetGL.cxx:35 TEveStraightLineSetGL.cxx:36 TEveStraightLineSetGL.cxx:37 TEveStraightLineSetGL.cxx:38 TEveStraightLineSetGL.cxx:39 TEveStraightLineSetGL.cxx:40 TEveStraightLineSetGL.cxx:41 TEveStraightLineSetGL.cxx:42 TEveStraightLineSetGL.cxx:43 TEveStraightLineSetGL.cxx:44 TEveStraightLineSetGL.cxx:45 TEveStraightLineSetGL.cxx:46 TEveStraightLineSetGL.cxx:47 TEveStraightLineSetGL.cxx:48 TEveStraightLineSetGL.cxx:49 TEveStraightLineSetGL.cxx:50 TEveStraightLineSetGL.cxx:51 TEveStraightLineSetGL.cxx:52 TEveStraightLineSetGL.cxx:53 TEveStraightLineSetGL.cxx:54 TEveStraightLineSetGL.cxx:55 TEveStraightLineSetGL.cxx:56 TEveStraightLineSetGL.cxx:57 TEveStraightLineSetGL.cxx:58 TEveStraightLineSetGL.cxx:59 TEveStraightLineSetGL.cxx:60 TEveStraightLineSetGL.cxx:61 TEveStraightLineSetGL.cxx:62 TEveStraightLineSetGL.cxx:63 TEveStraightLineSetGL.cxx:64 TEveStraightLineSetGL.cxx:65 TEveStraightLineSetGL.cxx:66 TEveStraightLineSetGL.cxx:67 TEveStraightLineSetGL.cxx:68 TEveStraightLineSetGL.cxx:69 TEveStraightLineSetGL.cxx:70 TEveStraightLineSetGL.cxx:71 TEveStraightLineSetGL.cxx:72 TEveStraightLineSetGL.cxx:73 TEveStraightLineSetGL.cxx:74 TEveStraightLineSetGL.cxx:75 TEveStraightLineSetGL.cxx:76 TEveStraightLineSetGL.cxx:77 TEveStraightLineSetGL.cxx:78 TEveStraightLineSetGL.cxx:79 TEveStraightLineSetGL.cxx:80 TEveStraightLineSetGL.cxx:81 TEveStraightLineSetGL.cxx:82 TEveStraightLineSetGL.cxx:83 TEveStraightLineSetGL.cxx:84 TEveStraightLineSetGL.cxx:85 TEveStraightLineSetGL.cxx:86 TEveStraightLineSetGL.cxx:87 TEveStraightLineSetGL.cxx:88 TEveStraightLineSetGL.cxx:89 TEveStraightLineSetGL.cxx:90 TEveStraightLineSetGL.cxx:91 TEveStraightLineSetGL.cxx:92 TEveStraightLineSetGL.cxx:93 TEveStraightLineSetGL.cxx:94 TEveStraightLineSetGL.cxx:95 TEveStraightLineSetGL.cxx:96 TEveStraightLineSetGL.cxx:97 TEveStraightLineSetGL.cxx:98 TEveStraightLineSetGL.cxx:99 TEveStraightLineSetGL.cxx:100 TEveStraightLineSetGL.cxx:101 TEveStraightLineSetGL.cxx:102 TEveStraightLineSetGL.cxx:103 TEveStraightLineSetGL.cxx:104 TEveStraightLineSetGL.cxx:105 TEveStraightLineSetGL.cxx:106 TEveStraightLineSetGL.cxx:107 TEveStraightLineSetGL.cxx:108 TEveStraightLineSetGL.cxx:109 TEveStraightLineSetGL.cxx:110 TEveStraightLineSetGL.cxx:111 TEveStraightLineSetGL.cxx:112 TEveStraightLineSetGL.cxx:113 TEveStraightLineSetGL.cxx:114 TEveStraightLineSetGL.cxx:115 TEveStraightLineSetGL.cxx:116 TEveStraightLineSetGL.cxx:117 TEveStraightLineSetGL.cxx:118 TEveStraightLineSetGL.cxx:119 TEveStraightLineSetGL.cxx:120 TEveStraightLineSetGL.cxx:121 TEveStraightLineSetGL.cxx:122 TEveStraightLineSetGL.cxx:123 TEveStraightLineSetGL.cxx:124 TEveStraightLineSetGL.cxx:125 TEveStraightLineSetGL.cxx:126 TEveStraightLineSetGL.cxx:127 TEveStraightLineSetGL.cxx:128 TEveStraightLineSetGL.cxx:129 TEveStraightLineSetGL.cxx:130 TEveStraightLineSetGL.cxx:131 TEveStraightLineSetGL.cxx:132 TEveStraightLineSetGL.cxx:133 TEveStraightLineSetGL.cxx:134 TEveStraightLineSetGL.cxx:135 TEveStraightLineSetGL.cxx:136 TEveStraightLineSetGL.cxx:137 TEveStraightLineSetGL.cxx:138 TEveStraightLineSetGL.cxx:139 TEveStraightLineSetGL.cxx:140 TEveStraightLineSetGL.cxx:141 TEveStraightLineSetGL.cxx:142 TEveStraightLineSetGL.cxx:143 TEveStraightLineSetGL.cxx:144 TEveStraightLineSetGL.cxx:145 TEveStraightLineSetGL.cxx:146 TEveStraightLineSetGL.cxx:147 TEveStraightLineSetGL.cxx:148 TEveStraightLineSetGL.cxx:149 TEveStraightLineSetGL.cxx:150 TEveStraightLineSetGL.cxx:151 TEveStraightLineSetGL.cxx:152 TEveStraightLineSetGL.cxx:153 TEveStraightLineSetGL.cxx:154 TEveStraightLineSetGL.cxx:155 TEveStraightLineSetGL.cxx:156 TEveStraightLineSetGL.cxx:157 TEveStraightLineSetGL.cxx:158 TEveStraightLineSetGL.cxx:159 TEveStraightLineSetGL.cxx:160 TEveStraightLineSetGL.cxx:161 TEveStraightLineSetGL.cxx:162 TEveStraightLineSetGL.cxx:163 TEveStraightLineSetGL.cxx:164 TEveStraightLineSetGL.cxx:165 TEveStraightLineSetGL.cxx:166 TEveStraightLineSetGL.cxx:167 TEveStraightLineSetGL.cxx:168 TEveStraightLineSetGL.cxx:169 TEveStraightLineSetGL.cxx:170 TEveStraightLineSetGL.cxx:171 TEveStraightLineSetGL.cxx:172 TEveStraightLineSetGL.cxx:173 TEveStraightLineSetGL.cxx:174 TEveStraightLineSetGL.cxx:175 TEveStraightLineSetGL.cxx:176 TEveStraightLineSetGL.cxx:177 TEveStraightLineSetGL.cxx:178 TEveStraightLineSetGL.cxx:179 TEveStraightLineSetGL.cxx:180 TEveStraightLineSetGL.cxx:181 TEveStraightLineSetGL.cxx:182 TEveStraightLineSetGL.cxx:183 TEveStraightLineSetGL.cxx:184 TEveStraightLineSetGL.cxx:185 TEveStraightLineSetGL.cxx:186 TEveStraightLineSetGL.cxx:187 TEveStraightLineSetGL.cxx:188 TEveStraightLineSetGL.cxx:189 TEveStraightLineSetGL.cxx:190 TEveStraightLineSetGL.cxx:191 TEveStraightLineSetGL.cxx:192 TEveStraightLineSetGL.cxx:193 TEveStraightLineSetGL.cxx:194 TEveStraightLineSetGL.cxx:195 TEveStraightLineSetGL.cxx:196 TEveStraightLineSetGL.cxx:197 TEveStraightLineSetGL.cxx:198 TEveStraightLineSetGL.cxx:199 TEveStraightLineSetGL.cxx:200 TEveStraightLineSetGL.cxx:201 TEveStraightLineSetGL.cxx:202 TEveStraightLineSetGL.cxx:203 TEveStraightLineSetGL.cxx:204 TEveStraightLineSetGL.cxx:205 TEveStraightLineSetGL.cxx:206 TEveStraightLineSetGL.cxx:207 TEveStraightLineSetGL.cxx:208 TEveStraightLineSetGL.cxx:209 TEveStraightLineSetGL.cxx:210 TEveStraightLineSetGL.cxx:211 TEveStraightLineSetGL.cxx:212 TEveStraightLineSetGL.cxx:213