Developer documentation | Axl-2.5.1

axlInspectorToolCreatorPlane.cpp
Go to the documentation of this file.
1 /* axlInspectorToolCreatorPlane.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/axlPlane.h>
27 #include <dtkCoreSupport/dtkAbstractProcessFactory.h>
28 #include <dtkCoreSupport/dtkAbstractProcess.h>
29 #include <dtkGuiSupport/dtkColorButton.h>
30 
31 #include <axlCore/axlDataDynamic.h>
33 
34 #include <QtGui>
35 
36 class axlInspectorToolCreatorPlanePrivate
37 {
38 public:
39  QSlider *sliderOpacity;
40  dtkColorButton *colorButton;
41  axlInspectorObjectController *controller;
42 
43  QDoubleSpinBox *spinBoxCoordinatePoint_x;
44  QDoubleSpinBox *spinBoxCoordinatePoint_y;
45  QDoubleSpinBox *spinBoxCoordinatePoint_z;
46 
47  QDoubleSpinBox *spinBoxCoordinateNormal_x;
48  QDoubleSpinBox *spinBoxCoordinateNormal_y;
49  QDoubleSpinBox *spinBoxCoordinateNormal_z;
50 
51  QGroupBox *coordinates;
52 
53  QLabel *messageToDisplay;
54 };
55 
56 axlInspectorToolCreatorPlane::axlInspectorToolCreatorPlane(QWidget *parent) : axlInspectorToolCreator(parent), d(new axlInspectorToolCreatorPlanePrivate)
57 {
58  QVBoxLayout *layout = new QVBoxLayout(this);
59 
60  //OPACITY//
61  d->sliderOpacity = new QSlider(Qt::Horizontal, this);
62 
63  QHBoxLayout *layoutOpacity = new QHBoxLayout;
64  layoutOpacity->addWidget(new QLabel("Opacity",this));
65  layoutOpacity->addWidget(d->sliderOpacity);
66  d->sliderOpacity->setMaximum(100);
67 
68  //COLOR//
69  d->colorButton = new dtkColorButton(this);
70 
71  QHBoxLayout *layoutColorButton = new QHBoxLayout;
72  layoutColorButton->addWidget(new QLabel("Color",this));
73  layoutColorButton->addWidget(d->colorButton);
74  d->colorButton->setColor(QColor("#a0a0a4"));
75 
76 
77  QVBoxLayout *layoutCoordonate = new QVBoxLayout();
78  QHBoxLayout *layoutCoordinatePoint_x = new QHBoxLayout();
79  QHBoxLayout *layoutCoordinatePoint_y = new QHBoxLayout();
80  QHBoxLayout *layoutCoordinatePoint_z = new QHBoxLayout();
81  QLabel *labelCoordinatePoint_x = new QLabel("x",this);
82  QLabel *labelCoordinatePoint_y = new QLabel("y",this);
83  QLabel *labelCoordinatePoint_z = new QLabel("z",this);
84  d->spinBoxCoordinatePoint_x = new QDoubleSpinBox(this);
85  d->spinBoxCoordinatePoint_y = new QDoubleSpinBox(this);
86  d->spinBoxCoordinatePoint_z = new QDoubleSpinBox(this);
87 
88  QHBoxLayout *layoutCoordinateNormal_x = new QHBoxLayout();
89  QHBoxLayout *layoutCoordinateNormal_y = new QHBoxLayout();
90  QHBoxLayout *layoutCoordinateNormal_z = new QHBoxLayout();
91  QLabel *labelCoordinateNormal_x = new QLabel("x",this);
92  QLabel *labelCoordinateNormal_y = new QLabel("y",this);
93  QLabel *labelCoordinateNormal_z = new QLabel("z",this);
94  d->spinBoxCoordinateNormal_x = new QDoubleSpinBox(this);
95  d->spinBoxCoordinateNormal_y = new QDoubleSpinBox(this);
96  d->spinBoxCoordinateNormal_z = new QDoubleSpinBox(this);
97 
98  d->spinBoxCoordinatePoint_x->setValue(0.0);
99  d->spinBoxCoordinatePoint_y->setValue(0.0);
100  d->spinBoxCoordinatePoint_z->setValue(0.0);
101  d->spinBoxCoordinatePoint_x->setRange(-1000, 1000);
102  d->spinBoxCoordinatePoint_y->setRange(-1000, 1000);
103  d->spinBoxCoordinatePoint_z->setRange(-1000, 1000);
104  layoutCoordinatePoint_x->addWidget(labelCoordinatePoint_x);
105  layoutCoordinatePoint_x->addWidget(d->spinBoxCoordinatePoint_x);
106  layoutCoordinatePoint_y->addWidget(labelCoordinatePoint_y);
107  layoutCoordinatePoint_y->addWidget(d->spinBoxCoordinatePoint_y);
108  layoutCoordinatePoint_z->addWidget(labelCoordinatePoint_z);
109  layoutCoordinatePoint_z->addWidget(d->spinBoxCoordinatePoint_z);
110  layoutCoordonate->addWidget(new QLabel("Point :", this));
111  layoutCoordonate->addLayout(layoutCoordinatePoint_x);
112  layoutCoordonate->addLayout(layoutCoordinatePoint_y);
113  layoutCoordonate->addLayout(layoutCoordinatePoint_z);
114 
115  d->spinBoxCoordinateNormal_x->setValue(1.0);
116  d->spinBoxCoordinateNormal_y->setValue(0.0);
117  d->spinBoxCoordinateNormal_z->setValue(0.0);
118  layoutCoordinateNormal_x->addWidget(labelCoordinateNormal_x);
119  layoutCoordinateNormal_x->addWidget(d->spinBoxCoordinateNormal_x);
120  layoutCoordinateNormal_y->addWidget(labelCoordinateNormal_y);
121  layoutCoordinateNormal_y->addWidget(d->spinBoxCoordinateNormal_y);
122  layoutCoordinateNormal_z->addWidget(labelCoordinateNormal_z);
123  layoutCoordinateNormal_z->addWidget(d->spinBoxCoordinateNormal_z);
124  layoutCoordonate->addWidget(new QLabel("Normal :", this));
125  layoutCoordonate->addLayout(layoutCoordinateNormal_x);
126  layoutCoordonate->addLayout(layoutCoordinateNormal_y);
127  layoutCoordonate->addLayout(layoutCoordinateNormal_z);
128 
129  d->spinBoxCoordinatePoint_x->setSingleStep(0.1);
130  d->spinBoxCoordinatePoint_y->setSingleStep(0.1);
131  d->spinBoxCoordinatePoint_z->setSingleStep(0.1);
132  d->spinBoxCoordinateNormal_x->setSingleStep(0.1);
133  d->spinBoxCoordinateNormal_y->setSingleStep(0.1);
134  d->spinBoxCoordinateNormal_z->setSingleStep(0.1);
135 
136  d->coordinates = new QGroupBox(tr("Enter coordinates"),this);
137  d->coordinates->setLayout(layoutCoordonate);
138 
139 
140  //message to display
141  d->messageToDisplay = new QLabel("",this);
142  axlPlaneCreator *creator = new axlPlaneCreator();
143  d->messageToDisplay->setText(creator->description());
144  delete creator;
145  d->messageToDisplay->setStyleSheet("color: #ff0000;");
146 
147 
148  QPushButton *button = new QPushButton("Create", this);
149  connect(button, SIGNAL(clicked()), this, SLOT(run()));
150 
151  layout->addWidget(new QLabel("axlInspectorToolCreatorPlane", this));
152  // layout->addLayout(layoutCoordonate);
153  layout->addWidget(d->messageToDisplay);
154  layout->addWidget(d->coordinates);
155  layout->addLayout(layoutOpacity);
156  layout->addLayout(layoutColorButton);
157  layout->addWidget(button);
158  d->coordinates->hide();
159 }
160 
162 {
163  delete d;
164 
165  d = NULL;
166 }
167 
169 {
170  d->controller = controller;
171  if(d->controller->size() < 2){
172  d->messageToDisplay->hide();
173  d->coordinates->show();
174  }else{
175  d->coordinates->hide();
176  bool hasRigthType = false;
177  int nbRigthType = 0;
178  foreach(axlInspectorObjectManagerTreeItem *item, d->controller->items()){
179  if(dynamic_cast<axlPoint *>(d->controller->data(item)))
180  nbRigthType++;
181  else if(dynamic_cast<axlDataDynamic *>(d->controller->data(item)))
182  if(dynamic_cast<axlDataDynamic *>(d->controller->data(item))->outputs())
183  if(dynamic_cast<axlPoint *>(dynamic_cast<axlDataDynamic *>(d->controller->data(item))->outputs()))
184  nbRigthType++;
185  }
186 
187  if(nbRigthType > 1)
188  hasRigthType = true;
189  if(!hasRigthType){
190  d->messageToDisplay->hide();
191  d->coordinates->show();
192  }
193  }
194 }
195 
196 QList<axlAbstractData *> axlInspectorToolCreatorPlane::returnInputsList(void){
197  QList<axlAbstractData *>list;
198  if(d->coordinates->isVisible()){
199  axlPoint *point = new axlPoint(d->spinBoxCoordinatePoint_x->value(), d->spinBoxCoordinatePoint_y->value(), d->spinBoxCoordinatePoint_z->value());
200  axlPoint *normal = new axlPoint(d->spinBoxCoordinateNormal_x->value(), d->spinBoxCoordinateNormal_y->value(), d->spinBoxCoordinateNormal_z->value());
201 
202  list << point << normal;
203  }
204  return list;
205 
206 }
207 
209 {
210  if(/*d->firstRun &&*/ !d->coordinates->isVisible()){
211  d->messageToDisplay->show();
212  axlPlaneCreator *creator = new axlPlaneCreator();
213  int nbPoints = 0;
214  if( d->controller->size() > 0){
215  foreach(axlInspectorObjectManagerTreeItem *item, d->controller->items()){
216 
217  if(item->text(2) == "Selected"|| item->text(2) == "Editable")
218  {
219  if(nbPoints < 2){
220  if(dynamic_cast<axlPoint *>(d->controller->data(item))) {
221  axlPoint *point = dynamic_cast<axlPoint *>(d->controller->data(item));
222  creator->setInput(point,nbPoints);
223  nbPoints++;
224  }
225  }else{
226  qDebug() << "To many inputs selected, only the two first points were used";
227  }
228  }
229 
230  }
231  }
232 
233  if(nbPoints == 2){
234  creator->update();
235  axlPlane *cylinder = dynamic_cast<axlPlane *>(creator->output());
236  cylinder->setColor(d->colorButton->color());
237  double opacity = 1.0 - 0.01 * d->sliderOpacity->value();
238  cylinder->setOpacity(opacity);
239  emit dataInserted(cylinder);
240  d->coordinates->hide();
241 
242 
243  }else {
244  //display the coordinates to be chosen for the extremal points
245  d->coordinates->show();
246  d->messageToDisplay->hide();
247  }
248  delete creator;
249  }else{
250  d->messageToDisplay->hide();
251  axlPoint *point = new axlPoint(d->spinBoxCoordinatePoint_x->value(), d->spinBoxCoordinatePoint_y->value(), d->spinBoxCoordinatePoint_z->value());
252  axlPoint *normal = new axlPoint(d->spinBoxCoordinateNormal_x->value(), d->spinBoxCoordinateNormal_y->value(), d->spinBoxCoordinateNormal_z->value());
253 
254 
255 
256  axlPlane* plane = new axlPlane(point, normal);
257 
258 
259  double opacity = 1.0 - 0.01 * d->sliderOpacity->value();
260  plane->setColor(d->colorButton->color());
261  plane->setOpacity(opacity);
262  emit dataInserted(plane);
263  }
264 }
265 
267 {
268  return new axlInspectorToolCreatorPlane;
269 }
270 
Class axlPoint defines 3D points.
Definition: axlPoint.h:34
Class axlPlane defines 3D planes.
Definition: axlPlane.h:34
void dataInserted(axlAbstractData *data)
virtual dtkAbstractData * output(void)
virtual int update(void)
QList< axlAbstractData * > returnInputsList(void)
virtual QString description(void) const
void setController(axlInspectorObjectController *controller)
void setOpacity(const double &opacity)
virtual void setInput(dtkAbstractData *newData, int channel)
void setColor(double r, double g, double b)
axlInspectorToolInterface * createaxlInspectorToolCreatorPlane(void)