From 7989a2ef27ffbfb20a244f45c8486054344da73c Mon Sep 17 00:00:00 2001 From: jfa Date: Thu, 2 Oct 2008 12:00:07 +0000 Subject: [PATCH] IMP 0019918: Re-open popup for imported shapes. --- idl/GEOM_Gen.idl | 7 +++ src/GEOMGUI/GEOM_msg_en.ts | 8 +++ src/GEOMGUI/GeometryGUI.cxx | 36 ++++++++---- src/GEOM_I/GEOM_ITransformOperations_i.cc | 36 ++++++++++++ src/GEOM_I/GEOM_ITransformOperations_i.hh | 2 + src/TransformationGUI/TransformationGUI.cxx | 61 +++++++++++++++++++++ 6 files changed, 140 insertions(+), 10 deletions(-) diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl index 0cf8d8573..4f9afd0df 100644 --- a/idl/GEOM_Gen.idl +++ b/idl/GEOM_Gen.idl @@ -792,6 +792,13 @@ module GEOM GEOM_Object PositionShapeCopy (in GEOM_Object theObject, in GEOM_Object theStartLCS, in GEOM_Object theEndLCS); + + /*! + * Recompute the shape from its arguments. + * \param theObject The object to be recomputed. + * \return theObject. + */ + GEOM_Object RecomputeObject (in GEOM_Object theObject); }; /*! diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index df5b31147..3fc23f1b1 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -2088,6 +2088,10 @@ Please, select face, shell or solid and try again MEN_GROUP_EDIT Edit + + MEN_RELOAD_IMPORTED + Reload From Disk + MEN_HEX_SOLID Hexahedral Solid @@ -2620,6 +2624,10 @@ Please, select face, shell or solid and try again STB_GROUP_EDIT Edit a group + + STB_RELOAD_IMPORTED + Reload imported shape from its original place on disk + STB_HEX_SOLID Hexahedral Solid diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index 3fdf39984..d95a7d465 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -66,6 +66,7 @@ #include // External includes +#include #include #include #include @@ -85,6 +86,8 @@ #include #include +#include "GEOMImpl_Types.hxx" + using namespace Qt; extern "C" { @@ -474,7 +477,8 @@ void GeometryGUI::OnGUIEvent( int id ) id == 5025 || // MENU TRANSFORMATION - SCALE id == 5026 || // MENU TRANSFORMATION - OFFSET id == 5027 || // MENU TRANSFORMATION - MULTI-TRANSLATION - id == 5028 ) { // MENU TRANSFORMATION - MULTI-ROTATION + id == 5028 || // MENU TRANSFORMATION - MULTI-ROTATION + id == 5029 ) { // CONTEXT(POPUP) MENU - RELOAD_IMPORTED #ifndef WNT library = getLibrary( "libTransformationGUI.so" ); #else @@ -522,7 +526,7 @@ void GeometryGUI::OnGUIEvent( int id ) id == 706 || // MENU MEASURE - WHATIS id == 707 || // MENU MEASURE - CHECK id == 7072 || // MENU MEASURE - CHECK COMPOUND OF BLOCKS - id == 708 ) { // MENU MEASURE - POINT COORDINATES + id == 708 ) { // MENU MEASURE - POINT COORDINATES #ifndef WNT library = getLibrary( "libMeasureGUI.so" ); #else @@ -542,7 +546,7 @@ void GeometryGUI::OnGUIEvent( int id ) id == 9998 || // MENU BLOCKS - MULTI-TRANSFORMATION id == 9997 || // MENU BLOCKS - QUADRANGLE FACE id == 99991 || // MENU BLOCKS - PROPAGATE - id == 9995 ) { // MENU BLOCKS - EXPLODE ON BLOCKS + id == 9995 ) { // MENU BLOCKS - EXPLODE ON BLOCKS #ifndef WNT library = getLibrary( "libBlocksGUI.so" ); #else @@ -787,6 +791,8 @@ void GeometryGUI::initialize( CAM_Application* app ) createGeomAction( 800, "GROUP_CREATE" ); createGeomAction( 801, "GROUP_EDIT" ); + createGeomAction( 5029, "RELOAD_IMPORTED" ); + createGeomAction( 9997, "Q_FACE" ); createGeomAction( 9999, "HEX_SOLID" ); @@ -1426,16 +1432,26 @@ LightApp_Selection* GeometryGUI::createSelection() const void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title ) { - SalomeApp_Module::contextMenuPopup( client, menu, title ); + SalomeApp_Module::contextMenuPopup(client, menu, title); SALOME_ListIO lst; - getApp()->selectionMgr()->selectedObjects( lst ); - if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) { + getApp()->selectionMgr()->selectedObjects(lst); + + if (lst.Extent() == 1) { Handle(SALOME_InteractiveObject) io = lst.First(); - SalomeApp_Study* appStudy = dynamic_cast( application()->activeStudy() ); + SalomeApp_Study* appStudy = dynamic_cast(application()->activeStudy()); _PTR(Study) study = appStudy->studyDS(); - _PTR(SObject) obj = study->FindObjectID( io->getEntry() ); - if ( obj ) - title = QString( obj->GetName().c_str() ); + _PTR(SObject) aSObj = study->FindObjectID(io->getEntry()); + if (aSObj) { + // Set context menu title + if (client == "OCCViewer" || client == "VTKViewer") + title = QString(aSObj->GetName().c_str()); + + // Reload imported shape + CORBA::Object_var anObj = GeometryGUI::ClientSObjectToObject(aSObj); + GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(anObj); + if (!CORBA::is_nil(aGeomObj) && aGeomObj->GetType() == GEOM_IMPORT) + menu->addAction(action(5029)); + } } } diff --git a/src/GEOM_I/GEOM_ITransformOperations_i.cc b/src/GEOM_I/GEOM_ITransformOperations_i.cc index 1dff38932..338e901eb 100644 --- a/src/GEOM_I/GEOM_ITransformOperations_i.cc +++ b/src/GEOM_I/GEOM_ITransformOperations_i.cc @@ -1252,3 +1252,39 @@ GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::RotateThreePointsCopy return GetObject(anObject); } + +//============================================================================= +/*! + * RecomputeObject + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::RecomputeObject + (GEOM::GEOM_Object_ptr theObject) +{ + //Set a not done flag + GetOperations()->SetNotDone(); + GEOM::GEOM_Object_var aGEOMObject; + + if (theObject == NULL) return aGEOMObject._retn(); + + //check if the object is a subshape + //if (!theObject->IsMainShape()) { + // GetOperations()->SetErrorCode(SUBSHAPE_ERROR); + // return aGEOMObject._retn(); + //} + + aGEOMObject = GEOM::GEOM_Object::_duplicate(theObject); + + //Get the object itself + CORBA::String_var anEntry = theObject->GetEntry(); + Handle(GEOM_Object) anObject = + GetOperations()->GetEngine()->GetObject(theObject->GetStudyID(), anEntry); + if (anObject.IsNull()) return aGEOMObject._retn(); + + //Perform the recomputation + Handle(GEOM_Function) aLastFunction = anObject->GetLastFunction(); + if (aLastFunction.IsNull()) return aGEOMObject._retn(); + GetOperations()->GetSolver()->ComputeFunction(aLastFunction); + + return aGEOMObject._retn(); +} diff --git a/src/GEOM_I/GEOM_ITransformOperations_i.hh b/src/GEOM_I/GEOM_ITransformOperations_i.hh index 848e5077b..aed462a00 100644 --- a/src/GEOM_I/GEOM_ITransformOperations_i.hh +++ b/src/GEOM_I/GEOM_ITransformOperations_i.hh @@ -151,6 +151,8 @@ class GEOM_I_EXPORT GEOM_ITransformOperations_i : GEOM::GEOM_Object_ptr thePoint1, GEOM::GEOM_Object_ptr thePoint2); + GEOM::GEOM_Object_ptr RecomputeObject (GEOM::GEOM_Object_ptr theObject); + ::GEOMImpl_ITransformOperations* GetOperations() { return (::GEOMImpl_ITransformOperations*)GetImpl(); } }; diff --git a/src/TransformationGUI/TransformationGUI.cxx b/src/TransformationGUI/TransformationGUI.cxx index 917f18b75..cd3a8f5f4 100644 --- a/src/TransformationGUI/TransformationGUI.cxx +++ b/src/TransformationGUI/TransformationGUI.cxx @@ -25,10 +25,16 @@ #include "TransformationGUI.h" +#include #include #include +#include +#include +#include +#include #include +#include #include "TransformationGUI_MultiTranslationDlg.h" // Method MULTI TRANSLATION #include "TransformationGUI_MultiRotationDlg.h" // Method MULTI ROTATION @@ -94,6 +100,61 @@ bool TransformationGUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent ) case 5028: // MULTI ROTATION aDlg = new TransformationGUI_MultiRotationDlg( getGeometryGUI(), parent ); break; + case 5029: // RELOAD IMPORTED SHAPE + { + LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); + SALOME_ListIO aSelList; + aSelMgr->selectedObjects(aSelList); + if (aSelList.Extent() == 1) { + Standard_Boolean testResult = Standard_False; + GEOM::GEOM_Object_var aGeomObj = + GEOMBase::ConvertIOinGEOMObject(aSelList.First(), testResult); + if (testResult) { + SalomeApp_Study* anAppStudy = dynamic_cast(app->activeStudy()); + GEOM::GEOM_ITransformOperations_var anOp = + GeometryGUI::GetGeomGen()->GetITransformOperations(anAppStudy->id()); + if (!anOp->_is_nil()) { + anOp->RecomputeObject(aGeomObj); + GEOM_Displayer aDisp (anAppStudy); + //aDisp.Redisplay(aSelList.First()); + //aDisp.Display(aSelList.First()); + Handle(SALOME_InteractiveObject) theIO = aSelList.First(); + SUIT_Desktop* desk = app->desktop(); + QList wnds = desk->windows(); + SUIT_ViewWindow* wnd; + QListIterator it( wnds ); + while ( it.hasNext() && (wnd = it.next()) ) + { + SUIT_ViewManager* vman = wnd->getViewManager(); + if ( vman ) + { + SUIT_ViewModel* vmodel = vman->getViewModel(); + if ( vmodel ) + { + SALOME_View* view = dynamic_cast(vmodel); + if ( view ) + { + //if (view->isVisible(theIO) || view == GetActiveView()) + if (view->isVisible(theIO)) + { + //SALOME_Prs* prs = view->CreatePrs( theIO->getEntry() ); + //if ( prs ) { + // prs->Update(&aDisp); + // view->Repaint(); + //} + aDisp.Erase(theIO, false, false, view); + aDisp.Display(theIO, true, view); + } + } + } + } + } + // ? Redisplay subshapes ? + } + } + } + } + break; default: app->putInfo( tr( "GEOM_PRP_COMMAND" ).arg( theCommandID ) ); break;