Salome HOME
Compatibility with OCCT dev version
authorvsr <vsr@opencascade.com>
Wed, 11 Feb 2015 15:06:56 +0000 (18:06 +0300)
committervsr <vsr@opencascade.com>
Wed, 11 Feb 2015 15:09:35 +0000 (18:09 +0300)
src/STLPlugin/STLPlugin_ExportDriver.cxx

index 7d02d6f8fad6adc31594437fc22b97f214dc6a69..41130de41d2c1ea4cb474c131291d7849d21d384 100644 (file)
@@ -24,6 +24,7 @@
 // KERNEL includes
 #include <utilities.h>
 #include <Basics_Utils.hxx>
+#include <Basics_OCCTVersion.hxx>
 
 // GEOM includes
 #include "GEOM_Function.hxx"
 #include <BRepBuilderAPI_Copy.hxx>
 #include <StlAPI_Writer.hxx>
 #include <TopoDS_Shape.hxx>
+#include <Bnd_Box.hxx>
+#include <BRepBndLib.hxx>
+#include <BRepTools.hxx>
+#include <BRepMesh_IncrementalMesh.hxx>
+
+#define MAX2(X, Y)      ( Abs(X) > Abs(Y) ? Abs(X) : Abs(Y) )
+#define MAX3(X, Y, Z)   ( MAX2 ( MAX2(X, Y) , Z ) )
 
 //=======================================================================
 //function : GetID
@@ -84,15 +92,31 @@ Standard_Integer STLPlugin_ExportDriver::Execute( TFunction_Logbook& log ) const
   try
   {
     StlAPI_Writer aWriter;
+    // copy source shape
+    BRepBuilderAPI_Copy aCopy( aShape, Standard_False );
+    TopoDS_Shape aCopyShape = aCopy.Shape();
+    // ASCII mode
+    aWriter.ASCIIMode() = anIsASCII;
+#if OCC_VERSION_LARGE > 0x06080000
+    if ( anIsRelative ) {
+      Standard_Real aXmin, aYmin, aZmin, aXmax, aYmax, aZmax;
+      Bnd_Box bndBox;
+      BRepBndLib::Add( aShape, bndBox );
+      bndBox.Get( aXmin, aYmin, aZmin, aXmax, aYmax, aZmax );
+      aDeflection = MAX3( aXmax-aXmin, aYmax-aYmin, aZmax-aZmin ) * aDeflection;
+    }
+    //Compute triangulation
+    BRepTools::Clean( aCopyShape );
+    BRepMesh_IncrementalMesh aMesh( aCopyShape, aDeflection );
+#else
     // set relative mode on false for using custom deflection coefficient
     aWriter.RelativeMode( ) = anIsRelative;
-    aWriter.ASCIIMode() = anIsASCII;
     if( anIsRelative )
       aWriter.SetCoefficient( aDeflection );
     else
       aWriter.SetDeflection( aDeflection );
-    BRepBuilderAPI_Copy aCopy( aShape, Standard_False );
-    aWriter.Write( aCopy.Shape(), aFileName.ToCString() );
+#endif
+    aWriter.Write( aCopyShape, aFileName.ToCString() );
     log.SetTouched( Label() );
     return 1;
   }