X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FControls%2FSMESH_Controls.cxx;h=229162e3e92112e81004decd216334b9e7df6920;hb=274fd4f2db8d3a7fa23701764280ea1d175b194b;hp=9ce464a887743d3930d92698b862a75325f1293e;hpb=7242eaf55b5e6e26433e1128e47cbceeceac12e9;p=modules%2Fsmesh.git diff --git a/src/Controls/SMESH_Controls.cxx b/src/Controls/SMESH_Controls.cxx index 9ce464a88..229162e3e 100644 --- a/src/Controls/SMESH_Controls.cxx +++ b/src/Controls/SMESH_Controls.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2021 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2023 CEA, EDF, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -2351,6 +2351,70 @@ SMDSAbs_ElementType NodeConnectivityNumber::GetType() const return SMDSAbs_Node; } +//================================================================================ +/* + Class : ScaledJacobian + Description : Functor returning the ScaledJacobian for volumetric elements +*/ +//================================================================================ + +double ScaledJacobian::GetValue( long theElementId ) +{ + if ( theElementId && myMesh ) { + SMDS_VolumeTool aVolumeTool; + if ( aVolumeTool.Set( myMesh->FindElement( theElementId ))) + return aVolumeTool.GetScaledJacobian(); + } + return 0; + + /* + //VTK version not used because lack of implementation for HEXAGONAL_PRISM. + //Several mesh quality measures implemented in vtkMeshQuality can be accessed left here as reference + double aVal = 0; + myCurrElement = myMesh->FindElement( theElementId ); + if ( myCurrElement ) + { + VTKCellType cellType = myCurrElement->GetVtkType(); + vtkUnstructuredGrid* grid = const_cast( myMesh )->GetGrid(); + vtkCell* avtkCell = grid->GetCell( myCurrElement->GetVtkID() ); + switch ( cellType ) + { + case VTK_QUADRATIC_TETRA: + case VTK_TETRA: + aVal = Round( vtkMeshQuality::TetScaledJacobian( avtkCell )); + break; + case VTK_QUADRATIC_HEXAHEDRON: + case VTK_HEXAHEDRON: + aVal = Round( vtkMeshQuality::HexScaledJacobian( avtkCell )); + break; + case VTK_QUADRATIC_WEDGE: + case VTK_WEDGE: //Pentahedron + aVal = Round( vtkMeshQuality::WedgeScaledJacobian( avtkCell )); + break; + case VTK_QUADRATIC_PYRAMID: + case VTK_PYRAMID: + aVal = Round( vtkMeshQuality::PyramidScaledJacobian( avtkCell )); + break; + case VTK_HEXAGONAL_PRISM: + case VTK_POLYHEDRON: + default: + break; + } + } + return aVal; + */ +} + +double ScaledJacobian::GetBadRate( double Value, int /*nbNodes*/ ) const +{ + return Value; +} + +SMDSAbs_ElementType ScaledJacobian::GetType() const +{ + return SMDSAbs_Volume; +} + /* PREDICATES */ @@ -4425,9 +4489,10 @@ Predicate* ElementsOnShape::clone() const size += sizeof( myWorkClassifiers[0] ) * myWorkClassifiers.size(); if ( size > 1e+9 ) // 1G { -#ifdef _DEBUG_ + + if (SALOME::VerbosityActivated()) std::cout << "Avoid ElementsOnShape::clone(), too large: " << size << " bytes " << std::endl; -#endif + return 0; }