From 4ea4ccf36f3c18ecde6f63d51d3e8876a2a27344 Mon Sep 17 00:00:00 2001 From: jrt Date: Mon, 8 Sep 2003 15:04:54 +0000 Subject: [PATCH] Add support for tetra, pyramid and prism --- src/SMDS/SMDS_Mesh.cxx | 12 +++--- src/SMDS/SMDS_VolumeOfNodes.cxx | 72 +++++++++++++++++++++++++++++---- src/SMDS/SMDS_VolumeOfNodes.hxx | 22 +++++++++- 3 files changed, 92 insertions(+), 14 deletions(-) diff --git a/src/SMDS/SMDS_Mesh.cxx b/src/SMDS/SMDS_Mesh.cxx index f031b974c..6623b37ef 100644 --- a/src/SMDS/SMDS_Mesh.cxx +++ b/src/SMDS/SMDS_Mesh.cxx @@ -329,8 +329,8 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID( } else { - MESSAGE("Error : Not implemented"); - return NULL; + volume=new SMDS_VolumeOfNodes(node1,node2,node3,node4); + myVolumes.insert(volume); } if(myElementIDFactory->BindID(ID, volume)) @@ -424,8 +424,8 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID( } else { - MESSAGE("Error : Not implemented"); - return NULL; + volume=new SMDS_VolumeOfNodes(node1,node2,node3,node4,node5); + myVolumes.insert(volume); } if(myElementIDFactory->BindID(ID, volume)) @@ -525,8 +525,8 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID( } else { - MESSAGE("Error : Not implemented"); - return NULL; + volume=new SMDS_VolumeOfNodes(node1,node2,node3,node4,node5,node6); + myVolumes.insert(volume); } if(myElementIDFactory->BindID(ID, volume)) diff --git a/src/SMDS/SMDS_VolumeOfNodes.cxx b/src/SMDS/SMDS_VolumeOfNodes.cxx index f09fa620a..c7b308e91 100644 --- a/src/SMDS/SMDS_VolumeOfNodes.cxx +++ b/src/SMDS/SMDS_VolumeOfNodes.cxx @@ -37,6 +37,7 @@ SMDS_VolumeOfNodes::SMDS_VolumeOfNodes( SMDS_MeshNode * node7, SMDS_MeshNode * node8) { + myNodes.resize(8); myNodes[0]=node1; myNodes[1]=node2; myNodes[2]=node3; @@ -47,6 +48,50 @@ SMDS_VolumeOfNodes::SMDS_VolumeOfNodes( myNodes[7]=node8; } +SMDS_VolumeOfNodes::SMDS_VolumeOfNodes( + SMDS_MeshNode * node1, + SMDS_MeshNode * node2, + SMDS_MeshNode * node3, + SMDS_MeshNode * node4) +{ + myNodes.resize(4); + myNodes[0]=node1; + myNodes[1]=node2; + myNodes[2]=node3; + myNodes[3]=node4; +} + +SMDS_VolumeOfNodes::SMDS_VolumeOfNodes( + SMDS_MeshNode * node1, + SMDS_MeshNode * node2, + SMDS_MeshNode * node3, + SMDS_MeshNode * node4, + SMDS_MeshNode * node5) +{ + myNodes.resize(5); + myNodes[0]=node1; + myNodes[1]=node2; + myNodes[2]=node3; + myNodes[3]=node4; + myNodes[4]=node5; +} + +SMDS_VolumeOfNodes::SMDS_VolumeOfNodes( + SMDS_MeshNode * node1, + SMDS_MeshNode * node2, + SMDS_MeshNode * node3, + SMDS_MeshNode * node4, + SMDS_MeshNode * node5, + SMDS_MeshNode * node6) +{ + myNodes.resize(6); + myNodes[0]=node1; + myNodes[1]=node2; + myNodes[2]=node3; + myNodes[3]=node4; + myNodes[4]=node5; + myNodes[5]=node6; +} //======================================================================= //function : Print //purpose : @@ -62,17 +107,31 @@ void SMDS_VolumeOfNodes::Print(ostream & OS) const int SMDS_VolumeOfNodes::NbFaces() const { - return 6; + switch(NbNodes()) + { + case 4: return 4; + case 5: return 5; + case 6: return 5; + case 8: return 6; + default: MESSAGE("invalid number of nodes"); + } } int SMDS_VolumeOfNodes::NbNodes() const { - return 8; + return myNodes.size(); } int SMDS_VolumeOfNodes::NbEdges() const { - return 12; + switch(NbNodes()) + { + case 4: return 6; + case 5: return 8; + case 6: return 9; + case 8: return 12; + default: MESSAGE("invalid number of nodes"); + } } SMDS_Iterator * SMDS_VolumeOfNodes:: @@ -80,15 +139,15 @@ SMDS_Iterator * SMDS_VolumeOfNodes:: { class MyIterator:public SMDS_Iterator { - const SMDS_MeshNode * const* mySet; + const vector& mySet; int index; public: - MyIterator(const SMDS_MeshNode * const* s):mySet(s),index(0) + MyIterator(const vector& s):mySet(s),index(0) {} bool more() { - return index<8; + return index * SMDS_VolumeOfNodes:: return mySet[index-1]; } }; - switch(type) { case SMDSAbs_Volume:return SMDS_MeshElement::elementsIterator(SMDSAbs_Volume); diff --git a/src/SMDS/SMDS_VolumeOfNodes.hxx b/src/SMDS/SMDS_VolumeOfNodes.hxx index 224067341..c7c3529c3 100644 --- a/src/SMDS/SMDS_VolumeOfNodes.hxx +++ b/src/SMDS/SMDS_VolumeOfNodes.hxx @@ -28,11 +28,31 @@ #define _SMDS_VolumeOfNodes_HeaderFile #include "SMDS_MeshVolume.hxx" +#include +using namespace std; class SMDS_VolumeOfNodes:public SMDS_MeshVolume { public: + SMDS_VolumeOfNodes( + SMDS_MeshNode * node1, + SMDS_MeshNode * node2, + SMDS_MeshNode * node3, + SMDS_MeshNode * node4); + SMDS_VolumeOfNodes( + SMDS_MeshNode * node1, + SMDS_MeshNode * node2, + SMDS_MeshNode * node3, + SMDS_MeshNode * node4, + SMDS_MeshNode * node5); + SMDS_VolumeOfNodes( + SMDS_MeshNode * node1, + SMDS_MeshNode * node2, + SMDS_MeshNode * node3, + SMDS_MeshNode * node4, + SMDS_MeshNode * node5, + SMDS_MeshNode * node6); SMDS_VolumeOfNodes( SMDS_MeshNode * node1, SMDS_MeshNode * node2, @@ -51,6 +71,6 @@ class SMDS_VolumeOfNodes:public SMDS_MeshVolume protected: SMDS_Iterator * elementsIterator(SMDSAbs_ElementType type) const; - SMDS_MeshNode * myNodes[8]; + vector myNodes; }; #endif -- 2.30.2