ROOT logo
// @(#)root/eve:$Id: TEvePolygonSetProjected.cxx 31517 2009-12-03 11:56:23Z matevz $
// Authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007

/*************************************************************************
 * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#include "TEvePolygonSetProjected.h"
#include "TEveGeoShape.h"
#include "TEveProjectionManager.h"

#include "TBuffer3D.h"
#include "TBuffer3DTypes.h"
#include "TVirtualPad.h"
#include "TVirtualViewer3D.h"

namespace
{
struct Seg_t
{
   // Helper class for building 2D polygons from TBuffer3D.
   Int_t fV1;
   Int_t fV2;

   Seg_t(Int_t i1=-1, Int_t i2=-1) : fV1(i1), fV2(i2) {}
};
typedef std::list<Seg_t>           LSeg_t;
typedef std::list<Seg_t>::iterator LSegIt_t;
}

//==============================================================================
//==============================================================================
// TEvePolygonSetProjected
//==============================================================================

//______________________________________________________________________________
//
// A set of projected polygons.
// Used for storage of projected geometrical shapes.
//
// Internal struct Polygon_t holds only indices into the master vertex
// array in TEvePolygonSetProjected.

ClassImp(TEvePolygonSetProjected);

//______________________________________________________________________________
TEvePolygonSetProjected::TEvePolygonSetProjected(const char* n, const char* t) :
   TEveElementList(n, t),

   fBuff(0),

   fNPnts(0),
   fPnts(0),

   fFillColor(5),
   fLineColor(3),
   fLineWidth(1),

   fHighlightFrame(kTRUE)
{
   // Constructor.

   SetMainColorPtr(&fFillColor);
}

//______________________________________________________________________________
TEvePolygonSetProjected::~TEvePolygonSetProjected()
{
   // Destructor.

   fPols.clear();
   if (fPnts) delete [] fPnts;
   if (fBuff) delete fBuff;
}

//______________________________________________________________________________
void TEvePolygonSetProjected::SetProjection(TEveProjectionManager* mng,
                                            TEveProjectable* model)
{
   // This is virtual method from base-class TEveProjected.

   TEveProjected::SetProjection(mng, model);
   TEveGeoShape* gre = dynamic_cast<TEveGeoShape*>(model);

   fBuff = gre->MakeBuffer3D();
   if (fBuff)
   {
      Color_t color = gre->GetMainColor();
      SetMainColor(color);
      SetLineColor(color);
      // SetLineColor((Color_t)TColor::GetColorBright(color));
      SetMainTransparency(gre->GetMainTransparency());
   }
}

//______________________________________________________________________________
void TEvePolygonSetProjected::SetDepthLocal(Float_t d)
{
   // Set depth (z-coordinate) of the projected points.

   SetDepthCommon(d, this, fBBox);

   for (Int_t i = 0; i < fNPnts; ++i)
      fPnts[i].fZ = fDepth;
}

//______________________________________________________________________________
void TEvePolygonSetProjected::UpdateProjection()
{
   // This is virtual method from base-class TEveProjected.

   if (fBuff == 0) return;

   // drop polygons, and projected/reduced points
   fPols.clear();

   ProjectBuffer3D();
}

//______________________________________________________________________________
Bool_t TEvePolygonSetProjected::IsFirstIdxHead(Int_t s0, Int_t s1)
{
   // Compare the two segments and check if the first index of first segment is starting.

   Int_t v0 = fBuff->fSegs[3*s0 + 1];
   Int_t v2 = fBuff->fSegs[3*s1 + 1];
   Int_t v3 = fBuff->fSegs[3*s1 + 2];
   return v0 != v2 && v0 != v3;
}

//______________________________________________________________________________
Int_t* TEvePolygonSetProjected::ProjectAndReducePoints()
{
   // Project and reduce buffer points.

   TEveProjection* projection = fManager->GetProjection();

   Int_t buffN = fBuff->NbPnts();
   TEveVector*  pnts  = new TEveVector[buffN];
   for (Int_t i = 0; i < buffN; ++i)
   {
      pnts[i].Set(fBuff->fPnts[3*i],fBuff->fPnts[3*i+1], fBuff->fPnts[3*i+2]);
      projection->ProjectPoint(pnts[i].fX, pnts[i].fY, pnts[i].fZ, 0,
                               TEveProjection::kPP_Plane);
   }

   if (fPnts) delete [] fPnts;
   fNPnts=0;
   Int_t *idxMap = new Int_t[buffN];
   Int_t *ra     = new Int_t[buffN];  // list of reduced vertices
   for (UInt_t v = 0; v < (UInt_t)buffN; ++v)
   {
      idxMap[v] = -1;
      for (Int_t k = 0; k < fNPnts; ++k)
      {
         if(pnts[v].SquareDistance(pnts[ra[k]]) < TEveProjection::fgEps*TEveProjection::fgEps)
         {
            idxMap[v] = k;
            break;
         }
      }
      // have not found a point inside epsilon, add new point in scaled array
      if (idxMap[v] == -1)
      {
         idxMap[v] = fNPnts;
         ra[fNPnts] = v;
         ++fNPnts;
      }
   }

   // write the array of scaled points
   fPnts = new TEveVector[fNPnts];
   for (Int_t idx = 0; idx < fNPnts; ++idx)
   {
      Int_t i = ra[idx];
      projection->ProjectPoint(pnts[i].fX, pnts[i].fY, pnts[i].fZ, fDepth,
                               TEveProjection::kPP_Distort);
      fPnts[idx].Set(pnts[i]);
   }
   delete [] ra;
   delete [] pnts;
   // printf("reduced %d points of %d\n", fNPnts, N);

   return idxMap;
}

//______________________________________________________________________________
Float_t TEvePolygonSetProjected::AddPolygon(std::list<Int_t>& pp, vpPolygon_t& pols)
{
   // Check if polygon has dimensions above TEveProjection::fgEps and add it
   // to a list if it is not a duplicate.

   if (pp.size() <= 2) return 0;

   // dimension of bbox
   Float_t bbox[] = { 1e6, -1e6, 1e6, -1e6, 1e6, -1e6 };
   for (std::list<Int_t>::iterator u = pp.begin(); u!= pp.end(); ++u)
   {
      Int_t idx = *u;
      if (fPnts[idx].fX < bbox[0]) bbox[0] = fPnts[idx].fX;
      if (fPnts[idx].fX > bbox[1]) bbox[1] = fPnts[idx].fX;

      if (fPnts[idx].fY < bbox[2]) bbox[2] = fPnts[idx].fY;
      if (fPnts[idx].fY > bbox[3]) bbox[3] = fPnts[idx].fY;
   }
   Float_t eps = 2*TEveProjection::fgEps;
   if ((bbox[1]-bbox[0]) < eps || (bbox[3]-bbox[2]) < eps) return 0;

   // duplication
   for (vpPolygon_i poi = pols.begin(); poi != pols.end(); ++poi)
   {
      Polygon_t& refP = *poi;
      if ((Int_t)pp.size() != refP.fNPnts)
         continue;
      std::list<Int_t>::iterator u = pp.begin();
      Int_t pidx = refP.FindPoint(*u);
      if (pidx < 0)
         continue;
      while (u != pp.end())
      {
         if ((*u) != refP.fPnts[pidx])
            break;
         ++u;
         if (++pidx >= refP.fNPnts) pidx = 0;
      }
      if (u == pp.end()) return 0;
   }

   Int_t* pv = new Int_t[pp.size()];
   Int_t count=0;
   for (std::list<Int_t>::iterator u = pp.begin(); u != pp.end(); u++)
   {
      pv[count] = *u;
      count++;
   }

   pols.push_back(Polygon_t());
   pols.back().fNPnts = pp.size();
   pols.back().fPnts = &pv[0];

   return (bbox[1]-bbox[0]) * (bbox[3]-bbox[2]);
}

//______________________________________________________________________________
Float_t TEvePolygonSetProjected::MakePolygonsFromBP(Int_t* idxMap)
{
   // Build polygons from list of buffer polygons.

   TEveProjection* projection = fManager->GetProjection();
   Int_t* bpols = fBuff->fPols;
   Float_t surf =0; // surface of projected polygons
   for (UInt_t pi = 0; pi< fBuff->NbPols(); pi++)
   {
      std::list<Int_t> pp; // points in current polygon
      UInt_t segN = bpols[1];
      Int_t* seg =  &bpols[2];
      // start idx in the fist segment depends of second segment
      Int_t  tail, head;
      Bool_t h = IsFirstIdxHead(seg[0], seg[1]);
      if (h) {
         head = idxMap[fBuff->fSegs[3*seg[0] + 1]];
         tail = idxMap[fBuff->fSegs[3*seg[0] + 2]];
      }
      else
      {
         head = idxMap[fBuff->fSegs[3*seg[0] + 2]];
         tail = idxMap[fBuff->fSegs[3*seg[0] + 1]];
      }
      pp.push_back(head);
      // printf("start idx head %d, tail %d\n", head, tail);
      LSeg_t segs;
      for (UInt_t s = 1; s < segN; ++s)
         segs.push_back(Seg_t(fBuff->fSegs[3*seg[s] + 1],fBuff->fSegs[3*seg[s] + 2]));

      Bool_t accepted = kFALSE;
      for (LSegIt_t it = segs.begin(); it != segs.end(); ++it)
      {
         Int_t mv1 = idxMap[(*it).fV1];
         Int_t mv2 = idxMap[(*it).fV2];
         accepted = projection->AcceptSegment(fPnts[mv1], fPnts[mv2], TEveProjection::fgEps);

         if(accepted == kFALSE)
         {
            pp.clear();
            break;
         }
         if(tail != pp.back()) pp.push_back(tail);
         tail = (mv1 == tail) ? mv2 :mv1;
      }
      // DirectDraw() implementation: last and first vertices should not be equal
      if (pp.empty() == kFALSE)
      {
         if (pp.front() == pp.back()) pp.pop_front();
         surf += AddPolygon(pp, fPolsBP);
      }
      bpols += (segN+2);
   }
   return surf;
}

//______________________________________________________________________________
Float_t TEvePolygonSetProjected::MakePolygonsFromBS(Int_t* idxMap)
{
   // Build polygons from the set of buffer segments.
   // First creates a segment pool according to reduced and projected points
   // and then build polygons from the pool.

   LSeg_t   segs;
   LSegIt_t it;
   Float_t  surf = 0; // surface of projected polygons
   TEveProjection *projection = fManager->GetProjection();
   for (UInt_t s = 0; s < fBuff->NbSegs(); ++s)
   {
      Bool_t duplicate = kFALSE;
      Int_t vo1,  vo2;  // idx from fBuff segment
      Int_t vor1, vor2; // mapped idx
      vo1 =  fBuff->fSegs[3*s + 1];
      vo2 =  fBuff->fSegs[3*s + 2]; //... skip color info
      vor1 = idxMap[vo1];
      vor2 = idxMap[vo2];
      if (vor1 == vor2) continue;
      // check duplicate
      for (it = segs.begin(); it != segs.end(); ++it)
      {
         Int_t vv1 = (*it).fV1;
         Int_t vv2 = (*it).fV2;
         if((vv1 == vor1 && vv2 == vor2) || (vv1 == vor2 && vv2 == vor1))
         {
            duplicate = kTRUE;
            continue;
         }
      }
      if (duplicate == kFALSE && projection->AcceptSegment(fPnts[vor1], fPnts[vor2], TEveProjection::fgEps))
         segs.push_back(Seg_t(vor1, vor2));
   }

   while ( ! segs.empty())
   {
      std::list<Int_t> pp; // points in current polygon
      pp.push_back(segs.front().fV1);
      Int_t tail = segs.front().fV2;
      segs.pop_front();
      Bool_t match = kTRUE;
      while (match && ! segs.empty())
      {
         for (LSegIt_t k = segs.begin(); k != segs.end(); ++k)
         {
            Int_t cv1 = (*k).fV1;
            Int_t cv2 = (*k).fV2;
            if (cv1 == tail || cv2 == tail)
            {
               pp.push_back(tail);
               tail = (cv1 == tail) ? cv2 : cv1;
               segs.erase(k);
               match = kTRUE;
               break;
            }
            else
            {
               match = kFALSE;
            }
         } // end for loop in the segment pool
         if (tail == pp.front())
            break;
      }
      surf += AddPolygon(pp, fPolsBS);
   }
   return surf;
}

/******************************************************************************/

