mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-03-06 20:05:38 +05:00
IMP 0019925 (Improve Precompute modes detection)
This commit is contained in:
parent
bd5974724b
commit
a351e17e75
@ -3051,7 +3051,7 @@ void SMESHGUI::initialize( CAM_Application* app )
|
||||
|
||||
popupMgr()->insert( separator(), -1, 0 );
|
||||
createPopupItem( 701, OB, mesh, "&& isComputable" ); // COMPUTE
|
||||
createPopupItem( 711, OB, mesh, "&& isComputable" ); // PRECOMPUTE
|
||||
createPopupItem( 711, OB, mesh, "&& isComputable && isPreComputable" ); // PRECOMPUTE
|
||||
createPopupItem( 214, OB, mesh_group ); // UPDATE
|
||||
createPopupItem( 900, OB, mesh_group ); // ADV_INFO
|
||||
createPopupItem( 902, OB, mesh ); // STD_INFO
|
||||
|
@ -1617,7 +1617,7 @@ void SMESHGUI_PrecomputeOp::stopOperation()
|
||||
|
||||
//================================================================================
|
||||
/*!
|
||||
* \brief perform it's intention action: reinitialise dialog
|
||||
* \brief reinitialize dialog after operaiton become active again
|
||||
*/
|
||||
//================================================================================
|
||||
|
||||
@ -1628,16 +1628,48 @@ void SMESHGUI_PrecomputeOp::resumeOperation()
|
||||
SMESHGUI_BaseComputeOp::resumeOperation();
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
/*!
|
||||
* \brief perform it's intention action: reinitialise dialog
|
||||
*/
|
||||
//================================================================================
|
||||
|
||||
void SMESHGUI_PrecomputeOp::initDialog()
|
||||
{
|
||||
QList<int> modes;
|
||||
|
||||
QMap<int, int> modeMap;
|
||||
_PTR(SObject) pMesh = studyDS()->FindObjectID( myIObject->getEntry() );
|
||||
getAssignedAlgos( pMesh, modeMap );
|
||||
if ( modeMap.contains( SMESH::DIM_3D ) )
|
||||
{
|
||||
if ( modeMap.contains( SMESH::DIM_2D ) )
|
||||
modes.append( SMESH::DIM_2D );
|
||||
if ( modeMap.contains( SMESH::DIM_1D ) )
|
||||
modes.append( SMESH::DIM_1D );
|
||||
}
|
||||
else if ( modeMap.contains( SMESH::DIM_2D ) )
|
||||
{
|
||||
if ( modeMap.contains( SMESH::DIM_1D ) )
|
||||
modes.append( SMESH::DIM_1D );
|
||||
}
|
||||
|
||||
myDlg->setPreviewModes( modes );
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
/*!
|
||||
* \brief detect asigned mesh algorithms
|
||||
*/
|
||||
//================================================================================
|
||||
|
||||
void SMESHGUI_PrecomputeOp::getAssignedAlgos(_PTR(SObject) theMesh,
|
||||
QMap<int,int>& theModeMap)
|
||||
{
|
||||
_PTR(SObject) aHypRoot;
|
||||
_PTR(GenericAttribute) anAttr;
|
||||
int aPart = SMESH::Tag_RefOnAppliedAlgorithms;
|
||||
|
||||
_PTR(SObject) pMesh = studyDS()->FindObjectID( myIObject->getEntry() );
|
||||
if ( pMesh && pMesh->FindSubObject( aPart, aHypRoot ) )
|
||||
if ( theMesh && theMesh->FindSubObject( aPart, aHypRoot ) )
|
||||
{
|
||||
_PTR(ChildIterator) anIter =
|
||||
SMESH::GetActiveStudyDocument()->NewChildIterator( aHypRoot );
|
||||
@ -1655,28 +1687,22 @@ void SMESHGUI_PrecomputeOp::initDialog()
|
||||
CORBA::Object_var aVar = _CAST(SObject,anObj)->GetObject();
|
||||
if ( CORBA::is_nil( aVar ) )
|
||||
continue;
|
||||
|
||||
SMESH::SMESH_Algo_var algo = SMESH::SMESH_3D_Algo::_narrow( aVar );
|
||||
if ( !algo->_is_nil() )
|
||||
|
||||
for( int dim = SMESH::DIM_1D; dim <= SMESH::DIM_3D; dim++ )
|
||||
{
|
||||
modeMap[ SMESH::DIM_1D ] = 0;
|
||||
modeMap[ SMESH::DIM_2D ] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
algo = SMESH::SMESH_2D_Algo::_narrow( aVar );
|
||||
SMESH::SMESH_Algo_var algo;
|
||||
switch(dim) {
|
||||
case SMESH::DIM_1D: algo = SMESH::SMESH_1D_Algo::_narrow( aVar ); break;
|
||||
case SMESH::DIM_2D: algo = SMESH::SMESH_2D_Algo::_narrow( aVar ); break;
|
||||
case SMESH::DIM_3D: algo = SMESH::SMESH_3D_Algo::_narrow( aVar ); break;
|
||||
default: break;
|
||||
}
|
||||
if ( !algo->_is_nil() )
|
||||
modeMap[ SMESH::DIM_1D ] = 0;
|
||||
theModeMap[ dim ] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( modeMap.contains( SMESH::DIM_1D ) )
|
||||
modes.append( SMESH::DIM_1D );
|
||||
if ( modeMap.contains( SMESH::DIM_2D ) )
|
||||
modes.append( SMESH::DIM_2D );
|
||||
|
||||
myDlg->setPreviewModes( modes );
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
|
@ -136,6 +136,12 @@ public:
|
||||
|
||||
virtual LightApp_Dialog* dlg() const;
|
||||
|
||||
/**
|
||||
* \brief returns map of assigned algorithms modes
|
||||
*/
|
||||
static void getAssignedAlgos(_PTR(SObject) theMesh,
|
||||
QMap<int,int>& theModeMap);
|
||||
|
||||
protected:
|
||||
virtual void startOperation();
|
||||
virtual void stopOperation();
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include "SMESHGUI_Utils.h"
|
||||
#include "SMESHGUI_VTKUtils.h"
|
||||
#include "SMESHGUI_GEOMGenUtils.h"
|
||||
#include "SMESHGUI_ComputeDlg.h"
|
||||
|
||||
#include <SMESH_Type.h>
|
||||
#include <SMESH_Actor.h>
|
||||
@ -113,6 +114,7 @@ QVariant SMESHGUI_Selection::parameter( const int ind, const QString& p ) const
|
||||
else if ( p=="controlMode" ) val = QVariant( controlMode( ind ) );
|
||||
else if ( p=="displayMode" ) val = QVariant( displayMode( ind ) );
|
||||
else if ( p=="isComputable" ) val = QVariant( isComputable( ind ) );
|
||||
else if ( p=="isPreComputable" ) val = QVariant( isPreComputable( ind ) );
|
||||
else if ( p=="hasReference" ) val = QVariant( hasReference( ind ) );
|
||||
else if ( p=="isImported" ) val = QVariant( isImported( ind ) );
|
||||
else if ( p=="facesOrientationMode" ) val = QVariant( facesOrientationMode( ind ) );
|
||||
@ -384,6 +386,23 @@ QVariant SMESHGUI_Selection::isComputable( int ind ) const
|
||||
return QVariant( false );
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : isPreComputable
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
QVariant SMESHGUI_Selection::isPreComputable( int ind ) const
|
||||
{
|
||||
if ( ind >= 0 && ind < myTypes.count() && myTypes[ind] != "Unknown" )
|
||||
{
|
||||
QMap<int,int> modeMap;
|
||||
_PTR(SObject) pMesh = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() );
|
||||
SMESHGUI_PrecomputeOp::getAssignedAlgos( pMesh, modeMap );
|
||||
return QVariant( modeMap.size() > 1 );
|
||||
}
|
||||
return QVariant( false );
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : hasReference
|
||||
//purpose :
|
||||
|
@ -54,6 +54,7 @@ public:
|
||||
virtual bool isAutoColor( int ) const;
|
||||
virtual int numberOfNodes( int ) const;
|
||||
virtual QVariant isComputable( int ) const;
|
||||
virtual QVariant isPreComputable( int ) const;
|
||||
virtual QVariant hasReference( int ) const;
|
||||
virtual QVariant isVisible( int ) const;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user