]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
Implementation of 2.6.3/2.6.4 improvements
authorema <elena.mozokhina@opencascade.com>
Tue, 25 Nov 2014 12:50:47 +0000 (15:50 +0300)
committerema <elena.mozokhina@opencascade.com>
Tue, 25 Nov 2014 12:50:47 +0000 (15:50 +0300)
src/OCC2VTK/OCC2VTK_Tools.cxx
src/OCC2VTK/OCC2VTK_Tools.h

index e9b592035f70bb0d5e05d95d022dc54e8687c536..b9b16b135763ee1c397c8808e54a434f9c83c363 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,78 @@ 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;
+
+               // Is shape triangulated?
+               bool wasMeshed = true;
+               TopExp_Explorer ex;
+               TopLoc_Location aLoc;
+               for (ex.Init(aShape, TopAbs_FACE); ex.More(); ex.Next())
+               {
+                       const TopoDS_Face& aFace = TopoDS::Face(ex.Current());
+                   Handle(Poly_Triangulation) aPoly = BRep_Tool::Triangulation(aFace,aLoc);
+                   if(aPoly.IsNull())
+                   {
+                       wasMeshed = false;
+                       break;
+                   }
+               }
+               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();
+
+               return myAppendFilter->GetOutput();
+       }
+        catch(Standard_Failure)
+       {
+          return 0;
+       }
+   }
+
 }
index 523ca14b945ffa3724dc6ad271cc3e7243f4730f..9ca5465509ef13b28dd7eaacb9ece7543f02715d 100755 (executable)
@@ -29,7 +29,7 @@ class GEOM_VertexSource;
 class GEOM_EdgeSource;
 class GEOM_WireframeFace;
 class GEOM_ShadingFace;
-
+class vtkPolyData;
 namespace GEOM
 {
   // moved from GEOM_AssemblyBuilder
@@ -47,6 +47,8 @@ namespace GEOM
                                GEOM_EdgeSource* theSharedEdgeSource,
                                GEOM_WireframeFace* theWireframeFaceSource,
                                GEOM_ShadingFace* theShadingFaceSource);
+
+  OCC2VTK_EXPORT vtkPolyData* GetData(const TopoDS_Shape& theShape, float theDeflection);
 }
 
 #endif // OCC2VTK_TOOLS_H