//______________________________________________________________________________
void  TEvePolygonSetProjected::ProjectBuffer3D()
{
   // Project current buffer.

   // create map from original to projected and reduced point needed oly for geometry
   Int_t* idxMap = ProjectAndReducePoints();

   TEveProjection::EGeoMode_e mode = fManager->GetProjection()->GetGeoMode();
   switch (mode)
   {
      case TEveProjection::kGM_Polygons :
      {
         MakePolygonsFromBP(idxMap);
         fPolsBP.swap(fPols);
         break;
      }
      case TEveProjection::kGM_Segments :
      {
         MakePolygonsFromBS(idxMap);
         fPolsBS.swap(fPols);
         break;
      }
      case TEveProjection::kGM_Unknown:
      {
         // take projectopn with largest surface
        Float_t surfBP = MakePolygonsFromBP(idxMap);
        Float_t surfBS = MakePolygonsFromBS(idxMap);
         if (surfBS < surfBP)
         {
            fPolsBP.swap(fPols);
            fPolsBS.clear();
         }
         else
         {
            fPolsBS.swap(fPols);
            fPolsBP.clear();
         }
      }
      default:
         break;
   }

   delete [] idxMap;
   ResetBBox();
}

//______________________________________________________________________________
void TEvePolygonSetProjected::ComputeBBox()
{
   // Override of virtual method from TAttBBox.

   if (fNPnts > 0) {
      BBoxInit();
      for (Int_t pi = 0; pi < fNPnts; ++pi)
         BBoxCheckPoint(fPnts[pi].fX, fPnts[pi].fY, fPnts[pi].fZ);
   } else {
      BBoxZero();
   }
}

