contours.cpp
Go to the documentation of this file.
2 
3 namespace ram_qt_guis
4 {
6 
7 {
8  setObjectName("ContoursAlgorithm");
9 
10  main_layout_ = new QVBoxLayout(this);
11 
12  QHBoxLayout *file = new QHBoxLayout;
13  QPushButton *file_explorer = new QPushButton;
14  file_explorer->setText("...");
15  file_explorer->setMaximumSize(30, 30);
16  file_ = new QLineEdit;
17  connect(file_, SIGNAL(textChanged(QString)), this, SLOT(fileChanged()));
18  file->addWidget(file_);
19  file->addWidget(file_explorer);
20  connect(file_explorer, SIGNAL(released()), this, SLOT(browseFiles()));
21 
22  number_of_layers_ = new QSpinBox;
23  number_of_layers_->setRange(1, 10000);
24  QHBoxLayout *number_of_layers_layout = new QHBoxLayout;
25  number_of_layers_layout->addWidget(new QLabel("Number of layers:"));
26  number_of_layers_layout->addWidget(number_of_layers_);
27  number_of_layers_widget_ = new QWidget;
28  number_of_layers_widget_->setLayout(number_of_layers_layout);
29 
30  height_between_layers_ = new QDoubleSpinBox;
31  height_between_layers_->setRange(0.001, 1000);
32  height_between_layers_->setSuffix(" mm");
33  height_between_layers_->setSingleStep(0.1);
34  height_between_layers_->setDecimals(3);
35  QHBoxLayout *height_between_layers_layout = new QHBoxLayout;
36  height_between_layers_layout->addWidget(new QLabel("Height between layers:"));
37  height_between_layers_layout->addWidget(height_between_layers_);
38 
39  deposited_material_width_ = new QDoubleSpinBox;
40  deposited_material_width_->setRange(0.001, 1000);
41  deposited_material_width_->setSuffix(" mm");
42  deposited_material_width_->setSingleStep(0.1);
43  deposited_material_width_->setDecimals(3);
44  QHBoxLayout *deposited_material_width_layout = new QHBoxLayout;
45  deposited_material_width_layout->addWidget(new QLabel("Deposited material width:"));
46  deposited_material_width_layout->addWidget(deposited_material_width_);
47 
48  slicing_direction_x_ = new QDoubleSpinBox;
49  slicing_direction_x_->setRange(-20000, 20000);
50  slicing_direction_x_->setSingleStep(0.01);
51  slicing_direction_x_->setDecimals(3);
52  slicing_direction_x_->setMaximumWidth(80);
53  slicing_direction_x_->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
54 
55  slicing_direction_y_ = new QDoubleSpinBox;
56  slicing_direction_y_->setMinimum(slicing_direction_x_->minimum());
57  slicing_direction_y_->setMaximum(slicing_direction_x_->maximum());
58  slicing_direction_y_->setSingleStep(slicing_direction_x_->singleStep());
59  slicing_direction_y_->setDecimals(slicing_direction_x_->decimals());
60  slicing_direction_y_->setMaximumWidth(slicing_direction_x_->maximumWidth());
61  slicing_direction_y_->setSizePolicy(slicing_direction_x_->sizePolicy());
62 
63  slicing_direction_z_ = new QDoubleSpinBox;
64  slicing_direction_z_->setMinimum(slicing_direction_x_->minimum());
65  slicing_direction_z_->setMaximum(slicing_direction_x_->maximum());
66  slicing_direction_z_->setSingleStep(slicing_direction_x_->singleStep());
67  slicing_direction_z_->setDecimals(slicing_direction_x_->decimals());
68  slicing_direction_z_->setMaximumWidth(slicing_direction_x_->maximumWidth());
69  slicing_direction_z_->setSizePolicy(slicing_direction_x_->sizePolicy());
70 
71  QHBoxLayout* vector_layout = new QHBoxLayout;
72  vector_layout->addWidget(new QLabel("X"));
73  vector_layout->addWidget(slicing_direction_x_);
74  vector_layout->addStretch(1);
75  vector_layout->addWidget(new QLabel("Y"));
76  vector_layout->addWidget(slicing_direction_y_);
77  vector_layout->addStretch(1);
78  vector_layout->addWidget(new QLabel("Z"));
79  vector_layout->addWidget(slicing_direction_z_);
80  QVBoxLayout *slicing_direction_layout = new QVBoxLayout;
81  slicing_direction_layout->addWidget(new QLabel("Slicing direction:"));
82  slicing_direction_layout->addLayout(vector_layout);
83  slicing_direction_widget_ = new QWidget;
84  slicing_direction_widget_->setLayout(slicing_direction_layout);
85 
86  // Main layout
87  main_layout_->addWidget(new QLabel("YAML or mesh file:"));
88  main_layout_->addLayout(file);
90  main_layout_->addLayout(height_between_layers_layout);
91  main_layout_->addLayout(deposited_material_width_layout);
93 
94  connect(file_, SIGNAL(textChanged(QString)), this, SIGNAL(valueChanged()));
95  connect(number_of_layers_, SIGNAL(valueChanged(int)), this, SIGNAL(valueChanged()));
96  connect(height_between_layers_, SIGNAL(valueChanged(double)), this, SIGNAL(valueChanged()));
97  connect(deposited_material_width_, SIGNAL(valueChanged(double)), this, SIGNAL(valueChanged()));
98  connect(slicing_direction_x_, SIGNAL(valueChanged(double)), this, SIGNAL(valueChanged()));
99  connect(slicing_direction_y_, SIGNAL(valueChanged(double)), this, SIGNAL(valueChanged()));
100  connect(slicing_direction_z_, SIGNAL(valueChanged(double)), this, SIGNAL(valueChanged()));
101 }
102 
104 {
105 }
106 
108 {
109  QString file_dir("");
110  {
111  QFileInfo file(file_->text());
112  if (!file_->text().isEmpty() && file.dir().exists())
113  file_dir = file.dir().path();
114  else
115  {
116  std::string path = ros::package::getPath("ram_path_planning");
117  file_dir = QString::fromStdString(path);
118  }
119  }
120 
121  QFileDialog browser;
122  browser.setOption(QFileDialog::DontUseNativeDialog, true);
123  QString file_path = browser.getOpenFileName(
124  this, tr("Choose YAML or mesh file"), file_dir,
125  tr("YAML and mesh files (*.yaml *.YAML *.yml *.YML *.ply *.PLY *.stl *.STL *.obj *.OBJ)"));
126  if (file_path != "")
127  file_->setText(file_path);
128 }
129 
131 {
132  std::string file_extension(fileExtension(file_->text().toStdString()));
133  if (!strcasecmp(file_extension.c_str(), "yaml") || !strcasecmp(file_extension.c_str(), "yml"))
134  // YAML
135  {
136  number_of_layers_widget_->setEnabled(true);
137  slicing_direction_widget_->setEnabled(false);
138  }
139  else if (!strcasecmp(file_extension.c_str(), "ply") || !strcasecmp(file_extension.c_str(), "stl")
140  || !strcasecmp(file_extension.c_str(), "obj"))
141  // Mesh
142  {
143  number_of_layers_widget_->setEnabled(false);
144  slicing_direction_widget_->setEnabled(true);
145  }
146  else
147  // Enable everything
148  {
149  number_of_layers_widget_->setEnabled(true);
150  slicing_direction_widget_->setEnabled(true);
151  }
152 }
153 
155 {
156  QString tmp_str("");
157  int tmp_int(0);
158  float tmp_float(0.01);
159 
160  if (config.mapGetString(objectName() + "file", &tmp_str))
161  file_->setText(tmp_str);
162 
163  if (config.mapGetInt(objectName() + "number_of_layers", &tmp_int))
164  number_of_layers_->setValue(tmp_int);
165 
166  if (config.mapGetFloat(objectName() + "height_between_layers", &tmp_float))
167  height_between_layers_->setValue(tmp_float);
168  else
170 
171  if (config.mapGetFloat(objectName() + "deposited_material_width", &tmp_float))
172  deposited_material_width_->setValue(tmp_float);
173  else
175 
176  if (config.mapGetFloat(objectName() + "slicing_direction_x", &tmp_float))
177  slicing_direction_x_->setValue(tmp_float);
178  else
180 
181  if (config.mapGetFloat(objectName() + "slicing_direction_y", &tmp_float))
182  slicing_direction_y_->setValue(tmp_float);
183  else
185 
186  if (config.mapGetFloat(objectName() + "slicing_direction_z", &tmp_float))
187  slicing_direction_z_->setValue(tmp_float);
188  else
190 }
191 
193  {
194  config.mapSetValue(objectName() + "file", file_->text());
195  config.mapSetValue(objectName() + "number_of_layers", number_of_layers_->value());
196  config.mapSetValue(objectName() + "height_between_layers", height_between_layers_->value());
197  config.mapSetValue(objectName() + "deposited_material_width", deposited_material_width_->value());
198  config.mapSetValue(objectName() + "slicing_direction_x", slicing_direction_x_->value());
199  config.mapSetValue(objectName() + "slicing_direction_y", slicing_direction_y_->value());
200  config.mapSetValue(objectName() + "slicing_direction_z", slicing_direction_z_->value());
201 }
202 
203 std::string ContoursWidget::fillGoal(ram_path_planning::ContoursGoal &goal)
204 {
205  if (file_->text().isEmpty())
206  return "File name is not specified.";
207 
208  goal.file = file_->text().toStdString();
209  goal.number_of_layers = number_of_layers_->value();
210  goal.height_between_layers = height_between_layers_->value() / 1000.0;
211  goal.deposited_material_width = deposited_material_width_->value() / 1000.0;
212 
213  //Slicing direction
214  goal.slicing_direction.x = slicing_direction_x_->value();
215  goal.slicing_direction.y = slicing_direction_y_->value();
216  goal.slicing_direction.z = slicing_direction_z_->value();
217  return "";
218 }
219 
220 std::string ContoursWidget::fileExtension(const std::string full_path)
221 {
222  size_t last_index = full_path.find_last_of("/");
223  std::string file_name = full_path.substr(last_index + 1, full_path.size());
224 
225  last_index = file_name.find_last_of("\\");
226  file_name = file_name.substr(last_index + 1, file_name.size());
227 
228  last_index = file_name.find_last_of(".");
229  if (last_index == std::string::npos)
230  return "";
231 
232  return file_name.substr(last_index + 1, file_name.size());
233 }
234 
235 }
QDoubleSpinBox * height_between_layers_
Definition: contours.hpp:54
const double default_slicing_direction_y_
Definition: contours.hpp:67
const double default_height_between_layers_
Definition: contours.hpp:64
QVBoxLayout * main_layout_
Definition: contours.hpp:49
bool mapGetFloat(const QString &key, float *value_out) const
QDoubleSpinBox * slicing_direction_z_
Definition: contours.hpp:60
void load(const rviz::Config &config)
Definition: contours.cpp:154
bool mapGetString(const QString &key, QString *value_out) const
void mapSetValue(const QString &key, QVariant value)
const double default_slicing_direction_x_
Definition: contours.hpp:66
std::string fillGoal(ram_path_planning::ContoursGoal &goal)
Definition: contours.cpp:203
void save(rviz::Config config) const
Definition: contours.cpp:192
bool mapGetInt(const QString &key, int *value_out) const
ROSLIB_DECL std::string getPath(const std::string &package_name)
QDoubleSpinBox * slicing_direction_x_
Definition: contours.hpp:58
const double default_deposited_material_width_
Definition: contours.hpp:65
const double default_slicing_direction_z_
Definition: contours.hpp:68
QDoubleSpinBox * deposited_material_width_
Definition: contours.hpp:55
QDoubleSpinBox * slicing_direction_y_
Definition: contours.hpp:59
QWidget * slicing_direction_widget_
Definition: contours.hpp:57
std::string fileExtension(const std::string full_path)
Definition: contours.cpp:220
QWidget * number_of_layers_widget_
Definition: contours.hpp:52


ram_qt_guis
Author(s): Victor Lamoine - Institut Maupertuis
autogenerated on Mon Jun 10 2019 14:50:11