ROOT logo
// @(#):$Id: TGeoPgonEditor.cxx 20882 2007-11-19 11:31:26Z rdm $
// Author: M.Gheata 

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

//////////////////////////////////////////////////////////////////////////
//                                                                      //
//  TGeoPgonEditor                                                      //
//                                                                      //
//////////////////////////////////////////////////////////////////////////
//Begin_Html
/*
<img src="gif/pgon_pic.gif">
*/
//End_Html
//Begin_Html
/*
<img src="gif/pgon_ed.jpg">
*/
//End_Html

#include "TGeoPgonEditor.h"
#include "TGeoTabManager.h"
#include "TGeoPgon.h"
#include "TGeoManager.h"
#include "TVirtualGeoPainter.h"
#include "TPad.h"
#include "TView.h"
#include "TGTab.h"
#include "TGComboBox.h"
#include "TGButton.h"
#include "TGTextEntry.h"
#include "TGNumberEntry.h"
#include "TGLabel.h"

ClassImp(TGeoPgonEditor)

enum ETGeoPgonWid {
   kPGON_NEDGES
};

//______________________________________________________________________________
TGeoPgonEditor::TGeoPgonEditor(const TGWindow *p, Int_t width,
                               Int_t height, UInt_t options, Pixel_t back)
   : TGeoPconEditor(p, width, height, options | kVerticalFrame, back)
{
   // Constructor for polycone editor
   fNedgesi = 0;
   CreateEdges();
   TGeoTabManager::MoveFrame(fDFrame, this);
   TGeoTabManager::MoveFrame(fBFrame, this);
   fENedges->Connect("ValueSet(Long_t)", "TGeoPgonEditor", this, "DoNedges()");
   fENedges->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoPgonEditor", this, "DoModified()");
}

//______________________________________________________________________________
TGeoPgonEditor::~TGeoPgonEditor()
{
// Destructor
   TGFrameElement *el;
   TIter next(GetList());
   while ((el = (TGFrameElement *)next())) {
      if (el->fFrame->IsComposite()) 
         TGeoTabManager::Cleanup((TGCompositeFrame*)el->fFrame);
   }
   Cleanup();   
}

//______________________________________________________________________________
void TGeoPgonEditor::SetModel(TObject* obj)
{
   // Connect to a given pcon.
   if (obj == 0 || (obj->IsA()!=TGeoPgon::Class())) {
      SetActive(kFALSE);
      return;                 
   } 
   fShape = (TGeoPcon*)obj;
   const char *sname = fShape->GetName();
   if (!strcmp(sname, fShape->ClassName())) fShapeName->SetText("-no_name");
   else fShapeName->SetText(sname);

   Int_t nsections = fShape->GetNz();
   fNsecti = nsections;
   fNedgesi = ((TGeoPgon*)fShape)->GetNedges();
   fENz->SetNumber(nsections);
   fENedges->SetNumber(fNedgesi);
   fEPhi1->SetNumber(fShape->GetPhi1());
   fPhi1i = fShape->GetPhi1();
   fEDPhi->SetNumber(fShape->GetDphi());
   fDPhii = fShape->GetDphi();
   CreateSections(nsections);
   UpdateSections();
   
   fApply->SetEnabled(kFALSE);
   fUndo->SetEnabled(kFALSE);
   
   if (fInit) ConnectSignals2Slots();
   SetActive();
}