//______________________________________________________________________________
void TEvePolygonSetProjected::SetMainColor(Color_t color)
{
   // Set main color.
   // Override so that line-color can also be changed if it is equal
   // to fill color (which is treated as main color).

   if (fFillColor == fLineColor) {
      fLineColor = color;
      StampObjProps();
   }
   TEveElementList::SetMainColor(color);
}

//______________________________________________________________________________
void TEvePolygonSetProjected::Paint(Option_t* )
{
   // Paint this object. Only direct rendering is supported.

   static const TEveException eh("TEvePolygonSetProjected::Paint ");

   if (fNPnts == 0) return;
   TBuffer3D buffer(TBuffer3DTypes::kGeneric);

   // Section kCore
   buffer.fID           = this;
   buffer.fColor        = GetMainColor();
   buffer.fTransparency = GetMainTransparency();
   buffer.fLocalFrame   = false;

   buffer.SetSectionsValid(TBuffer3D::kCore);

   // We fill kCore on first pass and try with viewer
   Int_t reqSections = gPad->GetViewer3D()->AddObject(buffer);
   if (reqSections != TBuffer3D::kNone)
      Warning(eh, "Viewer3D requires more (%d).", reqSections);
}

/******************************************************************************/

//______________________________________________________________________________
void TEvePolygonSetProjected::DumpPolys() const
{
   // Dump information about built polygons.

   printf("TEvePolygonSetProjected %d polygons\n", (Int_t)fPols.size());
   Int_t cnt = 0;
   for (vpPolygon_ci i = fPols.begin(); i!= fPols.end(); i++)
   {
      Int_t nPnts = (*i).fNPnts;
      printf("Points of polygon %d [Np = %d]:\n", ++cnt, nPnts);
      for (Int_t vi = 0; vi<nPnts; ++vi) {
         Int_t pi = (*i).fPnts[vi];
         printf("(%f, %f, %f)", fPnts[pi].fX, fPnts[pi].fY, fPnts[pi].fZ);
      }
      printf("\n");
   }
}

