mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-26 09:20:34 +05:00
Optimize SMDS_MeshElement::GetNodeIndex()
+ virtual int GetNodeIndex( const SMDS_MeshNode* node ) const;
This commit is contained in:
parent
da2b448af1
commit
6ae2a9da94
@ -161,6 +161,22 @@ SMDS_VtkFace::GetNode(const int ind) const
|
||||
return SMDS_Mesh::_meshList[myMeshId]->FindNodeVtk( pts[ ind ]);
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Check if a node belongs to the element
|
||||
* \param node - the node to check
|
||||
* \retval int - node index within the element, -1 if not found
|
||||
*/
|
||||
int SMDS_VtkFace::GetNodeIndex( const SMDS_MeshNode* node ) const
|
||||
{
|
||||
vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
|
||||
vtkIdType npts, *pts;
|
||||
grid->GetCellPoints( this->myVtkID, npts, pts );
|
||||
for ( vtkIdType i = 0; i < npts; ++i )
|
||||
if ( pts[i] == node->getVtkId() )
|
||||
return i;
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool SMDS_VtkFace::IsQuadratic() const
|
||||
{
|
||||
vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
|
||||
|
@ -47,6 +47,7 @@ public:
|
||||
virtual SMDSAbs_EntityType GetEntityType() const;
|
||||
virtual SMDSAbs_GeometryType GetGeomType() const;
|
||||
virtual const SMDS_MeshNode* GetNode(const int ind) const;
|
||||
virtual int GetNodeIndex( const SMDS_MeshNode* node ) const;
|
||||
|
||||
virtual bool IsQuadratic() const;
|
||||
virtual bool IsPoly() const;
|
||||
|
@ -448,6 +448,42 @@ const SMDS_MeshNode* SMDS_VtkVolume::GetNode(const int ind) const
|
||||
const std::vector<int>& interlace = SMDS_MeshCell::fromVtkOrder( VTKCellType( aVtkType ));
|
||||
return SMDS_Mesh::_meshList[myMeshId]->FindNodeVtk( pts[ interlace.empty() ? ind : interlace[ind]] );
|
||||
}
|
||||
/*!
|
||||
* \brief Check if a node belongs to the element
|
||||
* \param node - the node to check
|
||||
* \retval int - node index within the element, -1 if not found
|
||||
*/
|
||||
int SMDS_VtkVolume::GetNodeIndex( const SMDS_MeshNode* node ) const
|
||||
{
|
||||
vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
|
||||
const vtkIdType aVtkType = grid->GetCellType(this->myVtkID);
|
||||
if ( aVtkType == VTK_POLYHEDRON)
|
||||
{
|
||||
vtkIdType nFaces = 0;
|
||||
vtkIdType* ptIds = 0;
|
||||
grid->GetFaceStream(this->myVtkID, nFaces, ptIds);
|
||||
int id = 0, nbPoints = 0;
|
||||
for (int iF = 0; iF < nFaces; iF++)
|
||||
{
|
||||
int nodesInFace = ptIds[id];
|
||||
for ( vtkIdType i = 0; i < nodesInFace; ++i )
|
||||
if ( ptIds[id+i] == node->getVtkId() )
|
||||
return id+i-iF;
|
||||
nbPoints += nodesInFace;
|
||||
id += (nodesInFace + 1);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
vtkIdType npts, *pts;
|
||||
grid->GetCellPoints( this->myVtkID, npts, pts );
|
||||
for ( vtkIdType i = 0; i < npts; ++i )
|
||||
if ( pts[i] == node->getVtkId() )
|
||||
{
|
||||
const std::vector<int>& interlace = SMDS_MeshCell::toVtkOrder( VTKCellType( aVtkType ));
|
||||
return interlace.empty() ? i : interlace[i];
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool SMDS_VtkVolume::IsQuadratic() const
|
||||
{
|
||||
|
@ -56,6 +56,7 @@ public:
|
||||
virtual SMDSAbs_EntityType GetEntityType() const;
|
||||
virtual SMDSAbs_GeometryType GetGeomType() const;
|
||||
virtual const SMDS_MeshNode* GetNode(const int ind) const;
|
||||
virtual int GetNodeIndex( const SMDS_MeshNode* node ) const;
|
||||
virtual bool IsQuadratic() const;
|
||||
virtual bool IsPoly() const;
|
||||
virtual bool IsMediumNode(const SMDS_MeshNode* node) const;
|
||||
|
Loading…
Reference in New Issue
Block a user