IMP 0019918: Re-open popup for imported shapes.

This commit is contained in:
jfa 2008-10-02 13:54:43 +00:00
parent 03a6d6ca45
commit ba274e7ad1
8 changed files with 141 additions and 10 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -22,6 +22,14 @@ Select the required file and click \b Open. Your file will be imported in
the module and its contents (geometrical object) will be displayed in the module and its contents (geometrical object) will be displayed in
the <b>Object Browser</b>. the <b>Object Browser</b>.
\note You can re-open ones imported shape from the initial file, if
the file has been changed on disk. Use for that item
<b>Reload From Disk</b> from context menu of imported
shape. Reloaded shape will have the same representation parameters
like before this operation.
\image html geomimport_reopen.png
\n <em>To export geometrical objects into a BREP, IGES, STEP \n <em>To export geometrical objects into a BREP, IGES, STEP
file:</em> file:</em>

View File

@ -792,6 +792,13 @@ module GEOM
GEOM_Object PositionShapeCopy (in GEOM_Object theObject, GEOM_Object PositionShapeCopy (in GEOM_Object theObject,
in GEOM_Object theStartLCS, in GEOM_Object theStartLCS,
in GEOM_Object theEndLCS); 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);
}; };
/*! /*!

View File

@ -2482,6 +2482,12 @@ msgstr "Edit"
msgid "STB_GROUP_EDIT" msgid "STB_GROUP_EDIT"
msgstr "Edit a group" msgstr "Edit a group"
msgid "MEN_RELOAD_IMPORTED"
msgstr "Reload From Disk"
msgid "STB_RELOAD_IMPORTED"
msgstr "Reload imported shape from its original place on disk"
msgid "MEN_BLOCKS" msgid "MEN_BLOCKS"
msgstr "Blocks" msgstr "Blocks"

View File

@ -71,6 +71,7 @@
#include <vtkCamera.h> #include <vtkCamera.h>
#include <vtkRenderer.h> #include <vtkRenderer.h>
#include "GEOMImpl_Types.hxx"
extern "C" { extern "C" {
Standard_EXPORT CAM_Module* createModule() { Standard_EXPORT CAM_Module* createModule() {
@ -488,7 +489,8 @@ void GeometryGUI::OnGUIEvent( int id )
id == 5025 || // MENU TRANSFORMATION - SCALE id == 5025 || // MENU TRANSFORMATION - SCALE
id == 5026 || // MENU TRANSFORMATION - OFFSET id == 5026 || // MENU TRANSFORMATION - OFFSET
id == 5027 || // MENU TRANSFORMATION - MULTI-TRANSLATION 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 #ifndef WNT
library = getLibrary( "libTransformationGUI.so" ); library = getLibrary( "libTransformationGUI.so" );
#else #else
@ -825,6 +827,7 @@ void GeometryGUI::initialize( CAM_Application* app )
createGeomAction( 5026, "OFFSET" ); createGeomAction( 5026, "OFFSET" );
createGeomAction( 5027, "MUL_TRANSLATION" ); createGeomAction( 5027, "MUL_TRANSLATION" );
createGeomAction( 5028, "MUL_ROTATION" ); createGeomAction( 5028, "MUL_ROTATION" );
createGeomAction( 5029, "RELOAD_IMPORTED" );
createGeomAction( 503, "PARTITION" ); createGeomAction( 503, "PARTITION" );
createGeomAction( 504, "ARCHIMEDE" ); createGeomAction( 504, "ARCHIMEDE" );
@ -1722,13 +1725,23 @@ void GeometryGUI::contextMenuPopup( const QString& client, QPopupMenu* menu, QSt
SalomeApp_Module::contextMenuPopup( client, menu, title ); SalomeApp_Module::contextMenuPopup( client, menu, title );
SALOME_ListIO lst; SALOME_ListIO lst;
getApp()->selectionMgr()->selectedObjects( lst ); getApp()->selectionMgr()->selectedObjects( lst );
if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
if (lst.Extent() == 1) {
Handle(SALOME_InteractiveObject) io = lst.First(); Handle(SALOME_InteractiveObject) io = lst.First();
SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() ); SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
_PTR(Study) study = appStudy->studyDS(); _PTR(Study) study = appStudy->studyDS();
_PTR(SObject) obj = study->FindObjectID( io->getEntry() ); _PTR(SObject) aSObj = study->FindObjectID(io->getEntry());
if ( obj ) if (aSObj) {
title = QString( obj->GetName().c_str() ); // 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)
action(5029)->addTo(menu);
}
} }
} }

View File

@ -1252,3 +1252,39 @@ GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::RotateThreePointsCopy
return GetObject(anObject); 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();
}

View File

@ -151,6 +151,7 @@ class GEOM_I_EXPORT GEOM_ITransformOperations_i :
GEOM::GEOM_Object_ptr thePoint1, GEOM::GEOM_Object_ptr thePoint1,
GEOM::GEOM_Object_ptr thePoint2); GEOM::GEOM_Object_ptr thePoint2);
GEOM::GEOM_Object_ptr RecomputeObject (GEOM::GEOM_Object_ptr theObject);
::GEOMImpl_ITransformOperations* GetOperations() { return (::GEOMImpl_ITransformOperations*)GetImpl(); } ::GEOMImpl_ITransformOperations* GetOperations() { return (::GEOMImpl_ITransformOperations*)GetImpl(); }
}; };

View File

@ -27,12 +27,18 @@
// $Header$ // $Header$
#include "TransformationGUI.h" #include "TransformationGUI.h"
#include <GEOMBase.h>
#include "GeometryGUI.h" #include "GeometryGUI.h"
#include "SUIT_Session.h" #include <SUIT_Session.h>
#include "SUIT_Desktop.h" #include <SUIT_Desktop.h>
#include <SUIT_ViewModel.h>
#include "SalomeApp_Application.h" #include <SUIT_ViewWindow.h>
#include <SUIT_ViewManager.h>
#include <LightApp_SelectionMgr.h>
#include <SalomeApp_Application.h>
#include <SalomeApp_Study.h>
#include "TransformationGUI_MultiTranslationDlg.h" // Method MULTI TRANSLATION #include "TransformationGUI_MultiTranslationDlg.h" // Method MULTI TRANSLATION
#include "TransformationGUI_MultiRotationDlg.h" // Method MULTI ROTATION #include "TransformationGUI_MultiRotationDlg.h" // Method MULTI ROTATION
@ -100,6 +106,60 @@ bool TransformationGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent)
case 5028: // MULTI ROTATION case 5028: // MULTI ROTATION
aDlg = new TransformationGUI_MultiRotationDlg( getGeometryGUI(), parent, "" ); aDlg = new TransformationGUI_MultiRotationDlg( getGeometryGUI(), parent, "" );
break; 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<SalomeApp_Study*>(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();
QPtrList<SUIT_ViewWindow> wnds = desk->windows();
SUIT_ViewWindow* wnd;
for ( wnd = wnds.first(); wnd; wnd = wnds.next() )
{
SUIT_ViewManager* vman = wnd->getViewManager();
if ( vman )
{
SUIT_ViewModel* vmodel = vman->getViewModel();
if ( vmodel )
{
SALOME_View* view = dynamic_cast<SALOME_View*>(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: default:
app->putInfo(tr("GEOM_PRP_COMMAND").arg(theCommandID)); app->putInfo(tr("GEOM_PRP_COMMAND").arg(theCommandID));
break; break;