MatOCAD Logo

Main Page | Class Hierarchy | Class List | Directories | File List | Class Members | File Members | Related Pages

Opz3dDlg.cpp

Go to the documentation of this file.
00001 //---------------------------------------------------------------------------
00002 //
00003 // Name:        Opz3dDlg.cpp
00004 // Author:      alex
00005 // Created:     19/05/2005 21.27.07
00006 //
00007 //---------------------------------------------------------------------------
00008 
00009 #include "../../../include/Grafico3d/opzioni3d/Opz3dDlg.h"
00010 
00011 //Do not add custom headers.
00012 //wx-dvcpp designer will remove them
00014 #include "../../../icons/Opz3dDlg_XPM.xpm"
00016 
00017 
00018 
00019 //----------------------------------------------------------------------------
00020 // Opz3dDlg
00021 //----------------------------------------------------------------------------
00022      //Add Custom Events only in the appropriate Block.
00023     // Code added in  other places will be removed by wx-dvcpp
00025 BEGIN_EVENT_TABLE(Opz3dDlg,wxDialog)
00027         EVT_CHECKBOX(ID_CHKGRIGLIA,Opz3dDlg::ChkGridClick)
00028         EVT_CHECKBOX(ID_CHKSFUMA,Opz3dDlg::ChkSfumaClick)
00030 
00031         EVT_CLOSE(Opz3dDlg::Opz3dDlgClose)
00032         EVT_BUTTON(ID_BTNANNULLA,Opz3dDlg::BtnAnnullaClick)
00033         EVT_BUTTON(ID_BTNOK,Opz3dDlg::BtnOkClick1)
00034         EVT_BUTTON(ID_BTNMODIFICA,Opz3dDlg::BtnModificaClick)
00035         EVT_BUTTON(ID_BTNINSERISCI,Opz3dDlg::BtnInserisciClick)
00036         EVT_BUTTON(ID_BTNCLRGRAFICO,Opz3dDlg::BtnClrGraficoClick)
00037         EVT_LISTBOX(ID_LSTFUNZIONI,Opz3dDlg::LstFunzioniEnter)
00038         EVT_BUTTON(ID_BTNRIMUOVI,Opz3dDlg::BtnRimuoviClick)
00039 END_EVENT_TABLE()
00041 
00042 //______________________________________________________________________________
00043 Opz3dDlg::Opz3dDlg( wxWindow *parent,TLista3D *listaFunz, wxWindowID id, const wxString &title, const wxPoint &position, const wxSize& size, long style )
00044     : wxDialog( parent, id, title, position, size, style)
00045 {
00046     listaFunzioni=listaFunz;
00047     pr *struttFunz;
00048     CreateGUIControls();
00049     int i;
00050       wxString str;
00051 
00052      AggiornaList();
00053      str.Printf(_T("%f"),listaFunzioni->xmax);
00054      EdtXMax->WriteText(str);
00055      str.Printf(_T("%f"),listaFunzioni->xmin);
00056      EdtXMin->WriteText(str);
00057      str.Printf(_T("%f"),listaFunzioni->ymax);
00058      EdtYMax->WriteText(str);
00059      str.Printf(_T("%f"),listaFunzioni->xmin);
00060      EdtYMin->WriteText(str);
00061      str.Printf(_T("%f"),listaFunzioni->zmax);
00062      EdtZmax->WriteText(str);
00063      str.Printf(_T("%f"),listaFunzioni->zmin);
00064      EdtZmin->WriteText(str);
00065      str.Printf(_T("%i"),listaFunzioni->risoluzione_c);
00066      EdtRisC->WriteText(str);
00067      str.Printf(_T("%i"),listaFunzioni->risoluzione_r);
00068      EdtRisR->WriteText(str);
00069 }
00070 
00071 Opz3dDlg::~Opz3dDlg() {}
00072 //______________________________________________________________________________
00073 void Opz3dDlg::CreateGUIControls(void)
00074 {
00075     //Do not add custom Code here
00076     //wx-devcpp designer will remove them.
00077     //Add the custom code before or after the Blocks
00079 
00080         WxNotebook1 =  new wxNotebook(this, ID_WXNOTEBOOK1, wxPoint(5,17),wxSize(447,441) );
00081 
00082         WxNoteBookPage1 =  new wxPanel(WxNotebook1, ID_WXNOTEBOOKPAGE1,wxPoint(4,24),wxSize(439,413) );
00083         WxNotebook1->AddPage(WxNoteBookPage1,_("Proprietà Generali"));
00084 
00085         WxYBox =  new wxStaticBox(WxNoteBookPage1, ID_WXYBOX,_("Asse Y"),wxPoint(4,105),wxSize(206,94)  );
00086 
00087         LblYMin =  new wxStaticText(WxNoteBookPage1, ID_WXSTATICTEXT8 ,_("Y Min") ,wxPoint(25,130),wxSize(31,17)  );
00088 
00089         LblYMax =  new wxStaticText(WxNoteBookPage1, ID_WXSTATICTEXT9 ,_("Y Max") ,wxPoint(25,162),wxSize(34,17)  );
00090 
00091         EdtYMin =  new wxTextCtrl(WxNoteBookPage1, ID_EDTYMIN, _("") , wxPoint(88,128),wxSize(37,21) );
00092         EdtYMin->SetMaxLength(0);
00093 
00094         EdtYMax =  new wxTextCtrl(WxNoteBookPage1, ID_EDTYMAX, _("") , wxPoint(88,160),wxSize(37,21) );
00095         EdtYMax->SetMaxLength(0);
00096 
00097         WxStaticBox1 =  new wxStaticBox(WxNoteBookPage1, ID_WXSTATICBOX1,_("Asse X"),wxPoint(6,7),wxSize(204,95)  );
00098 
00099         LblXMax =  new wxStaticText(WxNoteBookPage1, ID_LBLXMAX ,_("X Max") ,wxPoint(22,64),wxSize(34,17)  );
00100 
00101         EdtXMax =  new wxTextCtrl(WxNoteBookPage1, ID_EDTXMAX, _("") , wxPoint(88,64),wxSize(37,21) );
00102         EdtXMax->SetMaxLength(0);
00103 
00104         EdtXMin =  new wxTextCtrl(WxNoteBookPage1, ID_EDTXMIN, _("") , wxPoint(88,32),wxSize(37,21) );
00105         EdtXMin->SetMaxLength(0);
00106 
00107         LblXMin =  new wxStaticText(WxNoteBookPage1, ID_LBLXMIN ,_("X Min") ,wxPoint(24,32),wxSize(31,17)  );
00108 
00109         WxZbox =  new wxStaticBox(WxNoteBookPage1, ID_WXZBOX,_("Asse Z"),wxPoint(1,211),wxSize(209,105)  );
00110 
00111         EdtZmin =  new wxTextCtrl(WxNoteBookPage1, ID_EDTZMIN, _("") , wxPoint(88,232),wxSize(40,21) );
00112         EdtZmin->SetMaxLength(0);
00113 
00114         EdtZmax =  new wxTextCtrl(WxNoteBookPage1, ID_EDTZMAX, _("") , wxPoint(88,264),wxSize(41,21) );
00115         EdtZmax->SetMaxLength(0);
00116 
00117         WxStaticText2 =  new wxStaticText(WxNoteBookPage1, ID_WXSTATICTEXT2 ,_("Z Min") ,wxPoint(25,241),wxSize(31,17)  );
00118 
00119         WxStaticText3 =  new wxStaticText(WxNoteBookPage1, ID_WXSTATICTEXT3 ,_("Z Max") ,wxPoint(25,269),wxSize(34,17)  );
00120 
00121         WxStaticBox3 =  new wxStaticBox(WxNoteBookPage1, ID_WXSTATICBOX3,_("Risoluzione"),wxPoint(229,14),wxSize(185,182)  );
00122 
00123         WxStaticText4 =  new wxStaticText(WxNoteBookPage1, ID_WXSTATICTEXT4 ,_("Righe") ,wxPoint(256,70),wxSize(32,17)  );
00124 
00125         WxStaticText5 =  new wxStaticText(WxNoteBookPage1, ID_WXSTATICTEXT5 ,_("Colonne") ,wxPoint(256,112),wxSize(43,17)  );
00126 
00127         EdtRisR =  new wxTextCtrl(WxNoteBookPage1, ID_EDTRISR, _("") , wxPoint(306,67),wxSize(67,21) );
00128         EdtRisR->SetMaxLength(0);
00129 
00130         EdtRisC =  new wxTextCtrl(WxNoteBookPage1, ID_EDTRISC, _("") , wxPoint(308,109),wxSize(65,21) );
00131         EdtRisC->SetMaxLength(0);
00132 
00133         WxNoteBookPage2 =  new wxPanel(WxNotebook1, ID_WXNOTEBOOKPAGE2,wxPoint(4,24),wxSize(439,413) );
00134         WxNotebook1->AddPage(WxNoteBookPage2,_("Funzioni"));
00135 
00136         LblFunzione =  new wxStaticText(WxNoteBookPage2, ID_LBLFUNZIONE ,_("Funzioni") ,wxPoint(13,5),wxSize(43,17)  );
00137 
00138         BtnRimuovi =  new wxButton(WxNoteBookPage2, ID_BTNRIMUOVI, _("Rimuovi ") , wxPoint(322,239),wxSize(95,25) );
00139 
00140         LstFunzioni =  new wxCheckListBox(WxNoteBookPage2, ID_LSTFUNZIONI ,wxPoint(14,21),wxSize(406,212));
00141 
00142         WxStaticBox2 =  new wxStaticBox(WxNoteBookPage2, ID_WXSTATICBOX2,_("Nuova Funzione"),wxPoint(10,269),wxSize(414,110)  );
00143 
00144         EdtNuovaFx =  new wxTextCtrl(WxNoteBookPage2, ID_EDTNUOVAFX, _("") , wxPoint(102,291),wxSize(222,21) );
00145         EdtNuovaFx->SetMaxLength(0);
00146 
00147         WxStaticText9 =  new wxStaticText(WxNoteBookPage2, ID_WXSTATICTEXT9 ,_("DESCRIZIONE") ,wxPoint(17,294),wxSize(77,17)  );
00148 
00149         LblClrGrafico =  new wxStaticText(WxNoteBookPage2, ID_LBLCLRGRAFICO ,_("     ") ,wxPoint(93,319),wxSize(19,17)  );
00150         LblClrGrafico->SetForegroundColour(*wxRED);
00151         LblClrGrafico->SetBackgroundColour(*wxRED);
00152 
00153         BtnClrGrafico =  new wxButton(WxNoteBookPage2, ID_BTNCLRGRAFICO, _("Colore...") , wxPoint(121,316),wxSize(65,25) );
00154 
00155         WxStaticText1 =  new wxStaticText(WxNoteBookPage2, ID_WXSTATICTEXT1 ,_("COLORE") ,wxPoint(17,321),wxSize(48,17)  );
00156 
00157         BtnInserisci =  new wxButton(WxNoteBookPage2, ID_BTNINSERISCI, _("Aggiungi") , wxPoint(249,349),wxSize(77,25) );
00158 
00159         BtnModifica =  new wxButton(WxNoteBookPage2, ID_BTNMODIFICA, _("Modifica") , wxPoint(336,350),wxSize(78,24) );
00160 
00161         chkSfuma =  new wxCheckBox(WxNoteBookPage2, ID_CHKSFUMA, _("Colore Sfumato") , wxPoint(21,344),wxSize(97,17) );
00162 
00163         chkGriglia =  new wxCheckBox(WxNoteBookPage2, ID_CHKGRIGLIA, _("Grafico Grigliato") , wxPoint(21,360),wxSize(97,17) );
00164 
00165         BtnOk =  new wxButton(this, ID_BTNOK, _("Ok") , wxPoint(7,463),wxSize(67,27) );
00166 
00167         BtnAnnulla =  new wxButton(this, ID_BTNANNULLA, _("Annulla") , wxPoint(84,463),wxSize(64,27) );
00168 
00169         ClrDlgGrafico =  new wxColourDialog(this);
00170 
00171         this->SetSize(8,8,491,548);
00172         this->SetTitle(_("Opzioni Grafico 3D"));
00173         this->Center();
00174         wxIcon Opz3dDlg_ICON (Opz3dDlg_XPM);
00175         this->SetIcon(Opz3dDlg_XPM);
00176 
00178 }
00179 //______________________________________________________________________________
00180 void Opz3dDlg::Opz3dDlgClose(wxCloseEvent& event)
00181 {
00182     // --> Don't use Close with a wxDialog,
00183     // use Destroy instead.
00184     Destroy();
00185 }
00186  //______________________________________________________________________________
00187 void Opz3dDlg::LstFunzioniEnter(wxCommandEvent& event){
00188 
00189     int posfunzione=LstFunzioni->GetSelection()+1;
00190         pr* funzione=listaFunzioni->EstraiPtr(posfunzione);
00191     if (posfunzione==0)
00192        BtnModifica->Enable(0);
00193     else
00194         BtnModifica->Enable(1);
00195 
00196     this->LblClrGrafico->SetBackgroundColour((wxColor)((funzione->colore).red,(funzione->colore).green,(funzione->colore).blue));
00197         this->LblClrGrafico->Refresh();
00198 
00199 
00200 
00201    //Carico nella text di modifica la funzione selezionata nella lista
00202     this->EdtNuovaFx->Clear();
00203     this->EdtNuovaFx->WriteText(LstFunzioni->GetString(posfunzione-1));
00204     chkSfuma->SetValue(funzione->sfumatura);
00205     chkGriglia->SetValue(funzione->griglia);
00206         event.Skip();
00207 }
00208 //______________________________________________________________________________
00209 void Opz3dDlg::BtnInserisciClick(wxCommandEvent& event){
00210 
00211          rif* puntastruttura;
00212          TParserScomponi compila;
00213          char funzione[255];
00214 
00215     strcpy(funzione,EdtNuovaFx->GetValue().ToAscii());
00216         puntastruttura=compila.Traduci_funzione(funzione);
00217 
00218    if (strcmp(funzione,"err")!=0){
00219      listaFunzioni->NuovoNodo(  LblClrGrafico->GetBackgroundColour(),
00220                                 funzione,
00221                                 puntastruttura,
00222                                 1,
00223                                 chkGriglia->GetValue(),
00224                                 chkSfuma->GetValue());
00225 
00226         AggiornaList();
00227    }
00228    else{
00229      wxMessageDialog messaggio(this,_T("Errori di sintassi nella funzione, reinserirla correttamente"),_T("Matocad"),wxICON_HAND);
00230      messaggio.ShowModal();
00231    }
00232 
00233     event.Skip();
00234 }
00235 //______________________________________________________________________________
00236 void  Opz3dDlg::BtnClrGraficoClick(wxCommandEvent& event){
00237     int posizione;
00238         pr *funz;
00239     //apro la finestra selezione colore e su conferma aggiono etichetta colore sfondo
00240         if (ClrDlgGrafico->ShowModal()==wxID_OK){
00241        LblClrGrafico->SetBackgroundColour(ClrDlgGrafico->GetColourData().GetColour());
00242        LblClrGrafico->Refresh();
00243        posizione=LstFunzioni->GetSelection();
00244 
00245        if (posizione>=0){
00246           funz=listaFunzioni->EstraiPtr(posizione+1);
00247           funz->colore.red=LblClrGrafico->GetBackgroundColour().Red();
00248           funz->colore.green=LblClrGrafico->GetBackgroundColour().Green();
00249             funz->colore.blue=LblClrGrafico->GetBackgroundColour().Blue();
00250        }
00251     }
00252 
00253         event.Skip();
00254 
00255 }
00256 //______________________________________________________________________________
00257 void Opz3dDlg::BtnModificaClick(wxCommandEvent& event){
00258      int posizione;
00259          rif* puntastruttura;
00260          TParserScomponi compila;
00261          char funzione[255];
00262      strcpy(funzione,EdtNuovaFx->GetValue().ToAscii());
00263          puntastruttura=compila.Traduci_funzione(funzione);
00264      posizione=LstFunzioni->GetSelection();
00265       if (strcmp(funzione,"err")!=0){
00266          if (posizione>=0)
00267             listaFunzioni->ModificaElemento( posizione+1,
00268                                              LblClrGrafico->GetBackgroundColour(),
00269                                              funzione,
00270                                              puntastruttura,
00271                                              LstFunzioni->IsChecked(posizione),
00272                                              chkGriglia->IsChecked(),
00273                                              chkSfuma->IsChecked());
00274          AggiornaList();
00275       }
00276 }
00277 //______________________________________________________________________________
00278 void Opz3dDlg::BtnRimuoviClick(wxCommandEvent& event){
00279      int posizione;
00280      posizione=LstFunzioni->GetSelection();
00281      if (posizione>=0)
00282         listaFunzioni->RimuoviNodo(posizione+1);
00283      AggiornaList();
00284 }
00285 //______________________________________________________________________________
00286 
00287 void Opz3dDlg::BtnOkClick1(wxCommandEvent& event){
00288      char *errore=0;
00289      float xmax,xmin,ymin,ymax,zmin,zmax;
00290      int ris_c,ris_r;
00291 
00292      xmax=strtod(EdtXMax->GetValue().ToAscii(),&errore);
00293      if (!(*errore))
00294         if (xmax!=listaFunzioni->xmax){
00295            listaFunzioni->bisogna_ricalcolare=1;
00296            listaFunzioni->xmax=xmax;
00297         }
00298      xmin=strtod(EdtXMin->GetValue().ToAscii(),&errore);
00299      if (!(*errore))
00300         if (xmin!=listaFunzioni->xmin){
00301            listaFunzioni->bisogna_ricalcolare=1;
00302            listaFunzioni->xmin=xmin;
00303         }
00304      ymax=strtod(EdtYMax->GetValue().ToAscii(),&errore);
00305      if (!(*errore))
00306         if (ymax!=listaFunzioni->ymax){
00307            listaFunzioni->bisogna_ricalcolare=1;
00308            listaFunzioni->ymax=ymax;
00309         }
00310       ymin=strtod(EdtYMin->GetValue().ToAscii(),&errore);
00311 
00312      if (!(*errore))
00313         if (ymin!=listaFunzioni->ymin){
00314            listaFunzioni->bisogna_ricalcolare=1;
00315            listaFunzioni->ymin=ymin;
00316         }
00317       zmax=strtod(EdtZmax->GetValue().ToAscii(),&errore);
00318      if (!(*errore))
00319         if (zmax!=listaFunzioni->zmax){
00320            listaFunzioni->bisogna_ricalcolare=1;
00321            listaFunzioni->zmax=zmax;
00322         }
00323       zmin=strtod(EdtZmin->GetValue().ToAscii(),&errore);
00324 
00325      if (!(*errore))
00326         if (zmin!=listaFunzioni->zmin){
00327            listaFunzioni->bisogna_ricalcolare=1;
00328            listaFunzioni->zmin=zmin;
00329         }
00330 
00331      ris_c=(int)strtod(EdtRisC->GetValue().ToAscii(),&errore);
00332       if (!(*errore))
00333         if (ris_c!=listaFunzioni->risoluzione_c){
00334            listaFunzioni->bisogna_ricalcolare=1;
00335            listaFunzioni->risoluzione_c=ris_c;
00336         }
00337 
00338      ris_r=(int)strtod(EdtRisR->GetValue().ToAscii(),&errore);
00339       if (!(*errore))
00340         if (ris_r!=listaFunzioni->risoluzione_r){
00341            listaFunzioni->bisogna_ricalcolare=1;
00342            listaFunzioni->risoluzione_r=ris_r;
00343         }
00344 
00345      if( listaFunzioni->zmax>listaFunzioni->zmin &&
00346          listaFunzioni->ymax>listaFunzioni->ymin &&
00347          listaFunzioni->xmax>listaFunzioni->xmin){
00348 
00349            if (listaFunzioni->bisogna_ricalcolare)
00350               listaFunzioni->Ricalcola();
00351 
00352           Destroy();
00353       }else{
00354             wxMessageDialog messaggio( this,
00355                                        _T("Inserire correttamente gli estremi dell'area di disegno"),
00356                                        _T("Matocad"),wxICON_HAND);
00357             messaggio.ShowModal();
00358       }
00359 
00360 }
00361 //______________________________________________________________________________
00362 
00363 void Opz3dDlg::ChkGridClick(wxCommandEvent& event){
00364      char check;
00365      pr *funzione;
00366      int posizione;
00367      posizione=LstFunzioni->GetSelection();
00368      check= chkGriglia->GetValue();
00369      if (posizione>=0){
00370         funzione=listaFunzioni->EstraiPtr(posizione+1);
00371         funzione->griglia=check;
00372      }
00373 
00374 }
00375 //______________________________________________________________________________
00376 
00377 void Opz3dDlg::ChkSfumaClick(wxCommandEvent& event){
00378      char check;
00379      pr *funzione;
00380      int posizione;
00381      posizione=LstFunzioni->GetSelection();
00382      check= chkSfuma->GetValue();
00383      if (posizione>=0){
00384         funzione=listaFunzioni->EstraiPtr(posizione+1);
00385         funzione->sfumatura=check;
00386      }
00387 }
00388 //______________________________________________________________________________
00389 void Opz3dDlg::ChkListClick(wxCommandEvent& event){
00390 
00391      pr *funzione;
00392      int posizione;
00393      posizione=LstFunzioni->GetSelection();
00394      if (posizione>=0){
00395         funzione=listaFunzioni->EstraiPtr(posizione+1);
00396         funzione->flagdisegno=(int)LstFunzioni->IsChecked(posizione);
00397      }
00398 }
00399 //______________________________________________________________________________
00400 void Opz3dDlg::BtnAnnullaClick(wxCommandEvent& event){
00401      Destroy();
00402 }
00403 //______________________________________________________________________________
00404 void Opz3dDlg::AggiornaList(){
00405 
00406      int i;
00407      LstFunzioni->Clear();
00408      for (i=1;i<=listaFunzioni->numeroelementi;i++){
00409          LstFunzioni->AppendString(wxString(listaFunzioni->EstraiFunzione(i),wxConvUTF8));
00410          if(listaFunzioni->EstraiFlagDisegno(i)==1)
00411          LstFunzioni->Check(i-1,1);
00412      }
00413 }

 

SourceForge Logo