// @(#)root/eve:$Id$
// 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 "TEveProjectionManager.h"
#include "TEveManager.h"
#include "TEveProjectionBases.h"
#include "TEveCompound.h"

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

#include "TClass.h"

#include <list>

//==============================================================================
//==============================================================================
// TEveProjectionManager
//==============================================================================

//______________________________________________________________________________
//
// Manager class for steering of projections and managing projected
// objects.
//
// Recursively projects TEveElement's and draws axis in the projected
// scene.  It enables to interactivly set TEveProjection parameters
// and updates projected scene accordingly.

ClassImp(TEveProjectionManager);

//______________________________________________________________________________
TEveProjectionManager::TEveProjectionManager(TEveProjection::EPType_e type):
   TEveElementList("TEveProjectionManager",""),
   TAttBBox(),
   fProjection  (0),
   fCurrentDepth(0),
   fImportEmpty (kFALSE)
{
   // Constructor.

   for (Int_t i = 0; i < TEveProjection::kPT_End; ++i)
      fProjections[i] = 0;

   if (type != TEveProjection::kPT_Unknown)
      SetProjection(type);
}

//______________________________________________________________________________
TEveProjectionManager::~TEveProjectionManager()
{
   // Destructor.
   // Destroys also dependent elements.

   for (Int_t i = 0; i < TEveProjection::kPT_End; ++i)
   {
      delete fProjections[i];
   }
   while ( ! fDependentEls.empty())
   {
      fDependentEls.front()->Destroy();
   }
}

//______________________________________________________________________________
void TEveProjectionManager::AddDependent(TEveElement* el)
{
   // Add el as dependent element.

   fDependentEls.push_back(el);
}

//______________________________________________________________________________
void TEveProjectionManager::RemoveDependent(TEveElement* el)
{
   // Remove el as dependent element.

   fDependentEls.remove(el);
}

//______________________________________________________________________________
void TEveProjectionManager::UpdateName()
{
   // Updates name to have consitent information with prjection.

   if (fProjection->Is2D())
      SetName(Form ("%s (%3.1f)", fProjection->GetName(), fProjection->GetDistortion()*1000));
   else
      SetName(fProjection->GetName());
}

//______________________________________________________________________________
void TEveProjectionManager::SetProjection(TEveProjection::EPType_e type)
{
   // Set projection type and distortion.

   static const TEveException eH("TEveProjectionManager::SetProjection ");

   if (fProjections[type] == 0)
   {
      switch (type)
      {
         case TEveProjection::kPT_RPhi:
         {
            fProjections[type] = new TEveRPhiProjection();
            break;
         }
         case TEveProjection::kPT_RhoZ:
         {
            fProjections[type] = new TEveRhoZProjection();
            break;
         }
         case TEveProjection::kPT_3D:
         {
            fProjections[type] = new TEve3DProjection();
            break;
         }
         default:
            throw eH + "projection type not valid.";
            break;
      }
   }

   if (fProjection && fProjection->Is2D() != fProjections[type]->Is2D())
   {
      throw eH + "switching between 2D and 3D projections not implemented.";
   }

   fProjection = fProjections[type];
   fProjection->SetCenter(fCenter);
   UpdateName();
}

//______________________________________________________________________________
void TEveProjectionManager::SetCenter(Float_t x, Float_t y, Float_t z)
{
   // Set projection center and rebuild projected scene.

   fCenter.Set(x, y, z);
   fProjection->SetCenter(fCenter);
   ProjectChildren();
}

//______________________________________________________________________________
Bool_t TEveProjectionManager::HandleElementPaste(TEveElement* el)
{
   // React to element being pasted or dnd-ed.
   // Return true if redraw is needed (virtual method).

   List_t::size_type n_children  = fChildren.size();
   ImportElements(el);
   return n_children != fChildren.size();
}

//______________________________________________________________________________
Bool_t TEveProjectionManager::ShouldImport(TEveElement* el)
{
   // Returns true if element el should be imported.
   //
   // Behaviour depends on the value of the fImportEmpty member:
   //   false - el or any of its children must be projectable (default);
   //   true  - always import.

   if (fImportEmpty)
      return kTRUE;

   if (el->IsA() != TEveElementList::Class() && el->IsA()->InheritsFrom(TEveProjectable::Class()))
      return kTRUE;
   for (List_i i=el->BeginChildren(); i!=el->EndChildren(); ++i)
      if (ShouldImport(*i))
         return kTRUE;
   return kFALSE;
}

