mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-26 09:20:34 +05:00
Reactivate Python
This commit is contained in:
parent
ec25237027
commit
310f0d5f89
@ -115,12 +115,20 @@ MARK_AS_ADVANCED(SALOME_BUILD_GUI SALOME_SMESH_USE_CGNS SALOME_SMESH_USE_TBB SAL
|
||||
# Python
|
||||
FIND_PACKAGE(SalomePythonInterp REQUIRED)
|
||||
FIND_PACKAGE(SalomePythonLibs REQUIRED)
|
||||
|
||||
IF (DEFINED EMSCRIPTEN)
|
||||
FIND_PACKAGE(SalomePythonWasm REQUIRED)
|
||||
SET(PYTHON_INCLUDE_DIRS ${PYTHONWASM_INCLUDE_DIR})
|
||||
SET(PYTHON_LIBRARIES ${PYTHONWASM_LIB})
|
||||
ELSE()
|
||||
FIND_PACKAGE(SalomeBoost REQUIRED)
|
||||
ENDIF()
|
||||
|
||||
# PThread
|
||||
FIND_PACKAGE(SalomePThread REQUIRED)
|
||||
# SWIG
|
||||
FIND_PACKAGE(SalomeSWIG REQUIRED)
|
||||
# Boost
|
||||
# FIND_PACKAGE(SalomeBoost REQUIRED)
|
||||
# CORBA
|
||||
FIND_PACKAGE(SalomeOmniORB REQUIRED)
|
||||
IF(DEFINED EMSCRIPTEN)
|
||||
|
@ -28,6 +28,7 @@ INCLUDE_DIRECTORIES(
|
||||
${KERNEL_INCLUDE_DIRS}
|
||||
${GUI_INCLUDE_DIRS}
|
||||
${GEOM_INCLUDE_DIRS}
|
||||
${PYTHON_INCLUDE_DIRS}
|
||||
${MEDCOUPLING_INCLUDE_DIRS}
|
||||
${PROJECT_SOURCE_DIR}/src/Controls
|
||||
${PROJECT_SOURCE_DIR}/src/SMDS
|
||||
@ -74,6 +75,7 @@ SET(_link_LIBRARIES
|
||||
${KERNEL_SalomeKernelHelpers}
|
||||
${KERNEL_SalomeDS}
|
||||
${KERNEL_SalomeCatalog}
|
||||
# ${PYTHON_LIBRARIES}
|
||||
${OpenCASCADE_ApplicationFramework_LIBRARIES}
|
||||
${OpenCASCADE_ModelingAlgorithms_LIBRARIES}
|
||||
${GEOM_GEOMClient}
|
||||
@ -127,7 +129,7 @@ SET(SMESHEngine_SOURCES
|
||||
SMESH_Gen_i_1.cxx
|
||||
SMESH_Gen_No_Session_i.cxx
|
||||
SMESH_Gen_Session_i.cxx
|
||||
# SMESH_PythonDump.cxx # EMscripten: duplicate symbol
|
||||
# SMESH_PythonDump.cxx # Emscripten: duplicate symbol
|
||||
SMESH_Mesh_i.cxx
|
||||
SMESH_subMesh_i.cxx
|
||||
SMESH_MeshEditor_i.cxx
|
||||
|
@ -50,8 +50,8 @@
|
||||
#include <gp_Pnt.hxx>
|
||||
|
||||
// Have to be included before std headers
|
||||
// #include <Python.h>
|
||||
// #include <structmember.h>
|
||||
#include <Python.h>
|
||||
#include <structmember.h>
|
||||
|
||||
#ifdef WIN32
|
||||
#include <windows.h>
|
||||
@ -2899,122 +2899,122 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateDualMesh(SMESH::SMESH_IDSource_ptr mesh
|
||||
const char* meshName,
|
||||
CORBA::Boolean adapt_to_shape)
|
||||
{
|
||||
// Unexpect aCatch(SALOME_SalomeException);
|
||||
Unexpect aCatch(SALOME_SalomeException);
|
||||
|
||||
// TPythonDump* pyDump = new TPythonDump(this); // prevent dump from CreateMesh()
|
||||
// std::unique_ptr<TPythonDump> pyDumpDeleter( pyDump );
|
||||
TPythonDump* pyDump = new TPythonDump(this); // prevent dump from CreateMesh()
|
||||
std::unique_ptr<TPythonDump> pyDumpDeleter( pyDump );
|
||||
|
||||
// // 1. Get source mesh
|
||||
// 1. Get source mesh
|
||||
|
||||
// if ( CORBA::is_nil( mesh ))
|
||||
// THROW_SALOME_CORBA_EXCEPTION( "bad IDSource", SALOME::BAD_PARAM );
|
||||
if ( CORBA::is_nil( mesh ))
|
||||
THROW_SALOME_CORBA_EXCEPTION( "bad IDSource", SALOME::BAD_PARAM );
|
||||
|
||||
// SMESH::SMESH_Mesh_var srcMesh = mesh->GetMesh();
|
||||
// SMESH_Mesh_i* srcMesh_i = SMESH::DownCast<SMESH_Mesh_i*>( srcMesh );
|
||||
// if ( !srcMesh_i )
|
||||
// THROW_SALOME_CORBA_EXCEPTION( "bad mesh of IDSource", SALOME::BAD_PARAM );
|
||||
SMESH::SMESH_Mesh_var srcMesh = mesh->GetMesh();
|
||||
SMESH_Mesh_i* srcMesh_i = SMESH::DownCast<SMESH_Mesh_i*>( srcMesh );
|
||||
if ( !srcMesh_i )
|
||||
THROW_SALOME_CORBA_EXCEPTION( "bad mesh of IDSource", SALOME::BAD_PARAM );
|
||||
|
||||
// CORBA::String_var mesh_var=GetORB()->object_to_string(mesh);
|
||||
// std::string mesh_ior = mesh_var.in();
|
||||
CORBA::String_var mesh_var=GetORB()->object_to_string(mesh);
|
||||
std::string mesh_ior = mesh_var.in();
|
||||
|
||||
// //temporary folder for the generation of the med file
|
||||
// fs::path tmp_folder = fs::temp_directory_path() / fs::unique_path(fs::path("dual_mesh-%%%%"));
|
||||
// fs::create_directories(tmp_folder);
|
||||
// fs::path dual_mesh_file = tmp_folder / fs::path("tmp_dual_mesh.med");
|
||||
// std::string mesh_name(meshName);
|
||||
// MESSAGE("Working in folder" + tmp_folder.string());
|
||||
//temporary folder for the generation of the med file
|
||||
fs::path tmp_folder = fs::temp_directory_path() / fs::unique_path(fs::path("dual_mesh-%%%%"));
|
||||
fs::create_directories(tmp_folder);
|
||||
fs::path dual_mesh_file = tmp_folder / fs::path("tmp_dual_mesh.med");
|
||||
std::string mesh_name(meshName);
|
||||
MESSAGE("Working in folder" + tmp_folder.string());
|
||||
|
||||
// // Running Python script
|
||||
// assert(Py_IsInitialized());
|
||||
// PyGILState_STATE gstate;
|
||||
// gstate = PyGILState_Ensure();
|
||||
// Running Python script
|
||||
assert(Py_IsInitialized());
|
||||
PyGILState_STATE gstate;
|
||||
gstate = PyGILState_Ensure();
|
||||
|
||||
|
||||
// std::string ats;
|
||||
// if(adapt_to_shape)
|
||||
// ats = "True";
|
||||
// else
|
||||
// ats = "False";
|
||||
std::string ats;
|
||||
if(adapt_to_shape)
|
||||
ats = "True";
|
||||
else
|
||||
ats = "False";
|
||||
|
||||
// std::string cmd="import salome.smesh.smesh_tools as smt\n";
|
||||
// cmd +="smt.smesh_create_dual_mesh(\"" + mesh_ior + "\", r\"" +
|
||||
// dual_mesh_file.string() + "\", mesh_name=\"" + mesh_name + "\", adapt_to_shape=" + ats + ")";
|
||||
// MESSAGE(cmd);
|
||||
std::string cmd="import salome.smesh.smesh_tools as smt\n";
|
||||
cmd +="smt.smesh_create_dual_mesh(\"" + mesh_ior + "\", r\"" +
|
||||
dual_mesh_file.string() + "\", mesh_name=\"" + mesh_name + "\", adapt_to_shape=" + ats + ")";
|
||||
MESSAGE(cmd);
|
||||
|
||||
// PyObject *py_main = PyImport_AddModule("__main__");
|
||||
// PyObject *py_dict = PyModule_GetDict(py_main);
|
||||
// PyObject *local_dict = PyDict_New();
|
||||
PyObject *py_main = PyImport_AddModule("__main__");
|
||||
PyObject *py_dict = PyModule_GetDict(py_main);
|
||||
PyObject *local_dict = PyDict_New();
|
||||
|
||||
// PyRun_String(cmd.c_str(), Py_file_input, py_dict, local_dict);
|
||||
PyRun_String(cmd.c_str(), Py_file_input, py_dict, local_dict);
|
||||
|
||||
// if (PyErr_Occurred()) {
|
||||
// // Restrieving python error
|
||||
// MESSAGE("Catching error");
|
||||
// PyObject *errtype, *errvalue, *traceback;
|
||||
// PyErr_Fetch(&errtype, &errvalue, &traceback);
|
||||
// if(errvalue != NULL) {
|
||||
// MESSAGE("Error has a value");
|
||||
// PyObject *s = PyObject_Str(errvalue);
|
||||
// Py_ssize_t size;
|
||||
// std::string msg = PyUnicode_AsUTF8AndSize(s, &size);
|
||||
// msg = "Issue with the execution of create_dual_mesh:\n"+msg;
|
||||
// MESSAGE("throwing exception");
|
||||
// // We need to deactivate the GIL before throwing the exception
|
||||
// PyGILState_Release(gstate);
|
||||
// THROW_SALOME_CORBA_EXCEPTION(msg.c_str(), SALOME::INTERNAL_ERROR );
|
||||
// Py_DECREF(s);
|
||||
// }
|
||||
// Py_XDECREF(errvalue);
|
||||
// Py_XDECREF(errtype);
|
||||
// Py_XDECREF(traceback);
|
||||
// }
|
||||
if (PyErr_Occurred()) {
|
||||
// Restrieving python error
|
||||
MESSAGE("Catching error");
|
||||
PyObject *errtype, *errvalue, *traceback;
|
||||
PyErr_Fetch(&errtype, &errvalue, &traceback);
|
||||
if(errvalue != NULL) {
|
||||
MESSAGE("Error has a value");
|
||||
PyObject *s = PyObject_Str(errvalue);
|
||||
Py_ssize_t size;
|
||||
std::string msg = PyUnicode_AsUTF8AndSize(s, &size);
|
||||
msg = "Issue with the execution of create_dual_mesh:\n"+msg;
|
||||
MESSAGE("throwing exception");
|
||||
// We need to deactivate the GIL before throwing the exception
|
||||
PyGILState_Release(gstate);
|
||||
THROW_SALOME_CORBA_EXCEPTION(msg.c_str(), SALOME::INTERNAL_ERROR );
|
||||
Py_DECREF(s);
|
||||
}
|
||||
Py_XDECREF(errvalue);
|
||||
Py_XDECREF(errtype);
|
||||
Py_XDECREF(traceback);
|
||||
}
|
||||
|
||||
// PyGILState_Release(gstate);
|
||||
PyGILState_Release(gstate);
|
||||
|
||||
// MESSAGE("Mesh created in " + dual_mesh_file.string());
|
||||
MESSAGE("Mesh created in " + dual_mesh_file.string());
|
||||
|
||||
// // Import created MED
|
||||
// SMESH::SMESH_Mesh_var newMesh = CreateMesh(GEOM::GEOM_Object::_nil());
|
||||
// SMESH_Mesh_i* newMesh_i = SMESH::DownCast<SMESH_Mesh_i*>( newMesh );
|
||||
// if ( !newMesh_i )
|
||||
// THROW_SALOME_CORBA_EXCEPTION( "can't create a mesh", SALOME::INTERNAL_ERROR );
|
||||
// SALOMEDS::SObject_wrap meshSO = ObjectToSObject( newMesh );
|
||||
// if ( !meshSO->_is_nil() )
|
||||
// {
|
||||
// SetName( meshSO, meshName, meshName );
|
||||
// SetPixMap( meshSO, "ICON_SMESH_TREE_MESH_IMPORTED");
|
||||
// }
|
||||
// int ret = newMesh_i->ImportMEDFile(dual_mesh_file.string().c_str(), meshName);
|
||||
// if(ret)
|
||||
// THROW_SALOME_CORBA_EXCEPTION( "Issue when importing mesh", SALOME::INTERNAL_ERROR );
|
||||
// Import created MED
|
||||
SMESH::SMESH_Mesh_var newMesh = CreateMesh(GEOM::GEOM_Object::_nil());
|
||||
SMESH_Mesh_i* newMesh_i = SMESH::DownCast<SMESH_Mesh_i*>( newMesh );
|
||||
if ( !newMesh_i )
|
||||
THROW_SALOME_CORBA_EXCEPTION( "can't create a mesh", SALOME::INTERNAL_ERROR );
|
||||
SALOMEDS::SObject_wrap meshSO = ObjectToSObject( newMesh );
|
||||
if ( !meshSO->_is_nil() )
|
||||
{
|
||||
SetName( meshSO, meshName, meshName );
|
||||
SetPixMap( meshSO, "ICON_SMESH_TREE_MESH_IMPORTED");
|
||||
}
|
||||
int ret = newMesh_i->ImportMEDFile(dual_mesh_file.string().c_str(), meshName);
|
||||
if(ret)
|
||||
THROW_SALOME_CORBA_EXCEPTION( "Issue when importing mesh", SALOME::INTERNAL_ERROR );
|
||||
|
||||
// /*
|
||||
// SMESH_Mesh& newMesh2 = newMesh_i->GetImpl();
|
||||
/*
|
||||
SMESH_Mesh& newMesh2 = newMesh_i->GetImpl();
|
||||
|
||||
|
||||
// MESSAGE("Loading file: " << dual_mesh_file.string() << " with mesh " << meshName);
|
||||
// int ret = newMesh2.MEDToMesh(dual_mesh_file.c_str(), meshName);
|
||||
// */
|
||||
MESSAGE("Loading file: " << dual_mesh_file.string() << " with mesh " << meshName);
|
||||
int ret = newMesh2.MEDToMesh(dual_mesh_file.c_str(), meshName);
|
||||
*/
|
||||
|
||||
// newMesh_i->GetImpl().GetMeshDS()->Modified();
|
||||
newMesh_i->GetImpl().GetMeshDS()->Modified();
|
||||
|
||||
// *pyDump << newMesh << " = " << this
|
||||
// << ".CreateDualMesh("
|
||||
// << mesh << ", "
|
||||
// << "'" << mesh_name << "', "
|
||||
// << ats << ") ";
|
||||
*pyDump << newMesh << " = " << this
|
||||
<< ".CreateDualMesh("
|
||||
<< mesh << ", "
|
||||
<< "'" << mesh_name << "', "
|
||||
<< ats << ") ";
|
||||
|
||||
// pyDumpDeleter.reset(); // allow dump in GetGroups()
|
||||
pyDumpDeleter.reset(); // allow dump in GetGroups()
|
||||
|
||||
// if ( srcMesh_i->GetImpl().GetGroupIds().size() > 0 ) // dump created groups
|
||||
// MESSAGE("Dump of groups");
|
||||
// SMESH::ListOfGroups_var groups = newMesh->GetGroups();
|
||||
if ( srcMesh_i->GetImpl().GetGroupIds().size() > 0 ) // dump created groups
|
||||
MESSAGE("Dump of groups");
|
||||
SMESH::ListOfGroups_var groups = newMesh->GetGroups();
|
||||
|
||||
// #ifndef _DEBUG_
|
||||
// fs::remove_all(tmp_folder);
|
||||
// #endif
|
||||
#ifndef _DEBUG_
|
||||
fs::remove_all(tmp_folder);
|
||||
#endif
|
||||
|
||||
// return newMesh._retn();
|
||||
return newMesh._retn();
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
|
Loading…
Reference in New Issue
Block a user