Geant4-11
G4VisModelManager.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27// Generic model manager. Manages models, associated
28// factories, messengers, command placement etc
29//
30// Jane Tinslay, March 2006
31//
32#ifndef G4VISMODELMANAGER_HH
33#define G4VISMODELMANAGER_HH
34
35#include "G4UImessenger.hh"
37#include "G4VisListManager.hh"
38#include "G4VModelFactory.hh"
39#include <vector>
40
41template <typename Model>
43
44public: // With description
45
46 // Useful typedef's
49
52
53 // Registration methods
54 void Register(Model*);
56
57 // Change/Retrieve "Current" object
58 void SetCurrent(const G4String&);
59 const Model* Current() const;
60
61 // Command placement
63
64 // Print factory and model data
65 void Print(std::ostream& ostr, const G4String& name="") const;
66
67 // Accessors
68 const List* ListManager() const;
69 const std::vector<Factory*>& FactoryList() const;
70
71private:
72
73 // Private copy constructor and assigment operator - copying and
74 // assignment not allowed. Keeps Coverity happy.
77
78 // Data members
81 std::vector<Factory*> fFactoryList;
82 std::vector<G4UImessenger*> fMessengerList;
83
84};
85
86template <typename Model>
88 :fPlacement(placement)
89 ,fpModelList(new List)
90{}
91
92template <typename Model>
94{
95 // Cleanup
96 std::vector<G4UImessenger*>::iterator iterMsgr = fMessengerList.begin();
97
98 while (iterMsgr != fMessengerList.end()) {
99 delete *iterMsgr;
100 iterMsgr++;
101 }
102
103 typename std::vector<Factory*>::iterator iterFactory = fFactoryList.begin();
104
105 while (iterFactory != fFactoryList.end()) {
106 delete *iterFactory;
107 iterFactory++;
108 }
109
110 delete fpModelList;
111}
112
113template <typename Model>
114void
116{
117 fpModelList->Register(model);
118}
119
120template <typename Model>
121void
123{
124 // Assume ownership
125 fFactoryList.push_back(factory);
126
127 // Generate "create" command for this factory
128 fMessengerList.push_back(new G4VisCommandModelCreate<Factory>(factory, fPlacement));
129}
130
131template <typename Model>
132void
134{
135 fpModelList->SetCurrent(model);
136}
137
138template <typename Model>
139const Model*
141{
142 return fpModelList->Current();
143}
144
145template <typename Model>
148{
149 return fPlacement;
150}
151
152template <typename Model>
153void
154G4VisModelManager<Model>::Print(std::ostream& ostr, const G4String& name) const
155{
156 ostr<<"Registered model factories:"<<std::endl;
157
158 typename std::vector<Factory*>::const_iterator iter = fFactoryList.begin();
159
160 while (iter != fFactoryList.end()) {
161 (*iter)->Print(ostr);
162 iter++;
163 }
164
165 if (0 == fFactoryList.size()) ostr<<" None"<<std::endl;
166
167 ostr<<std::endl;
168 ostr<<"Registered models: "<<std::endl;
169
170 fpModelList->Print(ostr, name);
171}
172
173template <typename Model>
176{
177 return fpModelList;
178}
179
180template <typename Model>
181const std::vector<G4VModelFactory<Model>*>&
183{
184 return fFactoryList;
185}
186
187#endif
const List * ListManager() const
const Model * Current() const
std::vector< Factory * > fFactoryList
G4VisListManager< Model > List
void SetCurrent(const G4String &)
std::vector< G4UImessenger * > fMessengerList
void Register(Factory *)
G4VisModelManager(const G4VisModelManager &)
G4VisModelManager(const G4String &)
void Register(Model *)
const std::vector< Factory * > & FactoryList() const
G4String Placement() const
G4VModelFactory< Model > Factory
void Print(std::ostream &ostr, const G4String &name="") const
virtual ~G4VisModelManager()
G4VisModelManager & operator=(const G4VisModelManager &)
const char * name(G4int ptype)
factory
Definition: test.py:55