//______________________________________________________________________________
void TEveProjectionManager::UpdateDependentElsAndScenes(TEveElement* root)
{
   // Update dependent elements' bounding box and mark scenes
   // containing element root or its children as requiring a repaint.

   for (List_i i=fDependentEls.begin(); i!=fDependentEls.end(); ++i)
   {
      TAttBBox* bbox = dynamic_cast<TAttBBox*>(*i);
      if (bbox)
         bbox->ComputeBBox();
   }

   List_t scenes;
   root->CollectSceneParentsFromChildren(scenes, 0);
   gEve->ScenesChanged(scenes);
}

//______________________________________________________________________________
TEveElement* TEveProjectionManager::ImportElementsRecurse(TEveElement* el,
                                                          TEveElement* parent)
{
   // If el is TEveProjectable add projected instance else add plain
   // TEveElementList to parent. Call the same function on el's
   // children.
   //
   // Returns the projected replica of el. Can be 0, if el and none of
   // its children are projectable.

   static const TEveException eh("TEveProjectionManager::ImportElementsRecurse ");

   TEveElement *new_el = 0;

   if (ShouldImport(el))
   {
      TEveProjected   *new_pr = 0;
      TEveProjectable *pble   = dynamic_cast<TEveProjectable*>(el);
      if (pble)
      {
         new_el = (TEveElement*) pble->ProjectedClass(fProjection)->New();
         new_pr = dynamic_cast<TEveProjected*>(new_el);
         new_pr->SetProjection(this, pble);
         new_pr->SetDepth(fCurrentDepth);
      }
      else
      {
         new_el = new TEveElementList;
      }
      new_el->SetElementName (Form("%s [P]", el->GetElementName()));
      new_el->SetElementTitle(Form("Projected replica.\n%s", el->GetElementTitle()));
      new_el->SetRnrSelf     (el->GetRnrSelf());
      new_el->SetRnrChildren (el->GetRnrChildren());
      new_el->SetPickable    (el->IsPickable());
      parent->AddElement(new_el);

      TEveCompound *cmpnd    = dynamic_cast<TEveCompound*>(el);
      TEveCompound *cmpnd_pr = dynamic_cast<TEveCompound*>(new_el);
      for (List_i i=el->BeginChildren(); i!=el->EndChildren(); ++i)
      {
         TEveElement* child_pr = ImportElementsRecurse(*i, new_el);
         if (cmpnd && (*i)->GetCompound() == cmpnd)
            child_pr->SetCompound(cmpnd_pr);
      }
   }

   return new_el;
}

//______________________________________________________________________________
TEveElement* TEveProjectionManager::ImportElements(TEveElement* el,
                                                   TEveElement* ext_list)
{
   // Recursively import elements and apply projection to the newly
   // imported objects.
   //
   // If ext_list is not 0 the new element is also added to the list.
   // This simplifies construction of complex views where projected
   // elements are distributed into several scenes for optimization of
   // updates and rendering.
   //
   // Returns the projected replica of el. Can be 0, if el and none of
   // its children are projectable.

   TEveElement* new_el = ImportElementsRecurse(el, this);
   if (new_el)
   {
      AssertBBox();
      ProjectChildrenRecurse(new_el);
      AssertBBoxExtents(0.1);
      StampTransBBox();

      UpdateDependentElsAndScenes(new_el);

      if (ext_list)
         ext_list->AddElement(new_el);
   }
   return new_el;
}

//______________________________________________________________________________
TEveElement* TEveProjectionManager::SubImportElements(TEveElement* el,
                                                      TEveElement* proj_parent)
{
   // Recursively import elements and apply projection to the newly
   // imported objects.
   //
   // The proj_parent argument should be a projected replica of parent
   // of element 'el'. This allows to insert projected children of
   // a given element when they are added after the projection has
   // been already performed on the parent.
   // This is called from TEveElement::ProjectChild().
   //
   // Returns the projected replica of el. Can be 0, if el and none of
   // its children are projectable.

   TEveElement* new_el = ImportElementsRecurse(el, proj_parent);
   if (new_el)
   {
      AssertBBox();
      ProjectChildrenRecurse(new_el);
      AssertBBoxExtents(0.1);
      StampTransBBox();

      UpdateDependentElsAndScenes(new_el);
   }
   return new_el;
}

