1 // Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 // File : SMESHGUI_MeshInfosBox.cxx
21 // Author : Edward AGAPOV, Open CASCADE S.A.S.
24 #include "SMESHGUI_MeshInfosBox.h"
26 #include "SMDSAbs_ElementType.hxx"
31 #include <QGridLayout>
36 #define COLONIZE(str) (QString(str).contains(":") > 0 ? QString(str) : QString(str) + " :" )
38 static void addSeparator( QWidget* parent )
40 QGridLayout* l = qobject_cast<QGridLayout*>( parent->layout() );
41 int row = l->rowCount();
42 int cols = l->columnCount();
43 for ( int i = 0; i < cols; i++ ) {
44 QFrame* hline = new QFrame( parent );
45 hline->setFrameStyle( QFrame::HLine | QFrame::Sunken );
46 l->addWidget( hline, row, i );
51 COL_ALGO = 0, COL_SHAPE, COL_ERROR, COL_SHAPEID, COL_PUBLISHED, COL_BAD_MESH, NB_COLUMNS
54 // =========================================================================================
56 * \brief Box showing mesh info
58 // =========================================================================================
60 SMESHGUI_MeshInfosBox::SMESHGUI_MeshInfosBox(const bool full, QWidget* theParent)
61 : QGroupBox( tr("SMESH_MESHINFO_TITLE"), theParent ), myFull( full ),
65 myNbEdge(0), myNbLinEdge(0), myNbQuadEdge(0),
66 myNbTrai(0), myNbLinTrai(0), myNbQuadTrai(0), myNbBiQuadTrai(0),
67 myNbQuad(0), myNbLinQuad(0), myNbQuadQuad(0), myNbBiQuadQuad(0),
68 myNbFace(0), myNbLinFace(0), myNbQuadFace(0), myNbBiQuadFace(0),
70 myNbHexa(0), myNbLinHexa(0), myNbQuadHexa(0), myNbBiQuadHexa(0),
71 myNbTetra(0),myNbLinTetra(0),myNbQuadTetra(0),
72 myNbPyra(0), myNbLinPyra(0), myNbQuadPyra(0),
73 myNbPrism(0),myNbLinPrism(0), myNbQuadPrism(0),
74 myNbVolum(0), myNbLinVolum(0), myNbQuadVolum(0), myNbBiQuadVolum(0),
78 QGridLayout* l = new QGridLayout(this);
79 l->setMargin( MARGIN );
80 l->setSpacing( SPACING );
82 QFont italic = font(); italic.setItalic(true);
83 QFont bold = font(); bold.setBold(true);
89 lab = new QLabel( this );
90 lab->setMinimumWidth(100); lab->setFont( italic );
91 l->addWidget( lab, row, 0 );
93 lab = new QLabel(tr("SMESH_MESHINFO_ORDER0"), this );
94 lab->setMinimumWidth(100); lab->setFont( italic );
95 l->addWidget( lab, row, 1 );
97 lab = new QLabel(tr("SMESH_MESHINFO_ORDER1"), this );
98 lab->setMinimumWidth(100); lab->setFont( italic );
99 l->addWidget( lab, row, 2 );
101 lab = new QLabel(tr("SMESH_MESHINFO_ORDER2"), this );
102 lab->setMinimumWidth(100); lab->setFont( italic );
103 l->addWidget( lab, row, 3 );
105 lab = new QLabel(tr("SMESH_MESHINFO_ORDER3"), this );
106 lab->setMinimumWidth(100); lab->setFont( italic );
107 l->addWidget( lab, row, 4 );
112 row = l->rowCount(); // retrieve current row count
114 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_NODES")), this );
115 lab->setFont( bold );
116 l->addWidget( lab, row, 0 );
118 myNbNode = new QLabel( this );
119 l->addWidget( myNbNode, row, 1 );
121 addSeparator(this); // add separator
124 row = l->rowCount(); // retrieve current row count
126 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_0DELEMS")), this );
127 lab->setFont( bold );
128 l->addWidget( lab, row, 0 );
130 my0DElem = new QLabel( this );
131 l->addWidget( my0DElem, row, 1 );
133 addSeparator(this); // add separator
136 row = l->rowCount(); // retrieve current row count
138 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_BALLS")), this );
139 lab->setFont( bold );
140 l->addWidget( lab, row, 0 );
142 myBall = new QLabel( this );
143 l->addWidget( myBall, row, 1 );
145 addSeparator(this); // add separator
148 row = l->rowCount(); // retrieve current row count
150 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_EDGES")), this );
151 lab->setFont( bold );
152 l->addWidget( lab, row, 0 );
154 myNbEdge = new QLabel( this );
155 l->addWidget( myNbEdge, row, 1 );
157 myNbLinEdge = new QLabel( this );
158 l->addWidget( myNbLinEdge, row, 2 );
160 myNbQuadEdge = new QLabel( this );
161 l->addWidget( myNbQuadEdge, row, 3 );
163 addSeparator(this); // add separator
166 row = l->rowCount(); // retrieve current row count
168 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_FACES")), this);
169 lab->setFont( bold );
170 l->addWidget( lab, row, 0 );
172 myNbFace = new QLabel( this );
173 l->addWidget( myNbFace, row, 1 );
175 myNbLinFace = new QLabel( this );
176 l->addWidget( myNbLinFace, row, 2 );
178 myNbQuadFace = new QLabel( this );
179 l->addWidget( myNbQuadFace, row, 3 );
181 myNbBiQuadFace = new QLabel( this );
182 l->addWidget( myNbBiQuadFace, row, 4 );
184 row++; // increment row count
186 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_TRIANGLES")), this );
187 l->addWidget( lab, row, 0 );
189 myNbTrai = new QLabel( this );
190 l->addWidget( myNbTrai, row, 1 );
192 myNbLinTrai = new QLabel( this );
193 l->addWidget( myNbLinTrai, row, 2 );
195 myNbQuadTrai = new QLabel( this );
196 l->addWidget( myNbQuadTrai, row, 3 );
198 myNbBiQuadTrai = new QLabel( this );
199 l->addWidget( myNbBiQuadTrai, row, 4 );
201 row++; // increment row count
203 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_QUADRANGLES")), this );
204 l->addWidget( lab, row, 0 );
206 myNbQuad = new QLabel( this );
207 l->addWidget( myNbQuad, row, 1 );
209 myNbLinQuad = new QLabel( this );
210 l->addWidget( myNbLinQuad, row, 2 );
212 myNbQuadQuad = new QLabel( this );
213 l->addWidget( myNbQuadQuad, row, 3 );
215 myNbBiQuadQuad = new QLabel( this );
216 l->addWidget( myNbBiQuadQuad, row, 4 );
218 row++; // increment row count
220 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_POLYGONES")), this );
221 l->addWidget( lab, row, 0 );
222 myNbPolyg = new QLabel( this );
223 l->addWidget( myNbPolyg, row, 1 );
225 addSeparator(this); // add separator
228 row = l->rowCount(); // retrieve current row count
230 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_VOLUMES")), this);
231 lab->setFont( bold );
232 l->addWidget( lab, row, 0 );
234 myNbVolum = new QLabel( this );
235 l->addWidget( myNbVolum, row, 1 );
237 myNbLinVolum = new QLabel( this );
238 l->addWidget( myNbLinVolum, row, 2 );
240 myNbQuadVolum = new QLabel( this );
241 l->addWidget( myNbQuadVolum, row, 3 );
243 myNbBiQuadVolum = new QLabel( this );
244 l->addWidget( myNbBiQuadVolum, row, 4 );
246 row++; // increment row count
248 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_TETRAS")), this );
249 l->addWidget( lab, row, 0 );
251 myNbTetra = new QLabel( this );
252 l->addWidget( myNbTetra, row, 1 );
254 myNbLinTetra = new QLabel( this );
255 l->addWidget( myNbLinTetra, row, 2 );
257 myNbQuadTetra = new QLabel( this );
258 l->addWidget( myNbQuadTetra, row, 3 );
260 row++; // increment row count
262 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_HEXAS")), this );
263 l->addWidget( lab, row, 0 );
265 myNbHexa = new QLabel( this );
266 l->addWidget( myNbHexa, row, 1 );
268 myNbLinHexa = new QLabel( this );
269 l->addWidget( myNbLinHexa, row, 2 );
271 myNbQuadHexa = new QLabel( this );
272 l->addWidget( myNbQuadHexa, row, 3 );
274 myNbBiQuadHexa = new QLabel( this );
275 l->addWidget( myNbBiQuadHexa, row, 4 );
277 row++; // increment row count
279 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_PYRAS")), this );
280 l->addWidget( lab, row, 0 );
282 myNbPyra = new QLabel( this );
283 l->addWidget( myNbPyra, row, 1 );
285 myNbLinPyra = new QLabel( this );
286 l->addWidget( myNbLinPyra, row, 2 );
288 myNbQuadPyra = new QLabel( this );
289 l->addWidget( myNbQuadPyra, row, 3 );
291 row++; // increment row count
293 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_PRISMS")), this );
294 l->addWidget( lab, row, 0 );
296 myNbPrism = new QLabel( this );
297 l->addWidget( myNbPrism, row, 1 );
299 myNbLinPrism = new QLabel( this );
300 l->addWidget( myNbLinPrism, row, 2 );
302 myNbQuadPrism = new QLabel( this );
303 l->addWidget( myNbQuadPrism, row, 3 );
305 row++; // increment row count
307 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_HEXAPRISM")), this );
308 l->addWidget( lab, row, 0 );
310 myNbHexaPrism = new QLabel( this );
311 l->addWidget( myNbHexaPrism, row, 1 );
313 row++; // increment row count
315 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_POLYEDRES")), this );
316 l->addWidget( lab, row, 0 );
318 myNbPolyh = new QLabel( this );
319 l->addWidget( myNbPolyh, row, 1 );
324 row = l->rowCount(); // retrieve current row count
326 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_NODES")), this );
327 l->addWidget( lab, row, 0 );
329 myNbNode = new QLabel( this );
330 l->addWidget( myNbNode, row, 1 );
333 row = l->rowCount(); // retrieve current row count
335 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_0DELEMS")), this );
336 l->addWidget( lab, row, 0 );
338 my0DElem = new QLabel( this );
339 l->addWidget( my0DElem, row, 1 );
342 row = l->rowCount(); // retrieve current row count
344 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_BALLS")), this );
345 l->addWidget( lab, row, 0 );
347 myBall = new QLabel( this );
348 l->addWidget( myBall, row, 1 );
350 addSeparator(this); // add separator
353 row = l->rowCount(); // retrieve current row count
355 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_EDGES")), this );
356 l->addWidget( lab, row, 0 );
358 myNbEdge = new QLabel( this );
359 l->addWidget( myNbEdge, row, 1 );
361 myNbLinEdge = new QLabel( this );
362 l->addWidget( myNbLinEdge, row, 2 );
364 myNbQuadEdge = new QLabel( this );
365 l->addWidget( myNbQuadEdge, row, 3 );
368 row = l->rowCount(); // retrieve current row count
370 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_FACES")), this);
371 l->addWidget( lab, row, 0 );
373 myNbFace = new QLabel( this );
374 l->addWidget( myNbFace, row, 1 );
376 myNbLinFace = new QLabel( this );
377 l->addWidget( myNbLinFace, row, 2 );
379 myNbQuadFace = new QLabel( this );
380 l->addWidget( myNbQuadFace, row, 3 );
382 myNbBiQuadFace = new QLabel( this );
383 l->addWidget( myNbBiQuadFace, row, 4 );
386 row = l->rowCount(); // retrieve current row count
388 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_VOLUMES")), this);
389 l->addWidget( lab, row, 0 );
391 myNbVolum = new QLabel( this );
392 l->addWidget( myNbVolum, row, 1 );
394 myNbLinVolum = new QLabel( this );
395 l->addWidget( myNbLinVolum, row, 2 );
397 myNbQuadVolum = new QLabel( this );
398 l->addWidget( myNbQuadVolum, row, 3 );
400 myNbBiQuadVolum = new QLabel( this );
401 l->addWidget( myNbBiQuadVolum, row, 4 );
405 // =========================================================================================
407 * \brief Set mesh info
409 // =========================================================================================
411 void SMESHGUI_MeshInfosBox::SetMeshInfo(const SMESH::long_array& theInfo)
414 myNbNode ->setText( QString("%1").arg( theInfo[SMDSEntity_Node] ));
417 my0DElem ->setText( QString("%1").arg( theInfo[SMDSEntity_0D] ));
420 myBall ->setText( QString("%1").arg( theInfo[SMDSEntity_Ball] ));
423 myNbEdge ->setText( QString("%1").arg( theInfo[SMDSEntity_Edge] +
424 theInfo[SMDSEntity_Quad_Edge] ));
425 myNbLinEdge ->setText( QString("%1").arg( theInfo[SMDSEntity_Edge] ));
426 myNbQuadEdge ->setText( QString("%1").arg( theInfo[SMDSEntity_Quad_Edge] ));
429 myNbFace ->setText( QString("%1").arg( theInfo[SMDSEntity_Triangle] +
430 theInfo[SMDSEntity_Quad_Triangle] +
431 theInfo[SMDSEntity_BiQuad_Triangle] +
432 theInfo[SMDSEntity_Quadrangle] +
433 theInfo[SMDSEntity_Quad_Quadrangle] +
434 theInfo[SMDSEntity_BiQuad_Quadrangle] +
435 theInfo[SMDSEntity_Polygon] ));
436 myNbLinFace ->setText( QString("%1").arg( theInfo[SMDSEntity_Triangle] +
437 theInfo[SMDSEntity_Quadrangle] +
438 theInfo[SMDSEntity_Polygon] ));
439 myNbQuadFace ->setText( QString("%1").arg( theInfo[SMDSEntity_Quad_Triangle] +
440 theInfo[SMDSEntity_Quad_Quadrangle] ));
441 myNbBiQuadFace ->setText( QString("%1").arg( theInfo[SMDSEntity_BiQuad_Triangle] +
442 theInfo[SMDSEntity_BiQuad_Quadrangle] ));
445 myNbVolum ->setText( QString("%1").arg( theInfo[SMDSEntity_Tetra] +
446 theInfo[SMDSEntity_Quad_Tetra] +
447 theInfo[SMDSEntity_Pyramid] +
448 theInfo[SMDSEntity_Quad_Pyramid] +
449 theInfo[SMDSEntity_Hexa] +
450 theInfo[SMDSEntity_Quad_Hexa] +
451 theInfo[SMDSEntity_TriQuad_Hexa] +
452 theInfo[SMDSEntity_Penta] +
453 theInfo[SMDSEntity_Quad_Penta] +
454 theInfo[SMDSEntity_Hexagonal_Prism] +
455 theInfo[SMDSEntity_Polyhedra] ));
456 myNbLinVolum ->setText( QString("%1").arg( theInfo[SMDSEntity_Tetra] +
457 theInfo[SMDSEntity_Pyramid] +
458 theInfo[SMDSEntity_Hexa] +
459 theInfo[SMDSEntity_Penta] +
460 theInfo[SMDSEntity_Polyhedra] ));
461 myNbQuadVolum ->setText( QString("%1").arg( theInfo[SMDSEntity_Quad_Tetra] +
462 theInfo[SMDSEntity_Quad_Pyramid] +
463 theInfo[SMDSEntity_Quad_Hexa] +
464 theInfo[SMDSEntity_Quad_Penta] ));
465 myNbBiQuadVolum->setText( QString("%1").arg( theInfo[SMDSEntity_TriQuad_Hexa] ));
470 myNbTrai ->setText( QString("%1").arg( theInfo[SMDSEntity_Triangle] +
471 theInfo[SMDSEntity_Quad_Triangle] +
472 theInfo[SMDSEntity_BiQuad_Triangle] ));
473 myNbLinTrai ->setText( QString("%1").arg( theInfo[SMDSEntity_Triangle] ));
474 myNbQuadTrai ->setText( QString("%1").arg( theInfo[SMDSEntity_Quad_Triangle] ));
475 myNbBiQuadTrai ->setText( QString("%1").arg( theInfo[SMDSEntity_BiQuad_Triangle] ));
477 myNbQuad ->setText( QString("%1").arg( theInfo[SMDSEntity_Quadrangle] +
478 theInfo[SMDSEntity_Quad_Quadrangle] +
479 theInfo[SMDSEntity_BiQuad_Quadrangle] ));
480 myNbLinQuad ->setText( QString("%1").arg( theInfo[SMDSEntity_Quadrangle] ));
481 myNbQuadQuad ->setText( QString("%1").arg( theInfo[SMDSEntity_Quad_Quadrangle] ));
482 myNbBiQuadQuad ->setText( QString("%1").arg( theInfo[SMDSEntity_BiQuad_Quadrangle]));
484 myNbPolyg ->setText( QString("%1").arg( theInfo[SMDSEntity_Polygon] ));
487 myNbTetra ->setText( QString("%1").arg( theInfo[SMDSEntity_Tetra] +
488 theInfo[SMDSEntity_Quad_Tetra] ));
489 myNbLinTetra ->setText( QString("%1").arg( theInfo[SMDSEntity_Tetra] ));
490 myNbQuadTetra ->setText( QString("%1").arg( theInfo[SMDSEntity_Quad_Tetra] ));
492 myNbHexa ->setText( QString("%1").arg( theInfo[SMDSEntity_Hexa] +
493 theInfo[SMDSEntity_TriQuad_Hexa] +
494 theInfo[SMDSEntity_Quad_Hexa] ));
495 myNbLinHexa ->setText( QString("%1").arg( theInfo[SMDSEntity_Hexa] ));
496 myNbQuadHexa ->setText( QString("%1").arg( theInfo[SMDSEntity_Quad_Hexa] ));
497 myNbBiQuadHexa ->setText( QString("%1").arg( theInfo[SMDSEntity_TriQuad_Hexa] ));
499 myNbPyra ->setText( QString("%1").arg( theInfo[SMDSEntity_Pyramid] +
500 theInfo[SMDSEntity_Quad_Pyramid] ));
501 myNbLinPyra ->setText( QString("%1").arg( theInfo[SMDSEntity_Pyramid] ));
502 myNbQuadPyra ->setText( QString("%1").arg( theInfo[SMDSEntity_Quad_Pyramid] ));
504 myNbPrism ->setText( QString("%1").arg( theInfo[SMDSEntity_Penta] +
505 theInfo[SMDSEntity_Quad_Penta] ));
506 myNbLinPrism ->setText( QString("%1").arg( theInfo[SMDSEntity_Penta] ));
507 myNbQuadPrism->setText( QString("%1").arg( theInfo[SMDSEntity_Quad_Penta] ));
509 myNbHexaPrism->setText( QString("%1").arg( theInfo[ SMDSEntity_Hexagonal_Prism ]));
511 myNbPolyh ->setText( QString("%1").arg( theInfo[SMDSEntity_Polyhedra] ));