Fix for the 21110: EDF 1714 GEOM: Low efficiency of the explode compared with "create a vertex on curve" issue.

This commit is contained in:
rnv 2012-05-18 13:27:44 +00:00
parent 4830ecf8d1
commit d5971b8b43
3 changed files with 53 additions and 38 deletions

View File

@ -259,8 +259,10 @@ bool EntityGUI_SubShapeDlg::ClickOnApply()
return false; /* aborted */ return false; /* aborted */
} }
} }
bool isOk = onAccept(); setIsDisableBrowsing( true );
bool isOk = onAccept( true, true, false );
setIsDisableBrowsing( false );
// restore selection, corresponding to current selection mode // restore selection, corresponding to current selection mode
SubShapeToggled(); SubShapeToggled();
@ -667,7 +669,10 @@ int EntityGUI_SubShapeDlg::getSelectedSubshapes (TColStd_IndexedMapOfInteger& th
//================================================================================= //=================================================================================
void EntityGUI_SubShapeDlg::activateSelection() void EntityGUI_SubShapeDlg::activateSelection()
{ {
erasePreview(false); bool isApply = ((QPushButton*)sender() == buttonApply());
if(!isApply)
erasePreview(false);
// local selection // local selection
if (!myObject->_is_nil() && !isAllSubShapes()) if (!myObject->_is_nil() && !isAllSubShapes())
@ -692,44 +697,46 @@ void EntityGUI_SubShapeDlg::activateSelection()
} }
} }
int prevDisplayMode = aDisplayer->SetDisplayMode(0); if(!isApply) {
int prevDisplayMode = aDisplayer->SetDisplayMode(0);
SUIT_ViewWindow* aViewWindow = 0; SUIT_ViewWindow* aViewWindow = 0;
SUIT_Study* activeStudy = SUIT_Session::session()->activeApplication()->activeStudy(); SUIT_Study* activeStudy = SUIT_Session::session()->activeApplication()->activeStudy();
if (activeStudy) if (activeStudy)
aViewWindow = SUIT_Session::session()->activeApplication()->desktop()->activeWindow(); aViewWindow = SUIT_Session::session()->activeApplication()->desktop()->activeWindow();
if (aViewWindow == 0) return; if (aViewWindow == 0) return;
SUIT_ViewManager* aViewManager = aViewWindow->getViewManager(); SUIT_ViewManager* aViewManager = aViewWindow->getViewManager();
if (aViewManager->getType() != OCCViewer_Viewer::Type() && if (aViewManager->getType() != OCCViewer_Viewer::Type() &&
aViewManager->getType() != SVTK_Viewer::Type()) aViewManager->getType() != SVTK_Viewer::Type())
return; return;
SUIT_ViewModel* aViewModel = aViewManager->getViewModel(); SUIT_ViewModel* aViewModel = aViewManager->getViewModel();
SALOME_View* aView = dynamic_cast<SALOME_View*>(aViewModel); SALOME_View* aView = dynamic_cast<SALOME_View*>(aViewModel);
if (aView == 0) return; if (aView == 0) return;
//TopoDS_Shape aMainShape = GEOM_Client::get_client().GetShape(GeometryGUI::GetGeomGen(), myObject); //TopoDS_Shape aMainShape = GEOM_Client::get_client().GetShape(GeometryGUI::GetGeomGen(), myObject);
TopTools_IndexedMapOfShape aSubShapesMap; TopTools_IndexedMapOfShape aSubShapesMap;
TopExp::MapShapes(myShape, aSubShapesMap); TopExp::MapShapes(myShape, aSubShapesMap);
CORBA::String_var aMainEntry = myObject->GetStudyEntry(); CORBA::String_var aMainEntry = myObject->GetStudyEntry();
QString anEntryBase = aMainEntry.in(); QString anEntryBase = aMainEntry.in();
TopExp_Explorer anExp (myShape, (TopAbs_ShapeEnum)shapeType()); TopExp_Explorer anExp (myShape, (TopAbs_ShapeEnum)shapeType());
for (; anExp.More(); anExp.Next()) for (; anExp.More(); anExp.Next())
{ {
TopoDS_Shape aSubShape = anExp.Current(); TopoDS_Shape aSubShape = anExp.Current();
int index = aSubShapesMap.FindIndex(aSubShape); int index = aSubShapesMap.FindIndex(aSubShape);
QString anEntry = anEntryBase + QString("_%1").arg(index); QString anEntry = anEntryBase + QString("_%1").arg(index);
SALOME_Prs* aPrs = aDisplayer->buildSubshapePresentation(aSubShape, anEntry, aView); SALOME_Prs* aPrs = aDisplayer->buildSubshapePresentation(aSubShape, anEntry, aView);
if (aPrs) { if (aPrs) {
displayPreview(aPrs, true, false); // append, do not update displayPreview(aPrs, true, false); // append, do not update
}
} }
aDisplayer->UpdateViewer();
aDisplayer->SetDisplayMode(prevDisplayMode);
} }
aDisplayer->UpdateViewer();
aDisplayer->SetDisplayMode(prevDisplayMode);
} }
globalSelection(GEOM_ALLSHAPES); globalSelection(GEOM_ALLSHAPES);