//______________________________________________________________________________
Int_t TEveProjectionManager::SubImportChildren(TEveElement* el, TEveElement* proj_parent)
{
   // Recursively import childer elements of el and apply projection
   // to the newly imported objects.
   //
   // The proj_parent argument should be a projected replica of
   // element 'el'. This allows to insert projected children of
   // a given element when they are added after the projection has
   // been already performed on the parent.
   // This is called from TEveElement::ProjectChild().
   //
   // Returns the projected replica of el. Can be 0, if el and none of
   // its children are projectable.

   List_t new_els;
   for (List_i i = el->BeginChildren(); i != el->EndChildren(); ++i)
   {
      TEveElement* new_el = ImportElementsRecurse(*i, proj_parent);
      if (new_el)
         new_els.push_back(new_el);
   }

   if ( ! new_els.empty())
   {
      AssertBBox();
      for (List_i i = new_els.begin(); i != new_els.end(); ++i)
      {
         ProjectChildrenRecurse(*i);
      }
      AssertBBoxExtents(0.1);
      StampTransBBox();

      UpdateDependentElsAndScenes(proj_parent);
   }
   return (Int_t) new_els.size();
}

//______________________________________________________________________________
void TEveProjectionManager::ProjectChildrenRecurse(TEveElement* el)
{
   // Project el (via TEveProjected::UpdateProjection()) and recurse
   // through el's children.
   // Bounding-box is updated along the recursion.

   TEveProjected* pted = dynamic_cast<TEveProjected*>(el);
   if (pted)
   {
      pted->UpdateProjection();
      TAttBBox* bb = dynamic_cast<TAttBBox*>(pted);
      if (bb)
      {
         Float_t* b = bb->AssertBBox();
         BBoxCheckPoint(b[0], b[2], b[4]);
         BBoxCheckPoint(b[1], b[3], b[5]);
      }
      el->ElementChanged(kFALSE);
   }

   for (List_i i=el->BeginChildren(); i!=el->EndChildren(); ++i)
      ProjectChildrenRecurse(*i);
}

//______________________________________________________________________________
void TEveProjectionManager::ProjectChildren()
{
   // Project all children recursively, update bounding-box and notify
   // TEveManger about the scenes that have been changed.

   BBoxInit();
   for (List_i i=BeginChildren(); i!=EndChildren(); ++i)
      ProjectChildrenRecurse(*i);
   AssertBBoxExtents(0.1);
   StampTransBBox();

   UpdateDependentElsAndScenes(this);
}

