1 // Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : GeometryGUI.cxx
23 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
25 #include <Standard_math.hxx> // E.A. must be included before Python.h to fix compilation on windows
27 #undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
30 #include "GeometryGUI.h"
31 #include "GeometryGUI_Operations.h"
32 #include "GEOMPluginGUI.h"
33 #include "GEOMGUI_OCCSelector.h"
34 #include "GEOMGUI_Selection.h"
35 #include "GEOMGUI_CreationInfoWdg.h"
36 #include "GEOMGUI_TextTreeWdg.h"
37 #include "GEOMGUI_DimensionProperty.h"
38 #include "GEOM_Constants.h"
39 #include "GEOM_Displayer.h"
40 #include "GEOM_AISShape.hxx"
41 #include "GEOMUtils_XmlHandler.hxx"
43 #include "GEOM_Actor.h"
45 #include <Material_ResourceMgr.h>
46 #include <Material_Model.h>
48 #include <SUIT_Desktop.h>
49 #include <SUIT_MessageBox.h>
50 #include <SUIT_ResourceMgr.h>
51 #include <SUIT_Session.h>
52 #include <SUIT_ViewManager.h>
54 #include <OCCViewer_ViewWindow.h>
55 #include <OCCViewer_ViewPort3d.h>
56 #include <OCCViewer_ViewModel.h>
57 #include <OCCViewer_ViewManager.h>
59 #include <SOCC_ViewModel.h>
60 #include <SOCC_ViewWindow.h>
62 #include <SVTK_ViewWindow.h>
63 #include <SVTK_RenderWindowInteractor.h>
64 #include <SVTK_InteractorStyle.h>
65 #include <SVTK_ViewModel.h>
67 #ifndef DISABLE_GRAPHICSVIEW
68 #include <GraphicsView_Viewer.h>
71 #include <SalomeApp_Application.h>
72 #include <SalomeApp_DataObject.h>
73 #include <SalomeApp_Study.h>
74 #include <SalomeApp_Tools.h>
76 #include <LightApp_SelectionMgr.h>
77 #include <LightApp_VTKSelector.h>
78 #include <LightApp_DataObject.h>
79 #include <LightApp_Preferences.h>
81 #include <SALOME_LifeCycleCORBA.hxx>
82 #include <SALOME_ListIO.hxx>
84 #include <SALOMEDSClient_ClientFactory.hxx>
85 #include <SALOMEDSClient_IParameters.hxx>
87 #include <SALOMEDS_SObject.hxx>
89 #include <Basics_OCCTVersion.hxx>
90 #include <QtxFontEdit.h>
101 #include <QSignalMapper>
102 #include <QFontDatabase>
104 #include <AIS_ListOfInteractive.hxx>
105 #include <AIS_ListIteratorOfListOfInteractive.hxx>
106 #include <Prs3d_Drawer.hxx>
107 #include <Prs3d_IsoAspect.hxx>
108 #include <Aspect_TypeOfMarker.hxx>
109 #include <OSD_SharedLibrary.hxx>
110 #include <NCollection_DataMap.hxx>
112 #include <TColStd_HArray1OfByte.hxx>
113 #include <TColStd_SequenceOfHAsciiString.hxx>
115 #include <utilities.h>
117 #include <vtkCamera.h>
118 #include <vtkRenderer.h>
120 #include <Standard_Failure.hxx>
121 #include <Standard_ErrorHandler.hxx>
123 #include <Font_SystemFont.hxx>
124 #include <Font_FontMgr.hxx>
125 #include <TCollection_HAsciiString.hxx>
127 #include "GEOM_version.h"
128 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
131 Standard_EXPORT CAM_Module* createModule() {
132 return new GeometryGUI();
135 Standard_EXPORT char* getModuleVersion() {
136 return (char*)GEOM_VERSION_STR;
140 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
142 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
144 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
146 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
147 if (CORBA::is_nil(myComponentGeom))
149 return GeometryGUI::myComponentGeom;
152 bool GeometryGUI::InitGeomGen()
155 if ( CORBA::is_nil( myComponentGeom ) ) return false;
159 //=======================================================================
160 // function : ClientSObjectToObject
162 //=======================================================================
163 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
165 _PTR(GenericAttribute) anAttr;
166 CORBA::Object_var anObj;
168 std::string aValue = theSObject->GetIOR();
169 if (strcmp(aValue.c_str(), "") != 0) {
170 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
171 anObj = anORB->string_to_object(aValue.c_str());
174 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
176 return anObj._retn();
179 //=======================================================================
180 // function : ClientStudyToStudy
182 //=======================================================================
183 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
185 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
186 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
187 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
188 int aStudyID = theStudy->StudyId();
189 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
190 return aDSStudy._retn();
193 void GeometryGUI::Modified (bool theIsUpdateActions)
195 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
196 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
197 appStudy->Modified();
198 if ( theIsUpdateActions )
199 app->updateActions();
204 //=======================================================================
205 // function : GeometryGUI::GeometryGUI()
206 // purpose : Constructor
207 //=======================================================================
208 GeometryGUI::GeometryGUI() :
209 SalomeApp_Module( "GEOM" ),
212 if ( CORBA::is_nil( myComponentGeom ) )
214 Engines::EngineComponent_var comp =
215 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
216 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
219 myActiveDialogBox = 0;
221 gp_Pnt origin = gp_Pnt(0., 0., 0.);
222 gp_Dir direction = gp_Dir(0., 0., 1.);
223 myWorkingPlane = gp_Ax3(origin, direction);
226 myLocalSelectionMode = GEOM_ALLOBJECTS;
228 myCreationInfoWdg = 0;
231 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
233 Q_INIT_RESOURCE( GEOMGUI );
236 //=======================================================================
237 // function : GeometryGUI::~GeometryGUI()
238 // purpose : Destructor
239 //=======================================================================
240 GeometryGUI::~GeometryGUI()
242 while (!myOCCSelectors.isEmpty())
243 delete myOCCSelectors.takeFirst();
245 while (!myVTKSelectors.isEmpty())
246 delete myVTKSelectors.takeFirst();
248 qDeleteAll(myGUIMap);
251 //=======================================================================
252 // function : GeometryGUI::getLibrary()
253 // purpose : get or load GUI library by name [ internal ]
254 //=======================================================================
255 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
256 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
258 if ( !myGUIMap.contains( libraryName ) ) {
259 // try to load library if it is not loaded yet
261 QString dirs = getenv( "LD_LIBRARY_PATH" );
264 QString dirs = getenv( "PATH" );
267 if ( !dirs.isEmpty() ) {
268 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
269 QListIterator<QString> it( dirList ); it.toBack();
270 while ( it.hasPrevious() ) {
271 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
273 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
274 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
276 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
277 continue; // continue search further
279 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
280 if ( osdF != NULL ) {
281 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
282 GEOMGUI* libGUI = (*func)( this );
284 myGUIMap[ libraryName ] = libGUI;
285 break; // found and loaded!
292 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
295 //=======================================================================
296 // function : GeometryGUI::getPluginLibrary()
297 // purpose : get or load GUI Plugin library by name [ internal ]
298 //=======================================================================
299 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
300 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
302 if ( !myGUIMap.contains( libraryName ) ) {
303 // try to load library if it is not loaded yet
305 QString dirs = getenv( "LD_LIBRARY_PATH" );
308 QString dirs = getenv( "PATH" );
311 if ( !dirs.isEmpty() ) {
312 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
313 QListIterator<QString> it( dirList ); it.toBack();
314 while ( it.hasPrevious() ) {
315 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
317 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
318 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
320 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
321 continue; // continue search further
323 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
324 if ( osdF != NULL ) {
325 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
326 GEOMPluginGUI* libGUI = (*func)( this );
328 myGUIMap[ libraryName ] = libGUI;
329 break; // found and loaded!
336 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
339 //=======================================================================
340 // function : GeometryGUI::ActiveWorkingPlane()
341 // purpose : Activate Working Plane View
342 //=======================================================================
343 void GeometryGUI::ActiveWorkingPlane()
345 gp_Dir DZ = myWorkingPlane.Direction();
346 gp_Dir DY = myWorkingPlane.YDirection();
348 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
349 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
350 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
353 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
355 Handle(V3d_View) view3d = vw->getViewPort()->getView();
357 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
358 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
362 else if ( ViewVTK ) {
363 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
365 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
367 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
368 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
369 camera->SetFocalPoint(0,0,0);
376 //=======================================================================
377 // function : GeometryGUI::SetActiveDialogBox()
378 // purpose : Set active dialog box
379 //=======================================================================
380 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
382 myActiveDialogBox = (QDialog*)aDlg;
385 //=======================================================================
386 // function : GeometryGUI::EmitSignalDeactivateDialog()
387 // purpose : Emit a signal to deactivate the active dialog Box
388 //=======================================================================
389 void GeometryGUI::EmitSignalDeactivateDialog()
391 emit SignalDeactivateActiveDialog();
394 //=======================================================================
395 // function : GeometryGUI::EmitSignalCloseAllDialogs()
396 // purpose : Emit a signal to close all non modal dialogs box
397 //=======================================================================
398 void GeometryGUI::EmitSignalCloseAllDialogs()
400 emit SignalCloseAllDialogs();
403 //=======================================================================
404 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
405 // purpose : Emit a signal to inform that default real spin box step has
407 //=======================================================================
408 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
410 emit SignalDefaultStepValueChanged(newVal);
413 //=======================================================================
414 // function : GeometryGUI::OnGUIEvent()
415 // purpose : common slot for all menu/toolbar actions
416 //=======================================================================
417 void GeometryGUI::OnGUIEvent()
419 const QObject* obj = sender();
420 if ( !obj || !obj->inherits( "QAction" ) )
422 int id = actionId((QAction*)obj);
427 //=======================================================================
428 // function : GeometryGUI::OnGUIEvent()
429 // purpose : manage all events on GUI [static]
430 //=======================================================================
431 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
433 SUIT_Application* anApp = application();
435 SUIT_Desktop* desk = anApp->desktop();
437 // check type of the active viewframe
438 SUIT_ViewWindow* window = desk->activeWindow();
439 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
440 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
441 #ifndef DISABLE_GRAPHICSVIEW
442 bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() );
446 // if current viewframe is not of OCC and not of VTK type - return immediately
447 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
448 QList<int> NotViewerDependentCommands;
449 NotViewerDependentCommands << GEOMOp::OpDelete
451 << GEOMOp::OpShowOnly
452 << GEOMOp::OpShowOnlyChildren
453 << GEOMOp::OpDiscloseChildren
454 << GEOMOp::OpConcealChildren
455 << GEOMOp::OpUnpublishObject
456 << GEOMOp::OpPublishObject
457 << GEOMOp::OpPointMarker
458 << GEOMOp::OpCreateFolder
459 << GEOMOp::OpSortChildren;
460 if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) {
461 // activate OCC viewer
462 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
465 // fix for IPAL9103, point 2
466 if ( CORBA::is_nil( GetGeomGen() ) ) {
467 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
472 // find corresponding GUI library
474 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
475 createOriginAndBaseVectors(); // internal operation
477 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
478 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
479 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
480 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
481 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
482 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
483 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
484 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
485 case GEOMOp::OpDelete: // MENU EDIT - DELETE
486 #ifndef DISABLE_PYCONSOLE
487 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
489 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
490 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
491 case GEOMOp::OpColor: // POPUP MENU - COLOR
492 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
493 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
494 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
495 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
496 case GEOMOp::OpIsos: // POPUP MENU - ISOS
497 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
498 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
499 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
500 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
501 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
502 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
503 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
504 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
505 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
506 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
507 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
508 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
509 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
510 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
511 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
512 case GEOMOp::OpClsBringToFront: //
513 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
514 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
515 #ifndef DISABLE_GRAPHICSVIEW
516 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
518 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
519 libName = "GEOMToolsGUI";
521 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
522 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
523 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
524 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
525 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
526 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
527 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
528 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
529 case GEOMOp::OpHide: // MENU VIEW - ERASE
530 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
531 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
532 case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE
533 case GEOMOp::OpSwitchName: // MENU VIEW - VERTICES MODE
534 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
535 case GEOMOp::OpShading: // POPUP MENU - SHADING
536 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
537 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
538 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
539 case GEOMOp::OpVertices: // POPUP MENU - VERTICES
540 case GEOMOp::OpShowName: // POPUP MENU - SHOW NAME
541 libName = "DisplayGUI";
543 case GEOMOp::OpPoint: // MENU BASIC - POINT
544 case GEOMOp::OpLine: // MENU BASIC - LINE
545 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
546 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
547 case GEOMOp::OpArc: // MENU BASIC - ARC
548 case GEOMOp::OpVector: // MENU BASIC - VECTOR
549 case GEOMOp::OpPlane: // MENU BASIC - PLANE
550 case GEOMOp::OpCurve: // MENU BASIC - CURVE
551 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
552 libName = "BasicGUI";
554 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
555 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
556 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
557 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
558 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
559 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
560 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
561 libName = "PrimitiveGUI";
563 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
564 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
565 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
566 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
567 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
568 case GEOMOp::OpThickness: // MENU GENERATION - THICKNESS
569 libName = "GenerationGUI";
571 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
572 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
573 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
574 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
575 case GEOMOp::OpSurfaceFromFace: // MENU ENTITY - SURFACE FROM FACE
577 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
579 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
580 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
581 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
582 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
583 case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR
584 libName = "EntityGUI";
586 case GEOMOp::OpEdge: // MENU BUILD - EDGE
587 case GEOMOp::OpWire: // MENU BUILD - WIRE
588 case GEOMOp::OpFace: // MENU BUILD - FACE
589 case GEOMOp::OpShell: // MENU BUILD - SHELL
590 case GEOMOp::OpSolid: // MENU BUILD - SOLID
591 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
592 libName = "BuildGUI";
594 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
595 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
596 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
597 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
598 libName = "BooleanGUI";
600 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
601 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
602 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
603 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
604 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
605 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
606 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
607 case GEOMOp::OpProjOnCyl: // MENU TRANSFORMATION - PROJECTION ON CYLINDER
608 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
609 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
610 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
611 case GEOMOp::OpExtension: // MENU TRANSFORMATION - EXTENSION
612 libName = "TransformationGUI";
614 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
615 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
616 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
617 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
618 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
619 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
620 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
621 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
622 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
623 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
624 case GEOMOp::OpTransferData: // MENU OPERATION - TRANSFER DATA
625 case GEOMOp::OpExtraction: // MENU OPERATION - EXTRACT AND REBUILD
626 libName = "OperationGUI";
628 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
629 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
630 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
631 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
632 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
633 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
634 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
635 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
636 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
637 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
638 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
639 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
640 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
641 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
642 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
643 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
644 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
645 case GEOMOp::OpInspectObj: // MENU REPAIR - INSPECT OBJECT
646 libName = "RepairGUI";
648 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
649 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
650 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
651 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
652 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
653 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
654 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
655 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
656 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
657 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
658 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
659 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
660 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
661 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
662 case GEOMOp::OpFastCheckInters: // MENU MEASURE - FAST CHECK INTERSECTIONS
663 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
664 #ifndef DISABLE_PLOT2DVIEWER
665 case GEOMOp::OpShapeStatistics: // MENU MEASURE - SHAPE STATISTICS
667 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
668 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
669 libName = "MeasureGUI";
671 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
672 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
673 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
674 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
675 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
676 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
677 libName = "GroupGUI";
679 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
680 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
681 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
682 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
683 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
684 libName = "BlocksGUI";
686 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
687 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
688 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
689 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
690 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
691 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
692 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
693 //libName = "AdvancedGUI";
696 if (myPluginActions.contains(id)) {
697 libName = myPluginActions[id].first;
699 GEOMPluginGUI* library = 0;
700 if ( !libName.isEmpty() ) {
702 libName = QString( "lib" ) + libName + ".so";
704 libName = libName + ".dll";
706 library = getPluginLibrary( libName );
709 // call method of corresponding GUI library
711 //QString action ("%1");
712 //action = action.arg(id);
714 //if( !theParam.isValid() )
715 library->OnGUIEvent( myPluginActions[id].second, desk );
717 // library->OnGUIEvent( id, desk, theParam);
720 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
722 updateCreationInfo();
728 GEOMGUI* library = 0;
729 if ( !libName.isEmpty() ) {
731 libName = QString( "lib" ) + libName + ".so";
733 libName = libName + ".dll";
735 library = getLibrary( libName );
738 // call method of corresponding GUI library
740 if( !theParam.isValid() )
741 library->OnGUIEvent( id, desk );
743 library->OnGUIEvent( id, desk, theParam);
746 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
748 updateCreationInfo();
751 //=================================================================================
752 // function : GeometryGUI::activateOperation()
754 //=================================================================================
755 bool GeometryGUI::activateOperation( int actionId )
757 OnGUIEvent(actionId);
761 //=================================================================================
762 // function : GeometryGUI::activateOperation()
764 //=================================================================================
765 bool GeometryGUI::activateOperation( const QString& actionId )
769 int id = actionId.toInt(&isOk);
776 //=================================================================================
777 // function : GeometryGUI::activateOperation()
779 //=================================================================================
780 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
784 QString pluginLib = plugin;
785 // TODO: if <plugin> is a plugin name, find plugin library name
786 if (myPluginLibs.contains(plugin))
787 pluginLib = myPluginLibs[plugin];
789 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
790 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
791 const PluginAction& anAction = actionsIter.value();
792 if (anAction.first == pluginLib && anAction.second == actionId) {
793 // activate operation
794 OnGUIEvent(actionsIter.key());
802 //=================================================================================
803 // function : GeometryGUI::OnKeyPress()
804 // purpose : Called when any key is pressed by user [static]
805 //=================================================================================
806 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
808 if ( !application() )
810 foreach ( GEOMGUI* lib, myGUIMap )
811 lib->OnKeyPress( e, application()->desktop(), w );
814 //=================================================================================
815 // function : GeometryGUI::OnMouseMove()
816 // purpose : Manages mouse move events [static]
817 //=================================================================================
818 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
820 if ( !application() )
822 foreach ( GEOMGUI* lib, myGUIMap )
823 lib->OnMouseMove( e, application()->desktop(), w );
826 //=================================================================================
827 // function : GeometryGUI::OnMouseRelease()
828 // purpose : Manages mouse release events [static]
829 //=================================================================================
830 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
832 if ( !application() )
834 foreach ( GEOMGUI* lib, myGUIMap )
835 lib->OnMouseRelease( e, application()->desktop(), w );
838 //=================================================================================
839 // function : GeometryGUI::OnMousePress()
840 // purpose : Manage mouse press events [static]
841 //=================================================================================
842 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
844 if ( !application() )
846 foreach ( GEOMGUI* lib, myGUIMap )
847 lib->OnMousePress( e, application()->desktop(), w );
850 //=======================================================================
851 // function : createGeomAction
853 //=======================================================================
854 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
855 const int accel, const bool toggle, const QString& shortcutAction )
857 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
858 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
859 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
861 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
863 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
864 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
866 application()->desktop(),
868 this, SLOT( OnGUIEvent() ),
872 //=======================================================================
873 // function : createOriginAndBaseVectors
875 //=======================================================================
876 void GeometryGUI::createOriginAndBaseVectors()
878 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
879 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
881 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
885 _PTR(Study) studyDS = appStudy->studyDS();
886 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
887 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
888 if ( !aBasicOperations->_is_nil() ) {
889 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
890 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
891 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
892 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
893 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
894 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
896 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
897 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
898 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
899 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
900 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
901 anOrigin->UnRegister();
905 aBasicOperations->UnRegister();
907 getApp()->updateObjectBrowser( true );
913 //=======================================================================
914 // function : GeometryGUI::initialize()
915 // purpose : Called when GEOM module is created
916 //=======================================================================
917 void GeometryGUI::initialize( CAM_Application* app )
919 SalomeApp_Module::initialize( app );
921 // ----- create actions --------------
923 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
925 createGeomAction( GEOMOp::OpPoint, "POINT" );
926 createGeomAction( GEOMOp::OpLine, "LINE" );
927 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
928 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
929 createGeomAction( GEOMOp::OpArc, "ARC" );
930 createGeomAction( GEOMOp::OpCurve, "CURVE" );
931 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
932 createGeomAction( GEOMOp::OpVector, "VECTOR" );
933 createGeomAction( GEOMOp::OpPlane, "PLANE" );
934 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
935 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
936 createGeomAction( GEOMOp::OpSurfaceFromFace, "SURFACE_FROM_FACE" );
938 createGeomAction( GEOMOp::OpBox, "BOX" );
939 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
940 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
941 createGeomAction( GEOMOp::OpTorus, "TORUS" );
942 createGeomAction( GEOMOp::OpCone, "CONE" );
943 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
944 createGeomAction( GEOMOp::OpDisk, "DISK" );
946 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
947 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
948 createGeomAction( GEOMOp::OpFilling, "FILLING" );
949 createGeomAction( GEOMOp::OpPipe, "PIPE" );
950 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
951 createGeomAction( GEOMOp::OpThickness, "THICKNESS" );
953 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
954 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
955 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
956 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
957 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
959 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
960 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
962 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
964 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
965 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
967 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
968 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
969 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
971 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
973 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
974 createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" );
976 createGeomAction( GEOMOp::OpEdge, "EDGE" );
977 createGeomAction( GEOMOp::OpWire, "WIRE" );
978 createGeomAction( GEOMOp::OpFace, "FACE" );
979 createGeomAction( GEOMOp::OpShell, "SHELL" );
980 createGeomAction( GEOMOp::OpSolid, "SOLID" );
981 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
983 createGeomAction( GEOMOp::OpFuse, "FUSE" );
984 createGeomAction( GEOMOp::OpCommon, "COMMON" );
985 createGeomAction( GEOMOp::OpCut, "CUT" );
986 createGeomAction( GEOMOp::OpSection, "SECTION" );
988 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
989 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
990 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
991 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
992 createGeomAction( GEOMOp::OpScale, "SCALE" );
993 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
994 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
995 createGeomAction( GEOMOp::OpProjOnCyl, "PROJ_ON_CYL" );
996 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
997 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
998 createGeomAction( GEOMOp::OpExtension, "EXTENSION" );
1000 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
1001 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
1002 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
1003 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
1004 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
1005 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
1006 createGeomAction( GEOMOp::OpTransferData, "TRANSFER_DATA" );
1007 createGeomAction( GEOMOp::OpExtraction, "EXTRACTION" );
1008 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
1009 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
1010 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
1011 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
1013 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
1014 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
1015 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
1017 createGeomAction( GEOMOp::OpSewing, "SEWING" );
1018 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
1019 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
1020 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
1021 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
1022 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
1023 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
1024 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
1025 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
1026 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
1027 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
1028 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
1029 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1030 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1031 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1032 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1033 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1034 createGeomAction( GEOMOp::OpInspectObj, "INSPECT_OBJECT" );
1036 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1037 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1038 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1039 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1040 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1041 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1042 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1043 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1044 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1046 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1047 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1048 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1049 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1050 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1051 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1052 createGeomAction( GEOMOp::OpFastCheckInters, "FAST_CHECK_INTERSECTIONS" );
1053 #ifndef DISABLE_PLOT2DVIEWER
1054 createGeomAction( GEOMOp::OpShapeStatistics, "SHAPE_STATISTICS" );
1057 #ifndef DISABLE_PYCONSOLE
1058 #ifdef _DEBUG_ // PAL16821
1059 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1063 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1064 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1065 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1066 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1067 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1068 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1069 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1070 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1071 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1072 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1073 createGeomAction( GEOMOp::OpSwitchName, "NAME_MODE");
1074 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1075 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1076 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1077 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1078 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1079 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1080 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1081 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1082 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1083 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1084 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1085 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1086 createGeomAction( GEOMOp::OpHide, "ERASE" );
1088 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1089 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1090 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1091 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1092 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1093 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1094 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1095 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1096 createGeomAction( GEOMOp::OpShowName, "POP_SHOW_NAME", "", 0, true );
1097 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1098 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1099 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1100 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1101 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1102 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1103 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1104 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1105 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1106 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1107 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1108 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1109 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1110 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1111 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1112 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1113 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1114 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1115 #ifndef DISABLE_GRAPHICSVIEW
1116 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1118 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1119 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1120 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1122 // Create actions for increase/decrease transparency shortcuts
1123 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1124 "Geometry:Increase transparency");
1125 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1126 "Geometry:Decrease transparency");
1128 // Create actions for increase/decrease number of isolines
1129 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1130 "Geometry:Increase number of isolines");
1131 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1132 "Geometry:Decrease number of isolines");
1134 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1135 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1136 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1137 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1138 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@//
1140 // ---- create menus --------------------------
1142 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1144 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1145 createMenu( GEOMOp::OpDelete, editId, -1 );
1147 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1149 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1150 createMenu( GEOMOp::OpPoint, basicId, -1 );
1151 createMenu( GEOMOp::OpLine, basicId, -1 );
1152 createMenu( GEOMOp::OpCircle, basicId, -1 );
1153 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1154 createMenu( GEOMOp::OpArc, basicId, -1 );
1155 createMenu( GEOMOp::OpCurve, basicId, -1 );
1156 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1157 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1158 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1159 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1160 createMenu( GEOMOp::OpSurfaceFromFace, basicId, -1 );
1161 createMenu( separator(), basicId, -1 );
1162 createMenu( GEOMOp::OpVector, basicId, -1 );
1163 createMenu( GEOMOp::OpPlane, basicId, -1 );
1164 createMenu( GEOMOp::OpLCS, basicId, -1 );
1165 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1167 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1168 createMenu( GEOMOp::OpBox, primId, -1 );
1169 createMenu( GEOMOp::OpCylinder, primId, -1 );
1170 createMenu( GEOMOp::OpSphere, primId, -1 );
1171 createMenu( GEOMOp::OpTorus, primId, -1 );
1172 createMenu( GEOMOp::OpCone, primId, -1 );
1173 createMenu( GEOMOp::OpRectangle, primId, -1 );
1174 createMenu( GEOMOp::OpDisk, primId, -1 );
1175 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1177 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1178 createMenu( GEOMOp::OpPrism, genId, -1 );
1179 createMenu( GEOMOp::OpRevolution, genId, -1 );
1180 createMenu( GEOMOp::OpFilling, genId, -1 );
1181 createMenu( GEOMOp::OpPipe, genId, -1 );
1182 createMenu( GEOMOp::OpPipePath, genId, -1 );
1183 createMenu( GEOMOp::OpThickness, genId, -1 );
1185 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1186 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1187 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@//
1189 createMenu( separator(), newEntId, -1 );
1191 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1192 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1193 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1194 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1195 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1196 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1198 createMenu( separator(), newEntId, -1 );
1200 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1201 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1202 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1204 createMenu( separator(), newEntId, -1 );
1206 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1207 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1208 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1209 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1210 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1212 createMenu( separator(), newEntId, -1 );
1214 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1216 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1217 createMenu( GEOMOp::OpEdge, buildId, -1 );
1218 createMenu( GEOMOp::OpWire, buildId, -1 );
1219 createMenu( GEOMOp::OpFace, buildId, -1 );
1220 createMenu( GEOMOp::OpShell, buildId, -1 );
1221 createMenu( GEOMOp::OpSolid, buildId, -1 );
1222 createMenu( GEOMOp::OpCompound, buildId, -1 );
1224 createMenu( separator(), newEntId, -1 );
1226 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1228 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1231 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1233 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1234 createMenu( GEOMOp::OpFuse, boolId, -1 );
1235 createMenu( GEOMOp::OpCommon, boolId, -1 );
1236 createMenu( GEOMOp::OpCut, boolId, -1 );
1237 createMenu( GEOMOp::OpSection, boolId, -1 );
1239 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1240 createMenu( GEOMOp::OpTranslate, transId, -1 );
1241 createMenu( GEOMOp::OpRotate, transId, -1 );
1242 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1243 createMenu( GEOMOp::OpMirror, transId, -1 );
1244 createMenu( GEOMOp::OpScale, transId, -1 );
1245 createMenu( GEOMOp::OpOffset, transId, -1 );
1246 createMenu( GEOMOp::OpProjection, transId, -1 );
1247 createMenu( GEOMOp::OpExtension, transId, -1 );
1248 createMenu( GEOMOp::OpProjOnCyl, transId, -1 );
1249 createMenu( separator(), transId, -1 );
1250 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1251 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1253 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1254 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1255 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1256 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1258 createMenu( separator(), operId, -1 );
1260 createMenu( GEOMOp::OpPartition, operId, -1 );
1261 createMenu( GEOMOp::OpArchimede, operId, -1 );
1262 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1263 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1264 createMenu( GEOMOp::OpTransferData, operId, -1 );
1265 createMenu( GEOMOp::OpExtraction, operId, -1 );
1267 createMenu( separator(), operId, -1 );
1269 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1270 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1271 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1272 createMenu( GEOMOp::OpChamfer, operId, -1 );
1273 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1274 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1276 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1277 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1278 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1279 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1280 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1281 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1282 createMenu( GEOMOp::OpSewing, repairId, -1 );
1283 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1284 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1285 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1286 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1287 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1288 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1289 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1290 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1291 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1292 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1293 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1295 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1296 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1297 createMenu( GEOMOp::OpProperties, measurId, -1 );
1298 createMenu( separator(), measurId, -1 );
1299 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1300 createMenu( GEOMOp::OpInertia, measurId, -1 );
1301 createMenu( GEOMOp::OpNormale, measurId, -1 );
1302 createMenu( separator(), measurId, -1 );
1303 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1304 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1305 createMenu( separator(), measurId, -1 );
1307 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1308 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1309 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1310 createMenu( GEOMOp::OpAngle, dimId, -1 );
1311 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1313 createMenu( separator(), measurId, -1 );
1314 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1315 createMenu( separator(), measurId, -1 );
1316 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1317 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1318 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1319 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1320 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1321 createMenu( GEOMOp::OpFastCheckInters, measurId, -1 );
1322 createMenu( GEOMOp::OpInspectObj, measurId, -1 );
1323 #ifndef DISABLE_PLOT2DVIEWER
1324 createMenu( GEOMOp::OpShapeStatistics, measurId, -1 );
1327 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1328 #ifndef DISABLE_PYCONSOLE
1329 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1330 createMenu( separator(), toolsId, -1 );
1331 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1335 createMenu( separator(), toolsId, -1 );
1336 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1337 createMenu( separator(), toolsId, -1 );
1339 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1340 createMenu( separator(), viewId, -1 );
1342 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1343 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1344 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1345 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1346 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1347 createMenu( separator(), dispmodeId, -1 );
1348 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1349 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1350 createMenu( GEOMOp::OpSwitchName, dispmodeId, -1 );
1352 createMenu( separator(), viewId, -1 );
1353 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1354 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1355 createMenu( separator(), viewId, -1 );
1356 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1357 createMenu( separator(), viewId, -1 );
1361 because of these items are accessible through object browser and viewers
1362 we have removed they from main menu
1364 createMenu( GEOMOp::OpShow, viewId, -1 );
1365 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1366 createMenu( GEOMOp::OpHide, viewId, -1 );
1369 // ---- create toolbars --------------------------
1371 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1372 createTool( GEOMOp::OpPoint, basicTbId );
1373 createTool( GEOMOp::OpLine, basicTbId );
1374 createTool( GEOMOp::OpCircle, basicTbId );
1375 createTool( GEOMOp::OpEllipse, basicTbId );
1376 createTool( GEOMOp::OpArc, basicTbId );
1377 createTool( GEOMOp::OpCurve, basicTbId );
1378 createTool( GEOMOp::OpVector, basicTbId );
1379 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1380 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1381 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1382 createTool( GEOMOp::OpIsoline, basicTbId );
1383 createTool( GEOMOp::OpSurfaceFromFace, basicTbId );
1384 createTool( GEOMOp::OpPlane, basicTbId );
1385 createTool( GEOMOp::OpLCS, basicTbId );
1386 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1388 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1389 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1390 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1392 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1393 createTool( GEOMOp::OpBox, primTbId );
1394 createTool( GEOMOp::OpCylinder, primTbId );
1395 createTool( GEOMOp::OpSphere, primTbId );
1396 createTool( GEOMOp::OpTorus, primTbId );
1397 createTool( GEOMOp::OpCone, primTbId );
1398 createTool( GEOMOp::OpRectangle, primTbId );
1399 createTool( GEOMOp::OpDisk, primTbId );
1400 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1402 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1403 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1404 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1406 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1407 createTool( GEOMOp::OpFuse, boolTbId );
1408 createTool( GEOMOp::OpCommon, boolTbId );
1409 createTool( GEOMOp::OpCut, boolTbId );
1410 createTool( GEOMOp::OpSection, boolTbId );
1412 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1413 createTool( GEOMOp::OpPrism, genTbId );
1414 createTool( GEOMOp::OpRevolution, genTbId );
1415 createTool( GEOMOp::OpFilling, genTbId );
1416 createTool( GEOMOp::OpPipe, genTbId );
1417 createTool( GEOMOp::OpPipePath, genTbId );
1418 createTool( GEOMOp::OpThickness, genTbId );
1420 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1421 createTool( GEOMOp::OpTranslate, transTbId );
1422 createTool( GEOMOp::OpRotate, transTbId );
1423 createTool( GEOMOp::OpChangeLoc, transTbId );
1424 createTool( GEOMOp::OpMirror, transTbId );
1425 createTool( GEOMOp::OpScale, transTbId );
1426 createTool( GEOMOp::OpOffset, transTbId );
1427 createTool( GEOMOp::OpProjection, transTbId );
1428 createTool( GEOMOp::OpExtension, transTbId );
1429 createTool( GEOMOp::OpProjOnCyl, transTbId );
1430 createTool( separator(), transTbId );
1431 createTool( GEOMOp::OpMultiTranslate, transTbId );
1432 createTool( GEOMOp::OpMultiRotate, transTbId );
1434 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1435 createTool( GEOMOp::OpExplode, operTbId );
1436 createTool( GEOMOp::OpPartition, operTbId );
1437 createTool( GEOMOp::OpArchimede, operTbId );
1438 createTool( GEOMOp::OpShapesOnShape, operTbId );
1439 createTool( GEOMOp::OpSharedShapes, operTbId );
1440 createTool( GEOMOp::OpTransferData, operTbId );
1441 createTool( GEOMOp::OpExtraction, operTbId );
1443 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1444 createTool( GEOMOp::OpFillet1d, featTbId );
1445 createTool( GEOMOp::OpFillet2d, featTbId );
1446 createTool( GEOMOp::OpFillet3d, featTbId );
1447 createTool( GEOMOp::OpChamfer, featTbId );
1448 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1449 createTool( GEOMOp::OpExtrudedCut, featTbId );
1451 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1452 createTool( GEOMOp::OpEdge, buildTbId );
1453 createTool( GEOMOp::OpWire, buildTbId );
1454 createTool( GEOMOp::OpFace, buildTbId );
1455 createTool( GEOMOp::OpShell, buildTbId );
1456 createTool( GEOMOp::OpSolid, buildTbId );
1457 createTool( GEOMOp::OpCompound, buildTbId );
1459 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1460 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1461 createTool( GEOMOp::OpProperties, measureTbId );
1462 createTool( GEOMOp::OpCenterMass, measureTbId );
1463 createTool( GEOMOp::OpInertia, measureTbId );
1464 createTool( GEOMOp::OpNormale, measureTbId );
1465 createTool( separator(), measureTbId );
1466 createTool( GEOMOp::OpBoundingBox, measureTbId );
1467 createTool( GEOMOp::OpMinDistance, measureTbId );
1468 createTool( GEOMOp::OpAngle, measureTbId );
1469 createTool( GEOMOp::OpTolerance , measureTbId );
1470 createTool( separator(), measureTbId );
1471 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1472 createTool( GEOMOp::OpFreeFaces, measureTbId );
1473 createTool( separator(), measureTbId );
1474 createTool( GEOMOp::OpWhatIs, measureTbId );
1475 createTool( GEOMOp::OpCheckShape, measureTbId );
1476 createTool( GEOMOp::OpCheckCompound, measureTbId );
1477 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1478 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1479 createTool( GEOMOp::OpFastCheckInters, measureTbId );
1481 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1482 createTool( GEOMOp::OpPictureImport, picturesTbId );
1484 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1487 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1488 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1489 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@//
1491 // ---- create popup menus --------------------------
1493 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1494 QString clientOCC = "(client='OCCViewer')";
1495 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1496 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1498 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1499 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1500 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1501 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1503 QString autoColorPrefix =
1504 "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') and type='Shape' and selcount=1";
1506 QtxPopupMgr* mgr = popupMgr();
1508 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1509 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1510 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1511 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1512 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1513 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1514 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1515 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1517 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1518 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1519 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1520 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1521 mgr->insert( separator(), -1, -1 ); // -----------
1523 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1524 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1525 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1526 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1527 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1528 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1529 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1530 mgr->insert( separator(), -1, -1 ); // -----------
1531 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1532 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1533 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1534 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1535 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1536 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1537 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1538 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1539 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1540 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1541 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1542 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1543 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1544 mgr->insert( separator(), dispmodeId, -1 );
1545 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1546 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1547 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1548 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1549 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1550 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1551 mgr->insert( action( GEOMOp::OpShowName ), dispmodeId, -1 ); // show name
1552 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1553 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK + " and isNameMode", QtxPopupMgr::ToggleRule );
1554 mgr->insert( separator(), -1, -1 ); // -----------
1556 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1557 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1558 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1559 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1560 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1561 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1562 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1563 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1564 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1565 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1567 // material properties
1568 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1569 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1572 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1573 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1575 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1576 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1577 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1579 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1580 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1582 mgr->insert( separator(), -1, -1 ); // -----------
1583 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1584 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1585 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1586 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1587 mgr->insert( separator(), -1, -1 ); // -----------
1589 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1590 onlyComponent = "((type='Component') and selcount=1)",
1591 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1592 types = "'Shape' 'Group' 'FieldStep'";
1594 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1595 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1597 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1598 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1600 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1601 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1603 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1605 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1606 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1607 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1608 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1609 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1610 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1611 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1612 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1613 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1614 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1615 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1616 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1617 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1618 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1619 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1620 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1621 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1622 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1623 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1624 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1625 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1626 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1627 mgr->insert( separator(), selectonlyId, -1);
1628 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1629 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1630 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1631 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1632 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1633 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1634 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1636 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1638 mgr->insert( separator(), -1, -1 ); // -----------
1639 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1640 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1641 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1642 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1644 mgr->insert( separator(), -1, -1 ); // -----------
1645 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1646 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1648 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1649 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1651 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1652 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1654 mgr->insert( separator(), -1, -1 ); // -----------
1655 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1656 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1658 mgr->insert( separator(), -1, -1 ); // -----------
1659 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1660 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1662 #ifndef DISABLE_GRAPHICSVIEW
1663 mgr->insert( separator(), -1, -1 ); // -----------
1664 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1665 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1668 mgr->insert( separator(), -1, -1 ); // -----------
1669 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1670 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1672 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1674 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1676 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1677 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1678 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1681 // create plugin actions and menus
1685 //=======================================================================
1686 // function : GeometryGUI::addPluginActions()
1688 //=======================================================================
1689 void GeometryGUI::addPluginActions()
1692 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1693 if (!resMgr) return;
1695 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1696 if (!appStudy) return;
1698 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1700 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1702 int id = GEOMOp::OpLastOperationID; // TODO?
1705 GEOMUtils::PluginInfo::const_iterator it;
1706 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1707 // bind action lib and label to its ID for activateOperation() method proper work
1708 GEOMUtils::PluginData pdata = (*it);
1709 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1710 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1711 std::list<GEOMUtils::ActionData>::const_iterator ait;
1712 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1713 GEOMUtils::ActionData adata = (*ait);
1716 if ( !adata.icon.empty() )
1717 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1719 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1720 QString actionName = smenus.last();
1721 actionName = actionName.toUpper().prepend( "MEN_" );
1722 smenus.removeLast();
1724 // path to action in toolbar
1725 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1726 QString actionTool = stools.last();
1727 actionTool = actionTool.toUpper().prepend( "TOP_" );
1728 stools.removeLast();
1730 QString actionStat = adata.statusText.c_str();
1731 actionStat = actionStat.toUpper().prepend( "STB_" );
1733 createAction( id, // ~ adata.label
1734 tr( actionTool.toLatin1().constData() ),
1736 tr( actionName.toLatin1().constData() ),
1737 tr( actionStat.toLatin1().constData() ),
1738 QKeySequence( tr( adata.accel.c_str() ) ),
1739 application()->desktop(),
1741 this, SLOT( OnGUIEvent() ),
1742 QString() /*shortcutAction*/ );
1745 foreach ( QString subMenu, smenus ) {
1746 QStringList subMenuList = subMenu.split( ":" );
1747 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1748 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1749 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1751 createMenu( id, menuId, -1 );
1753 if ( !stools.isEmpty() ) {
1754 QString subTool = stools[0];
1755 subTool = subTool.toUpper().prepend( "TOOL_" );
1756 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1757 createTool(id, toolId);
1760 // add action id to map
1761 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1762 myPluginActions[id] = anAction;
1769 //=======================================================================
1770 // function : GeometryGUI::activateModule()
1771 // purpose : Called when GEOM module is activated
1772 //=======================================================================
1773 bool GeometryGUI::activateModule( SUIT_Study* study )
1775 if ( CORBA::is_nil( myComponentGeom ) )
1778 bool res = SalomeApp_Module::activateModule( study );
1782 setMenuShown( true );
1783 setToolShown( true );
1785 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1786 PyGILState_STATE gstate = PyGILState_Ensure();
1787 PyObject* pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1788 if ( !pluginsmanager ) {
1793 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1794 tr("MEN_NEW_ENTITY").toUtf8().data(),
1795 tr("GEOM_PLUGINS_OTHER").toUtf8().data());
1800 PyGILState_Release(gstate);
1801 // end of GEOM plugins loading
1803 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1804 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1806 // Reset actions accelerator keys
1807 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1809 GUIMap::Iterator it;
1810 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1811 it.value()->activate( application()->desktop() );
1813 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1815 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1816 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1817 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1819 if ( !myCreationInfoWdg )
1820 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1821 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1822 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1824 if ( !myTextTreeWdg )
1825 myTextTreeWdg = new GEOMGUI_TextTreeWdg( getApp() );
1826 getApp()->insertDockWindow( myTextTreeWdg->getWinID(), myTextTreeWdg );
1827 getApp()->placeDockWindow( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
1830 SALOME_ListIO selected;
1831 sm->selectedObjects( selected );
1832 sm->clearSelected();
1834 SUIT_ViewManager* vm;
1835 ViewManagerList OCCViewManagers, VTKViewManagers;
1837 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1838 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1839 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1840 onViewManagerAdded(vm);
1842 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1843 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1844 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1845 onViewManagerAdded(vm);
1847 sm->setSelectedObjects( selected, true ); //NPAL 19674
1849 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1851 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1853 // 0020836 (Basic vectors and origin)
1854 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1855 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1856 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1858 _PTR(Study) studyDS = appStudy->studyDS();
1860 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1861 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1862 createOriginAndBaseVectors();
1867 Py_XDECREF(pluginsmanager);
1871 //=======================================================================
1872 // function : GeometryGUI::deactivateModule()
1873 // purpose : Called when GEOM module is deactivated
1874 //=======================================================================
1875 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1877 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1879 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1881 setMenuShown( false );
1882 setToolShown( false );
1884 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1885 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1887 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1889 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1890 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1891 if ( myCreationInfoWdg ) {
1892 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1893 myCreationInfoWdg = 0;
1895 if ( myTextTreeWdg ) {
1896 getApp()->removeDockWindow( myTextTreeWdg->getWinID() );
1897 disconnect( application(), 0, myTextTreeWdg, 0 );
1901 EmitSignalCloseAllDialogs();
1903 GUIMap::Iterator it;
1904 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1905 it.value()->deactivate();
1907 // Unset actions accelerator keys
1908 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1910 qDeleteAll(myOCCSelectors);
1911 myOCCSelectors.clear();
1912 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1914 qDeleteAll(myVTKSelectors);
1915 myVTKSelectors.clear();
1916 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1918 return SalomeApp_Module::deactivateModule( study );
1921 //=======================================================================
1922 // function : onWindowActivated()
1923 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1924 //=======================================================================
1925 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1930 const bool ViewOCC = ( win->getViewManager() ? win->getViewManager()->getType() == OCCViewer_Viewer::Type() : false );
1931 //const bool ViewVTK = ( win->getViewManager() ? win->getViewManager()->getType() == SVTK_Viewer::Type() : false );
1933 // disable non-OCC viewframe menu commands
1934 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1935 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1936 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1937 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1938 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1939 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1940 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1942 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1943 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1944 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1945 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1947 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1950 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1952 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1953 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
1954 #ifndef DISABLE_PYCONSOLE
1955 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1957 if ( myCreationInfoWdg )
1958 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1959 if ( myTextTreeWdg )
1960 mappa.insert( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
1963 void GeometryGUI::viewManagers( QStringList& lst ) const
1965 lst.append( OCCViewer_Viewer::Type() );
1968 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1970 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1972 qDebug( "connect" );
1973 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1974 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1975 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1976 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1977 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1978 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1979 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1980 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1982 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1983 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1985 // disable OCC selectors
1986 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1987 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1988 while ( itOCCSel.hasNext() )
1989 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1990 sr->setEnabled(true);
1992 else if ( vm->getType() == SVTK_Viewer::Type() )
1994 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1995 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1997 // disable VTK selectors
1998 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1999 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2000 while ( itVTKSel.hasNext() )
2001 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2002 sr->setEnabled(true);
2006 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
2008 SUIT_ViewModel* viewer = vm->getViewModel();
2009 if ( vm->getType() == OCCViewer_Viewer::Type() )
2011 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2012 while ( itOCCSel.hasNext() )
2013 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2014 if ( sr->viewer() == viewer )
2016 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
2020 if ( vm->getType() == SVTK_Viewer::Type() )
2022 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2023 while ( itVTKSel.hasNext() )
2024 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2025 if ( sr->viewer() == viewer )
2027 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2033 //================================================================================
2035 * \brief Slot called when selection changed. Shows creation info of a selected object
2037 //================================================================================
2039 void GeometryGUI::updateCreationInfo()
2041 if ( myCreationInfoWdg )
2042 myCreationInfoWdg->clear();
2044 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2045 // if ( !myCreationInfoWdg->isVisible() )
2048 // look for a sole selected GEOM_Object
2049 GEOM::GEOM_BaseObject_var geomObj;
2051 SALOME_ListIO selected;
2052 getApp()->selectionMgr()->selectedObjects( selected );
2054 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2055 SALOME_ListIteratorOfListIO selIt( selected );
2056 for ( ; selIt.More(); selIt.Next() )
2058 Handle(SALOME_InteractiveObject) io = selIt.Value();
2059 if ( !io->hasEntry() ) continue;
2060 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2061 if ( !sobj ) continue;
2062 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2063 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2064 if ( !gobj->_is_nil() )
2066 if ( !geomObj->_is_nil() )
2067 return; // several GEOM objects selected
2071 if ( geomObj->_is_nil() ) return;
2073 // pass creation info of geomObj to myCreationInfoWdg
2075 if ( myCreationInfoWdg ) {
2077 GEOM::CreationInformationSeq_var info;
2080 info = geomObj->GetCreationInformation();
2084 myCreationInfoWdg->setInfo( info );
2088 void GeometryGUI::onAutoBringToFront()
2090 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2091 if( !isAutoBringToFront )
2094 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2095 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2098 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2099 if (!appStudy) return;
2101 GEOM_Displayer displayer( appStudy );
2103 SALOME_View* window = displayer.GetActiveView();
2104 if ( !window ) return;
2106 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2108 SALOME_ListIO selected;
2109 getApp()->selectionMgr()->selectedObjects( selected );
2110 if (!myTopLevelIOList.IsEmpty())
2112 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2114 Handle( SALOME_InteractiveObject ) io = It.Value();
2115 bool isSelected = false;
2116 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2118 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2119 if( io->isSame( sel_io ) )
2122 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2124 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2125 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2130 myTopLevelIOList.Assign(selected);
2131 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2133 Handle( SALOME_InteractiveObject ) io = It.Value();
2134 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2135 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2138 displayer.UpdateViewer();
2139 GeometryGUI::Modified();
2142 void GeometryGUI::updateFieldColorScale()
2144 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2146 GEOM_Displayer aDisplayer( aStudy );
2147 aDisplayer.UpdateColorScale();
2151 QString GeometryGUI::engineIOR() const
2153 if ( !CORBA::is_nil( GetGeomGen() ) )
2154 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2158 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2159 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2161 theWidth = theHeight = 0;
2163 Handle(TColStd_HArray1OfByte) aTexture;
2166 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2167 aTexture = aTextureMap[ theId ];
2168 if ( aTexture.IsNull() ) {
2169 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2170 if ( !aInsOp->_is_nil() ) {
2171 CORBA::Long aWidth, aHeight;
2172 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2173 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2175 theHeight = aHeight;
2177 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2179 for (int i = 0; i < aStream->length(); i++)
2180 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2181 aTextureMap[ theId ] = aTexture;
2189 LightApp_Selection* GeometryGUI::createSelection() const
2191 return new GEOMGUI_Selection();
2194 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2196 SalomeApp_Module::contextMenuPopup( client, menu, title );
2198 getApp()->selectionMgr()->selectedObjects( lst );
2200 //Add submenu for predefined materials
2201 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2202 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2203 QtxPopupMgr* mgr = popupMgr();
2204 //get parrent for submenu
2205 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2207 QMenu* oldMenu = act->menu() ;
2212 QMenu* matMenu = new QMenu();
2213 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2215 //Get current material model for the object
2217 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2218 if ( anApp && anApp->activeViewManager() ) {
2219 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2221 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2224 QString curModel = "";
2225 if ( v.canConvert<QString>() ) curModel = v.toString();
2226 // get list of all predefined materials
2227 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2229 foreach ( QString material, materials )
2231 QAction* menAct = matMenu->addAction( material );
2232 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2233 signalMapper->setMapping( menAct, material );
2234 menAct->setCheckable( true );
2235 // Set checked if this material is current
2236 Material_Model aModel;
2237 aModel.fromResources( material );
2238 if ( !found && aModel.toProperties() == curModel ) {
2239 menAct->setChecked( true );
2243 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2244 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2245 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2246 this, SLOT( OnSetMaterial( const QString & ) ) );
2247 act->setMenu( matMenu );
2251 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2252 Handle(SALOME_InteractiveObject) io = lst.First();
2253 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2254 _PTR(Study) study = appStudy->studyDS();
2255 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2257 QString aName = QString( obj->GetName().c_str() );
2258 aName.remove( QRegExp("\\s+$") );
2264 void GeometryGUI::OnSetMaterial(const QString& theName)
2266 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2270 void GeometryGUI::createPreferences()
2272 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2274 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2276 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2277 setPreferenceProperty( genGroup, "columns", 2 );
2279 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2280 LightApp_Preferences::Selector,
2281 "Geometry", "display_mode" );
2283 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2284 LightApp_Preferences::Color, "Geometry", "shading_color" );
2286 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2287 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2289 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2290 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2292 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2293 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2295 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2296 LightApp_Preferences::Color, "Geometry", "line_color" );
2298 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2299 LightApp_Preferences::Color, "Geometry", "point_color" );
2301 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2302 LightApp_Preferences::Color, "Geometry", "isos_color" );
2304 addPreference( tr( "PREF_LABEL_COLOR" ), genGroup,
2305 LightApp_Preferences::Color, "Geometry", "label_color" );
2307 addPreference( "", genGroup, LightApp_Preferences::Space );
2309 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2310 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2312 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2313 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2315 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2316 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2318 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2319 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2321 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2322 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2324 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2325 LightApp_Preferences::Selector,
2326 "Geometry", "material" );
2328 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2329 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2335 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2336 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2338 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2339 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2341 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2342 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2344 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2345 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2347 for (int i = 0; i < nb; i++) {
2348 setPreferenceProperty( wd[i], "min", 1 );
2349 setPreferenceProperty( wd[i], "max", 5 );
2352 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2353 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2355 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2356 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2358 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2359 setPreferenceProperty( aDimGroupId, "columns", 2 );
2361 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2362 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2364 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2365 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2367 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2368 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2370 int aDimFontId = addPreference( tr( "PREF_DIMENSIONS_FONT" ), aDimGroupId, LightApp_Preferences::Font, "Geometry", "dimensions_font" );
2372 int f = QtxFontEdit::Family | QtxFontEdit::Size;
2373 setPreferenceProperty( aDimFontId, "features", f );
2374 setPreferenceProperty( aDimFontId, "mode", QtxFontEdit::Custom );
2376 Handle(Font_FontMgr) fmgr = Font_FontMgr::GetInstance();
2377 QString aFontFile = "";
2378 resMgr->value("resources", "GEOM", aFontFile);
2379 aFontFile = aFontFile + QDir::separator() + "Y14.5M-2009.ttf";
2380 // add enginier font into combobox
2381 int fontID = QFontDatabase::addApplicationFont( aFontFile );
2382 Handle(Font_SystemFont) sf = new Font_SystemFont(
2383 new TCollection_HAsciiString("Y14.5M-2009"),
2385 new TCollection_HAsciiString(aFontFile.toLatin1().data()) );
2386 // register font in OCC font manager
2387 fmgr->RegisterFont( sf, Standard_False );
2389 // get list of supported fonts by OCC
2390 QStringList anOCCFonts;
2391 TColStd_SequenceOfHAsciiString theFontsNames;
2392 fmgr->GetAvailableFontsNames( theFontsNames );
2393 for(Standard_Integer i=1; i<=theFontsNames.Length(); i++) {
2394 Handle(TCollection_HAsciiString) str = theFontsNames(i);
2395 anOCCFonts << str->ToCString();
2397 anOCCFonts.removeDuplicates();
2398 // set the supported fonts into combobox to use its only
2399 setPreferenceProperty( aDimFontId, "fonts", anOCCFonts );
2401 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2402 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2404 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2405 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2406 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2408 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2409 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2411 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2412 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2414 QStringList aListOfLengthUnits;
2415 aListOfLengthUnits << "m";
2416 aListOfLengthUnits << "cm";
2417 aListOfLengthUnits << "mm";
2418 aListOfLengthUnits << "in.";
2419 aListOfLengthUnits << "ft.";
2421 QStringList aListOfAngUnits;
2422 aListOfAngUnits << "rad";
2423 aListOfAngUnits << "deg";
2425 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2426 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2428 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2429 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2431 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2432 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2434 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2435 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2436 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2438 addPreference( tr( "PREF_DIMENSIONS_USE_TEXT3D" ), aDimGroupId,
2439 LightApp_Preferences::Bool, "Geometry", "dimensions_use_text3d" );
2441 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2442 setPreferenceProperty( isoGroup, "columns", 2 );
2443 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2444 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2445 setPreferenceProperty( isoU, "min", 0 );
2446 setPreferenceProperty( isoU, "max", 100000 );
2447 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2448 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2449 setPreferenceProperty( isoV, "min", 0 );
2450 setPreferenceProperty( isoV, "max", 100000 );
2452 // Quantities with individual precision settings
2453 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2454 setPreferenceProperty( precGroup, "columns", 2 );
2456 const int nbQuantities = 8;
2457 int prec[nbQuantities], ii = 0;
2458 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2459 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2460 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2461 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2462 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2463 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2464 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2465 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2466 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2467 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2468 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2469 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2470 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2471 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2472 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2473 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2475 // Set property for precision value for spinboxes
2476 for ( ii = 0; ii < nbQuantities; ii++ ){
2477 setPreferenceProperty( prec[ii], "min", -14 );
2478 setPreferenceProperty( prec[ii], "max", 14 );
2479 setPreferenceProperty( prec[ii], "precision", 2 );
2482 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2483 setPreferenceProperty( VertexGroup, "columns", 2 );
2485 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2486 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2488 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2489 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2491 // Set property for default display mode
2492 QStringList aModesList;
2493 aModesList.append( tr("MEN_WIREFRAME") );
2494 aModesList.append( tr("MEN_SHADING") );
2495 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2496 aModesList.append( tr("MEN_TEXTURE") );
2498 QList<QVariant> anIndexesList;
2499 anIndexesList.append(0);
2500 anIndexesList.append(1);
2501 anIndexesList.append(2);
2502 anIndexesList.append(3);
2504 setPreferenceProperty( dispmode, "strings", aModesList );
2505 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2507 // Set property for top level display mode
2508 QStringList aTopModesList;
2509 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2510 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2511 aTopModesList.append( tr("MEN_WIREFRAME") );
2512 aTopModesList.append( tr("MEN_SHADING") );
2513 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2515 QList<QVariant> aTopIndexesList;
2516 aTopIndexesList.append(0);
2517 aTopIndexesList.append(1);
2518 aTopIndexesList.append(2);
2519 aTopIndexesList.append(3);
2520 aTopIndexesList.append(4);
2522 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2523 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2525 // Set property for step value for spinboxes
2526 setPreferenceProperty( step, "min", 1 );
2527 setPreferenceProperty( step, "max", 10000 );
2528 setPreferenceProperty( step, "precision", 3 );
2530 // Set property for trandparency value for spinboxes
2531 setPreferenceProperty( transparency, "min", 0 );
2532 setPreferenceProperty( transparency, "max", 100 );
2534 // Set property for deflection value for spinboxes
2535 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2536 setPreferenceProperty( defl, "max", 1.0 );
2537 setPreferenceProperty( defl, "step", 1.0e-04 );
2538 setPreferenceProperty( defl, "precision", 6 );
2540 // Set property for default material
2541 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2543 // Set property vertex marker type
2544 QList<QVariant> aMarkerTypeIndicesList;
2545 QList<QVariant> aMarkerTypeIconsList;
2547 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2548 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2549 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2550 aMarkerTypeIndicesList << (i-1);
2551 aMarkerTypeIconsList << pixmap;
2554 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2555 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2557 // Set property for vertex marker scale
2558 QList<QVariant> aMarkerScaleIndicesList;
2559 QStringList aMarkerScaleValuesList;
2561 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2562 aMarkerScaleIndicesList << iii;
2563 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2566 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2567 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2569 // Scalar bar for field step presentation
2570 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2571 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2573 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2574 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2575 setPreferenceProperty( sbXPosition, "min", 0 );
2576 setPreferenceProperty( sbXPosition, "max", 1 );
2577 setPreferenceProperty( sbXPosition, "step", 0.05 );
2579 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2580 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2581 setPreferenceProperty( sbYPosition, "min", 0 );
2582 setPreferenceProperty( sbYPosition, "max", 1 );
2583 setPreferenceProperty( sbYPosition, "step", 0.05 );
2585 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2586 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2587 setPreferenceProperty( sbWidth, "min", 0 );
2588 setPreferenceProperty( sbWidth, "max", 1 );
2589 setPreferenceProperty( sbWidth, "step", 0.05 );
2591 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2592 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2593 setPreferenceProperty( sbHeight, "min", 0 );
2594 setPreferenceProperty( sbHeight, "max", 1 );
2595 setPreferenceProperty( sbHeight, "step", 0.05 );
2597 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2598 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2599 setPreferenceProperty( sbTextHeight, "min", 6 );
2600 setPreferenceProperty( sbTextHeight, "max", 24 );
2601 setPreferenceProperty( sbTextHeight, "step", 1 );
2603 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2604 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2605 setPreferenceProperty( sbNbIntervals, "min", 2 );
2606 setPreferenceProperty( sbNbIntervals, "max", 64 );
2607 setPreferenceProperty( sbNbIntervals, "step", 1 );
2609 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2610 setPreferenceProperty( originGroup, "columns", 2 );
2612 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2613 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2614 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2615 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2617 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2618 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2620 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2621 setPreferenceProperty( operationsGroup, "columns", 2 );
2623 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2624 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2626 addPreference( tr( "PREF_HIDE_INPUT_OBJECT" ), operationsGroup,
2627 LightApp_Preferences::Bool, "Geometry", "hide_input_object" );
2629 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2631 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2633 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2634 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2636 QStringList aHierarchyTypeList;
2637 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2638 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2639 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2641 QList<QVariant> aHierarchyTypeIndexesList;
2642 aHierarchyTypeIndexesList.append(0);
2643 aHierarchyTypeIndexesList.append(1);
2644 aHierarchyTypeIndexesList.append(2);
2646 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2647 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2649 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2650 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2652 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2654 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2655 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2657 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2658 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2659 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2660 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2661 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2662 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2663 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2664 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2666 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2667 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2668 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2669 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2670 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2671 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2678 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2680 if (section == "Geometry") {
2681 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2682 if (param == QString("SettingsGeomStep")) {
2683 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2684 EmitSignalDefaultStepValueChanged(spin_step);
2686 else if (param == QString("toplevel_color")) {
2687 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2688 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2690 else if (param == QString("toplevel_dm")) {
2691 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2693 else if (param == QString("scalar_bar_x_position") ||
2694 param == QString("scalar_bar_y_position") ||
2695 param == QString("scalar_bar_width") ||
2696 param == QString("scalar_bar_height") ||
2697 param == QString("scalar_bar_text_height") ||
2698 param == QString("scalar_bar_nb_intervals")) {
2699 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2701 GEOM_Displayer aDisplayer( aStudy );
2702 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2703 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2706 else if ( param == QString("dimensions_color") ||
2707 param == QString("dimensions_line_width") ||
2708 param == QString("dimensions_font") ||
2709 param == QString("dimensions_arrow_length") ||
2710 param == QString("dimensions_show_units") ||
2711 param == QString("dimensions_length_units") ||
2712 param == QString("dimensions_angle_units") ||
2713 param == QString("dimensions_use_text3d") ||
2714 param == QString("label_color") )
2716 SalomeApp_Application* anApp = getApp();
2722 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2728 GEOM_Displayer aDisplayer( aStudy );
2730 ViewManagerList aVMs;
2731 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2732 ViewManagerList::Iterator anIt = aVMs.begin();
2733 for ( ; anIt != aVMs.end(); ++anIt )
2735 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2741 SALOME_ListIO aVisible;
2742 aViewer->GetVisible( aVisible );
2743 aDisplayer.Redisplay( aVisible, false, aViewer );
2745 if ( param == QString( "label_color" ) ) {
2746 ViewManagerList aVMsVTK;
2747 anApp->viewManagers( SVTK_Viewer::Type(), aVMsVTK );
2748 ViewManagerList::Iterator anIt = aVMsVTK.begin();
2749 for ( ; anIt != aVMsVTK.end(); ++anIt )
2751 SVTK_Viewer* aViewer = dynamic_cast<SVTK_Viewer*>( (*anIt)->getViewModel() );
2756 SALOME_ListIO aVisible;
2757 aViewer->GetVisible( aVisible );
2758 aDisplayer.Redisplay( aVisible, false, aViewer );
2761 aDisplayer.UpdateViewer();
2763 else if ( param.startsWith( "dependency_tree") )
2764 emit SignalDependencyTreeParamChanged( section, param );
2768 LightApp_Displayer* GeometryGUI::displayer()
2771 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2775 void GeometryGUI::setLocalSelectionMode(const int mode)
2777 myLocalSelectionMode = mode;
2780 int GeometryGUI::getLocalSelectionMode() const
2782 return myLocalSelectionMode;
2785 const char gSeparator = '_'; // character used to separate parameter names
2786 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2789 * \brief Store visual parameters
2791 * This method is called just before the study document is saved.
2792 * Store visual parameters in AttributeParameter attribute(s)
2794 void GeometryGUI::storeVisualParameters (int savePoint)
2796 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2797 if ( !appStudy || !appStudy->studyDS() )
2799 _PTR(Study) studyDS = appStudy->studyDS();
2801 // componentName is used for encoding of entries when storing them in IParameters
2802 std::string componentName = myComponentGeom->ComponentDataType();
2803 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2804 //if (!aSComponent) return;
2807 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2808 componentName.c_str(),
2810 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2812 QSet<QString> anEntriesToStoreShared;
2813 QList<SUIT_ViewManager*> lst;
2814 QList<SUIT_ViewManager*>::Iterator it;
2816 // main cycle to store parameters of displayed objects
2818 getApp()->viewManagers(lst);
2819 for (it = lst.begin(); it != lst.end(); it++) {
2820 SUIT_ViewManager* vman = *it;
2821 QString vType = vman->getType();
2822 int aMgrId = vman->getGlobalId();
2823 // saving VTK actors properties
2824 QVector<SUIT_ViewWindow*> views = vman->getViews();
2825 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2826 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
2827 ObjMap::ConstIterator o_it = anObjects.begin();
2828 for (; o_it != anObjects.end(); o_it++) {
2829 const PropMap& aProps = o_it.value();
2831 //Check that object exists in the study
2832 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2833 if ( !obj || !(aProps.count() > 0))
2835 // entry is "encoded" = it does NOT contain component adress, since it is a
2836 // subject to change on next component loading
2838 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2840 _PTR(GenericAttribute) anAttr;
2841 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2844 // remember entry of object to store shared GEOM properties
2845 // (e.g. dimension properties).
2846 if ( vType == OCCViewer_Viewer::Type() )
2848 anEntriesToStoreShared.insert( o_it.key() );
2851 QString param, occParam = vType;
2852 occParam += GEOM::sectionSeparator();
2853 occParam += QString::number(aMgrId);
2854 occParam += GEOM::sectionSeparator();
2856 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2857 param = occParam + GEOM::propertyName( GEOM::Visibility );
2858 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2861 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2862 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2863 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2866 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2867 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2869 val << QString::number(c.redF());
2870 val << QString::number(c.greenF());
2871 val << QString::number(c.blueF());
2872 param = occParam + GEOM::propertyName( GEOM::Color );
2873 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2876 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2877 param = occParam + GEOM::propertyName( GEOM::Texture );
2878 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2881 if (vType == SVTK_Viewer::Type()) {
2882 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2883 param = occParam + GEOM::propertyName( GEOM::Opacity );
2884 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2886 } else if (vType == SOCC_Viewer::Type()) {
2887 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2888 param = occParam + GEOM::propertyName( GEOM::Transparency );
2889 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2892 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2893 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2894 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2898 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2899 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2900 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2903 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2904 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2905 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2908 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
2909 param = occParam + GEOM::propertyName( GEOM::Vertices );
2910 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
2913 if (aProps.contains(GEOM::propertyName( GEOM::ShowName ))) {
2914 param = occParam + GEOM::propertyName( GEOM::ShowName );
2915 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::ShowName )).toString().toStdString());
2918 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2919 param = occParam + GEOM::propertyName( GEOM::Deflection );
2920 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2923 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2924 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2925 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2926 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2929 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2930 param = occParam + GEOM::propertyName( GEOM::Material );
2931 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2934 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2935 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2936 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2939 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2940 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2941 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2943 } // object iterator
2945 } // for (viewManagers)
2947 // store dimension attributes of objects:
2948 // since the displayed object always persists in property map, we remember the object entries
2949 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
2950 QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
2951 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
2952 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
2954 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
2955 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName);
2957 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
2959 if ( aDimensions.GetNumber() == 0 )
2964 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
2969 * \brief Restore visual parameters
2971 * This method is called after the study document is opened.
2972 * Restore visual parameters from AttributeParameter attribute(s)
2974 void GeometryGUI::restoreVisualParameters (int savePoint)
2976 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2977 if (!appStudy || !appStudy->studyDS())
2979 _PTR(Study) studyDS = appStudy->studyDS();
2981 // componentName is used for encoding of entries when storing them in IParameters
2982 std::string componentName = myComponentGeom->ComponentDataType();
2983 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2984 //if (!aSComponent) return;
2987 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2988 componentName.c_str(),
2990 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2992 std::vector<std::string> entries = ip->getEntries();
2994 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2996 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2997 QString entry (ip->decodeEntry(*entIt).c_str());
2999 // Check that the entry corresponds to a real object in the Study
3000 // as the object may be deleted or modified after the visual state is saved.
3001 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
3002 if (!so) continue; //Skip the not existent entry
3004 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
3005 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
3007 std::vector<std::string>::iterator namesIt = paramNames.begin();
3008 std::vector<std::string>::iterator valuesIt = paramValues.begin();
3010 // actors are stored in a map after displaying of them for
3011 // quicker access in the future: map < viewID to actor >
3012 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
3013 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
3015 QString viewerTypStr;
3016 QString viewIndexStr;
3018 QVector<PropMap> aListOfMap;
3020 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
3022 // visual parameters are stored in strings as follows:
3023 // 1) ViewerType_ViewIndex_ParamName
3024 // 2) ViewerType_ParamName (shared for GEOM module)
3025 // '_' is used as separator and should not be used in viewer type or parameter names.
3026 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
3028 bool isShared = lst.size() == 2;
3029 bool isViewer = lst.size() == 3;
3030 if ( !isShared && !isViewer )
3035 // shared visual parameters
3038 QString aParamNameStr( lst[1] );
3039 QString aValuesStr( (*valuesIt).c_str() );
3041 // shared dimension properties are stored as attribute
3042 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
3044 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
3045 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
3051 // per view visual parameters
3052 viewerTypStr = lst[0];
3053 viewIndexStr = lst[1];
3054 QString paramNameStr = lst[2];
3057 viewIndex = viewIndexStr.toUInt(&ok);
3058 if (!ok) // bad conversion of view index to integer
3061 if ((viewIndex + 1) > aListOfMap.count()) {
3062 aListOfMap.resize(viewIndex + 1);
3065 QString val((*valuesIt).c_str());
3066 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
3067 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
3068 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
3069 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
3070 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
3071 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
3072 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
3073 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
3074 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
3075 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
3076 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
3077 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
3078 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
3079 QStringList rgb = val.split(GEOM::subSectionSeparator());
3080 if (rgb.count() == 3) {
3081 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
3082 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
3084 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
3085 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
3086 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
3087 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
3088 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
3089 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
3090 } else if (paramNameStr == GEOM::propertyName( GEOM::ShowName )) {
3091 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::ShowName ), val == "true" || val == "1");
3092 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3093 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3094 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3095 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3096 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3097 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3098 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3099 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3100 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3101 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3103 } // for names/parameters iterator
3105 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3107 for (int index = 0; index < aListOfMap.count(); index++) {
3108 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
3110 //Get Visibility property of the current PropMap
3111 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3112 SUIT_ViewManager* vman = lst.at(index);
3113 SUIT_ViewModel* vmodel = vman->getViewModel();
3114 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
3117 } // for entries iterator
3119 // update all VTK and OCC views
3120 QList<SUIT_ViewManager*> lst;
3121 getApp()->viewManagers(lst);
3122 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3123 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3126 if (vmodel->getType() == SVTK_Viewer::Type()) {
3127 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3128 vtkView->getRenderer()->ResetCameraClippingRange();
3131 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3132 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3133 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3140 // Compute current name mode of the viewer
3141 void UpdateNameMode( SalomeApp_Application* app )
3143 bool isMode = false;
3144 SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() );
3145 SUIT_ViewWindow* viewWindow = app->desktop()->activeWindow();
3146 GEOM_Displayer displayer( aStudy );
3147 int aMgrId = viewWindow->getViewManager()->getGlobalId();
3149 SALOME_View* window = displayer.GetActiveView();
3150 if ( !window ) return;
3152 SALOME_ListIO anIOlst;
3153 window->GetVisible( anIOlst );
3155 for ( SALOME_ListIteratorOfListIO It( anIOlst ); It.More(); It.Next() ) {
3156 Handle( SALOME_InteractiveObject ) io = It.Value();
3157 QVariant v = aStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::ShowName ), QVariant() );
3158 bool isIONameMode = v.isValid() ? v.toBool() : false;
3162 viewWindow->setProperty( "NameMode", isMode );
3165 void GeometryGUI::onViewAboutToShow()
3167 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3168 QAction* a = action( GEOMOp::OpSwitchVectors );
3169 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3170 QAction* aNameAction = action( GEOMOp::OpSwitchName );
3172 a->setEnabled(true);
3173 bool vmode = window->property("VectorsMode").toBool();
3174 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3175 aVerticesAction->setEnabled(true);
3176 vmode = window->property("VerticesMode").toBool();
3177 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3178 UpdateNameMode( getApp() );
3179 aNameAction->setEnabled(true);
3180 vmode = window->property("NameMode").toBool();
3181 aNameAction->setText ( vmode == 1 ? tr( "MEN_NAME_MODE_OFF" ) : tr("MEN_NAME_MODE_ON") );
3183 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3184 a->setEnabled(false);
3185 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3186 aVerticesAction->setEnabled(false);
3187 aNameAction->setText ( tr("MEN_NAME_MODE_ON") );
3188 aNameAction->setEnabled(false);
3193 \brief Return action by id
3194 \param id identifier of the action
3197 QAction* GeometryGUI::getAction(const int id) {
3202 \brief GEOM module message handler
3204 This method can be re-implemented in the subclasses.
3205 This is a GEOM module message handler.
3207 \param msg the message received.
3209 void GeometryGUI::message(const QString& msg)
3212 QStringList data = msg.split("/");
3213 const int nbStrings = data.count();
3215 if (nbStrings > 0) {
3216 if (data[0] == "modified") {
3218 QString anIOR = nbStrings > 1 ? data[1] : QString();
3220 if ( anIOR.isEmpty() ) {
3224 // Get the geom object.
3225 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3227 // Clear the shape buffer
3228 GeometryGUI::ClearShapeBuffer (anObj);
3234 \brief Clears the shape buffer.
3236 This is a static method. It clears the shape buffer.
3238 \param theObj the object
3240 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3242 if ( CORBA::is_nil( theObj ) )
3245 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3246 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3247 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3249 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3254 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3259 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3263 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3264 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3265 _PTR(GenericAttribute) anAttr;
3266 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3267 _PTR(AttributeIOR) anIOR ( anAttr );
3268 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3269 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3275 \brief Returns the object from IOR.
3277 This is a static method. It returns the object from its IOR.
3279 \param IOR object IOR
3280 \return GEOM object.
3282 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3284 GEOM::GEOM_Object_var geomObj;
3285 if ( !IOR.isEmpty() ) {
3286 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3287 ( IOR.toLatin1().constData() );
3288 if ( !CORBA::is_nil( corbaObj ) )
3289 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3291 return geomObj._retn();
3295 \brief Returns IOR of the object.
3297 This is a static method. It returns the object's IOR.
3299 \param object the GEOM object.
3300 \return object's IOR.
3302 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3305 if ( !CORBA::is_nil( object ) ) {
3306 CORBA::String_var anIOR =
3307 SalomeApp_Application::orb()->object_to_string( object );
3314 \brief Check if this object is can't be renamed in place
3316 This method can be re-implemented in the subclasses.
3317 Return true in case if object isn't reference or component (module root).
3319 \param entry column id
3320 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3322 bool GeometryGUI::renameAllowed( const QString& entry) const {
3324 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3325 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3326 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3328 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3332 Rename object by entry.
3333 \param entry entry of the object
3334 \param name new name of the object
3335 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3337 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3339 bool result = false;
3341 SalomeApp_Application* app =
3342 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3343 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3348 _PTR(Study) aStudy = appStudy->studyDS();
3353 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3355 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3359 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3360 _PTR(GenericAttribute) anAttr;
3362 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3363 _PTR(AttributeName) aName (anAttr);
3365 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3366 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3367 if (!CORBA::is_nil(anObj)) {
3368 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3369 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3377 void GeometryGUI::updateMaterials()
3379 LightApp_Preferences* pref = preferences();
3381 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3382 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3383 if ( !materials.contains( currentMaterial ) )
3384 // user material set as default in the preferences, might be removed
3385 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3387 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3389 setPreferenceProperty( prefItem->id(),
3390 "strings", materials );
3391 prefItem->retrieve();
3397 \brief Check if the module allows "drag" operation of its objects.
3399 Overloaded from LightApp_Module class.
3401 This function is a part of the general drag-n-drop mechanism.
3402 The goal of this function is to check data object passed as a parameter
3403 and decide if it can be dragged or no.
3405 \param what data object being tested for drag operation
3406 \return \c true if module allows dragging of the specified object
3407 \sa isDropAccepted(), dropObjects()
3409 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3411 // we allow dragging object under root and object from folder
3412 int aLevel = what->level();
3413 bool anObjectInFolder = false;
3415 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3417 _PTR(SObject) aSO = dataObj->object();
3419 _PTR(GenericAttribute) anAttr;
3420 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3421 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3422 _PTR(AttributeLocalID) aLocalID( anAttr );
3423 anObjectInFolder = aLocalID->Value() == 999;
3428 return aLevel == 2 || anObjectInFolder;
3432 \brief Check if the module allows "drop" operation on the given object.
3434 Overloaded from LightApp_Module class.
3436 This function is a part of the general drag-n-drop mechanism.
3437 The goal of this function is to check data object passed as a parameter
3438 and decide if it can be used as a target for the "drop" operation.
3439 The processing of the drop operation itself is done in the dropObjects() function.
3441 \param where target data object
3442 \return \c true if module supports dropping on the \a where data object
3443 \sa isDraggable(), dropObjects()
3445 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3447 // we allow dropping into folder and top-level GEOM object
3448 int aLevel = where->level();
3449 bool isFolder = false;
3451 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3453 _PTR(SObject) aSO = dataObj->object();
3455 _PTR(GenericAttribute) anAttr;
3456 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3457 _PTR(AttributeLocalID) aLocalID( anAttr );
3458 isFolder = aLocalID->Value() == 999;
3463 return aLevel == 1 || isFolder;
3467 \brief Complete drag-n-drop operation.
3469 Overloaded from LightApp_Module class.
3471 This function is a part of the general drag-n-drop mechanism.
3472 Its goal is to handle dropping of the objects being dragged according
3473 to the chosen operation (move). The dropping is performed in the
3474 context of the parent data object \a where and the \a row (position in the
3475 children index) at which the data should be dropped. If \a row is equal to -1,
3476 this means that objects are added to the end of the children list.
3478 \param what objects being dropped
3479 \param where target data object
3480 \param row child index at which the drop operation is performed
3481 \param action drag-n-drop operation (Qt::DropAction) - move
3483 \sa isDraggable(), isDropAccepted()
3485 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3486 const int row, Qt::DropAction action )
3488 if (action != Qt::CopyAction && action != Qt::MoveAction)
3489 return; // unsupported action
3491 // get parent object
3492 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3493 if ( !dataObj ) return; // wrong parent
3494 _PTR(SObject) parentObj = dataObj->object();
3496 // Find the current Study and StudyBuilder
3497 _PTR(Study) aStudy = parentObj->GetStudy();
3498 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3499 // collect all parents of the target node
3500 QStringList parentIDs;
3501 _PTR(SObject) parent = parentObj;
3502 while( !parent->IsNull() ) {
3503 parentIDs << parent->GetID().c_str();
3504 parent = aUseCaseBuilder->GetFather(parent);
3507 // collect objects being dropped
3508 GEOM::object_list_var objects = new GEOM::object_list();
3509 objects->length( what.count() );
3511 for ( int i = 0; i < what.count(); i++ ) {
3512 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3513 if ( !dataObj ) continue; // skip wrong objects
3514 _PTR(SObject) sobj = dataObj->object();
3515 // check that dropped object is not a parent of target object
3516 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3517 return; // it's not allowed to move node into it's child
3519 objects[i] = _CAST(SObject, sobj)->GetSObject();
3522 objects->length( count );
3524 // call engine function
3525 GetGeomGen()->Move( objects.in(), // what
3526 _CAST(SObject, parentObj)->GetSObject(), // where
3529 // update Object browser
3530 getApp()->updateObjectBrowser( false );
3533 void GeometryGUI::emitDimensionsUpdated( QString entry )
3535 emit DimensionsUpdated( entry );