//______________________________________________________________________________
void TEvePolygonSetProjected::DumpBuffer3D()
{
   // Dump information about currenty projected buffer.

   Int_t* bpols = fBuff->fPols;

   for (UInt_t pi = 0; pi< fBuff->NbPols(); ++pi)
   {
      UInt_t segN = bpols[1];
      printf("%d polygon of %d has %d segments \n", pi, fBuff->NbPols(), segN);

      Int_t* seg =  &bpols[2];
      for (UInt_t a=0; a<segN; ++a)
      {
         Int_t a1 = fBuff->fSegs[3*seg[a] + 1];
         Int_t a2 = fBuff->fSegs[3*seg[a] + 2];
         printf("(%d, %d) \n", a1, a2);
         printf("ORIG points :(%f, %f, %f)  (%f, %f, %f)\n",
                fBuff->fPnts[3*a1],fBuff->fPnts[3*a1+1], fBuff->fPnts[3*a1+2],
                fBuff->fPnts[3*a2],fBuff->fPnts[3*a2+1], fBuff->fPnts[3*a2+2]);
      }
      printf("\n");
      bpols += (segN+2);
   }
}
 TEvePolygonSetProjected.cxx:1
 TEvePolygonSetProjected.cxx:2
 TEvePolygonSetProjected.cxx:3
 TEvePolygonSetProjected.cxx:4
 TEvePolygonSetProjected.cxx:5
 TEvePolygonSetProjected.cxx:6
 TEvePolygonSetProjected.cxx:7
 TEvePolygonSetProjected.cxx:8
 TEvePolygonSetProjected.cxx:9
 TEvePolygonSetProjected.cxx:10
 TEvePolygonSetProjected.cxx:11
 TEvePolygonSetProjected.cxx:12
 TEvePolygonSetProjected.cxx:13
 TEvePolygonSetProjected.cxx:14
 TEvePolygonSetProjected.cxx:15
 TEvePolygonSetProjected.cxx:16
 TEvePolygonSetProjected.cxx:17
 TEvePolygonSetProjected.cxx:18
 TEvePolygonSetProjected.cxx:19
 TEvePolygonSetProjected.cxx:20
 TEvePolygonSetProjected.cxx:21
 TEvePolygonSetProjected.cxx:22
 TEvePolygonSetProjected.cxx:23
 TEvePolygonSetProjected.cxx:24
 TEvePolygonSetProjected.cxx:25
 TEvePolygonSetProjected.cxx:26
 TEvePolygonSetProjected.cxx:27
 TEvePolygonSetProjected.cxx:28
 TEvePolygonSetProjected.cxx:29
 TEvePolygonSetProjected.cxx:30
 TEvePolygonSetProjected.cxx:31
 TEvePolygonSetProjected.cxx:32
 TEvePolygonSetProjected.cxx:33
 TEvePolygonSetProjected.cxx:34
 TEvePolygonSetProjected.cxx:35
 TEvePolygonSetProjected.cxx:36
 TEvePolygonSetProjected.cxx:37
 TEvePolygonSetProjected.cxx:38
 TEvePolygonSetProjected.cxx:39
 TEvePolygonSetProjected.cxx:40
 TEvePolygonSetProjected.cxx:41
 TEvePolygonSetProjected.cxx:42
 TEvePolygonSetProjected.cxx:43
 TEvePolygonSetProjected.cxx:44
 TEvePolygonSetProjected.cxx:45
 TEvePolygonSetProjected.cxx:46
 TEvePolygonSetProjected.cxx:47
 TEvePolygonSetProjected.cxx:48
 TEvePolygonSetProjected.cxx:49
 TEvePolygonSetProjected.cxx:50
 TEvePolygonSetProjected.cxx:51
 TEvePolygonSetProjected.cxx:52
 TEvePolygonSetProjected.cxx:53
 TEvePolygonSetProjected.cxx:54
 TEvePolygonSetProjected.cxx:55
 TEvePolygonSetProjected.cxx:56
 TEvePolygonSetProjected.cxx:57
 TEvePolygonSetProjected.cxx:58
 TEvePolygonSetProjected.cxx:59
 TEvePolygonSetProjected.cxx:60
 TEvePolygonSetProjected.cxx:61
 TEvePolygonSetProjected.cxx:62
 TEvePolygonSetProjected.cxx:63
 TEvePolygonSetProjected.cxx:64
 TEvePolygonSetProjected.cxx:65
 TEvePolygonSetProjected.cxx:66
 TEvePolygonSetProjected.cxx:67
 TEvePolygonSetProjected.cxx:68
 TEvePolygonSetProjected.cxx:69
 TEvePolygonSetProjected.cxx:70
 TEvePolygonSetProjected.cxx:71
 TEvePolygonSetProjected.cxx:72
 TEvePolygonSetProjected.cxx:73
 TEvePolygonSetProjected.cxx:74
 TEvePolygonSetProjected.cxx:75
 TEvePolygonSetProjected.cxx:76
 TEvePolygonSetProjected.cxx:77
 TEvePolygonSetProjected.cxx:78
 TEvePolygonSetProjected.cxx:79
 TEvePolygonSetProjected.cxx:80
 TEvePolygonSetProjected.cxx:81
 TEvePolygonSetProjected.cxx:82
 TEvePolygonSetProjected.cxx:83
 TEvePolygonSetProjected.cxx:84
 TEvePolygonSetProjected.cxx:85
 TEvePolygonSetProjected.cxx:86
 TEvePolygonSetProjected.cxx:87
 TEvePolygonSetProjected.cxx:88
 TEvePolygonSetProjected.cxx:89
 TEvePolygonSetProjected.cxx:90
 TEvePolygonSetProjected.cxx:91
 TEvePolygonSetProjected.cxx:92
 TEvePolygonSetProjected.cxx:93
 TEvePolygonSetProjected.cxx:94
 TEvePolygonSetProjected.cxx:95
 TEvePolygonSetProjected.cxx:96
 TEvePolygonSetProjected.cxx:97
 TEvePolygonSetProjected.cxx:98
 TEvePolygonSetProjected.cxx:99
 TEvePolygonSetProjected.cxx:100
 TEvePolygonSetProjected.cxx:101
 TEvePolygonSetProjected.cxx:102
 TEvePolygonSetProjected.cxx:103
 TEvePolygonSetProjected.cxx:104
 TEvePolygonSetProjected.cxx:105
 TEvePolygonSetProjected.cxx:106
 TEvePolygonSetProjected.cxx:107
 TEvePolygonSetProjected.cxx:108
 TEvePolygonSetProjected.cxx:109
 TEvePolygonSetProjected.cxx:110
 TEvePolygonSetProjected.cxx:111
 TEvePolygonSetProjected.cxx:112
 TEvePolygonSetProjected.cxx:113
 TEvePolygonSetProjected.cxx:114
 TEvePolygonSetProjected.cxx:115
 TEvePolygonSetProjected.cxx:116
 TEvePolygonSetProjected.cxx:117
 TEvePolygonSetProjected.cxx:118
 TEvePolygonSetProjected.cxx:119
 TEvePolygonSetProjected.cxx:120
 TEvePolygonSetProjected.cxx:121
 TEvePolygonSetProjected.cxx:122
 TEvePolygonSetProjected.cxx:123
 TEvePolygonSetProjected.cxx:124
 TEvePolygonSetProjected.cxx:125
 TEvePolygonSetProjected.cxx:126
 TEvePolygonSetProjected.cxx:127
 TEvePolygonSetProjected.cxx:128
 TEvePolygonSetProjected.cxx:129
 TEvePolygonSetProjected.cxx:130
 TEvePolygonSetProjected.cxx:131
 TEvePolygonSetProjected.cxx:132
 TEvePolygonSetProjected.cxx:133
 TEvePolygonSetProjected.cxx:134
 TEvePolygonSetProjected.cxx:135
 TEvePolygonSetProjected.cxx:136
 TEvePolygonSetProjected.cxx:137
 TEvePolygonSetProjected.cxx:138
 TEvePolygonSetProjected.cxx:139
 TEvePolygonSetProjected.cxx:140
 TEvePolygonSetProjected.cxx:141
 TEvePolygonSetProjected.cxx:142
 TEvePolygonSetProjected.cxx:143
 TEvePolygonSetProjected.cxx:144
 TEvePolygonSetProjected.cxx:145
 TEvePolygonSetProjected.cxx:146
 TEvePolygonSetProjected.cxx:147
 TEvePolygonSetProjected.cxx:148
 TEvePolygonSetProjected.cxx:149
 TEvePolygonSetProjected.cxx:150
 TEvePolygonSetProjected.cxx:151
 TEvePolygonSetProjected.cxx:152
 TEvePolygonSetProjected.cxx:153
 TEvePolygonSetProjected.cxx:154
 TEvePolygonSetProjected.cxx:155
 TEvePolygonSetProjected.cxx:156
 TEvePolygonSetProjected.cxx:157
 TEvePolygonSetProjected.cxx:158
 TEvePolygonSetProjected.cxx:159
 TEvePolygonSetProjected.cxx:160
 TEvePolygonSetProjected.cxx:161
 TEvePolygonSetProjected.cxx:162
 TEvePolygonSetProjected.cxx:163
 TEvePolygonSetProjected.cxx:164
 TEvePolygonSetProjected.cxx:165
 TEvePolygonSetProjected.cxx:166
 TEvePolygonSetProjected.cxx:167
 TEvePolygonSetProjected.cxx:168
 TEvePolygonSetProjected.cxx:169
 TEvePolygonSetProjected.cxx:170
 TEvePolygonSetProjected.cxx:171
 TEvePolygonSetProjected.cxx:172
 TEvePolygonSetProjected.cxx:173
 TEvePolygonSetProjected.cxx:174
 TEvePolygonSetProjected.cxx:175
 TEvePolygonSetProjected.cxx:176
 TEvePolygonSetProjected.cxx:177
 TEvePolygonSetProjected.cxx:178
 TEvePolygonSetProjected.cxx:179
 TEvePolygonSetProjected.cxx:180
 TEvePolygonSetProjected.cxx:181
 TEvePolygonSetProjected.cxx:182
 TEvePolygonSetProjected.cxx:183
 TEvePolygonSetProjected.cxx:184
 TEvePolygonSetProjected.cxx:185
 TEvePolygonSetProjected.cxx:186
 TEvePolygonSetProjected.cxx:187
 TEvePolygonSetProjected.cxx:188
 TEvePolygonSetProjected.cxx:189
 TEvePolygonSetProjected.cxx:190
 TEvePolygonSetProjected.cxx:191
 TEvePolygonSetProjected.cxx:192
 TEvePolygonSetProjected.cxx:193
 TEvePolygonSetProjected.cxx:194
 TEvePolygonSetProjected.cxx:195
 TEvePolygonSetProjected.cxx:196
 TEvePolygonSetProjected.cxx:197
 TEvePolygonSetProjected.cxx:198
 TEvePolygonSetProjected.cxx:199
 TEvePolygonSetProjected.cxx:200
 TEvePolygonSetProjected.cxx:201
 TEvePolygonSetProjected.cxx:202
 TEvePolygonSetProjected.cxx:203
 TEvePolygonSetProjected.cxx:204
 TEvePolygonSetProjected.cxx:205
 TEvePolygonSetProjected.cxx:206
 TEvePolygonSetProjected.cxx:207
 TEvePolygonSetProjected.cxx:208
 TEvePolygonSetProjected.cxx:209
 TEvePolygonSetProjected.cxx:210
 TEvePolygonSetProjected.cxx:211
 TEvePolygonSetProjected.cxx:212
 TEvePolygonSetProjected.cxx:213
 TEvePolygonSetProjected.cxx:214
 TEvePolygonSetProjected.cxx:215
 TEvePolygonSetProjected.cxx:216
 TEvePolygonSetProjected.cxx:217
 TEvePolygonSetProjected.cxx:218
 TEvePolygonSetProjected.cxx:219
 TEvePolygonSetProjected.cxx:220
 TEvePolygonSetProjected.cxx:221
 TEvePolygonSetProjected.cxx:222
 TEvePolygonSetProjected.cxx:223
 TEvePolygonSetProjected.cxx:224
 TEvePolygonSetProjected.cxx:225
 TEvePolygonSetProjected.cxx:226
 TEvePolygonSetProjected.cxx:227
 TEvePolygonSetProjected.cxx:228
 TEvePolygonSetProjected.cxx:229
 TEvePolygonSetProjected.cxx:230
 TEvePolygonSetProjected.cxx:231
 TEvePolygonSetProjected.cxx:232
 TEvePolygonSetProjected.cxx:233
 TEvePolygonSetProjected.cxx:234
 TEvePolygonSetProjected.cxx:235
 TEvePolygonSetProjected.cxx:236
 TEvePolygonSetProjected.cxx:237
 TEvePolygonSetProjected.cxx:238
 TEvePolygonSetProjected.cxx:239
 TEvePolygonSetProjected.cxx:240
 TEvePolygonSetProjected.cxx:241
 TEvePolygonSetProjected.cxx:242
 TEvePolygonSetProjected.cxx:243
 TEvePolygonSetProjected.cxx:244
 TEvePolygonSetProjected.cxx:245
 TEvePolygonSetProjected.cxx:246
 TEvePolygonSetProjected.cxx:247
 TEvePolygonSetProjected.cxx:248
 TEvePolygonSetProjected.cxx:249
 TEvePolygonSetProjected.cxx:250
 TEvePolygonSetProjected.cxx:251
 TEvePolygonSetProjected.cxx:252
 TEvePolygonSetProjected.cxx:253
 TEvePolygonSetProjected.cxx:254
 TEvePolygonSetProjected.cxx:255
 TEvePolygonSetProjected.cxx:256
 TEvePolygonSetProjected.cxx:257
 TEvePolygonSetProjected.cxx:258
 TEvePolygonSetProjected.cxx:259
 TEvePolygonSetProjected.cxx:260
 TEvePolygonSetProjected.cxx:261
 TEvePolygonSetProjected.cxx:262
 TEvePolygonSetProjected.cxx:263
 TEvePolygonSetProjected.cxx:264
 TEvePolygonSetProjected.cxx:265
 TEvePolygonSetProjected.cxx:266
 TEvePolygonSetProjected.cxx:267
 TEvePolygonSetProjected.cxx:268
 TEvePolygonSetProjected.cxx:269
 TEvePolygonSetProjected.cxx:270
 TEvePolygonSetProjected.cxx:271
 TEvePolygonSetProjected.cxx:272
 TEvePolygonSetProjected.cxx:273
 TEvePolygonSetProjected.cxx:274
 TEvePolygonSetProjected.cxx:275
 TEvePolygonSetProjected.cxx:276
 TEvePolygonSetProjected.cxx:277
 TEvePolygonSetProjected.cxx:278
 TEvePolygonSetProjected.cxx:279
 TEvePolygonSetProjected.cxx:280
 TEvePolygonSetProjected.cxx:281
 TEvePolygonSetProjected.cxx:282
 TEvePolygonSetProjected.cxx:283
 TEvePolygonSetProjected.cxx:284
 TEvePolygonSetProjected.cxx:285
 TEvePolygonSetProjected.cxx:286
 TEvePolygonSetProjected.cxx:287
 TEvePolygonSetProjected.cxx:288
 TEvePolygonSetProjected.cxx:289
 TEvePolygonSetProjected.cxx:290
 TEvePolygonSetProjected.cxx:291
 TEvePolygonSetProjected.cxx:292
 TEvePolygonSetProjected.cxx:293
 TEvePolygonSetProjected.cxx:294
 TEvePolygonSetProjected.cxx:295
 TEvePolygonSetProjected.cxx:296
 TEvePolygonSetProjected.cxx:297
 TEvePolygonSetProjected.cxx:298
 TEvePolygonSetProjected.cxx:299
 TEvePolygonSetProjected.cxx:300
 TEvePolygonSetProjected.cxx:301
 TEvePolygonSetProjected.cxx:302
 TEvePolygonSetProjected.cxx:303
 TEvePolygonSetProjected.cxx:304
 TEvePolygonSetProjected.cxx:305
 TEvePolygonSetProjected.cxx:306
 TEvePolygonSetProjected.cxx:307
 TEvePolygonSetProjected.cxx:308
 TEvePolygonSetProjected.cxx:309
 TEvePolygonSetProjected.cxx:310
 TEvePolygonSetProjected.cxx:311
 TEvePolygonSetProjected.cxx:312
 TEvePolygonSetProjected.cxx:313
 TEvePolygonSetProjected.cxx:314
 TEvePolygonSetProjected.cxx:315
 TEvePolygonSetProjected.cxx:316
 TEvePolygonSetProjected.cxx:317
 TEvePolygonSetProjected.cxx:318
 TEvePolygonSetProjected.cxx:319
 TEvePolygonSetProjected.cxx:320
 TEvePolygonSetProjected.cxx:321
 TEvePolygonSetProjected.cxx:322
 TEvePolygonSetProjected.cxx:323
 TEvePolygonSetProjected.cxx:324
 TEvePolygonSetProjected.cxx:325
 TEvePolygonSetProjected.cxx:326
 TEvePolygonSetProjected.cxx:327
 TEvePolygonSetProjected.cxx:328
 TEvePolygonSetProjected.cxx:329
 TEvePolygonSetProjected.cxx:330
 TEvePolygonSetProjected.cxx:331
 TEvePolygonSetProjected.cxx:332
 TEvePolygonSetProjected.cxx:333
 TEvePolygonSetProjected.cxx:334
 TEvePolygonSetProjected.cxx:335
 TEvePolygonSetProjected.cxx:336
 TEvePolygonSetProjected.cxx:337
 TEvePolygonSetProjected.cxx:338
 TEvePolygonSetProjected.cxx:339
 TEvePolygonSetProjected.cxx:340
 TEvePolygonSetProjected.cxx:341
 TEvePolygonSetProjected.cxx:342
 TEvePolygonSetProjected.cxx:343
 TEvePolygonSetProjected.cxx:344
 TEvePolygonSetProjected.cxx:345
 TEvePolygonSetProjected.cxx:346
 TEvePolygonSetProjected.cxx:347
 TEvePolygonSetProjected.cxx:348
 TEvePolygonSetProjected.cxx:349
 TEvePolygonSetProjected.cxx:350
 TEvePolygonSetProjected.cxx:351
 TEvePolygonSetProjected.cxx:352
 TEvePolygonSetProjected.cxx:353
 TEvePolygonSetProjected.cxx:354
 TEvePolygonSetProjected.cxx:355
 TEvePolygonSetProjected.cxx:356
 TEvePolygonSetProjected.cxx:357
 TEvePolygonSetProjected.cxx:358
 TEvePolygonSetProjected.cxx:359
 TEvePolygonSetProjected.cxx:360
 TEvePolygonSetProjected.cxx:361
 TEvePolygonSetProjected.cxx:362
 TEvePolygonSetProjected.cxx:363
 TEvePolygonSetProjected.cxx:364
 TEvePolygonSetProjected.cxx:365
 TEvePolygonSetProjected.cxx:366
 TEvePolygonSetProjected.cxx:367
 TEvePolygonSetProjected.cxx:368
 TEvePolygonSetProjected.cxx:369
 TEvePolygonSetProjected.cxx:370
 TEvePolygonSetProjected.cxx:371
 TEvePolygonSetProjected.cxx:372
 TEvePolygonSetProjected.cxx:373
 TEvePolygonSetProjected.cxx:374
 TEvePolygonSetProjected.cxx:375
 TEvePolygonSetProjected.cxx:376
 TEvePolygonSetProjected.cxx:377
 TEvePolygonSetProjected.cxx:378
 TEvePolygonSetProjected.cxx:379
 TEvePolygonSetProjected.cxx:380
 TEvePolygonSetProjected.cxx:381
 TEvePolygonSetProjected.cxx:382
 TEvePolygonSetProjected.cxx:383
 TEvePolygonSetProjected.cxx:384
 TEvePolygonSetProjected.cxx:385
 TEvePolygonSetProjected.cxx:386
 TEvePolygonSetProjected.cxx:387
 TEvePolygonSetProjected.cxx:388
 TEvePolygonSetProjected.cxx:389
 TEvePolygonSetProjected.cxx:390
 TEvePolygonSetProjected.cxx:391
 TEvePolygonSetProjected.cxx:392
 TEvePolygonSetProjected.cxx:393
 TEvePolygonSetProjected.cxx:394
 TEvePolygonSetProjected.cxx:395
 TEvePolygonSetProjected.cxx:396
 TEvePolygonSetProjected.cxx:397
 TEvePolygonSetProjected.cxx:398
 TEvePolygonSetProjected.cxx:399
 TEvePolygonSetProjected.cxx:400
 TEvePolygonSetProjected.cxx:401
 TEvePolygonSetProjected.cxx:402
 TEvePolygonSetProjected.cxx:403
 TEvePolygonSetProjected.cxx:404
 TEvePolygonSetProjected.cxx:405
 TEvePolygonSetProjected.cxx:406
 TEvePolygonSetProjected.cxx:407
 TEvePolygonSetProjected.cxx:408
 TEvePolygonSetProjected.cxx:409
 TEvePolygonSetProjected.cxx:410
 TEvePolygonSetProjected.cxx:411
 TEvePolygonSetProjected.cxx:412
 TEvePolygonSetProjected.cxx:413
 TEvePolygonSetProjected.cxx:414
 TEvePolygonSetProjected.cxx:415
 TEvePolygonSetProjected.cxx:416
 TEvePolygonSetProjected.cxx:417
 TEvePolygonSetProjected.cxx:418
 TEvePolygonSetProjected.cxx:419
 TEvePolygonSetProjected.cxx:420
 TEvePolygonSetProjected.cxx:421
 TEvePolygonSetProjected.cxx:422
 TEvePolygonSetProjected.cxx:423
 TEvePolygonSetProjected.cxx:424
 TEvePolygonSetProjected.cxx:425
 TEvePolygonSetProjected.cxx:426
 TEvePolygonSetProjected.cxx:427
 TEvePolygonSetProjected.cxx:428
 TEvePolygonSetProjected.cxx:429
 TEvePolygonSetProjected.cxx:430
 TEvePolygonSetProjected.cxx:431
 TEvePolygonSetProjected.cxx:432
 TEvePolygonSetProjected.cxx:433
 TEvePolygonSetProjected.cxx:434
 TEvePolygonSetProjected.cxx:435
 TEvePolygonSetProjected.cxx:436
 TEvePolygonSetProjected.cxx:437
 TEvePolygonSetProjected.cxx:438
 TEvePolygonSetProjected.cxx:439
 TEvePolygonSetProjected.cxx:440
 TEvePolygonSetProjected.cxx:441
 TEvePolygonSetProjected.cxx:442
 TEvePolygonSetProjected.cxx:443
 TEvePolygonSetProjected.cxx:444
 TEvePolygonSetProjected.cxx:445
 TEvePolygonSetProjected.cxx:446
 TEvePolygonSetProjected.cxx:447
 TEvePolygonSetProjected.cxx:448
 TEvePolygonSetProjected.cxx:449
 TEvePolygonSetProjected.cxx:450
 TEvePolygonSetProjected.cxx:451
 TEvePolygonSetProjected.cxx:452
 TEvePolygonSetProjected.cxx:453
 TEvePolygonSetProjected.cxx:454
 TEvePolygonSetProjected.cxx:455
 TEvePolygonSetProjected.cxx:456
 TEvePolygonSetProjected.cxx:457
 TEvePolygonSetProjected.cxx:458
 TEvePolygonSetProjected.cxx:459
 TEvePolygonSetProjected.cxx:460
 TEvePolygonSetProjected.cxx:461
 TEvePolygonSetProjected.cxx:462
 TEvePolygonSetProjected.cxx:463
 TEvePolygonSetProjected.cxx:464
 TEvePolygonSetProjected.cxx:465
 TEvePolygonSetProjected.cxx:466
 TEvePolygonSetProjected.cxx:467
 TEvePolygonSetProjected.cxx:468
 TEvePolygonSetProjected.cxx:469
 TEvePolygonSetProjected.cxx:470
 TEvePolygonSetProjected.cxx:471
 TEvePolygonSetProjected.cxx:472
 TEvePolygonSetProjected.cxx:473
 TEvePolygonSetProjected.cxx:474
 TEvePolygonSetProjected.cxx:475
 TEvePolygonSetProjected.cxx:476
 TEvePolygonSetProjected.cxx:477
 TEvePolygonSetProjected.cxx:478
 TEvePolygonSetProjected.cxx:479
 TEvePolygonSetProjected.cxx:480
 TEvePolygonSetProjected.cxx:481
 TEvePolygonSetProjected.cxx:482
 TEvePolygonSetProjected.cxx:483
 TEvePolygonSetProjected.cxx:484
 TEvePolygonSetProjected.cxx:485
 TEvePolygonSetProjected.cxx:486
 TEvePolygonSetProjected.cxx:487
 TEvePolygonSetProjected.cxx:488
 TEvePolygonSetProjected.cxx:489
 TEvePolygonSetProjected.cxx:490
 TEvePolygonSetProjected.cxx:491
 TEvePolygonSetProjected.cxx:492
 TEvePolygonSetProjected.cxx:493
 TEvePolygonSetProjected.cxx:494
 TEvePolygonSetProjected.cxx:495
 TEvePolygonSetProjected.cxx:496
 TEvePolygonSetProjected.cxx:497
 TEvePolygonSetProjected.cxx:498
 TEvePolygonSetProjected.cxx:499
 TEvePolygonSetProjected.cxx:500
 TEvePolygonSetProjected.cxx:501
 TEvePolygonSetProjected.cxx:502
 TEvePolygonSetProjected.cxx:503
 TEvePolygonSetProjected.cxx:504
 TEvePolygonSetProjected.cxx:505
 TEvePolygonSetProjected.cxx:506
 TEvePolygonSetProjected.cxx:507
 TEvePolygonSetProjected.cxx:508
 TEvePolygonSetProjected.cxx:509
 TEvePolygonSetProjected.cxx:510
 TEvePolygonSetProjected.cxx:511
 TEvePolygonSetProjected.cxx:512
 TEvePolygonSetProjected.cxx:513
 TEvePolygonSetProjected.cxx:514
 TEvePolygonSetProjected.cxx:515
 TEvePolygonSetProjected.cxx:516
 TEvePolygonSetProjected.cxx:517
 TEvePolygonSetProjected.cxx:518
 TEvePolygonSetProjected.cxx:519
 TEvePolygonSetProjected.cxx:520
 TEvePolygonSetProjected.cxx:521
 TEvePolygonSetProjected.cxx:522