//______________________________________________________________________________
void TEveProjectionManager::ComputeBBox()
{
   // Virtual from TAttBBox; fill bounding-box information.
   //
   // The bounding-box information is kept coherent during addition of
   // projected elements and projection parameter updates. This is
   // called only in case the manager has not been populated at all.

   static const TEveException eH("TEveProjectionManager::ComputeBBox ");

   if (HasChildren() == kFALSE) {
      BBoxZero();
      return;
   }

   BBoxInit();
}
 TEveProjectionManager.cxx:1
 TEveProjectionManager.cxx:2
 TEveProjectionManager.cxx:3
 TEveProjectionManager.cxx:4
 TEveProjectionManager.cxx:5
 TEveProjectionManager.cxx:6
 TEveProjectionManager.cxx:7
 TEveProjectionManager.cxx:8
 TEveProjectionManager.cxx:9
 TEveProjectionManager.cxx:10
 TEveProjectionManager.cxx:11
 TEveProjectionManager.cxx:12
 TEveProjectionManager.cxx:13
 TEveProjectionManager.cxx:14
 TEveProjectionManager.cxx:15
 TEveProjectionManager.cxx:16
 TEveProjectionManager.cxx:17
 TEveProjectionManager.cxx:18
 TEveProjectionManager.cxx:19
 TEveProjectionManager.cxx:20
 TEveProjectionManager.cxx:21
 TEveProjectionManager.cxx:22
 TEveProjectionManager.cxx:23
 TEveProjectionManager.cxx:24
 TEveProjectionManager.cxx:25
 TEveProjectionManager.cxx:26
 TEveProjectionManager.cxx:27
 TEveProjectionManager.cxx:28
 TEveProjectionManager.cxx:29
 TEveProjectionManager.cxx:30
 TEveProjectionManager.cxx:31
 TEveProjectionManager.cxx:32
 TEveProjectionManager.cxx:33
 TEveProjectionManager.cxx:34
 TEveProjectionManager.cxx:35
 TEveProjectionManager.cxx:36
 TEveProjectionManager.cxx:37
 TEveProjectionManager.cxx:38
 TEveProjectionManager.cxx:39
 TEveProjectionManager.cxx:40
 TEveProjectionManager.cxx:41
 TEveProjectionManager.cxx:42
 TEveProjectionManager.cxx:43
 TEveProjectionManager.cxx:44
 TEveProjectionManager.cxx:45
 TEveProjectionManager.cxx:46
 TEveProjectionManager.cxx:47
 TEveProjectionManager.cxx:48
 TEveProjectionManager.cxx:49
 TEveProjectionManager.cxx:50
 TEveProjectionManager.cxx:51
 TEveProjectionManager.cxx:52
 TEveProjectionManager.cxx:53
 TEveProjectionManager.cxx:54
 TEveProjectionManager.cxx:55
 TEveProjectionManager.cxx:56
 TEveProjectionManager.cxx:57
 TEveProjectionManager.cxx:58
 TEveProjectionManager.cxx:59
 TEveProjectionManager.cxx:60
 TEveProjectionManager.cxx:61
 TEveProjectionManager.cxx:62
 TEveProjectionManager.cxx:63
 TEveProjectionManager.cxx:64
 TEveProjectionManager.cxx:65
 TEveProjectionManager.cxx:66
 TEveProjectionManager.cxx:67
 TEveProjectionManager.cxx:68
 TEveProjectionManager.cxx:69
 TEveProjectionManager.cxx:70
 TEveProjectionManager.cxx:71
 TEveProjectionManager.cxx:72
 TEveProjectionManager.cxx:73
 TEveProjectionManager.cxx:74
 TEveProjectionManager.cxx:75
 TEveProjectionManager.cxx:76
 TEveProjectionManager.cxx:77
 TEveProjectionManager.cxx:78
 TEveProjectionManager.cxx:79
 TEveProjectionManager.cxx:80
 TEveProjectionManager.cxx:81
 TEveProjectionManager.cxx:82
 TEveProjectionManager.cxx:83
 TEveProjectionManager.cxx:84
 TEveProjectionManager.cxx:85
 TEveProjectionManager.cxx:86
 TEveProjectionManager.cxx:87
 TEveProjectionManager.cxx:88
 TEveProjectionManager.cxx:89
 TEveProjectionManager.cxx:90
 TEveProjectionManager.cxx:91
 TEveProjectionManager.cxx:92
 TEveProjectionManager.cxx:93
 TEveProjectionManager.cxx:94
 TEveProjectionManager.cxx:95
 TEveProjectionManager.cxx:96
 TEveProjectionManager.cxx:97
 TEveProjectionManager.cxx:98
 TEveProjectionManager.cxx:99
 TEveProjectionManager.cxx:100
 TEveProjectionManager.cxx:101
 TEveProjectionManager.cxx:102
 TEveProjectionManager.cxx:103
 TEveProjectionManager.cxx:104
 TEveProjectionManager.cxx:105
 TEveProjectionManager.cxx:106
 TEveProjectionManager.cxx:107
 TEveProjectionManager.cxx:108
 TEveProjectionManager.cxx:109
 TEveProjectionManager.cxx:110
 TEveProjectionManager.cxx:111
 TEveProjectionManager.cxx:112
 TEveProjectionManager.cxx:113
 TEveProjectionManager.cxx:114
 TEveProjectionManager.cxx:115
 TEveProjectionManager.cxx:116
 TEveProjectionManager.cxx:117
 TEveProjectionManager.cxx:118
 TEveProjectionManager.cxx:119
 TEveProjectionManager.cxx:120
 TEveProjectionManager.cxx:121
 TEveProjectionManager.cxx:122
 TEveProjectionManager.cxx:123
 TEveProjectionManager.cxx:124
 TEveProjectionManager.cxx:125
 TEveProjectionManager.cxx:126
 TEveProjectionManager.cxx:127
 TEveProjectionManager.cxx:128
 TEveProjectionManager.cxx:129
 TEveProjectionManager.cxx:130
 TEveProjectionManager.cxx:131
 TEveProjectionManager.cxx:132
 TEveProjectionManager.cxx:133
 TEveProjectionManager.cxx:134
 TEveProjectionManager.cxx:135
 TEveProjectionManager.cxx:136
 TEveProjectionManager.cxx:137
 TEveProjectionManager.cxx:138
 TEveProjectionManager.cxx:139
 TEveProjectionManager.cxx:140
 TEveProjectionManager.cxx:141
 TEveProjectionManager.cxx:142
 TEveProjectionManager.cxx:143
 TEveProjectionManager.cxx:144
 TEveProjectionManager.cxx:145
 TEveProjectionManager.cxx:146
 TEveProjectionManager.cxx:147
 TEveProjectionManager.cxx:148
 TEveProjectionManager.cxx:149
 TEveProjectionManager.cxx:150
 TEveProjectionManager.cxx:151
 TEveProjectionManager.cxx:152
 TEveProjectionManager.cxx:153
 TEveProjectionManager.cxx:154
 TEveProjectionManager.cxx:155
 TEveProjectionManager.cxx:156
 TEveProjectionManager.cxx:157
 TEveProjectionManager.cxx:158
 TEveProjectionManager.cxx:159
 TEveProjectionManager.cxx:160
 TEveProjectionManager.cxx:161
 TEveProjectionManager.cxx:162
 TEveProjectionManager.cxx:163
 TEveProjectionManager.cxx:164
 TEveProjectionManager.cxx:165
 TEveProjectionManager.cxx:166
 TEveProjectionManager.cxx:167
 TEveProjectionManager.cxx:168
 TEveProjectionManager.cxx:169
 TEveProjectionManager.cxx:170
 TEveProjectionManager.cxx:171
 TEveProjectionManager.cxx:172
 TEveProjectionManager.cxx:173
 TEveProjectionManager.cxx:174
 TEveProjectionManager.cxx:175
 TEveProjectionManager.cxx:176
 TEveProjectionManager.cxx:177
 TEveProjectionManager.cxx:178
 TEveProjectionManager.cxx:179
 TEveProjectionManager.cxx:180
 TEveProjectionManager.cxx:181
 TEveProjectionManager.cxx:182
 TEveProjectionManager.cxx:183
 TEveProjectionManager.cxx:184
 TEveProjectionManager.cxx:185
 TEveProjectionManager.cxx:186
 TEveProjectionManager.cxx:187
 TEveProjectionManager.cxx:188
 TEveProjectionManager.cxx:189
 TEveProjectionManager.cxx:190
 TEveProjectionManager.cxx:191
 TEveProjectionManager.cxx:192
 TEveProjectionManager.cxx:193
 TEveProjectionManager.cxx:194
 TEveProjectionManager.cxx:195
 TEveProjectionManager.cxx:196
 TEveProjectionManager.cxx:197
 TEveProjectionManager.cxx:198
 TEveProjectionManager.cxx:199
 TEveProjectionManager.cxx:200
 TEveProjectionManager.cxx:201
 TEveProjectionManager.cxx:202
 TEveProjectionManager.cxx:203
 TEveProjectionManager.cxx:204
 TEveProjectionManager.cxx:205
 TEveProjectionManager.cxx:206
 TEveProjectionManager.cxx:207
 TEveProjectionManager.cxx:208
 TEveProjectionManager.cxx:209
 TEveProjectionManager.cxx:210
 TEveProjectionManager.cxx:211
 TEveProjectionManager.cxx:212
 TEveProjectionManager.cxx:213
 TEveProjectionManager.cxx:214
 TEveProjectionManager.cxx:215
 TEveProjectionManager.cxx:216
 TEveProjectionManager.cxx:217
 TEveProjectionManager.cxx:218
 TEveProjectionManager.cxx:219
 TEveProjectionManager.cxx:220
 TEveProjectionManager.cxx:221
 TEveProjectionManager.cxx:222
 TEveProjectionManager.cxx:223
 TEveProjectionManager.cxx:224
 TEveProjectionManager.cxx:225
 TEveProjectionManager.cxx:226
 TEveProjectionManager.cxx:227
 TEveProjectionManager.cxx:228
 TEveProjectionManager.cxx:229
 TEveProjectionManager.cxx:230
 TEveProjectionManager.cxx:231
 TEveProjectionManager.cxx:232
 TEveProjectionManager.cxx:233
 TEveProjectionManager.cxx:234
 TEveProjectionManager.cxx:235
 TEveProjectionManager.cxx:236
 TEveProjectionManager.cxx:237
 TEveProjectionManager.cxx:238
 TEveProjectionManager.cxx:239
 TEveProjectionManager.cxx:240
 TEveProjectionManager.cxx:241
 TEveProjectionManager.cxx:242
 TEveProjectionManager.cxx:243
 TEveProjectionManager.cxx:244
 TEveProjectionManager.cxx:245
 TEveProjectionManager.cxx:246
 TEveProjectionManager.cxx:247
 TEveProjectionManager.cxx:248
 TEveProjectionManager.cxx:249
 TEveProjectionManager.cxx:250
 TEveProjectionManager.cxx:251
 TEveProjectionManager.cxx:252
 TEveProjectionManager.cxx:253
 TEveProjectionManager.cxx:254
 TEveProjectionManager.cxx:255
 TEveProjectionManager.cxx:256
 TEveProjectionManager.cxx:257
 TEveProjectionManager.cxx:258
 TEveProjectionManager.cxx:259
 TEveProjectionManager.cxx:260
 TEveProjectionManager.cxx:261
 TEveProjectionManager.cxx:262
 TEveProjectionManager.cxx:263
 TEveProjectionManager.cxx:264
 TEveProjectionManager.cxx:265
 TEveProjectionManager.cxx:266
 TEveProjectionManager.cxx:267
 TEveProjectionManager.cxx:268
 TEveProjectionManager.cxx:269
 TEveProjectionManager.cxx:270
 TEveProjectionManager.cxx:271
 TEveProjectionManager.cxx:272
 TEveProjectionManager.cxx:273
 TEveProjectionManager.cxx:274
 TEveProjectionManager.cxx:275
 TEveProjectionManager.cxx:276
 TEveProjectionManager.cxx:277
 TEveProjectionManager.cxx:278
 TEveProjectionManager.cxx:279
 TEveProjectionManager.cxx:280
 TEveProjectionManager.cxx:281
 TEveProjectionManager.cxx:282
 TEveProjectionManager.cxx:283
 TEveProjectionManager.cxx:284
 TEveProjectionManager.cxx:285
 TEveProjectionManager.cxx:286
 TEveProjectionManager.cxx:287
 TEveProjectionManager.cxx:288
 TEveProjectionManager.cxx:289
 TEveProjectionManager.cxx:290
 TEveProjectionManager.cxx:291
 TEveProjectionManager.cxx:292
 TEveProjectionManager.cxx:293
 TEveProjectionManager.cxx:294
 TEveProjectionManager.cxx:295
 TEveProjectionManager.cxx:296
 TEveProjectionManager.cxx:297
 TEveProjectionManager.cxx:298
 TEveProjectionManager.cxx:299
 TEveProjectionManager.cxx:300
 TEveProjectionManager.cxx:301
 TEveProjectionManager.cxx:302
 TEveProjectionManager.cxx:303
 TEveProjectionManager.cxx:304
 TEveProjectionManager.cxx:305
 TEveProjectionManager.cxx:306
 TEveProjectionManager.cxx:307
 TEveProjectionManager.cxx:308
 TEveProjectionManager.cxx:309
 TEveProjectionManager.cxx:310
 TEveProjectionManager.cxx:311
 TEveProjectionManager.cxx:312
 TEveProjectionManager.cxx:313
 TEveProjectionManager.cxx:314
 TEveProjectionManager.cxx:315
 TEveProjectionManager.cxx:316
 TEveProjectionManager.cxx:317
 TEveProjectionManager.cxx:318
 TEveProjectionManager.cxx:319
 TEveProjectionManager.cxx:320
 TEveProjectionManager.cxx:321
 TEveProjectionManager.cxx:322
 TEveProjectionManager.cxx:323
 TEveProjectionManager.cxx:324
 TEveProjectionManager.cxx:325
 TEveProjectionManager.cxx:326
 TEveProjectionManager.cxx:327
 TEveProjectionManager.cxx:328
 TEveProjectionManager.cxx:329
 TEveProjectionManager.cxx:330
 TEveProjectionManager.cxx:331
 TEveProjectionManager.cxx:332
 TEveProjectionManager.cxx:333
 TEveProjectionManager.cxx:334
 TEveProjectionManager.cxx:335
 TEveProjectionManager.cxx:336
 TEveProjectionManager.cxx:337
 TEveProjectionManager.cxx:338
 TEveProjectionManager.cxx:339
 TEveProjectionManager.cxx:340
 TEveProjectionManager.cxx:341
 TEveProjectionManager.cxx:342
 TEveProjectionManager.cxx:343
 TEveProjectionManager.cxx:344
 TEveProjectionManager.cxx:345
 TEveProjectionManager.cxx:346
 TEveProjectionManager.cxx:347
 TEveProjectionManager.cxx:348
 TEveProjectionManager.cxx:349
 TEveProjectionManager.cxx:350
 TEveProjectionManager.cxx:351
 TEveProjectionManager.cxx:352
 TEveProjectionManager.cxx:353
 TEveProjectionManager.cxx:354
 TEveProjectionManager.cxx:355
 TEveProjectionManager.cxx:356
 TEveProjectionManager.cxx:357
 TEveProjectionManager.cxx:358
 TEveProjectionManager.cxx:359
 TEveProjectionManager.cxx:360
 TEveProjectionManager.cxx:361
 TEveProjectionManager.cxx:362
 TEveProjectionManager.cxx:363
 TEveProjectionManager.cxx:364
 TEveProjectionManager.cxx:365
 TEveProjectionManager.cxx:366
 TEveProjectionManager.cxx:367
 TEveProjectionManager.cxx:368
 TEveProjectionManager.cxx:369
 TEveProjectionManager.cxx:370
 TEveProjectionManager.cxx:371
 TEveProjectionManager.cxx:372
 TEveProjectionManager.cxx:373
 TEveProjectionManager.cxx:374
 TEveProjectionManager.cxx:375
 TEveProjectionManager.cxx:376
 TEveProjectionManager.cxx:377
 TEveProjectionManager.cxx:378
 TEveProjectionManager.cxx:379
 TEveProjectionManager.cxx:380
 TEveProjectionManager.cxx:381
 TEveProjectionManager.cxx:382
 TEveProjectionManager.cxx:383
 TEveProjectionManager.cxx:384
 TEveProjectionManager.cxx:385
 TEveProjectionManager.cxx:386
 TEveProjectionManager.cxx:387
 TEveProjectionManager.cxx:388
 TEveProjectionManager.cxx:389
 TEveProjectionManager.cxx:390
 TEveProjectionManager.cxx:391
 TEveProjectionManager.cxx:392
 TEveProjectionManager.cxx:393
 TEveProjectionManager.cxx:394
 TEveProjectionManager.cxx:395
 TEveProjectionManager.cxx:396
 TEveProjectionManager.cxx:397
 TEveProjectionManager.cxx:398
 TEveProjectionManager.cxx:399
 TEveProjectionManager.cxx:400
 TEveProjectionManager.cxx:401
 TEveProjectionManager.cxx:402
 TEveProjectionManager.cxx:403
 TEveProjectionManager.cxx:404
 TEveProjectionManager.cxx:405
 TEveProjectionManager.cxx:406
 TEveProjectionManager.cxx:407
 TEveProjectionManager.cxx:408