case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
case GEOMOp::OpColor: // POPUP MENU - COLOR
case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
+ case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
+ case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
case GEOMOp::OpIsos: // POPUP MENU - ISOS
+ case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
+ case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
case GEOMOp::OpShowChildren: // POPUP MENU - SHOW CHILDREN
// function : createGeomAction
// purpose :
//=======================================================================
-void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel, const int accel, const bool toggle )
+void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
+ const int accel, const bool toggle, const QString& shortcutAction )
{
SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
accel,
application()->desktop(),
toggle,
- this, SLOT( OnGUIEvent() ) );
+ this, SLOT( OnGUIEvent() ),
+ shortcutAction );
}
//=======================================================================
-// function : createGeomAction
+// function : createOriginAndBaseVectors
// purpose :
//=======================================================================
void GeometryGUI::createOriginAndBaseVectors()
createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
+
+ // Create actions for increase/decrease transparency shortcuts
+ createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
+ "Geometry:Increase transparency");
+ createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
+ "Geometry:Decrease transparency");
+
+ // Create actions for increase/decrease number of isolines
+ createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
+ "Geometry:Increase number of isolines");
+ createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
+ "Geometry:Decrease number of isolines");
+
// createGeomAction( GEOMOp::OpPipeTShapeGroups, "PIPETSHAPEGROUPS" );
//@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@//
GEOMGUI* getLibrary( const QString& libraryName );
void createGeomAction( const int id, const QString& po_id,
const QString& icon_id = QString(""),
- const int key = 0, const bool toggle = false );
+ const int key = 0, const bool toggle = false,
+ const QString& shortcutAction = QString() );
void createPopupItem( const int, const QString& clients, const QString& types,
const bool isSingle = false, const int isVisible = -1,
const bool isExpandAll = false, const bool isOCC = false,
OpDeflection = 1200, // POPUP MENU - DEFLECTION COEFFICIENT
OpColor = 1201, // POPUP MENU - COLOR
OpTransparency = 1202, // POPUP MENU - TRANSPARENCY
- OpIsos = 1203, // POPUP MENU - ISOS
- OpAutoColor = 1204, // POPUP MENU - AUTO COLOR
- OpNoAutoColor = 1205, // POPUP MENU - DISABLE AUTO COLOR
- OpPointMarker = 1206, // POPUP MENU - POINT MARKER
+ OpIncrTransparency = 1203, // SHORTCUT - INCREASE TRANSPARENCY
+ OpDecrTransparency = 1204, // SHORTCUT - DECREASE TRANSPARENCY
+ OpIsos = 1205, // POPUP MENU - ISOS
+ OpIncrNbIsos = 1206, // SHORTCUT - INCREASE NB ISOS
+ OpDecrNbIsos = 1207, // SHORTCUT - DECREASE NB ISOS
+ OpAutoColor = 1208, // POPUP MENU - AUTO COLOR
+ OpNoAutoColor = 1209, // POPUP MENU - DISABLE AUTO COLOR
+ OpPointMarker = 1210, // POPUP MENU - POINT MARKER
OpShowChildren = 1250, // POPUP MENU - SHOW CHILDREN
OpHideChildren = 1251, // POPUP MENU - HIDE CHILDREN
OpRename = 1252, // POPUP MENU - RENAME
case GEOMOp::OpTransparency: // POPUP - TRANSPARENCY
OnTransparency();
break;
+ case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
+ OnChangeTransparency( true );
+ break;
+ case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
+ OnChangeTransparency( false );
+ break;
case GEOMOp::OpIsos: // POPUP - ISOS
OnNbIsos();
break;
+ case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOLINES
+ OnNbIsos( INCR );
+ break;
+ case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOLINES
+ OnNbIsos( DECR );
+ break;
case GEOMOp::OpAutoColor: // POPUP - AUTO COLOR
OnAutoColor();
break;
bool OnGUIEvent( int, SUIT_Desktop* );
virtual void deactivate();
+ enum ActionType { SHOWDLG, INCR, DECR };
+
private:
// Import and export topology methods
bool Import();
void OnDisableAutoColor();
void OnColor();
void OnTransparency();
- void OnNbIsos();
+ void OnNbIsos( ActionType actionType = SHOWDLG );
void OnDeflection();
void OnSelectOnly(int mode);
void OnShowHideChildren( bool );
void OnPointMarker();
+ // Shortcut commands
+ void OnChangeTransparency( bool );
+
// Recursive deletion of object with children
void removeObjectWithChildren( _PTR(SObject),
_PTR(Study),
dlg.exec();
}
-void GEOMToolsGUI::OnNbIsos()
+void GEOMToolsGUI::OnChangeTransparency( bool increase )
+{
+ SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
+ if ( !app )
+ return;
+ LightApp_SelectionMgr* aSelMgr = app->selectionMgr();
+ if ( !aSelMgr )
+ return;
+ SALOME_ListIO selected;
+ aSelMgr->selectedObjects( selected );
+ if ( selected.IsEmpty() )
+ return;
+
+ Handle(SALOME_InteractiveObject) FirstIOS = selected.First();
+ if ( FirstIOS.IsNull() )
+ return;
+
+ // Delta
+ float delta = 0.01;
+ if ( !increase )
+ delta *= -1;
+
+ SUIT_ViewWindow* window = app->desktop()->activeWindow();
+ bool isOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
+ bool isVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
+
+ if ( isVTK ) {
+ SVTK_ViewWindow* vtkVW = dynamic_cast<SVTK_ViewWindow*>( window );
+ if ( !vtkVW )
+ return;
+ SVTK_View* aView = vtkVW->getView();
+
+ float transp = aView->GetTransparency(FirstIOS);
+
+ // Compute new transparency value
+ transp = transp + delta;
+ if ( transp < 0 )
+ transp = 0;
+ else if ( transp > 1 )
+ transp = 1;
+
+ for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
+ aView->SetTransparency( It.Value(), transp );
+ }
+ aView->Repaint();
+ } // if ( isVTK )
+
+ else if ( isOCC ) {
+ GEOMBase* gb = new GEOMBase();
+ Standard_Boolean found;
+ Handle(GEOM_AISShape) aisShape;
+
+ aisShape = gb->ConvertIOinGEOMAISShape( FirstIOS, found );
+ if( !found )
+ return;
+ float transp = aisShape->Transparency();
+
+ // Compute new transparency value
+ transp = transp + delta;
+ if ( transp < 0 )
+ transp = 0;
+ else if ( transp > 1 )
+ transp = 1;
+
+ OCCViewer_Viewer* vm = dynamic_cast<OCCViewer_Viewer*>( window->getViewManager()->getViewModel() );
+ if ( !vm )
+ return;
+ Handle(AIS_InteractiveContext) ic = vm->getAISContext();
+ for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
+ aisShape = gb->ConvertIOinGEOMAISShape( It.Value(), found );
+ if ( found ) {
+ ic->SetTransparency( aisShape, transp, false );
+ ic->Redisplay( aisShape, Standard_False, Standard_True );
+ }
+ } // for...
+ ic->UpdateCurrentViewer();
+ } // if ( isOCC )
+}
+
+void GEOMToolsGUI::OnNbIsos( ActionType actionType )
{
SUIT_ViewWindow* window = SUIT_Session::session()->activeApplication()->desktop()->activeWindow();
int UIso = CurDrawer->UIsoAspect()->Number();
int VIso = CurDrawer->VIsoAspect()->Number();
- GEOMToolsGUI_NbIsosDlg * NbIsosDlg =
- new GEOMToolsGUI_NbIsosDlg( SUIT_Session::session()->activeApplication()->desktop() );
+ int newNbUIso = -1;
+ int newNbVIso = -1;
- NbIsosDlg->setU( UIso );
- NbIsosDlg->setV( VIso );
+ if ( actionType == SHOWDLG ) {
+ GEOMToolsGUI_NbIsosDlg * NbIsosDlg =
+ new GEOMToolsGUI_NbIsosDlg( SUIT_Session::session()->activeApplication()->desktop() );
- if ( NbIsosDlg->exec() ) {
- SUIT_OverrideCursor();
- for(; ic->MoreCurrent(); ic->NextCurrent()) {
- CurObject = Handle(GEOM_AISShape)::DownCast(ic->Current());
- Handle(AIS_Drawer) CurDrawer = CurObject->Attributes();
+ NbIsosDlg->setU( UIso );
+ NbIsosDlg->setV( VIso );
- int nbUIso = NbIsosDlg->getU();
- int nbVIso = NbIsosDlg->getV();
-
- CurDrawer->SetUIsoAspect( new Prs3d_IsoAspect(Quantity_NOC_GRAY75, Aspect_TOL_SOLID, 0.5 , nbUIso) );
- CurDrawer->SetVIsoAspect( new Prs3d_IsoAspect(Quantity_NOC_GRAY75, Aspect_TOL_SOLID, 0.5 , nbVIso) );
+ if ( NbIsosDlg->exec() ) {
+ SUIT_OverrideCursor();
+
+ newNbUIso = NbIsosDlg->getU();
+ newNbVIso = NbIsosDlg->getV();
+ }
+ }
+ else if ( actionType == INCR || actionType == DECR ) {
+ int delta = 1;
+ if (actionType == DECR)
+ delta = -1;
+
+ newNbUIso = UIso + delta;
+ newNbVIso = VIso + delta;
+
+ if ( newNbUIso < 0 || newNbVIso < 0 || newNbUIso > 99 || newNbVIso > 99 )
+ return;
+ }
- ic->SetLocalAttributes(CurObject, CurDrawer);
- ic->Redisplay(CurObject);
- }
+ for(; ic->MoreCurrent(); ic->NextCurrent()) {
+ CurObject = Handle(GEOM_AISShape)::DownCast(ic->Current());
+ Handle(AIS_Drawer) CurDrawer = CurObject->Attributes();
+
+ CurDrawer->SetUIsoAspect( new Prs3d_IsoAspect(Quantity_NOC_GRAY75, Aspect_TOL_SOLID, 0.5 , newNbUIso) );
+ CurDrawer->SetVIsoAspect( new Prs3d_IsoAspect(Quantity_NOC_GRAY75, Aspect_TOL_SOLID, 0.5 , newNbVIso) );
+
+ ic->SetLocalAttributes(CurObject, CurDrawer);
+ ic->Redisplay(CurObject);
}
}
}
anActor->GetNbIsos(UIso,VIso);
else
return;
+
+ int newNbUIso = -1;
+ int newNbVIso = -1;
- GEOMToolsGUI_NbIsosDlg* NbIsosDlg =
- new GEOMToolsGUI_NbIsosDlg( SUIT_Session::session()->activeApplication()->desktop() );
+ if ( actionType == SHOWDLG ) {
+ GEOMToolsGUI_NbIsosDlg* NbIsosDlg =
+ new GEOMToolsGUI_NbIsosDlg( SUIT_Session::session()->activeApplication()->desktop() );
- NbIsosDlg->setU( UIso );
- NbIsosDlg->setV( VIso );
+ NbIsosDlg->setU( UIso );
+ NbIsosDlg->setV( VIso );
- if ( NbIsosDlg->exec() ) {
- SUIT_OverrideCursor();
+ if ( NbIsosDlg->exec() ) {
+ SUIT_OverrideCursor();
- while( anAct!=NULL ) {
- if(GEOM_Actor* anActor = GEOM_Actor::SafeDownCast(anAct)){
- // There are no casting to needed actor.
- UIso = NbIsosDlg->getU();
- VIso = NbIsosDlg->getV();
- int aIsos[2]={UIso,VIso};
- anActor->SetNbIsos(aIsos);
- }
- anAct = aCollection->GetNextActor();
+ newNbUIso = NbIsosDlg->getU();
+ newNbVIso = NbIsosDlg->getV();
+ }
+ }
+ else if ( actionType == INCR || actionType == DECR ) {
+ int delta = 1;
+ if (actionType == DECR)
+ delta = -1;
+
+ newNbUIso = UIso + delta;
+ newNbVIso = VIso + delta;
+
+ if ( newNbUIso < 0 || newNbVIso < 0 || newNbUIso > 99 || newNbVIso > 99 )
+ return;
+ }
+
+ while( anAct!=NULL ) {
+ if(GEOM_Actor* anActor = GEOM_Actor::SafeDownCast(anAct)){
+ // There are no casting to needed actor.
+ int aIsos[2]={newNbUIso,newNbVIso};
+ anActor->SetNbIsos(aIsos);
}
+ anAct = aCollection->GetNextActor();
}
+ view->Repaint();
} // end vtkviewer
}