1 // Copyright (C) 2007-2016 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),
69 myNbPolyg(0), myNbQuadPolyg(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 );
223 myNbPolyg = new QLabel( this );
224 l->addWidget( myNbPolyg, row, 1 );
226 myNbLinPolyg = new QLabel( this );
227 l->addWidget( myNbLinPolyg, row, 2 );
229 myNbQuadPolyg = new QLabel( this );
230 l->addWidget( myNbQuadPolyg, row, 3 );
232 addSeparator(this); // add separator
235 row = l->rowCount(); // retrieve current row count
237 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_VOLUMES")), this);
238 lab->setFont( bold );
239 l->addWidget( lab, row, 0 );
241 myNbVolum = new QLabel( this );
242 l->addWidget( myNbVolum, row, 1 );
244 myNbLinVolum = new QLabel( this );
245 l->addWidget( myNbLinVolum, row, 2 );
247 myNbQuadVolum = new QLabel( this );
248 l->addWidget( myNbQuadVolum, row, 3 );
250 myNbBiQuadVolum = new QLabel( this );
251 l->addWidget( myNbBiQuadVolum, row, 4 );
253 row++; // increment row count
255 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_TETRAS")), this );
256 l->addWidget( lab, row, 0 );
258 myNbTetra = new QLabel( this );
259 l->addWidget( myNbTetra, row, 1 );
261 myNbLinTetra = new QLabel( this );
262 l->addWidget( myNbLinTetra, row, 2 );
264 myNbQuadTetra = new QLabel( this );
265 l->addWidget( myNbQuadTetra, row, 3 );
267 row++; // increment row count
269 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_HEXAS")), this );
270 l->addWidget( lab, row, 0 );
272 myNbHexa = new QLabel( this );
273 l->addWidget( myNbHexa, row, 1 );
275 myNbLinHexa = new QLabel( this );
276 l->addWidget( myNbLinHexa, row, 2 );
278 myNbQuadHexa = new QLabel( this );
279 l->addWidget( myNbQuadHexa, row, 3 );
281 myNbBiQuadHexa = new QLabel( this );
282 l->addWidget( myNbBiQuadHexa, row, 4 );
284 row++; // increment row count
286 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_PYRAS")), this );
287 l->addWidget( lab, row, 0 );
289 myNbPyra = new QLabel( this );
290 l->addWidget( myNbPyra, row, 1 );
292 myNbLinPyra = new QLabel( this );
293 l->addWidget( myNbLinPyra, row, 2 );
295 myNbQuadPyra = new QLabel( this );
296 l->addWidget( myNbQuadPyra, row, 3 );
298 row++; // increment row count
300 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_PRISMS")), this );
301 l->addWidget( lab, row, 0 );
303 myNbPrism = new QLabel( this );
304 l->addWidget( myNbPrism, row, 1 );
306 myNbLinPrism = new QLabel( this );
307 l->addWidget( myNbLinPrism, row, 2 );
309 myNbQuadPrism = new QLabel( this );
310 l->addWidget( myNbQuadPrism, row, 3 );
312 row++; // increment row count
314 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_HEXAPRISM")), this );
315 l->addWidget( lab, row, 0 );
317 myNbHexaPrism = new QLabel( this );
318 l->addWidget( myNbHexaPrism, row, 1 );
320 row++; // increment row count
322 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_POLYEDRES")), this );
323 l->addWidget( lab, row, 0 );
325 myNbPolyh = new QLabel( this );
326 l->addWidget( myNbPolyh, row, 1 );
331 row = l->rowCount(); // retrieve current row count
333 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_NODES")), this );
334 l->addWidget( lab, row, 0 );
336 myNbNode = new QLabel( this );
337 l->addWidget( myNbNode, row, 1 );
340 row = l->rowCount(); // retrieve current row count
342 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_0DELEMS")), this );
343 l->addWidget( lab, row, 0 );
345 my0DElem = new QLabel( this );
346 l->addWidget( my0DElem, row, 1 );
349 row = l->rowCount(); // retrieve current row count
351 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_BALLS")), this );
352 l->addWidget( lab, row, 0 );
354 myBall = new QLabel( this );
355 l->addWidget( myBall, row, 1 );
357 addSeparator(this); // add separator
360 row = l->rowCount(); // retrieve current row count
362 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_EDGES")), this );
363 l->addWidget( lab, row, 0 );
365 myNbEdge = new QLabel( this );
366 l->addWidget( myNbEdge, row, 1 );
368 myNbLinEdge = new QLabel( this );
369 l->addWidget( myNbLinEdge, row, 2 );
371 myNbQuadEdge = new QLabel( this );
372 l->addWidget( myNbQuadEdge, row, 3 );
375 row = l->rowCount(); // retrieve current row count
377 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_FACES")), this);
378 l->addWidget( lab, row, 0 );
380 myNbFace = new QLabel( this );
381 l->addWidget( myNbFace, row, 1 );
383 myNbLinFace = new QLabel( this );
384 l->addWidget( myNbLinFace, row, 2 );
386 myNbQuadFace = new QLabel( this );
387 l->addWidget( myNbQuadFace, row, 3 );
389 myNbBiQuadFace = new QLabel( this );
390 l->addWidget( myNbBiQuadFace, row, 4 );
393 row = l->rowCount(); // retrieve current row count
395 lab = new QLabel(COLONIZE(tr("SMESH_MESHINFO_VOLUMES")), this);
396 l->addWidget( lab, row, 0 );
398 myNbVolum = new QLabel( this );
399 l->addWidget( myNbVolum, row, 1 );
401 myNbLinVolum = new QLabel( this );
402 l->addWidget( myNbLinVolum, row, 2 );
404 myNbQuadVolum = new QLabel( this );
405 l->addWidget( myNbQuadVolum, row, 3 );
407 myNbBiQuadVolum = new QLabel( this );
408 l->addWidget( myNbBiQuadVolum, row, 4 );
412 // =========================================================================================
414 * \brief Set mesh info
416 // =========================================================================================
418 void SMESHGUI_MeshInfosBox::SetMeshInfo(const SMESH::long_array& theInfo)
421 myNbNode ->setText( QString("%1").arg( theInfo[SMDSEntity_Node] ));
424 my0DElem ->setText( QString("%1").arg( theInfo[SMDSEntity_0D] ));
427 myBall ->setText( QString("%1").arg( theInfo[SMDSEntity_Ball] ));
430 myNbEdge ->setText( QString("%1").arg( theInfo[SMDSEntity_Edge] +
431 theInfo[SMDSEntity_Quad_Edge] ));
432 myNbLinEdge ->setText( QString("%1").arg( theInfo[SMDSEntity_Edge] ));
433 myNbQuadEdge ->setText( QString("%1").arg( theInfo[SMDSEntity_Quad_Edge] ));
436 myNbFace ->setText( QString("%1").arg( theInfo[SMDSEntity_Triangle] +
437 theInfo[SMDSEntity_Quad_Triangle] +
438 theInfo[SMDSEntity_BiQuad_Triangle] +
439 theInfo[SMDSEntity_Quadrangle] +
440 theInfo[SMDSEntity_Quad_Quadrangle] +
441 theInfo[SMDSEntity_BiQuad_Quadrangle] +
442 theInfo[SMDSEntity_Polygon] +
443 theInfo[SMDSEntity_Quad_Polygon]));
444 myNbLinFace ->setText( QString("%1").arg( theInfo[SMDSEntity_Triangle] +
445 theInfo[SMDSEntity_Quadrangle] +
446 theInfo[SMDSEntity_Polygon] ));
447 myNbQuadFace ->setText( QString("%1").arg( theInfo[SMDSEntity_Quad_Triangle] +
448 theInfo[SMDSEntity_Quad_Quadrangle] +
449 theInfo[SMDSEntity_Quad_Polygon] ));
450 myNbBiQuadFace ->setText( QString("%1").arg( theInfo[SMDSEntity_BiQuad_Triangle] +
451 theInfo[SMDSEntity_BiQuad_Quadrangle] ));
454 myNbVolum ->setText( QString("%1").arg( theInfo[SMDSEntity_Tetra] +
455 theInfo[SMDSEntity_Quad_Tetra] +
456 theInfo[SMDSEntity_Pyramid] +
457 theInfo[SMDSEntity_Quad_Pyramid] +
458 theInfo[SMDSEntity_Hexa] +
459 theInfo[SMDSEntity_Quad_Hexa] +
460 theInfo[SMDSEntity_TriQuad_Hexa] +
461 theInfo[SMDSEntity_Penta] +
462 theInfo[SMDSEntity_Quad_Penta] +
463 theInfo[SMDSEntity_Hexagonal_Prism] +
464 theInfo[SMDSEntity_Polyhedra] ));
465 myNbLinVolum ->setText( QString("%1").arg( theInfo[SMDSEntity_Tetra] +
466 theInfo[SMDSEntity_Pyramid] +
467 theInfo[SMDSEntity_Hexa] +
468 theInfo[SMDSEntity_Penta] +
469 theInfo[SMDSEntity_Polyhedra] ));
470 myNbQuadVolum ->setText( QString("%1").arg( theInfo[SMDSEntity_Quad_Tetra] +
471 theInfo[SMDSEntity_Quad_Pyramid] +
472 theInfo[SMDSEntity_Quad_Hexa] +
473 theInfo[SMDSEntity_Quad_Penta] ));
474 myNbBiQuadVolum->setText( QString("%1").arg( theInfo[SMDSEntity_TriQuad_Hexa] ));
479 myNbTrai ->setText( QString("%1").arg( theInfo[SMDSEntity_Triangle] +
480 theInfo[SMDSEntity_Quad_Triangle] +
481 theInfo[SMDSEntity_BiQuad_Triangle] ));
482 myNbLinTrai ->setText( QString("%1").arg( theInfo[SMDSEntity_Triangle] ));
483 myNbQuadTrai ->setText( QString("%1").arg( theInfo[SMDSEntity_Quad_Triangle] ));
484 myNbBiQuadTrai ->setText( QString("%1").arg( theInfo[SMDSEntity_BiQuad_Triangle] ));
486 myNbQuad ->setText( QString("%1").arg( theInfo[SMDSEntity_Quadrangle] +
487 theInfo[SMDSEntity_Quad_Quadrangle] +
488 theInfo[SMDSEntity_BiQuad_Quadrangle] ));
489 myNbLinQuad ->setText( QString("%1").arg( theInfo[SMDSEntity_Quadrangle] ));
490 myNbQuadQuad ->setText( QString("%1").arg( theInfo[SMDSEntity_Quad_Quadrangle] ));
491 myNbBiQuadQuad ->setText( QString("%1").arg( theInfo[SMDSEntity_BiQuad_Quadrangle]));
493 myNbPolyg ->setText( QString("%1").arg( theInfo[SMDSEntity_Polygon] +
494 theInfo[SMDSEntity_Quad_Polygon] ));
495 myNbLinPolyg ->setText( QString("%1").arg( theInfo[SMDSEntity_Polygon] ));
496 myNbQuadPolyg ->setText( QString("%1").arg( theInfo[SMDSEntity_Quad_Polygon] ));
499 myNbTetra ->setText( QString("%1").arg( theInfo[SMDSEntity_Tetra] +
500 theInfo[SMDSEntity_Quad_Tetra] ));
501 myNbLinTetra ->setText( QString("%1").arg( theInfo[SMDSEntity_Tetra] ));
502 myNbQuadTetra ->setText( QString("%1").arg( theInfo[SMDSEntity_Quad_Tetra] ));
504 myNbHexa ->setText( QString("%1").arg( theInfo[SMDSEntity_Hexa] +
505 theInfo[SMDSEntity_TriQuad_Hexa] +
506 theInfo[SMDSEntity_Quad_Hexa] ));
507 myNbLinHexa ->setText( QString("%1").arg( theInfo[SMDSEntity_Hexa] ));
508 myNbQuadHexa ->setText( QString("%1").arg( theInfo[SMDSEntity_Quad_Hexa] ));
509 myNbBiQuadHexa ->setText( QString("%1").arg( theInfo[SMDSEntity_TriQuad_Hexa] ));
511 myNbPyra ->setText( QString("%1").arg( theInfo[SMDSEntity_Pyramid] +
512 theInfo[SMDSEntity_Quad_Pyramid] ));
513 myNbLinPyra ->setText( QString("%1").arg( theInfo[SMDSEntity_Pyramid] ));
514 myNbQuadPyra ->setText( QString("%1").arg( theInfo[SMDSEntity_Quad_Pyramid] ));
516 myNbPrism ->setText( QString("%1").arg( theInfo[SMDSEntity_Penta] +
517 theInfo[SMDSEntity_Quad_Penta] ));
518 myNbLinPrism ->setText( QString("%1").arg( theInfo[SMDSEntity_Penta] ));
519 myNbQuadPrism->setText( QString("%1").arg( theInfo[SMDSEntity_Quad_Penta] ));
521 myNbHexaPrism->setText( QString("%1").arg( theInfo[ SMDSEntity_Hexagonal_Prism ]));
523 myNbPolyh ->setText( QString("%1").arg( theInfo[SMDSEntity_Polyhedra] ));