mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-11-15 10:08:34 +05:00
0021459: EDF 1495 SMESH: Manipulation of discrete elements with attributes
+ class SMESHCONTROLS_EXPORT BallDiameter: public virtual NumericalFunctor{
This commit is contained in:
parent
e3fea174fd
commit
61cd810fbe
@ -22,31 +22,36 @@
|
|||||||
|
|
||||||
#include "SMESH_ControlsDef.hxx"
|
#include "SMESH_ControlsDef.hxx"
|
||||||
|
|
||||||
#include <set>
|
#include "SMDS_BallElement.hxx"
|
||||||
#include <limits>
|
#include "SMDS_Iterator.hxx"
|
||||||
|
#include "SMDS_Mesh.hxx"
|
||||||
|
#include "SMDS_MeshElement.hxx"
|
||||||
|
#include "SMDS_MeshNode.hxx"
|
||||||
|
#include "SMDS_QuadraticEdge.hxx"
|
||||||
|
#include "SMDS_QuadraticFaceOfNodes.hxx"
|
||||||
|
#include "SMDS_VolumeTool.hxx"
|
||||||
|
#include "SMESHDS_GroupBase.hxx"
|
||||||
|
#include "SMESHDS_Mesh.hxx"
|
||||||
|
#include "SMESH_OctreeNode.hxx"
|
||||||
|
|
||||||
#include <BRepAdaptor_Surface.hxx>
|
#include <BRepAdaptor_Surface.hxx>
|
||||||
#include <BRepClass_FaceClassifier.hxx>
|
#include <BRepClass_FaceClassifier.hxx>
|
||||||
#include <BRep_Tool.hxx>
|
#include <BRep_Tool.hxx>
|
||||||
|
|
||||||
#include <TopAbs.hxx>
|
|
||||||
#include <TopoDS.hxx>
|
|
||||||
#include <TopoDS_Edge.hxx>
|
|
||||||
#include <TopoDS_Face.hxx>
|
|
||||||
#include <TopoDS_Shape.hxx>
|
|
||||||
#include <TopoDS_Vertex.hxx>
|
|
||||||
#include <TopoDS_Iterator.hxx>
|
|
||||||
|
|
||||||
#include <Geom_CylindricalSurface.hxx>
|
#include <Geom_CylindricalSurface.hxx>
|
||||||
#include <Geom_Plane.hxx>
|
#include <Geom_Plane.hxx>
|
||||||
#include <Geom_Surface.hxx>
|
#include <Geom_Surface.hxx>
|
||||||
|
|
||||||
#include <Precision.hxx>
|
#include <Precision.hxx>
|
||||||
#include <TColStd_MapIteratorOfMapOfInteger.hxx>
|
#include <TColStd_MapIteratorOfMapOfInteger.hxx>
|
||||||
#include <TColStd_MapOfInteger.hxx>
|
#include <TColStd_MapOfInteger.hxx>
|
||||||
#include <TColStd_SequenceOfAsciiString.hxx>
|
#include <TColStd_SequenceOfAsciiString.hxx>
|
||||||
#include <TColgp_Array1OfXYZ.hxx>
|
#include <TColgp_Array1OfXYZ.hxx>
|
||||||
|
#include <TopAbs.hxx>
|
||||||
|
#include <TopoDS.hxx>
|
||||||
|
#include <TopoDS_Edge.hxx>
|
||||||
|
#include <TopoDS_Face.hxx>
|
||||||
|
#include <TopoDS_Iterator.hxx>
|
||||||
|
#include <TopoDS_Shape.hxx>
|
||||||
|
#include <TopoDS_Vertex.hxx>
|
||||||
#include <gp_Ax3.hxx>
|
#include <gp_Ax3.hxx>
|
||||||
#include <gp_Cylinder.hxx>
|
#include <gp_Cylinder.hxx>
|
||||||
#include <gp_Dir.hxx>
|
#include <gp_Dir.hxx>
|
||||||
@ -55,21 +60,12 @@
|
|||||||
#include <gp_Vec.hxx>
|
#include <gp_Vec.hxx>
|
||||||
#include <gp_XYZ.hxx>
|
#include <gp_XYZ.hxx>
|
||||||
|
|
||||||
#include "SMDS_Mesh.hxx"
|
|
||||||
#include "SMDS_Iterator.hxx"
|
|
||||||
#include "SMDS_MeshElement.hxx"
|
|
||||||
#include "SMDS_MeshNode.hxx"
|
|
||||||
#include "SMDS_VolumeTool.hxx"
|
|
||||||
#include "SMDS_QuadraticFaceOfNodes.hxx"
|
|
||||||
#include "SMDS_QuadraticEdge.hxx"
|
|
||||||
|
|
||||||
#include "SMESHDS_Mesh.hxx"
|
|
||||||
#include "SMESHDS_GroupBase.hxx"
|
|
||||||
|
|
||||||
#include "SMESH_OctreeNode.hxx"
|
|
||||||
|
|
||||||
#include <vtkMeshQuality.h>
|
#include <vtkMeshQuality.h>
|
||||||
|
|
||||||
|
#include <set>
|
||||||
|
#include <limits>
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
AUXILIARY METHODS
|
AUXILIARY METHODS
|
||||||
*/
|
*/
|
||||||
@ -1966,6 +1962,34 @@ void MultiConnection2D::GetValues(MValues& theValues){
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Class : BallDiameter
|
||||||
|
Description : Functor returning diameter of a ball element
|
||||||
|
*/
|
||||||
|
double BallDiameter::GetValue( long theId )
|
||||||
|
{
|
||||||
|
double diameter = 0;
|
||||||
|
|
||||||
|
if ( const SMDS_BallElement* ball =
|
||||||
|
dynamic_cast<const SMDS_BallElement*>( myMesh->FindElement( theId )))
|
||||||
|
{
|
||||||
|
diameter = ball->GetDiameter();
|
||||||
|
}
|
||||||
|
return diameter;
|
||||||
|
}
|
||||||
|
|
||||||
|
double BallDiameter::GetBadRate( double Value, int /*nbNodes*/ ) const
|
||||||
|
{
|
||||||
|
// meaningless as it is not a quality control functor
|
||||||
|
return Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
SMDSAbs_ElementType BallDiameter::GetType() const
|
||||||
|
{
|
||||||
|
return SMDSAbs_Ball;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
PREDICATES
|
PREDICATES
|
||||||
*/
|
*/
|
||||||
@ -3156,26 +3180,9 @@ void Filter::SetPredicate( PredicatePtr thePredicate )
|
|||||||
myPredicate = thePredicate;
|
myPredicate = thePredicate;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class TElement, class TIterator, class TPredicate>
|
void Filter::GetElementsId( const SMDS_Mesh* theMesh,
|
||||||
inline void FillSequence(const TIterator& theIterator,
|
PredicatePtr thePredicate,
|
||||||
TPredicate& thePredicate,
|
TIdSequence& theSequence )
|
||||||
Filter::TIdSequence& theSequence)
|
|
||||||
{
|
|
||||||
if ( theIterator ) {
|
|
||||||
while( theIterator->more() ) {
|
|
||||||
TElement anElem = theIterator->next();
|
|
||||||
long anId = anElem->GetID();
|
|
||||||
if ( thePredicate->IsSatisfy( anId ) )
|
|
||||||
theSequence.push_back( anId );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Filter::
|
|
||||||
GetElementsId( const SMDS_Mesh* theMesh,
|
|
||||||
PredicatePtr thePredicate,
|
|
||||||
TIdSequence& theSequence )
|
|
||||||
{
|
{
|
||||||
theSequence.clear();
|
theSequence.clear();
|
||||||
|
|
||||||
@ -3184,31 +3191,19 @@ GetElementsId( const SMDS_Mesh* theMesh,
|
|||||||
|
|
||||||
thePredicate->SetMesh( theMesh );
|
thePredicate->SetMesh( theMesh );
|
||||||
|
|
||||||
SMDSAbs_ElementType aType = thePredicate->GetType();
|
SMDS_ElemIteratorPtr elemIt = theMesh->elementsIterator( thePredicate->GetType() );
|
||||||
switch(aType){
|
if ( elemIt ) {
|
||||||
case SMDSAbs_Node:
|
while ( elemIt->more() ) {
|
||||||
FillSequence<const SMDS_MeshNode*>(theMesh->nodesIterator(),thePredicate,theSequence);
|
const SMDS_MeshElement* anElem = elemIt->next();
|
||||||
break;
|
long anId = anElem->GetID();
|
||||||
case SMDSAbs_Edge:
|
if ( thePredicate->IsSatisfy( anId ) )
|
||||||
FillSequence<const SMDS_MeshElement*>(theMesh->edgesIterator(),thePredicate,theSequence);
|
theSequence.push_back( anId );
|
||||||
break;
|
}
|
||||||
case SMDSAbs_Face:
|
|
||||||
FillSequence<const SMDS_MeshElement*>(theMesh->facesIterator(),thePredicate,theSequence);
|
|
||||||
break;
|
|
||||||
case SMDSAbs_Volume:
|
|
||||||
FillSequence<const SMDS_MeshElement*>(theMesh->volumesIterator(),thePredicate,theSequence);
|
|
||||||
break;
|
|
||||||
case SMDSAbs_All:
|
|
||||||
FillSequence<const SMDS_MeshElement*>(theMesh->edgesIterator(),thePredicate,theSequence);
|
|
||||||
FillSequence<const SMDS_MeshElement*>(theMesh->facesIterator(),thePredicate,theSequence);
|
|
||||||
FillSequence<const SMDS_MeshElement*>(theMesh->volumesIterator(),thePredicate,theSequence);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void Filter::GetElementsId( const SMDS_Mesh* theMesh,
|
||||||
Filter::GetElementsId( const SMDS_Mesh* theMesh,
|
Filter::TIdSequence& theSequence )
|
||||||
Filter::TIdSequence& theSequence )
|
|
||||||
{
|
{
|
||||||
GetElementsId(theMesh,myPredicate,theSequence);
|
GetElementsId(theMesh,myPredicate,theSequence);
|
||||||
}
|
}
|
||||||
@ -3872,36 +3867,9 @@ void ElementsOnShape::process()
|
|||||||
if (myShape.IsNull() || myMesh == 0)
|
if (myShape.IsNull() || myMesh == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (myType == SMDSAbs_Node)
|
SMDS_ElemIteratorPtr anIter = myMesh->elementsIterator(myType);
|
||||||
{
|
while (anIter->more())
|
||||||
SMDS_NodeIteratorPtr anIter = myMesh->nodesIterator();
|
process(anIter->next());
|
||||||
while (anIter->more())
|
|
||||||
process(anIter->next());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (myType == SMDSAbs_Edge || myType == SMDSAbs_All)
|
|
||||||
{
|
|
||||||
SMDS_EdgeIteratorPtr anIter = myMesh->edgesIterator();
|
|
||||||
while (anIter->more())
|
|
||||||
process(anIter->next());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (myType == SMDSAbs_Face || myType == SMDSAbs_All)
|
|
||||||
{
|
|
||||||
SMDS_FaceIteratorPtr anIter = myMesh->facesIterator();
|
|
||||||
while (anIter->more()) {
|
|
||||||
process(anIter->next());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (myType == SMDSAbs_Volume || myType == SMDSAbs_All)
|
|
||||||
{
|
|
||||||
SMDS_VolumeIteratorPtr anIter = myMesh->volumesIterator();
|
|
||||||
while (anIter->more())
|
|
||||||
process(anIter->next());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ElementsOnShape::process (const SMDS_MeshElement* theElemPtr)
|
void ElementsOnShape::process (const SMDS_MeshElement* theElemPtr)
|
||||||
@ -3916,9 +3884,8 @@ void ElementsOnShape::process (const SMDS_MeshElement* theElemPtr)
|
|||||||
|
|
||||||
while (aNodeItr->more() && (isSatisfy == myAllNodesFlag))
|
while (aNodeItr->more() && (isSatisfy == myAllNodesFlag))
|
||||||
{
|
{
|
||||||
SMDS_MeshNode* aNode = (SMDS_MeshNode*)aNodeItr->next();
|
SMESH_TNodeXYZ aPnt ( aNodeItr->next() );
|
||||||
gp_Pnt aPnt (aNode->X(), aNode->Y(), aNode->Z());
|
centerXYZ += aPnt;
|
||||||
centerXYZ += aPnt.XYZ();
|
|
||||||
|
|
||||||
switch (myCurShapeType)
|
switch (myCurShapeType)
|
||||||
{
|
{
|
||||||
@ -3951,7 +3918,7 @@ void ElementsOnShape::process (const SMDS_MeshElement* theElemPtr)
|
|||||||
break;
|
break;
|
||||||
case TopAbs_VERTEX:
|
case TopAbs_VERTEX:
|
||||||
{
|
{
|
||||||
isSatisfy = (aPnt.Distance(myCurPnt) <= myToler);
|
isSatisfy = (myCurPnt.Distance(aPnt) <= myToler);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -331,6 +331,19 @@ namespace SMESH{
|
|||||||
void GetValues(MValues& theValues);
|
void GetValues(MValues& theValues);
|
||||||
};
|
};
|
||||||
typedef boost::shared_ptr<MultiConnection2D> MultiConnection2DPtr;
|
typedef boost::shared_ptr<MultiConnection2D> MultiConnection2DPtr;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Class : BallDiameter
|
||||||
|
Description : Functor returning diameter of a ball element
|
||||||
|
*/
|
||||||
|
class SMESHCONTROLS_EXPORT BallDiameter: public virtual NumericalFunctor{
|
||||||
|
public:
|
||||||
|
virtual double GetValue( long theElementId );
|
||||||
|
virtual double GetBadRate( double Value, int nbNodes ) const;
|
||||||
|
virtual SMDSAbs_ElementType GetType() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
PREDICATES
|
PREDICATES
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user