X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMDS%2FSMDS_MeshNode.cxx;h=e536e979e0558fb8dc66201a2e543dee1ce9df07;hp=1d968dcbbf710571ec9f267f81970322d5182e39;hb=062f1da5dde14e9ca8755c2eda44cbe8850f1d3a;hpb=c63ee099ad2b149bd70136839c973e8910137bc5 diff --git a/src/SMDS/SMDS_MeshNode.cxx b/src/SMDS/SMDS_MeshNode.cxx index 1d968dcbb..e536e979e 100644 --- a/src/SMDS/SMDS_MeshNode.cxx +++ b/src/SMDS/SMDS_MeshNode.cxx @@ -1,24 +1,27 @@ -// SMESH SMDS : implementaion of Salome mesh data structure +// Copyright (C) 2007-2011 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 +// +// 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. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// 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. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// SMESH SMDS : implementaion of Salome mesh data structure +// #ifdef _MSC_VER #pragma warning(disable:4786) #endif @@ -35,8 +38,8 @@ using namespace std; //======================================================================= SMDS_MeshNode::SMDS_MeshNode(double x, double y, double z): - myX(x), myY(y), myZ(z), - myPosition(SMDS_SpacePosition::originSpacePosition()) + myX(x), myY(y), myZ(z), + myPosition(SMDS_SpacePosition::originSpacePosition()) { } @@ -64,8 +67,8 @@ void SMDS_MeshNode::RemoveInverseElement(const SMDS_MeshElement * parent) void SMDS_MeshNode::Print(ostream & OS) const { - OS << "Node <" << GetID() << "> : X = " << myX << " Y = " - << myY << " Z = " << myZ << endl; + OS << "Node <" << GetID() << "> : X = " << myX << " Y = " + << myY << " Z = " << myZ << endl; } //======================================================================= @@ -75,7 +78,7 @@ void SMDS_MeshNode::Print(ostream & OS) const void SMDS_MeshNode::SetPosition(const SMDS_PositionPtr& aPos) { - myPosition = aPos; + myPosition = aPos; } //======================================================================= @@ -85,34 +88,47 @@ void SMDS_MeshNode::SetPosition(const SMDS_PositionPtr& aPos) const SMDS_PositionPtr& SMDS_MeshNode::GetPosition() const { - return myPosition; + return myPosition; } +//======================================================================= +/*! + * \brief Iterator on list of elements + */ +//======================================================================= + class SMDS_MeshNode_MyInvIterator:public SMDS_ElemIterator { NCollection_List::Iterator myIterator; + SMDSAbs_ElementType myType; public: - SMDS_MeshNode_MyInvIterator(const NCollection_List& s): - myIterator(s) + SMDS_MeshNode_MyInvIterator(const NCollection_List& s, + SMDSAbs_ElementType type): + myIterator(s), myType(type) {} bool more() { + if ( myType != SMDSAbs_All ) { + while ( myIterator.More() && myIterator.Value()->GetType() != myType) + myIterator.Next(); + } return myIterator.More() != Standard_False; } const SMDS_MeshElement* next() { + if ( !more() ) return 0; const SMDS_MeshElement* current=myIterator.Value(); myIterator.Next(); return current; - } + } }; SMDS_ElemIteratorPtr SMDS_MeshNode:: - GetInverseElementIterator() const + GetInverseElementIterator(SMDSAbs_ElementType type) const { - return SMDS_ElemIteratorPtr(new SMDS_MeshNode_MyInvIterator(myInverseElements)); + return SMDS_ElemIteratorPtr(new SMDS_MeshNode_MyInvIterator(myInverseElements,type)); } // Same as GetInverseElementIterator but the create iterator only return @@ -156,7 +172,7 @@ class SMDS_MeshNode_MyIterator:public SMDS_ElemIterator }; SMDS_ElemIteratorPtr SMDS_MeshNode:: - elementsIterator(SMDSAbs_ElementType type) const + elementsIterator(SMDSAbs_ElementType type) const { if(type==SMDSAbs_Node) return SMDS_MeshElement::elementsIterator(SMDSAbs_Node); @@ -169,34 +185,34 @@ SMDS_ElemIteratorPtr SMDS_MeshNode:: int SMDS_MeshNode::NbNodes() const { - return 1; + return 1; } double SMDS_MeshNode::X() const { - return myX; + return myX; } double SMDS_MeshNode::Y() const { - return myY; + return myY; } double SMDS_MeshNode::Z() const { - return myZ; + return myZ; } void SMDS_MeshNode::setXYZ(double x, double y, double z) { - myX=x; - myY=y; - myZ=z; + myX=x; + myY=y; + myZ=z; } SMDSAbs_ElementType SMDS_MeshNode::GetType() const { - return SMDSAbs_Node; + return SMDSAbs_Node; } //======================================================================= @@ -223,9 +239,22 @@ void SMDS_MeshNode::ClearInverseElements() myInverseElements.Clear(); } -bool SMDS_MeshNode::emptyInverseElements() +//================================================================================ +/*! + * \brief Count inverse elements of given type + */ +//================================================================================ + +int SMDS_MeshNode::NbInverseElements(SMDSAbs_ElementType type) const { - return myInverseElements.IsEmpty() != Standard_False; + if ( type == SMDSAbs_All ) + return myInverseElements.Extent(); + int nb = 0; + NCollection_List::Iterator it( myInverseElements ); + for ( ; it.More(); it.Next() ) + if ( it.Value()->GetType() == type ) + nb++; + return nb; } /////////////////////////////////////////////////////////////////////////////// @@ -233,14 +262,14 @@ bool SMDS_MeshNode::emptyInverseElements() /////////////////////////////////////////////////////////////////////////////// bool operator<(const SMDS_MeshNode& e1, const SMDS_MeshNode& e2) { - return e1.GetID()