myIsEmbeddedMode = false;
myShapeReader = NULL; // shape reader
mySMESHGen = this;
+ myIsHistoricalPythonDump = true;
// set it in standalone mode only
//OSD::SetSignal( true );
SALOME::Session_var session = SALOME::Session::_narrow( obj ) ;
if ( !session->_is_nil() )
{
- CORBA::String_var s_host = session->getHostname();
+ CORBA::String_var str_host = session->getHostname();
CORBA::Long s_pid = session->getPID();
string my_host = Kernel_Utils::GetHostname();
#ifdef WNT
#else
long my_pid = (long) getpid();
#endif
- SetEmbeddedMode( s_pid == my_pid && my_host == s_host.in() );
+ SetEmbeddedMode( s_pid == my_pid && my_host == str_host.in() );
}
}
}
THROW_SALOME_CORBA_EXCEPTION( "non-positive number of segments", SALOME::BAD_PARAM );
}
+//=============================================================================
+/*!
+ Set an option value
+*/
+//=============================================================================
+
+void SMESH_Gen_i::SetOption(const char* name, const char* value)
+{
+ if ( name && value &&
+ strcmp(name, "historical_python_dump") == 0 &&
+ strlen( value ) > 0 )
+ {
+ myIsHistoricalPythonDump = ( value[0] == '1' || toupper(value[0]) == 'T' ); // 1 || true
+
+ // update preferences in case if SetOption() is invoked from python console
+ CORBA::Object_var obj = SMESH_Gen_i::GetNS()->Resolve( "/Kernel/Session" );
+ SALOME::Session_var session = SALOME::Session::_narrow( obj );
+ if ( !CORBA::is_nil( session ) ) {
+ string msg("preferences:SMESH:historical_python_dump:");
+ msg += myIsHistoricalPythonDump ? "true" : "false";
+ session->emitMessageOneWay(msg.c_str());
+ }
+ }
+}
+
+//=============================================================================
+/*!
+ Return an option value
+*/
+//=============================================================================
+
+char* SMESH_Gen_i::GetOption(const char* name)
+{
+ if ( name && strcmp(name, "historical_python_dump") == 0 )
+ {
+ return CORBA::string_dup( myIsHistoricalPythonDump ? "true" : "false" );
+ }
+ return CORBA::string_dup( "" );
+}
+
//=============================================================================
/*!
* SMESH_Gen_i::CreateMesh
*/
//=============================================================================
-SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMED( const char* theFileName,
- SMESH::DriverMED_ReadStatus& theStatus)
- throw ( SALOME::SALOME_Exception )
+SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMEDorSAUV( const char* theFileName,
+ SMESH::DriverMED_ReadStatus& theStatus,
+ const char* theCommandNameForPython,
+ const char* theFileNameForPython)
{
- Unexpect aCatch(SALOME_SalomeException);
- if(MYDEBUG) MESSAGE( "SMESH_Gen_i::CreateMeshFromMED" );
-
// Retrieve mesh names from the file
DriverMED_R_SMESHDS_Mesh myReader;
myReader.SetFile( theFileName );
}
// Update Python script
- aPythonDump << "], status) = " << this << ".CreateMeshesFromMED(r'" << theFileName << "')";
+ aPythonDump << "], status) = " << this << "." << theCommandNameForPython << "(r'" << theFileNameForPython << "')";
}
// Dump creation of groups
for ( int i = 0; i < aResult->length(); ++i )
return aResult._retn();
}
+SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMED( const char* theFileName,
+ SMESH::DriverMED_ReadStatus& theStatus)
+ throw ( SALOME::SALOME_Exception )
+{
+ Unexpect aCatch(SALOME_SalomeException);
+ if(MYDEBUG) MESSAGE( "SMESH_Gen_i::CreateMeshFromMED" );
+ SMESH::mesh_array* result = CreateMeshesFromMEDorSAUV(theFileName, theStatus, "CreateMeshesFromMED", theFileName);
+ return result;
+}
+
+//=============================================================================
+/*!
+ * SMESH_Gen_i::CreateMeshFromSAUV
+ *
+ * Create mesh and import data from SAUV file
+ */
+//=============================================================================
+
+SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromSAUV( const char* theFileName,
+ SMESH::DriverMED_ReadStatus& theStatus)
+ throw ( SALOME::SALOME_Exception )
+{
+ Unexpect aCatch(SALOME_SalomeException);
+ if(MYDEBUG) MESSAGE( "SMESH_Gen_i::CreateMeshFromSAUV" );
+ std::string sauvfilename(theFileName);
+ std::string medfilename(theFileName);
+ medfilename += ".med";
+ std::string cmd;
+#ifdef WNT
+ cmd = "%PYTHONBIN% ";
+#else
+ cmd = "python ";
+#endif
+ cmd += "-c \"";
+ cmd += "from medutilities import convert ; convert(r'" + sauvfilename + "', 'GIBI', 'MED', 1, r'" + medfilename + "')";
+ cmd += "\"";
+ system(cmd.c_str());
+ SMESH::mesh_array* result = CreateMeshesFromMEDorSAUV(medfilename.c_str(), theStatus, "CreateMeshesFromSAUV", sauvfilename.c_str());
+#ifdef WNT
+ cmd = "%PYTHONBIN% ";
+#else
+ cmd = "python ";
+#endif
+ cmd += "-c \"";
+ cmd += "from medutilities import my_remove ; my_remove(r'" + medfilename + "')";
+ cmd += "\"";
+ system(cmd.c_str());
+ return result;
+}
+
//=============================================================================
/*!
* SMESH_Gen_i::CreateMeshFromSTL
// 3. Get elements to copy
- SMDS_ElemIteratorPtr srcElemIt;
+ SMDS_ElemIteratorPtr srcElemIt; SMDS_NodeIteratorPtr srcNodeIt;
TIDSortedElemSet srcElems;
SMESH::array_of_ElementType_var srcElemTypes = meshPart->GetTypes();
if ( SMESH::DownCast<SMESH_Mesh_i*>( meshPart ))
{
srcElemIt = srcMeshDS->elementsIterator();
+ srcNodeIt = srcMeshDS->nodesIterator();
}
else
{
}
}
+ // 4(b). Copy free nodes
+
+ if ( srcNodeIt && srcMeshDS->NbNodes() != newMeshDS->NbNodes() )
+ {
+ while ( srcNodeIt->more() )
+ {
+ nSrc = srcNodeIt->next();
+ if ( nSrc->NbInverseElements() == 0 )
+ {
+ if ( toKeepIDs )
+ nTgt = newMeshDS->AddNodeWithID( nSrc->X(), nSrc->Y(), nSrc->Z(), nSrc->GetID());
+ else
+ n2nMap[ nSrc ] = newMeshDS->AddNode( nSrc->X(), nSrc->Y(), nSrc->Z() );
+ }
+ }
+ }
+
// 5. Copy groups
int nbNewGroups = 0;
return false;
}
+ TPythonDump pd; // prevent dump during loading
+
DriverMED_R_SMESHDS_Mesh myReader;
myReader.SetFile( meshfile.ToCString() );
if ( !isMultiFile )
SALOMEDS_Tool::RemoveTemporaryFiles( tmpDir.ToCString(), aFileSeq.in(), true );
+ pd << ""; // prevent optimizing pd out
+
INFOS( "SMESH_Gen_i::Load completed" );
return true;
}