smesh/src/SMDS/SMDS_MeshEdge.cxx

163 lines
3.9 KiB
C++
Raw Normal View History

2003-07-10 15:49:12 +06:00
// SMESH SMDS : implementaion of Salome mesh data structure
//
// 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
//
//
//
// File : SMDS_MeshEdge.cxx
// Author : Jean-Michel BOULCOURT
// Module : SMESH
2003-05-19 19:49:00 +06:00
2005-01-20 11:25:54 +05:00
#ifdef _MSC_VER
#pragma warning(disable:4786)
#endif
2003-09-03 23:30:36 +06:00
#include "SMDS_MeshEdge.hxx"
#include "SMDS_IteratorOfElements.hxx"
#include "SMDS_MeshNode.hxx"
2004-12-01 15:48:31 +05:00
using namespace std;
2003-05-19 19:49:00 +06:00
//=======================================================================
//function : SMDS_MeshEdge
//purpose :
//=======================================================================
2004-06-18 14:34:31 +06:00
SMDS_MeshEdge::SMDS_MeshEdge(const SMDS_MeshNode * node1,
const SMDS_MeshNode * node2)
2003-09-03 23:30:36 +06:00
{
myNodes[0]=node1;
myNodes[1]=node2;
2003-05-19 19:49:00 +06:00
}
//=======================================================================
2003-09-03 23:30:36 +06:00
//function : Print
2003-05-19 19:49:00 +06:00
//purpose :
//=======================================================================
2003-09-03 23:30:36 +06:00
void SMDS_MeshEdge::Print(ostream & OS) const
2003-05-19 19:49:00 +06:00
{
2003-09-03 23:30:36 +06:00
OS << "edge <" << GetID() << "> : (" << myNodes[0] << " , " << myNodes[1] <<
") " << endl;
2003-05-19 19:49:00 +06:00
}
2003-09-03 23:30:36 +06:00
int SMDS_MeshEdge::NbNodes() const
{
return 2;
}
2003-05-19 19:49:00 +06:00
2003-09-03 23:30:36 +06:00
int SMDS_MeshEdge::NbEdges() const
2003-05-19 19:49:00 +06:00
{
2003-09-03 23:30:36 +06:00
return 1;
2003-05-19 19:49:00 +06:00
}
2003-09-03 23:30:36 +06:00
SMDSAbs_ElementType SMDS_MeshEdge::GetType() const
{
return SMDSAbs_Edge;
}
2004-06-18 14:34:31 +06:00
class SMDS_MeshEdge_MyNodeIterator:public SMDS_ElemIterator
{
const SMDS_MeshNode *const* myNodes;
int myIndex;
public:
SMDS_MeshEdge_MyNodeIterator(const SMDS_MeshNode * const* nodes):
myNodes(nodes),myIndex(0) {}
bool more()
{
return myIndex<2;
}
const SMDS_MeshElement* next()
{
myIndex++;
return myNodes[myIndex-1];
}
};
SMDS_ElemIteratorPtr SMDS_MeshEdge::
2003-09-03 23:30:36 +06:00
elementsIterator(SMDSAbs_ElementType type) const
{
2004-06-18 14:34:31 +06:00
switch(type)
{
case SMDSAbs_Edge:
return SMDS_MeshElement::elementsIterator(SMDSAbs_Edge);
case SMDSAbs_Node:
return SMDS_ElemIteratorPtr(new SMDS_MeshEdge_MyNodeIterator(myNodes));
default:
return SMDS_ElemIteratorPtr
(new SMDS_IteratorOfElements
(this,type, SMDS_ElemIteratorPtr(new SMDS_MeshEdge_MyNodeIterator(myNodes))));
}
2003-09-03 23:30:36 +06:00
}
bool operator<(const SMDS_MeshEdge & e1, const SMDS_MeshEdge & e2)
{
int id11=e1.myNodes[0]->GetID();
int id21=e2.myNodes[0]->GetID();
int id12=e1.myNodes[1]->GetID();
int id22=e2.myNodes[1]->GetID();
int tmp;
2003-05-19 19:49:00 +06:00
2003-09-03 23:30:36 +06:00
if(id11>=id12)
{
tmp=id11;
id11=id12;
id12=tmp;
}
if(id21>=id22)
{
tmp=id21;
id21=id22;
id22=tmp;
}
if(id11<id21) return true;
else if(id11==id21) return (id21<id22);
else return false;
}
2004-12-01 15:48:31 +05:00
/*!
* \brief Return node by its index
* \param ind - node index
* \retval const SMDS_MeshNode* - the node
*
* Index is wrapped if it is out of a valid range
*/
const SMDS_MeshNode* SMDS_MeshEdge::GetNode(const int ind) const
{
return myNodes[ WrappedIndex( ind )];
}
2004-12-01 15:48:31 +05:00
//=======================================================================
//function : ChangeNodes
//purpose :
//=======================================================================
bool SMDS_MeshEdge::ChangeNodes(const SMDS_MeshNode * node1,
const SMDS_MeshNode * node2)
{
myNodes[0]=node1;
myNodes[1]=node2;
return true;
}