Desc_Models_Dialog.cpp
Go to the documentation of this file.
1 
26 
27 
28 
30 {
31  label_orientation_x_value->SetLabel(wxT(""));
32  label_orientation_y_value->SetLabel(wxT(""));
33  label_orientation_z_value->SetLabel(wxT(""));
34 
35  label_axis_1_x_value->SetLabel(wxT(""));
36  label_axis_1_y_value->SetLabel(wxT(""));
37  label_axis_1_z_value->SetLabel(wxT(""));
38  label_axis_1_angle_value->SetLabel(wxT(""));
39  label_axis_2_x_value->SetLabel(wxT(""));
40  label_axis_2_y_value->SetLabel(wxT(""));
41  label_axis_2_z_value->SetLabel(wxT(""));
42  label_axis_2_angle_value->SetLabel(wxT(""));
43 
44  label_score_2D_value->SetLabel(wxT(""));
45  label_use_color_value->SetLabel(wxT(""));
46  label_invertible_value->SetLabel(wxT(""));
47 
48  label_vertical_offset_value->SetLabel(wxT(""));
49  label_horizontal_offset_value->SetLabel(wxT(""));
50  label_depth_value->SetLabel(wxT(""));
51  label_number_ferns_value->SetLabel(wxT(""));
52  label_patch_size_value->SetLabel(wxT(""));
53  label_min_scale_value->SetLabel(wxT(""));
54  label_max_scale_value->SetLabel(wxT(""));
55 
56  button_edit_model->Enable(false);
57 
58  image->setImage(new wxBitmap(wxImage(300, 225)));
59  image->paintNow();
60 }
61 
62 std::vector<std::string> DescModelsDialog::getObjectParameters()
63 {
64  std::vector<std::string> params;
65  params.push_back(name);
66  params.push_back(object_model);
67  params.push_back(mesh);
68  params.push_back(rotation_type);
69  params.push_back(orientation_x);
70  params.push_back(orientation_y);
71  params.push_back(orientation_z);
72  params.push_back(diameter);
73  params.push_back(score_3D);
74  return params;
75 }
76 
77 std::vector<ViewParamsWrapper> DescModelsDialog::getViews()
78 {
79  return views;
80 }
81 
82 
83 
84 DescModelsDialog::DescModelsDialog(wxWindow* parent, std::string name, std::string object_model, std::string mesh, std::string rotation_type, std::string orientation_x, std::string orientation_y, std::string orientation_z, std::string diameter, std::string score_3D)
85  : DescModelsDialogBase(parent),
86  name(name),
87  object_model(object_model),
88  mesh(mesh),
89  rotation_type(rotation_type),
90  orientation_x(orientation_x),
91  orientation_y(orientation_y),
92  orientation_z(orientation_z),
93  diameter(diameter),
94  score_3D(score_3D)
95 {
96  button_edit_model->Enable(false);
97  image->setImage(new wxBitmap(wxImage(300, 225)));
98  image->paintNow();
99 }
100 
101 void DescModelsDialog::OnDialogClose( wxCloseEvent& event )
102 {
103  wxMessageDialog *dial = new wxMessageDialog(this,
104  wxT("Are you sure to quit?"), wxT("Quit"),
105  wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION);
106  if (dial->ShowModal() == wxID_YES) {
107  Destroy();
108  }
109 }
110 
111 void DescModelsDialog::onAddModelClicked( wxCommandEvent& event )
112 {
114  ViewCreatorDialog *descModelsDialog = new ViewCreatorDialog( (wxWindow*)NULL, &params);
115  if (descModelsDialog ->ShowModal() == wxID_SAVE) {
116  if (params.getIsValid()) {
117  list_box_views->Clear();
118  views.push_back(params);
119  for (unsigned int i = 0; i < views.size(); i++) {
120  std::string name = this->name + "_view_" + boost::lexical_cast<std::string>(i + 1);
121  list_box_views->Insert(wxString(name.c_str(), wxConvUTF8), i);
122  }
123  resetGuiValues();
124  list_box_views->SetSelection(views.size() - 1, true);
125  wxCommandEvent evt;
126  onListBoxSelected(evt);
127 
128  }
129  }
130 
131 
132 
133 }
134 
135 void DescModelsDialog::onDeleteModelClicked( wxCommandEvent& event )
136 {
137  if (list_box_views->GetSelection() >= 0) {
138  views.erase(views.begin() + list_box_views->GetSelection());
139  list_box_views->Clear();
140  for (unsigned int i = 0; i < views.size(); i++) {
141  std::string name = this->name + "_view_" + boost::lexical_cast<std::string>(i + 1);
142  list_box_views->Insert(wxString(name.c_str(), wxConvUTF8), i);
143  }
144  resetGuiValues();
145  }
146 }
147 
148 void DescModelsDialog::onEditModelClicked(wxCommandEvent &event)
149 {
150  if (list_box_views->GetCount() > 0) {
151  views.at(list_box_views->GetSelection()).clearBoundingBox();
152  ViewCreatorDialog *descModelsDialog = new ViewCreatorDialog( (wxWindow*)NULL, &(views.at(list_box_views->GetSelection())));
153  descModelsDialog ->ShowModal();
154  wxCommandEvent evt;
155  onListBoxSelected(evt);
156  }
157 }
158 
159 void DescModelsDialog::onCancelClicked( wxCommandEvent& event )
160 {
161  wxMessageDialog *dial = new wxMessageDialog(this,
162  wxT("Are you sure to quit?"), wxT("Quit"),
163  wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION);
164  if (dial->ShowModal() == wxID_YES) {
165  Destroy();
166  }
167 }
168 
169 
170 
171 void DescModelsDialog::onFinishClicked( wxCommandEvent& event )
172 {
173  if (list_box_views->GetCount() > 0) {
174  bool boxes_available = true;
175  for (unsigned int i = 0; i < views.size(); i++) {
176  if (!(views.at(i).getHasBoundingBox())) {
177  boxes_available = false;
178  break;
179  }
180  }
181  if (boxes_available) {
182  wxMessageDialog *dial = new wxMessageDialog(this,
183  wxT("Do you want to create the object with the selected values? This can take several minutes depending on your parameters!"), wxT("Finish"),
184  wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION);
185  if (dial->ShowModal() == wxID_YES) {
186  CreateOutputFilesDialog *createOutputFilesDialog = new CreateOutputFilesDialog(this);
187  if (createOutputFilesDialog->ShowModal() == wxID_OK) {
188  wxMessageDialog *dial = new wxMessageDialog(this,
189  wxT("All files successfully created!"), wxT("Success"), wxOK);
190  dial->ShowModal();
191  Destroy();
192  } else {
193  wxMessageDialog *dial = new wxMessageDialog(this,
194  wxT("Not all files could be created, please check the logfile in the output folder for more information. End the program anyway?"), wxT("Warning"),
195  wxYES_NO | wxNO_DEFAULT | wxICON_ERROR);
196  if (dial->ShowModal() == wxID_YES) {
197  Destroy();
198  }
199  }
200  }
201  } else {
202  wxMessageDialog *dial = new wxMessageDialog(this,
203  wxT("Please create a bounding box for all views (Select them by clicking on the image panel; clockwise, starting with the top left corner)"), wxT("Warning"), wxOK | wxICON_WARNING);
204  dial->ShowModal();
205  }
206  } else {
207  wxMessageDialog *dial = new wxMessageDialog(this,
208  wxT("Please create at least one view!"), wxT("Warning"), wxOK | wxICON_WARNING);
209  dial->ShowModal();
210  }
211 
212 }
213 
214 void DescModelsDialog::onBackClicked( wxCommandEvent& event )
215 {
216  if (list_box_views->GetCount() > 0) {
217  wxMessageDialog *dial = new wxMessageDialog(this,
218  wxT("Your created views will be lost if you go back, continue anyway?"), wxT("Warning"),
219  wxYES_NO | wxNO_DEFAULT | wxICON_WARNING);
220  if (dial->ShowModal() != wxID_YES) {
221  return;
222  }
223  }
225  mainDialog ->Show();
226  Destroy();
227 
228 
229 }
230 
231 
232 
233 void DescModelsDialog::onListBoxSelected(wxCommandEvent &event)
234 {
235  if (list_box_views->GetSelection() >= 0) {
236  double orientation_x = views.at(list_box_views->GetSelection()).getOrientation()[0];
237  double orientation_y = views.at(list_box_views->GetSelection()).getOrientation()[1];
238  double orientation_z = views.at(list_box_views->GetSelection()).getOrientation()[2];
239  if (views.at(list_box_views->GetSelection()).getRotationType() == ROTATIONTYPE_SPHERE) {
240  double axis_2_x = views.at(list_box_views->GetSelection()).getAxis2()[0];
241  double axis_2_y = views.at(list_box_views->GetSelection()).getAxis2()[1];
242  double axis_2_z = views.at(list_box_views->GetSelection()).getAxis2()[2];
243  double axis_2_angle = views.at(list_box_views->GetSelection()).getAxis2Angle();
244  label_axis_2_x_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), axis_2_x)));
245  label_axis_2_y_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), axis_2_y)));
246  label_axis_2_z_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), axis_2_z)));
247  label_axis_2_angle_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), axis_2_angle)));
248  } else {
249  label_axis_2_x_value->SetLabel(wxT("-"));
250  label_axis_2_y_value->SetLabel(wxT("-"));
251  label_axis_2_z_value->SetLabel(wxT("-"));
252  label_axis_2_angle_value->SetLabel(wxT("-"));
253  }
254  if (views.at(list_box_views->GetSelection()).getRotationType() != ROTATIONTYPE_NO_ROTATION) {
255  double axis_1_x = views.at(list_box_views->GetSelection()).getAxis1()[0];
256  double axis_1_y = views.at(list_box_views->GetSelection()).getAxis1()[1];
257  double axis_1_z = views.at(list_box_views->GetSelection()).getAxis1()[2];
258  double axis_1_angle = views.at(list_box_views->GetSelection()).getAxis1Angle();
259  label_axis_1_x_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), axis_1_x)));
260  label_axis_1_y_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), axis_1_y)));
261  label_axis_1_z_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), axis_1_z)));
262  label_axis_1_angle_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), axis_1_angle)));
263  } else {
264  label_axis_1_x_value->SetLabel(wxT("-"));
265  label_axis_1_y_value->SetLabel(wxT("-"));
266  label_axis_1_z_value->SetLabel(wxT("-"));
267  label_axis_1_angle_value->SetLabel(wxT("-"));
268  }
269  double score_2D = views.at(list_box_views->GetSelection()).getScore2D();
270  bool use_color = views.at(list_box_views->GetSelection()).getUseColor();
271  bool is_invertible = views.at(list_box_views->GetSelection()).getIsInvertible();
272  int vertical_offset = views.at(list_box_views->GetSelection()).getVerticalOffset();
273  int horizontal_offset = views.at(list_box_views->GetSelection()).getHorizontalOffset();
274  int depth = views.at(list_box_views->GetSelection()).getDepth();
275  int number_ferns = views.at(list_box_views->GetSelection()).getNumberFerns();
276  int patch_size = views.at(list_box_views->GetSelection()).getPatchSize();
277  double min_scale = views.at(list_box_views->GetSelection()).getMinScale();
278  double max_scale = views.at(list_box_views->GetSelection()).getMaxScale();
279 
280  label_orientation_x_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), orientation_x)));
281  label_orientation_y_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), orientation_y)));
282  label_orientation_z_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), orientation_z)));
283  label_score_2D_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), score_2D)));
284  if (use_color) {
285  label_use_color_value->SetLabel(wxT("Yes"));
286  } else {
287  label_use_color_value->SetLabel(wxT("No"));
288  }
289  if (is_invertible) {
290  label_invertible_value->SetLabel(wxT("Yes"));
291  } else {
292  label_invertible_value->SetLabel(wxT("No"));
293  }
294 
295  label_vertical_offset_value->SetLabel(wxString::Format(wxT("%i"), vertical_offset));
296  label_horizontal_offset_value->SetLabel(wxString::Format(wxT("%i"), horizontal_offset));
297  label_depth_value->SetLabel(wxString::Format(wxT("%i"), depth));
298  label_number_ferns_value->SetLabel(wxString::Format(wxT("%i"), number_ferns));
299  label_patch_size_value->SetLabel(wxString::Format(wxT("%i"), patch_size));
300  label_min_scale_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), min_scale)));
301  label_max_scale_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), max_scale)));
302 
303  button_edit_model->Enable(true);
304  image->setImage(createBitmap(drawBoundingBox(views.at(list_box_views->GetSelection()).getImage(), views.at(list_box_views->GetSelection()).getBoxCorners()), 300, 225));
305  image->paintNow();
306 
307  }
308 
309 }
310 
311 void DescModelsDialog::onImageClicked(wxMouseEvent &event)
312 {
313  int pos_x = event.GetX();
314  int pos_y = event.GetY();
315 
316  if ((pos_x > 0 && pos_x < 300) && (pos_y > 0 && pos_y < 225) && (list_box_views->GetSelection() >= 0)) {
317  if (views.at(list_box_views->GetSelection()).getBoxCorners().size() == 4) {
318  views.at(list_box_views->GetSelection()).clearBoundingBox();
319  } else {
320  double pos_x_factor = pos_x / 300.0f;
321  double pos_y_factor = pos_y / 225.0f;
322  pos_x = (double)views.at(list_box_views->GetSelection()).getImage().Width() * pos_x_factor;
323  pos_y = (double)views.at(list_box_views->GetSelection()).getImage().Height() * pos_y_factor;
324  views.at(list_box_views->GetSelection()).addBoxCorner(Eigen::Vector2i(pos_x, pos_y));
325  if (views.at(list_box_views->GetSelection()).getBoxCorners().size() == 4) {
326  views.at(list_box_views->GetSelection()).setHasBoundingBox();
327  } else {
328  views.at(list_box_views->GetSelection()).setHasBoundingBox(false);
329  }
330  }
331 
332  image->setImage(createBitmap(drawBoundingBox(views.at(list_box_views->GetSelection()).getImage(), views.at(list_box_views->GetSelection()).getBoxCorners()), 300, 225));
333  image->paintNow();
334  }
335 }
336 
337 void DescModelsDialog::onImageClickedRight(wxMouseEvent &event)
338 {
339  int pos_x = event.GetX();
340  int pos_y = event.GetY();
341 
342  if ((pos_x > 0 && pos_x < 300) && (pos_y > 0 && pos_y < 225) && (list_box_views->GetSelection() >= 0)) {
343  views.at(list_box_views->GetSelection()).clearBoundingBox();
344  image->setImage(createBitmap(drawBoundingBox(views.at(list_box_views->GetSelection()).getImage(), views.at(list_box_views->GetSelection()).getBoxCorners()), 300, 225));
345  image->paintNow();
346  }
347 }
#define NULL
wxStaticText * label_invertible_value
wxStaticText * label_axis_1_x_value
void resetGuiValues()
Resets all the shown values to default.
std::vector< ViewParamsWrapper > views
std::string orientation_y
wxStaticText * label_max_scale_value
wxStaticText * label_horizontal_offset_value
void onAddModelClicked(wxCommandEvent &event)
void OnDialogClose(wxCloseEvent &event)
wxString trimDoubleString(wxString input)
Formats the given string by removing fractional zeros at the end of it.
Definition: Utils.cpp:86
void onFinishClicked(wxCommandEvent &event)
std::string orientation_z
void onEditModelClicked(wxCommandEvent &event)
HalconCpp::HImage drawBoundingBox(HalconCpp::HImage image, std::vector< Eigen::Vector2i > corner_points)
Draws a bounding box on the given image with the also given corner-points.
Definition: Utils.cpp:118
std::string rotation_type
wxStaticText * label_min_scale_value
wxStaticText * label_axis_2_y_value
void onDeleteModelClicked(wxCommandEvent &event)
wxStaticText * label_vertical_offset_value
wxStaticText * label_axis_1_angle_value
void onListBoxSelected(wxCommandEvent &event)
wxStaticText * label_axis_2_angle_value
wxStaticText * label_use_color_value
std::string object_model
const std::string ROTATIONTYPE_SPHERE
Definition: Utils.h:43
wxStaticText * label_axis_1_y_value
const std::string ROTATIONTYPE_NO_ROTATION
Definition: Utils.h:37
wxStaticText * label_score_2D_value
wxStaticText * label_axis_2_z_value
std::vector< ViewParamsWrapper > getViews()
Returns the list of created 2D-views.
wxStaticText * label_axis_1_z_value
void onBackClicked(wxCommandEvent &event)
void onImageClickedRight(wxMouseEvent &event)
wxStaticText * label_orientation_x_value
void setImage(wxBitmap *image)
wxBitmap * createBitmap(const sensor_msgs::Image::ConstPtr &msg, int width, int height)
Converts a ros-image-message to a bitmap-file used by wxwidgets.
Definition: Utils.cpp:40
wxStaticText * label_orientation_z_value
wxStaticText * label_number_ferns_value
std::vector< std::string > getObjectParameters()
Returns the list of object parameters.
wxStaticText * label_patch_size_value
wxStaticText * label_orientation_y_value
void onCancelClicked(wxCommandEvent &event)
std::string orientation_x
wxStaticText * label_axis_2_x_value
void onImageClicked(wxMouseEvent &event)
DescModelsDialog(wxWindow *parent, std::string name, std::string object_model, std::string mesh, std::string rotation_type, std::string orientation_x, std::string orientation_y, std::string orientation_z, std::string diameter, std::string score_3D)
The constructor of this class.


asr_descriptor_surface_based_recognition
Author(s): Allgeyer Tobias, Hutmacher Robin, Meißner Pascal
autogenerated on Mon Dec 16 2019 03:31:15