//______________________________________________________________________________
void TGeoPgonEditor::DoApply()
{
// Slot for applying modifications.
   TGeoPgon *shape = (TGeoPgon*)fShape;
   const char *name = fShapeName->GetText();
   if (strcmp(name,fShape->GetName())) fShape->SetName(name);
   fApply->SetEnabled(kFALSE);
   fUndo->SetEnabled();
   if (!CheckSections()) return;
   // check if number of sections changed
   Bool_t recreate = kFALSE;
   Int_t nz = fENz->GetIntNumber();
   Int_t nedges = fENedges->GetIntNumber();
   Double_t phi1 = fEPhi1->GetNumber();
   Double_t dphi = fEDPhi->GetNumber();
   if (nz != fShape->GetNz()) recreate = kTRUE;
   TGeoPconSection *sect;
   Int_t isect;
   if (recreate) {
      Double_t *array = new Double_t[3*(nz+1)+1];
      array[0] = phi1;
      array[1] = dphi;
      array[2] = nedges;
      array[3] = nz;
      for (isect=0; isect<nz; isect++) {
         sect = (TGeoPconSection*)fSections->At(isect);
         array[4+3*isect] = sect->GetZ();
         array[5+3*isect] = sect->GetRmin();
         array[6+3*isect] = sect->GetRmax();
      }
      shape->SetDimensions(array);
      delete [] array;   
      if (fPad) {
         if (gGeoManager && gGeoManager->GetPainter() && gGeoManager->GetPainter()->IsPaintingShape()) {
            TView *view = fPad->GetView();
            if (!view) {
               fShape->Draw();
               fPad->GetView()->ShowAxis();
            } else {
               const Double_t *orig = fShape->GetOrigin();
               view->SetRange(orig[0]-fShape->GetDX(), orig[1]-fShape->GetDY(), orig[2]-fShape->GetDZ(),
                              orig[0]+fShape->GetDX(), orig[1]+fShape->GetDY(), orig[2]+fShape->GetDZ());
               Update();
            }                  
         } else Update();
      }
      return;
   }           
   // No need to call SetDimensions   
   if (TMath::Abs(phi1-fShape->GetPhi1())>1.e-6) fShape->Phi1() = phi1;
   if (TMath::Abs(dphi-fShape->GetDphi())>1.e-6) fShape->Dphi() = dphi;
   if (nedges != shape->GetNedges())             shape->SetNedges(nedges);
   for (isect=0; isect<fNsections; isect++) {
      sect = (TGeoPconSection*)fSections->At(isect);
      fShape->Z(isect) = sect->GetZ();
      fShape->Rmin(isect) = sect->GetRmin();
      fShape->Rmax(isect) = sect->GetRmax();
   }   
   shape->ComputeBBox();
   if (fPad) {
      if (gGeoManager && gGeoManager->GetPainter() && gGeoManager->GetPainter()->IsPaintingShape()) {
         TView *view = fPad->GetView();
         if (!view) {
            shape->Draw();
            fPad->GetView()->ShowAxis();
         } else {
            const Double_t *orig = fShape->GetOrigin();
            view->SetRange(orig[0]-fShape->GetDX(), orig[1]-fShape->GetDY(), orig[2]-fShape->GetDZ(),
                           orig[0]+fShape->GetDX(), orig[1]+fShape->GetDY(), orig[2]+fShape->GetDZ());
            Update();
         }                  
      } else Update();
   }   
}

//______________________________________________________________________________
void TGeoPgonEditor::DoUndo()
{
// Slot for undoing last operation.
   fENedges->SetNumber(fNedgesi);
   TGeoPconEditor::DoUndo();
}   

