Developer documentation | Axl-2.5.1

axlInspectorObjectSceneWidgetFieldScalarIso.cpp
Go to the documentation of this file.
1 /* axlInspectorObjectSceneWidgetFieldScalarIso.cpp ---
2  *
3  * Author: Julien Wintz
4  * Copyright (C) 2008 - Julien Wintz, Inria.
5  * Created: Sun Dec 19 18:53:23 2010 (+0100)
6  * Version: $Id$
7  * Last-Updated: Wed Jul 20 22:20:43 2011 (+0200)
8  * By: Julien Wintz
9  * Update #: 145
10  */
11 
12 /* Commentary:
13  *
14  */
15 
16 /* Change log:
17  *
18  */
19 
21 
25 
26 #include <dtkCoreSupport/dtkGlobal.h>
27 
28 #include <QtGui>
29 
30 class axlInspectorObjectSceneWidgetFieldScalarIsoPrivate
31 {
32 public:
33  axlAbstractField *field;
34  axlAbstractView *view;
35 
36 public:
37  QSpinBox *iso_count_spin;
38  QDoubleSpinBox *iso_radius_spin;
39  QDoubleSpinBox *iso_range_min_spin;
40  QDoubleSpinBox *iso_range_max_spin;
41  QPushButton *button_reset_min;
42  QPushButton *button_reset_max;
43 };
44 
45 axlInspectorObjectSceneWidgetFieldScalarIso::axlInspectorObjectSceneWidgetFieldScalarIso(QWidget *parent) : QWidget(parent), d(new axlInspectorObjectSceneWidgetFieldScalarIsoPrivate)
46 {
47  d->field = NULL;
48  d->view = NULL;
49 
50  QWidget *iso_form = new QWidget(this);
51  iso_form->setObjectName("axlInspectorObjectSceneWidgetFieldScalarIsoForm");
52 
53  QWidget *iso_form_range_min = new QWidget(iso_form);
54  QWidget *iso_form_range_max = new QWidget(iso_form);
55 
56  d->iso_count_spin = new QSpinBox(iso_form); d->iso_count_spin->setMaximum(1000);
57 
58  d->iso_radius_spin = new QDoubleSpinBox(iso_form);
59  d->iso_radius_spin->setValue(0.01);
60  d->iso_radius_spin->setMaximum(1000);
61  d->iso_radius_spin->setMinimum(0.0);
62  d->iso_radius_spin->setDecimals(5);
63  d->iso_radius_spin->setSingleStep(0.01);
64 
65  d->iso_range_min_spin = new QDoubleSpinBox(iso_form);
66  d->iso_range_min_spin->setDecimals(5);
67  d->iso_range_min_spin->setMinimum(-1.e6);
68  d->iso_range_min_spin->setMaximum(1.e6);
69 
70 
71  d->iso_range_max_spin = new QDoubleSpinBox(iso_form);
72  d->iso_range_max_spin->setDecimals(5);
73  d->iso_range_max_spin->setMinimum(-1.e6);
74  d->iso_range_max_spin->setMaximum(1.e6);
75 
76 
77  d->button_reset_min = new QPushButton("reset", iso_form);
78  d->button_reset_max = new QPushButton("reset", iso_form);
79 
80  QHBoxLayout *iso_form_range_min_layout = new QHBoxLayout(iso_form_range_min);
81  iso_form_range_min_layout->setContentsMargins(0, 0, 0, 0);
82  iso_form_range_min_layout->addWidget(d->iso_range_min_spin);
83  iso_form_range_min_layout->addWidget(d->button_reset_min);
84 
85  QHBoxLayout *iso_form_range_max_layout = new QHBoxLayout(iso_form_range_max);
86  iso_form_range_max_layout->setContentsMargins(0, 0, 0, 0);
87  iso_form_range_max_layout->addWidget(d->iso_range_max_spin);
88  iso_form_range_max_layout->addWidget(d->button_reset_max);
89 
90  QFormLayout *iso_form_layout = new QFormLayout(iso_form);
91  iso_form_layout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
92  iso_form_layout->setContentsMargins(0, 0, 0, 0);
93  iso_form_layout->addRow("Number of contours:", d->iso_count_spin);
94  iso_form_layout->addRow("Radius of tubes:", d->iso_radius_spin);
95  iso_form_layout->addRow(new QLabel("Range", this));
96  iso_form_layout->addRow("Minimum value:", iso_form_range_min);
97  iso_form_layout->addRow("Maximum value:", iso_form_range_max);
98 
99  QVBoxLayout *layout = new QVBoxLayout(this);
100  layout->setContentsMargins(0, 0, 0, 0);
101  layout->addWidget(new QLabel("Iso contours", this));
102  layout->addWidget(iso_form);
103 
104 
105  connect(d->iso_count_spin, SIGNAL(valueChanged(int)), this, SIGNAL(isoCountChanged(int)));
106  connect(d->iso_radius_spin, SIGNAL(valueChanged(double)), this, SIGNAL(isoRadiusChanged(double)));
107  connect(d->iso_range_min_spin, SIGNAL(valueChanged(double)), this, SIGNAL(isoRangeMinChanged(double)));
108  connect(d->button_reset_min, SIGNAL(clicked()), this, SLOT(onResetMinimalValueClicked()));
109  connect(d->iso_range_max_spin, SIGNAL(valueChanged(double)), this, SIGNAL(isoRangeMaxChanged(double)));
110  connect(d->button_reset_max, SIGNAL(clicked()), this, SLOT(onResetMaximalValueClicked()));
111 }
112 
114 {
115  delete d;
116 
117  d = NULL;
118 }
119 
121 {
122  d->iso_count_spin->setValue(count);
123 }
124 
126 {
127  d->iso_range_min_spin->setValue(min);
128 }
129 
131 {
132  d->iso_range_max_spin->setValue(max);
133 }
134 
136 {
137  d->field = field;
138 
139  if(!d->view)
140  return;
141 
142  if(axlAbstractActorField *actor = dynamic_cast<axlAbstractActorField *>(d->view->actor(d->field))) {
143 
144  this->setCount(actor->isoCount());
145  this->setMax(actor->isoRangeMax());
146  this->setMin(actor->isoRangeMin());
147  }
148 }
149 
151 {
152  d->view = view;
153 
154  if(!d->field)
155  return;
156 
157  if(axlAbstractActorField *actor = dynamic_cast<axlAbstractActorField *>(d->view->actor(d->field))) {
158 
159  this->setCount(actor->isoCount());
160  this->setMax(actor->isoRangeMax());
161  this->setMin(actor->isoRangeMin());
162  }
163 }
164 
166 {
167  this->setMin(d->field->minValue());
168 }
169 
171 {
172  this->setMax(d->field->maxValue());
173 }
Class axlAbstractField defines an API for arrays of numeric data.