24 ClassImp(TEveStraightLineSetGL);
29 TEveStraightLineSetGL::TEveStraightLineSetGL() : TGLObject(), fM(0)
38 Bool_t TEveStraightLineSetGL::SetModel(TObject* obj,
const Option_t* )
40 fM = SetModelDynCast<TEveStraightLineSet>(obj);
47 void TEveStraightLineSetGL::SetBBox()
49 SetAxisAlignedBBox(((TEveStraightLineSet*)fExternalObj)->AssertBBox());
57 Bool_t TEveStraightLineSetGL::ShouldDLCache(
const TGLRnrCtx& rnrCtx)
const
59 if (rnrCtx.Selection())
return kFALSE;
60 return TGLObject::ShouldDLCache(rnrCtx);
66 void TEveStraightLineSetGL::Draw(TGLRnrCtx& rnrCtx)
const
68 if (rnrCtx.IsDrawPassOutlineLine())
71 TGLObject::Draw(rnrCtx);
77 void TEveStraightLineSetGL::DirectDraw(TGLRnrCtx& rnrCtx)
const
81 TEveStraightLineSet& mL = * fM;
84 if (mL.GetDepthTest() == kFALSE && rnrCtx.Selection() == kFALSE)
86 glPushAttrib(GL_VIEWPORT_BIT);
91 if (mL.GetRnrLines() && mL.GetLinePlex().Size() > 0)
93 glPushAttrib(GL_LINE_BIT | GL_ENABLE_BIT);
94 glDisable(GL_LIGHTING);
95 TGLUtil::LineWidth(mL.GetLineWidth());
96 if (mL.GetLineStyle() > 1) {
98 UShort_t pat = 0xffff;
99 switch (mL.GetLineStyle()) {
100 case 2: pat = 0x3333;
break;
101 case 3: pat = 0x5555;
break;
102 case 4: pat = 0xf040;
break;
103 case 5: pat = 0xf4f4;
break;
104 case 6: pat = 0xf111;
break;
105 case 7: pat = 0xf0f0;
break;
106 case 8: pat = 0xff11;
break;
107 case 9: pat = 0x3fff;
break;
108 case 10: pat = 0x08ff;
break;
110 glLineStipple(1, pat);
111 glEnable(GL_LINE_STIPPLE);
115 Bool_t changePM = rnrCtx.Selection() && mL.GetLineWidth() > rnrCtx.GetPickRadius();
117 TGLUtil::BeginExtendPickRegion((Float_t) rnrCtx.GetPickRadius() / mL.GetLineWidth());
119 TEveChunkManager::iterator li(mL.GetLinePlex());
120 if (rnrCtx.SecSelection())
127 TEveStraightLineSet::Line_t& l = * (TEveStraightLineSet::Line_t*) li();
131 glVertex3f(l.fV1[0], l.fV1[1], l.fV1[2]);
132 glVertex3f(l.fV2[0], l.fV2[1], l.fV2[2]);
145 TEveStraightLineSet::Line_t& l = * (TEveStraightLineSet::Line_t*) li();
146 glVertex3f(l.fV1[0], l.fV1[1], l.fV1[2]);
147 glVertex3f(l.fV2[0], l.fV2[1], l.fV2[2]);
153 TGLUtil::EndExtendPickRegion();
160 if (mL.GetRnrMarkers() && mL.GetMarkerPlex().Size() > 0)
162 TEveChunkManager::iterator mi(mL.GetMarkerPlex());
163 Float_t* pnts =
new Float_t[mL.GetMarkerPlex().Size()*3];
167 TEveStraightLineSet::Marker_t& m = * (TEveStraightLineSet::Marker_t*) mi();
173 if (rnrCtx.SecSelection()) glPushName(2);
174 TGLUtil::RenderPolyMarkers((TAttMarker&)mL, mL.GetMainTransparency(),
175 pnts, mL.GetMarkerPlex().Size(),
176 rnrCtx.GetPickRadius(),
178 rnrCtx.SecSelection());
179 if (rnrCtx.SecSelection()) glPopName();
183 if (mL.GetDepthTest() == kFALSE && rnrCtx.Selection() == kFALSE)
190 void TEveStraightLineSetGL::ProcessSelection(TGLRnrCtx& ,
191 TGLSelectRecord& rec)
193 if (rec.GetN() != 3)
return;
194 if (rec.GetItem(1) == 1)
196 printf(
"selected line %d\n", rec.GetItem(2));
200 TEveStraightLineSet::Marker_t& m = * (TEveStraightLineSet::Marker_t*) fM->GetMarkerPlex().Atom(rec.GetItem(2));
201 printf(
"Selected point %d on line %d\n", rec.GetItem(2), m.fLineId);