Adding support for BRep for shape

This commit is contained in:
Yoann Audouin 2022-09-15 15:12:22 +02:00
parent e0859e6a65
commit 78c4fca7f3
4 changed files with 96 additions and 49 deletions

View File

@ -91,7 +91,7 @@ SET(SMESHimpl_HEADERS
MG_ADAPT.hxx MG_ADAPT.hxx
SMESH_Homard.hxx SMESH_Homard.hxx
SMESH_DriverMesh.hxx SMESH_DriverMesh.hxx
SMESH_DriverStep.hxx SMESH_DriverShape.hxx
) )
# --- sources --- # --- sources ---
@ -113,7 +113,7 @@ SET(SMESHimpl_SOURCES
MG_ADAPT.cxx MG_ADAPT.cxx
SMESH_Homard.cxx SMESH_Homard.cxx
SMESH_DriverMesh.cxx SMESH_DriverMesh.cxx
SMESH_DriverStep.cxx SMESH_DriverShape.cxx
) )
# --- rules --- # --- rules ---

View File

@ -20,54 +20,28 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// File : SMESH_DriverStep.cxx // File : SMESH_DriverShape.cxx
// Author : Yoann AUDOUIN, EDF // Author : Yoann AUDOUIN, EDF
// Module : SMESH // Module : SMESH
// //
#include "SMESH_DriverStep.hxx" #include "SMESH_DriverShape.hxx"
// step include
#include <STEPControl_Reader.hxx> #include <STEPControl_Reader.hxx>
#include <STEPControl_Writer.hxx> #include <STEPControl_Writer.hxx>
#include <Interface_Static.hxx> #include <Interface_Static.hxx>
// Brep include
#include <BRepTools.hxx>
#include <BRep_Builder.hxx>
//Occ include //Occ include
#include <TopoDS.hxx> #include <TopoDS.hxx>
#include <boost/filesystem.hpp>
/** #include <boost/algorithm/string.hpp>
* @brief Compares two shape file (STEP) namespace fs = boost::filesystem;
*
* @param file1 first file
* @param file2 second file
*
* @return true if the files are the same
*/
bool diffStepFile(std::string file1, std::string file2){
std::ifstream sfile1(file1);
std::ifstream sfile2(file2);
std::string line1, line2;
int nb_lines = 0;
while(!sfile1.eof() && !sfile2.eof()){
std::getline(sfile1, line1);
std::getline(sfile2, line2);
nb_lines++;
// Skipping 4th line contain date of creation
if (nb_lines==4){
std::cout << "Skipping line" << std::endl;
continue;
}
// if lines are different end of read
if(line1 != line2){
return false;
}
}
// True if we reached the end of both files
return sfile1.eof() && sfile2.eof();
}
/** /**
* @brief Import the content of a shape file (STEP) into a TopDS_Shape object * @brief Import the content of a shape file (STEP) into a TopDS_Shape object
@ -77,9 +51,9 @@ bool diffStepFile(std::string file1, std::string file2){
* *
* @return error code * @return error code
*/ */
int importShape(const std::string shape_file, TopoDS_Shape& aShape){ int importSTEPShape(const std::string shape_file, TopoDS_Shape& aShape){
std::cout << "Importing shape from " << shape_file << std::endl; std::cout << "Importing STEP shape from " << shape_file << std::endl;
STEPControl_Reader reader; STEPControl_Reader reader;
// Forcing Unit in meter // Forcing Unit in meter
Interface_Static::SetCVal("xstep.cascade.unit","M"); Interface_Static::SetCVal("xstep.cascade.unit","M");
@ -105,9 +79,9 @@ int importShape(const std::string shape_file, TopoDS_Shape& aShape){
* *
* @return error code * @return error code
*/ */
int exportShape(const std::string shape_file, const TopoDS_Shape& aShape){ int exportSTEPShape(const std::string shape_file, const TopoDS_Shape& aShape){
std::cout << "Exporting shape to " << shape_file << std::endl; std::cout << "Exporting STEP shape to " << shape_file << std::endl;
STEPControl_Writer aWriter; STEPControl_Writer aWriter;
// Forcing Unit in meter // Forcing Unit in meter
@ -126,3 +100,78 @@ int exportShape(const std::string shape_file, const TopoDS_Shape& aShape){
return aStat; return aStat;
} }
/**
* @brief Import the content of a shape file (BREP) into a TopDS_Shape object
*
* @param shape_file the shape file
* @param aShape the object
*
* @return error code
*/
int importBREPShape(const std::string shape_file, TopoDS_Shape& aShape){
std::cout << "Importing BREP shape from " << shape_file << std::endl;
BRep_Builder builder;
BRepTools::Read(aShape, shape_file.c_str(), builder);
return true;
}
/**
* @brief Export the content of a TopoDS_Shape into a shape file (BREP)
*
* @param shape_file the shape file
* @param aShape the object
*
* @return error code
*/
int exportBREPShape(const std::string shape_file, const TopoDS_Shape& aShape){
std::cout << "Exporting BREP shape to " << shape_file << std::endl;
BRepTools::Write(aShape, shape_file.c_str());
return true;
}
/**
* @brief Import the content of a shape file into a TopDS_Shape object
*
* @param shape_file the shape file
* @param aShape the object
*
* @return error code
*/
int importShape(const std::string shape_file, TopoDS_Shape& aShape){
std::string type = fs::path(shape_file).extension().string();
boost::algorithm::to_lower(type);
if (type == ".brep"){
return importBREPShape(shape_file, aShape);
} else if (type == ".step"){
return importSTEPShape(shape_file, aShape);
} else {
std::cout << "Unknow format: " << type << std::endl;
return false;
}
}
/**
* @brief Import the content of a shape file into a TopDS_Shape object
*
* @param shape_file the shape file
* @param aShape the object
*
* @return error code
*/
int exportShape(const std::string shape_file, const TopoDS_Shape& aShape){
std::string type = fs::path(shape_file).extension().string();
boost::algorithm::to_lower(type);
if (type == ".brep"){
return exportBREPShape(shape_file, aShape);
} else if (type == ".step"){
return exportSTEPShape(shape_file, aShape);
} else {
std::cout << "Unknow format: " << type << std::endl;
return false;
}
}

View File

@ -20,13 +20,13 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// File : SMESH_DriverStep.hxx // File : SMESH_DriverShape.hxx
// Author : Yoann AUDOUIN, EDF // Author : Yoann AUDOUIN, EDF
// Module : SMESH // Module : SMESH
// //
#ifndef _SMESH_DRIVERSTEP_HXX_ #ifndef _SMESH_DRIVERSHAPE_HXX_
#define _SMESH_DRIVERSTEP_HXX_ #define _SMESH_DRIVERSHAPE_HXX_
#include <string> #include <string>
#include <cassert> #include <cassert>
@ -35,7 +35,5 @@ class TopoDS_Shape;
int importShape(const std::string shape_file, TopoDS_Shape& aShape); int importShape(const std::string shape_file, TopoDS_Shape& aShape);
int exportShape(const std::string shape_file, const TopoDS_Shape& aShape); int exportShape(const std::string shape_file, const TopoDS_Shape& aShape);
bool diffStepFile(std::string file1, std::string file2);
#endif #endif

View File

@ -87,7 +87,7 @@ namespace fs=boost::filesystem;
#define MAX_MED_GROUP_NAME_LENGTH 80 #define MAX_MED_GROUP_NAME_LENGTH 80
#ifdef _DEBUG_ #ifdef _DEBUG_
static int MYDEBUG = 0; static int MYDEBUG = 1;
#else #else
static int MYDEBUG = 0; static int MYDEBUG = 0;
#endif #endif
@ -241,7 +241,7 @@ SMESH_Mesh::~SMESH_Mesh()
int result=pthread_create(&thread, NULL, deleteMeshDS, (void*)_meshDS); int result=pthread_create(&thread, NULL, deleteMeshDS, (void*)_meshDS);
#endif #endif
fs::remove_all(tmp_folder); //fs::remove_all(tmp_folder);
} }
} }