]> SALOME platform Git repositories - modules/geom.git/blobdiff - src/OCC2VTK/OCC2VTK_Tools.cxx
Salome HOME
ParaView / PARAVIS improvements 2014: 2.6.3/2.6.4: Geometry & Mesh plug-ins in the...
[modules/geom.git] / src / OCC2VTK / OCC2VTK_Tools.cxx
index e9b592035f70bb0d5e05d95d022dc54e8687c536..6326c2904a39a155bb28b15b61bcf6ed1fc3477b 100755 (executable)
 #include <TopoDS.hxx>
 #include <TopTools_ListOfShape.hxx>
 
+
+#include <TopExp.hxx>
+#include <vtkAppendPolyData.h>
+#include <vtkPolyData.h>
+#include <BRepBuilderAPI_Copy.hxx>
+
 #define MAX2(X, Y)    (Abs(X) > Abs(Y) ? Abs(X) : Abs(Y))
 #define MAX3(X, Y, Z) (MAX2(MAX2(X,Y), Z))
 
@@ -159,4 +165,68 @@ namespace GEOM
       }
     }
   }
+
+  vtkPolyData* GetData(const TopoDS_Shape& theShape, float theDeflection) {
+    BRepBuilderAPI_Copy aCopy(theShape);
+    if(!aCopy.IsDone()) {
+      return 0;
+    }
+
+    TopoDS_Shape aShape = aCopy.Shape();
+    
+    try {
+      GEOM_VertexSource* myVertexSource = GEOM_VertexSource::New();
+      GEOM_EdgeSource* myIsolatedEdgeSource = GEOM_EdgeSource::New();
+      GEOM_EdgeSource* myOneFaceEdgeSource = GEOM_EdgeSource::New();
+      GEOM_EdgeSource* mySharedEdgeSource = GEOM_EdgeSource::New();
+      GEOM_WireframeFace* myWireframeFaceSource = GEOM_WireframeFace::New();
+      GEOM_ShadingFace* myShadingFaceSource = GEOM_ShadingFace::New();
+      
+      vtkAppendPolyData* myAppendFilter = vtkAppendPolyData::New();
+      myAppendFilter->AddInputConnection( myVertexSource->GetOutputPort() );
+      myAppendFilter->AddInputConnection( myIsolatedEdgeSource->GetOutputPort() );
+      myAppendFilter->AddInputConnection( myOneFaceEdgeSource->GetOutputPort() );
+      myAppendFilter->AddInputConnection( mySharedEdgeSource->GetOutputPort() );      
+      myAppendFilter->AddInputConnection( myShadingFaceSource->GetOutputPort() );
+      
+      bool anIsVector = false;
+      
+      GEOM::MeshShape( aShape, theDeflection );
+      TopExp_Explorer aVertexExp( aShape, TopAbs_VERTEX );
+      for( ; aVertexExp.More(); aVertexExp.Next() ) {
+       const TopoDS_Vertex& aVertex = TopoDS::Vertex( aVertexExp.Current() );
+       myVertexSource->AddVertex( aVertex );
+      }
+      
+      TopTools_IndexedDataMapOfShapeListOfShape anEdgeMap;
+      TopExp::MapShapesAndAncestors( aShape, TopAbs_EDGE, TopAbs_FACE, anEdgeMap );
+      
+      GEOM::SetShape( aShape,
+                     anEdgeMap,
+                     anIsVector,
+                     0,
+                     myIsolatedEdgeSource,
+                     myOneFaceEdgeSource,
+                     mySharedEdgeSource,
+                     myWireframeFaceSource,
+                     myShadingFaceSource );
+      
+      myAppendFilter->Update();
+
+      myVertexSource->Delete();
+      myIsolatedEdgeSource->Delete();
+      myOneFaceEdgeSource->Delete();
+      mySharedEdgeSource->Delete();
+      myWireframeFaceSource->Delete();
+      myShadingFaceSource->Delete();
+
+      vtkPolyData* ret = vtkPolyData::New();
+      ret->ShallowCopy(myAppendFilter->GetOutput());
+      myAppendFilter->Delete();
+      return ret;
+    }
+    catch(Standard_Failure) {
+      return 0;
+    }
+  }  
 }