#endif
#include "SMDS_LinearEdge.hxx"
+#include "SMDS_IteratorOfElements.hxx"
#include "SMDS_MeshNode.hxx"
-#include "SMDS_SetIterator.hxx"
+#include "utilities.h"
-#include <boost/make_shared.hpp>
+using namespace std;
//=======================================================================
//function : SMDS_LinearEdge
SMDS_LinearEdge::SMDS_LinearEdge(const SMDS_MeshNode * node1,
const SMDS_MeshNode * node2)
{
+ //MESSAGE("SMDS_LinearEdge " << GetID());
myNodes[0] = node1;
myNodes[1] = node2;
}
+//=======================================================================
+//function : Print
+//purpose :
+//=======================================================================
+
+void SMDS_LinearEdge::Print(ostream & OS) const
+{
+ OS << "edge <" << GetID() << "> : (" << myNodes[0] << " , " << myNodes[1]
+ << ") " << endl;
+}
+
int SMDS_LinearEdge::NbNodes() const
{
return 2;
return 1;
}
-int SMDS_LinearEdge::NbFaces() const
+class SMDS_LinearEdge_MyNodeIterator: public SMDS_ElemIterator
{
- return 0;
-}
+ const SMDS_MeshNode * const * myNodes;
+ int myIndex;
+public:
+ SMDS_LinearEdge_MyNodeIterator(const SMDS_MeshNode * const * nodes) :
+ myNodes(nodes), myIndex(0)
+ {
+ }
-int SMDS_LinearEdge::GetNodeIndex( const SMDS_MeshNode* node ) const
-{
- if ( node == myNodes[0] ) return 0;
- if ( node == myNodes[1] ) return 1;
- return -1;
-}
+ bool more()
+ {
+ return myIndex < 2;
+ }
-SMDS_ElemIteratorPtr SMDS_LinearEdge::nodesIterator() const
+ const SMDS_MeshElement* next()
+ {
+ myIndex++;
+ return myNodes[myIndex - 1];
+ }
+};
+
+SMDS_ElemIteratorPtr SMDS_LinearEdge::elementsIterator(SMDSAbs_ElementType type) const
{
- return boost::make_shared< SMDS_NodeArrayElemIterator >( &myNodes[0], &myNodes[0] + NbNodes() );
+ switch (type)
+ {
+ case SMDSAbs_Edge:
+ return SMDS_MeshElement::elementsIterator(SMDSAbs_Edge);
+ case SMDSAbs_Node:
+ return SMDS_ElemIteratorPtr(new SMDS_LinearEdge_MyNodeIterator(myNodes));
+ default:
+ return SMDS_ElemIteratorPtr
+ (new SMDS_IteratorOfElements(this,
+ type,
+ SMDS_ElemIteratorPtr
+ (new SMDS_LinearEdge_MyNodeIterator(myNodes))));
+ }
}
-SMDS_NodeIteratorPtr SMDS_LinearEdge::nodeIterator() const
+bool operator<(const SMDS_LinearEdge & e1, const SMDS_LinearEdge & e2)
{
- return boost::make_shared< SMDS_NodeArrayIterator >( &myNodes[0], &myNodes[0] + NbNodes() );
+ int id11 = e1.myNodes[0]->getVtkId();
+ int id21 = e2.myNodes[0]->getVtkId();
+ int id12 = e1.myNodes[1]->getVtkId();
+ int id22 = e2.myNodes[1]->getVtkId();
+ int tmp;
+
+ 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;
}
-/*
+/*!
* \brief Return node by its index
* \param ind - node index
* \retval const SMDS_MeshNode* - the node
//purpose :
//=======================================================================
-bool SMDS_LinearEdge::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes)
+bool SMDS_LinearEdge::ChangeNodes(const SMDS_MeshNode * node1,
+ const SMDS_MeshNode * node2)
{
- myNodes[0] = nodes[0];
- myNodes[1] = nodes[1];
- return nbNodes == 2;
+ myNodes[0] = node1;
+ myNodes[1] = node2;
+ return true;
}