59 ClassImp(TGeoVolumeEditor);
62 kVOL_NAME, kVOL_TITLE, kVOL_SHAPE_SELECT, kVOL_MEDIA_SELECT, kVOL_NODE_SELECT,
63 kVOL_VOL_SELECT, kVOL_MATRIX_SELECT, kVOL_EDIT_SHAPE, kVOL_EDIT_MEDIUM, kVOL_NODEID,
64 kVOL_APPLY, kVOL_CANCEL, kVOL_UNDO, kVOL_VISLEVEL, kVOL_DIVSTART, kVOL_DIVEND,
65 kVOL_DIVSTEP, kVOL_DIVN, kCAT_GENERAL, kCAT_DAUGHTERS, kCAT_DIVISION, kCAT_VIS,
72 TGeoVolumeEditor::TGeoVolumeEditor(
const TGWindow *p, Int_t width,
73 Int_t height, UInt_t options, Pixel_t back)
74 : TGeoGedFrame(p, width, height, options | kVerticalFrame, back)
84 fCategories =
new TGShutter(
this, kSunkenFrame);
85 TGCompositeFrame *container, *f1;
90 TGShutterItem *si =
new TGShutterItem(fCategories,
new TGHotString(
"Properties"),kCAT_GENERAL);
91 container = (TGCompositeFrame*)si->GetContainer();
92 container->SetBackgroundColor(GetDefaultFrameBackground());
93 fCategories->AddItem(si);
96 f1 =
new TGCompositeFrame(container, 155, 10, kHorizontalFrame | kFixedWidth);
97 f1->AddFrame(label =
new TGLabel(f1,
"Volume name"),
new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
98 f1->AddFrame(
new TGHorizontal3DLine(f1),
new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
99 gClient->GetColorByName(
"#ff0000", color);
100 label->SetTextColor(color);
101 container->AddFrame(f1,
new TGLayoutHints(kLHintsTop, 0, 0, 2, 0));
102 fVolumeName =
new TGTextEntry(container,
"", kVOL_NAME);
103 fVolumeName->SetDefaultSize(135, fVolumeName->GetDefaultHeight());
104 fVolumeName->SetToolTipText(
"Enter the volume name");
105 container->AddFrame(fVolumeName,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 3, 1, 2, 5));
108 f1 =
new TGCompositeFrame(container, 155, 10, kHorizontalFrame | kFixedWidth);
109 f1->AddFrame(label =
new TGLabel(f1,
"Shape and medium"),
new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
110 f1->AddFrame(
new TGHorizontal3DLine(f1),
new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
111 gClient->GetColorByName(
"#ff0000", color);
112 label->SetTextColor(color);
113 container->AddFrame(f1,
new TGLayoutHints(kLHintsTop, 0, 0, 10, 0));
114 f1 =
new TGCompositeFrame(container, 155, 30, kHorizontalFrame);
116 fLSelShape =
new TGLabel(f1,
"Select shape");
117 gClient->GetColorByName(
"#0000ff", color);
118 fLSelShape->SetTextColor(color);
119 fLSelShape->ChangeOptions(kSunkenFrame | kDoubleBorder);
120 f1->AddFrame(fLSelShape,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX | kLHintsExpandY, 1, 1, 2, 2));
121 fBSelShape =
new TGPictureButton(f1, fClient->GetPicture(
"rootdb_t.xpm"), kVOL_SHAPE_SELECT);
122 fBSelShape->SetToolTipText(
"Replace with one of the existing shapes");
123 fBSelShape->Associate(
this);
124 f1->AddFrame(fBSelShape,
new TGLayoutHints(kLHintsLeft, 1, 1, 2, 2));
125 fEditShape =
new TGTextButton(f1,
"Edit");
126 f1->AddFrame(fEditShape,
new TGLayoutHints(kLHintsLeft, 1, 1, 2, 2));
127 fEditShape->SetToolTipText(
"Edit selected shape");
128 fEditShape->Associate(
this);
129 container->AddFrame(f1,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 2, 2, 0, 0));
132 f1 =
new TGCompositeFrame(container, 155, 30, kHorizontalFrame);
134 fLSelMedium =
new TGLabel(f1,
"Select medium");
135 gClient->GetColorByName(
"#0000ff", color);
136 fLSelMedium->SetTextColor(color);
137 fLSelMedium->ChangeOptions(kSunkenFrame | kDoubleBorder);
138 f1->AddFrame(fLSelMedium,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX | kLHintsExpandY, 1, 1, 2, 2));
139 fBSelMedium =
new TGPictureButton(f1, fClient->GetPicture(
"rootdb_t.xpm"), kVOL_MEDIA_SELECT);
140 fBSelMedium->SetToolTipText(
"Replace with one of the existing media");
141 fBSelMedium->Associate(
this);
142 f1->AddFrame(fBSelMedium,
new TGLayoutHints(kLHintsLeft, 1, 1, 2, 2));
143 fEditMedium =
new TGTextButton(f1,
"Edit");
144 f1->AddFrame(fEditMedium,
new TGLayoutHints(kLHintsLeft, 1, 1, 2, 2));
145 fEditMedium->SetToolTipText(
"Edit selected medium");
146 fEditMedium->Associate(
this);
147 container->AddFrame(f1,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 2, 2, 0, 0));
150 si =
new TGShutterItem(fCategories,
new TGHotString(
"Daughters"),kCAT_DAUGHTERS);
151 container = (TGCompositeFrame*)si->GetContainer();
152 container->SetBackgroundColor(GetDefaultFrameBackground());
153 fCategories->AddItem(si);
156 f1 =
new TGCompositeFrame(container, 155, 10, kHorizontalFrame | kFixedWidth);
157 f1->AddFrame(label =
new TGLabel(f1,
"Existing daughters"),
new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
158 f1->AddFrame(
new TGHorizontal3DLine(f1),
new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
159 gClient->GetColorByName(
"#ff0000", color);
160 label->SetTextColor(color);
161 container->AddFrame(f1,
new TGLayoutHints(kLHintsTop, 0, 0, 2, 0));
163 f1 =
new TGCompositeFrame(container, 155, 30, kHorizontalFrame | kRaisedFrame);
164 fNodeList =
new TGComboBox(f1, kVOL_NODE_SELECT);
165 fNodeList->Resize(100, fVolumeName->GetDefaultHeight());
166 fNodeList->Associate(
this);
167 f1->AddFrame(fNodeList,
new TGLayoutHints(kLHintsLeft, 3, 1, 2, 5));
168 container->AddFrame(f1,
new TGLayoutHints(kLHintsLeft, 2, 2, 0, 2));
170 f1 =
new TGCompositeFrame(container, 155, 30, kHorizontalFrame | kSunkenFrame | kFixedWidth);
171 fEditMatrix =
new TGTextButton(f1,
"Position");
172 f1->AddFrame(fEditMatrix,
new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2));
173 fEditMatrix->SetToolTipText(
"Edit the position of selected node");
174 fEditMatrix->Associate(
this);
175 fRemoveNode =
new TGTextButton(f1,
"Remove");
176 f1->AddFrame(fRemoveNode,
new TGLayoutHints(kLHintsRight, 2, 2, 2, 2));
177 fRemoveNode->SetToolTipText(
"Remove the selected node. Cannot undo !)");
178 fRemoveNode->Associate(
this);
179 container->AddFrame(f1,
new TGLayoutHints(kLHintsLeft, 2, 2, 0, 2));
182 f1 =
new TGCompositeFrame(container, 155, 10, kHorizontalFrame | kFixedWidth);
183 f1->AddFrame(label =
new TGLabel(f1,
"Add daughter"),
new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
184 f1->AddFrame(
new TGHorizontal3DLine(f1),
new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
185 gClient->GetColorByName(
"#ff0000", color);
186 label->SetTextColor(color);
187 container->AddFrame(f1,
new TGLayoutHints(kLHintsTop, 0, 0, 10, 0));
190 f1 =
new TGCompositeFrame(container, 155, 30, kHorizontalFrame | kFixedWidth);
192 fLSelVolume =
new TGLabel(f1,
"Select volume");
193 gClient->GetColorByName(
"#0000ff", color);
194 fLSelVolume->SetTextColor(color);
195 fLSelVolume->ChangeOptions(kSunkenFrame | kDoubleBorder);
196 f1->AddFrame(fLSelVolume,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX | kLHintsExpandY, 1, 1, 2, 2));
197 fBSelVolume =
new TGPictureButton(f1, fClient->GetPicture(
"rootdb_t.xpm"), kVOL_VOL_SELECT);
198 fBSelVolume->SetToolTipText(
"Select one of the existing volumes");
199 fBSelVolume->Associate(
this);
200 f1->AddFrame(fBSelVolume,
new TGLayoutHints(kLHintsRight, 1, 1, 2, 2));
201 container->AddFrame(f1,
new TGLayoutHints(kLHintsLeft, 2, 2, 0, 2));
204 f1 =
new TGCompositeFrame(container, 155, 30, kHorizontalFrame | kFixedWidth);
206 fLSelMatrix =
new TGLabel(f1,
"Select matrix");
207 gClient->GetColorByName(
"#0000ff", color);
208 fLSelMatrix->SetTextColor(color);
209 fLSelMatrix->ChangeOptions(kSunkenFrame | kDoubleBorder);
210 f1->AddFrame(fLSelMatrix,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX | kLHintsExpandY, 1, 1, 2, 2));
211 fBSelMatrix =
new TGPictureButton(f1, fClient->GetPicture(
"rootdb_t.xpm"), kVOL_MATRIX_SELECT);
212 fBSelMatrix->SetToolTipText(
"Select one of the existing matrices");
213 fBSelMatrix->Associate(
this);
214 f1->AddFrame(fBSelMatrix,
new TGLayoutHints(kLHintsRight, 1, 1, 2, 2));
215 container->AddFrame(f1,
new TGLayoutHints(kLHintsLeft, 2, 2, 0, 2));
218 f1 =
new TGCompositeFrame(container, 155, 30, kHorizontalFrame | kFixedWidth);
219 f1->AddFrame(
new TGLabel(f1,
"Node id"),
new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
220 fCopyNumber =
new TGNumberEntry(f1, 0., 5, kVOL_NODEID);
221 fCopyNumber->SetNumStyle(TGNumberFormat::kNESInteger);
222 fCopyNumber->SetNumAttr(TGNumberFormat::kNEANonNegative);
223 fCopyNumber->Resize(20,fCopyNumber->GetDefaultHeight());
224 TGTextEntry *nef = (TGTextEntry*)fCopyNumber->GetNumberEntry();
225 nef->SetToolTipText(
"Enter node copy number");
226 fCopyNumber->Associate(
this);
227 f1->AddFrame(fCopyNumber,
new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2));
228 fAddNode =
new TGTextButton(f1,
"Add");
229 f1->AddFrame(fAddNode,
new TGLayoutHints(kLHintsRight, 2, 2, 2, 2));
230 fAddNode->Associate(
this);
231 container->AddFrame(f1,
new TGLayoutHints(kLHintsLeft, 2, 2, 0, 2));
234 si =
new TGShutterItem(fCategories,
new TGHotString(
"Visualization"),kCAT_VIS);
235 container = (TGCompositeFrame*)si->GetContainer();
236 container->SetBackgroundColor(GetDefaultFrameBackground());
237 fCategories->AddItem(si);
239 f1 =
new TGCompositeFrame(container, 155, 10, kHorizontalFrame | kFixedWidth);
240 f1->AddFrame(label =
new TGLabel(f1,
"Visibility"),
new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
241 f1->AddFrame(
new TGHorizontal3DLine(f1),
new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
244 container->AddFrame(f1,
new TGLayoutHints(kLHintsTop, 0, 0, 2, 0));
246 f1 =
new TGCompositeFrame(container, 155, 10, kHorizontalFrame | kFixedWidth | kSunkenFrame | kDoubleBorder);
247 fBVis[0] =
new TGCheckButton(f1,
"Volume");
248 fBVis[1] =
new TGCheckButton(f1,
"Nodes");
249 f1->AddFrame(fBVis[0],
new TGLayoutHints(kLHintsLeft, 2, 2, 0 ,0));
250 f1->AddFrame(fBVis[1],
new TGLayoutHints(kLHintsRight, 2, 2, 0 ,0));
251 container->AddFrame(f1,
new TGLayoutHints(kLHintsLeft, 2, 2, 0, 0));
253 f1 =
new TGCompositeFrame(container, 155, 10, kHorizontalFrame | kFixedWidth);
254 f1->AddFrame(
new TGLabel(f1,
"Depth"),
new TGLayoutHints(kLHintsLeft, 2, 2, 4, 0));
257 fEVisLevel =
new TGNumberEntry(f1, 0, 5, kVOL_VISLEVEL);
258 fEVisLevel->SetNumStyle(TGNumberFormat::kNESInteger);
259 fEVisLevel->SetNumAttr(TGNumberFormat::kNEAPositive);
260 fEVisLevel->Resize(40,fEVisLevel->GetDefaultHeight());
261 nef = (TGTextEntry*)fEVisLevel->GetNumberEntry();
262 nef->SetToolTipText(
"Set visibility level here");
263 fEVisLevel->SetNumber(3);
264 fEVisLevel->Associate(
this);
265 f1->AddFrame(fEVisLevel,
new TGLayoutHints(kLHintsLeft, 2, 2, 0 ,0));
266 fBAuto =
new TGCheckButton(f1,
"Auto");
267 f1->AddFrame(fBAuto,
new TGLayoutHints(kLHintsRight, 0, 0, 2, 0));
268 container->AddFrame(f1,
new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
270 TString stitle =
"View";
271 TGButtonGroup *bg =
new TGVButtonGroup(container, stitle);
272 fBView[0] =
new TGRadioButton(bg,
"All");
273 fBView[1] =
new TGRadioButton(bg,
"Leaves");
274 fBView[2] =
new TGRadioButton(bg,
"Only");
275 bg->SetRadioButtonExclusive();
277 container->AddFrame(bg,
new TGLayoutHints(kLHintsLeft, 2, 2, 0, 0));
279 f1 =
new TGCompositeFrame(container, 155, 10, kHorizontalFrame | kFixedWidth | kSunkenFrame | kDoubleBorder);
280 fBRaytrace =
new TGCheckButton(f1,
"Raytrace");
281 f1->AddFrame(fBRaytrace,
new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2));
282 container->AddFrame(f1,
new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
285 si =
new TGShutterItem(fCategories,
new TGHotString(
"Division"),kCAT_DIVISION);
286 container = (TGCompositeFrame*)si->GetContainer();
287 container->SetBackgroundColor(GetDefaultFrameBackground());
288 fCategories->AddItem(si);
290 f1 =
new TGCompositeFrame(container, 155, 10, kHorizontalFrame | kFixedWidth);
291 f1->AddFrame(label =
new TGLabel(f1,
"Division name"),
new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
292 f1->AddFrame(
new TGHorizontal3DLine(f1),
new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
293 gClient->GetColorByName(
"#ff0000", color);
294 label->SetTextColor(color);
295 container->AddFrame(f1,
new TGLayoutHints(kLHintsTop, 0, 0, 2, 0));
296 fDivName =
new TGTextEntry(container,
new TGTextBuffer(50), kDIV_NAME);
297 fDivName->Resize(135, fVolumeName->GetDefaultHeight());
298 fDivName->SetToolTipText(
"Enter the volume name");
299 container->AddFrame(fDivName,
new TGLayoutHints(kLHintsLeft, 3, 1, 2, 5));
302 f1 =
new TGCompositeFrame(container, 155, 10, kHorizontalFrame | kFixedWidth);
303 bg =
new TGVButtonGroup(f1, stitle);
304 fBDiv[0] =
new TGRadioButton(bg,
"Axis 1");
305 fBDiv[1] =
new TGRadioButton(bg,
"Axis 2");
306 fBDiv[2] =
new TGRadioButton(bg,
"Axis 3");
307 bg->Insert(fBDiv[0]);
308 bg->Insert(fBDiv[1]);
309 bg->Insert(fBDiv[2]);
310 bg->SetRadioButtonExclusive();
311 f1->AddFrame(bg,
new TGLayoutHints(kLHintsLeft, 2, 2, 0, 0));
312 fApplyDiv =
new TGTextButton(f1,
"Apply");
313 fApplyDiv->SetToolTipText(
"Apply new division settings");
314 f1->AddFrame(fApplyDiv,
new TGLayoutHints(kLHintsRight, 0, 2, 30, 0));
315 container->AddFrame(f1,
new TGLayoutHints(kLHintsLeft, 0, 0, 0, 0));
317 f1 =
new TGCompositeFrame(container, 155, 10, kHorizontalFrame | kFixedWidth);
318 f1->AddFrame(label =
new TGLabel(f1,
"Division parameters"),
new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
319 f1->AddFrame(
new TGHorizontal3DLine(f1),
new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
322 container->AddFrame(f1,
new TGLayoutHints(kLHintsTop, 0, 0, 2, 0));
323 f1 =
new TGCompositeFrame(container, 155, 10, kHorizontalFrame | kFixedWidth);
324 f1->AddFrame(label =
new TGLabel(f1,
"From"),
new TGLayoutHints(kLHintsLeft, 2, 2, 4, 0));
327 fEDivFrom =
new TGNumberEntry(f1, 0, 5, kVOL_DIVSTART);
330 fEDivFrom->Resize(100,fEDivFrom->GetDefaultHeight());
331 nef = (TGTextEntry*)fEDivFrom->GetNumberEntry();
332 nef->SetToolTipText(
"Set start value");
333 fEDivFrom->Associate(
this);
334 f1->AddFrame(fEDivFrom,
new TGLayoutHints(kLHintsRight, 2, 2, 0 ,0));
335 container->AddFrame(f1,
new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
337 f1 =
new TGCompositeFrame(container, 155, 10, kHorizontalFrame | kFixedWidth);
338 f1->AddFrame(label =
new TGLabel(f1,
"Step"),
new TGLayoutHints(kLHintsLeft, 2, 2, 4, 0));
341 fEDivStep =
new TGNumberEntry(f1, 0, 5, kVOL_DIVSTEP);
343 fEDivStep->SetNumAttr(TGNumberFormat::kNEANonNegative);
344 fEDivStep->Resize(100,fEDivStep->GetDefaultHeight());
345 nef = (TGTextEntry*)fEDivStep->GetNumberEntry();
346 nef->SetToolTipText(
"Set division step");
347 fEDivStep->Associate(
this);
348 f1->AddFrame(fEDivStep,
new TGLayoutHints(kLHintsRight, 2, 2, 0 ,0));
349 container->AddFrame(f1,
new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
351 f1 =
new TGCompositeFrame(container, 155, 10, kHorizontalFrame |kFixedWidth);
352 f1->AddFrame(label =
new TGLabel(f1,
"Nslices"),
new TGLayoutHints(kLHintsLeft, 2, 2, 4, 0));
355 fEDivN =
new TGNumberEntry(f1, 0, 5, kVOL_DIVN);
356 fEDivN->SetNumStyle(TGNumberFormat::kNESInteger);
357 fEDivN->SetNumAttr(TGNumberFormat::kNEAPositive);
358 fEDivN->Resize(100,fEDivN->GetDefaultHeight());
359 nef = (TGTextEntry*)fEDivN->GetNumberEntry();
360 nef->SetToolTipText(
"Set number of slices");
361 fEDivN->Associate(
this);
362 f1->AddFrame(fEDivN,
new TGLayoutHints(kLHintsRight, 2, 2, 0 ,0));
363 container->AddFrame(f1,
new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
366 fCategories->Resize(163,340);
367 AddFrame(fCategories,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX | kLHintsExpandY, 0, 0, 4, 4));
369 fCategories->Layout();
370 fCategories->SetDefaultSize(GetDefaultWidth(), GetDefaultHeight());
376 TGeoVolumeEditor::~TGeoVolumeEditor()
378 TGCompositeFrame *cont;
379 cont = (TGCompositeFrame*)fCategories->GetItem(
"Properties")->GetContainer();
380 TGeoTabManager::Cleanup(cont);
381 fCategories->GetItem(
"Properties")->SetCleanup(0);
382 cont = (TGCompositeFrame*)fCategories->GetItem(
"Daughters")->GetContainer();
383 TGeoTabManager::Cleanup(cont);
384 fCategories->GetItem(
"Daughters")->SetCleanup(0);
385 cont = (TGCompositeFrame*)fCategories->GetItem(
"Visualization")->GetContainer();
386 TGeoTabManager::Cleanup(cont);
387 fCategories->GetItem(
"Visualization")->SetCleanup(0);
388 cont = (TGCompositeFrame*)fCategories->GetItem(
"Division")->GetContainer();
389 TGeoTabManager::Cleanup(cont);
390 fCategories->GetItem(
"Division")->SetCleanup(0);
392 delete fBView[0];
delete fBView[1];
delete fBView[2];
393 delete fBDiv [0];
delete fBDiv [1];
delete fBDiv [2];
400 void TGeoVolumeEditor::ConnectSignals2Slots()
402 fVolumeName->Connect(
"TextChanged(const char *)",
"TGeoVolumeEditor",
this,
"DoVolumeName()");
403 fDivName->Connect(
"TextChanged(const char *)",
"TGeoVolumeEditor",
this,
"DoDivName()");
404 fEditMedium->Connect(
"Clicked()",
"TGeoVolumeEditor",
this,
"DoEditMedium()");
405 fEditShape->Connect(
"Clicked()",
"TGeoVolumeEditor",
this,
"DoEditShape()");
406 fEditMatrix->Connect(
"Clicked()",
"TGeoVolumeEditor",
this,
"DoEditMatrix()");
407 fAddNode->Connect(
"Clicked()",
"TGeoVolumeEditor",
this,
"DoAddNode()");
408 fRemoveNode->Connect(
"Clicked()",
"TGeoVolumeEditor",
this,
"DoRemoveNode()");
409 fBSelShape->Connect(
"Clicked()",
"TGeoVolumeEditor",
this,
"DoSelectShape()");
410 fBSelMedium->Connect(
"Clicked()",
"TGeoVolumeEditor",
this,
"DoSelectMedium()");
411 fBSelVolume->Connect(
"Clicked()",
"TGeoVolumeEditor",
this,
"DoSelectVolume()");
412 fBSelMatrix->Connect(
"Clicked()",
"TGeoVolumeEditor",
this,
"DoSelectMatrix()");
413 fBVis[0]->Connect(
"Clicked()",
"TGeoVolumeEditor",
this,
"DoVisVolume()");
414 fBVis[1]->Connect(
"Clicked()",
"TGeoVolumeEditor",
this,
"DoVisDaughters()");
415 fBAuto->Connect(
"Clicked()",
"TGeoVolumeEditor",
this,
"DoVisAuto()");
416 fEVisLevel->Connect(
"ValueSet(Long_t)",
"TGeoVolumeEditor",
this,
"DoVisLevel()");
417 fBView[0]->Connect(
"Clicked()",
"TGeoVolumeEditor",
this,
"DoViewAll()");
418 fBView[1]->Connect(
"Clicked()",
"TGeoVolumeEditor",
this,
"DoViewLeaves()");
419 fBView[2]->Connect(
"Clicked()",
"TGeoVolumeEditor",
this,
"DoViewOnly()");
420 fBDiv[0]->Connect(
"Clicked()",
"TGeoVolumeEditor",
this,
"DoDivSelAxis()");
421 fBDiv[1]->Connect(
"Clicked()",
"TGeoVolumeEditor",
this,
"DoDivSelAxis()");
422 fBDiv[2]->Connect(
"Clicked()",
"TGeoVolumeEditor",
this,
"DoDivSelAxis()");
423 fEDivFrom->Connect(
"ValueSet(Long_t)",
"TGeoVolumeEditor",
this,
"DoDivFromTo()");
424 fEDivStep->Connect(
"ValueSet(Long_t)",
"TGeoVolumeEditor",
this,
"DoDivStep()");
425 fEDivN->Connect(
"ValueSet(Long_t)",
"TGeoVolumeEditor",
this,
"DoDivN()");
426 fBRaytrace->Connect(
"Clicked()",
"TGeoVolumeEditor",
this,
"DoRaytrace()");
427 fApplyDiv->Connect(
"Clicked()",
"TGeoVolumeEditor",
this,
"DoApplyDiv()");
433 void TGeoVolumeEditor::SetModel(TObject* obj)
435 if (obj == 0 || !obj->InheritsFrom(TGeoVolume::Class())) {
439 fVolume = (TGeoVolume*)obj;
440 fGeometry = fVolume->GetGeoManager();
441 const char *vname = fVolume->GetName();
442 fVolumeName->SetText(vname);
443 fSelectedShape = fVolume->GetShape();
444 if (fSelectedShape) fLSelShape->SetText(fSelectedShape->GetName());
445 fSelectedMedium = fVolume->GetMedium();
446 if (fSelectedMedium) fLSelMedium->SetText(fSelectedMedium->GetName());
448 fNodeList->RemoveEntries(0, fNodeList->GetNumberOfEntries()+1);
449 TIter next2(fVolume->GetNodes());
452 while ((node=(TGeoNode*)next2()))
453 fNodeList->AddEntry(node->GetName(), icrt++);
454 fNodeList->Select(0);
455 fCopyNumber->SetNumber(fVolume->GetNdaughters()+1);
456 if (!fVolume->GetNdaughters() || fVolume->GetFinder()) {
457 fEditMatrix->SetEnabled(kFALSE);
458 fRemoveNode->SetEnabled(kFALSE);
460 fEditMatrix->SetEnabled(kTRUE);
461 fRemoveNode->SetEnabled(kTRUE);
463 if (!fSelectedVolume) fAddNode->SetEnabled(kFALSE);
464 if (fVolume->IsAssembly()) {
465 fBSelShape->SetEnabled(kFALSE);
466 fBSelMedium->SetEnabled(kFALSE);
468 fBVis[0]->SetState((fVolume->IsVisible())?kButtonDown:kButtonUp);
469 fBVis[1]->SetState((fVolume->IsVisibleDaughters())?kButtonDown:kButtonUp);
470 fBView[0]->SetState((fVolume->IsVisContainers())?kButtonDown:kButtonUp, kTRUE);
471 fBView[1]->SetState((fVolume->IsVisLeaves())?kButtonDown:kButtonUp, kTRUE);
472 fBView[2]->SetState((fVolume->IsVisOnly())?kButtonDown:kButtonUp, kTRUE);
473 fBRaytrace->SetState((fVolume->IsRaytracing())?kButtonDown:kButtonUp);
474 fBAuto->SetState((fGeometry->GetVisLevel())?kButtonUp:kButtonDown);
475 fEVisLevel->SetNumber(fGeometry->GetVisLevel());
476 fApplyDiv->SetEnabled(kFALSE);
477 if ((!fVolume->GetFinder() && fVolume->GetNdaughters()) || fVolume->IsAssembly()) {
478 fCategories->GetItem(
"Division")->GetButton()->SetEnabled(kFALSE);
480 fCategories->GetItem(
"Division")->GetButton()->SetEnabled(kTRUE);
481 Double_t start=0., step=0., end = 0.;
482 Int_t ndiv = 2, iaxis = 1;
484 for (Int_t i=0; i<3; i++) {
485 axis_name = fVolume->GetShape()->GetAxisName(i+1);
486 fBDiv[i]->SetText(axis_name);
489 if (fVolume->GetFinder()) {
490 fDivName->SetText(fVolume->GetNode(0)->GetVolume()->GetName());
491 iaxis = fVolume->GetFinder()->GetDivAxis();
492 start = fVolume->GetFinder()->GetStart();
493 step = fVolume->GetFinder()->GetStep();
494 ndiv = fVolume->GetFinder()->GetNdiv();
496 fDivName->SetText(
"Enter name");
497 fSelectedShape->GetAxisRange(iaxis,start,end);
500 fBDiv[iaxis-1]->SetState(kButtonDown, kTRUE);
501 fEDivFrom->SetNumber(start);
502 fEDivStep->SetNumber(step);
503 fEDivN->SetNumber(ndiv);
506 if (fInit) ConnectSignals2Slots();
508 if (GetParent()==fTabMgr->GetVolumeTab()) fTab->Layout();
514 void TGeoVolumeEditor::ActivateBaseClassEditors(TClass* cl)
516 fGedEditor->ExcludeClassEditor(TAttFill::Class());
517 TGedFrame::ActivateBaseClassEditors(cl);
523 void TGeoVolumeEditor::DoVolumeName()
525 fVolume->SetName(fVolumeName->GetText());
531 void TGeoVolumeEditor::DoSelectShape()
533 TGeoShape *shape = fSelectedShape;
534 new TGeoShapeDialog(fBSelShape, gClient->GetRoot(), 200,300);
535 fSelectedShape = (TGeoShape*)TGeoShapeDialog::GetSelected();
536 if (fSelectedShape) fLSelShape->SetText(fSelectedShape->GetName());
537 else fSelectedShape = shape;
543 void TGeoVolumeEditor::DoSelectMedium()
545 TGeoMedium *med = fSelectedMedium;
546 new TGeoMediumDialog(fBSelMedium, gClient->GetRoot(), 200,300);
547 fSelectedMedium = (TGeoMedium*)TGeoMediumDialog::GetSelected();
548 if (fSelectedMedium) fLSelMedium->SetText(fSelectedMedium->GetName());
549 else fSelectedMedium = med;
555 void TGeoVolumeEditor::DoSelectMatrix()
557 TGeoMatrix *matrix = fSelectedMatrix;
558 new TGeoMatrixDialog(fBSelMatrix, gClient->GetRoot(), 200,300);
559 fSelectedMatrix = (TGeoMatrix*)TGeoMatrixDialog::GetSelected();
560 if (fSelectedMatrix) fLSelMatrix->SetText(fSelectedMatrix->GetName());
561 else fSelectedMatrix = matrix;
567 void TGeoVolumeEditor::DoSelectVolume()
569 TGeoVolume *vol = fSelectedVolume;
570 new TGeoVolumeDialog(fBSelVolume, gClient->GetRoot(), 200,300);
571 fSelectedVolume = (TGeoVolume*)TGeoVolumeDialog::GetSelected();
572 if (fSelectedVolume) fLSelVolume->SetText(fSelectedVolume->GetName());
573 else fSelectedVolume = vol;
575 fAddNode->SetEnabled(kTRUE);
582 void TGeoVolumeEditor::DoEditShape()
584 fTabMgr->GetShapeEditor(fVolume->GetShape());
590 void TGeoVolumeEditor::DoEditMedium()
592 fTabMgr->GetMediumEditor(fVolume->GetMedium());
598 void TGeoVolumeEditor::DoEditMatrix()
600 if (!fVolume->GetNdaughters())
return;
601 Int_t i = fNodeList->GetSelected();
603 fTabMgr->GetMatrixEditor(fVolume->GetNode(i)->GetMatrix());
609 void TGeoVolumeEditor::DoAddNode()
611 if (!fSelectedVolume || fVolume->GetFinder())
return;
612 Int_t icopy = fCopyNumber->GetIntNumber();
613 fVolume->AddNode(fSelectedVolume, icopy, fSelectedMatrix);
614 Int_t nd = fVolume->GetNdaughters();
615 fNodeList->AddEntry(fVolume->GetNode(nd-1)->GetName(), nd-1);
616 fNodeList->Select(nd-1);
617 fCopyNumber->SetNumber(nd+1);
618 if (fSelectedMatrix) fEditMatrix->SetEnabled(kTRUE);
619 fRemoveNode->SetEnabled(kTRUE);
620 fGeometry->SetTopVisible();
621 fEditMatrix->SetEnabled(kTRUE);
622 fRemoveNode->SetEnabled(kTRUE);
629 void TGeoVolumeEditor::DoRemoveNode()
631 if (!fVolume->GetNdaughters() || fVolume->GetFinder()) {
632 fRemoveNode->SetEnabled(kFALSE);
633 fEditMatrix->SetEnabled(kFALSE);
636 Int_t i = fNodeList->GetSelected();
638 fVolume->RemoveNode(fVolume->GetNode(i));
639 fNodeList->RemoveEntries(0, fNodeList->GetNumberOfEntries()+1);
640 TIter next(fVolume->GetNodes());
643 while ((node=(TGeoNode*)next()))
644 fNodeList->AddEntry(node->GetName(), i++);
645 fNodeList->Select(0);
646 fCopyNumber->SetNumber(fVolume->GetNdaughters()+1);
647 if (!fVolume->GetNdaughters()) {
648 fRemoveNode->SetEnabled(kFALSE);
649 fEditMatrix->SetEnabled(kFALSE);
650 fCategories->GetItem(
"Division")->GetButton()->SetEnabled(kTRUE);
651 Double_t start=0., step=0., end=0.;
652 Int_t ndiv = 2, iaxis = 1;
653 fSelectedShape->GetAxisRange(iaxis,start,end);
655 fBDiv[iaxis-1]->SetState(kButtonDown, kTRUE);
656 fEDivFrom->SetNumber(start);
657 fEDivStep->SetNumber(step);
658 fEDivN->SetNumber(ndiv);
666 void TGeoVolumeEditor::DoVisVolume()
668 Bool_t on = (fBVis[0]->GetState()==kButtonDown)?kTRUE:kFALSE;
669 if (fVolume->IsVisible() == on)
return;
670 fVolume->SetVisibility(on);
677 void TGeoVolumeEditor::DoVisDaughters()
679 Bool_t on = (fBVis[1]->GetState()==kButtonDown)?kTRUE:kFALSE;
680 if (fVolume->IsVisibleDaughters() == on)
return;
681 fVolume->VisibleDaughters(on);
688 void TGeoVolumeEditor::DoVisAuto()
690 Bool_t on = (fBAuto->GetState()==kButtonDown)?kTRUE:kFALSE;
691 if ((fGeometry->GetVisLevel()==0) == on)
return;
692 if (on) fGeometry->SetVisLevel(0);
693 else fGeometry->SetVisLevel(fEVisLevel->GetIntNumber());
700 void TGeoVolumeEditor::DoVisLevel()
702 fBAuto->SetState(kButtonUp);
703 fGeometry->SetVisLevel(fEVisLevel->GetIntNumber());
710 void TGeoVolumeEditor::DoViewAll()
712 Bool_t on = (fBView[0]->GetState()==kButtonDown)?kTRUE:kFALSE;
714 if (fVolume->IsVisContainers() == on)
return;
715 if (fVolume->IsRaytracing()) {
716 fVolume->Raytrace(kFALSE);
717 fBRaytrace->SetState(kButtonUp);
719 fVolume->SetVisContainers(on);
726 void TGeoVolumeEditor::DoViewLeaves()
728 Bool_t on = (fBView[1]->GetState()==kButtonDown)?kTRUE:kFALSE;
730 if (fVolume->IsVisLeaves() == on)
return;
731 if (fVolume->IsRaytracing()) {
732 fVolume->Raytrace(kFALSE);
733 fBRaytrace->SetState(kButtonUp);
735 fVolume->SetVisLeaves(on);
742 void TGeoVolumeEditor::DoViewOnly()
744 Bool_t on = (fBView[2]->GetState()==kButtonDown)?kTRUE:kFALSE;
746 if (fVolume->IsVisOnly() == on)
return;
747 if (fVolume->IsRaytracing()) {
748 fVolume->Raytrace(kFALSE);
749 fBRaytrace->SetState(kButtonUp);
751 fVolume->SetVisOnly(on);
758 void TGeoVolumeEditor::DoRaytrace()
760 Bool_t on = (fBRaytrace->GetState()==kButtonDown)?kTRUE:kFALSE;
761 if (fVolume->IsRaytracing() == on)
return;
762 fVolume->Raytrace(on);
769 void TGeoVolumeEditor::DoDivName()
771 fApplyDiv->SetEnabled(kTRUE);
777 void TGeoVolumeEditor::DoDivSelAxis()
780 for (Int_t i=0; i<3; i++) {
781 if (fBDiv[i]->GetState()!=kButtonDown)
continue;
785 TGeoShape *shape = fVolume->GetShape();
787 fApplyDiv->SetEnabled(kFALSE);
791 shape->GetAxisRange(iaxis, xlo, xhi);
793 fApplyDiv->SetEnabled(kFALSE);
796 fEDivFrom->SetNumber(xlo);
797 fEDivStep->SetNumber(0);
798 fApplyDiv->SetEnabled(kTRUE);
804 void TGeoVolumeEditor::DoDivFromTo()
806 Double_t min, max, xlo, xhi, step;
809 for (Int_t i=0; i<3; i++) {
810 if (fBDiv[i]->GetState()!=kButtonDown)
continue;
814 TGeoShape *shape = fVolume->GetShape();
816 fApplyDiv->SetEnabled(kFALSE);
819 shape->GetAxisRange(iaxis, xlo, xhi);
821 fApplyDiv->SetEnabled(kFALSE);
824 min = fEDivFrom->GetNumber();
825 step = fEDivStep->GetNumber();
826 ndiv = fEDivN->GetIntNumber();
829 fEDivFrom->SetNumber(xlo);
831 max = min + ndiv*step;
834 step = (max-min)/ndiv;
835 fEDivStep->SetNumber(step);
838 fApplyDiv->SetEnabled(kFALSE);
841 fApplyDiv->SetEnabled(kTRUE);
847 void TGeoVolumeEditor::DoDivStep()
849 Double_t min, max, xlo, xhi;
851 for (Int_t i=0; i<3; i++) {
852 if (fBDiv[i]->GetState()!=kButtonDown)
continue;
856 TGeoShape *shape = fVolume->GetShape();
858 fApplyDiv->SetEnabled(kFALSE);
861 shape->GetAxisRange(iaxis, xlo, xhi);
863 fApplyDiv->SetEnabled(kFALSE);
866 min = fEDivFrom->GetNumber();
867 Double_t step = fEDivStep->GetNumber();
868 Int_t ndiv = fEDivN->GetIntNumber();
869 max = min + ndiv*step;
873 fApplyDiv->SetEnabled(kTRUE);
878 step = (max-min)/ndiv;
879 fEDivStep->SetNumber(step);
881 fApplyDiv->SetEnabled(kFALSE);
884 fApplyDiv->SetEnabled(kTRUE);
890 void TGeoVolumeEditor::DoDivN()
892 Double_t min, max, xlo, xhi;
894 for (Int_t i=0; i<3; i++) {
895 if (fBDiv[i]->GetState()!=kButtonDown)
continue;
899 TGeoShape *shape = fVolume->GetShape();
901 fApplyDiv->SetEnabled(kFALSE);
904 shape->GetAxisRange(iaxis, xlo, xhi);
906 fApplyDiv->SetEnabled(kFALSE);
909 Double_t step = fEDivStep->GetNumber();
912 fApplyDiv->SetEnabled(kTRUE);
915 Int_t ndiv = fEDivN->GetIntNumber();
916 min = fEDivFrom->GetNumber();
917 max = min + ndiv*step;
920 fApplyDiv->SetEnabled(kTRUE);
924 ndiv = (Int_t)((max-min)/step);
925 fEDivN->SetNumber(ndiv);
926 fApplyDiv->SetEnabled(kTRUE);
932 void TGeoVolumeEditor::DoApplyDiv()
934 Double_t xlo, xhi, step;
937 for (Int_t i=0; i<3; i++) {
938 if (fBDiv[i]->GetState()!=kButtonDown)
continue;
942 TGeoShape *shape = fVolume->GetShape();
944 fApplyDiv->SetEnabled(kFALSE);
947 shape->GetAxisRange(iaxis, xlo, xhi);
949 fApplyDiv->SetEnabled(kFALSE);
952 xlo = fEDivFrom->GetNumber();
953 step = fEDivStep->GetNumber();
954 ndiv = fEDivN->GetIntNumber();
955 TGeoPatternFinder *finder = fVolume->GetFinder();
958 TObjArray *nodes = fVolume->GetNodes();
962 fVolume->SetFinder(0);
964 fVolume->Divide(fDivName->GetText(), iaxis, ndiv, xlo, step);
965 fApplyDiv->SetEnabled(kFALSE);
966 fGeometry->SetTopVisible();