00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "../../../include/Grafico3d/opzioni3d/Opz3dDlg.h"
00010
00011
00012
00014 #include "../../../icons/Opz3dDlg_XPM.xpm"
00016
00017
00018
00019
00020
00021
00022
00023
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
00076
00077
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
00183
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
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
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 }