Salome HOME
23076: [CEA 1499] Get in python all sub-shapes in error after Compute
[modules/smesh.git] / src / OBJECT / SMESH_SVTKActor.cxx
index 48ad8691026d940a2383031b614ba60cd0d10943..78ec260d66517867302678585c98df832596c352 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2015  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
@@ -6,7 +6,7 @@
 // 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.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -31,7 +31,6 @@
 #include <SVTK_Utils.h>
 #include <SALOME_Actor.h>
 
-
 #include <SVTK_DeviceActor.h>
 #include <vtkPoints.h>
 #include <vtkRenderer.h>
 #include <vtkUnstructuredGrid.h>
 #include <vtkCell.h>
 #include <vtkDataSetMapper.h>
+#include <vtkPolyhedron.h>
+#include <vtkCellData.h>
+
+#include <Utils_SALOME_Exception.hxx>
 
 vtkStandardNewMacro(SMESH_SVTKActor);
 
@@ -51,6 +54,7 @@ SMESH_SVTKActor::SMESH_SVTKActor():
 {
   my0DActor = SVTK_DeviceActor::New();
   myBallActor = SVTK_DeviceActor::New();
+  myBallActor->SetBallEnabled(true);
 
   myBallActor->SetResolveCoincidentTopology(false);
   myBallActor->SetCoincident3DAllowed(true);
@@ -120,24 +124,36 @@ SMESH_SVTKActor
   SVTK::CopyPoints( myBallGrid, aSourceDataSet );
   SVTK::CopyPoints( my0DGrid,    aSourceDataSet );
 
+
   int aNbOfParts = theMapIndex.Extent();
+
+  vtkCellData* cd = 0;
+  vtkCellData* outputCD = 0;
+  //Copy deamaters of the balls
+  if(myVisualObj) {
+    outputCD = myBallGrid->GetCellData();
+    cd = aSourceDataSet->GetCellData();
+  }
+  outputCD->CopyAllocate(cd,aNbOfParts,aNbOfParts/2);
   for(int ind = 1; ind <= aNbOfParts; ind++){
     int aPartId = theMapIndex( ind );
     if(vtkCell* aCell = theMapActor->GetElemCell(aPartId))
     {
-#if VTK_XVERSION > 50700
       if (aCell->GetCellType() != VTK_POLYHEDRON)
-#endif
       {
         if(aCell->GetCellType() == VTK_VERTEX ) {
           my0DGrid->InsertNextCell(aCell->GetCellType(),aCell->GetPointIds());
-        } else if(aCell->GetCellType() == VTK_POLY_VERTEX ) {
-          myBallGrid->InsertNextCell(aCell->GetCellType(),aCell->GetPointIds());
-        } else {
+        }
+        else if(aCell->GetCellType() == VTK_POLY_VERTEX ) {
+          vtkIdType newCellId = myBallGrid->InsertNextCell(aCell->GetCellType(),aCell->GetPointIds());
+          if(myVisualObj) {
+            outputCD->CopyData(cd, myVisualObj->GetElemVTKId(aPartId), newCellId);
+          }
+        }
+        else {
           myUnstructuredGrid->InsertNextCell(aCell->GetCellType(),aCell->GetPointIds());
         }
       }
-#if VTK_XVERSION > 50700
       else
       {
         vtkPolyhedron *polyhedron = dynamic_cast<vtkPolyhedron*>(aCell);
@@ -146,7 +162,6 @@ SMESH_SVTKActor
         vtkIdType *pts = polyhedron->GetFaces();
         myUnstructuredGrid->InsertNextCell(aCell->GetCellType(),pts[0], pts+1);
       }
-#endif
     }
   }
 
@@ -164,8 +179,8 @@ SMESH_SVTKActor
 ::Initialize()
 {
   Superclass::Initialize();
-  my0DActor->SetInput(my0DGrid);
-  myBallActor->SetInput(myBallGrid);
+  my0DActor->SetInputData(my0DGrid);
+  myBallActor->SetInputData(myBallGrid);
 }
 
 
@@ -184,3 +199,11 @@ void SMESH_SVTKActor::SetBallSize(float theSize) {
   myBallActor->GetProperty()->SetPointSize(theSize);
 }
 
+void SMESH_SVTKActor::SetBallScale(double theScale) {
+  myBallActor->SetBallScale(theScale);
+}
+
+void SMESH_SVTKActor::SetVisualObject(TVisualObjPtr theVisualObj) {
+  myVisualObj = theVisualObj;
+}
+