mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-01-09 00:00:34 +05:00
188 lines
6.0 KiB
C++
188 lines
6.0 KiB
C++
// Copyright (C) 2007-2012 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
|
|
//
|
|
|
|
// SMESH SMDS : implementaion of Salome mesh data structure
|
|
// File: SMDS_QuadraticEdge.cxx
|
|
// Created: 16.01.06 16:25:42
|
|
// Author: Sergey KUUL
|
|
//
|
|
#include "SMDS_QuadraticEdge.hxx"
|
|
|
|
#include "SMDS_SetIterator.hxx"
|
|
#include "SMDS_IteratorOfElements.hxx"
|
|
#include "SMDS_MeshNode.hxx"
|
|
#include "utilities.h"
|
|
|
|
using namespace std;
|
|
|
|
//=======================================================================
|
|
//function : SMDS_QuadraticEdge
|
|
//purpose :
|
|
//=======================================================================
|
|
|
|
SMDS_QuadraticEdge::SMDS_QuadraticEdge(const SMDS_MeshNode * node1,
|
|
const SMDS_MeshNode * node2,
|
|
const SMDS_MeshNode * node12)
|
|
:SMDS_LinearEdge(node1,node2)
|
|
{
|
|
//MESSAGE("******************************************************* SMDS_QuadraticEdge");
|
|
myNodes[2]=node12;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : Print
|
|
//purpose :
|
|
//=======================================================================
|
|
|
|
void SMDS_QuadraticEdge::Print(ostream & OS) const
|
|
{
|
|
OS << "quadratic edge <" << GetID() << "> : ( first-" << myNodes[0]
|
|
<< " , last-" << myNodes[1] << " , medium-" << myNodes[2] << ") " << endl;
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : NbNodes
|
|
//purpose :
|
|
//=======================================================================
|
|
|
|
int SMDS_QuadraticEdge::NbNodes() const
|
|
{
|
|
return 3;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : ChangeNodes
|
|
//purpose :
|
|
//=======================================================================
|
|
|
|
bool SMDS_QuadraticEdge::ChangeNodes(const SMDS_MeshNode * node1,
|
|
const SMDS_MeshNode * node2,
|
|
const SMDS_MeshNode * node12)
|
|
{
|
|
myNodes[0]=node1;
|
|
myNodes[1]=node2;
|
|
myNodes[2]=node12;
|
|
return true;
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : IsMediumNode
|
|
//purpose :
|
|
//=======================================================================
|
|
|
|
bool SMDS_QuadraticEdge::IsMediumNode(const SMDS_MeshNode * node) const
|
|
{
|
|
return (myNodes[2]==node);
|
|
}
|
|
|
|
namespace
|
|
{
|
|
//=======================================================================
|
|
//class : _MyInterlacedNodeIterator
|
|
//purpose :
|
|
//=======================================================================
|
|
|
|
class _MyInterlacedNodeIterator: public SMDS_NodeArrayIterator
|
|
{
|
|
const SMDS_MeshNode * myNodes[3];
|
|
public:
|
|
_MyInterlacedNodeIterator(const SMDS_MeshNode * const * nodes):
|
|
SMDS_NodeArrayIterator( myNodes, & myNodes[3] )
|
|
{
|
|
myNodes[0] = nodes[0];
|
|
myNodes[1] = nodes[2];
|
|
myNodes[2] = nodes[1];
|
|
}
|
|
};
|
|
|
|
//=======================================================================
|
|
//class : _MyInterlacedNodeElemIterator
|
|
//purpose :
|
|
//=======================================================================
|
|
|
|
class _MyInterlacedNodeElemIterator : public SMDS_ElemIterator
|
|
{
|
|
SMDS_NodeIteratorPtr myItr;
|
|
public:
|
|
_MyInterlacedNodeElemIterator(SMDS_NodeIteratorPtr interlacedNodeItr):
|
|
myItr( interlacedNodeItr ) {}
|
|
bool more() { return myItr->more(); }
|
|
const SMDS_MeshElement* next() { return myItr->next(); }
|
|
};
|
|
|
|
//=======================================================================
|
|
//class : _MyNodeIterator
|
|
//purpose :
|
|
//=======================================================================
|
|
|
|
class _MyNodeIterator:public SMDS_NodeArrayElemIterator
|
|
{
|
|
public:
|
|
_MyNodeIterator(const SMDS_MeshNode * const * nodes):
|
|
SMDS_NodeArrayElemIterator( nodes, & nodes[3] ) {}
|
|
};
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : interlacedNodesIterator
|
|
//purpose :
|
|
//=======================================================================
|
|
|
|
SMDS_NodeIteratorPtr SMDS_QuadraticEdge::interlacedNodesIterator() const
|
|
{
|
|
return SMDS_NodeIteratorPtr (new _MyInterlacedNodeIterator (myNodes));
|
|
}
|
|
|
|
|
|
//=======================================================================
|
|
//function : interlacedNodesElemIterator
|
|
//purpose :
|
|
//=======================================================================
|
|
|
|
SMDS_ElemIteratorPtr SMDS_QuadraticEdge::interlacedNodesElemIterator() const
|
|
{
|
|
return SMDS_ElemIteratorPtr
|
|
(new _MyInterlacedNodeElemIterator ( interlacedNodesIterator() ));
|
|
}
|
|
|
|
//=======================================================================
|
|
//function : elementsIterator
|
|
//purpose :
|
|
//=======================================================================
|
|
|
|
SMDS_ElemIteratorPtr SMDS_QuadraticEdge::elementsIterator(SMDSAbs_ElementType type) const
|
|
{
|
|
switch(type)
|
|
{
|
|
case SMDSAbs_Edge:
|
|
return SMDS_MeshElement::elementsIterator(SMDSAbs_Edge);
|
|
case SMDSAbs_Node:
|
|
return SMDS_ElemIteratorPtr(new _MyNodeIterator(myNodes));
|
|
default:
|
|
return SMDS_ElemIteratorPtr
|
|
(new SMDS_IteratorOfElements
|
|
(this,type, SMDS_ElemIteratorPtr(new _MyNodeIterator(myNodes))));
|
|
}
|
|
}
|