Update of CheckDone

Removed the isDone argument using cxx isComputedOK instead (now in the
idl)
Corrected a bug when doing multiple compute checkCompute was not
properly removed.
This commit is contained in:
yoann.audouin 2024-03-21 15:25:31 +01:00
parent 127761db37
commit 6fe43e9346
7 changed files with 44 additions and 15 deletions

View File

@ -436,6 +436,12 @@ module SMESH
void RemoveGroupWithContents( in SMESH_GroupBase aGroup ) void RemoveGroupWithContents( in SMESH_GroupBase aGroup )
raises (SALOME::SALOME_Exception); raises (SALOME::SALOME_Exception);
/*!
* Return True if all the submeshes are computed
*/
boolean IsComputedOK()
raises (SALOME::SALOME_Exception);
/*! /*!
* Get the list of groups existing in the mesh * Get the list of groups existing in the mesh
*/ */

View File

@ -1016,7 +1016,7 @@ void _pyGen::Process( const Handle(_pyCommand)& theCommand )
// Concatenate( [mesh1, ...], ... ) // Concatenate( [mesh1, ...], ... )
// CreateHypothesis( theHypType, theLibName ) // CreateHypothesis( theHypType, theLibName )
// Compute( mesh, geom ) // Compute( mesh, geom )
// CheckCompute( mesh, isDone ) // CheckCompute( mesh )
// Evaluate( mesh, geom ) // Evaluate( mesh, geom )
// mesh creation // mesh creation
TCollection_AsciiString method = theCommand->GetMethod(); TCollection_AsciiString method = theCommand->GetMethod();
@ -1095,15 +1095,13 @@ void _pyGen::Process( const Handle(_pyCommand)& theCommand )
if ( id_mesh != myMeshes.end() ) { if ( id_mesh != myMeshes.end() ) {
theCommand->SetObject( meshID ); theCommand->SetObject( meshID );
theCommand->RemoveArgs(); theCommand->RemoveArgs();
std::cout << "command: " << theCommand->GetString() << std::endl;
id_mesh->second->Process( theCommand ); id_mesh->second->Process( theCommand );
id_mesh->second->AddProcessedCmd( theCommand ); id_mesh->second->AddProcessedCmd( theCommand );
std::cout << "command processed: " << theCommand->GetString() << std::endl;
return; return;
} }
} }
// smeshgen.CheckCompute( mesh, isDone ) --> mesh.CheckCompute(isDone) // smeshgen.CheckCompute( mesh ) --> mesh.CheckCompute()
if ( method == "CheckCompute" ) if ( method == "CheckCompute" )
{ {
const _pyID& meshID = theCommand->GetArg( 1 ); const _pyID& meshID = theCommand->GetArg( 1 );
@ -1111,7 +1109,6 @@ void _pyGen::Process( const Handle(_pyCommand)& theCommand )
if ( id_mesh != myMeshes.end() ) { if ( id_mesh != myMeshes.end() ) {
theCommand->SetObject( meshID ); theCommand->SetObject( meshID );
theCommand->RemoveArgs(); theCommand->RemoveArgs();
theCommand->SetArg(1, "isDone");
id_mesh->second->Process( theCommand ); id_mesh->second->Process( theCommand );
id_mesh->second->AddProcessedCmd( theCommand ); id_mesh->second->AddProcessedCmd( theCommand );
return; return;
@ -1928,6 +1925,31 @@ void _pyMesh::Process( const Handle(_pyCommand)& theCommand )
} }
Flush(); Flush();
} }
// in snapshot mode, clear the previous CheckCompute()
else if ( method == "CheckCompute" )
{
if ( !theGen->IsToKeepAllCommands() ) // !historical
{
if ( !myLastCheckCmd.IsNull() )
{
// check if the previously computed mesh has been edited,
// if so then we do not clear the previous Compute()
bool toClear = true;
list< Handle(_pyMeshEditor)>::iterator e = myEditors.begin();
for ( ; e != myEditors.end() && toClear; ++e )
{
list< Handle(_pyCommand)>& cmds = (*e)->GetProcessedCmds();
list< Handle(_pyCommand) >::reverse_iterator cmd = cmds.rbegin();
if ( cmd != cmds.rend() &&
(*cmd)->GetOrderNb() > myLastCheckCmd->GetOrderNb() )
toClear = false;
}
if ( toClear )
myLastCheckCmd->Clear();
}
myLastCheckCmd = theCommand;
}
}
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
else if ( method == "Clear" ) // in snapshot mode, clear all previous commands else if ( method == "Clear" ) // in snapshot mode, clear all previous commands
{ {

View File

@ -53,7 +53,7 @@
* The creation reason is that smeshBuilder.py commands defining hypotheses encapsulate * The creation reason is that smeshBuilder.py commands defining hypotheses encapsulate
* several SMESH engine method calls. As well, the dependencies between smeshBuilder.py * several SMESH engine method calls. As well, the dependencies between smeshBuilder.py
* classes differ from ones between corresponding SMESH IDL interfaces. * classes differ from ones between corresponding SMESH IDL interfaces.
* *
* Everything here is for internal usage by SMESH_2smeshpy::ConvertScript() * Everything here is for internal usage by SMESH_2smeshpy::ConvertScript()
* declared in SMESH_PythonDump.hxx * declared in SMESH_PythonDump.hxx
*/ */
@ -350,6 +350,7 @@ class _pyMesh: public _pyObject
std::list< Handle(_pyMesh) > myChildMeshes; // depending on me std::list< Handle(_pyMesh) > myChildMeshes; // depending on me
bool myGeomNotInStudy; bool myGeomNotInStudy;
Handle(_pyCommand) myLastComputeCmd; Handle(_pyCommand) myLastComputeCmd;
Handle(_pyCommand) myLastCheckCmd;
public: public:
_pyMesh(const Handle(_pyCommand) creationCmd); _pyMesh(const Handle(_pyCommand) creationCmd);
_pyMesh(const Handle(_pyCommand) theCreationCmd, const _pyID & id); _pyMesh(const Handle(_pyCommand) theCreationCmd, const _pyID & id);
@ -373,7 +374,7 @@ private:
DEFINE_STANDARD_RTTIEXT(_pyMesh,_pyObject) DEFINE_STANDARD_RTTIEXT(_pyMesh,_pyObject)
}; };
#undef _pyMesh_ACCESS_METHOD #undef _pyMesh_ACCESS_METHOD
// ------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------
/*! /*!

View File

@ -2080,7 +2080,7 @@ CORBA::Boolean SMESH_Gen_i::Compute( SMESH::SMESH_Mesh_ptr theMesh,
TPythonDump(this) << "isDone = " << this << ".Compute( " TPythonDump(this) << "isDone = " << this << ".Compute( "
<< theMesh << ", " << theShapeObject << ")"; << theMesh << ", " << theShapeObject << ")";
TPythonDump(this) << this << ".CheckCompute( " TPythonDump(this) << this << ".CheckCompute( "
<< theMesh << ", isDone" << ")"; << theMesh << ")";
try { try {
// get mesh servant // get mesh servant

View File

@ -5954,7 +5954,7 @@ void SMESH_Mesh_i::CreateGroupServants()
*/ */
//============================================================================= //=============================================================================
bool SMESH_Mesh_i::IsComputedOK() CORBA::Boolean SMESH_Mesh_i::IsComputedOK()
{ {
return _impl->IsComputedOK(); return _impl->IsComputedOK();
} }

View File

@ -424,15 +424,15 @@ public:
*/ */
void CreateGroupServants(); void CreateGroupServants();
/*!
* \brief Return true if all sub-meshes are computed OK - to update an icon
*/
bool IsComputedOK();
// ==================================== // ====================================
// SMESH_Mesh interface (continuation) // SMESH_Mesh interface (continuation)
// ==================================== // ====================================
/*!
* \brief Return true if all sub-meshes are computed OK - to update an icon
*/
CORBA::Boolean IsComputedOK();
/*! /*!
* \brief Return groups cantained in _mapGroups by their IDs * \brief Return groups cantained in _mapGroups by their IDs

View File

@ -2001,11 +2001,11 @@ class Mesh(metaclass = MeshMeta):
return ok return ok
def CheckCompute(self, isDone): def CheckCompute(self):
""" """
Check if the mesh was properly compute Check if the mesh was properly compute
""" """
if not isDone: if not self.mesh.IsComputedOK():
raise Exception("Could not compute {}".format(self.GetName())) raise Exception("Could not compute {}".format(self.GetName()))
def GetComputeErrors(self, shape=0 ): def GetComputeErrors(self, shape=0 ):