ATLAS Offline Software
Loading...
Searching...
No Matches
VP1GuideLineSystem.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3*/
4
5
7// //
8// Implementation of class VP1GuideLineSystem //
9// //
10// Author: Thomas Kittelmann <Thomas.Kittelmann@cern.ch> //
11// //
12// Initial version: July 2007 //
13// //
15
28
31#include "VP1Base/VP1Msg.h"
32
33#include <Inventor/nodes/SoSeparator.h>
34#include <Inventor/nodes/SoPickStyle.h>
35#include <Inventor/nodes/SoComplexity.h>
36#include <Inventor/SbVec3f.h>
37
38#include <map>
39
83
84//_____________________________________________________________________________________
86 : IVP13DSystemSimple("Guides",
87 "System providing visual guides",
88 "Thomas.Kittelmann@cern.ch"), m_d(new Imp(this))
89{
90}
91
92
93//_____________________________________________________________________________________
98
99//_____________________________________________________________________________________
101{
102 m_d->controller = new GuideSysController(this);
103 return m_d->controller;
104}
105
106//_____________________________________________________________________________________
110
111//_____________________________________________________________________________________
112void VP1GuideLineSystem::buildPermanentSceneGraph(StoreGateSvc* /*detstore*/, SoSeparator *root)
113{
114 if(VP1Msg::verbose()){
115 messageVerbose("buildPermanentSceneGraph");
116 }
117 //No guidelines are pickable:
118 SoPickStyle *pickStyle = new SoPickStyle;
119 pickStyle->style=SoPickStyle::UNPICKABLE;
120 root->addChild(pickStyle);
121
122 //High complexity val for eta cones:
123 SoComplexity * complexity = new SoComplexity;
124 complexity->value.setValue(2.0f);
125 root->addChild(complexity);
126
127 //Floor:
128 m_d->floor = new VP1Floor(root,this);
129 connect(m_d->controller,SIGNAL(floorExtentChanged(const double&)),m_d->floor,SLOT(setExtent(const double&)));
130 m_d->floor->setExtent(m_d->controller->floorExtent());
131 connect(m_d->controller,SIGNAL(floorSpacingChanged(const double&)),m_d->floor,SLOT(setSpacing(const double&)));
132 m_d->floor->setSpacing(m_d->controller->floorSpacing());
133 connect(m_d->controller,SIGNAL(floorHeightChanged(const double&)),m_d->floor,SLOT(setVerticalPosition(const double&)));
134 m_d->floor->setVerticalPosition(m_d->controller->floorHeight());
135 connect(m_d->controller,SIGNAL(floorColourAndTranspChanged( const SbColor4f&)),m_d->floor,SLOT(setColourAndTransp(const SbColor4f&)));
136 m_d->floor->setColourAndTransp(m_d->controller->floorColourAndTransp());
137 connect(m_d->controller,SIGNAL(showFloorChanged(bool)),m_d->floor,SLOT(setShown(bool)));
138 m_d->floor->setShown(m_d->controller->showFloor());
139
140 //CartesianGrid:
141 m_d->cartesiangrid = new VP1CartesianGrid(root,this);
142 connect(m_d->controller,SIGNAL(gridExtentChanged(const double&)),m_d->cartesiangrid,SLOT(setExtent(const double&)));
143 m_d->cartesiangrid->setExtent(m_d->controller->gridExtent());
144 connect(m_d->controller,SIGNAL(gridSpacingChanged(const double&)),m_d->cartesiangrid,SLOT(setSpacing(const double&)));
145 m_d->cartesiangrid->setSpacing(m_d->controller->gridSpacing());
146 connect(m_d->controller,SIGNAL(gridColourAndTranspChanged( const SbColor4f&)),m_d->cartesiangrid,SLOT(setColourAndTransp(const SbColor4f&)));
147 m_d->cartesiangrid->setColourAndTransp(m_d->controller->gridColourAndTransp());
148 connect(m_d->controller,SIGNAL(showCartesianGridChanged(bool)),m_d->cartesiangrid,SLOT(setShown(bool)));
149 m_d->cartesiangrid->setShown(m_d->controller->showCartesianGrid());
150
151 //CylindricalGrid:
152 m_d->cylindricalgrid = new VP1CylindricalGrid(root,this);
153 connect(m_d->controller,SIGNAL(gridExtentChanged(const double&)),m_d->cylindricalgrid,SLOT(setExtent(const double&)));
154 m_d->cylindricalgrid->setExtent(m_d->controller->gridExtent());
155 connect(m_d->controller,SIGNAL(gridSpacingChanged(const double&)),m_d->cylindricalgrid,SLOT(setSpacing(const double&)));
156 m_d->cylindricalgrid->setSpacing(m_d->controller->gridSpacing());
157 connect(m_d->controller,SIGNAL(gridColourAndTranspChanged( const SbColor4f&)),m_d->cylindricalgrid,SLOT(setColourAndTransp(const SbColor4f&)));
158 m_d->cylindricalgrid->setColourAndTransp(m_d->controller->gridColourAndTransp());
159 connect(m_d->controller,SIGNAL(showCylindricalGridChanged(bool)),m_d->cylindricalgrid,SLOT(setShown(bool)));
160 m_d->cylindricalgrid->setShown(m_d->controller->showCylindricalGrid());
161
162 //Letters:
163 m_d->letters = new VP1Letters(m_d->controller->lettersMaterial(),root,this);
164 connect(m_d->controller,SIGNAL(lettersZPosChanged(const double&)),m_d->letters,SLOT(setZPos(const double&)));
165 m_d->letters->setZPos(m_d->controller->lettersZPos());
166 connect(m_d->controller,SIGNAL(lettersVerticalPosChanged(const double&)),m_d->letters,SLOT(setVerticalPosition(const double&)));
167 m_d->letters->setVerticalPosition(m_d->controller->lettersVerticalPos());
168 connect(m_d->controller,SIGNAL(showLettersChanged(bool)),m_d->letters,SLOT(setShown(bool)));
169 m_d->letters->setShown(m_d->controller->showLetters());
170
171 //People:
172 m_d->people = new VP1People(m_d->controller->peopleMaterial(),root,this);
173 // connect(m_d->controller,SIGNAL(peopleZPosChanged(const double&)),m_d->people,SLOT(setZPos(const double&)));
174 m_d->people->setZPos(m_d->controller->peopleZPos());
175 connect(m_d->controller,SIGNAL(peopleVerticalPosChanged(const double&)),m_d->people,SLOT(setVerticalPosition(const double&)));
176 m_d->people->setVerticalPosition(m_d->controller->peopleVerticalPos());
177 connect(m_d->controller,SIGNAL(showPeopleChanged(bool)),m_d->people,SLOT(setShown(bool)));
178 m_d->people->setShown(m_d->controller->showPeople());
179 connect(m_d->controller,SIGNAL(peopleColourAndTranspChanged( const SbColor4f&)),m_d->people,SLOT(setColourAndTransp(const SbColor4f&)));
180 m_d->people->setColourAndTransp(m_d->controller->peopleColourAndTransp());
181
182 //Coordinate axes:
183 m_d->coordinateaxes = new VP1CoordinateAxes(m_d->controller->xAxisMaterial(),
184 m_d->controller->yAxisMaterial(),
185 m_d->controller->zAxisMaterial(),
186 root,this);
187 connect(m_d->controller,SIGNAL(axesLengthChanged(const double&)),m_d->coordinateaxes,SLOT(setLength(const double&)));
188 m_d->coordinateaxes->setLength(m_d->controller->axesLength());
189 connect(m_d->controller,SIGNAL(axesPositionChanged(const SbVec3f&)),m_d->coordinateaxes,SLOT(setPosition(const SbVec3f&)));
190 m_d->coordinateaxes->setPosition(m_d->controller->axesPosition());
191 connect(m_d->controller,SIGNAL(relAxesThicknessChanged(const double&)),m_d->coordinateaxes,SLOT(setRelativeAxisThickness(const double&)));
192 m_d->coordinateaxes->setRelativeAxisThickness(m_d->controller->relAxesThickness());
193 connect(m_d->controller,SIGNAL(showAxesChanged(bool)),m_d->coordinateaxes,SLOT(setShown(bool)));
194 m_d->coordinateaxes->setShown(m_d->controller->showAxes());
195
196 //Eta cones:
197 m_d->etacone1 = new VP1EtaCone(m_d->controller->etaCone1Material(),root,this);
198 connect(m_d->controller,SIGNAL(etaExtentChanged(const double&)),m_d->etacone1,SLOT(setExtent(const double&)));
199 m_d->etacone1->setExtent(m_d->controller->etaExtent());
200 connect(m_d->controller,SIGNAL(etaConeValue1Changed(const double&)),m_d->etacone1,SLOT(setEtaValue(const double&)));
201 m_d->etacone1->setEtaValue(m_d->controller->etaConeValue1());
202 connect(m_d->controller,SIGNAL(showEtaCone1Changed(bool)),m_d->etacone1,SLOT(setShown(bool)));
203 m_d->etacone1->setShown(m_d->controller->showEtaCone1());
204
205 m_d->etacone2 = new VP1EtaCone(m_d->controller->etaCone2Material(),root,this);
206 connect(m_d->controller,SIGNAL(etaExtentChanged(const double&)),m_d->etacone2,SLOT(setExtent(const double&)));
207 m_d->etacone2->setExtent(m_d->controller->etaExtent());
208 connect(m_d->controller,SIGNAL(etaConeValue2Changed(const double&)),m_d->etacone2,SLOT(setEtaValue(const double&)));
209 m_d->etacone2->setEtaValue(m_d->controller->etaConeValue2());
210 connect(m_d->controller,SIGNAL(showEtaCone2Changed(bool)),m_d->etacone2,SLOT(setShown(bool)));
211 m_d->etacone2->setShown(m_d->controller->showEtaCone2());
212
213 m_d->etacone3 = new VP1EtaCone(m_d->controller->etaCone3Material(),root,this);
214 connect(m_d->controller,SIGNAL(etaExtentChanged(const double&)),m_d->etacone3,SLOT(setExtent(const double&)));
215 m_d->etacone3->setExtent(m_d->controller->etaExtent());
216 connect(m_d->controller,SIGNAL(etaConeValue3Changed(const double&)),m_d->etacone3,SLOT(setEtaValue(const double&)));
217 m_d->etacone3->setEtaValue(m_d->controller->etaConeValue3());
218 connect(m_d->controller,SIGNAL(showEtaCone3Changed(bool)),m_d->etacone3,SLOT(setShown(bool)));
219 m_d->etacone3->setShown(m_d->controller->showEtaCone3());
220
221 //Tracking Volumes:
222 m_d->trackingVolumes = new VP1TrackingVolumes(m_d->controller->idTrkVolumesMaterial(),
223 m_d->controller->caloTrkVolumesMaterial(),
224 m_d->controller->msTrkVolumesMaterial(),
225 m_d->controller->showInnerDetector(),
226 m_d->controller->showCalorimeters(),
227 m_d->controller->showMuonSpectrometer(),
228 root,this);
229 connect(m_d->controller,SIGNAL(showTrackingVolumesChanged(bool)),m_d->trackingVolumes,SLOT(setShown(bool)));
230 connect(m_d->controller,SIGNAL(showInnerDetectorChanged(bool)),m_d->trackingVolumes,SLOT(setShownID(bool)));
231 connect(m_d->controller,SIGNAL(showCalorimetersChanged(bool)),m_d->trackingVolumes,SLOT(setShownCalo(bool)));
232 connect(m_d->controller,SIGNAL(showMuonSpectrometerChanged(bool)),m_d->trackingVolumes,SLOT(setShownMS(bool)));
233 m_d->trackingVolumes->setShown(m_d->controller->showTrackingVolumes());
234
235 //Lines
236 m_d->lines = new VP1Lines(root, this);
237 connect(m_d->controller,SIGNAL(showLinesChanged(bool)),m_d->lines,SLOT(setShown(bool)));
238 m_d->lines->setShown(m_d->controller->showLines());
239 connect(m_d->controller,SIGNAL(lineDirectionChanged(const SbVec3f&)),m_d->lines,SLOT(setDirection(const SbVec3f&)));
240 m_d->lines->setDirection(m_d->controller->lineDirection());
241
242 SoSeparator * projsep = new SoSeparator;
243 root->addChild(projsep);
244
245 m_d->projsurfhelper_pixel = ProjectionSurfacesHelper::createPixelHelper(m_d->controller->pixelProjSurfMaterial(),projsep,this,this);
246 m_d->projsurfhelper_sct = ProjectionSurfacesHelper::createSCTHelper(m_d->controller->sctProjSurfMaterial(),projsep,this,this);
247 m_d->projsurfhelper_trt = ProjectionSurfacesHelper::createTRTHelper(m_d->controller->trtProjSurfMaterial(),projsep,this,this);
248
249 connect(m_d->controller,SIGNAL(shownPixelProjSurfacesChanged(InDetProjFlags::InDetProjPartsFlags)),
250 m_d->projsurfhelper_pixel,SLOT(setSurfaces(InDetProjFlags::InDetProjPartsFlags)));
251 m_d->projsurfhelper_pixel->setSurfaces(m_d->controller->shownPixelProjSurfaces());
252
253 connect(m_d->controller,SIGNAL(shownSCTProjSurfacesChanged(InDetProjFlags::InDetProjPartsFlags)),
254 m_d->projsurfhelper_sct,SLOT(setSurfaces(InDetProjFlags::InDetProjPartsFlags)));
255 m_d->projsurfhelper_sct->setSurfaces(m_d->controller->shownSCTProjSurfaces());
256
257 connect(m_d->controller,SIGNAL(shownTRTProjSurfacesChanged(InDetProjFlags::InDetProjPartsFlags)),
258 m_d->projsurfhelper_trt,SLOT(setSurfaces(InDetProjFlags::InDetProjPartsFlags)));
259 m_d->projsurfhelper_trt->setSurfaces(m_d->controller->shownTRTProjSurfaces());
260
261 connect(m_d->controller,SIGNAL(applicablePixelProjPartsChanged(InDetProjFlags::InDetProjPartsFlags)),this,SLOT(possiblyEmit_ApplicableProjectionsChanged()));
262 connect(m_d->controller,SIGNAL(applicableSCTProjPartsChanged(InDetProjFlags::InDetProjPartsFlags)),this,SLOT(possiblyEmit_ApplicableProjectionsChanged()));
263 connect(m_d->controller,SIGNAL(applicableTRTProjPartsChanged(InDetProjFlags::InDetProjPartsFlags)),this,SLOT(possiblyEmit_ApplicableProjectionsChanged()));
264
265 possiblyEmit_ApplicableProjectionsChanged();//fixme; late enough??? Problem with new delayed init: until guides are enabled, proper projections won't be known!!
266 //Thus, the channel should call this slot explicitly after making all connections!!!
267}
268
269//_____________________________________________________________________________________
271{
272 delete m_d->coordinateaxes; m_d->coordinateaxes = 0;
273 delete m_d->floor; m_d->floor = 0;
274 delete m_d->cartesiangrid; m_d->cartesiangrid = 0;
275 delete m_d->cylindricalgrid; m_d->cylindricalgrid = 0;
276 delete m_d->letters; m_d->letters = 0;
277 delete m_d->etacone1; m_d->etacone1 = 0;
278 delete m_d->etacone2; m_d->etacone2 = 0;
279 delete m_d->etacone3; m_d->etacone3 = 0;
280 delete m_d->projsurfhelper_pixel; m_d->projsurfhelper_pixel = 0;
281 delete m_d->projsurfhelper_sct; m_d->projsurfhelper_sct = 0;
282 delete m_d->projsurfhelper_trt; m_d->projsurfhelper_trt = 0;
283 delete m_d->trackingVolumes; m_d->trackingVolumes = 0;
284
285 m_d->controller=0;
286}
287
288
289//_____________________________________________________________________________________
291
293
294 VP1Serialise serialise(4/*version*/,this);
295 serialise.save(IVP13DSystemSimple::saveState());
296 serialise.save(m_d->controller->saveSettings());
297 serialise.disableUnsavedChecks();//We do the testing in the controller
298 return serialise.result();
299}
300
301//_____________________________________________________________________________________
303
304 VP1Deserialise state(ba,this);
305 if (state.version()<0||state.version()>4) {
306 message("Warning: State data in .vp1 file is in wrong format - ignoring!");
307 state.disableUnrestoredChecks();//We do the testing in the controller
308 return;
309 }
310 if (state.version()>=0&&state.version()<=3) {
311 message("Warning: State data in .vp1 file is in obsolete format - ignoring!");
312 state.disableUnrestoredChecks();//We do the testing in the controller
313 return;
314 }
316
318 m_d->controller->restoreSettings(state.restoreByteArray());
319 state.disableUnrestoredChecks();//We do the testing in the controller
320}
321
322//_____________________________________________________________________________________
323void VP1GuideLineSystem::setIDDetTypesUsingProjections( InDetProjFlags::DetTypeFlags f )
324{
326 if (!m_d->controller)
327 return;//if receiving signals after uncreate
328 if(VP1Msg::verbose()){
329 messageVerbose("Signal received in setIDDetTypesUsingProjections("+str(f)+") slot (from "
330 +QString(sender()?sender()->objectName():"NULL sender")+")");
331 }
332 m_d->sender2iddettypeswithprojs[sender()] = f;
333 InDetProjFlags::DetTypeFlags used(InDetProjFlags::NoDet);
334 std::map<QObject*,InDetProjFlags::DetTypeFlags>::iterator it, itE = m_d->sender2iddettypeswithprojs.end();
335 for (it=m_d->sender2iddettypeswithprojs.begin();it!=itE;++it)
336 used |= it->second;
337 m_d->controller->setInDetDetTypesUsingProjections(used);
338}
339
340//_____________________________________________________________________________________
342{
344 if (!m_d->controller)
345 return;//if receiving signals after uncreate
346 InDetProjFlags::InDetProjPartsFlags new_pixel = m_d->controller->applicablePixelProjParts();
347 InDetProjFlags::InDetProjPartsFlags new_sct = m_d->controller->applicableSCTProjParts();
348 InDetProjFlags::InDetProjPartsFlags new_trt = m_d->controller->applicableTRTProjParts();
349 if (m_d->lastemit_pixel==new_pixel&&m_d->lastemit_sct==new_sct&&m_d->lastemit_trt==new_trt)
350 return;
351 m_d->lastemit_pixel=new_pixel;
352 m_d->lastemit_sct=new_sct;
353 m_d->lastemit_trt=new_trt;
354 if(VP1Msg::verbose()){
355 messageVerbose("Emitting applicableProjectionsChanged("+str(m_d->lastemit_pixel)+", "+str(m_d->lastemit_sct)+", "+str(m_d->lastemit_trt)+")");
356 }
357 emit applicableProjectionsChanged( m_d->lastemit_pixel,m_d->lastemit_sct,m_d->lastemit_trt );
358}
static Double_t tc
IVP13DSystemSimple(const QString &name, const QString &information, const QString &contact_info)
void messageVerbose(const QString &) const
virtual void restoreFromState(QByteArray)
State state() const
void message(const QString &) const
virtual QByteArray saveState()
static ProjectionSurfacesHelper * createSCTHelper(SoMaterial *, SoSeparator *attachsep, QObject *parent=0, IVP1System *sys=0)
static ProjectionSurfacesHelper * createTRTHelper(SoMaterial *, SoSeparator *attachsep, QObject *parent=0, IVP1System *sys=0)
static ProjectionSurfacesHelper * createPixelHelper(SoMaterial *, SoSeparator *attachsep, QObject *parent=0, IVP1System *sys=0)
The Athena Transient Store API.
InDetProjFlags::InDetProjPartsFlags lastemit_sct
VP1GuideLineSystem * theclass
VP1CylindricalGrid * cylindricalgrid
VP1CartesianGrid * cartesiangrid
VP1CoordinateAxes * coordinateaxes
Imp(VP1GuideLineSystem *tc)
ProjectionSurfacesHelper * projsurfhelper_trt
InDetProjFlags::InDetProjPartsFlags lastemit_trt
ProjectionSurfacesHelper * projsurfhelper_pixel
InDetProjFlags::InDetProjPartsFlags lastemit_pixel
ProjectionSurfacesHelper * projsurfhelper_sct
VP1TrackingVolumes * trackingVolumes
GuideSysController * controller
std::map< QObject *, InDetProjFlags::DetTypeFlags > sender2iddettypeswithprojs
void possiblyEmit_ApplicableProjectionsChanged()
void buildEventSceneGraph(StoreGateSvc *, SoSeparator *)
void setIDDetTypesUsingProjections(InDetProjFlags::DetTypeFlags)
void buildPermanentSceneGraph(StoreGateSvc *detstore, SoSeparator *root)
void applicableProjectionsChanged(InDetProjFlags::InDetProjPartsFlags pixel, InDetProjFlags::InDetProjPartsFlags sct, InDetProjFlags::InDetProjPartsFlags trt)
void restoreFromState(QByteArray ba)
static bool verbose()
Definition VP1Msg.h:31
holding In fact this class is here in order to allow STL container for all features This class is sho...