View File

@ -89,7 +89,8 @@ GEOM::GEOM_Gen_ptr GEOMBase_Helper::getGeomEngine()
//================================================================ //================================================================
GEOMBase_Helper::GEOMBase_Helper( SUIT_Desktop* desktop ) GEOMBase_Helper::GEOMBase_Helper( SUIT_Desktop* desktop )
: myDesktop( desktop ), myViewWindow( 0 ), myDisplayer( 0 ), myCommand( 0 ), isPreview( false ), : myDesktop( desktop ), myViewWindow( 0 ), myDisplayer( 0 ), myCommand( 0 ), isPreview( false ),
myIsApplyAndClose( false ), myIsOptimizedBrowsing( false ), myIsWaitCursorEnabled( true ) myIsApplyAndClose( false ), myIsOptimizedBrowsing( false ), myIsWaitCursorEnabled( true ),
myIsDisableBrowsing(false)
{ {
} }
@ -812,7 +813,7 @@ bool GEOMBase_Helper::checkViewWindow()
// It perfroms user input validation, then it // It perfroms user input validation, then it
// performs a proper operation and manages transactions, etc. // performs a proper operation and manages transactions, etc.
//================================================================ //================================================================
bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction ) bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction, bool erasePreviewFlag )
{ {
SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() ); SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
if ( !appStudy ) if ( !appStudy )
@ -837,8 +838,9 @@ bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction )
showError( msg ); showError( msg );
return false; return false;
} }
erasePreview( false ); if(erasePreviewFlag)
erasePreview( false );
bool result = false; bool result = false;
@ -899,7 +901,8 @@ bool GEOMBase_Helper::onAccept( const bool publish, const bool useTransaction )
commitCommand(); commitCommand();
updateObjBrowser(); updateObjBrowser();
if( SUIT_Application* anApp = SUIT_Session::session()->activeApplication() ) { if( SUIT_Application* anApp = SUIT_Session::session()->activeApplication() ) {
if( LightApp_Application* aLightApp = dynamic_cast<LightApp_Application*>( anApp ) ) LightApp_Application* aLightApp = dynamic_cast<LightApp_Application*>( anApp );
if(aLightApp && !isDisableBrowsing() )
aLightApp->browseObjects( anEntryList, isApplyAndClose(), isOptimizedBrowsing() ); aLightApp->browseObjects( anEntryList, isApplyAndClose(), isOptimizedBrowsing() );
anApp->putInfo( QObject::tr("GEOM_PRP_DONE") ); anApp->putInfo( QObject::tr("GEOM_PRP_DONE") );
} }

View File

@ -117,7 +117,7 @@ protected:
SalomeApp_Study* getStudy () const; SalomeApp_Study* getStudy () const;
bool checkViewWindow (); bool checkViewWindow ();
bool onAccept( const bool publish = true, const bool useTransaction = true ); bool onAccept( const bool publish = true, const bool useTransaction = true, bool erasePreviewFlag = true);
// This method should be called from "OK" button handler. // This method should be called from "OK" button handler.
// <publish> == true means that objects returned by execute() // <publish> == true means that objects returned by execute()
// should be published in a study. // should be published in a study.
@ -190,6 +190,9 @@ protected:
virtual void setIsWaitCursorEnabled( const bool theFlag ) {myIsWaitCursorEnabled = theFlag;} virtual void setIsWaitCursorEnabled( const bool theFlag ) {myIsWaitCursorEnabled = theFlag;}
virtual bool isWaitCursorEnabled() const {return myIsWaitCursorEnabled ;} virtual bool isWaitCursorEnabled() const {return myIsWaitCursorEnabled ;}
virtual void setIsDisableBrowsing( const bool theFlag ) { myIsDisableBrowsing = theFlag; }
virtual bool isDisableBrowsing() const { return myIsDisableBrowsing; }
private: private:
QString getEntry( GEOM::GEOM_Object_ptr ) const; QString getEntry( GEOM::GEOM_Object_ptr ) const;
@ -210,6 +213,8 @@ private:
bool myIsApplyAndClose; bool myIsApplyAndClose;
bool myIsOptimizedBrowsing; bool myIsOptimizedBrowsing;
bool myIsWaitCursorEnabled; bool myIsWaitCursorEnabled;
bool myIsDisableBrowsing; //This flag enable/disable selection
//in the Object Browser newly created objects.
}; };