- int nbAllElem = 0, nbQEdges =0, nbQFaces =0, nbQVolum = 0;
- int nbEdges = 0, nbFaces = 0, nbVolum = 0;
-
- nbAllElem = (int)mesh->NbElements();
- nbQEdges = (int)mesh->NbEdgesOfOrder(SMESH::ORDER_QUADRATIC);
- nbQFaces = (int)mesh->NbFacesOfOrder(SMESH::ORDER_QUADRATIC);
- nbQVolum = (int)mesh->NbVolumesOfOrder(SMESH::ORDER_QUADRATIC);
-
- nbEdges = (int)mesh->NbEdgesOfOrder(SMESH::ORDER_LINEAR);
- nbFaces = (int)mesh->NbFacesOfOrder(SMESH::ORDER_LINEAR);
- nbVolum = (int)mesh->NbVolumesOfOrder(SMESH::ORDER_LINEAR);
-
- if( nbAllElem == (nbQEdges+nbQFaces+nbQVolum) )
- return SMESHGUI_ConvToQuadOp::Quadratic;
- else if ( nbAllElem == (nbEdges+nbFaces+nbVolum) )
- return SMESHGUI_ConvToQuadOp::Linear;
- else
- return SMESHGUI_ConvToQuadOp::Comp;
+ SMESH::long_array_var nbElemOfType = idSource->GetMeshInfo();
+ bool hasQuad = ( nbElemOfType[SMDSEntity_Quad_Edge ] ||
+ nbElemOfType[SMDSEntity_Quad_Triangle ] ||
+ nbElemOfType[SMDSEntity_Quad_Quadrangle] ||
+ nbElemOfType[SMDSEntity_Quad_Tetra ] ||
+ nbElemOfType[SMDSEntity_Quad_Hexa ] ||
+ nbElemOfType[SMDSEntity_Quad_Pyramid ] ||
+ nbElemOfType[SMDSEntity_Quad_Penta ] );
+
+ bool hasLin = ( nbElemOfType[SMDSEntity_Edge ] ||
+ nbElemOfType[SMDSEntity_Triangle ] ||
+ nbElemOfType[SMDSEntity_Quadrangle] ||
+ nbElemOfType[SMDSEntity_Tetra ] ||
+ nbElemOfType[SMDSEntity_Hexa ] ||
+ nbElemOfType[SMDSEntity_Pyramid ] ||
+ nbElemOfType[SMDSEntity_Penta ] );
+
+ if ( hasQuad && hasLin )
+ return Comp;
+ return hasQuad ? Quadratic : Linear;