00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "creation-maillage.qt.hh"
00025 #include "window.qt.hh"
00026 #include "HtmlEntities.hh"
00027 #include "SpaceWidget.qt.hh"
00028
00029 #include <QtGui/QLabel>
00030 #include <QtGui/QHBoxLayout>
00031 #include <QtGui/QVBoxLayout>
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 CreationMaillage :: CreationMaillage(Window * parent ,
00042 GMap3d :: CControlerGMap * controler) :
00043 CreationObjet(parent , HTML::decode("Création Maillage") ,
00044 controler),
00045 FModifie(true)
00046 {
00047
00048
00049 QWidget * haut = new QWidget ;
00050 QHBoxLayout * bb = new QHBoxLayout(haut);
00051 bb -> setSpacing(0);
00052 bb -> setContentsMargins(0, 0, 0, 0);
00053
00054 FAffCel =
00055 new QLabel(*HTML::decode
00056 (" Dimension de la cellule à créer : ")) ;
00057
00058 FDimCell = new QComboBox ;
00059 FDimCell -> addItem(*HTML::decode("1 (arête/polyligne)")) ;
00060 FDimCell -> addItem("2 (face/grille)") ;
00061 FDimCell -> addItem("3 (maillage/volume 3D)") ;
00062
00063 FAffMai = new QLabel("Dimension du maillage : ") ;
00064
00065 FDimMail = new QComboBox ;
00066 FDimMail -> addItem("0 (pas de maillage)") ;
00067 FDimMail -> addItem(*HTML::decode("1 (maillage d'arête)")) ;
00068 FDimMail -> addItem("2 (maillage de face)") ;
00069 FDimMail -> addItem("3 (maillage de volume)") ;
00070
00071 QObject :: connect(FDimCell , SIGNAL(activated(int)) , this ,
00072 SLOT(callbackDimCell())) ;
00073 QObject :: connect(FDimMail , SIGNAL(activated(int)) , this ,
00074 SLOT(callbackDimMesh())) ;
00075
00076
00077 FAffSub = new QLabel("Subdivisions : ") ;
00078
00079 FAffX = new QLabel(" X : ") ;
00080 FSaisieX = new QSpinBox ;
00081 FSaisieX -> setMinimum(1);
00082 FSaisieX -> setMaximum(1000);
00083 FSaisieX -> setValue(1) ;
00084 FSaisieX -> setAccelerated(true);
00085
00086 FAffY = new QLabel(" Y : ") ;
00087 FSaisieY = new QSpinBox ;
00088 FSaisieY -> setMinimum(1);
00089 FSaisieY -> setMaximum(1000);
00090 FSaisieY -> setValue(1) ;
00091 FSaisieY -> setAccelerated(true);
00092
00093 FAffZ = new QLabel(" Z : ") ;
00094 FSaisieZ = new QSpinBox ;
00095 FSaisieZ -> setMinimum(1);
00096 FSaisieZ -> setMaximum(1000);
00097 FSaisieZ -> setValue(1) ;
00098 FSaisieZ -> setAccelerated(true);
00099
00100 QObject :: connect(FSaisieX , SIGNAL(valueChanged(int)) , this ,
00101 SLOT(callbackSubdivisions())) ;
00102 QObject :: connect(FSaisieY , SIGNAL(valueChanged(int)) , this ,
00103 SLOT(callbackSubdivisions())) ;
00104 QObject :: connect(FSaisieZ , SIGNAL(valueChanged(int)) , this ,
00105 SLOT(callbackSubdivisions())) ;
00106
00107 bb -> addWidget(FAffCel) ;
00108 bb -> addWidget(FDimCell) ;
00109 bb -> addSpacing(SPACE_PIX_SIZE);
00110 bb -> addWidget(FAffMai) ;
00111 bb -> addWidget(FDimMail) ;
00112 bb -> addSpacing(SPACE_PIX_SIZE);
00113 bb -> addWidget(FAffSub) ;
00114 bb -> addWidget(FAffX) ;
00115 bb -> addWidget(FSaisieX) ;
00116 bb -> addWidget(FAffY) ;
00117 bb -> addWidget(FSaisieY) ;
00118 bb -> addWidget(FAffZ) ;
00119 bb -> addWidget(FSaisieZ) ;
00120
00121
00122
00123
00124 QWidget * bas = new QWidget ;
00125 QHBoxLayout * bh = new QHBoxLayout(bas);
00126 bh -> setSpacing(0);
00127 bh -> setContentsMargins(0, 0, 0, 0);
00128
00129 FAffFac = new QLabel(*HTML::decode(" Faces créées : ")) ;
00130 FGauche = new QCheckBox("Gauche ") ;
00131 FDroite = new QCheckBox("Droite ") ;
00132 FDevant = new QCheckBox("Devant ") ;
00133 FDerriere = new QCheckBox(*HTML::decode("Derrière ")) ;
00134 FBas = new QCheckBox("Bas ") ;
00135 FHaut = new QCheckBox("Haut ") ;
00136
00137
00138 bh -> addWidget(FAffFac) ;
00139 bh -> addWidget(FGauche) ;
00140 bh -> addWidget(FDroite) ;
00141 bh -> addWidget(FDevant) ;
00142 bh -> addWidget(FDerriere) ;
00143 bh -> addWidget(FBas) ;
00144 bh -> addWidget(FHaut) ;
00145
00146 FChoix = new BoutonsCreation(this , bh) ;
00147
00148
00149 QWidget * centre = new QWidget ;
00150 QVBoxLayout * bl = new QVBoxLayout(centre);
00151 bl -> setSpacing(5);
00152 bl -> setContentsMargins(0, 0, 0, 0);
00153 bl -> addWidget(haut) ;
00154 bl -> addWidget(bas) ;
00155
00156 addWidget(centre);
00157
00158 FPosit = new BoitePositionnement(this , parent , OBJECT_MESH) ;
00159
00160 update() ;
00161 repaint() ;
00162
00163 QObject :: connect(FGauche , SIGNAL(clicked()) , this ,
00164 SLOT(callbackToggleButton())) ;
00165 QObject :: connect(FDroite , SIGNAL(clicked()) , this ,
00166 SLOT(callbackToggleButton())) ;
00167 QObject :: connect(FDevant , SIGNAL(clicked()) , this ,
00168 SLOT(callbackToggleButton())) ;
00169 QObject :: connect(FDerriere , SIGNAL(clicked()) , this ,
00170 SLOT(callbackToggleButton())) ;
00171 QObject :: connect(FBas , SIGNAL(clicked()) , this ,
00172 SLOT(callbackToggleButton())) ;
00173 QObject :: connect(FHaut , SIGNAL(clicked()) , this ,
00174 SLOT(callbackToggleButton())) ;
00175 }
00176
00177
00178
00179 CreationMaillage :: ~CreationMaillage() { }
00180
00181 void CreationMaillage :: update()
00182 {
00183
00184 FModifie = false ;
00185 CreationObjet :: update() ;
00186
00187 FSaisieX->setValue(FControler->getParameterCreation()
00188 ->getMeshNbSubdivisionsX());
00189 FSaisieY->setValue(FControler->getParameterCreation()
00190 ->getMeshNbSubdivisionsY());
00191 FSaisieZ->setValue(FControler->getParameterCreation()
00192 ->getMeshNbSubdivisionsZ());
00193
00194 unsigned char toCreate =
00195 FControler -> getParameterCreation()->getMeshCreatedFaces();
00196
00197 FGauche -> setChecked((toCreate & (1 << 0)) != 0) ;
00198 FDroite -> setChecked((toCreate & (1 << 1)) != 0) ;
00199 FDevant -> setChecked((toCreate & (1 << 2)) != 0) ;
00200 FDerriere -> setChecked((toCreate & (1 << 3)) != 0) ;
00201 FBas -> setChecked((toCreate & (1 << 4)) != 0) ;
00202 FHaut -> setChecked((toCreate & (1 << 5)) != 0) ;
00203
00204 int dCell = FControler->getParameterCreation()->getMeshDimension();
00205 int dMail = FControler->getParameterCreation()->getMeshSubdivisionDimension();
00206
00207 FDimCell -> setCurrentIndex(dCell - 1) ;
00208 FDimMail -> setCurrentIndex(dMail) ;
00209
00210 bool b = dCell == 3 && dMail != 3 ;
00211
00212 FGauche -> setEnabled(b) ;
00213 FDroite -> setEnabled(b) ;
00214 FDevant -> setEnabled(b) ;
00215 FDerriere -> setEnabled(b) ;
00216 FBas -> setEnabled(b) ;
00217 FHaut -> setEnabled(b) ;
00218
00219 FSaisieX->setEnabled(dMail != 0 && dCell > 0);
00220 FSaisieY->setEnabled(dMail != 0 && dCell > 1);
00221 FSaisieZ->setEnabled(dMail != 0 && dCell > 2);
00222
00223 FModifie = true ;
00224 }
00225
00226
00227 void CreationMaillage::callbackSubdivisions()
00228 {
00229 if (FModifie)
00230 setSubdivisions(getSubdivisions(0),
00231 getSubdivisions(1),
00232 getSubdivisions(2));
00233 }
00234
00235 void CreationMaillage::callbackToggleButton()
00236 {
00237 if (FModifie)
00238 setCreatedFaces(getCreatedFaces());
00239 }
00240
00241 void CreationMaillage::callbackDimCell()
00242 {
00243 if (FModifie)
00244 setCellDimension(1 + FDimCell -> currentIndex()) ;
00245 }
00246
00247 void CreationMaillage::callbackDimMesh()
00248 {
00249 if (FModifie)
00250 setMeshDimension(FDimMail -> currentIndex()) ;
00251 }
00252
00253
00254
00255 int CreationMaillage::getSubdivisions(int i) const
00256 {
00257 switch (i)
00258 {
00259 case 0 :
00260 return FSaisieX -> value() ;
00261 break ;
00262 case 1:
00263 return FSaisieY -> value() ;
00264 break ;
00265 case 2 :
00266 return FSaisieZ -> value() ;
00267 break ;
00268 }
00269 return -1 ;
00270 }
00271
00272 uchar CreationMaillage::getCreatedFaces() const
00273 {
00274 uchar result = 0;
00275
00276 if (FGauche -> isChecked())
00277 result |= (1 << 0) ;
00278 if (FDroite -> isChecked())
00279 result |= (1 << 1) ;
00280 if (FDevant -> isChecked())
00281 result |= (1 << 2) ;
00282 if (FDerriere -> isChecked())
00283 result |= (1 << 3) ;
00284 if (FBas -> isChecked())
00285 result |= (1 << 4) ;
00286 if (FHaut -> isChecked())
00287 result |= (1 << 5) ;
00288
00289 return result;
00290 }
00291
00292 void CreationMaillage :: setSubdivisions(int x , int y , int z)
00293 {
00294 FControler ->getParameterCreation()->setMeshNbSubdivisionsX(x);
00295 FControler ->getParameterCreation()->setMeshNbSubdivisionsY(y);
00296 FControler ->getParameterCreation()->setMeshNbSubdivisionsZ(z);
00297
00298 update() ;
00299 repaint() ;
00300 }
00301
00302 void CreationMaillage :: setCreatedFaces(uchar c)
00303 {
00304 FControler -> getParameterCreation()->setMeshCreatedFaces(c);
00305 update() ;
00306 repaint() ;
00307 }
00308
00309 void CreationMaillage::setCellDimension(int dim)
00310 {
00311 FControler -> getParameterCreation()->setMeshDimension(dim);
00312 update();
00313 repaint() ;
00314 }
00315
00316 void CreationMaillage :: setMeshDimension(int dim)
00317 {
00318 FControler->getParameterCreation()->setMeshSubdivisionDimension(dim);
00319 update() ;
00320 repaint() ;
00321 }