//______________________________________________________________________________
void TGeoPgonEditor::CreateEdges()
{
// Create number entry for Nedges.
   TGTextEntry *nef;
   TGCompositeFrame *f1 = new TGCompositeFrame(this, 155, 10, kHorizontalFrame | kFixedWidth);
   f1->AddFrame(new TGLabel(f1, "Nedges"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
   fENedges = new TGNumberEntry(f1, 0., 5, kPGON_NEDGES);
   fENedges->SetNumAttr(TGNumberFormat::kNEAPositive);
   fENedges->SetNumStyle(TGNumberFormat::kNESInteger);
   fENedges->Resize(100,fENedges->GetDefaultHeight());
   nef = (TGTextEntry*)fENedges->GetNumberEntry();
   nef->SetToolTipText("Enter the  number of edges of the polygon");
   fENedges->Associate(this);
   f1->AddFrame(fENedges, new TGLayoutHints(kLHintsRight, 2, 2, 2, 2));
   AddFrame(f1, new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
}

//______________________________________________________________________________
void TGeoPgonEditor::DoNedges()
{
// Change number of edges.
   Int_t nedges = fENedges->GetIntNumber();
   if (nedges < 3) {
      nedges = 3;
      fENedges->SetNumber(nedges);
   }   
   DoModified();
   if (!IsDelayed()) DoApply();
}   

 TGeoPgonEditor.cxx:1
 TGeoPgonEditor.cxx:2
 TGeoPgonEditor.cxx:3
 TGeoPgonEditor.cxx:4
 TGeoPgonEditor.cxx:5
 TGeoPgonEditor.cxx:6
 TGeoPgonEditor.cxx:7
 TGeoPgonEditor.cxx:8
 TGeoPgonEditor.cxx:9
 TGeoPgonEditor.cxx:10
 TGeoPgonEditor.cxx:11
 TGeoPgonEditor.cxx:12
 TGeoPgonEditor.cxx:13
 TGeoPgonEditor.cxx:14
 TGeoPgonEditor.cxx:15
 TGeoPgonEditor.cxx:16
 TGeoPgonEditor.cxx:17
 TGeoPgonEditor.cxx:18
 TGeoPgonEditor.cxx:19
 TGeoPgonEditor.cxx:20
 TGeoPgonEditor.cxx:21
 TGeoPgonEditor.cxx:22
 TGeoPgonEditor.cxx:23
 TGeoPgonEditor.cxx:24
 TGeoPgonEditor.cxx:25
 TGeoPgonEditor.cxx:26
 TGeoPgonEditor.cxx:27
 TGeoPgonEditor.cxx:28
 TGeoPgonEditor.cxx:29
 TGeoPgonEditor.cxx:30
 TGeoPgonEditor.cxx:31
 TGeoPgonEditor.cxx:32
 TGeoPgonEditor.cxx:33
 TGeoPgonEditor.cxx:34
 TGeoPgonEditor.cxx:35
 TGeoPgonEditor.cxx:36
 TGeoPgonEditor.cxx:37
 TGeoPgonEditor.cxx:38
 TGeoPgonEditor.cxx:39
 TGeoPgonEditor.cxx:40
 TGeoPgonEditor.cxx:41
 TGeoPgonEditor.cxx:42
 TGeoPgonEditor.cxx:43
 TGeoPgonEditor.cxx:44
 TGeoPgonEditor.cxx:45
 TGeoPgonEditor.cxx:46
 TGeoPgonEditor.cxx:47
 TGeoPgonEditor.cxx:48
 TGeoPgonEditor.cxx:49
 TGeoPgonEditor.cxx:50
 TGeoPgonEditor.cxx:51
 TGeoPgonEditor.cxx:52
 TGeoPgonEditor.cxx:53
 TGeoPgonEditor.cxx:54
 TGeoPgonEditor.cxx:55
 TGeoPgonEditor.cxx:56
 TGeoPgonEditor.cxx:57
 TGeoPgonEditor.cxx:58
 TGeoPgonEditor.cxx:59
 TGeoPgonEditor.cxx:60
 TGeoPgonEditor.cxx:61
 TGeoPgonEditor.cxx:62
 TGeoPgonEditor.cxx:63
 TGeoPgonEditor.cxx:64
 TGeoPgonEditor.cxx:65
 TGeoPgonEditor.cxx:66
 TGeoPgonEditor.cxx:67
 TGeoPgonEditor.cxx:68
 TGeoPgonEditor.cxx:69
 TGeoPgonEditor.cxx:70
 TGeoPgonEditor.cxx:71
 TGeoPgonEditor.cxx:72
 TGeoPgonEditor.cxx:73
 TGeoPgonEditor.cxx:74
 TGeoPgonEditor.cxx:75
 TGeoPgonEditor.cxx:76
 TGeoPgonEditor.cxx:77
 TGeoPgonEditor.cxx:78
 TGeoPgonEditor.cxx:79
 TGeoPgonEditor.cxx:80
 TGeoPgonEditor.cxx:81
 TGeoPgonEditor.cxx:82
 TGeoPgonEditor.cxx:83
 TGeoPgonEditor.cxx:84
 TGeoPgonEditor.cxx:85
 TGeoPgonEditor.cxx:86
 TGeoPgonEditor.cxx:87
 TGeoPgonEditor.cxx:88
 TGeoPgonEditor.cxx:89
 TGeoPgonEditor.cxx:90
 TGeoPgonEditor.cxx:91
 TGeoPgonEditor.cxx:92
 TGeoPgonEditor.cxx:93
 TGeoPgonEditor.cxx:94
 TGeoPgonEditor.cxx:95
 TGeoPgonEditor.cxx:96
 TGeoPgonEditor.cxx:97
 TGeoPgonEditor.cxx:98
 TGeoPgonEditor.cxx:99
 TGeoPgonEditor.cxx:100
 TGeoPgonEditor.cxx:101
 TGeoPgonEditor.cxx:102
 TGeoPgonEditor.cxx:103
 TGeoPgonEditor.cxx:104
 TGeoPgonEditor.cxx:105
 TGeoPgonEditor.cxx:106
 TGeoPgonEditor.cxx:107
 TGeoPgonEditor.cxx:108
 TGeoPgonEditor.cxx:109
 TGeoPgonEditor.cxx:110
 TGeoPgonEditor.cxx:111
 TGeoPgonEditor.cxx:112
 TGeoPgonEditor.cxx:113
 TGeoPgonEditor.cxx:114
 TGeoPgonEditor.cxx:115
 TGeoPgonEditor.cxx:116
 TGeoPgonEditor.cxx:117
 TGeoPgonEditor.cxx:118
 TGeoPgonEditor.cxx:119
 TGeoPgonEditor.cxx:120
 TGeoPgonEditor.cxx:121
 TGeoPgonEditor.cxx:122
 TGeoPgonEditor.cxx:123
 TGeoPgonEditor.cxx:124
 TGeoPgonEditor.cxx:125
 TGeoPgonEditor.cxx:126
 TGeoPgonEditor.cxx:127
 TGeoPgonEditor.cxx:128
 TGeoPgonEditor.cxx:129
 TGeoPgonEditor.cxx:130
 TGeoPgonEditor.cxx:131
 TGeoPgonEditor.cxx:132
 TGeoPgonEditor.cxx:133
 TGeoPgonEditor.cxx:134
 TGeoPgonEditor.cxx:135
 TGeoPgonEditor.cxx:136
 TGeoPgonEditor.cxx:137
 TGeoPgonEditor.cxx:138
 TGeoPgonEditor.cxx:139
 TGeoPgonEditor.cxx:140
 TGeoPgonEditor.cxx:141
 TGeoPgonEditor.cxx:142
 TGeoPgonEditor.cxx:143
 TGeoPgonEditor.cxx:144
 TGeoPgonEditor.cxx:145
 TGeoPgonEditor.cxx:146
 TGeoPgonEditor.cxx:147
 TGeoPgonEditor.cxx:148
 TGeoPgonEditor.cxx:149
 TGeoPgonEditor.cxx:150
 TGeoPgonEditor.cxx:151
 TGeoPgonEditor.cxx:152
 TGeoPgonEditor.cxx:153
 TGeoPgonEditor.cxx:154
 TGeoPgonEditor.cxx:155
 TGeoPgonEditor.cxx:156
 TGeoPgonEditor.cxx:157
 TGeoPgonEditor.cxx:158
 TGeoPgonEditor.cxx:159
 TGeoPgonEditor.cxx:160
 TGeoPgonEditor.cxx:161
 TGeoPgonEditor.cxx:162
 TGeoPgonEditor.cxx:163
 TGeoPgonEditor.cxx:164
 TGeoPgonEditor.cxx:165
 TGeoPgonEditor.cxx:166
 TGeoPgonEditor.cxx:167
 TGeoPgonEditor.cxx:168
 TGeoPgonEditor.cxx:169
 TGeoPgonEditor.cxx:170
 TGeoPgonEditor.cxx:171
 TGeoPgonEditor.cxx:172
 TGeoPgonEditor.cxx:173
 TGeoPgonEditor.cxx:174
 TGeoPgonEditor.cxx:175
 TGeoPgonEditor.cxx:176
 TGeoPgonEditor.cxx:177
 TGeoPgonEditor.cxx:178
 TGeoPgonEditor.cxx:179
 TGeoPgonEditor.cxx:180
 TGeoPgonEditor.cxx:181
 TGeoPgonEditor.cxx:182
 TGeoPgonEditor.cxx:183
 TGeoPgonEditor.cxx:184
 TGeoPgonEditor.cxx:185
 TGeoPgonEditor.cxx:186
 TGeoPgonEditor.cxx:187
 TGeoPgonEditor.cxx:188
 TGeoPgonEditor.cxx:189
 TGeoPgonEditor.cxx:190
 TGeoPgonEditor.cxx:191
 TGeoPgonEditor.cxx:192
 TGeoPgonEditor.cxx:193
 TGeoPgonEditor.cxx:194
 TGeoPgonEditor.cxx:195
 TGeoPgonEditor.cxx:196
 TGeoPgonEditor.cxx:197
 TGeoPgonEditor.cxx:198
 TGeoPgonEditor.cxx:199
 TGeoPgonEditor.cxx:200
 TGeoPgonEditor.cxx:201
 TGeoPgonEditor.cxx:202
 TGeoPgonEditor.cxx:203
 TGeoPgonEditor.cxx:204
 TGeoPgonEditor.cxx:205
 TGeoPgonEditor.cxx:206
 TGeoPgonEditor.cxx:207
 TGeoPgonEditor.cxx:208
 TGeoPgonEditor.cxx:209
 TGeoPgonEditor.cxx:210
 TGeoPgonEditor.cxx:211
 TGeoPgonEditor.cxx:212
 TGeoPgonEditor.cxx:213
 TGeoPgonEditor.cxx:214
 TGeoPgonEditor.cxx:215
 TGeoPgonEditor.cxx:216
 TGeoPgonEditor.cxx:217
 TGeoPgonEditor.cxx:218
 TGeoPgonEditor.cxx:219
 TGeoPgonEditor.cxx:220
 TGeoPgonEditor.cxx:221