X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMDS%2FSMDS_MeshCell.cxx;h=f2998c111b8805582df2bddf7f4f51a3cc30a8af;hp=25c2f367a4d7c58b4e798778d8d40789666c79c5;hb=d9f4b53e489dd5857db264ede6acded7b076c9f1;hpb=8d297d6698f361d4f2dde723050bcfbaea050920 diff --git a/src/SMDS/SMDS_MeshCell.cxx b/src/SMDS/SMDS_MeshCell.cxx index 25c2f367a..f2998c111 100644 --- a/src/SMDS/SMDS_MeshCell.cxx +++ b/src/SMDS/SMDS_MeshCell.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2010-2016 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2010-2022 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -461,8 +461,8 @@ void SMDS_MeshCell::init( SMDSAbs_EntityType theEntity, int theNbNodes, ... ) } va_end( vl ); - int vtkType = toVtkType( theEntity ); - int vtkID = getGrid()->InsertNextLinkedCell( vtkType, theNbNodes, vtkIds ); + int vtkType = toVtkType( theEntity ); + vtkIdType vtkID = getGrid()->InsertNextLinkedCell( vtkType, theNbNodes, vtkIds ); setVtkID( vtkID ); } @@ -473,25 +473,27 @@ void SMDS_MeshCell::init( SMDSAbs_EntityType theEntity, for ( size_t i = 0; i < nodes.size(); ++i ) vtkIds[i] = nodes[i]->GetVtkID(); - int vtkType = toVtkType( theEntity ); - int vtkID = getGrid()->InsertNextLinkedCell( vtkType, nodes.size(), &vtkIds[0] ); + int vtkType = toVtkType( theEntity ); + vtkIdType vtkID = getGrid()->InsertNextLinkedCell( vtkType, nodes.size(), &vtkIds[0] ); setVtkID( vtkID ); } void SMDS_MeshCell::init( SMDSAbs_EntityType theEntity, const std::vector& vtkNodeIds ) { - int vtkType = toVtkType( theEntity ); - int vtkID = getGrid()->InsertNextLinkedCell( vtkType, vtkNodeIds.size(), - const_cast< vtkIdType* > ( &vtkNodeIds[0] )); + int vtkType = toVtkType( theEntity ); + vtkIdType vtkID = getGrid()->InsertNextLinkedCell( vtkType, vtkNodeIds.size(), + const_cast< vtkIdType* > ( &vtkNodeIds[0] )); setVtkID( vtkID ); } bool SMDS_MeshCell::ChangeNodes(const SMDS_MeshNode* nodes[], const int theNbNodes) { vtkIdType npts = 0; - vtkIdType* pts = 0; - getGrid()->GetCellPoints( GetVtkID(), npts, pts ); + vtkIdType *pts(nullptr); + vtkIdType const *tmp(nullptr); + getGrid()->GetCellPoints( GetVtkID(), npts, tmp ); + pts = const_cast(tmp); if ( theNbNodes != npts ) { MESSAGE("ChangeNodes problem: not the same number of nodes " << npts << " -> " << theNbNodes); @@ -519,8 +521,7 @@ int SMDS_MeshCell::NbNodes() const { if ( GetVtkType() == VTK_POLYHEDRON ) return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::NbNodes(); - vtkIdType *pts, npts; - getGrid()->GetCellPoints( GetVtkID(), npts, pts ); + vtkIdType npts = getGrid()->GetCells()->GetCellSize( GetVtkID() ); return npts; } @@ -631,7 +632,8 @@ const SMDS_MeshNode* SMDS_MeshCell::GetNode(const int ind) const if ( GetVtkType() == VTK_POLYHEDRON ) return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::GetNode( ind ); - vtkIdType npts, *pts; + vtkIdType npts; + vtkIdType const *pts; getGrid()->GetCellPoints( GetVtkID(), npts, pts ); const std::vector& interlace = SMDS_MeshCell::fromVtkOrder( VTKCellType( GetVtkType() )); return GetMesh()->FindNodeVtk( pts[ interlace.empty() ? ind : interlace[ ind ]]); @@ -639,10 +641,14 @@ const SMDS_MeshNode* SMDS_MeshCell::GetNode(const int ind) const int SMDS_MeshCell::GetNodeIndex( const SMDS_MeshNode* node ) const { + if ( !node || node->IsNull() ) + return -1; + if ( GetVtkType() == VTK_POLYHEDRON ) return static_cast< const SMDS_MeshVolume* >( this )->SMDS_MeshVolume::GetNodeIndex( node ); - vtkIdType npts, *pts; + vtkIdType npts; + vtkIdType const *pts; getGrid()->GetCellPoints( GetVtkID(), npts, pts ); for ( vtkIdType i = 0; i < npts; ++i ) if ( pts[i] == node->GetVtkID() )