40 typedef TGL5DPainter::SurfIter_t SurfIter_t;
41 typedef std::map<Int_t, SurfIter_t> IterMap_t;
42 typedef IterMap_t::iterator IterMapIter_t;
49 class TGL5DDataSetEditor::TGL5DEditorPrivate {
52 Bool_t IsValid(Int_t index)
const
54 return fIterators.find(index) != fIterators.end();
58 ClassImp(TGL5DDataSetEditor);
62 TGL5DDataSetEditor::TGL5DDataSetEditor(
const TGWindow *p, Int_t width, Int_t height,
63 UInt_t options, Pixel_t back) :
64 TGedFrame(p, width, height, options | kVerticalFrame, back),
111 fHidden =
new TGL5DEditorPrivate;
116 TGL5DDataSetEditor::~TGL5DDataSetEditor()
125 void TGL5DDataSetEditor::ConnectSignals2Slots()
128 fShowBoxCut->Connect(
"Toggled(Bool_t)",
"TGL5DDataSetEditor",
this,
"BoxCutToggled()");
129 fAlpha->Connect(
"ValueChanged(Long_t)",
"TGL5DDataSetEditor",
this,
"AlphaChanged()");
130 fAlpha->Connect(
"ValueSet(Long_t)",
"TGL5DDataSetEditor",
this,
"AlphaChanged()");
131 fNumberOfPlanes->Connect(
"ValueChanged(Long_t)",
"TGL5DDataSetEditor",
this,
"NContoursChanged()");
132 fNumberOfPlanes->Connect(
"ValueSet(Long_t)",
"TGL5DDataSetEditor",
this,
"NContoursChanged()");
133 fApplyPlanes->Connect(
"Clicked()",
"TGL5DDataSetEditor",
this,
"ApplyPlanes()");
134 fApplyAlpha->Connect(
"Clicked()",
"TGL5DDataSetEditor",
this,
"ApplyAlpha()");
137 fNCellsXEntry->Connect(
"ValueSet(Long_t)",
"TGL5DDataSetEditor",
this,
"GridParametersChanged()");
138 fNCellsXEntry->Connect(
"ValueChanged(Long_t)",
"TGL5DDataSetEditor",
this,
"GridParametersChanged()");
140 fNCellsYEntry->Connect(
"ValueSet(Long_t)",
"TGL5DDataSetEditor",
this,
"GridParametersChanged()");
141 fNCellsZEntry->Connect(
"ValueSet(Long_t)",
"TGL5DDataSetEditor",
this,
"GridParametersChanged()");
143 fXRangeSlider->Connect(
"PositionChanged()",
"TGL5DDataSetEditor",
this,
"XSliderChanged()");
144 fXRangeSliderMin->Connect(
"ReturnPressed()",
"TGL5DDataSetEditor",
this,
"XSliderSetMin()");
145 fXRangeSliderMax->Connect(
"ReturnPressed()",
"TGL5DDataSetEditor",
this,
"XSliderSetMax()");
147 fYRangeSlider->Connect(
"PositionChanged()",
"TGL5DDataSetEditor",
this,
"YSliderChanged()");
148 fYRangeSliderMin->Connect(
"ReturnPressed()",
"TGL5DDataSetEditor",
this,
"YSliderSetMin()");
149 fYRangeSliderMax->Connect(
"ReturnPressed()",
"TGL5DDataSetEditor",
this,
"YSliderSetMax()");
151 fZRangeSlider->Connect(
"PositionChanged()",
"TGL5DDataSetEditor",
this,
"ZSliderChanged()");
152 fZRangeSliderMin->Connect(
"ReturnPressed()",
"TGL5DDataSetEditor",
this,
"ZSliderSetMin()");
153 fZRangeSliderMax->Connect(
"ReturnPressed()",
"TGL5DDataSetEditor",
this,
"ZSliderSetMax()");
155 fCancelGridBtn->Connect(
"Pressed()",
"TGL5DDataSetEditor",
this,
"RollbackGridParameters()");
156 fOkGridBtn->Connect(
"Pressed()",
"TGL5DDataSetEditor",
this,
"ApplyGridParameters()");
159 fIsoList->Connect(
"Selected(Int_t)",
"TGL5DDataSetEditor",
this,
"SurfaceSelected(Int_t)");
160 fIsoList->GetContainer()->RemoveInput(kKeyPressMask);
162 fHighlightCheck->Connect(
"Clicked()",
"TGL5DDataSetEditor",
this,
"HighlightClicked()");
163 fVisibleCheck->Connect(
"Clicked()",
"TGL5DDataSetEditor",
this,
"VisibleClicked()");
164 fSurfColorSelect->Connect(
"ColorSelected(Pixel_t)",
"TGL5DDataSetEditor",
this,
"ColorChanged(Pixel_t)");
165 fSurfAlphaSlider->Connect(
"PositionChanged(Int_t)",
"TGL5DDataSetEditor",
this,
"AlphaChanged(Int_t)");
166 fSurfRemoveBtn->Connect(
"Pressed()",
"TGL5DDataSetEditor",
this,
"RemoveSurface()");
168 fAddNewIsoBtn->Connect(
"Pressed()",
"TGL5DDataSetEditor",
this,
"AddNewSurface()");
181 void make_slider_range_entries(TGCompositeFrame *parent, TGNumberEntryField *&minEntry,
182 const TString &minToolTip, TGNumberEntryField *&maxEntry,
183 const TString &maxToolTip)
185 TGCompositeFrame *frame =
new TGCompositeFrame(parent, 80, 20, kHorizontalFrame);
187 minEntry =
new TGNumberEntryField(frame, -1, 0., TGNumberFormat::kNESRealThree,
188 TGNumberFormat::kNEAAnyNumber);
189 minEntry->SetToolTipText(minToolTip.Data());
190 minEntry->Resize(57, 20);
191 frame->AddFrame(minEntry,
new TGLayoutHints(kLHintsLeft, 0, 0, 0, 0));
193 maxEntry =
new TGNumberEntryField(frame, -1, 0., TGNumberFormat::kNESRealThree,
194 TGNumberFormat::kNEAAnyNumber);
195 maxEntry->SetToolTipText(maxToolTip.Data());
196 maxEntry->Resize(57, 20);
197 frame->AddFrame(maxEntry,
new TGLayoutHints(kLHintsLeft, 0, 0, 0, 0));
198 parent->AddFrame(frame,
new TGLayoutHints(kLHintsTop, 5, 0, 0, 0));
203 TGHorizontalFrame *make_labeled_hframe(TGCompositeFrame *p,
const char *text)
205 TGHorizontalFrame *frame =
new TGHorizontalFrame(p);
206 TGLabel *label =
new TGLabel(frame, text);
207 frame->AddFrame(label,
new TGLayoutHints(kLHintsLeft | kLHintsBottom, 0, 0, 0));
208 p->AddFrame(frame,
new TGLayoutHints(kLHintsLeft, 0, 0, 1, 0));
215 TGDoubleHSlider *make_double_hslider(TGCompositeFrame *parent,
const char *labelName)
217 TGCompositeFrame *sliderFrame =
new TGCompositeFrame(parent, 80, 20, kHorizontalFrame);
218 TGLabel *sliderLabel =
new TGLabel(sliderFrame, labelName);
219 sliderFrame->AddFrame(sliderLabel,
220 new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 2, 2, 2, 2));
221 TGDoubleHSlider *slider =
new TGDoubleHSlider(sliderFrame, 1, 2);
222 slider->Resize(110, 20);
224 sliderFrame->AddFrame(slider,
new TGLayoutHints(kLHintsLeft));
225 parent->AddFrame(sliderFrame,
new TGLayoutHints(kLHintsTop, 2, 2, 2, 2));
235 void TGL5DDataSetEditor::CreateStyleTab()
237 TGHorizontalFrame *f;
239 fShowBoxCut =
new TGCheckButton(
this,
"Show Box Cut");
240 fShowBoxCut->SetToolTipText(
"Box cut. When attached to a plot, cuts away a part of it");
241 AddFrame(fShowBoxCut,
new TGLayoutHints(kLHintsLeft, 5, 2, 2, 2));
243 MakeTitle(
"isosurfaces");
244 f =
new TGHorizontalFrame(
this, 200, 50);
245 f->AddFrame(
new TGLabel(f,
"Number:"),
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 5, 2, 2, 2));
246 fNumberOfPlanes =
new TGNumberEntry(f, 0, 3, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative,
247 TGNumberFormat::kNELLimitMinMax, 1, 200);
248 fNumberOfPlanes->GetNumberEntry()->SetToolTipText(
"Set number of isosurfaces");
249 f->AddFrame(fNumberOfPlanes,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 2, 2, 2, 2));
250 fApplyPlanes =
new TGTextButton(f,
" Apply ");
251 f->AddFrame(fApplyPlanes,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 2, 2, 2));
252 AddFrame(f,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 0, 0, 0, 0));
256 f =
new TGHorizontalFrame(
this, 200, 50);
257 f->AddFrame(
new TGLabel(f,
"Value:"),
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 5, 2, 2, 2));
258 fAlpha =
new TGNumberEntry(f, 0, 1, -1, TGNumberFormat::kNESRealThree, TGNumberFormat::kNEANonNegative,
259 TGNumberFormat::kNELLimitMinMax, 0.1, 0.5);
260 fAlpha->GetNumberEntry()->SetToolTipText(
"Value of alpha parameter");
261 f->AddFrame(fAlpha,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 2, 2, 2, 2));
262 fApplyAlpha =
new TGTextButton(f,
" Apply ");
263 f->AddFrame(fApplyAlpha,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 2, 2, 2));
264 AddFrame(f,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 0, 0, 0, 0));
265 fApplyAlpha->SetState(kButtonDisabled);
267 fLogScale =
new TGCheckButton(
this,
"Log Scale");
268 AddFrame(fLogScale,
new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 2, 2, 2));
270 AddFrame(
new TGLabel(
this,
"Slide Range:"),
new TGLayoutHints(kLHintsLeft, 5, 2, 2, 2));
271 fSlideRange =
new TGDoubleHSlider(
this, 200, kDoubleScaleDownRight);
272 AddFrame(fSlideRange,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 5, 2, 2, 2));
279 void TGL5DDataSetEditor::CreateGridTab()
281 TGCompositeFrame *tabFrame = CreateEditorTabSubFrame(
"Grid");
283 TGGroupFrame *gridGroup =
new TGGroupFrame(tabFrame,
"Grid parameters", kVerticalFrame);
285 const UInt_t min = 10, max = 300;
286 const UInt_t nDigits = 4;
288 TGHorizontalFrame *frame = make_labeled_hframe(gridGroup,
"Cells along X:");
289 fNCellsXEntry =
new TGNumberEntry(frame, 0., nDigits, -1, TGNumberFormat::kNESInteger,
290 TGNumberFormat::kNEAPositive, TGNumberFormat::kNELLimitMinMax,
292 frame->AddFrame(fNCellsXEntry,
293 new TGLayoutHints(kLHintsLeft | kLHintsExpandX | kLHintsBottom, 2, 0, 0));
295 frame = make_labeled_hframe(gridGroup,
"Cells along Y:");
296 fNCellsYEntry =
new TGNumberEntry(frame, 0., nDigits, -1, TGNumberFormat::kNESInteger,
297 TGNumberFormat::kNEAPositive, TGNumberFormat::kNELLimitMinMax,
299 frame->AddFrame(fNCellsYEntry,
300 new TGLayoutHints(kLHintsLeft | kLHintsExpandX | kLHintsBottom, 2, 0, 0));
302 frame = make_labeled_hframe(gridGroup,
"Cells along Z:");
303 fNCellsZEntry =
new TGNumberEntry(frame, 0., nDigits, -1, TGNumberFormat::kNESInteger,
304 TGNumberFormat::kNEAPositive, TGNumberFormat::kNELLimitMinMax,
306 frame->AddFrame(fNCellsZEntry,
307 new TGLayoutHints(kLHintsLeft | kLHintsExpandX | kLHintsBottom, 2, 0, 0));
308 tabFrame->AddFrame(gridGroup,
new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 2, 3, 3, 0));
311 TGGroupFrame *rangeGroup =
new TGGroupFrame(tabFrame,
"Ranges", kVerticalFrame);
313 fXRangeSlider = make_double_hslider(rangeGroup,
"X:");
314 make_slider_range_entries(rangeGroup, fXRangeSliderMin,
"Set the minimum value of the x-axis",
315 fXRangeSliderMax,
"Set the maximum value of the x-axis");
316 fYRangeSlider = make_double_hslider(rangeGroup,
"Y:");
317 make_slider_range_entries(rangeGroup, fYRangeSliderMin,
"Set the minimum value of the y-axis",
318 fYRangeSliderMax,
"Set the maximum value of the y-axis");
319 fZRangeSlider = make_double_hslider(rangeGroup,
"Z:");
320 make_slider_range_entries(rangeGroup, fZRangeSliderMin,
"Set the minimum value of the z-axis",
321 fZRangeSliderMax,
"Set the maximum value of the z-axis");
323 tabFrame->AddFrame(rangeGroup,
new TGLayoutHints(kLHintsTop | kLHintsCenterX | kLHintsExpandX, 2, 3, 0, 0));
326 TGHorizontalFrame *horizontalFrame =
new TGHorizontalFrame(tabFrame, 200, 50);
327 fCancelGridBtn =
new TGTextButton(horizontalFrame,
" Cancel ");
328 horizontalFrame->AddFrame(fCancelGridBtn,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 2, 2, 2));
329 fOkGridBtn =
new TGTextButton(horizontalFrame,
" Apply ");
330 horizontalFrame->AddFrame(fOkGridBtn,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 2, 2, 2));
331 tabFrame->AddFrame(horizontalFrame,
new TGLayoutHints(kLHintsTop | kLHintsCenterX, 2, 3, 0, 0));
337 void TGL5DDataSetEditor::CreateIsoTab()
339 TGCompositeFrame *tabFrame = CreateEditorTabSubFrame(
"Surfaces");
342 TGGroupFrame *v4Group =
new TGGroupFrame(tabFrame,
"V4 Range", kVerticalFrame);
344 make_slider_range_entries(v4Group, fV4MinEntry,
"Minimum value of V4",
345 fV4MaxEntry,
"Maximum value of V4");
347 tabFrame->AddFrame(v4Group,
new TGLayoutHints(kLHintsTop | kLHintsCenterX | kLHintsExpandX, 2, 3, 0, 0));
349 fV4MinEntry->SetState(kFALSE);
350 fV4MaxEntry->SetState(kFALSE);
354 TGGroupFrame *isoGroup =
new TGGroupFrame(tabFrame,
"Iso-surfaces", kVerticalFrame);
356 fHighlightCheck =
new TGCheckButton(isoGroup,
"Highlight selected");
357 fHighlightCheck->SetToolTipText(
"Highlight selected surface");
358 fHighlightCheck->SetState(kButtonDown);
359 isoGroup->AddFrame(fHighlightCheck,
new TGLayoutHints(kLHintsLeft, 4, 1, 1, 1));
361 TGHorizontalFrame *hf =
new TGHorizontalFrame(isoGroup);
362 fIsoList =
new TGListBox(hf);
363 fIsoList->Resize(120, 120);
364 hf->AddFrame(fIsoList,
new TGLayoutHints(kLHintsTop | kLHintsLeft, 5, 5, 5, 5));
365 isoGroup->AddFrame(hf,
new TGLayoutHints(kLHintsLeft, 2, 1, 1, 1));
367 fVisibleCheck =
new TGCheckButton(isoGroup,
"Visible");
368 fVisibleCheck->SetToolTipText(
"Show/hide surface");
369 isoGroup->AddFrame(fVisibleCheck,
new TGLayoutHints(kLHintsLeft, 4, 1, 1, 1));
371 fShowCloud =
new TGCheckButton(isoGroup,
"Show cloud");
372 fShowCloud->SetToolTipText(
"Show/hide cloud for surface");
373 isoGroup->AddFrame(fShowCloud,
new TGLayoutHints(kLHintsLeft, 4, 1, 1, 1));
376 hf =
new TGHorizontalFrame(isoGroup);
377 TGLabel* lab =
new TGLabel(hf,
"Color");
378 hf->AddFrame(lab,
new TGLayoutHints(kLHintsLeft|kLHintsBottom, 1, 4, 8, 3));
379 fSurfColorSelect =
new TGColorSelect(hf, 0, -1);
380 hf->AddFrame(fSurfColorSelect,
new TGLayoutHints(kLHintsLeft, 1, 1, 8, 1));
381 isoGroup->AddFrame(hf,
new TGLayoutHints(kLHintsLeft, 2, 1, 1, 1));
383 TGHorizontalFrame *frame = make_labeled_hframe(isoGroup,
"Opacity: ");
384 fSurfAlphaSlider =
new TGHSlider(frame, 80);
385 fSurfAlphaSlider->SetRange(0, 100);
386 frame->AddFrame(fSurfAlphaSlider,
new TGLayoutHints(kLHintsLeft));
388 fSurfRemoveBtn =
new TGTextButton(isoGroup,
" Remove surface ");
389 isoGroup->AddFrame(fSurfRemoveBtn,
new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2));
390 tabFrame->AddFrame(isoGroup,
new TGLayoutHints(kLHintsTop | kLHintsCenterX | kLHintsExpandX, 2, 3, 0, 0));
393 TGGroupFrame *newGroup =
new TGGroupFrame(tabFrame,
"New iso-surface", kVerticalFrame);
394 hf =
new TGHorizontalFrame(newGroup);
395 fNewIsoEntry =
new TGNumberEntry(hf, 0., 12, -1, TGNumberFormat::kNESReal);
396 hf->AddFrame(fNewIsoEntry,
new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 2, 2, 2, 2));
397 fNewIsoEntry->Resize(60, 20);
398 fAddNewIsoBtn =
new TGTextButton(hf,
" Add ");
399 hf->AddFrame(fAddNewIsoBtn,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY | kLHintsExpandX, 2, 2, 2, 2));
400 newGroup->AddFrame(hf,
new TGLayoutHints(kLHintsLeft, 0, 0, 0, 0));
402 tabFrame->AddFrame(newGroup,
new TGLayoutHints(kLHintsTop | kLHintsExpandX, 2, 3, 0, 0));
408 void TGL5DDataSetEditor::SetModel(TObject* obj)
411 Bool_t needUpdate = fSelectedSurface != -1;
413 if ((fDataSet = dynamic_cast<TGL5DDataSet *>(obj))) {
414 fPainter = fDataSet->GetRealPainter();
416 SetStyleTabWidgets();
420 DisableGridTabButtons();
421 DisableSurfaceControls();
424 ConnectSignals2Slots();
427 if (needUpdate && gPad)
433 void set_grid_range_widgets(
const TAxis *a,
const Rgl::Range_t r, TGDoubleHSlider *slider,
434 TGNumberEntryField *eMin, TGNumberEntryField *eMax)
436 slider->SetRange(r.first, r.second);
437 slider->SetPosition(a->GetBinLowEdge(1), a->GetBinUpEdge(a->GetLast()));
439 eMin->SetNumber(a->GetBinLowEdge(1));
440 eMin->SetLimits(TGNumberFormat::kNELLimitMinMax, r.first, r.second);
441 eMax->SetNumber(a->GetBinUpEdge(a->GetLast()));
442 eMax->SetLimits(TGNumberFormat::kNELLimitMinMax, r.first, r.second);
450 void TGL5DDataSetEditor::SetStyleTabWidgets()
452 fShowBoxCut->SetState(fPainter->IsBoxCutShown() ? kButtonDown : kButtonUp);
453 fNumberOfPlanes->SetNumber(fPainter->GetNContours());
454 fAlpha->SetNumber(fPainter->GetAlpha());
460 void TGL5DDataSetEditor::SetGridTabWidgets()
462 const TAxis *xA = fDataSet->GetXAxis();
463 const TAxis *yA = fDataSet->GetYAxis();
464 const TAxis *zA = fDataSet->GetZAxis();
465 const Rgl::Range_t &xR = fDataSet->GetXRange();
466 const Rgl::Range_t &yR = fDataSet->GetYRange();
467 const Rgl::Range_t &zR = fDataSet->GetZRange();
469 fNCellsXEntry->SetIntNumber(xA->GetNbins());
470 fNCellsYEntry->SetIntNumber(yA->GetNbins());
471 fNCellsZEntry->SetIntNumber(zA->GetNbins());
473 set_grid_range_widgets(xA, xR, fXRangeSlider, fXRangeSliderMin, fXRangeSliderMax);
475 set_grid_range_widgets(yA, yR, fYRangeSlider, fYRangeSliderMin, fYRangeSliderMax);
477 set_grid_range_widgets(zA, zR, fZRangeSlider, fZRangeSliderMin, fZRangeSliderMax);
483 void TGL5DDataSetEditor::SetIsoTabWidgets()
485 const Rgl::Range_t &v4R = fDataSet->GetV4Range();
487 fV4MinEntry->SetNumber(v4R.first);
488 fV4MaxEntry->SetNumber(v4R.second);
490 fIsoList->RemoveAll();
491 fHidden->fIterators.clear();
493 SurfIter_t curr = fPainter->SurfacesBegin();
495 for (Int_t ind = 0; curr != fPainter->SurfacesEnd(); ++curr, ++ind) {
496 TString entry(TString::Format(
"Level: %f", curr->f4D));
497 fIsoList->AddEntry(entry.Data(), ind);
499 curr->fHighlight = kFALSE;
505 fHidden->fIterators[ind] = curr;
508 fNewIsoEntry->SetLimits(TGNumberFormat::kNELLimitMinMax, v4R.first, v4R.second);
509 fNewIsoEntry->SetNumber(v4R.first);
511 fSelectedSurface = -1;
517 void TGL5DDataSetEditor::GridParametersChanged()
519 EnableGridTabButtons();
525 void TGL5DDataSetEditor::EnableGridTabButtons()
527 fCancelGridBtn->SetState(kButtonUp);
528 fOkGridBtn->SetState(kButtonUp);
534 void TGL5DDataSetEditor::DisableGridTabButtons()
536 fCancelGridBtn->SetState(kButtonDisabled);
537 fOkGridBtn->SetState(kButtonDisabled);
543 void TGL5DDataSetEditor::EnableSurfaceControls()
545 fVisibleCheck->SetState(kButtonUp);
548 fSurfRemoveBtn->SetState(kButtonUp);
554 void TGL5DDataSetEditor::DisableSurfaceControls()
556 fVisibleCheck->SetState(kButtonDisabled);
557 fShowCloud->SetState(kButtonDisabled);
559 fSurfRemoveBtn->SetState(kButtonDisabled);
565 void TGL5DDataSetEditor::XSliderChanged()
567 fXRangeSliderMin->SetNumber(fXRangeSlider->GetMinPosition());
568 fXRangeSliderMax->SetNumber(fXRangeSlider->GetMaxPosition());
570 EnableGridTabButtons();
576 void TGL5DDataSetEditor::YSliderChanged()
578 fYRangeSliderMin->SetNumber(fYRangeSlider->GetMinPosition());
579 fYRangeSliderMax->SetNumber(fYRangeSlider->GetMaxPosition());
581 EnableGridTabButtons();
587 void TGL5DDataSetEditor::ZSliderChanged()
589 fZRangeSliderMin->SetNumber(fZRangeSlider->GetMinPosition());
590 fZRangeSliderMax->SetNumber(fZRangeSlider->GetMaxPosition());
592 EnableGridTabButtons();
598 void TGL5DDataSetEditor::XSliderSetMin()
600 if (fXRangeSliderMin->GetNumber() < fXRangeSliderMax->GetNumber()) {
601 fXRangeSlider->SetPosition(fXRangeSliderMin->GetNumber(),
602 fXRangeSliderMax->GetNumber());
603 EnableGridTabButtons();
605 fXRangeSliderMin->SetNumber(fXRangeSlider->GetMinPosition());
611 void TGL5DDataSetEditor::XSliderSetMax()
613 if (fXRangeSliderMin->GetNumber() < fXRangeSliderMax->GetNumber()) {
614 fXRangeSlider->SetPosition(fXRangeSliderMin->GetNumber(),
615 fXRangeSliderMax->GetNumber());
616 EnableGridTabButtons();
618 fXRangeSliderMax->SetNumber(fXRangeSlider->GetMaxPosition());
625 void TGL5DDataSetEditor::YSliderSetMin()
627 if (fYRangeSliderMin->GetNumber() < fYRangeSliderMax->GetNumber()) {
628 fYRangeSlider->SetPosition(fYRangeSliderMin->GetNumber(),
629 fYRangeSliderMax->GetNumber());
630 EnableGridTabButtons();
632 fYRangeSliderMin->SetNumber(fYRangeSlider->GetMinPosition());
638 void TGL5DDataSetEditor::YSliderSetMax()
640 if (fYRangeSliderMin->GetNumber() < fYRangeSliderMax->GetNumber()) {
641 fYRangeSlider->SetPosition(fYRangeSliderMin->GetNumber(),
642 fYRangeSliderMax->GetNumber());
643 EnableGridTabButtons();
645 fYRangeSliderMax->SetNumber(fYRangeSlider->GetMaxPosition());
651 void TGL5DDataSetEditor::ZSliderSetMin()
653 if (fZRangeSliderMin->GetNumber() < fZRangeSliderMax->GetNumber()) {
654 fZRangeSlider->SetPosition(fZRangeSliderMin->GetNumber(),
655 fZRangeSliderMax->GetNumber());
656 EnableGridTabButtons();
658 fZRangeSliderMin->SetNumber(fZRangeSlider->GetMinPosition());
665 void TGL5DDataSetEditor::ZSliderSetMax()
667 if (fZRangeSliderMin->GetNumber() < fZRangeSliderMax->GetNumber()) {
668 fZRangeSlider->SetPosition(fZRangeSliderMin->GetNumber(),
669 fZRangeSliderMax->GetNumber());
670 EnableGridTabButtons();
672 fYRangeSliderMax->SetNumber(fZRangeSlider->GetMaxPosition());
679 void TGL5DDataSetEditor::RollbackGridParameters()
682 DisableGridTabButtons();
689 void TGL5DDataSetEditor::ApplyGridParameters()
691 DisableGridTabButtons();
693 fDataSet->GetXAxis()->Set(fNCellsXEntry->GetIntNumber(),
694 fXRangeSlider->GetMinPosition(),
695 fXRangeSlider->GetMaxPosition());
697 fDataSet->GetYAxis()->Set(fNCellsYEntry->GetIntNumber(),
698 fYRangeSlider->GetMinPosition(),
699 fYRangeSlider->GetMaxPosition());
701 fDataSet->GetZAxis()->Set(fNCellsZEntry->GetIntNumber(),
702 fZRangeSlider->GetMinPosition(),
703 fZRangeSlider->GetMaxPosition());
705 fPainter->ResetGeometryRanges();
713 void TGL5DDataSetEditor::HighlightClicked()
715 if (fSelectedSurface == -1)
718 fHidden->fIterators[fSelectedSurface]->fHighlight = fHighlightCheck->IsOn();
729 void TGL5DDataSetEditor::SurfaceSelected(Int_t
id)
733 if (!fHidden->IsValid(
id)) {
734 Error(
"SurfaceSelected",
"Got wrong index %d",
id);
738 if (fSelectedSurface != -1) {
741 fHidden->fIterators[fSelectedSurface]->fHighlight = kFALSE;
744 EnableSurfaceControls();
747 SurfIter_t surf = fHidden->fIterators[fSelectedSurface = id];
748 surf->fHighlight = fHighlightCheck->IsOn();
750 fVisibleCheck->SetOn(!surf->fHide);
751 fSurfColorSelect->SetColor(TColor::Number2Pixel(surf->fColor), kFALSE);
752 fSurfAlphaSlider->SetPosition(surf->fAlpha);
756 }
else if (fSelectedSurface != -1) {
758 fHidden->fIterators[fSelectedSurface]->fHighlight = kFALSE;
759 fSelectedSurface = -1;
760 DisableSurfaceControls();
769 void TGL5DDataSetEditor::VisibleClicked()
775 if (fSelectedSurface != -1) {
776 fHidden->fIterators[fSelectedSurface]->fHide = !(fVisibleCheck->IsOn());
785 void TGL5DDataSetEditor::ColorChanged(Pixel_t pixel)
787 if (fSelectedSurface != -1) {
788 fHidden->fIterators[fSelectedSurface]->fColor = Color_t(TColor::GetColor(pixel));
797 void TGL5DDataSetEditor::AlphaChanged(Int_t alpha)
799 if (fSelectedSurface != -1) {
800 fHidden->fIterators[fSelectedSurface]->fAlpha = alpha;
809 void TGL5DDataSetEditor::RemoveSurface()
811 if (fSelectedSurface != -1) {
813 SurfIter_t it = fHidden->fIterators[fSelectedSurface];
814 fHidden->fIterators.erase(fSelectedSurface);
815 fIsoList->RemoveEntry(fSelectedSurface);
817 fPainter->RemoveSurface(it);
818 DisableSurfaceControls();
819 fSelectedSurface = -1;
829 void TGL5DDataSetEditor::AddNewSurface()
831 fPainter->AddSurface(fNewIsoEntry->GetNumber());
841 void TGL5DDataSetEditor::ApplyAlpha()
844 fApplyAlpha->SetState(kButtonDisabled);
845 fPainter->SetAlpha(fAlpha->GetNumber());
846 fAlpha->SetNumber(fPainter->GetAlpha());
860 void TGL5DDataSetEditor::ApplyPlanes()
864 fPainter->SetNContours((Int_t)fNumberOfPlanes->GetIntNumber());
865 fNumberOfPlanes->SetIntNumber(fPainter->GetNContours());
878 void TGL5DDataSetEditor::BoxCutToggled()
881 fPainter->ShowBoxCut(fShowBoxCut->IsOn());
889 void TGL5DDataSetEditor::AlphaChanged()
891 fApplyAlpha->SetState(kButtonUp);
897 void TGL5DDataSetEditor::NContoursChanged()