2010-04-21 14:08:27 +06:00
// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
2003-07-09 20:33:44 +06:00
//
2009-02-13 17:16:39 +05:00
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
2004-12-01 15:39:14 +05:00
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
2008-03-07 12:45:34 +05:00
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
2003-07-09 20:33:44 +06:00
//
2010-04-21 14:08:27 +06:00
2009-02-13 17:16:39 +05:00
// GEOM GEOMGUI : GUI for Geometry component
// File : GeometryGUI.cxx
// Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
2003-07-09 20:33:44 +06:00
//
2010-04-19 21:13:46 +06:00
# include <Standard_math.hxx> // E.A. must be included before Python.h to fix compilation on windows
2010-04-12 13:09:08 +06:00
# include "Python.h"
2003-05-12 21:24:23 +06:00
# include "GeometryGUI.h"
2010-03-01 00:53:08 +05:00
# include "GeometryGUI_Operations.h"
2005-06-02 13:17:09 +06:00
# include "GEOMGUI_OCCSelector.h"
# include "GEOMGUI_Selection.h"
2005-09-27 12:32:15 +06:00
# include "GEOM_Displayer.h"
2009-02-13 17:16:39 +05:00
# include "GEOM_AISShape.hxx"
# include "GEOM_Actor.h"
2005-06-02 13:17:09 +06:00
2009-02-13 17:16:39 +05:00
# include <SUIT_Desktop.h>
2005-06-02 13:17:09 +06:00
# include <SUIT_MessageBox.h>
# include <SUIT_ResourceMgr.h>
# include <SUIT_Session.h>
# include <SUIT_ViewManager.h>
# include <OCCViewer_ViewWindow.h>
# include <OCCViewer_ViewPort3d.h>
# include <OCCViewer_ViewModel.h>
# include <OCCViewer_ViewManager.h>
2009-02-13 17:16:39 +05:00
# include <SOCC_ViewModel.h>
# include <SOCC_ViewWindow.h>
2005-10-05 12:28:23 +06:00
# include <SVTK_ViewWindow.h>
2005-06-02 13:17:09 +06:00
# include <SVTK_RenderWindowInteractor.h>
# include <SVTK_InteractorStyle.h>
# include <SVTK_ViewModel.h>
# include <SalomeApp_Application.h>
2009-02-13 17:16:39 +05:00
# include <SalomeApp_Study.h>
2005-11-03 13:30:14 +05:00
# include <LightApp_SelectionMgr.h>
# include <LightApp_VTKSelector.h>
2009-02-13 17:16:39 +05:00
# include <LightApp_DataObject.h>
2005-11-03 13:30:14 +05:00
# include <LightApp_Preferences.h>
2009-02-13 17:16:39 +05:00
2005-06-02 13:17:09 +06:00
# include <SALOME_LifeCycleCORBA.hxx>
2005-06-03 16:41:52 +06:00
# include <SALOME_ListIO.hxx>
2009-02-13 17:16:39 +05:00
# include <SALOME_ListIteratorOfListIO.hxx>
2004-12-01 15:39:14 +05:00
2009-02-13 17:16:39 +05:00
# include <SALOMEDSClient_ClientFactory.hxx>
# include <SALOMEDSClient_IParameters.hxx>
2005-06-02 13:17:09 +06:00
2009-02-13 17:16:39 +05:00
// External includes
# include <QMenu>
# include <QAction>
# include <QFileInfo>
# include <QString>
# include <QPainter>
# include <AIS_Drawer.hxx>
# include <AIS_ListOfInteractive.hxx>
# include <AIS_ListIteratorOfListOfInteractive.hxx>
2004-12-01 15:39:14 +05:00
# include <Prs3d_Drawer.hxx>
# include <Prs3d_IsoAspect.hxx>
2008-03-07 12:45:34 +05:00
# include <Aspect_TypeOfMarker.hxx>
2004-12-01 15:39:14 +05:00
# include <OSD_SharedLibrary.hxx>
2009-02-13 17:16:39 +05:00
# include <NCollection_DataMap.hxx>
2009-12-08 17:05:55 +05:00
# include <Graphic3d_HArray1OfBytes.hxx>
2004-12-01 15:39:14 +05:00
2005-06-02 13:17:09 +06:00
# include <utilities.h>
2004-12-01 15:39:14 +05:00
# include <vtkCamera.h>
# include <vtkRenderer.h>
2003-05-12 21:24:23 +06:00
2009-02-13 17:16:39 +05:00
# include "GEOMImpl_Types.hxx"
2004-12-01 15:39:14 +05:00
extern " C " {
2005-06-02 13:17:09 +06:00
Standard_EXPORT CAM_Module * createModule ( ) {
return new GeometryGUI ( ) ;
2004-12-01 15:39:14 +05:00
}
}
2003-05-12 21:24:23 +06:00
2009-12-08 17:05:55 +05:00
GeometryGUI : : StudyTextureMap GeometryGUI : : myTextureMap ;
2005-08-19 17:51:38 +06:00
2006-05-06 14:44:32 +06:00
GEOM : : GEOM_Gen_var GeometryGUI : : myComponentGeom = GEOM : : GEOM_Gen : : _nil ( ) ;
2005-06-02 13:17:09 +06:00
2006-05-06 14:44:32 +06:00
GEOM : : GEOM_Gen_var GeometryGUI : : GetGeomGen ( )
{
// Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
if ( CORBA : : is_nil ( myComponentGeom ) )
InitGeomGen ( ) ;
return GeometryGUI : : myComponentGeom ;
}
2005-08-19 17:51:38 +06:00
2006-05-06 14:44:32 +06:00
bool GeometryGUI : : InitGeomGen ( )
2005-06-15 17:50:44 +06:00
{
GeometryGUI aGG ;
2006-05-06 14:44:32 +06:00
if ( CORBA : : is_nil ( myComponentGeom ) ) return false ;
return true ;
}
2005-06-15 17:50:44 +06:00
2005-08-18 12:15:31 +06:00
//=======================================================================
// function : ClientSObjectToObject
2008-03-07 12:45:34 +05:00
// purpose :
2005-08-18 12:15:31 +06:00
//=======================================================================
CORBA : : Object_var GeometryGUI : : ClientSObjectToObject ( _PTR ( SObject ) theSObject )
{
_PTR ( GenericAttribute ) anAttr ;
CORBA : : Object_var anObj ;
try {
std : : string aValue = theSObject - > GetIOR ( ) ;
if ( strcmp ( aValue . c_str ( ) , " " ) ! = 0 ) {
CORBA : : ORB_ptr anORB = SalomeApp_Application : : orb ( ) ;
anObj = anORB - > string_to_object ( aValue . c_str ( ) ) ;
}
} catch ( . . . ) {
INFOS ( " ClientSObjectToObject - Unknown exception was occured!!! " ) ;
}
return anObj . _retn ( ) ;
}
//=======================================================================
// function : ClientStudyToStudy
2008-03-07 12:45:34 +05:00
// purpose :
2005-08-18 12:15:31 +06:00
//=======================================================================
SALOMEDS : : Study_var GeometryGUI : : ClientStudyToStudy ( _PTR ( Study ) theStudy )
{
SALOME_NamingService * aNamingService = SalomeApp_Application : : namingService ( ) ;
CORBA : : Object_var aSMObject = aNamingService - > Resolve ( " /myStudyManager " ) ;
SALOMEDS : : StudyManager_var aStudyManager = SALOMEDS : : StudyManager : : _narrow ( aSMObject ) ;
int aStudyID = theStudy - > StudyId ( ) ;
SALOMEDS : : Study_var aDSStudy = aStudyManager - > GetStudyByID ( aStudyID ) ;
return aDSStudy . _retn ( ) ;
}
2003-05-12 21:24:23 +06:00
//=======================================================================
2004-12-01 15:39:14 +05:00
// function : GeometryGUI::GeometryGUI()
2003-05-12 21:24:23 +06:00
// purpose : Constructor
//=======================================================================
2004-12-01 15:39:14 +05:00
GeometryGUI : : GeometryGUI ( ) :
2009-04-17 16:57:52 +06:00
SalomeApp_Module ( " GEOM " ) ,
LightApp_Module ( " GEOM " )
2004-12-01 15:39:14 +05:00
{
2005-06-02 13:17:09 +06:00
if ( CORBA : : is_nil ( myComponentGeom ) )
2008-03-07 12:45:34 +05:00
{
2009-09-21 20:19:29 +06:00
Engines : : Component_var comp = SalomeApp_Application : : lcc ( ) - > FindOrLoad_Component ( " FactoryServer " , " GEOM " ) ;
2005-06-08 18:39:43 +06:00
myComponentGeom = GEOM : : GEOM_Gen : : _narrow ( comp ) ;
2005-06-02 13:17:09 +06:00
}
2008-03-07 12:45:34 +05:00
2004-12-01 15:39:14 +05:00
myActiveDialogBox = 0 ;
2003-05-12 21:24:23 +06:00
2004-12-01 15:39:14 +05:00
gp_Pnt origin = gp_Pnt ( 0. , 0. , 0. ) ;
gp_Dir direction = gp_Dir ( 0. , 0. , 1. ) ;
myWorkingPlane = gp_Ax3 ( origin , direction ) ;
2005-06-02 13:17:09 +06:00
2005-09-27 12:32:15 +06:00
myDisplayer = 0 ;
2008-03-07 12:45:34 +05:00
myLocalSelectionMode = GEOM_ALLOBJECTS ;
2004-12-01 15:39:14 +05:00
}
2004-01-07 20:46:21 +05:00
2003-05-12 21:24:23 +06:00
//=======================================================================
2004-12-01 15:39:14 +05:00
// function : GeometryGUI::~GeometryGUI()
2003-05-12 21:24:23 +06:00
// purpose : Destructor
//=======================================================================
GeometryGUI : : ~ GeometryGUI ( )
{
2009-02-13 17:16:39 +05:00
while ( ! myOCCSelectors . isEmpty ( ) )
delete myOCCSelectors . takeFirst ( ) ;
while ( ! myVTKSelectors . isEmpty ( ) )
delete myVTKSelectors . takeFirst ( ) ;
2009-09-21 20:19:29 +06:00
qDeleteAll ( myGUIMap ) ;
2003-05-12 21:24:23 +06:00
}
//=======================================================================
2004-12-01 15:39:14 +05:00
// function : GeometryGUI::getLibrary()
// purpose : get or load GUI library by name [ internal ]
2003-05-12 21:24:23 +06:00
//=======================================================================
2005-06-02 13:17:09 +06:00
typedef GEOMGUI * ( * LibraryGUI ) ( GeometryGUI * ) ;
2004-12-01 15:39:14 +05:00
GEOMGUI * GeometryGUI : : getLibrary ( const QString & libraryName )
2003-05-12 21:24:23 +06:00
{
2004-12-01 15:39:14 +05:00
if ( ! myGUIMap . contains ( libraryName ) ) {
// try to load library if it is not loaded yet
2005-08-29 12:03:08 +06:00
# ifndef WNT
2010-03-01 00:53:08 +05:00
QString dirs = getenv ( " LD_LIBRARY_PATH " ) ;
QString sep = " : " ;
2005-08-29 12:03:08 +06:00
# else
2010-03-01 00:53:08 +05:00
QString dirs = getenv ( " PATH " ) ;
QString sep = " ; " ;
2005-08-29 12:03:08 +06:00
# endif
2010-03-01 00:53:08 +05:00
if ( ! dirs . isEmpty ( ) ) {
QStringList dirList = dirs . split ( sep , QString : : SkipEmptyParts ) ; // skip empty entries
QListIterator < QString > it ( dirList ) ; it . toBack ( ) ;
while ( it . hasPrevious ( ) ) {
QFileInfo fi ( Qtx : : addSlash ( it . previous ( ) ) + libraryName ) ;
if ( fi . exists ( ) ) {
OSD_SharedLibrary aSharedLibrary ( fi . fileName ( ) . toLatin1 ( ) . constData ( ) ) ;
2009-12-25 16:28:58 +05:00
bool res = aSharedLibrary . DlOpen ( OSD_RTLD_LAZY ) ;
2010-03-01 00:53:08 +05:00
if ( ! res ) {
2009-12-25 16:28:58 +05:00
MESSAGE ( " Can't open library : " < < aSharedLibrary . DlError ( ) ) ;
continue ; // continue search further
}
OSD_Function osdF = aSharedLibrary . DlSymb ( " GetLibGUI " ) ;
if ( osdF ! = NULL ) {
LibraryGUI func = ( GEOMGUI * ( * ) ( GeometryGUI * ) ) osdF ;
2010-03-01 00:53:08 +05:00
GEOMGUI * libGUI = ( * func ) ( this ) ;
2009-12-25 16:28:58 +05:00
if ( libGUI ) {
myGUIMap [ libraryName ] = libGUI ;
break ; // found and loaded!
}
}
}
2004-12-01 15:39:14 +05:00
}
}
}
2010-03-01 00:53:08 +05:00
return myGUIMap . contains ( libraryName ) ? myGUIMap [ libraryName ] : 0 ;
2003-05-12 21:24:23 +06:00
}
//=======================================================================
2004-12-01 15:39:14 +05:00
// function : GeometryGUI::ActiveWorkingPlane()
// purpose : Activate Working Plane View
2003-05-12 21:24:23 +06:00
//=======================================================================
2004-12-01 15:39:14 +05:00
void GeometryGUI : : ActiveWorkingPlane ( )
2003-05-12 21:24:23 +06:00
{
2004-12-01 15:39:14 +05:00
gp_Dir DZ = myWorkingPlane . Direction ( ) ;
gp_Dir DY = myWorkingPlane . YDirection ( ) ;
2003-05-12 21:24:23 +06:00
2005-06-02 13:17:09 +06:00
SUIT_ViewWindow * window = application ( ) - > desktop ( ) - > activeWindow ( ) ;
bool ViewOCC = ( window & & window - > getViewManager ( ) - > getType ( ) = = OCCViewer_Viewer : : Type ( ) ) ;
2005-10-05 12:28:23 +06:00
bool ViewVTK = ( window & & window - > getViewManager ( ) - > getType ( ) = = SVTK_Viewer : : Type ( ) ) ;
2005-06-02 13:17:09 +06:00
if ( ViewOCC ) {
OCCViewer_ViewWindow * vw = dynamic_cast < OCCViewer_ViewWindow * > ( window ) ;
if ( vw ) {
Handle ( V3d_View ) view3d = vw - > getViewPort ( ) - > getView ( ) ;
2003-05-12 21:24:23 +06:00
2005-06-02 13:17:09 +06:00
view3d - > SetProj ( DZ . X ( ) , DZ . Y ( ) , DZ . Z ( ) ) ;
view3d - > SetUp ( DY . X ( ) , DY . Y ( ) , DY . Z ( ) ) ;
2004-12-01 15:39:14 +05:00
2005-06-02 13:17:09 +06:00
vw - > onViewFitAll ( ) ;
}
2004-12-01 15:39:14 +05:00
}
2005-06-02 13:17:09 +06:00
else if ( ViewVTK ) {
2005-10-05 12:28:23 +06:00
SVTK_ViewWindow * vw = dynamic_cast < SVTK_ViewWindow * > ( window ) ;
2005-06-02 13:17:09 +06:00
if ( vw ) {
vtkCamera * camera = vw - > getRenderer ( ) - > GetActiveCamera ( ) ;
2003-05-12 21:24:23 +06:00
2005-06-02 13:17:09 +06:00
camera - > SetPosition ( DZ . X ( ) , DZ . Y ( ) , DZ . Z ( ) ) ;
camera - > SetViewUp ( DY . X ( ) , DY . Y ( ) , DY . Z ( ) ) ;
camera - > SetFocalPoint ( 0 , 0 , 0 ) ;
2004-01-07 20:46:21 +05:00
2005-06-02 13:17:09 +06:00
vw - > onFitAll ( ) ;
}
2004-06-16 21:24:55 +06:00
}
2004-12-01 15:39:14 +05:00
}
//=======================================================================
// function : GeometryGUI::SetActiveDialogBox()
// purpose : Set active dialog box
//=======================================================================
void GeometryGUI : : SetActiveDialogBox ( QDialog * aDlg )
{
myActiveDialogBox = ( QDialog * ) aDlg ;
}
//=======================================================================
// function : GeometryGUI::EmitSignalDeactivateDialog()
// purpose : Emit a signal to deactivate the active dialog Box
//=======================================================================
void GeometryGUI : : EmitSignalDeactivateDialog ( )
{
emit SignalDeactivateActiveDialog ( ) ;
}
//=======================================================================
// function : GeometryGUI::EmitSignalCloseAllDialogs()
// purpose : Emit a signal to close all non modal dialogs box
//=======================================================================
void GeometryGUI : : EmitSignalCloseAllDialogs ( )
{
emit SignalCloseAllDialogs ( ) ;
}
//=======================================================================
// function : GeometryGUI::EmitSignalDefaultStepValueChanged()
// purpose : Emit a signal to inform that default real spin box step has
// been changed
//=======================================================================
void GeometryGUI : : EmitSignalDefaultStepValueChanged ( double newVal )
{
emit SignalDefaultStepValueChanged ( newVal ) ;
}
//=======================================================================
// function : GeometryGUI::OnGUIEvent()
2005-06-02 13:17:09 +06:00
// purpose : common slot for all menu/toolbar actions
2004-12-01 15:39:14 +05:00
//=======================================================================
2005-06-02 13:17:09 +06:00
void GeometryGUI : : OnGUIEvent ( )
2004-12-01 15:39:14 +05:00
{
2005-06-02 13:17:09 +06:00
const QObject * obj = sender ( ) ;
if ( ! obj | | ! obj - > inherits ( " QAction " ) )
return ;
int id = actionId ( ( QAction * ) obj ) ;
if ( id ! = - 1 )
OnGUIEvent ( id ) ;
}
2004-12-01 15:39:14 +05:00
2005-06-02 13:17:09 +06:00
//=======================================================================
// function : GeometryGUI::OnGUIEvent()
// purpose : manage all events on GUI [static]
//=======================================================================
void GeometryGUI : : OnGUIEvent ( int id )
{
2006-06-01 17:32:40 +06:00
SUIT_Application * anApp = application ( ) ;
if ( ! anApp ) return ;
SUIT_Desktop * desk = anApp - > desktop ( ) ;
2005-06-17 12:05:05 +06:00
// check type of the active viewframe
2005-06-02 13:17:09 +06:00
SUIT_ViewWindow * window = desk - > activeWindow ( ) ;
bool ViewOCC = ( window & & window - > getViewManager ( ) - > getType ( ) = = OCCViewer_Viewer : : Type ( ) ) ;
2005-10-05 12:28:23 +06:00
bool ViewVTK = ( window & & window - > getViewManager ( ) - > getType ( ) = = SVTK_Viewer : : Type ( ) ) ;
2004-12-01 15:39:14 +05:00
// if current viewframe is not of OCC and not of VTK type - return immediately
2005-06-17 12:05:05 +06:00
// fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
2010-03-01 00:53:08 +05:00
QList < int > NotViewerDependentCommands ;
NotViewerDependentCommands < < GEOMOp : : OpRename
< < GEOMOp : : OpDelete
< < GEOMOp : : OpShow
< < GEOMOp : : OpShowOnly
< < GEOMOp : : OpShowChildren
< < GEOMOp : : OpHideChildren
< < GEOMOp : : OpPointMarker ;
if ( ! ViewOCC & & ! ViewVTK & & ! NotViewerDependentCommands . contains ( id ) )
2005-06-02 13:17:09 +06:00
return ;
2004-12-01 15:39:14 +05:00
2005-06-09 18:34:59 +06:00
// fix for IPAL9103, point 2
if ( CORBA : : is_nil ( GetGeomGen ( ) ) ) {
2009-02-13 17:16:39 +05:00
SUIT_MessageBox : : critical ( desk , tr ( " GEOM_ERROR " ) , tr ( " GEOM_ERR_GET_ENGINE " ) , tr ( " GEOM_BUT_OK " ) ) ;
2005-06-09 18:34:59 +06:00
return ;
}
2010-03-01 00:53:08 +05:00
QString libName ;
// find corresponding GUI library
switch ( id ) {
case GEOMOp : : OpImport : // MENU FILE - IMPORT
case GEOMOp : : OpExport : // MENU FILE - EXPORT
case GEOMOp : : OpSelectVertex : // POPUP MENU - SELECT ONLY - VERTEX
case GEOMOp : : OpSelectEdge : // POPUP MENU - SELECT ONLY - EDGE
case GEOMOp : : OpSelectWire : // POPUP MENU - SELECT ONLY - WIRE
case GEOMOp : : OpSelectFace : // POPUP MENU - SELECT ONLY - FACE
case GEOMOp : : OpSelectShell : // POPUP MENU - SELECT ONLY - SHELL
case GEOMOp : : OpSelectSolid : // POPUP MENU - SELECT ONLY - SOLID
case GEOMOp : : OpSelectCompound : // POPUP MENU - SELECT ONLY - COMPOUND
case GEOMOp : : OpSelectAll : // POPUP MENU - SELECT ONLY - SELECT ALL
case GEOMOp : : OpDelete : // MENU EDIT - DELETE
case GEOMOp : : OpCheckGeom : // MENU TOOLS - CHECK GEOMETRY
case GEOMOp : : OpDeflection : // POPUP MENU - DEFLECTION COEFFICIENT
case GEOMOp : : OpColor : // POPUP MENU - COLOR
case GEOMOp : : OpTransparency : // POPUP MENU - TRANSPARENCY
case GEOMOp : : OpIsos : // POPUP MENU - ISOS
case GEOMOp : : OpAutoColor : // POPUP MENU - AUTO COLOR
case GEOMOp : : OpNoAutoColor : // POPUP MENU - DISABLE AUTO COLOR
case GEOMOp : : OpShowChildren : // POPUP MENU - SHOW CHILDREN
case GEOMOp : : OpHideChildren : // POPUP MENU - HIDE CHILDREN
case GEOMOp : : OpPointMarker : // POPUP MENU - POINT MARKER
case GEOMOp : : OpRename : // POPUP MENU - RENAME
libName = " GEOMToolsGUI " ;
break ;
case GEOMOp : : OpDisplayMode : // MENU VIEW - WIREFRAME/SHADING
case GEOMOp : : OpShowAll : // MENU VIEW - SHOW ALL
case GEOMOp : : OpShowOnly : // MENU VIEW - DISPLAY ONLY
case GEOMOp : : OpHideAll : // MENU VIEW - ERASE ALL
case GEOMOp : : OpHide : // MENU VIEW - ERASE
case GEOMOp : : OpShow : // MENU VIEW - DISPLAY
case GEOMOp : : OpSwitchVectors : // MENU VIEW - VECTOR MODE
case GEOMOp : : OpWireframe : // POPUP MENU - WIREFRAME
case GEOMOp : : OpShading : // POPUP MENU - SHADING
case GEOMOp : : OpVectors : // POPUP MENU - VECTORS
libName = " DisplayGUI " ;
break ;
case GEOMOp : : OpPoint : // MENU BASIC - POINT
case GEOMOp : : OpLine : // MENU BASIC - LINE
case GEOMOp : : OpCircle : // MENU BASIC - CIRCLE
case GEOMOp : : OpEllipse : // MENU BASIC - ELLIPSE
case GEOMOp : : OpArc : // MENU BASIC - ARC
case GEOMOp : : OpVector : // MENU BASIC - VECTOR
case GEOMOp : : OpPlane : // MENU BASIC - PLANE
case GEOMOp : : OpCurve : // MENU BASIC - CURVE
case GEOMOp : : OpLCS : // MENU BASIC - REPAIR
libName = " BasicGUI " ;
break ;
case GEOMOp : : OpBox : // MENU PRIMITIVE - BOX
case GEOMOp : : OpCylinder : // MENU PRIMITIVE - CYLINDER
case GEOMOp : : OpSphere : // MENU PRIMITIVE - SPHERE
case GEOMOp : : OpTorus : // MENU PRIMITIVE - TORUS
case GEOMOp : : OpCone : // MENU PRIMITIVE - CONE
case GEOMOp : : OpRectangle : // MENU PRIMITIVE - FACE
case GEOMOp : : OpDisk : // MENU PRIMITIVE - DISK
libName = " PrimitiveGUI " ;
break ;
case GEOMOp : : OpPrism : // MENU GENERATION - PRISM
case GEOMOp : : OpRevolution : // MENU GENERATION - REVOLUTION
case GEOMOp : : OpFilling : // MENU GENERATION - FILLING
case GEOMOp : : OpPipe : // MENU GENERATION - PIPE
libName = " GenerationGUI " ;
break ;
case GEOMOp : : Op2dSketcher : // MENU ENTITY - SKETCHER
case GEOMOp : : Op3dSketcher : // MENU ENTITY - 3D SKETCHER
case GEOMOp : : OpExplode : // MENU ENTITY - EXPLODE
libName = " EntityGUI " ;
break ;
case GEOMOp : : OpEdge : // MENU BUILD - EDGE
case GEOMOp : : OpWire : // MENU BUILD - WIRE
case GEOMOp : : OpFace : // MENU BUILD - FACE
case GEOMOp : : OpShell : // MENU BUILD - SHELL
case GEOMOp : : OpSolid : // MENU BUILD - SOLID
case GEOMOp : : OpCompound : // MENU BUILD - COMPUND
libName = " BuildGUI " ;
break ;
case GEOMOp : : OpFuse : // MENU BOOLEAN - FUSE
case GEOMOp : : OpCommon : // MENU BOOLEAN - COMMON
case GEOMOp : : OpCut : // MENU BOOLEAN - CUT
case GEOMOp : : OpSection : // MENU BOOLEAN - SECTION
libName = " BooleanGUI " ;
break ;
case GEOMOp : : OpTranslate : // MENU TRANSFORMATION - TRANSLATION
case GEOMOp : : OpRotate : // MENU TRANSFORMATION - ROTATION
case GEOMOp : : OpChangeLoc : // MENU TRANSFORMATION - LOCATION
case GEOMOp : : OpMirror : // MENU TRANSFORMATION - MIRROR
case GEOMOp : : OpScale : // MENU TRANSFORMATION - SCALE
case GEOMOp : : OpOffset : // MENU TRANSFORMATION - OFFSET
case GEOMOp : : OpMultiTranslate : // MENU TRANSFORMATION - MULTI-TRANSLATION
case GEOMOp : : OpMultiRotate : // MENU TRANSFORMATION - MULTI-ROTATION
case GEOMOp : : OpReimport : // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
libName = " TransformationGUI " ;
break ;
case GEOMOp : : OpPartition : // MENU OPERATION - PARTITION
case GEOMOp : : OpArchimede : // MENU OPERATION - ARCHIMEDE
case GEOMOp : : OpFillet3d : // MENU OPERATION - FILLET
case GEOMOp : : OpChamfer : // MENU OPERATION - CHAMFER
case GEOMOp : : OpClipping : // MENU OPERATION - CLIPPING RANGE
case GEOMOp : : OpShapesOnShape : // MENU OPERATION - GET SHAPES ON SHAPE
case GEOMOp : : OpFillet2d : // MENU OPERATION - FILLET 2D
case GEOMOp : : OpFillet1d : // MENU OPERATION - FILLET 1D
libName = " OperationGUI " ;
break ;
case GEOMOp : : OpSewing : // MENU REPAIR - SEWING
case GEOMOp : : OpSuppressFaces : // MENU REPAIR - SUPPRESS FACES
case GEOMOp : : OpSuppressHoles : // MENU REPAIR - SUPPRESS HOLE
case GEOMOp : : OpShapeProcess : // MENU REPAIR - SHAPE PROCESSING
case GEOMOp : : OpCloseContour : // MENU REPAIR - CLOSE CONTOUR
case GEOMOp : : OpRemoveIntWires : // MENU REPAIR - REMOVE INTERNAL WIRES
case GEOMOp : : OpAddPointOnEdge : // MENU REPAIR - ADD POINT ON EDGE
case GEOMOp : : OpFreeBoundaries : // MENU MEASURE - FREE BOUNDARIES
case GEOMOp : : OpFreeFaces : // MENU MEASURE - FREE FACES
case GEOMOp : : OpOrientation : // MENU REPAIR - CHANGE ORIENTATION
case GEOMOp : : OpGlueFaces : // MENU REPAIR - GLUE FACES
case GEOMOp : : OpRemoveExtraEdges : // MENU REPAIR - REMOVE EXTRA EDGES
libName = " RepairGUI " ;
break ;
case GEOMOp : : OpProperties : // MENU MEASURE - PROPERTIES
case GEOMOp : : OpCenterMass : // MENU MEASURE - CDG
case GEOMOp : : OpInertia : // MENU MEASURE - INERTIA
case GEOMOp : : OpNormale : // MENU MEASURE - NORMALE
case GEOMOp : : OpBoundingBox : // MENU MEASURE - BOUNDING BOX
case GEOMOp : : OpMinDistance : // MENU MEASURE - MIN DISTANCE
case GEOMOp : : OpAngle : // MENU MEASURE - ANGLE
case GEOMOp : : OpTolerance : // MENU MEASURE - TOLERANCE
case GEOMOp : : OpWhatIs : // MENU MEASURE - WHATIS
case GEOMOp : : OpCheckShape : // MENU MEASURE - CHECK
case GEOMOp : : OpCheckCompound : // MENU MEASURE - CHECK COMPOUND OF BLOCKS
case GEOMOp : : OpPointCoordinates : // MENU MEASURE - POINT COORDINATES
libName = " MeasureGUI " ;
break ;
case GEOMOp : : OpGroupCreate : // MENU GROUP - CREATE
case GEOMOp : : OpGroupCreatePopup : // POPUP MENU - CREATE GROUP
case GEOMOp : : OpGroupEdit : // MENU GROUP - EDIT
libName = " GroupGUI " ;
break ;
case GEOMOp : : OpHexaSolid : // MENU BLOCKS - HEXAHEDRAL SOLID
case GEOMOp : : OpMultiTransform : // MENU BLOCKS - MULTI-TRANSFORMATION
case GEOMOp : : OpQuadFace : // MENU BLOCKS - QUADRANGLE FACE
case GEOMOp : : OpPropagate : // MENU BLOCKS - PROPAGATE
case GEOMOp : : OpExplodeBlock : // MENU BLOCKS - EXPLODE ON BLOCKS
libName = " BlocksGUI " ;
break ;
2010-03-10 13:08:20 +05:00
case GEOMOp : : OpAdvancedNoOp : // NO OPERATION (advanced operations base)
2010-04-15 23:41:44 +06:00
case GEOMOp : : OpPipeTShape : // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
// case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
2010-03-10 13:08:20 +05:00
//@@ insert new functions before this line @@//
libName = " AdvancedGUI " ;
break ;
2010-03-01 00:53:08 +05:00
default :
break ;
2005-06-02 13:17:09 +06:00
}
2010-03-01 00:53:08 +05:00
GEOMGUI * library = 0 ;
if ( ! libName . isEmpty ( ) ) {
2005-08-29 12:03:08 +06:00
# ifndef WNT
2010-03-01 00:53:08 +05:00
libName = QString ( " lib " ) + libName + " .so " ;
2005-08-29 12:03:08 +06:00
# else
2010-03-01 00:53:08 +05:00
libName = libName + " .dll " ;
2005-08-29 12:03:08 +06:00
# endif
2010-03-01 00:53:08 +05:00
library = getLibrary ( libName ) ;
2005-06-02 13:17:09 +06:00
}
// call method of corresponding GUI library
2008-03-07 12:45:34 +05:00
if ( library )
2005-06-02 13:17:09 +06:00
library - > OnGUIEvent ( id , desk ) ;
2008-03-07 12:45:34 +05:00
else
2009-02-13 17:16:39 +05:00
SUIT_MessageBox : : critical ( desk , tr ( " GEOM_ERROR " ) , tr ( " GEOM_ERR_LIB_NOT_FOUND " ) , tr ( " GEOM_BUT_OK " ) ) ;
2003-05-12 21:24:23 +06:00
}
//=================================================================================
2004-12-01 15:39:14 +05:00
// function : GeometryGUI::OnKeyPress()
// purpose : Called when any key is pressed by user [static]
2003-05-12 21:24:23 +06:00
//=================================================================================
2010-03-01 00:53:08 +05:00
void GeometryGUI : : OnKeyPress ( SUIT_ViewWindow * w , QKeyEvent * e )
2003-05-12 21:24:23 +06:00
{
2010-03-01 00:53:08 +05:00
if ( ! application ( ) )
return ;
foreach ( GEOMGUI * lib , myGUIMap )
lib - > OnKeyPress ( e , application ( ) - > desktop ( ) , w ) ;
2003-05-12 21:24:23 +06:00
}
//=================================================================================
2004-12-01 15:39:14 +05:00
// function : GeometryGUI::OnMouseMove()
// purpose : Manages mouse move events [static]
2003-05-12 21:24:23 +06:00
//=================================================================================
2010-03-01 00:53:08 +05:00
void GeometryGUI : : OnMouseMove ( SUIT_ViewWindow * w , QMouseEvent * e )
2008-03-07 12:45:34 +05:00
{
2010-03-01 00:53:08 +05:00
if ( ! application ( ) )
return ;
foreach ( GEOMGUI * lib , myGUIMap )
lib - > OnMouseMove ( e , application ( ) - > desktop ( ) , w ) ;
2003-05-12 21:24:23 +06:00
}
//=================================================================================
2010-03-01 00:53:08 +05:00
// function : GeometryGUI::OnMousePress()
2004-12-01 15:39:14 +05:00
// purpose : Manage mouse press events [static]
2003-05-12 21:24:23 +06:00
//=================================================================================
2010-03-01 00:53:08 +05:00
void GeometryGUI : : OnMousePress ( SUIT_ViewWindow * w , QMouseEvent * e )
2003-05-12 21:24:23 +06:00
{
2010-03-01 00:53:08 +05:00
if ( ! application ( ) )
return ;
foreach ( GEOMGUI * lib , myGUIMap )
lib - > OnMousePress ( e , application ( ) - > desktop ( ) , w ) ;
2003-05-12 21:24:23 +06:00
}
2005-06-02 13:17:09 +06:00
//=======================================================================
// function : createGeomAction
2008-03-07 12:45:34 +05:00
// purpose :
2005-06-02 13:17:09 +06:00
//=======================================================================
2010-03-01 00:53:08 +05:00
void GeometryGUI : : createGeomAction ( const int id , const QString & label , const QString & icolabel , const int accel , const bool toggle )
2005-06-02 13:17:09 +06:00
{
SUIT_ResourceMgr * resMgr = SUIT_Session : : session ( ) - > resourceMgr ( ) ;
2010-03-01 00:53:08 +05:00
QPixmap icon = icolabel . isEmpty ( ) ? resMgr - > loadPixmap ( " GEOM " , tr ( ( QString ( " ICO_ " ) + label ) . toLatin1 ( ) . constData ( ) ) , false )
: resMgr - > loadPixmap ( " GEOM " , tr ( icolabel . toLatin1 ( ) . constData ( ) ) ) ;
createAction ( id ,
tr ( QString ( " TOP_%1 " ) . arg ( label ) . toLatin1 ( ) . constData ( ) ) ,
icon ,
tr ( QString ( " MEN_%1 " ) . arg ( label ) . toLatin1 ( ) . constData ( ) ) ,
tr ( QString ( " STB_%1 " ) . arg ( label ) . toLatin1 ( ) . constData ( ) ) ,
accel ,
application ( ) - > desktop ( ) ,
toggle ,
this , SLOT ( OnGUIEvent ( ) ) ) ;
2005-06-02 13:17:09 +06:00
}
2003-05-12 21:24:23 +06:00
2004-12-01 15:39:14 +05:00
//=======================================================================
2006-05-10 20:27:12 +06:00
// function : GeometryGUI::initialize()
// purpose : Called when GEOM module is created
2004-12-01 15:39:14 +05:00
//=======================================================================
2005-06-02 13:17:09 +06:00
void GeometryGUI : : initialize ( CAM_Application * app )
2004-12-01 15:39:14 +05:00
{
2005-06-02 13:17:09 +06:00
SalomeApp_Module : : initialize ( app ) ;
// ----- create actions --------------
2010-03-01 00:53:08 +05:00
createGeomAction ( GEOMOp : : OpImport , " IMPORT " , " " , Qt : : ControlModifier + Qt : : Key_I ) ;
createGeomAction ( GEOMOp : : OpExport , " EXPORT " , " " , Qt : : ControlModifier + Qt : : Key_E ) ;
createGeomAction ( GEOMOp : : OpDelete , " DELETE " , " " , Qt : : Key_Delete ) ;
createGeomAction ( GEOMOp : : OpPoint , " POINT " ) ;
createGeomAction ( GEOMOp : : OpLine , " LINE " ) ;
createGeomAction ( GEOMOp : : OpCircle , " CIRCLE " ) ;
createGeomAction ( GEOMOp : : OpEllipse , " ELLIPSE " ) ;
createGeomAction ( GEOMOp : : OpArc , " ARC " ) ;
createGeomAction ( GEOMOp : : OpCurve , " CURVE " ) ;
createGeomAction ( GEOMOp : : OpVector , " VECTOR " ) ;
createGeomAction ( GEOMOp : : OpPlane , " PLANE " ) ;
createGeomAction ( GEOMOp : : OpLCS , " LOCAL_CS " ) ;
createGeomAction ( GEOMOp : : OpBox , " BOX " ) ;
createGeomAction ( GEOMOp : : OpCylinder , " CYLINDER " ) ;
createGeomAction ( GEOMOp : : OpSphere , " SPHERE " ) ;
createGeomAction ( GEOMOp : : OpTorus , " TORUS " ) ;
createGeomAction ( GEOMOp : : OpCone , " CONE " ) ;
createGeomAction ( GEOMOp : : OpRectangle , " RECTANGLE " ) ;
createGeomAction ( GEOMOp : : OpDisk , " DISK " ) ;
createGeomAction ( GEOMOp : : OpPrism , " EXTRUSION " ) ;
createGeomAction ( GEOMOp : : OpRevolution , " REVOLUTION " ) ;
createGeomAction ( GEOMOp : : OpFilling , " FILLING " ) ;
createGeomAction ( GEOMOp : : OpPipe , " PIPE " ) ;
createGeomAction ( GEOMOp : : OpGroupCreate , " GROUP_CREATE " ) ;
createGeomAction ( GEOMOp : : OpGroupEdit , " GROUP_EDIT " ) ;
createGeomAction ( GEOMOp : : OpReimport , " RELOAD_IMPORTED " ) ;
createGeomAction ( GEOMOp : : OpQuadFace , " Q_FACE " ) ;
createGeomAction ( GEOMOp : : OpHexaSolid , " HEX_SOLID " ) ;
createGeomAction ( GEOMOp : : Op2dSketcher , " SKETCH " ) ;
createGeomAction ( GEOMOp : : Op3dSketcher , " 3DSKETCH " ) ;
createGeomAction ( GEOMOp : : OpExplode , " EXPLODE " ) ;
createGeomAction ( GEOMOp : : OpEdge , " EDGE " ) ;
createGeomAction ( GEOMOp : : OpWire , " WIRE " ) ;
createGeomAction ( GEOMOp : : OpFace , " FACE " ) ;
createGeomAction ( GEOMOp : : OpShell , " SHELL " ) ;
createGeomAction ( GEOMOp : : OpSolid , " SOLID " ) ;
createGeomAction ( GEOMOp : : OpCompound , " COMPOUND " ) ;
createGeomAction ( GEOMOp : : OpFuse , " FUSE " ) ;
createGeomAction ( GEOMOp : : OpCommon , " COMMON " ) ;
createGeomAction ( GEOMOp : : OpCut , " CUT " ) ;
createGeomAction ( GEOMOp : : OpSection , " SECTION " ) ;
createGeomAction ( GEOMOp : : OpTranslate , " TRANSLATION " ) ;
createGeomAction ( GEOMOp : : OpRotate , " ROTATION " ) ;
createGeomAction ( GEOMOp : : OpChangeLoc , " MODIFY_LOCATION " ) ;
createGeomAction ( GEOMOp : : OpMirror , " MIRROR " ) ;
createGeomAction ( GEOMOp : : OpScale , " SCALE " ) ;
createGeomAction ( GEOMOp : : OpOffset , " OFFSET " ) ;
createGeomAction ( GEOMOp : : OpMultiTranslate , " MUL_TRANSLATION " ) ;
createGeomAction ( GEOMOp : : OpMultiRotate , " MUL_ROTATION " ) ;
createGeomAction ( GEOMOp : : OpPartition , " PARTITION " ) ;
createGeomAction ( GEOMOp : : OpArchimede , " ARCHIMEDE " ) ;
createGeomAction ( GEOMOp : : OpFillet3d , " FILLET " ) ;
createGeomAction ( GEOMOp : : OpChamfer , " CHAMFER " ) ;
//createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
createGeomAction ( GEOMOp : : OpShapesOnShape , " GET_SHAPES_ON_SHAPES " ) ;
createGeomAction ( GEOMOp : : OpFillet1d , " FILLET_1D " ) ;
createGeomAction ( GEOMOp : : OpFillet2d , " FILLET_2D " ) ;
createGeomAction ( GEOMOp : : OpMultiTransform , " MUL_TRANSFORM " ) ;
createGeomAction ( GEOMOp : : OpExplodeBlock , " EXPLODE_BLOCKS " ) ;
createGeomAction ( GEOMOp : : OpPropagate , " PROPAGATE " ) ;
createGeomAction ( GEOMOp : : OpSewing , " SEWING " ) ;
createGeomAction ( GEOMOp : : OpGlueFaces , " GLUE_FACES " ) ;
createGeomAction ( GEOMOp : : OpSuppressFaces , " SUPPRESS_FACES " ) ;
createGeomAction ( GEOMOp : : OpSuppressHoles , " SUPPERSS_HOLES " ) ;
createGeomAction ( GEOMOp : : OpShapeProcess , " SHAPE_PROCESS " ) ;
createGeomAction ( GEOMOp : : OpCloseContour , " CLOSE_CONTOUR " ) ;
createGeomAction ( GEOMOp : : OpRemoveIntWires , " SUPPRESS_INT_WIRES " ) ;
createGeomAction ( GEOMOp : : OpAddPointOnEdge , " POINT_ON_EDGE " ) ;
createGeomAction ( GEOMOp : : OpFreeBoundaries , " CHECK_FREE_BNDS " ) ;
createGeomAction ( GEOMOp : : OpFreeFaces , " CHECK_FREE_FACES " ) ;
createGeomAction ( GEOMOp : : OpOrientation , " CHANGE_ORIENTATION " ) ;
createGeomAction ( GEOMOp : : OpRemoveExtraEdges , " REMOVE_EXTRA_EDGES " ) ;
createGeomAction ( GEOMOp : : OpPointCoordinates , " POINT_COORDS " ) ;
createGeomAction ( GEOMOp : : OpProperties , " BASIC_PROPS " ) ;
createGeomAction ( GEOMOp : : OpCenterMass , " MASS_CENTER " ) ;
createGeomAction ( GEOMOp : : OpInertia , " INERTIA " ) ;
createGeomAction ( GEOMOp : : OpNormale , " NORMALE " ) ;
createGeomAction ( GEOMOp : : OpBoundingBox , " BND_BOX " ) ;
createGeomAction ( GEOMOp : : OpMinDistance , " MIN_DIST " ) ;
createGeomAction ( GEOMOp : : OpAngle , " MEASURE_ANGLE " ) ;
createGeomAction ( GEOMOp : : OpTolerance , " TOLERANCE " ) ;
createGeomAction ( GEOMOp : : OpWhatIs , " WHAT_IS " ) ;
createGeomAction ( GEOMOp : : OpCheckShape , " CHECK " ) ;
createGeomAction ( GEOMOp : : OpCheckCompound , " CHECK_COMPOUND " ) ;
2005-06-02 13:17:09 +06:00
2008-03-07 12:45:34 +05:00
# ifdef _DEBUG_ // PAL16821
2010-03-01 00:53:08 +05:00
createGeomAction ( GEOMOp : : OpCheckGeom , " CHECK_GEOMETRY " ) ;
2008-03-07 12:45:34 +05:00
# endif
2010-03-01 00:53:08 +05:00
createGeomAction ( GEOMOp : : OpDisplayMode , " SHADING " ) ;
createGeomAction ( GEOMOp : : OpShowAll , " DISPLAY_ALL " ) ;
createGeomAction ( GEOMOp : : OpHideAll , " ERASE_ALL " ) ;
createGeomAction ( GEOMOp : : OpShow , " DISPLAY " ) ;
createGeomAction ( GEOMOp : : OpSwitchVectors , " VECTOR_MODE " ) ;
createGeomAction ( GEOMOp : : OpSelectVertex , " VERTEX_SEL_ONLY " , " " , 0 , true ) ;
createGeomAction ( GEOMOp : : OpSelectEdge , " EDGE_SEL_ONLY " , " " , 0 , true ) ;
createGeomAction ( GEOMOp : : OpSelectWire , " WIRE_SEL_ONLY " , " " , 0 , true ) ;
createGeomAction ( GEOMOp : : OpSelectFace , " FACE_SEL_ONLY " , " " , 0 , true ) ;
createGeomAction ( GEOMOp : : OpSelectShell , " SHELL_SEL_ONLY " , " " , 0 , true ) ;
createGeomAction ( GEOMOp : : OpSelectSolid , " SOLID_SEL_ONLY " , " " , 0 , true ) ;
createGeomAction ( GEOMOp : : OpSelectCompound , " COMPOUND_SEL_ONLY " , " " , 0 , true ) ;
createGeomAction ( GEOMOp : : OpSelectAll , " ALL_SEL_ONLY " , " " , 0 , true ) ;
createGeomAction ( GEOMOp : : OpShowOnly , " DISPLAY_ONLY " ) ;
createGeomAction ( GEOMOp : : OpHide , " ERASE " ) ;
createGeomAction ( GEOMOp : : OpRename , " POP_RENAME " , " " , Qt : : Key_F2 ) ;
createGeomAction ( GEOMOp : : OpWireframe , " POP_WIREFRAME " , " " , 0 , true ) ;
createGeomAction ( GEOMOp : : OpShading , " POP_SHADING " , " " , 0 , true ) ;
createGeomAction ( GEOMOp : : OpVectors , " POP_VECTORS " , " " , 0 , true ) ;
createGeomAction ( GEOMOp : : OpDeflection , " POP_DEFLECTION " ) ;
createGeomAction ( GEOMOp : : OpColor , " POP_COLOR " ) ;
createGeomAction ( GEOMOp : : OpTransparency , " POP_TRANSPARENCY " ) ;
createGeomAction ( GEOMOp : : OpIsos , " POP_ISOS " ) ;
createGeomAction ( GEOMOp : : OpAutoColor , " POP_AUTO_COLOR " ) ;
createGeomAction ( GEOMOp : : OpNoAutoColor , " POP_DISABLE_AUTO_COLOR " ) ;
createGeomAction ( GEOMOp : : OpGroupCreatePopup , " POP_CREATE_GROUP " ) ;
createGeomAction ( GEOMOp : : OpShowChildren , " POP_SHOW_CHILDREN " ) ;
createGeomAction ( GEOMOp : : OpHideChildren , " POP_HIDE_CHILDREN " ) ;
createGeomAction ( GEOMOp : : OpPointMarker , " POP_POINT_MARKER " ) ;
2010-03-10 13:08:20 +05:00
2010-04-15 23:41:44 +06:00
createGeomAction ( GEOMOp : : OpPipeTShape , " PIPETSHAPE " ) ;
// createGeomAction( GEOMOp::OpPipeTShapeGroups, "PIPETSHAPEGROUPS" );
2010-03-10 13:08:20 +05:00
//@@ insert new functions before this line @@//
2010-03-01 00:53:08 +05:00
// ---- create menus --------------------------
2005-06-02 13:17:09 +06:00
int fileId = createMenu ( tr ( " MEN_FILE " ) , - 1 , - 1 ) ;
2010-03-01 00:53:08 +05:00
createMenu ( separator ( ) , fileId , 10 ) ;
createMenu ( GEOMOp : : OpImport , fileId , 10 ) ;
createMenu ( GEOMOp : : OpExport , fileId , 10 ) ;
createMenu ( separator ( ) , fileId , - 1 ) ;
2005-06-02 13:17:09 +06:00
int editId = createMenu ( tr ( " MEN_EDIT " ) , - 1 , - 1 ) ;
2010-03-01 00:53:08 +05:00
createMenu ( GEOMOp : : OpDelete , editId , - 1 ) ;
2005-06-02 13:17:09 +06:00
int newEntId = createMenu ( tr ( " MEN_NEW_ENTITY " ) , - 1 , - 1 , 10 ) ;
int basicId = createMenu ( tr ( " MEN_BASIC " ) , newEntId , - 1 ) ;
2010-03-01 00:53:08 +05:00
createMenu ( GEOMOp : : OpPoint , basicId , - 1 ) ;
createMenu ( GEOMOp : : OpLine , basicId , - 1 ) ;
createMenu ( GEOMOp : : OpCircle , basicId , - 1 ) ;
createMenu ( GEOMOp : : OpEllipse , basicId , - 1 ) ;
createMenu ( GEOMOp : : OpArc , basicId , - 1 ) ;
createMenu ( GEOMOp : : OpCurve , basicId , - 1 ) ;
createMenu ( separator ( ) , basicId , - 1 ) ;
createMenu ( GEOMOp : : OpVector , basicId , - 1 ) ;
createMenu ( GEOMOp : : OpPlane , basicId , - 1 ) ;
createMenu ( GEOMOp : : OpLCS , basicId , - 1 ) ;
2005-06-02 13:17:09 +06:00
int primId = createMenu ( tr ( " MEN_PRIMITIVES " ) , newEntId , - 1 ) ;
2010-03-01 00:53:08 +05:00
createMenu ( GEOMOp : : OpBox , primId , - 1 ) ;
createMenu ( GEOMOp : : OpCylinder , primId , - 1 ) ;
createMenu ( GEOMOp : : OpSphere , primId , - 1 ) ;
createMenu ( GEOMOp : : OpTorus , primId , - 1 ) ;
createMenu ( GEOMOp : : OpCone , primId , - 1 ) ;
createMenu ( GEOMOp : : OpRectangle , primId , - 1 ) ;
createMenu ( GEOMOp : : OpDisk , primId , - 1 ) ;
2005-06-02 13:17:09 +06:00
int genId = createMenu ( tr ( " MEN_GENERATION " ) , newEntId , - 1 ) ;
2010-03-01 00:53:08 +05:00
createMenu ( GEOMOp : : OpPrism , genId , - 1 ) ;
createMenu ( GEOMOp : : OpRevolution , genId , - 1 ) ;
createMenu ( GEOMOp : : OpFilling , genId , - 1 ) ;
createMenu ( GEOMOp : : OpPipe , genId , - 1 ) ;
2010-03-10 13:08:20 +05:00
int advId = createMenu ( tr ( " MEN_ADVANCED " ) , newEntId , - 1 ) ;
2010-04-15 23:41:44 +06:00
createMenu ( GEOMOp : : OpPipeTShape , advId , - 1 ) ;
// createMenu( GEOMOp::OpPipeTShapeGroups, advId, -1 );
2010-03-10 13:08:20 +05:00
//@@ insert new functions before this line @@//
2005-06-02 13:17:09 +06:00
createMenu ( separator ( ) , newEntId , - 1 ) ;
int groupId = createMenu ( tr ( " MEN_GROUP " ) , newEntId , - 1 ) ;
2010-03-01 00:53:08 +05:00
createMenu ( GEOMOp : : OpGroupCreate , groupId , - 1 ) ;
createMenu ( GEOMOp : : OpGroupEdit , groupId , - 1 ) ;
2005-06-02 13:17:09 +06:00
createMenu ( separator ( ) , newEntId , - 1 ) ;
int blocksId = createMenu ( tr ( " MEN_BLOCKS " ) , newEntId , - 1 ) ;
2010-03-01 00:53:08 +05:00
createMenu ( GEOMOp : : OpQuadFace , blocksId , - 1 ) ;
createMenu ( GEOMOp : : OpHexaSolid , blocksId , - 1 ) ;
2005-06-02 13:17:09 +06:00
2010-03-01 00:53:08 +05:00
createMenu ( separator ( ) , newEntId , - 1 ) ;
createMenu ( GEOMOp : : Op2dSketcher , newEntId , - 1 ) ;
createMenu ( GEOMOp : : Op3dSketcher , newEntId , - 1 ) ;
createMenu ( separator ( ) , newEntId , - 1 ) ;
createMenu ( GEOMOp : : OpExplode , newEntId , - 1 ) ;
2005-06-02 13:17:09 +06:00
int buildId = createMenu ( tr ( " MEN_BUILD " ) , newEntId , - 1 ) ;
2010-03-01 00:53:08 +05:00
createMenu ( GEOMOp : : OpEdge , buildId , - 1 ) ;
createMenu ( GEOMOp : : OpWire , buildId , - 1 ) ;
createMenu ( GEOMOp : : OpFace , buildId , - 1 ) ;
createMenu ( GEOMOp : : OpShell , buildId , - 1 ) ;
createMenu ( GEOMOp : : OpSolid , buildId , - 1 ) ;
createMenu ( GEOMOp : : OpCompound , buildId , - 1 ) ;
2005-06-02 13:17:09 +06:00
int operId = createMenu ( tr ( " MEN_OPERATIONS " ) , - 1 , - 1 , 10 ) ;
int boolId = createMenu ( tr ( " MEN_BOOLEAN " ) , operId , - 1 ) ;
2010-03-01 00:53:08 +05:00
createMenu ( GEOMOp : : OpFuse , boolId , - 1 ) ;
createMenu ( GEOMOp : : OpCommon , boolId , - 1 ) ;
createMenu ( GEOMOp : : OpCut , boolId , - 1 ) ;
createMenu ( GEOMOp : : OpSection , boolId , - 1 ) ;
2005-06-02 13:17:09 +06:00
int transId = createMenu ( tr ( " MEN_TRANSFORMATION " ) , operId , - 1 ) ;
2010-03-01 00:53:08 +05:00
createMenu ( GEOMOp : : OpTranslate , transId , - 1 ) ;
createMenu ( GEOMOp : : OpRotate , transId , - 1 ) ;
createMenu ( GEOMOp : : OpChangeLoc , transId , - 1 ) ;
createMenu ( GEOMOp : : OpMirror , transId , - 1 ) ;
createMenu ( GEOMOp : : OpScale , transId , - 1 ) ;
createMenu ( GEOMOp : : OpOffset , transId , - 1 ) ;
createMenu ( separator ( ) , transId , - 1 ) ;
createMenu ( GEOMOp : : OpMultiTranslate , transId , - 1 ) ;
createMenu ( GEOMOp : : OpMultiRotate , transId , - 1 ) ;
2005-06-02 13:17:09 +06:00
int blockId = createMenu ( tr ( " MEN_BLOCKS " ) , operId , - 1 ) ;
2010-03-01 00:53:08 +05:00
createMenu ( GEOMOp : : OpMultiTransform , blockId , - 1 ) ;
createMenu ( GEOMOp : : OpExplodeBlock , blockId , - 1 ) ;
createMenu ( GEOMOp : : OpPropagate , blockId , - 1 ) ;
createMenu ( separator ( ) , operId , - 1 ) ;
createMenu ( GEOMOp : : OpPartition , operId , - 1 ) ;
createMenu ( GEOMOp : : OpArchimede , operId , - 1 ) ;
createMenu ( GEOMOp : : OpShapesOnShape , operId , - 1 ) ;
createMenu ( separator ( ) , operId , - 1 ) ;
createMenu ( GEOMOp : : OpFillet1d , operId , - 1 ) ;
createMenu ( GEOMOp : : OpFillet2d , operId , - 1 ) ;
createMenu ( GEOMOp : : OpFillet3d , operId , - 1 ) ;
createMenu ( GEOMOp : : OpChamfer , operId , - 1 ) ;
//createMenu( GEOMOp::OpClipping, operId, -1 );
2005-06-02 13:17:09 +06:00
int repairId = createMenu ( tr ( " MEN_REPAIR " ) , - 1 , - 1 , 10 ) ;
2010-03-01 00:53:08 +05:00
createMenu ( GEOMOp : : OpShapeProcess , repairId , - 1 ) ;
createMenu ( GEOMOp : : OpSuppressFaces , repairId , - 1 ) ;
createMenu ( GEOMOp : : OpCloseContour , repairId , - 1 ) ;
createMenu ( GEOMOp : : OpRemoveIntWires , repairId , - 1 ) ;
createMenu ( GEOMOp : : OpSuppressHoles , repairId , - 1 ) ;
createMenu ( GEOMOp : : OpSewing , repairId , - 1 ) ;
createMenu ( GEOMOp : : OpGlueFaces , repairId , - 1 ) ;
createMenu ( GEOMOp : : OpAddPointOnEdge , repairId , - 1 ) ;
//createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
//createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
createMenu ( GEOMOp : : OpOrientation , repairId , - 1 ) ;
createMenu ( GEOMOp : : OpRemoveExtraEdges , repairId , - 1 ) ;
2005-06-02 13:17:09 +06:00
int measurId = createMenu ( tr ( " MEN_MEASURES " ) , - 1 , - 1 , 10 ) ;
2010-03-01 00:53:08 +05:00
createMenu ( GEOMOp : : OpPointCoordinates , measurId , - 1 ) ;
createMenu ( GEOMOp : : OpProperties , measurId , - 1 ) ;
createMenu ( separator ( ) , measurId , - 1 ) ;
createMenu ( GEOMOp : : OpCenterMass , measurId , - 1 ) ;
createMenu ( GEOMOp : : OpInertia , measurId , - 1 ) ;
createMenu ( GEOMOp : : OpNormale , measurId , - 1 ) ;
createMenu ( separator ( ) , measurId , - 1 ) ;
createMenu ( GEOMOp : : OpFreeBoundaries , measurId , - 1 ) ;
createMenu ( GEOMOp : : OpFreeFaces , measurId , - 1 ) ;
createMenu ( separator ( ) , measurId , - 1 ) ;
2005-06-02 13:17:09 +06:00
int dimId = createMenu ( tr ( " MEN_DIMENSIONS " ) , measurId , - 1 ) ;
2010-03-01 00:53:08 +05:00
createMenu ( GEOMOp : : OpBoundingBox , dimId , - 1 ) ;
createMenu ( GEOMOp : : OpMinDistance , dimId , - 1 ) ;
createMenu ( GEOMOp : : OpAngle , dimId , - 1 ) ;
2008-03-07 12:45:34 +05:00
2010-03-01 00:53:08 +05:00
createMenu ( separator ( ) , measurId , - 1 ) ;
createMenu ( GEOMOp : : OpTolerance , measurId , - 1 ) ;
createMenu ( separator ( ) , measurId , - 1 ) ;
createMenu ( GEOMOp : : OpWhatIs , measurId , - 1 ) ;
createMenu ( GEOMOp : : OpCheckShape , measurId , - 1 ) ;
createMenu ( GEOMOp : : OpCheckCompound , measurId , - 1 ) ;
2005-06-02 13:17:09 +06:00
2008-03-07 12:45:34 +05:00
# ifdef _DEBUG_ // PAL16821
2005-08-02 18:43:40 +06:00
int toolsId = createMenu ( tr ( " MEN_TOOLS " ) , - 1 , - 1 , 50 ) ;
2010-03-01 00:53:08 +05:00
createMenu ( separator ( ) , toolsId , - 1 ) ;
createMenu ( GEOMOp : : OpCheckGeom , toolsId , - 1 ) ;
2008-03-07 12:45:34 +05:00
# endif
2005-06-02 13:17:09 +06:00
int viewId = createMenu ( tr ( " MEN_VIEW " ) , - 1 , - 1 ) ;
2010-03-01 00:53:08 +05:00
createMenu ( separator ( ) , viewId , - 1 ) ;
2005-06-02 13:17:09 +06:00
int dispmodeId = createMenu ( tr ( " MEN_DISPLAY_MODE " ) , viewId , - 1 ) ;
2010-03-01 00:53:08 +05:00
createMenu ( GEOMOp : : OpDisplayMode , dispmodeId , - 1 ) ;
createMenu ( separator ( ) , dispmodeId , - 1 ) ;
createMenu ( GEOMOp : : OpSwitchVectors , dispmodeId , - 1 ) ;
2008-03-07 12:45:34 +05:00
2010-03-01 00:53:08 +05:00
createMenu ( separator ( ) , viewId , - 1 ) ;
createMenu ( GEOMOp : : OpShowAll , viewId , - 1 ) ;
createMenu ( GEOMOp : : OpHideAll , viewId , - 1 ) ;
createMenu ( separator ( ) , viewId , - 1 ) ;
2005-12-01 15:05:15 +05:00
/*
PAL9111 :
because of these items are accessible through object browser and viewers
we have removed they from main menu
2010-03-01 00:53:08 +05:00
createMenu ( GEOMOp : : OpShow , viewId , - 1 ) ;
createMenu ( GEOMOp : : OpShowOnly , viewId , - 1 ) ;
createMenu ( GEOMOp : : OpHide , viewId , - 1 ) ;
2005-12-01 15:05:15 +05:00
*/
2005-06-02 13:17:09 +06:00
// ---- create toolbars --------------------------
int basicTbId = createTool ( tr ( " TOOL_BASIC " ) ) ;
2010-03-01 00:53:08 +05:00
createTool ( GEOMOp : : OpPoint , basicTbId ) ;
createTool ( GEOMOp : : OpLine , basicTbId ) ;
createTool ( GEOMOp : : OpCircle , basicTbId ) ;
createTool ( GEOMOp : : OpEllipse , basicTbId ) ;
createTool ( GEOMOp : : OpArc , basicTbId ) ;
createTool ( GEOMOp : : OpCurve , basicTbId ) ;
createTool ( GEOMOp : : OpVector , basicTbId ) ;
createTool ( GEOMOp : : OpPlane , basicTbId ) ;
createTool ( GEOMOp : : OpLCS , basicTbId ) ;
2005-06-02 13:17:09 +06:00
int primTbId = createTool ( tr ( " TOOL_PRIMITIVES " ) ) ;
2010-03-01 00:53:08 +05:00
createTool ( GEOMOp : : OpBox , primTbId ) ;
createTool ( GEOMOp : : OpCylinder , primTbId ) ;
createTool ( GEOMOp : : OpSphere , primTbId ) ;
createTool ( GEOMOp : : OpTorus , primTbId ) ;
createTool ( GEOMOp : : OpCone , primTbId ) ;
createTool ( GEOMOp : : OpRectangle , primTbId ) ;
createTool ( GEOMOp : : OpDisk , primTbId ) ;
2005-06-02 13:17:09 +06:00
int boolTbId = createTool ( tr ( " TOOL_BOOLEAN " ) ) ;
2010-03-01 00:53:08 +05:00
createTool ( GEOMOp : : OpFuse , boolTbId ) ;
createTool ( GEOMOp : : OpCommon , boolTbId ) ;
createTool ( GEOMOp : : OpCut , boolTbId ) ;
createTool ( GEOMOp : : OpSection , boolTbId ) ;
2005-06-02 13:17:09 +06:00
int genTbId = createTool ( tr ( " TOOL_GENERATION " ) ) ;
2010-03-01 00:53:08 +05:00
createTool ( GEOMOp : : OpPrism , genTbId ) ;
createTool ( GEOMOp : : OpRevolution , genTbId ) ;
createTool ( GEOMOp : : OpFilling , genTbId ) ;
createTool ( GEOMOp : : OpPipe , genTbId ) ;
2005-06-02 13:17:09 +06:00
int transTbId = createTool ( tr ( " TOOL_TRANSFORMATION " ) ) ;
2010-03-01 00:53:08 +05:00
createTool ( GEOMOp : : OpTranslate , transTbId ) ;
createTool ( GEOMOp : : OpRotate , transTbId ) ;
createTool ( GEOMOp : : OpChangeLoc , transTbId ) ;
createTool ( GEOMOp : : OpMirror , transTbId ) ;
createTool ( GEOMOp : : OpScale , transTbId ) ;
createTool ( GEOMOp : : OpOffset , transTbId ) ;
createTool ( separator ( ) , transTbId ) ;
createTool ( GEOMOp : : OpMultiTranslate , transTbId ) ;
createTool ( GEOMOp : : OpMultiRotate , transTbId ) ;
int operTbId = createTool ( tr ( " TOOL_OPERATIONS " ) ) ;
createTool ( GEOMOp : : Op2dSketcher , operTbId ) ;
createTool ( GEOMOp : : Op3dSketcher , operTbId ) ;
createTool ( separator ( ) , operTbId ) ;
createTool ( GEOMOp : : OpExplode , operTbId ) ;
createTool ( separator ( ) , operTbId ) ;
createTool ( GEOMOp : : OpPartition , operTbId ) ;
createTool ( GEOMOp : : OpArchimede , operTbId ) ;
createTool ( GEOMOp : : OpShapesOnShape , operTbId ) ;
createTool ( separator ( ) , operTbId ) ;
createTool ( GEOMOp : : OpFillet1d , operTbId ) ;
createTool ( GEOMOp : : OpFillet2d , operTbId ) ;
createTool ( GEOMOp : : OpFillet3d , operTbId ) ;
createTool ( GEOMOp : : OpChamfer , operTbId ) ;
int buildTbId = createTool ( tr ( " TOOL_BUILD " ) ) ;
createTool ( GEOMOp : : OpEdge , buildTbId ) ;
createTool ( GEOMOp : : OpWire , buildTbId ) ;
createTool ( GEOMOp : : OpFace , buildTbId ) ;
createTool ( GEOMOp : : OpShell , buildTbId ) ;
createTool ( GEOMOp : : OpSolid , buildTbId ) ;
createTool ( GEOMOp : : OpCompound , buildTbId ) ;
2005-06-02 13:17:09 +06:00
2010-04-19 21:10:21 +06:00
int measureTbId = createTool ( tr ( " TOOL_MEASURES " ) ) ;
createTool ( GEOMOp : : OpPointCoordinates , measureTbId ) ;
createTool ( GEOMOp : : OpProperties , measureTbId ) ;
createTool ( GEOMOp : : OpCenterMass , measureTbId ) ;
createTool ( GEOMOp : : OpInertia , measureTbId ) ;
createTool ( GEOMOp : : OpNormale , measureTbId ) ;
createTool ( separator ( ) , measureTbId ) ;
createTool ( GEOMOp : : OpBoundingBox , measureTbId ) ;
createTool ( GEOMOp : : OpMinDistance , measureTbId ) ;
createTool ( GEOMOp : : OpAngle , measureTbId ) ;
createTool ( GEOMOp : : OpTolerance , measureTbId ) ;
createTool ( separator ( ) , measureTbId ) ;
createTool ( GEOMOp : : OpFreeBoundaries , measureTbId ) ;
createTool ( GEOMOp : : OpFreeFaces , measureTbId ) ;
createTool ( separator ( ) , measureTbId ) ;
createTool ( GEOMOp : : OpWhatIs , measureTbId ) ;
createTool ( GEOMOp : : OpCheckShape , measureTbId ) ;
createTool ( GEOMOp : : OpCheckCompound , measureTbId ) ;
2010-03-10 17:54:49 +05:00
int advancedTbId = createTool ( tr ( " TOOL_ADVANCED " ) ) ;
2010-04-15 23:41:44 +06:00
createTool ( GEOMOp : : OpPipeTShape , advancedTbId ) ;
2010-03-10 17:54:49 +05:00
//@@ insert new functions before this line @@//
2008-03-07 12:45:34 +05:00
// ---- create popup menus --------------------------
QString clientOCCorVTK = " (client='OCCViewer' or client='VTKViewer') " ;
QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible " ;
QString clientOCCorVTKorOB = " (client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') " ;
QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible " ;
QString autoColorPrefix =
" (client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true " ;
2005-06-02 13:17:09 +06:00
QtxPopupMgr * mgr = popupMgr ( ) ;
2010-03-01 00:53:08 +05:00
mgr - > insert ( action ( GEOMOp : : OpRename ) , - 1 , - 1 ) ; // rename
mgr - > setRule ( action ( GEOMOp : : OpRename ) , QString ( " $type in {'Shape' 'Group'} and selcount=1 " ) , QtxPopupMgr : : VisibleRule ) ;
mgr - > insert ( action ( GEOMOp : : OpDelete ) , - 1 , - 1 ) ; // delete
mgr - > setRule ( action ( GEOMOp : : OpDelete ) , QString ( " $type in {'Shape' 'Group'} and selcount>0 " ) , QtxPopupMgr : : VisibleRule ) ;
mgr - > insert ( action ( GEOMOp : : OpGroupCreatePopup ) , - 1 , - 1 ) ; // create group
mgr - > setRule ( action ( GEOMOp : : OpGroupCreatePopup ) , QString ( " client='ObjectBrowser' and type='Shape' and selcount=1 and isOCC=true " ) , QtxPopupMgr : : VisibleRule ) ;
mgr - > insert ( action ( GEOMOp : : OpShowChildren ) , - 1 , - 1 ) ; // show children
mgr - > setRule ( action ( GEOMOp : : OpShowChildren ) , QString ( " client='ObjectBrowser' and type='Shape' and selcount=1 and hasHiddenChildren=true " ) , QtxPopupMgr : : VisibleRule ) ;
mgr - > insert ( action ( GEOMOp : : OpHideChildren ) , - 1 , - 1 ) ; // hide children
mgr - > setRule ( action ( GEOMOp : : OpHideChildren ) , QString ( " client='ObjectBrowser' and type='Shape' and selcount=1 and hasShownChildren=true " ) , QtxPopupMgr : : VisibleRule ) ;
mgr - > insert ( action ( GEOMOp : : OpGroupEdit ) , - 1 , - 1 ) ; // edit group
mgr - > setRule ( action ( GEOMOp : : OpGroupEdit ) , QString ( " client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true " ) , QtxPopupMgr : : VisibleRule ) ;
2008-03-07 12:45:34 +05:00
mgr - > insert ( separator ( ) , - 1 , - 1 ) ; // -----------
2005-06-02 13:17:09 +06:00
dispmodeId = mgr - > insert ( tr ( " MEN_DISPLAY_MODE " ) , - 1 , - 1 ) ; // display mode menu
2010-03-01 00:53:08 +05:00
mgr - > insert ( action ( GEOMOp : : OpWireframe ) , dispmodeId , - 1 ) ; // wireframe
mgr - > setRule ( action ( GEOMOp : : OpWireframe ) , clientOCCorVTK_AndSomeVisible , QtxPopupMgr : : VisibleRule ) ;
mgr - > setRule ( action ( GEOMOp : : OpWireframe ) , clientOCCorVTK + " and displaymode='Wireframe' " , QtxPopupMgr : : ToggleRule ) ;
mgr - > insert ( action ( GEOMOp : : OpShading ) , dispmodeId , - 1 ) ; // shading
mgr - > setRule ( action ( GEOMOp : : OpShading ) , clientOCCorVTK_AndSomeVisible , QtxPopupMgr : : VisibleRule ) ;
mgr - > setRule ( action ( GEOMOp : : OpShading ) , clientOCCorVTK + " and displaymode='Shading' " , QtxPopupMgr : : ToggleRule ) ;
2009-07-08 16:18:07 +06:00
mgr - > insert ( separator ( ) , dispmodeId , - 1 ) ;
2010-03-01 00:53:08 +05:00
mgr - > insert ( action ( GEOMOp : : OpVectors ) , dispmodeId , - 1 ) ; // vectors
mgr - > setRule ( action ( GEOMOp : : OpVectors ) , clientOCCorVTK_AndSomeVisible , QtxPopupMgr : : VisibleRule ) ;
mgr - > setRule ( action ( GEOMOp : : OpVectors ) , clientOCCorVTK + " and isVectorsMode " , QtxPopupMgr : : ToggleRule ) ;
2008-03-07 12:45:34 +05:00
mgr - > insert ( separator ( ) , - 1 , - 1 ) ; // -----------
2010-03-01 00:53:08 +05:00
mgr - > insert ( action ( GEOMOp : : OpColor ) , - 1 , - 1 ) ; // color
mgr - > setRule ( action ( GEOMOp : : OpColor ) , clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'}) " , QtxPopupMgr : : VisibleRule ) ;
mgr - > insert ( action ( GEOMOp : : OpTransparency ) , - 1 , - 1 ) ; // transparency
mgr - > setRule ( action ( GEOMOp : : OpTransparency ) , clientOCCorVTK_AndSomeVisible , QtxPopupMgr : : VisibleRule ) ;
mgr - > insert ( action ( GEOMOp : : OpIsos ) , - 1 , - 1 ) ; // isos
mgr - > setRule ( action ( GEOMOp : : OpIsos ) , clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible " , QtxPopupMgr : : VisibleRule ) ;
mgr - > insert ( action ( GEOMOp : : OpDeflection ) , - 1 , - 1 ) ; // deflection
2010-04-23 14:34:14 +06:00
mgr - > setRule ( action ( GEOMOp : : OpDeflection ) , " selcount>0 and isVisible and client='OCCViewer' " , QtxPopupMgr : : VisibleRule ) ;
2010-03-01 00:53:08 +05:00
mgr - > insert ( action ( GEOMOp : : OpPointMarker ) , - 1 , - 1 ) ; // point marker
mgr - > setRule ( action ( GEOMOp : : OpPointMarker ) , QString ( " selcount>0 and $typeid in {%1} " ) . arg ( GEOM_POINT ) , QtxPopupMgr : : VisibleRule ) ;
2008-03-07 12:45:34 +05:00
mgr - > insert ( separator ( ) , - 1 , - 1 ) ; // -----------
2010-03-01 00:53:08 +05:00
mgr - > insert ( action ( GEOMOp : : OpAutoColor ) , - 1 , - 1 ) ; // auto color
mgr - > setRule ( action ( GEOMOp : : OpAutoColor ) , autoColorPrefix + " and isAutoColor=false " , QtxPopupMgr : : VisibleRule ) ;
mgr - > insert ( action ( GEOMOp : : OpNoAutoColor ) , - 1 , - 1 ) ; // disable auto color
mgr - > setRule ( action ( GEOMOp : : OpNoAutoColor ) , autoColorPrefix + " and isAutoColor=true " , QtxPopupMgr : : VisibleRule ) ;
2008-03-07 12:45:34 +05:00
mgr - > insert ( separator ( ) , - 1 , - 1 ) ; // -----------
2005-12-01 15:05:15 +05:00
QString canDisplay = " ($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) " ,
onlyComponent = " ((type='Component') and selcount=1) " ,
rule = canDisplay + " and ((($type in {%1}) and( %2 )) or " + onlyComponent + " ) " ,
types = " 'Shape' 'Group' " ;
2010-03-01 00:53:08 +05:00
mgr - > insert ( action ( GEOMOp : : OpShow ) , - 1 , - 1 ) ; // display
mgr - > setRule ( action ( GEOMOp : : OpShow ) , rule . arg ( types ) . arg ( " not isVisible " ) , QtxPopupMgr : : VisibleRule ) ;
2005-12-01 15:05:15 +05:00
2010-03-01 00:53:08 +05:00
mgr - > insert ( action ( GEOMOp : : OpHide ) , - 1 , - 1 ) ; // erase
mgr - > setRule ( action ( GEOMOp : : OpHide ) , rule . arg ( types ) . arg ( " isVisible " ) , QtxPopupMgr : : VisibleRule ) ;
2005-12-01 15:05:15 +05:00
2010-03-01 00:53:08 +05:00
mgr - > insert ( action ( GEOMOp : : OpHideAll ) , - 1 , - 1 ) ; // erase All
mgr - > setRule ( action ( GEOMOp : : OpHideAll ) , clientOCCorVTK , QtxPopupMgr : : VisibleRule ) ;
2008-03-07 12:45:34 +05:00
QString selectOnly = " (client='OCCViewer' or client='VTKViewer') and (selcount=0) " ;
2010-04-15 23:41:44 +06:00
int selectonlyId = mgr - > insert ( tr ( " MEN_SELECT_ONLY " ) , - 1 , - 1 ) ; //select only menu
mgr - > insert ( action ( GEOMOp : : OpSelectVertex ) , selectonlyId , - 1 ) ; //Vertex
2010-03-01 00:53:08 +05:00
mgr - > setRule ( action ( GEOMOp : : OpSelectVertex ) , selectOnly , QtxPopupMgr : : VisibleRule ) ;
mgr - > setRule ( action ( GEOMOp : : OpSelectVertex ) , selectOnly + " and selectionmode='VERTEX' " , QtxPopupMgr : : ToggleRule ) ;
2010-04-15 23:41:44 +06:00
mgr - > insert ( action ( GEOMOp : : OpSelectEdge ) , selectonlyId , - 1 ) ; //Edge
2010-03-01 00:53:08 +05:00
mgr - > setRule ( action ( GEOMOp : : OpSelectEdge ) , selectOnly , QtxPopupMgr : : VisibleRule ) ;
mgr - > setRule ( action ( GEOMOp : : OpSelectEdge ) , selectOnly + " and selectionmode='EDGE' " , QtxPopupMgr : : ToggleRule ) ;
2010-04-15 23:41:44 +06:00
mgr - > insert ( action ( GEOMOp : : OpSelectWire ) , selectonlyId , - 1 ) ; //Wire
2010-03-01 00:53:08 +05:00
mgr - > setRule ( action ( GEOMOp : : OpSelectWire ) , selectOnly , QtxPopupMgr : : VisibleRule ) ;
mgr - > setRule ( action ( GEOMOp : : OpSelectWire ) , selectOnly + " and selectionmode='WIRE' " , QtxPopupMgr : : ToggleRule ) ;
2010-04-15 23:41:44 +06:00
mgr - > insert ( action ( GEOMOp : : OpSelectFace ) , selectonlyId , - 1 ) ; //Face
2010-03-01 00:53:08 +05:00
mgr - > setRule ( action ( GEOMOp : : OpSelectFace ) , selectOnly , QtxPopupMgr : : VisibleRule ) ;
mgr - > setRule ( action ( GEOMOp : : OpSelectFace ) , selectOnly + " and selectionmode='FACE' " , QtxPopupMgr : : ToggleRule ) ;
2010-04-15 23:41:44 +06:00
mgr - > insert ( action ( GEOMOp : : OpSelectShell ) , selectonlyId , - 1 ) ; //Shell
2010-03-01 00:53:08 +05:00
mgr - > setRule ( action ( GEOMOp : : OpSelectShell ) , selectOnly , QtxPopupMgr : : VisibleRule ) ;
mgr - > setRule ( action ( GEOMOp : : OpSelectShell ) , selectOnly + " and selectionmode='SHELL' " , QtxPopupMgr : : ToggleRule ) ;
2010-04-15 23:41:44 +06:00
mgr - > insert ( action ( GEOMOp : : OpSelectSolid ) , selectonlyId , - 1 ) ; //Solid
2010-03-01 00:53:08 +05:00
mgr - > setRule ( action ( GEOMOp : : OpSelectSolid ) , selectOnly , QtxPopupMgr : : VisibleRule ) ;
mgr - > setRule ( action ( GEOMOp : : OpSelectSolid ) , selectOnly + " and selectionmode='SOLID' " , QtxPopupMgr : : ToggleRule ) ;
2010-04-15 23:41:44 +06:00
mgr - > insert ( action ( GEOMOp : : OpSelectCompound ) , selectonlyId , - 1 ) ; //Compound
2010-03-01 00:53:08 +05:00
mgr - > setRule ( action ( GEOMOp : : OpSelectCompound ) , selectOnly , QtxPopupMgr : : VisibleRule ) ;
mgr - > setRule ( action ( GEOMOp : : OpSelectCompound ) , selectOnly + " and selectionmode='COMPOUND' " , QtxPopupMgr : : ToggleRule ) ;
2010-04-15 23:41:44 +06:00
mgr - > insert ( separator ( ) , selectonlyId , - 1 ) ;
mgr - > insert ( action ( GEOMOp : : OpSelectAll ) , selectonlyId , - 1 ) ; //Clear selection filter
2010-03-01 00:53:08 +05:00
mgr - > setRule ( action ( GEOMOp : : OpSelectAll ) , selectOnly , QtxPopupMgr : : VisibleRule ) ;
mgr - > setRule ( action ( GEOMOp : : OpSelectAll ) , selectOnly + " and selectionmode='ALL' " , QtxPopupMgr : : ToggleRule ) ;
mgr - > insert ( action ( GEOMOp : : OpShowOnly ) , - 1 , - 1 ) ; // display only
mgr - > setRule ( action ( GEOMOp : : OpShowOnly ) , rule . arg ( types ) . arg ( " true " ) , QtxPopupMgr : : VisibleRule ) ;
2005-06-08 18:39:43 +06:00
mgr - > insert ( separator ( ) , - 1 , - 1 ) ;
2005-11-09 19:21:30 +05:00
mgr - > hide ( mgr - > actionId ( action ( myEraseAll ) ) ) ;
2005-06-02 13:17:09 +06:00
}
//=======================================================================
2006-05-10 20:27:12 +06:00
// function : GeometryGUI::activateModule()
// purpose : Called when GEOM module is activated
2005-06-02 13:17:09 +06:00
//=======================================================================
2005-06-08 18:39:43 +06:00
bool GeometryGUI : : activateModule ( SUIT_Study * study )
2005-06-02 13:17:09 +06:00
{
2005-06-08 18:39:43 +06:00
if ( CORBA : : is_nil ( myComponentGeom ) )
return false ;
bool res = SalomeApp_Module : : activateModule ( study ) ;
if ( ! res )
return false ;
2005-06-02 13:17:09 +06:00
setMenuShown ( true ) ;
setToolShown ( true ) ;
2010-04-12 13:09:08 +06:00
// import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
PyGILState_STATE gstate = PyGILState_Ensure ( ) ;
PyObject * pluginsmanager = PyImport_ImportModule ( ( char * ) " salome_pluginsmanager " ) ;
if ( pluginsmanager = = NULL )
PyErr_Print ( ) ;
else
{
PyObject * result = PyObject_CallMethod ( pluginsmanager , ( char * ) " initialize " , ( char * ) " isss " , 1 , " geom " , " New Entity " , " Other " ) ;
if ( result = = NULL )
PyErr_Print ( ) ;
Py_XDECREF ( result ) ;
}
PyGILState_Release ( gstate ) ;
// end of GEOM plugins loading
2006-05-10 20:27:12 +06:00
connect ( application ( ) - > desktop ( ) , SIGNAL ( windowActivated ( SUIT_ViewWindow * ) ) ,
2009-12-25 16:28:58 +05:00
this , SLOT ( onWindowActivated ( SUIT_ViewWindow * ) ) ) ;
2005-06-02 13:17:09 +06:00
2006-05-10 20:27:12 +06:00
// Reset actions accelerator keys
2010-03-01 00:53:08 +05:00
action ( GEOMOp : : OpImport ) - > setEnabled ( true ) ; // Import: CTRL + Key_I
action ( GEOMOp : : OpExport ) - > setEnabled ( true ) ; // Export: CTRL + Key_E
action ( GEOMOp : : OpDelete ) - > setEnabled ( true ) ; // Delete: Key_Delete
action ( GEOMOp : : OpRename ) - > setEnabled ( true ) ; // Rename: Key_F2
2006-05-10 20:27:12 +06:00
2004-12-01 15:39:14 +05:00
GUIMap : : Iterator it ;
2005-06-02 13:17:09 +06:00
for ( it = myGUIMap . begin ( ) ; it ! = myGUIMap . end ( ) ; + + it )
2009-02-13 17:16:39 +05:00
it . value ( ) - > activate ( application ( ) - > desktop ( ) ) ;
2005-06-02 13:17:09 +06:00
2005-11-03 13:30:14 +05:00
LightApp_SelectionMgr * sm = getApp ( ) - > selectionMgr ( ) ;
2009-02-13 17:16:39 +05:00
2005-06-02 13:17:09 +06:00
SUIT_ViewManager * vm ;
ViewManagerList OCCViewManagers , VTKViewManagers ;
2009-02-13 17:16:39 +05:00
2005-06-02 13:17:09 +06:00
application ( ) - > viewManagers ( OCCViewer_Viewer : : Type ( ) , OCCViewManagers ) ;
2009-02-13 17:16:39 +05:00
QListIterator < SUIT_ViewManager * > itOCC ( OCCViewManagers ) ;
while ( itOCC . hasNext ( ) & & ( vm = itOCC . next ( ) ) )
2005-06-02 13:17:09 +06:00
myOCCSelectors . append ( new GEOMGUI_OCCSelector ( ( ( OCCViewer_ViewManager * ) vm ) - > getOCCViewer ( ) , sm ) ) ;
2009-02-13 17:16:39 +05:00
2005-10-05 12:28:23 +06:00
application ( ) - > viewManagers ( SVTK_Viewer : : Type ( ) , VTKViewManagers ) ;
2009-02-13 17:16:39 +05:00
QListIterator < SUIT_ViewManager * > itVTK ( VTKViewManagers ) ;
while ( itVTK . hasNext ( ) & & ( vm = itVTK . next ( ) ) )
2005-11-03 13:30:14 +05:00
myVTKSelectors . append ( new LightApp_VTKSelector ( dynamic_cast < SVTK_Viewer * > ( vm - > getViewModel ( ) ) , sm ) ) ;
2005-06-02 13:17:09 +06:00
2009-02-13 17:16:39 +05:00
//NPAL 19674
SALOME_ListIO selected ;
sm - > selectedObjects ( selected ) ;
sm - > clearSelected ( ) ;
2005-06-08 15:27:11 +06:00
// disable OCC selectors
2009-02-13 17:16:39 +05:00
getApp ( ) - > selectionMgr ( ) - > setEnabled ( false , OCCViewer_Viewer : : Type ( ) ) ;
QListIterator < GEOMGUI_OCCSelector * > itOCCSel ( myOCCSelectors ) ;
while ( itOCCSel . hasNext ( ) )
if ( GEOMGUI_OCCSelector * sr = itOCCSel . next ( ) )
sr - > setEnabled ( true ) ;
2006-05-10 20:27:12 +06:00
2005-06-08 15:27:11 +06:00
// disable VTK selectors
2009-02-13 17:16:39 +05:00
getApp ( ) - > selectionMgr ( ) - > setEnabled ( false , SVTK_Viewer : : Type ( ) ) ;
QListIterator < LightApp_VTKSelector * > itVTKSel ( myVTKSelectors ) ;
while ( itVTKSel . hasNext ( ) )
if ( LightApp_VTKSelector * sr = itVTKSel . next ( ) )
sr - > setEnabled ( true ) ;
sm - > setSelectedObjects ( selected , true ) ; //NPAL 19674
2006-05-10 20:27:12 +06:00
2009-07-08 16:18:07 +06:00
QMenu * viewMenu = menuMgr ( ) - > findMenu ( STD_Application : : MenuViewId ) ;
if ( viewMenu )
connect ( viewMenu , SIGNAL ( aboutToShow ( ) ) , this , SLOT ( onViewAboutToShow ( ) ) ) ;
2005-06-08 18:39:43 +06:00
return true ;
2005-06-02 13:17:09 +06:00
}
//=======================================================================
2006-05-10 20:27:12 +06:00
// function : GeometryGUI::deactivateModule()
// purpose : Called when GEOM module is deactivated
2005-06-02 13:17:09 +06:00
//=======================================================================
2005-06-08 18:39:43 +06:00
bool GeometryGUI : : deactivateModule ( SUIT_Study * study )
2005-06-02 13:17:09 +06:00
{
2009-07-08 16:18:07 +06:00
QMenu * viewMenu = menuMgr ( ) - > findMenu ( STD_Application : : MenuViewId ) ;
if ( viewMenu )
disconnect ( viewMenu , SIGNAL ( aboutToShow ( ) ) , this , SLOT ( onViewAboutToShow ( ) ) ) ;
2005-06-02 13:17:09 +06:00
setMenuShown ( false ) ;
setToolShown ( false ) ;
2008-03-07 12:45:34 +05:00
disconnect ( application ( ) - > desktop ( ) , SIGNAL ( windowActivated ( SUIT_ViewWindow * ) ) ,
2009-12-25 16:28:58 +05:00
this , SLOT ( onWindowActivated ( SUIT_ViewWindow * ) ) ) ;
2005-06-02 13:17:09 +06:00
EmitSignalCloseAllDialogs ( ) ;
GUIMap : : Iterator it ;
for ( it = myGUIMap . begin ( ) ; it ! = myGUIMap . end ( ) ; + + it )
2009-02-13 17:16:39 +05:00
it . value ( ) - > deactivate ( ) ;
2005-06-02 13:17:09 +06:00
2006-05-10 20:27:12 +06:00
// Unset actions accelerator keys
2010-03-01 00:53:08 +05:00
action ( GEOMOp : : OpImport ) - > setEnabled ( false ) ; // Import: CTRL + Key_I
action ( GEOMOp : : OpExport ) - > setEnabled ( false ) ; // Export: CTRL + Key_E
action ( GEOMOp : : OpDelete ) - > setEnabled ( false ) ; // Delete: Key_Delete
action ( GEOMOp : : OpRename ) - > setEnabled ( false ) ; // Rename: Key_F2
2006-05-10 20:27:12 +06:00
2009-02-13 17:16:39 +05:00
qDeleteAll ( myOCCSelectors ) ;
2005-06-02 13:17:09 +06:00
myOCCSelectors . clear ( ) ;
getApp ( ) - > selectionMgr ( ) - > setEnabled ( true , OCCViewer_Viewer : : Type ( ) ) ;
2009-02-13 17:16:39 +05:00
qDeleteAll ( myVTKSelectors ) ;
2005-06-02 13:17:09 +06:00
myVTKSelectors . clear ( ) ;
2005-10-05 12:28:23 +06:00
getApp ( ) - > selectionMgr ( ) - > setEnabled ( true , SVTK_Viewer : : Type ( ) ) ;
2005-06-02 13:17:09 +06:00
2005-06-08 18:39:43 +06:00
return SalomeApp_Module : : deactivateModule ( study ) ;
2004-12-01 15:39:14 +05:00
}
2003-05-12 21:24:23 +06:00
2005-06-02 13:17:09 +06:00
//=======================================================================
2006-05-10 20:27:12 +06:00
// function : onWindowActivated()
2005-06-02 13:17:09 +06:00
// purpose : update menu items' status - disable non-OCC-viewer-compatible actions
//=======================================================================
void GeometryGUI : : onWindowActivated ( SUIT_ViewWindow * win )
{
if ( ! win )
return ;
2003-05-12 21:24:23 +06:00
2005-06-02 13:17:09 +06:00
const bool ViewOCC = ( win - > getViewManager ( ) - > getType ( ) = = OCCViewer_Viewer : : Type ( ) ) ;
2009-02-13 17:16:39 +05:00
//const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
2008-03-07 12:45:34 +05:00
2005-06-02 13:17:09 +06:00
// disable non-OCC viewframe menu commands
2010-03-01 00:53:08 +05:00
// action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
action ( GEOMOp : : OpSuppressFaces ) - > setEnabled ( ViewOCC ) ; // SuppressFace
action ( GEOMOp : : OpSuppressHoles ) - > setEnabled ( ViewOCC ) ; // SuppressHole
action ( GEOMOp : : OpCloseContour ) - > setEnabled ( ViewOCC ) ; // CloseContour
action ( GEOMOp : : OpRemoveIntWires ) - > setEnabled ( ViewOCC ) ; // RemoveInternalWires
action ( GEOMOp : : OpAddPointOnEdge ) - > setEnabled ( ViewOCC ) ; // AddPointOnEdge
// action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
action ( GEOMOp : : OpGroupCreate ) - > setEnabled ( ViewOCC ) ; // Create Group
action ( GEOMOp : : OpGroupEdit ) - > setEnabled ( ViewOCC ) ; // Edit Group
action ( GEOMOp : : OpMultiTransform ) - > setEnabled ( ViewOCC ) ; // MENU BLOCKS - MULTI-TRANSFORMATION
2005-06-02 13:17:09 +06:00
}
2004-01-07 20:46:21 +05:00
2005-06-02 13:17:09 +06:00
void GeometryGUI : : windows ( QMap < int , int > & mappa ) const
{
2009-02-13 17:16:39 +05:00
mappa . insert ( SalomeApp_Application : : WT_ObjectBrowser , Qt : : LeftDockWidgetArea ) ;
mappa . insert ( SalomeApp_Application : : WT_PyConsole , Qt : : BottomDockWidgetArea ) ;
2005-06-02 13:17:09 +06:00
}
2004-06-16 21:24:55 +06:00
2005-06-02 13:17:09 +06:00
void GeometryGUI : : viewManagers ( QStringList & lst ) const
{
lst . append ( OCCViewer_Viewer : : Type ( ) ) ;
}
2004-06-16 21:24:55 +06:00
2005-06-02 13:17:09 +06:00
void GeometryGUI : : onViewManagerAdded ( SUIT_ViewManager * vm )
{
if ( vm - > getType ( ) = = OCCViewer_Viewer : : Type ( ) )
{
2006-03-13 20:11:51 +05:00
qDebug ( " connect " ) ;
connect ( vm , SIGNAL ( keyPress ( SUIT_ViewWindow * , QKeyEvent * ) ) ,
2009-12-25 16:28:58 +05:00
this , SLOT ( OnKeyPress ( SUIT_ViewWindow * , QKeyEvent * ) ) ) ;
2006-03-13 20:11:51 +05:00
connect ( vm , SIGNAL ( mousePress ( SUIT_ViewWindow * , QMouseEvent * ) ) ,
2009-12-25 16:28:58 +05:00
this , SLOT ( OnMousePress ( SUIT_ViewWindow * , QMouseEvent * ) ) ) ;
2006-03-13 20:11:51 +05:00
connect ( vm , SIGNAL ( mouseMove ( SUIT_ViewWindow * , QMouseEvent * ) ) ,
2009-12-25 16:28:58 +05:00
this , SLOT ( OnMouseMove ( SUIT_ViewWindow * , QMouseEvent * ) ) ) ;
2006-03-13 20:11:51 +05:00
2005-11-03 13:30:14 +05:00
LightApp_SelectionMgr * sm = getApp ( ) - > selectionMgr ( ) ;
2005-06-02 13:17:09 +06:00
myOCCSelectors . append ( new GEOMGUI_OCCSelector ( ( ( OCCViewer_ViewManager * ) vm ) - > getOCCViewer ( ) , sm ) ) ;
2005-06-08 15:27:11 +06:00
// disable OCC selectors
getApp ( ) - > selectionMgr ( ) - > setEnabled ( false , OCCViewer_Viewer : : Type ( ) ) ;
2009-02-13 17:16:39 +05:00
QListIterator < GEOMGUI_OCCSelector * > itOCCSel ( myOCCSelectors ) ;
while ( itOCCSel . hasNext ( ) )
if ( GEOMGUI_OCCSelector * sr = itOCCSel . next ( ) )
2009-12-25 16:28:58 +05:00
sr - > setEnabled ( true ) ;
2005-06-02 13:17:09 +06:00
}
2005-10-05 12:28:23 +06:00
else if ( vm - > getType ( ) = = SVTK_Viewer : : Type ( ) )
2005-06-02 13:17:09 +06:00
{
2005-11-03 13:30:14 +05:00
LightApp_SelectionMgr * sm = getApp ( ) - > selectionMgr ( ) ;
myVTKSelectors . append ( new LightApp_VTKSelector ( dynamic_cast < SVTK_Viewer * > ( vm - > getViewModel ( ) ) , sm ) ) ;
2005-06-08 15:27:11 +06:00
// disable VTK selectors
2005-10-05 12:28:23 +06:00
getApp ( ) - > selectionMgr ( ) - > setEnabled ( false , SVTK_Viewer : : Type ( ) ) ;
2009-02-13 17:16:39 +05:00
QListIterator < LightApp_VTKSelector * > itVTKSel ( myVTKSelectors ) ;
while ( itVTKSel . hasNext ( ) )
if ( LightApp_VTKSelector * sr = itVTKSel . next ( ) )
2009-12-25 16:28:58 +05:00
sr - > setEnabled ( true ) ;
2005-06-02 13:17:09 +06:00
}
2003-05-12 21:24:23 +06:00
}
2005-06-02 13:17:09 +06:00
void GeometryGUI : : onViewManagerRemoved ( SUIT_ViewManager * vm )
{
SUIT_ViewModel * viewer = vm - > getViewModel ( ) ;
if ( vm - > getType ( ) = = OCCViewer_Viewer : : Type ( ) )
{
2009-02-13 17:16:39 +05:00
QListIterator < GEOMGUI_OCCSelector * > itOCCSel ( myOCCSelectors ) ;
while ( itOCCSel . hasNext ( ) )
if ( GEOMGUI_OCCSelector * sr = itOCCSel . next ( ) )
2009-12-25 16:28:58 +05:00
if ( sr - > viewer ( ) = = viewer )
{
delete myOCCSelectors . takeAt ( myOCCSelectors . indexOf ( sr ) ) ;
break ;
}
2005-06-02 13:17:09 +06:00
}
2005-10-05 12:28:23 +06:00
if ( vm - > getType ( ) = = SVTK_Viewer : : Type ( ) )
2005-06-02 13:17:09 +06:00
{
2009-02-13 17:16:39 +05:00
QListIterator < LightApp_VTKSelector * > itVTKSel ( myVTKSelectors ) ;
while ( itVTKSel . hasNext ( ) )
if ( LightApp_VTKSelector * sr = itVTKSel . next ( ) )
2009-12-25 16:28:58 +05:00
if ( sr - > viewer ( ) = = viewer )
{
delete myVTKSelectors . takeAt ( myVTKSelectors . indexOf ( sr ) ) ;
break ;
}
2005-06-02 13:17:09 +06:00
}
}
QString GeometryGUI : : engineIOR ( ) const
2003-05-12 21:24:23 +06:00
{
2005-06-02 13:17:09 +06:00
if ( ! CORBA : : is_nil ( GetGeomGen ( ) ) )
return QString ( getApp ( ) - > orb ( ) - > object_to_string ( GetGeomGen ( ) ) ) ;
2009-02-13 17:16:39 +05:00
return " " ;
2003-05-12 21:24:23 +06:00
}
2009-12-08 17:05:55 +05:00
Handle ( Graphic3d_HArray1OfBytes ) GeometryGUI : : getTexture ( SalomeApp_Study * theStudy , int theId , int & theWidth , int & theHeight )
{
theWidth = theHeight = 0 ;
Handle ( Graphic3d_HArray1OfBytes ) aTexture ;
if ( theStudy ) {
TextureMap aTextureMap = myTextureMap [ theStudy - > studyDS ( ) - > StudyId ( ) ] ;
aTexture = aTextureMap [ theId ] ;
if ( aTexture . IsNull ( ) ) {
GEOM : : GEOM_IInsertOperations_var aInsOp = GeometryGUI : : GetGeomGen ( ) - > GetIInsertOperations ( theStudy - > studyDS ( ) - > StudyId ( ) ) ;
if ( ! aInsOp - > _is_nil ( ) ) {
2009-12-25 16:28:58 +05:00
CORBA : : Long aWidth , aHeight ;
SALOMEDS : : TMPFile_var aStream = aInsOp - > GetTexture ( theId , aWidth , aHeight ) ;
if ( aWidth > 0 & & aHeight > 0 & & aStream - > length ( ) > 0 ) {
theWidth = aWidth ;
theHeight = aHeight ;
aTexture = new Graphic3d_HArray1OfBytes ( 1 , aStream - > length ( ) ) ;
for ( int i = 0 ; i < aStream - > length ( ) ; i + + )
aTexture - > SetValue ( i + 1 , ( Standard_Byte ) aStream [ i ] ) ;
aTextureMap [ theId ] = aTexture ;
}
2009-12-08 17:05:55 +05:00
}
}
}
return aTexture ;
}
2005-11-03 13:30:14 +05:00
LightApp_Selection * GeometryGUI : : createSelection ( ) const
2003-05-12 21:24:23 +06:00
{
2005-06-02 13:17:09 +06:00
return new GEOMGUI_Selection ( ) ;
2004-06-16 21:24:55 +06:00
}
2005-06-02 13:17:09 +06:00
2009-02-13 17:16:39 +05:00
void GeometryGUI : : contextMenuPopup ( const QString & client , QMenu * menu , QString & title )
2005-06-03 16:41:52 +06:00
{
2009-02-13 17:16:39 +05:00
SalomeApp_Module : : contextMenuPopup ( client , menu , title ) ;
2005-06-03 16:41:52 +06:00
SALOME_ListIO lst ;
2009-02-13 17:16:39 +05:00
getApp ( ) - > selectionMgr ( ) - > selectedObjects ( lst ) ;
if ( lst . Extent ( ) < 1 )
return ;
SalomeApp_Study * appStudy = dynamic_cast < SalomeApp_Study * > ( application ( ) - > activeStudy ( ) ) ;
_PTR ( Study ) study = appStudy - > studyDS ( ) ;
bool isImported = true ;
SALOME_ListIteratorOfListIO anIt ( lst ) ;
for ( ; anIt . More ( ) & & isImported ; anIt . Next ( ) ) {
Handle ( SALOME_InteractiveObject ) io = anIt . Value ( ) ;
_PTR ( SObject ) aSObj = study - > FindObjectID ( io - > getEntry ( ) ) ;
if ( aSObj ) {
if ( lst . Extent ( ) = = 1 ) {
// Set context menu title
if ( client = = " OCCViewer " | | client = = " VTKViewer " )
title = QString ( aSObj - > GetName ( ) . c_str ( ) ) ;
}
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 )
isImported = false ;
2010-02-05 14:29:39 +05:00
} else {
isImported = false ;
2009-02-13 17:16:39 +05:00
}
}
if ( isImported ) {
2010-03-01 00:53:08 +05:00
menu - > addAction ( action ( GEOMOp : : OpReimport ) ) ; // Reload imported shape
2005-06-03 16:41:52 +06:00
}
}
2005-06-22 12:29:29 +06:00
void GeometryGUI : : createPreferences ( )
{
int tabId = addPreference ( tr ( " PREF_TAB_SETTINGS " ) ) ;
int genGroup = addPreference ( tr ( " PREF_GROUP_GENERAL " ) , tabId ) ;
2009-02-13 17:16:39 +05:00
setPreferenceProperty ( genGroup , " columns " , 2 ) ;
2008-03-07 12:45:34 +05:00
int dispmode = addPreference ( tr ( " PREF_DISPLAY_MODE " ) , genGroup ,
2009-12-25 16:28:58 +05:00
LightApp_Preferences : : Selector ,
" Geometry " , " display_mode " ) ;
2008-03-07 12:45:34 +05:00
2005-06-22 12:29:29 +06:00
addPreference ( tr ( " PREF_SHADING_COLOR " ) , genGroup ,
2009-12-25 16:28:58 +05:00
LightApp_Preferences : : Color , " Geometry " , " shading_color " ) ;
2008-03-07 12:45:34 +05:00
addPreference ( tr ( " PREF_WIREFRAME_COLOR " ) , genGroup ,
2009-12-25 16:28:58 +05:00
LightApp_Preferences : : Color , " Geometry " , " wireframe_color " ) ;
2008-03-07 12:45:34 +05:00
addPreference ( tr ( " PREF_FREE_BOUND_COLOR " ) , genGroup ,
2009-12-25 16:28:58 +05:00
LightApp_Preferences : : Color , " Geometry " , " free_bound_color " ) ;
2008-03-07 12:45:34 +05:00
addPreference ( tr ( " PREF_LINE_COLOR " ) , genGroup ,
2009-12-25 16:28:58 +05:00
LightApp_Preferences : : Color , " Geometry " , " line_color " ) ;
2008-03-07 12:45:34 +05:00
addPreference ( tr ( " PREF_POINT_COLOR " ) , genGroup ,
2009-12-25 16:28:58 +05:00
LightApp_Preferences : : Color , " Geometry " , " point_color " ) ;
2008-03-07 12:45:34 +05:00
addPreference ( tr ( " PREF_ISOS_COLOR " ) , genGroup ,
2009-12-25 16:28:58 +05:00
LightApp_Preferences : : Color , " Geometry " , " isos_color " ) ;
2008-03-07 12:45:34 +05:00
2005-06-22 15:58:12 +06:00
int step = addPreference ( tr ( " PREF_STEP_VALUE " ) , genGroup ,
2009-12-25 16:28:58 +05:00
LightApp_Preferences : : IntSpin , " Geometry " , " SettingsGeomStep " ) ;
2005-06-22 15:58:12 +06:00
2009-12-30 14:28:34 +05:00
int defl = addPreference ( tr ( " PREF_DEFLECTION " ) , genGroup ,
LightApp_Preferences : : DblSpin , " Geometry " , " deflection_coeff " ) ;
2010-04-05 17:42:50 +06:00
// Quantities with individual precision settings
int precGroup = addPreference ( tr ( " GEOM_PREF_GROUP_PRECISION " ) , tabId ) ;
setPreferenceProperty ( precGroup , " columns " , 2 ) ;
const int nbQuantities = 8 ;
int prec [ nbQuantities ] , ii = 0 ;
prec [ ii + + ] = addPreference ( tr ( " GEOM_PREF_length_precision " ) , precGroup ,
LightApp_Preferences : : IntSpin , " Geometry " , " length_precision " ) ;
prec [ ii + + ] = addPreference ( tr ( " GEOM_PREF_angle_precision " ) , precGroup ,
LightApp_Preferences : : IntSpin , " Geometry " , " angle_precision " ) ;
prec [ ii + + ] = addPreference ( tr ( " GEOM_PREF_len_tol_precision " ) , precGroup ,
LightApp_Preferences : : IntSpin , " Geometry " , " len_tol_precision " ) ;
prec [ ii + + ] = addPreference ( tr ( " GEOM_PREF_ang_tol_precision " ) , precGroup ,
LightApp_Preferences : : IntSpin , " Geometry " , " ang_tol_precision " ) ;
prec [ ii + + ] = addPreference ( tr ( " GEOM_PREF_weight_precision " ) , precGroup ,
LightApp_Preferences : : IntSpin , " Geometry " , " weight_precision " ) ;
prec [ ii + + ] = addPreference ( tr ( " GEOM_PREF_density_precision " ) , precGroup ,
LightApp_Preferences : : IntSpin , " Geometry " , " density_precision " ) ;
prec [ ii + + ] = addPreference ( tr ( " GEOM_PREF_parametric_precision " ) , precGroup ,
LightApp_Preferences : : IntSpin , " Geometry " , " parametric_precision " ) ;
prec [ ii ] = addPreference ( tr ( " GEOM_PREF_param_tol_precision " ) , precGroup ,
LightApp_Preferences : : IntSpin , " Geometry " , " param_tol_precision " ) ;
// Set property for precision value for spinboxes
for ( ii = 0 ; ii < nbQuantities ; ii + + ) {
setPreferenceProperty ( prec [ ii ] , " min " , - 10 ) ;
setPreferenceProperty ( prec [ ii ] , " max " , 10 ) ;
setPreferenceProperty ( prec [ ii ] , " precision " , 2 ) ;
}
2009-12-30 14:28:34 +05:00
2008-03-07 12:45:34 +05:00
int VertexGroup = addPreference ( tr ( " PREF_GROUP_VERTEX " ) , tabId ) ;
2009-02-13 17:16:39 +05:00
setPreferenceProperty ( VertexGroup , " columns " , 2 ) ;
2005-06-22 15:58:12 +06:00
2008-03-07 12:45:34 +05:00
int typeOfMarker = addPreference ( tr ( " PREF_TYPE_OF_MARKER " ) , VertexGroup ,
LightApp_Preferences : : Selector , " Geometry " , " type_of_marker " ) ;
int markerScale = addPreference ( tr ( " PREF_MARKER_SCALE " ) , VertexGroup ,
2009-12-08 17:05:55 +05:00
LightApp_Preferences : : Selector , " Geometry " , " marker_scale " ) ;
2005-07-06 18:42:51 +06:00
// Set property for default display mode
QStringList aModesList ;
aModesList . append ( tr ( " MEN_WIREFRAME " ) ) ;
aModesList . append ( tr ( " MEN_SHADING " ) ) ;
2008-03-07 12:45:34 +05:00
2009-02-13 17:16:39 +05:00
QList < QVariant > anIndexesList ;
2005-07-06 18:42:51 +06:00
anIndexesList . append ( 0 ) ;
anIndexesList . append ( 1 ) ;
2008-03-07 12:45:34 +05:00
2005-07-06 18:42:51 +06:00
setPreferenceProperty ( dispmode , " strings " , aModesList ) ;
setPreferenceProperty ( dispmode , " indexes " , anIndexesList ) ;
2008-03-07 12:45:34 +05:00
// Set property for step value for spinboxes
2009-02-13 17:16:39 +05:00
setPreferenceProperty ( step , " min " , 1 ) ;
2008-03-07 12:45:34 +05:00
setPreferenceProperty ( step , " max " , 10000 ) ;
setPreferenceProperty ( step , " precision " , 3 ) ;
2009-12-30 14:28:34 +05:00
// Set property for deflection value for spinboxes
2010-02-03 16:05:16 +05:00
setPreferenceProperty ( defl , " min " , DEFLECTION_MIN ) ;
2010-01-29 19:07:33 +05:00
setPreferenceProperty ( defl , " max " , 1.0 ) ;
setPreferenceProperty ( defl , " step " , 1.0e-04 ) ;
2010-02-03 16:05:16 +05:00
setPreferenceProperty ( defl , " precision " , 6 ) ;
2009-12-30 14:28:34 +05:00
2009-12-08 17:05:55 +05:00
// Set property vertex marker type
QList < QVariant > aMarkerTypeIndicesList ;
QList < QVariant > aMarkerTypeIconsList ;
2008-03-07 12:45:34 +05:00
2009-12-08 17:05:55 +05:00
SUIT_ResourceMgr * resMgr = SUIT_Session : : session ( ) - > resourceMgr ( ) ;
for ( int i = GEOM : : MT_POINT ; i < GEOM : : MT_USER ; i + + ) {
QString icoFile = QString ( " ICON_VERTEX_MARKER_%1 " ) . arg ( i ) ;
QPixmap pixmap = resMgr - > loadPixmap ( " GEOM " , tr ( qPrintable ( icoFile ) ) ) ;
aMarkerTypeIndicesList < < ( i - 1 ) ;
aMarkerTypeIconsList < < pixmap ;
}
2008-03-07 12:45:34 +05:00
2009-12-08 17:05:55 +05:00
setPreferenceProperty ( typeOfMarker , " indexes " , aMarkerTypeIndicesList ) ;
setPreferenceProperty ( typeOfMarker , " icons " , aMarkerTypeIconsList ) ;
2008-03-07 12:45:34 +05:00
2009-12-08 17:05:55 +05:00
// Set property for vertex marker scale
QList < QVariant > aMarkerScaleIndicesList ;
QStringList aMarkerScaleValuesList ;
2008-03-07 12:45:34 +05:00
2010-04-05 17:42:50 +06:00
for ( int iii = GEOM : : MS_10 ; iii < = GEOM : : MS_70 ; iii + + ) {
aMarkerScaleIndicesList < < iii ;
aMarkerScaleValuesList < < QString : : number ( ( iii - ( int ) GEOM : : MS_10 ) * 0.5 + 1.0 ) ;
2009-12-08 17:05:55 +05:00
}
2008-03-07 12:45:34 +05:00
2009-12-08 17:05:55 +05:00
setPreferenceProperty ( markerScale , " strings " , aMarkerScaleValuesList ) ;
setPreferenceProperty ( markerScale , " indexes " , aMarkerScaleIndicesList ) ;
2005-06-22 12:29:29 +06:00
}
void GeometryGUI : : preferencesChanged ( const QString & section , const QString & param )
{
2008-03-07 12:45:34 +05:00
if ( section = = " Geometry " ) {
SUIT_ResourceMgr * aResourceMgr = SUIT_Session : : session ( ) - > resourceMgr ( ) ;
if ( param = = QString ( " SettingsGeomStep " ) ) {
double spin_step = aResourceMgr - > doubleValue ( section , param , 100. ) ;
EmitSignalDefaultStepValueChanged ( spin_step ) ;
}
}
2005-06-22 12:29:29 +06:00
}
2005-09-27 12:32:15 +06:00
2005-11-03 13:30:14 +05:00
LightApp_Displayer * GeometryGUI : : displayer ( )
2005-09-27 12:32:15 +06:00
{
if ( ! myDisplayer )
myDisplayer = new GEOM_Displayer ( dynamic_cast < SalomeApp_Study * > ( getApp ( ) - > activeStudy ( ) ) ) ;
return myDisplayer ;
}
2008-03-07 12:45:34 +05:00
void GeometryGUI : : setLocalSelectionMode ( const int mode )
{
myLocalSelectionMode = mode ;
}
int GeometryGUI : : getLocalSelectionMode ( ) const
{
return myLocalSelectionMode ;
}
2009-02-13 17:16:39 +05:00
const char gSeparator = ' _ ' ; // character used to separate parameter names
const char gDigitsSep = ' : ' ; // character used to separate numeric parameter values (color = r:g:b)
/*!
* \ brief Store visual parameters
*
* This method is called just before the study document is saved .
* Store visual parameters in AttributeParameter attribue ( s )
*/
void GeometryGUI : : storeVisualParameters ( int savePoint )
{
SalomeApp_Study * appStudy = dynamic_cast < SalomeApp_Study * > ( application ( ) - > activeStudy ( ) ) ;
if ( ! appStudy | | ! appStudy - > studyDS ( ) )
return ;
_PTR ( Study ) studyDS = appStudy - > studyDS ( ) ;
// componentName is used for encoding of entries when storing them in IParameters
std : : string componentName = myComponentGeom - > ComponentDataType ( ) ;
//_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
//if (!aSComponent) return;
// IParameters
_PTR ( AttributeParameter ) ap = studyDS - > GetModuleParameters ( " Interface Applicative " ,
componentName . c_str ( ) ,
savePoint ) ;
_PTR ( IParameters ) ip = ClientFactory : : getIParameters ( ap ) ;
// viewers counters are used for storing view_numbers in IParameters
int vtkViewers ( 0 ) , occViewers ( 0 ) ;
QList < SUIT_ViewManager * > lst ;
QList < SUIT_ViewManager * > : : Iterator it ;
// main cycle to store parameters of displayed objects
lst . clear ( ) ;
vtkViewers = occViewers = 0 ;
getApp ( ) - > viewManagers ( lst ) ;
for ( it = lst . begin ( ) ; it ! = lst . end ( ) ; it + + )
{
SUIT_ViewManager * vman = * it ;
QString vType = vman - > getType ( ) ;
// saving VTK actors properties
if ( vType = = SVTK_Viewer : : Type ( ) )
{
QVector < SUIT_ViewWindow * > views = vman - > getViews ( ) ;
for ( int i = 0 , iEnd = vman - > getViewsCount ( ) ; i < iEnd ; i + + )
{
2009-12-25 16:28:58 +05:00
if ( SVTK_ViewWindow * vtkView = dynamic_cast < SVTK_ViewWindow * > ( views [ i ] ) )
2009-02-13 17:16:39 +05:00
{
2009-12-25 16:28:58 +05:00
vtkActorCollection * allActors = vtkView - > getRenderer ( ) - > GetActors ( ) ;
allActors - > InitTraversal ( ) ;
while ( vtkActor * actor = allActors - > GetNextActor ( ) )
2009-02-13 17:16:39 +05:00
{
2009-12-25 16:28:58 +05:00
if ( actor - > GetVisibility ( ) ) // store only visible actors
2009-02-13 17:16:39 +05:00
{
GEOM_Actor * aGeomActor = 0 ;
if ( actor - > IsA ( " GEOM_Actor " ) )
aGeomActor = GEOM_Actor : : SafeDownCast ( actor ) ;
2009-12-25 16:28:58 +05:00
if ( aGeomActor & & aGeomActor - > hasIO ( ) )
2009-02-13 17:16:39 +05:00
{
Handle ( SALOME_InteractiveObject ) io = aGeomActor - > getIO ( ) ;
if ( io - > hasEntry ( ) )
{
// entry is "encoded" = it does NOT contain component adress, since it is a
// subject to change on next component loading
std : : string entry = ip - > encodeEntry ( io - > getEntry ( ) , componentName ) ;
std : : string param , occParam = vType . toLatin1 ( ) . data ( ) ;
occParam + = gSeparator ;
occParam + = QString : : number ( vtkViewers ) . toLatin1 ( ) . data ( ) ;
occParam + = gSeparator ;
param = occParam + " Visibility " ;
ip - > setParameter ( entry , param , " On " ) ;
param = occParam + " DisplayMode " ;
ip - > setParameter ( entry , param , QString : : number
( aGeomActor - > getDisplayMode ( ) ) . toLatin1 ( ) . data ( ) ) ;
vtkFloatingPointType r , g , b ;
aGeomActor - > GetColor ( r , g , b ) ;
QString colorStr = QString : : number ( r ) ;
colorStr + = gDigitsSep ; colorStr + = QString : : number ( g ) ;
colorStr + = gDigitsSep ; colorStr + = QString : : number ( b ) ;
param = occParam + " Color " ;
ip - > setParameter ( entry , param , colorStr . toLatin1 ( ) . data ( ) ) ;
param = occParam + " Opacity " ;
ip - > setParameter ( entry , param , QString : : number ( aGeomActor - > GetOpacity ( ) ) . toLatin1 ( ) . data ( ) ) ;
int nbUIso ( 0 ) , nbVIso ( 0 ) ;
aGeomActor - > GetNbIsos ( nbUIso , nbVIso ) ;
QString isosStr = QString : : number ( nbUIso ) ;
isosStr + = gDigitsSep ;
isosStr + = QString : : number ( nbVIso ) ;
param = occParam + " Isos " ;
ip - > setParameter ( entry , param , isosStr . toLatin1 ( ) . data ( ) ) ;
} // if (io->hasEntry())
2009-12-25 16:28:58 +05:00
} // GEOM_Actor && hasIO
} // isVisible
} // while.. actors traversal
} // if (vtkView)
2009-02-13 17:16:39 +05:00
} // for (views)
vtkViewers + + ;
} // if (SVTK view model)
else if ( vType = = SOCC_Viewer : : Type ( ) ) // processing OCC viewers
{
QVector < SUIT_ViewWindow * > views = vman - > getViews ( ) ;
for ( int i = 0 , iEnd = vman - > getViewsCount ( ) ; i < iEnd ; i + + )
{
2009-12-25 16:28:58 +05:00
SOCC_ViewWindow * occView = dynamic_cast < SOCC_ViewWindow * > ( views [ i ] ) ;
if ( occView )
2009-02-13 17:16:39 +05:00
{
//Handle(AIS_InteractiveContext) ic =
// ((OCCViewer_Viewer*)(occView->getViewManager()->getViewModel()))->getAISContext();
OCCViewer_Viewer * viewModel = ( OCCViewer_Viewer * ) ( vman - > getViewModel ( ) ) ;
//OCCViewer_Viewer* viewModel = ((OCCViewer_ViewManager*)vman)->getOCCViewer();
Handle ( AIS_InteractiveContext ) ic = viewModel - > getAISContext ( ) ;
AIS_ListOfInteractive aList ;
ic - > DisplayedObjects ( aList ) ;
AIS_ListIteratorOfListOfInteractive ite ( aList ) ;
for ( ; ite . More ( ) ; ite . Next ( ) )
{
if ( ite . Value ( ) - > IsInstance ( STANDARD_TYPE ( GEOM_AISShape ) ) )
{
Handle ( GEOM_AISShape ) aSh = Handle ( GEOM_AISShape ) : : DownCast ( ite . Value ( ) ) ;
if ( aSh - > hasIO ( ) )
{
Handle ( SALOME_InteractiveObject ) io =
Handle ( SALOME_InteractiveObject ) : : DownCast ( aSh - > getIO ( ) ) ;
if ( io - > hasEntry ( ) )
{
// entry is "encoded": it does NOT contain component adress,
// since it is a subject to change on next component loading
std : : string entry = ip - > encodeEntry ( io - > getEntry ( ) , componentName ) ;
std : : string param , occParam = vType . toLatin1 ( ) . data ( ) ;
occParam + = gSeparator ;
occParam + = QString : : number ( occViewers ) . toLatin1 ( ) . data ( ) ;
occParam + = gSeparator ;
// Visibility
param = occParam + " Visibility " ;
ip - > setParameter ( entry , param , " On " ) ;
// DisplayMode
param = occParam + " DisplayMode " ;
int dm = aSh - > DisplayMode ( ) ;
ip - > setParameter ( entry , param , QString : : number ( dm ) . toLatin1 ( ) . data ( ) ) ;
// Color
// is a property of GEOM_Object, it is stored by GEOM engine
// Transparency
param = occParam + " Transparency " ;
ip - > setParameter ( entry , param , QString : : number ( aSh - > Transparency ( ) ) . toLatin1 ( ) . data ( ) ) ;
// Isos
Handle ( AIS_Drawer ) aDrawer = aSh - > Attributes ( ) ;
int nbUIso = aDrawer - > UIsoAspect ( ) - > Number ( ) ;
int nbVIso = aDrawer - > VIsoAspect ( ) - > Number ( ) ;
QString isosStr = QString : : number ( nbUIso ) ;
isosStr + = gDigitsSep ;
isosStr + = QString : : number ( nbVIso ) ;
param = occParam + " Isos " ;
ip - > setParameter ( entry , param , isosStr . toLatin1 ( ) . data ( ) ) ;
} // if (io->hasEntry())
} // if (io)
2009-12-25 16:28:58 +05:00
} // if (GEOM_AISShape)
} // for (AIS_ListOfInteractive)
} // if ( occView )
2009-02-13 17:16:39 +05:00
} // for ( views )
occViewers + + ;
} // if (SOCC view model)
else
{
// unknown viewer type
}
} // for (viewManagers)
}
/*!
* \ brief Restore visual parameters
*
* This method is called after the study document is opened .
* Restore visual parameters from AttributeParameter attribue ( s )
*/
void GeometryGUI : : restoreVisualParameters ( int savePoint )
{
SalomeApp_Study * appStudy = dynamic_cast < SalomeApp_Study * > ( application ( ) - > activeStudy ( ) ) ;
if ( ! appStudy | | ! appStudy - > studyDS ( ) )
return ;
_PTR ( Study ) studyDS = appStudy - > studyDS ( ) ;
// componentName is used for encoding of entries when storing them in IParameters
std : : string componentName = myComponentGeom - > ComponentDataType ( ) ;
//_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
//if (!aSComponent) return;
// IParameters
_PTR ( AttributeParameter ) ap = studyDS - > GetModuleParameters ( " Interface Applicative " ,
componentName . c_str ( ) ,
savePoint ) ;
_PTR ( IParameters ) ip = ClientFactory : : getIParameters ( ap ) ;
std : : vector < std : : string > entries = ip - > getEntries ( ) ;
for ( std : : vector < std : : string > : : iterator entIt = entries . begin ( ) ; entIt ! = entries . end ( ) ; + + entIt )
{
// entry is a normal entry - it should be "decoded" (setting base adress of component)
QString entry ( ip - > decodeEntry ( * entIt ) . c_str ( ) ) ;
// Check that the entry corresponds to a real object in the Study
// as the object may be deleted or modified after the visual state is saved.
_PTR ( SObject ) so = studyDS - > FindObjectID ( entry . toLatin1 ( ) . data ( ) ) ;
if ( ! so ) continue ; //Skip the not existent entry
std : : vector < std : : string > paramNames = ip - > getAllParameterNames ( * entIt ) ;
std : : vector < std : : string > paramValues = ip - > getAllParameterValues ( * entIt ) ;
std : : vector < std : : string > : : iterator namesIt = paramNames . begin ( ) ;
std : : vector < std : : string > : : iterator valuesIt = paramValues . begin ( ) ;
// actors are stored in a map after displaying of them for
// quicker access in the future: map < viewID to actor >
NCollection_DataMap < int , GEOM_Actor * > vtkActors ;
NCollection_DataMap < int , Handle ( GEOM_AISShape ) > occActors ;
for ( ; namesIt ! = paramNames . end ( ) ; + + namesIt , + + valuesIt )
{
// visual parameters are stored in strings as follows: ViewerType_ViewIndex_ParamName.
// '_' is used as separator and should not be used in viewer type or parameter names.
QStringList lst = QString ( ( * namesIt ) . c_str ( ) ) . split ( gSeparator , QString : : SkipEmptyParts ) ;
if ( lst . size ( ) ! = 3 )
continue ;
QString viewerTypStr = lst [ 0 ] ;
QString viewIndexStr = lst [ 1 ] ;
QString paramNameStr = lst [ 2 ] ;
bool ok ;
int viewIndex = viewIndexStr . toUInt ( & ok ) ;
if ( ! ok ) // bad conversion of view index to integer
2009-12-25 16:28:58 +05:00
continue ;
2009-02-13 17:16:39 +05:00
// viewers
if ( viewerTypStr = = SVTK_Viewer : : Type ( ) )
{
GEOM_Actor * vActor = 0 ;
if ( vtkActors . IsBound ( viewIndex ) )
vActor = vtkActors . Find ( viewIndex ) ;
if ( paramNameStr = = " Visibility " )
{
if ( ! vActor & & displayer ( ) )
{
QList < SUIT_ViewManager * > lst ;
getApp ( ) - > viewManagers ( viewerTypStr , lst ) ;
// SVTK ViewManager always has 1 ViewWindow, so view index is index of view manager
if ( viewIndex > = 0 & & viewIndex < lst . count ( ) ) {
SUIT_ViewManager * vman = lst . at ( viewIndex ) ;
SUIT_ViewModel * vmodel = vman - > getViewModel ( ) ;
// SVTK view model can be casted to SALOME_View
displayer ( ) - > Display ( entry , true , dynamic_cast < SALOME_View * > ( vmodel ) ) ;
// store displayed actor in a temporary map for quicker
// access later when restoring other parameters
SVTK_ViewWindow * vtkView = ( SVTK_ViewWindow * ) vman - > getActiveView ( ) ;
vtkRenderer * Renderer = vtkView - > getRenderer ( ) ;
vtkActorCollection * theActors = Renderer - > GetActors ( ) ;
theActors - > InitTraversal ( ) ;
bool isFound = false ;
vtkActor * ac = theActors - > GetNextActor ( ) ;
for ( ; ac ! = NULL & & ! isFound ; ac = theActors - > GetNextActor ( ) ) {
if ( ac - > IsA ( " GEOM_Actor " ) ) {
GEOM_Actor * aGeomAc = GEOM_Actor : : SafeDownCast ( ac ) ;
if ( aGeomAc - > hasIO ( ) ) {
Handle ( SALOME_InteractiveObject ) io =
Handle ( SALOME_InteractiveObject ) : : DownCast ( aGeomAc - > getIO ( ) ) ;
if ( io - > hasEntry ( ) & & strcmp ( io - > getEntry ( ) , entry . toLatin1 ( ) . data ( ) ) = = 0 ) {
isFound = true ;
vtkActors . Bind ( viewIndex , aGeomAc ) ;
}
}
}
}
}
}
} // if (paramNameStr == "Visibility")
2009-12-25 16:28:58 +05:00
else
2009-02-13 17:16:39 +05:00
{
// the rest properties "work" with GEOM_Actor
2009-12-25 16:28:58 +05:00
if ( vActor )
2009-02-13 17:16:39 +05:00
{
QString val ( ( * valuesIt ) . c_str ( ) ) ;
if ( paramNameStr = = " DisplayMode " ) {
vActor - > setDisplayMode ( val . toInt ( ) ) ;
}
else if ( paramNameStr = = " Color " ) {
QStringList colors = val . split ( gDigitsSep , QString : : SkipEmptyParts ) ;
if ( colors . count ( ) = = 3 )
vActor - > SetColor ( colors [ 0 ] . toFloat ( ) , colors [ 1 ] . toFloat ( ) , colors [ 2 ] . toFloat ( ) ) ;
}
else if ( paramNameStr = = " Opacity " ) {
vActor - > SetOpacity ( val . toFloat ( ) ) ;
}
else if ( paramNameStr = = " Isos " ) {
QStringList isos = val . split ( gDigitsSep , QString : : SkipEmptyParts ) ;
if ( isos . count ( ) = = 2 ) {
int aIsos [ 2 ] = { isos [ 0 ] . toInt ( ) , isos [ 1 ] . toInt ( ) } ;
vActor - > SetNbIsos ( aIsos ) ;
}
}
}
2009-12-25 16:28:58 +05:00
} // other parameters than Visibility
2009-02-13 17:16:39 +05:00
}
else if ( viewerTypStr = = SOCC_Viewer : : Type ( ) )
{
//Handle(AIS_InteractiveObject) occActor;
Handle ( GEOM_AISShape ) occActor ;
if ( occActors . IsBound ( viewIndex ) )
occActor = occActors . Find ( viewIndex ) ;
// ViewModel and InteractiveContext
SOCC_Viewer * occVModel = 0 ;
Handle ( AIS_InteractiveContext ) ic ;
QList < SUIT_ViewManager * > lst ;
getApp ( ) - > viewManagers ( viewerTypStr , lst ) ;
// SOCC ViewManager always has 1 ViewWindow, so view index is index of view manager
if ( viewIndex > = 0 & & viewIndex < lst . count ( ) ) {
SUIT_ViewManager * vman = lst . at ( viewIndex ) ;
SUIT_ViewModel * vmodel = vman - > getViewModel ( ) ;
occVModel = dynamic_cast < SOCC_Viewer * > ( vmodel ) ;
if ( occVModel )
ic = occVModel - > getAISContext ( ) ;
}
if ( ic . IsNull ( ) )
continue ;
if ( paramNameStr = = " Visibility " )
{
2009-12-25 16:28:58 +05:00
if ( occActor . IsNull ( ) & & displayer ( ) )
2009-02-13 17:16:39 +05:00
{
displayer ( ) - > Display ( entry , true , occVModel ) ;
// store displayed actor in a temporary map for quicker
// access later when restoring other parameters
AIS_ListOfInteractive aList ;
ic - > DisplayedObjects ( aList ) ;
bool isFound = false ;
AIS_ListIteratorOfListOfInteractive ite ( aList ) ;
for ( ; ite . More ( ) & & ! isFound ; ite . Next ( ) ) {
if ( ite . Value ( ) - > IsInstance ( STANDARD_TYPE ( GEOM_AISShape ) ) ) {
Handle ( GEOM_AISShape ) aSh = Handle ( GEOM_AISShape ) : : DownCast ( ite . Value ( ) ) ;
if ( aSh - > hasIO ( ) ) {
Handle ( SALOME_InteractiveObject ) io =
Handle ( SALOME_InteractiveObject ) : : DownCast ( aSh - > getIO ( ) ) ;
if ( io - > hasEntry ( ) & & strcmp ( io - > getEntry ( ) , entry . toLatin1 ( ) . data ( ) ) = = 0 ) {
isFound = true ;
occActors . Bind ( viewIndex , aSh ) ;
}
}
}
}
}
} // if (paramNameStr == "Visibility")
2009-12-25 16:28:58 +05:00
else
2009-02-13 17:16:39 +05:00
{
// the rest properties "work" with GEOM_AISShape
2009-12-25 16:28:58 +05:00
if ( ! occActor . IsNull ( ) )
2009-02-13 17:16:39 +05:00
{
QString val ( ( * valuesIt ) . c_str ( ) ) ;
if ( paramNameStr = = " DisplayMode " ) {
ic - > SetDisplayMode ( occActor , AIS_DisplayMode ( val . toInt ( ) ) , false ) ;
//ic->Redisplay(occActor, Standard_False, Standard_True);
}
// Color is restored by the GEOM engine
else if ( paramNameStr = = " Transparency " ) {
ic - > SetTransparency ( occActor , val . toFloat ( ) , false ) ;
ic - > Redisplay ( occActor , Standard_False , Standard_True ) ;
}
else if ( paramNameStr = = " Isos " ) {
QStringList isos = val . split ( gDigitsSep , QString : : SkipEmptyParts ) ;
if ( isos . count ( ) = = 2 ) {
Handle ( AIS_Drawer ) aDrawer = occActor - > Attributes ( ) ;
int nbUIso = isos [ 0 ] . toInt ( ) ;
int nbVIso = isos [ 1 ] . toInt ( ) ;
Handle ( Prs3d_IsoAspect ) uIsoAspect = aDrawer - > UIsoAspect ( ) ;
Handle ( Prs3d_IsoAspect ) vIsoAspect = aDrawer - > VIsoAspect ( ) ;
uIsoAspect - > SetNumber ( nbUIso ) ;
vIsoAspect - > SetNumber ( nbVIso ) ;
aDrawer - > SetUIsoAspect ( uIsoAspect ) ;
aDrawer - > SetVIsoAspect ( vIsoAspect ) ;
ic - > SetLocalAttributes ( occActor , aDrawer ) ;
ic - > Redisplay ( occActor ) ;
}
}
}
2009-12-25 16:28:58 +05:00
} // other parameters than Visibility
2009-02-13 17:16:39 +05:00
}
else
{
// unknown viewer type
}
} // for names/parameters iterator
} // for entries iterator
// update all VTK and OCC views
QList < SUIT_ViewManager * > lst ;
getApp ( ) - > viewManagers ( lst ) ;
for ( QList < SUIT_ViewManager * > : : Iterator it = lst . begin ( ) ; it ! = lst . end ( ) ; it + + ) {
SUIT_ViewModel * vmodel = ( * it ) - > getViewModel ( ) ;
if ( ! vmodel )
continue ;
if ( vmodel - > getType ( ) = = SVTK_Viewer : : Type ( ) ) {
SVTK_ViewWindow * vtkView = ( SVTK_ViewWindow * ) ( * it ) - > getActiveView ( ) ;
vtkView - > getRenderer ( ) - > ResetCameraClippingRange ( ) ;
vtkView - > Repaint ( ) ;
}
else if ( vmodel - > getType ( ) = = SOCC_Viewer : : Type ( ) ) {
//SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
SALOME_View * occVMod = dynamic_cast < SALOME_View * > ( vmodel ) ;
if ( occVMod )
occVMod - > Repaint ( ) ;
}
}
}
2009-07-08 16:18:07 +06:00
void GeometryGUI : : onViewAboutToShow ( )
{
SUIT_ViewWindow * window = application ( ) - > desktop ( ) - > activeWindow ( ) ;
2010-03-01 00:53:08 +05:00
QAction * a = action ( GEOMOp : : OpSwitchVectors ) ;
2009-07-08 16:18:07 +06:00
if ( window ) {
a - > setEnabled ( true ) ;
bool vmode = window - > getCustomData ( " VectorsMode " ) . toBool ( ) ;
a - > setText ( vmode = = 1 ? tr ( " MEN_VECTOR_MODE_OFF " ) : tr ( " MEN_VECTOR_MODE_ON " ) ) ;
} else {
a - > setText ( tr ( " MEN_VECTOR_MODE_ON " ) ) ;
a - > setEnabled ( false ) ;
}
}