4 #include <Reve/NLTProjector.h>
9 //______________________________________________________________________
15 NLTTrack::NLTTrack() :
21 /**************************************************************************/
22 void NLTTrack::SetProjection(NLTProjector* proj, NLTProjectable* model)
24 NLTProjected::SetProjection(proj, model);
25 Track* origTrack = dynamic_cast<Track*>(fProjectable);
27 SetTrackParams(*origTrack);
29 // unfortunately fPathMarks is a vector of PathMark pointers
31 std::vector<PathMark*>& refs = origTrack->GetPathMarksRef();
32 for(std::vector<PathMark*>::iterator i=refs.begin(); i!=refs.end(); ++i)
37 pm->type = (*i)->type;
38 pm->time = (*i)->time;
39 fPathMarks.push_back(pm);
43 /**************************************************************************/
44 void NLTTrack::UpdateProjection()
46 fProjection = fProjector->GetProjection();
47 MakeTrack(kFALSE); //NLTProjector makes recursive calls
50 //______________________________________________________________________________
51 void NLTTrack::GetBreakPoint(Int_t idx, Bool_t back, Float_t& x, Float_t& y, Float_t& z)
53 Vector vL = fOrigPnts[idx];
54 Vector vR = fOrigPnts[idx+1];
56 while((vL-vR).Mag() > 0.01)
59 vLP.Set(vL); fProjection->ProjectPoint(vLP.x, vLP.y, vLP.z);
60 vMP.Set(vM); fProjection->ProjectPoint(vMP.x, vMP.y, vMP.z);
61 if(fProjection->AcceptSegment(vLP, vMP, 0.0f))
69 //printf("new interval Mag %f (%f, %f, %f)(%f, %f, %f) \n",(vL-vR).Mag(), vL.x, vL.y, vL.z, vR.x, vR.y, vR.z);
74 x = vL.x; y = vL.y; z = vL.z;
78 x = vR.x; y = vR.y; z = vR.z;
80 fProjection->ProjectPoint(x, y, z);
81 // printf("NLTTrack::GetBreakPoint %d (%f, %f, %f) \n", idx, x, y, z);
84 //______________________________________________________________________________
85 Int_t NLTTrack::GetBreakPointIdx(Int_t start)
87 Int_t val = fLastPoint;
92 Bool_t broken = kFALSE;
96 GetPoint(i, v1.x, v1.y, v1.z);
97 GetPoint(i+1, v2.x, v2.y, v2.z);
98 if(fProjection->AcceptSegment(v1, v2, fRnrStyle->fDelta) == kFALSE)
107 // printf("BreakPoint IDX start:%d, BREAK %d, total:%d \n", start, val, Size());
111 /**************************************************************************/
113 void NLTTrack::MakeTrack(Bool_t recurse)
115 Track::MakeTrack(recurse);
117 fBreakPoints.clear();
118 if(Size() == 0) return; // it is possible to be outside the limits of MaxR, MaxZ ...
120 // poject line points
122 fOrigPnts = new Vector[Size()];
123 for(Int_t i = 0; i < Size(); ++i, p+=3)
126 fProjection->ProjectPoint(p[0], p[1], p[2]);
130 std::vector<Vector> vvec;
131 Int_t bL = 0, bR = GetBreakPointIdx(0);
134 for(Int_t i=bL; i<=bR; i++)
137 vvec.push_back(Vector(x, y, z));
139 if (bR == fLastPoint)
142 GetBreakPoint(bR, kTRUE, x, y, z); vvec.push_back(Vector(x, y, z));
143 fBreakPoints.push_back(vvec.size());
144 GetBreakPoint(bR, kFALSE, x, y, z); vvec.push_back(Vector(x, y, z));
147 bR = GetBreakPointIdx(bL);
149 fBreakPoints.push_back(fLastPoint+1); // enforce drawing to end of line
151 for (std::vector<Reve::Vector>::iterator i=vvec.begin(); i!=vvec.end(); ++i)
152 SetNextPoint((*i).x, (*i).y, (*i).z);
156 /**************************************************************************/
157 void NLTTrack::PrintLineSegments()
159 printf("%s LineSegments:\n", GetName());
164 for (std::vector<Int_t>::iterator bpi = fBreakPoints.begin();
165 bpi != fBreakPoints.end(); ++bpi)
167 Int_t size = *bpi - start;
169 GetPoint(start, S.x, S.y, S.z);
170 GetPoint((*bpi)-1, E.x, E.y, E.z);
171 printf("seg %d size %d start %d ::(%f, %f, %f) (%f, %f, %f)\n",
172 segment, size, start, S.x, S.y, S.z, E.x, E.y, E.z);
178 /**************************************************************************/
180 void NLTTrack::CtrlClicked(Reve::Track* /*track*/)
182 Track* t = dynamic_cast<Track*>(fProjectable);
187 //______________________________________________________________________
191 ClassImp(NLTTrackList)
193 NLTTrackList::NLTTrackList() :
199 /**************************************************************************/
200 void NLTTrackList::SetProjection(NLTProjector* proj, NLTProjectable* model)
202 NLTProjected::SetProjection(proj, model);
204 TrackList& tl = * dynamic_cast<TrackList*>(model);
205 SetLineColor(tl.GetLineColor());
206 SetLineStyle(tl.GetLineStyle());
207 SetLineWidth(tl.GetLineWidth());
208 SetMarkerColor(tl.GetMarkerColor());
209 SetMarkerStyle(tl.GetMarkerStyle());
210 SetMarkerSize(tl.GetMarkerSize());
211 SetRnrLine(tl.GetRnrLine());
212 SetRnrPoints(tl.GetRnrPoints());
214 SetRnrStyle(tl.GetRnrStyle());