Salome HOME
Add support for tetra, pyramid and prism
authorjrt <jrt>
Mon, 8 Sep 2003 15:04:54 +0000 (15:04 +0000)
committerjrt <jrt>
Mon, 8 Sep 2003 15:04:54 +0000 (15:04 +0000)
src/SMDS/SMDS_Mesh.cxx
src/SMDS/SMDS_VolumeOfNodes.cxx
src/SMDS/SMDS_VolumeOfNodes.hxx

index f031b974c3c8c3f3c4970dafc486102039d0f1d4..6623b37efba33c2c8069c512bb3f98c696c49f17 100644 (file)
@@ -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))
index f09fa620aa2d8575a5ef6ef2822d98588233564f..c7b308e919cbcf73fe5d9cb0c20d344c5d6a47c9 100644 (file)
@@ -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<const SMDS_MeshElement *> * SMDS_VolumeOfNodes::
@@ -80,15 +139,15 @@ SMDS_Iterator<const SMDS_MeshElement *> * SMDS_VolumeOfNodes::
 {
        class MyIterator:public SMDS_Iterator<const SMDS_MeshElement*>
        {
-               const SMDS_MeshNode * const* mySet;
+               const vector<const SMDS_MeshNode*>& mySet;
                int index;
          public:
-               MyIterator(const SMDS_MeshNode * const* s):mySet(s),index(0)
+               MyIterator(const vector<const SMDS_MeshNode*>& s):mySet(s),index(0)
                {}
 
                bool more()
                {
-                       return index<8;
+                       return index<mySet.size();
                }
 
                const SMDS_MeshElement* next()
@@ -97,7 +156,6 @@ SMDS_Iterator<const SMDS_MeshElement *> * SMDS_VolumeOfNodes::
                        return mySet[index-1];
                }       
        };
-
        switch(type)
        {
        case SMDSAbs_Volume:return SMDS_MeshElement::elementsIterator(SMDSAbs_Volume);
index 224067341f38624d8392af22830ecf95805105e3..c7c3529c3b841e1aafd2828373c10f64c448665d 100644 (file)
 #define _SMDS_VolumeOfNodes_HeaderFile
 
 #include "SMDS_MeshVolume.hxx"
+#include <vector>
+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<const SMDS_MeshElement *> *
                elementsIterator(SMDSAbs_ElementType type) const;
-       SMDS_MeshNode * myNodes[8];
+       vector<const SMDS_MeshNode *> myNodes;
 };
 #endif