Desc_Models_Dialog.cpp
Go to the documentation of this file.
00001 
00021 #include "descriptor_surface_based_trainer/Desc_Models_Dialog.h"
00022 #include "descriptor_surface_based_trainer/View_Creator_Dialog.h"
00023 #include "descriptor_surface_based_trainer/Create_Output_Files_Dialog.h"
00024 #include "descriptor_surface_based_trainer/Utils.h"
00025 #include "descriptor_surface_based_trainer/Main_Dialog.h"
00026 
00027 
00028 
00029 void DescModelsDialog::resetGuiValues()
00030 {
00031     label_orientation_x_value->SetLabel(wxT(""));
00032     label_orientation_y_value->SetLabel(wxT(""));
00033     label_orientation_z_value->SetLabel(wxT(""));
00034 
00035     label_axis_1_x_value->SetLabel(wxT(""));
00036     label_axis_1_y_value->SetLabel(wxT(""));
00037     label_axis_1_z_value->SetLabel(wxT(""));
00038     label_axis_1_angle_value->SetLabel(wxT(""));
00039     label_axis_2_x_value->SetLabel(wxT(""));
00040     label_axis_2_y_value->SetLabel(wxT(""));
00041     label_axis_2_z_value->SetLabel(wxT(""));
00042     label_axis_2_angle_value->SetLabel(wxT(""));
00043 
00044     label_score_2D_value->SetLabel(wxT(""));
00045     label_use_color_value->SetLabel(wxT(""));
00046     label_invertible_value->SetLabel(wxT(""));
00047 
00048     label_vertical_offset_value->SetLabel(wxT(""));
00049     label_horizontal_offset_value->SetLabel(wxT(""));
00050     label_depth_value->SetLabel(wxT(""));
00051     label_number_ferns_value->SetLabel(wxT(""));
00052     label_patch_size_value->SetLabel(wxT(""));
00053     label_min_scale_value->SetLabel(wxT(""));
00054     label_max_scale_value->SetLabel(wxT(""));
00055 
00056     button_edit_model->Enable(false);
00057 
00058     image->setImage(new wxBitmap(wxImage(300, 225)));
00059     image->paintNow();
00060 }
00061 
00062 std::vector<std::string> DescModelsDialog::getObjectParameters()
00063 {
00064     std::vector<std::string> params;
00065     params.push_back(name);
00066     params.push_back(object_model);
00067     params.push_back(mesh);
00068     params.push_back(rotation_type);
00069     params.push_back(orientation_x);
00070     params.push_back(orientation_y);
00071     params.push_back(orientation_z);
00072     params.push_back(diameter);
00073     params.push_back(score_3D);
00074     return params;
00075 }
00076 
00077 std::vector<ViewParamsWrapper> DescModelsDialog::getViews()
00078 {
00079     return views;
00080 }
00081 
00082 
00083 
00084 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)
00085     : DescModelsDialogBase(parent),
00086       name(name),
00087       object_model(object_model),
00088       mesh(mesh),
00089       rotation_type(rotation_type),
00090       orientation_x(orientation_x),
00091       orientation_y(orientation_y),
00092       orientation_z(orientation_z),
00093       diameter(diameter),
00094       score_3D(score_3D)
00095 {
00096     button_edit_model->Enable(false);
00097     image->setImage(new wxBitmap(wxImage(300, 225)));
00098     image->paintNow();
00099 }
00100 
00101 void DescModelsDialog::OnDialogClose( wxCloseEvent& event )
00102 {
00103     wxMessageDialog *dial = new wxMessageDialog(this,
00104           wxT("Are you sure to quit?"), wxT("Quit"),
00105           wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION);
00106       if (dial->ShowModal() == wxID_YES) {
00107           Destroy();
00108       }
00109 }
00110 
00111 void DescModelsDialog::onAddModelClicked( wxCommandEvent& event )
00112 {
00113     ViewParamsWrapper params(rotation_type);
00114     ViewCreatorDialog *descModelsDialog = new ViewCreatorDialog( (wxWindow*)NULL, &params);
00115     if (descModelsDialog ->ShowModal() == wxID_SAVE) {
00116         if (params.getIsValid()) {
00117             list_box_views->Clear();
00118             views.push_back(params);
00119             for (unsigned int i = 0; i < views.size(); i++) {
00120                 std::string name = this->name + "_view_" + boost::lexical_cast<std::string>(i + 1);
00121                 list_box_views->Insert(wxString(name.c_str(), wxConvUTF8), i);
00122             }
00123             resetGuiValues();
00124             list_box_views->SetSelection(views.size() - 1, true);
00125             wxCommandEvent evt;
00126             onListBoxSelected(evt);
00127 
00128         }
00129     }
00130 
00131 
00132 
00133 }
00134 
00135 void DescModelsDialog::onDeleteModelClicked( wxCommandEvent& event )
00136 {
00137     if (list_box_views->GetSelection() >= 0) {
00138         views.erase(views.begin() + list_box_views->GetSelection());
00139         list_box_views->Clear();
00140         for (unsigned int i = 0; i < views.size(); i++) {
00141             std::string name = this->name + "_view_" + boost::lexical_cast<std::string>(i + 1);
00142             list_box_views->Insert(wxString(name.c_str(), wxConvUTF8), i);
00143         }
00144         resetGuiValues();
00145     }
00146 }
00147 
00148 void DescModelsDialog::onEditModelClicked(wxCommandEvent &event)
00149 {
00150     if (list_box_views->GetCount() > 0) {
00151         views.at(list_box_views->GetSelection()).clearBoundingBox();
00152         ViewCreatorDialog *descModelsDialog = new ViewCreatorDialog( (wxWindow*)NULL, &(views.at(list_box_views->GetSelection())));
00153         descModelsDialog ->ShowModal();
00154         wxCommandEvent evt;
00155         onListBoxSelected(evt);
00156     }
00157 }
00158 
00159 void DescModelsDialog::onCancelClicked( wxCommandEvent& event )
00160 {
00161     wxMessageDialog *dial = new wxMessageDialog(this,
00162           wxT("Are you sure to quit?"), wxT("Quit"),
00163           wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION);
00164       if (dial->ShowModal() == wxID_YES) {
00165           Destroy();
00166       }
00167 }
00168 
00169 
00170 
00171 void DescModelsDialog::onFinishClicked( wxCommandEvent& event )
00172 {
00173     if (list_box_views->GetCount() > 0) {
00174         bool boxes_available = true;
00175         for (unsigned int i = 0; i < views.size(); i++) {
00176             if (!(views.at(i).getHasBoundingBox())) {
00177                 boxes_available = false;
00178                 break;
00179             }
00180         }
00181         if (boxes_available) {
00182             wxMessageDialog *dial = new wxMessageDialog(this,
00183                   wxT("Do you want to create the object with the selected values? This can take several minutes depending on your parameters!"), wxT("Finish"),
00184                   wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION);
00185               if (dial->ShowModal() == wxID_YES) {
00186                   CreateOutputFilesDialog *createOutputFilesDialog = new CreateOutputFilesDialog(this);
00187                   if (createOutputFilesDialog->ShowModal() == wxID_OK) {
00188                       wxMessageDialog *dial = new wxMessageDialog(this,
00189                             wxT("All files successfully created!"), wxT("Success"), wxOK);
00190                       dial->ShowModal();
00191                       Destroy();
00192                   } else {
00193                       wxMessageDialog *dial = new wxMessageDialog(this,
00194                             wxT("Not all files could be created, please check the logfile in the output folder for more information. End the program anyway?"), wxT("Warning"),
00195                             wxYES_NO | wxNO_DEFAULT | wxICON_ERROR);
00196                         if (dial->ShowModal() == wxID_YES) {
00197                             Destroy();
00198                         }
00199                   }
00200               }
00201         } else {
00202             wxMessageDialog *dial = new wxMessageDialog(this,
00203                   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);
00204                dial->ShowModal();
00205         }
00206     } else {
00207         wxMessageDialog *dial = new wxMessageDialog(this,
00208               wxT("Please create at least one view!"), wxT("Warning"), wxOK | wxICON_WARNING);
00209            dial->ShowModal();
00210     }
00211 
00212 }
00213 
00214 void DescModelsDialog::onBackClicked( wxCommandEvent& event )
00215 {
00216     if (list_box_views->GetCount() > 0) {
00217         wxMessageDialog *dial = new wxMessageDialog(this,
00218               wxT("Your created views will be lost if you go back, continue anyway?"), wxT("Warning"),
00219               wxYES_NO | wxNO_DEFAULT | wxICON_WARNING);
00220           if (dial->ShowModal() != wxID_YES) {
00221             return;
00222           }
00223     }
00224     Main_Dialog *mainDialog = new Main_Dialog( (wxWindow*)NULL, name, object_model, mesh, rotation_type, orientation_x, orientation_y, orientation_z, diameter, score_3D);
00225     mainDialog ->Show();
00226     Destroy();
00227 
00228 
00229 }
00230 
00231 
00232 
00233 void DescModelsDialog::onListBoxSelected(wxCommandEvent &event)
00234 {
00235     if (list_box_views->GetSelection() >= 0) {
00236         double orientation_x = views.at(list_box_views->GetSelection()).getOrientation()[0];
00237         double orientation_y = views.at(list_box_views->GetSelection()).getOrientation()[1];
00238         double orientation_z = views.at(list_box_views->GetSelection()).getOrientation()[2];
00239         if (views.at(list_box_views->GetSelection()).getRotationType() == ROTATIONTYPE_SPHERE) {
00240             double axis_2_x = views.at(list_box_views->GetSelection()).getAxis2()[0];
00241             double axis_2_y = views.at(list_box_views->GetSelection()).getAxis2()[1];
00242             double axis_2_z = views.at(list_box_views->GetSelection()).getAxis2()[2];
00243             double axis_2_angle = views.at(list_box_views->GetSelection()).getAxis2Angle();
00244             label_axis_2_x_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), axis_2_x)));
00245             label_axis_2_y_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), axis_2_y)));
00246             label_axis_2_z_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), axis_2_z)));
00247             label_axis_2_angle_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), axis_2_angle)));
00248         } else {
00249             label_axis_2_x_value->SetLabel(wxT("-"));
00250             label_axis_2_y_value->SetLabel(wxT("-"));
00251             label_axis_2_z_value->SetLabel(wxT("-"));
00252             label_axis_2_angle_value->SetLabel(wxT("-"));
00253         }
00254         if (views.at(list_box_views->GetSelection()).getRotationType() != ROTATIONTYPE_NO_ROTATION) {
00255             double axis_1_x = views.at(list_box_views->GetSelection()).getAxis1()[0];
00256             double axis_1_y = views.at(list_box_views->GetSelection()).getAxis1()[1];
00257             double axis_1_z = views.at(list_box_views->GetSelection()).getAxis1()[2];
00258             double axis_1_angle = views.at(list_box_views->GetSelection()).getAxis1Angle();
00259             label_axis_1_x_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), axis_1_x)));
00260             label_axis_1_y_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), axis_1_y)));
00261             label_axis_1_z_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), axis_1_z)));
00262             label_axis_1_angle_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), axis_1_angle)));
00263         } else {
00264             label_axis_1_x_value->SetLabel(wxT("-"));
00265             label_axis_1_y_value->SetLabel(wxT("-"));
00266             label_axis_1_z_value->SetLabel(wxT("-"));
00267             label_axis_1_angle_value->SetLabel(wxT("-"));
00268         }
00269         double score_2D = views.at(list_box_views->GetSelection()).getScore2D();
00270         bool use_color = views.at(list_box_views->GetSelection()).getUseColor();
00271         bool is_invertible = views.at(list_box_views->GetSelection()).getIsInvertible();
00272         int vertical_offset = views.at(list_box_views->GetSelection()).getVerticalOffset();
00273         int horizontal_offset = views.at(list_box_views->GetSelection()).getHorizontalOffset();
00274         int depth = views.at(list_box_views->GetSelection()).getDepth();
00275         int number_ferns = views.at(list_box_views->GetSelection()).getNumberFerns();
00276         int patch_size = views.at(list_box_views->GetSelection()).getPatchSize();
00277         double min_scale = views.at(list_box_views->GetSelection()).getMinScale();
00278         double max_scale = views.at(list_box_views->GetSelection()).getMaxScale();
00279 
00280         label_orientation_x_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), orientation_x)));
00281         label_orientation_y_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), orientation_y)));
00282         label_orientation_z_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), orientation_z)));
00283         label_score_2D_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), score_2D)));
00284         if (use_color) {
00285             label_use_color_value->SetLabel(wxT("Yes"));
00286         } else {
00287             label_use_color_value->SetLabel(wxT("No"));
00288         }
00289         if (is_invertible) {
00290             label_invertible_value->SetLabel(wxT("Yes"));
00291         } else {
00292             label_invertible_value->SetLabel(wxT("No"));
00293         }
00294 
00295         label_vertical_offset_value->SetLabel(wxString::Format(wxT("%i"), vertical_offset));
00296         label_horizontal_offset_value->SetLabel(wxString::Format(wxT("%i"), horizontal_offset));
00297         label_depth_value->SetLabel(wxString::Format(wxT("%i"), depth));
00298         label_number_ferns_value->SetLabel(wxString::Format(wxT("%i"), number_ferns));
00299         label_patch_size_value->SetLabel(wxString::Format(wxT("%i"), patch_size));
00300         label_min_scale_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), min_scale)));
00301         label_max_scale_value->SetLabel(trimDoubleString(wxString::Format(wxT("%f"), max_scale)));
00302 
00303         button_edit_model->Enable(true);
00304         image->setImage(createBitmap(drawBoundingBox(views.at(list_box_views->GetSelection()).getImage(), views.at(list_box_views->GetSelection()).getBoxCorners()), 300, 225));
00305         image->paintNow();
00306 
00307     }
00308 
00309 }
00310 
00311 void DescModelsDialog::onImageClicked(wxMouseEvent &event)
00312 {
00313     int pos_x = event.GetX();
00314     int pos_y = event.GetY();
00315 
00316     if ((pos_x > 0 && pos_x < 300) && (pos_y > 0 && pos_y < 225) && (list_box_views->GetSelection() >= 0)) {
00317         if (views.at(list_box_views->GetSelection()).getBoxCorners().size() == 4) {
00318             views.at(list_box_views->GetSelection()).clearBoundingBox();
00319         } else {
00320             double pos_x_factor = pos_x / 300.0f;
00321             double pos_y_factor = pos_y / 225.0f;
00322             pos_x =  (double)views.at(list_box_views->GetSelection()).getImage().Width() * pos_x_factor;
00323             pos_y =  (double)views.at(list_box_views->GetSelection()).getImage().Height() * pos_y_factor;
00324             views.at(list_box_views->GetSelection()).addBoxCorner(Eigen::Vector2i(pos_x, pos_y));
00325             if (views.at(list_box_views->GetSelection()).getBoxCorners().size() == 4) {
00326                 views.at(list_box_views->GetSelection()).setHasBoundingBox();
00327             } else {
00328                 views.at(list_box_views->GetSelection()).setHasBoundingBox(false);
00329             }
00330         }
00331 
00332         image->setImage(createBitmap(drawBoundingBox(views.at(list_box_views->GetSelection()).getImage(), views.at(list_box_views->GetSelection()).getBoxCorners()), 300, 225));
00333         image->paintNow();
00334     }
00335 }
00336 
00337 void DescModelsDialog::onImageClickedRight(wxMouseEvent &event)
00338 {
00339     int pos_x = event.GetX();
00340     int pos_y = event.GetY();
00341 
00342     if ((pos_x > 0 && pos_x < 300) && (pos_y > 0 && pos_y < 225) && (list_box_views->GetSelection() >= 0)) {
00343         views.at(list_box_views->GetSelection()).clearBoundingBox();
00344         image->setImage(createBitmap(drawBoundingBox(views.at(list_box_views->GetSelection()).getImage(), views.at(list_box_views->GetSelection()).getBoxCorners()), 300, 225));
00345         image->paintNow();
00346     }
00347 }


asr_descriptor_surface_based_recognition
Author(s): Allgeyer Tobias, Hutmacher Robin, Meißner Pascal
autogenerated on Thu Jun 6 2019 17:57:29