IMP 0019925 (Improve Precompute modes detection)

This commit is contained in:
ptv 2009-06-15 12:35:04 +00:00
parent bd5974724b
commit a351e17e75
5 changed files with 73 additions and 21 deletions

View File

@ -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

View File

@ -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 );
}
//================================================================================

View File

@ -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();

View File

@ -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 :

View File

@ -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;