Salome HOME
PAL13460 (PAL EDF 301 force the mesh to go through a point)
authoreap <eap@opencascade.com>
Wed, 21 Feb 2007 16:55:17 +0000 (16:55 +0000)
committereap <eap@opencascade.com>
Wed, 21 Feb 2007 16:55:17 +0000 (16:55 +0000)
   get only unique nodes of SMDS_PolyhedralVolumeOfNodes

src/OBJECT/SMESH_Object.cxx

index 1e52ccb015f51400b44bd2ec6c493a081841e02f..e7637a2f80903253f9b2bbe21cb72e89914a34ac 100644 (file)
@@ -29,6 +29,7 @@
 #include "SMESH_ActorUtils.h"
 
 #include "SMDS_Mesh.hxx"
 #include "SMESH_ActorUtils.h"
 
 #include "SMDS_Mesh.hxx"
+#include "SMDS_PolyhedralVolumeOfNodes.hxx"
 #include "SMESH_Actor.h"
 #include "SMESH_ControlsDef.hxx"
 #include "SalomeApp_Application.h"
 #include "SMESH_Actor.h"
 #include "SMESH_ControlsDef.hxx"
 #include "SalomeApp_Application.h"
@@ -346,14 +347,19 @@ void SMESH_VisualObjDef::buildElemPrs()
        switch(aType){
        case SMDSAbs_Volume:{
          std::vector<int> aConnectivities;
        switch(aType){
        case SMDSAbs_Volume:{
          std::vector<int> aConnectivities;
-         GetConnect(aNodesIter,aConnect);
          // Convertions connectivities from SMDS to VTK
          if (anElem->IsPoly() && aNbNodes > 3) { // POLYEDRE
          // Convertions connectivities from SMDS to VTK
          if (anElem->IsPoly() && aNbNodes > 3) { // POLYEDRE
-           for (int k = 0; k < aNbNodes; k++) {
+
+            if ( const SMDS_PolyhedralVolumeOfNodes* ph =
+                 dynamic_cast<const SMDS_PolyhedralVolumeOfNodes*> (anElem))
+            {
+              aNbNodes = GetConnect(ph->uniqueNodesIterator(),aConnect);
+              anIdList->SetNumberOfIds( aNbNodes );
+            }
+           for (int k = 0; k < aNbNodes; k++)
              aConnectivities.push_back(k);
              aConnectivities.push_back(k);
-           }
 
 
-         } else if (aNbNodes == 4) {
+          } else if (aNbNodes == 4) {
            static int anIds[] = {0,2,1,3};
            for (int k = 0; k < aNbNodes; k++) aConnectivities.push_back(anIds[k]);
 
            static int anIds[] = {0,2,1,3};
            for (int k = 0; k < aNbNodes; k++) aConnectivities.push_back(anIds[k]);
 
@@ -395,6 +401,9 @@ void SMESH_VisualObjDef::buildElemPrs()
           else {
           }
 
           else {
           }
 
+          if ( aConnect.empty() )
+            GetConnect(aNodesIter,aConnect);
+
          if (aConnectivities.size() > 0) {
            for (vtkIdType aNodeId = 0; aNodeId < aNbNodes; aNodeId++)
              SetId(anIdList,mySMDS2VTKNodes,aConnect,aNodeId,aConnectivities[aNodeId]);
          if (aConnectivities.size() > 0) {
            for (vtkIdType aNodeId = 0; aNodeId < aNbNodes; aNodeId++)
              SetId(anIdList,mySMDS2VTKNodes,aConnect,aNodeId,aConnectivities[aNodeId]);