X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMDS%2FSMDS_MeshNode.cxx;h=5499f8b7d7fd3db34b7868c4220137fdda5700c8;hb=ef3921b2afe32874a6a266ceea8a12a30cc6f17c;hp=309be4ceba8472d4ab288ed53b6acfd60bd67b57;hpb=bd4e115a78b52e3fbc016e5e30bb0e19b2a9e7d6;p=modules%2Fsmesh.git diff --git a/src/SMDS/SMDS_MeshNode.cxx b/src/SMDS/SMDS_MeshNode.cxx index 309be4ceb..5499f8b7d 100644 --- a/src/SMDS/SMDS_MeshNode.cxx +++ b/src/SMDS/SMDS_MeshNode.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -6,7 +6,7 @@ // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -42,7 +42,7 @@ int SMDS_MeshNode::nbNodes =0; //======================================================================= //function : SMDS_MeshNode -//purpose : +//purpose : //======================================================================= SMDS_MeshNode::SMDS_MeshNode() : SMDS_MeshElement(-1, -1, 0), @@ -71,8 +71,7 @@ void SMDS_MeshNode::init(int id, int meshId, int shapeId, double x, double y, do points->InsertPoint(myVtkID, x, y, z); SMDS_CellLinks *cellLinks = dynamic_cast(grid->GetCellLinks()); assert(cellLinks); - if (myVtkID >= cellLinks->GetLinksSize()) - cellLinks->ResizeL(myVtkID+SMDS_Mesh::chunkSize); + cellLinks->ResizeForPoint( myVtkID ); } SMDS_MeshNode::~SMDS_MeshNode() @@ -84,31 +83,31 @@ SMDS_MeshNode::~SMDS_MeshNode() //======================================================================= //function : RemoveInverseElement -//purpose : +//purpose : //======================================================================= void SMDS_MeshNode::RemoveInverseElement(const SMDS_MeshElement * parent) { - //MESSAGE("RemoveInverseElement " << myID << " " << parent->GetID()); - const SMDS_MeshCell* cell = dynamic_cast(parent); - MYASSERT(cell); - SMDS_Mesh::_meshList[myMeshId]->getGrid()->RemoveReferenceToCell(myVtkID, cell->getVtkId()); + //MESSAGE("RemoveInverseElement " << myID << " " << parent->GetID()); + const SMDS_MeshCell* cell = dynamic_cast(parent); + MYASSERT(cell); + SMDS_Mesh::_meshList[myMeshId]->getGrid()->RemoveReferenceToCell(myVtkID, cell->getVtkId()); } //======================================================================= //function : Print -//purpose : +//purpose : //======================================================================= void SMDS_MeshNode::Print(ostream & OS) const { - OS << "Node <" << myID << "> : X = " << X() << " Y = " - << Y() << " Z = " << Z() << endl; + OS << "Node <" << myID << "> : X = " << X() << " Y = " + << Y() << " Z = " << Z() << endl; } //======================================================================= //function : SetPosition -//purpose : +//purpose : //======================================================================= void SMDS_MeshNode::SetPosition(const SMDS_PositionPtr& aPos) @@ -122,12 +121,12 @@ void SMDS_MeshNode::SetPosition(const SMDS_PositionPtr& aPos) //======================================================================= //function : GetPosition -//purpose : +//purpose : //======================================================================= const SMDS_PositionPtr& SMDS_MeshNode::GetPosition() const { - return myPosition; + return myPosition; } //======================================================================= @@ -150,30 +149,26 @@ public: SMDS_MeshNode_MyInvIterator(SMDS_Mesh *mesh, vtkIdType* cells, int ncells, SMDSAbs_ElementType type) : myMesh(mesh), myCells(cells), myNcells(ncells), myType(type), iter(0) { - //MESSAGE("SMDS_MeshNode_MyInvIterator : ncells " << myNcells); - cellList.clear(); + cellList.reserve( ncells ); if (type == SMDSAbs_All) + cellList.assign( cells, cells + ncells ); + else for (int i = 0; i < ncells; i++) - cellList.push_back(cells[i]); - else for (int i = 0; i < ncells; i++) { int vtkId = cells[i]; int smdsId = myMesh->fromVtkToSmds(vtkId); const SMDS_MeshElement* elem = myMesh->FindElement(smdsId); if (elem->GetType() == type) - { - //MESSAGE("Add element vtkId " << vtkId << " " << elem->GetType()) - cellList.push_back(vtkId); - } + { + cellList.push_back(vtkId); + } } - myCells = &cellList[0]; + myCells = cellList.empty() ? 0 : &cellList[0]; myNcells = cellList.size(); - //MESSAGE("myNcells="<fromVtkToSmds(vtkId); const SMDS_MeshElement* elem = myMesh->FindElement(smdsId); if (!elem) - { - MESSAGE("SMDS_MeshNode_MyInvIterator problem Null element"); - throw SALOME_Exception("SMDS_MeshNode_MyInvIterator problem Null element"); - } - //MESSAGE("vtkId " << vtkId << " smdsId " << smdsId << " " << elem->GetType()); + { + MESSAGE("SMDS_MeshNode_MyInvIterator problem Null element"); + throw SALOME_Exception("SMDS_MeshNode_MyInvIterator problem Null element"); + } iter++; return elem; } }; -SMDS_ElemIteratorPtr SMDS_MeshNode:: - GetInverseElementIterator(SMDSAbs_ElementType type) const +SMDS_ElemIteratorPtr SMDS_MeshNode::GetInverseElementIterator(SMDSAbs_ElementType type) const { - vtkCellLinks::Link l = SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks()->GetLink(myVtkID); - //MESSAGE("myID " << myID << " ncells " << l.ncells); - return SMDS_ElemIteratorPtr(new SMDS_MeshNode_MyInvIterator(SMDS_Mesh::_meshList[myMeshId], l.cells, l.ncells, type)); + vtkCellLinks::Link l = SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks()->GetLink(myVtkID); + return SMDS_ElemIteratorPtr(new SMDS_MeshNode_MyInvIterator(SMDS_Mesh::_meshList[myMeshId], l.cells, l.ncells, type)); } // Same as GetInverseElementIterator but the create iterator only return @@ -213,47 +205,47 @@ private: int iter; vector myFiltCells; - public: +public: SMDS_MeshNode_MyIterator(SMDS_Mesh *mesh, vtkIdType* cells, int ncells, SMDSAbs_ElementType type): myMesh(mesh), myCells(cells), myNcells(ncells), myType(type), iter(0) { - //MESSAGE("myNcells " << myNcells); - for (; iterfromVtkToSmds(vtkId); - //MESSAGE("vtkId " << vtkId << " smdsId " << smdsId); - const SMDS_MeshElement* elem = myMesh->FindElement(smdsId); - if (elem->GetType() == type) - myFiltCells.push_back((SMDS_MeshElement*)elem); - } - myNcells = myFiltCells.size(); - //MESSAGE("myNcells " << myNcells); - iter = 0; - //MESSAGE("SMDS_MeshNode_MyIterator (filter) " << ncells << " " << myNcells); + //MESSAGE("myNcells " << myNcells); + for (; iterfromVtkToSmds(vtkId); + //MESSAGE("vtkId " << vtkId << " smdsId " << smdsId); + const SMDS_MeshElement* elem = myMesh->FindElement(smdsId); + if (elem->GetType() == type) + myFiltCells.push_back((SMDS_MeshElement*)elem); + } + myNcells = myFiltCells.size(); + //MESSAGE("myNcells " << myNcells); + iter = 0; + //MESSAGE("SMDS_MeshNode_MyIterator (filter) " << ncells << " " << myNcells); } bool more() { - return (iter< myNcells); + return (iter< myNcells); } const SMDS_MeshElement* next() { - const SMDS_MeshElement* elem = myFiltCells[iter]; - iter++; - return elem; + const SMDS_MeshElement* elem = myFiltCells[iter]; + iter++; + return elem; } }; SMDS_ElemIteratorPtr SMDS_MeshNode:: - elementsIterator(SMDSAbs_ElementType type) const +elementsIterator(SMDSAbs_ElementType type) const { if(type==SMDSAbs_Node) - return SMDS_MeshElement::elementsIterator(SMDSAbs_Node); + return SMDS_MeshElement::elementsIterator(SMDSAbs_Node); else { vtkCellLinks::Link l = SMDS_Mesh::_meshList[myMeshId]->getGrid()->GetCellLinks()->GetLink(myVtkID); @@ -263,7 +255,7 @@ SMDS_ElemIteratorPtr SMDS_MeshNode:: int SMDS_MeshNode::NbNodes() const { - return 1; + return 1; } double* SMDS_MeshNode::getCoord() const @@ -310,7 +302,7 @@ void SMDS_MeshNode::setXYZ(double x, double y, double z) SMDSAbs_ElementType SMDS_MeshNode::GetType() const { - return SMDSAbs_Node; + return SMDSAbs_Node; } vtkIdType SMDS_MeshNode::GetVtkType() const @@ -363,11 +355,11 @@ int SMDS_MeshNode::NbInverseElements(SMDSAbs_ElementType type) const int nb = 0; SMDS_Mesh *mesh = SMDS_Mesh::_meshList[myMeshId]; for (int i=0; iFindElement(mesh->fromVtkToSmds(l.cells[i])); - if (elem->GetType() == type) - nb++; - } + { + const SMDS_MeshElement* elem = mesh->FindElement(mesh->fromVtkToSmds(l.cells[i])); + if (elem->GetType() == type) + nb++; + } return nb; } @@ -376,14 +368,14 @@ int SMDS_MeshNode::NbInverseElements(SMDSAbs_ElementType type) const /////////////////////////////////////////////////////////////////////////////// bool operator<(const SMDS_MeshNode& e1, const SMDS_MeshNode& e2) { - return e1.getVtkId()