Developer documentation | Axl-2.5.1

axlInspectorToolCreatorCone.cpp
Go to the documentation of this file.
1 /* axlInspectorToolCreatorCone.cpp ---
2  *
3  * Author: Julien Wintz
4  * Copyright (C) 2008 - Julien Wintz, Inria.
5  * Created: Wed Mar 16 17:19:51 2011 (+0100)
6  * Version: $Id$
7  * Last-Updated: Wed Mar 16 17:38:31 2011 (+0100)
8  * By: Julien Wintz
9  * Update #: 31
10  */
11 
12 /* Commentary:
13  *
14  */
15 
16 /* Change log:
17  *
18  */
19 
23 
24 #include <axlCore/axlPoint.h>
25 #include <axlCore/axlCone.h>
26 #include <axlCore/axlDataDynamic.h>
27 #include <axlCore/axlDouble.h>
29 #include <dtkCoreSupport/dtkAbstractProcessFactory.h>
30 #include <dtkCoreSupport/dtkAbstractProcess.h>
31 #include <axlCore/axlConeCreator.h>
32 #include <dtkGuiSupport/dtkColorButton.h>
33 
34 #include <QtGui>
35 
36 class axlInspectorToolCreatorConePrivate
37 {
38 public:
39  QSlider *sliderOpacity;
40  dtkColorButton *colorButton;
41  axlInspectorObjectController *controller;
42 
43  QDoubleSpinBox *spinBoxCoordinateApex_x;
44  QDoubleSpinBox *spinBoxCoordinateApex_y;
45  QDoubleSpinBox *spinBoxCoordinateApex_z;
46 
47  QDoubleSpinBox *spinBoxCoordinateBasePoint_x;
48  QDoubleSpinBox *spinBoxCoordinateBasePoint_y;
49  QDoubleSpinBox *spinBoxCoordinateBasePoint_z;
50 
51  QDoubleSpinBox *spinBoxRadius;
52 
53  QGroupBox *coordinates;
54 
55  QLabel *messageToDisplay;
56 
57 };
58 
59 axlInspectorToolCreatorCone::axlInspectorToolCreatorCone(QWidget *parent) : axlInspectorToolCreator(parent), d(new axlInspectorToolCreatorConePrivate)
60 {
61  QVBoxLayout *layout = new QVBoxLayout(this);
62 
63  //OPACITY//
64  d->sliderOpacity = new QSlider(Qt::Horizontal, this);
65 
66  QHBoxLayout *layoutOpacity = new QHBoxLayout;
67  layoutOpacity->addWidget(new QLabel("Opacity",this));
68  layoutOpacity->addWidget(d->sliderOpacity);
69  d->sliderOpacity->setMaximum(100);
70 
71  //COLOR//
72  d->colorButton = new dtkColorButton(this);
73 
74  QHBoxLayout *layoutColorButton = new QHBoxLayout;
75  layoutColorButton->addWidget(new QLabel("Color",this));
76  layoutColorButton->addWidget(d->colorButton);
77  d->colorButton->setColor(QColor("#a0a0a4"));
78 
79  // QHBoxLayout *layoutDynamic = new QHBoxLayout();
80  // QLabel *labelDynamic = new QLabel("dynamic Object",this);
81  // d->checkBoxIsDynamic = new QCheckBox(this);
82 
83 
84  QVBoxLayout *layoutCoordonate = new QVBoxLayout();
85  QHBoxLayout *layoutCoordinateApex_x = new QHBoxLayout();
86  QHBoxLayout *layoutCoordinateApex_y = new QHBoxLayout();
87  QHBoxLayout *layoutCoordinateApex_z = new QHBoxLayout();
88  QLabel *labelCoordinateApex_x = new QLabel("x",this);
89  QLabel *labelCoordinateApex_y = new QLabel("y",this);
90  QLabel *labelCoordinateApex_z = new QLabel("z",this);
91  d->spinBoxCoordinateApex_x = new QDoubleSpinBox(this);
92  d->spinBoxCoordinateApex_y = new QDoubleSpinBox(this);
93  d->spinBoxCoordinateApex_z = new QDoubleSpinBox(this);
94 
95  QHBoxLayout *layoutCoordinateBasePoint_x = new QHBoxLayout();
96  QHBoxLayout *layoutCoordinateBasePoint_y = new QHBoxLayout();
97  QHBoxLayout *layoutCoordinateBasePoint_z = new QHBoxLayout();
98  QLabel *labelCoordinateBasePoint_x = new QLabel("x",this);
99  QLabel *labelCoordinateBasePoint_y = new QLabel("y",this);
100  QLabel *labelCoordinateBasePoint_z = new QLabel("z",this);
101  d->spinBoxCoordinateBasePoint_x = new QDoubleSpinBox(this);
102  d->spinBoxCoordinateBasePoint_y = new QDoubleSpinBox(this);
103  d->spinBoxCoordinateBasePoint_z = new QDoubleSpinBox(this);
104 
105  QHBoxLayout *layoutRadius = new QHBoxLayout();
106  QLabel *labelRadius = new QLabel("radius :",this);
107  d->spinBoxRadius = new QDoubleSpinBox(this);
108 
109  d->spinBoxCoordinateApex_x->setValue(0.0);
110  d->spinBoxCoordinateApex_y->setValue(0.0);
111  d->spinBoxCoordinateApex_z->setValue(0.0);
112  d->spinBoxCoordinateApex_x->setRange(-1000, 1000);
113  d->spinBoxCoordinateApex_y->setRange(-1000, 1000);
114  d->spinBoxCoordinateApex_z->setRange(-1000, 1000);
115  layoutCoordinateApex_x->addWidget(labelCoordinateApex_x);
116  layoutCoordinateApex_x->addWidget(d->spinBoxCoordinateApex_x);
117  layoutCoordinateApex_y->addWidget(labelCoordinateApex_y);
118  layoutCoordinateApex_y->addWidget(d->spinBoxCoordinateApex_y);
119  layoutCoordinateApex_z->addWidget(labelCoordinateApex_z);
120  layoutCoordinateApex_z->addWidget(d->spinBoxCoordinateApex_z);
121  layoutCoordonate->addWidget(new QLabel("Apex point :", this));
122  layoutCoordonate->addLayout(layoutCoordinateApex_x);
123  layoutCoordonate->addLayout(layoutCoordinateApex_y);
124  layoutCoordonate->addLayout(layoutCoordinateApex_z);
125 
126  d->spinBoxCoordinateBasePoint_x->setValue(1.0);
127  d->spinBoxCoordinateBasePoint_y->setValue(0.0);
128  d->spinBoxCoordinateBasePoint_z->setValue(0.0);
129  d->spinBoxCoordinateBasePoint_x->setRange(-1000, 1000);
130  d->spinBoxCoordinateBasePoint_y->setRange(-1000, 1000);
131  d->spinBoxCoordinateBasePoint_z->setRange(-1000, 1000);
132  layoutCoordinateBasePoint_x->addWidget(labelCoordinateBasePoint_x);
133  layoutCoordinateBasePoint_x->addWidget(d->spinBoxCoordinateBasePoint_x);
134  layoutCoordinateBasePoint_y->addWidget(labelCoordinateBasePoint_y);
135  layoutCoordinateBasePoint_y->addWidget(d->spinBoxCoordinateBasePoint_y);
136  layoutCoordinateBasePoint_z->addWidget(labelCoordinateBasePoint_z);
137  layoutCoordinateBasePoint_z->addWidget(d->spinBoxCoordinateBasePoint_z);
138  layoutCoordonate->addWidget(new QLabel("BasePoint point :", this));
139  layoutCoordonate->addLayout(layoutCoordinateBasePoint_x);
140  layoutCoordonate->addLayout(layoutCoordinateBasePoint_y);
141  layoutCoordonate->addLayout(layoutCoordinateBasePoint_z);
142 
143  layoutRadius->addWidget(labelRadius);
144  layoutRadius->addWidget(d->spinBoxRadius);
145  d->spinBoxRadius->setValue(1.0);
146 
147  d->spinBoxCoordinateApex_x->setSingleStep(0.1);
148  d->spinBoxCoordinateApex_y->setSingleStep(0.1);
149  d->spinBoxCoordinateApex_z->setSingleStep(0.1);
150  d->spinBoxCoordinateBasePoint_x->setSingleStep(0.1);
151  d->spinBoxCoordinateBasePoint_y->setSingleStep(0.1);
152  d->spinBoxCoordinateBasePoint_z->setSingleStep(0.1);
153  d->spinBoxRadius->setSingleStep(0.1);
154 
155  d->coordinates = new QGroupBox(tr("Enter coordinates"),this);
156  d->coordinates->setLayout(layoutCoordonate);
157 
158  //message to display
159  d->messageToDisplay = new QLabel("",this);
160  axlConeCreator *creator = new axlConeCreator();
161  d->messageToDisplay->setText(creator->description());
162  delete creator;
163  d->messageToDisplay->setStyleSheet("color: #ff0000;");
164 
165  QPushButton *button = new QPushButton("Create", this);
166  connect(button, SIGNAL(clicked()), this, SLOT(run()));
167 
168  layout->addWidget(new QLabel("axlInspectorToolCreatorCone", this));
169  // layout->addLayout(layoutCoordonate);
170  layout->addWidget(d->messageToDisplay);
171  layout->addWidget(d->coordinates);
172  layout->addLayout(layoutRadius);
173  layout->addLayout(layoutOpacity);
174  layout->addLayout(layoutColorButton);
175  layout->addWidget(button);
176  d->coordinates->hide();
177 }
178 
180 {
181  delete d;
182 
183  d = NULL;
184 }
185 
187 {
188  d->controller = controller;
189  if(d->controller->size() < 2){
190  d->messageToDisplay->hide();
191  d->coordinates->show();
192  }else{
193  d->coordinates->hide();
194  bool hasRigthType = false;
195  int nbRigthType = 0;
196  foreach(axlInspectorObjectManagerTreeItem *item, d->controller->items()){
197  if(dynamic_cast<axlPoint *>(d->controller->data(item)))
198  nbRigthType++;
199  else if(dynamic_cast<axlDataDynamic *>(d->controller->data(item)))
200  if(dynamic_cast<axlDataDynamic *>(d->controller->data(item))->outputs())
201  if(dynamic_cast<axlPoint *>(dynamic_cast<axlDataDynamic *>(d->controller->data(item))->outputs()))
202  nbRigthType++;
203  }
204 
205  if(nbRigthType > 1)
206  hasRigthType = true;
207  if(!hasRigthType){
208  d->coordinates->show();
209  d->messageToDisplay->hide();
210  }
211  }
212 }
213 
214 QList<axlAbstractData *> axlInspectorToolCreatorCone::returnInputsList(void){
215  QList<axlAbstractData *>list;
216  if(d->coordinates->isVisible()){
217  axlPoint *Apex = new axlPoint(d->spinBoxCoordinateApex_x->value(), d->spinBoxCoordinateApex_y->value(), d->spinBoxCoordinateApex_z->value());
218  axlPoint *basePoint = new axlPoint(d->spinBoxCoordinateBasePoint_x->value(), d->spinBoxCoordinateBasePoint_y->value(), d->spinBoxCoordinateBasePoint_z->value());
219 
220  axlDouble *radius =new axlDouble(d->spinBoxRadius->value());
221 
222  list << Apex << basePoint << radius;
223  }
224  return list;
225 
226 }
227 
229 {
230 
231 
232  if(/*d->firstRun &&*/ !d->coordinates->isVisible()){
233  axlConeCreator *creator = new axlConeCreator();
234  d->messageToDisplay->show();
235  int nbPoints = 0;
236  if( d->controller->size()>0 ){
237  foreach(axlInspectorObjectManagerTreeItem *item, d->controller->items()){
238 
239  if(item->text(2) == "Selected"|| item->text(2) == "Editable")
240  {
241  if(nbPoints < 2){
242  if(dynamic_cast<axlPoint *>(d->controller->data(item))) {
243  axlPoint *point = dynamic_cast<axlPoint *>(d->controller->data(item));
244  creator->setInput(point,nbPoints);
245  nbPoints++;
246  }
247  }else{
248  qDebug() << "To many inputs selected, only the two first points were used";
249  }
250  }
251 
252  }
253  }
254 
255  if(nbPoints == 2){
256  creator->setParameter(d->spinBoxRadius->value());
257  creator->update();
258  axlCone *cone = dynamic_cast<axlCone *>(creator->output());
259  cone->setColor(d->colorButton->color());
260  double opacity = 1.0 - 0.01 * d->sliderOpacity->value();
261  cone->setOpacity(opacity);
262  emit dataInserted(cone);
263  d->coordinates->hide();
264 
265  }else {
266  //display the coordinates to be chosen for the extremal points
267  d->coordinates->show();
268  d->messageToDisplay->hide();
269  }
270 
271  delete creator;
272  }else{
273  // WARNING THESE POINT ARE ONLY REFERENCED BY THE CONE : risk of memory leek when the cone will be deleted
274  d->messageToDisplay->hide();
275  axlPoint *Apex = new axlPoint(d->spinBoxCoordinateApex_x->value(), d->spinBoxCoordinateApex_y->value(), d->spinBoxCoordinateApex_z->value());
276  axlPoint *basePoint = new axlPoint(d->spinBoxCoordinateBasePoint_x->value(), d->spinBoxCoordinateBasePoint_y->value(), d->spinBoxCoordinateBasePoint_z->value());
277 
278  axlCone* cone = new axlCone(Apex, basePoint, d->spinBoxRadius->value());
279  cone->setColor(d->colorButton->color());
280  double opacity = 1.0 - 0.01 * d->sliderOpacity->value();
281  cone->setOpacity(opacity);
282  emit dataInserted(cone);
283 
284  }
285 
286 
287 }
288 
290 {
291  return new axlInspectorToolCreatorCone;
292 }
Class axlPoint defines 3D points.
Definition: axlPoint.h:34
virtual int update(void)
Class axlDouble defines a double.
Definition: axlDouble.h:29
virtual void setParameter(double value)
virtual void setInput(dtkAbstractData *newData, int channel)
QList< axlAbstractData * > returnInputsList(void)
virtual QString description(void) const
virtual dtkAbstractData * output(void)
axlInspectorToolInterface * createaxlInspectorToolCreatorCone(void)
void setOpacity(const double &opacity)
void dataInserted(axlAbstractData *data)
void setController(axlInspectorObjectController *controller)
Class axlCone defines 3D cones.
Definition: axlCone.h:34
void setColor(double r, double g, double b)