1 // Copyright (C) 2007-2014 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_DimensionProperty.h"
37 #include "GEOM_Constants.h"
38 #include "GEOM_Displayer.h"
39 #include "GEOM_AISShape.hxx"
40 #include "GEOMUtils_XmlHandler.hxx"
42 #include "GEOM_Actor.h"
44 #include <Material_ResourceMgr.h>
45 #include <Material_Model.h>
47 #include <SUIT_Desktop.h>
48 #include <SUIT_MessageBox.h>
49 #include <SUIT_ResourceMgr.h>
50 #include <SUIT_Session.h>
51 #include <SUIT_ViewManager.h>
53 #include <PyInterp_Interp.h>
55 #include <OCCViewer_ViewWindow.h>
56 #include <OCCViewer_ViewPort3d.h>
57 #include <OCCViewer_ViewModel.h>
58 #include <OCCViewer_ViewManager.h>
60 #include <SOCC_ViewModel.h>
61 #include <SOCC_ViewWindow.h>
63 #include <SVTK_ViewWindow.h>
64 #include <SVTK_RenderWindowInteractor.h>
65 #include <SVTK_InteractorStyle.h>
66 #include <SVTK_ViewModel.h>
68 #include <GraphicsView_Viewer.h>
70 #include <SalomeApp_Application.h>
71 #include <SalomeApp_DataObject.h>
72 #include <SalomeApp_Study.h>
73 #include <SalomeApp_Tools.h>
75 #include <LightApp_SelectionMgr.h>
76 #include <LightApp_VTKSelector.h>
77 #include <LightApp_DataObject.h>
78 #include <LightApp_Preferences.h>
80 #include <SALOME_LifeCycleCORBA.hxx>
81 // #include <SALOME_ListIO.hxx>
82 #include <SALOME_ListIteratorOfListIO.hxx>
84 #include <SALOMEDSClient_ClientFactory.hxx>
85 #include <SALOMEDSClient_IParameters.hxx>
87 #include <SALOMEDS_SObject.hxx>
89 #include <Basics_OCCTVersion.hxx>
100 #include <QSignalMapper>
102 #include <AIS_Drawer.hxx>
103 #include <AIS_ListOfInteractive.hxx>
104 #include <AIS_ListIteratorOfListOfInteractive.hxx>
105 #include <Prs3d_Drawer.hxx>
106 #include <Prs3d_IsoAspect.hxx>
107 #include <Aspect_TypeOfMarker.hxx>
108 #include <OSD_SharedLibrary.hxx>
109 #include <NCollection_DataMap.hxx>
111 #include <TColStd_HArray1OfByte.hxx>
113 #include <utilities.h>
115 #include <vtkCamera.h>
116 #include <vtkRenderer.h>
118 #include <Standard_Failure.hxx>
119 #include <Standard_ErrorHandler.hxx>
121 #include "GEOM_version.h"
122 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
125 Standard_EXPORT CAM_Module* createModule() {
126 return new GeometryGUI();
129 Standard_EXPORT char* getModuleVersion() {
130 return (char*)GEOM_VERSION_STR;
134 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
136 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
138 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
140 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
141 if (CORBA::is_nil(myComponentGeom))
143 return GeometryGUI::myComponentGeom;
146 bool GeometryGUI::InitGeomGen()
149 if ( CORBA::is_nil( myComponentGeom ) ) return false;
153 //=======================================================================
154 // function : ClientSObjectToObject
156 //=======================================================================
157 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
159 _PTR(GenericAttribute) anAttr;
160 CORBA::Object_var anObj;
162 std::string aValue = theSObject->GetIOR();
163 if (strcmp(aValue.c_str(), "") != 0) {
164 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
165 anObj = anORB->string_to_object(aValue.c_str());
168 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
170 return anObj._retn();
173 //=======================================================================
174 // function : ClientStudyToStudy
176 //=======================================================================
177 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
179 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
180 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
181 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
182 int aStudyID = theStudy->StudyId();
183 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
184 return aDSStudy._retn();
187 void GeometryGUI::Modified (bool theIsUpdateActions)
189 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
190 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
191 appStudy->Modified();
192 if ( theIsUpdateActions )
193 app->updateActions();
198 //=======================================================================
199 // function : GeometryGUI::GeometryGUI()
200 // purpose : Constructor
201 //=======================================================================
202 GeometryGUI::GeometryGUI() :
203 SalomeApp_Module( "GEOM" ),
206 if ( CORBA::is_nil( myComponentGeom ) )
208 Engines::EngineComponent_var comp =
209 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
210 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
213 myActiveDialogBox = 0;
215 gp_Pnt origin = gp_Pnt(0., 0., 0.);
216 gp_Dir direction = gp_Dir(0., 0., 1.);
217 myWorkingPlane = gp_Ax3(origin, direction);
220 myLocalSelectionMode = GEOM_ALLOBJECTS;
222 myCreationInfoWdg = 0;
224 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
226 Q_INIT_RESOURCE( GEOMGUI );
229 //=======================================================================
230 // function : GeometryGUI::~GeometryGUI()
231 // purpose : Destructor
232 //=======================================================================
233 GeometryGUI::~GeometryGUI()
235 while (!myOCCSelectors.isEmpty())
236 delete myOCCSelectors.takeFirst();
238 while (!myVTKSelectors.isEmpty())
239 delete myVTKSelectors.takeFirst();
241 qDeleteAll(myGUIMap);
244 //=======================================================================
245 // function : GeometryGUI::getLibrary()
246 // purpose : get or load GUI library by name [ internal ]
247 //=======================================================================
248 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
249 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
251 if ( !myGUIMap.contains( libraryName ) ) {
252 // try to load library if it is not loaded yet
254 QString dirs = getenv( "LD_LIBRARY_PATH" );
257 QString dirs = getenv( "PATH" );
260 if ( !dirs.isEmpty() ) {
261 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
262 QListIterator<QString> it( dirList ); it.toBack();
263 while ( it.hasPrevious() ) {
264 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
266 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
267 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
269 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
270 continue; // continue search further
272 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
273 if ( osdF != NULL ) {
274 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
275 GEOMGUI* libGUI = (*func)( this );
277 myGUIMap[ libraryName ] = libGUI;
278 break; // found and loaded!
285 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
288 //=======================================================================
289 // function : GeometryGUI::getPluginLibrary()
290 // purpose : get or load GUI Plugin library by name [ internal ]
291 //=======================================================================
292 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
293 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
295 if ( !myGUIMap.contains( libraryName ) ) {
296 // try to load library if it is not loaded yet
298 QString dirs = getenv( "LD_LIBRARY_PATH" );
301 QString dirs = getenv( "PATH" );
304 if ( !dirs.isEmpty() ) {
305 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
306 QListIterator<QString> it( dirList ); it.toBack();
307 while ( it.hasPrevious() ) {
308 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
310 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
311 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
313 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
314 continue; // continue search further
316 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
317 if ( osdF != NULL ) {
318 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
319 GEOMPluginGUI* libGUI = (*func)( this );
321 myGUIMap[ libraryName ] = libGUI;
322 break; // found and loaded!
329 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
332 //=======================================================================
333 // function : GeometryGUI::ActiveWorkingPlane()
334 // purpose : Activate Working Plane View
335 //=======================================================================
336 void GeometryGUI::ActiveWorkingPlane()
338 gp_Dir DZ = myWorkingPlane.Direction();
339 gp_Dir DY = myWorkingPlane.YDirection();
341 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
342 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
343 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
346 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
348 Handle(V3d_View) view3d = vw->getViewPort()->getView();
350 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
351 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
355 else if ( ViewVTK ) {
356 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
358 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
360 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
361 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
362 camera->SetFocalPoint(0,0,0);
369 //=======================================================================
370 // function : GeometryGUI::SetActiveDialogBox()
371 // purpose : Set active dialog box
372 //=======================================================================
373 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
375 myActiveDialogBox = (QDialog*)aDlg;
378 //=======================================================================
379 // function : GeometryGUI::EmitSignalDeactivateDialog()
380 // purpose : Emit a signal to deactivate the active dialog Box
381 //=======================================================================
382 void GeometryGUI::EmitSignalDeactivateDialog()
384 emit SignalDeactivateActiveDialog();
387 //=======================================================================
388 // function : GeometryGUI::EmitSignalCloseAllDialogs()
389 // purpose : Emit a signal to close all non modal dialogs box
390 //=======================================================================
391 void GeometryGUI::EmitSignalCloseAllDialogs()
393 emit SignalCloseAllDialogs();
396 //=======================================================================
397 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
398 // purpose : Emit a signal to inform that default real spin box step has
400 //=======================================================================
401 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
403 emit SignalDefaultStepValueChanged(newVal);
406 //=======================================================================
407 // function : GeometryGUI::OnGUIEvent()
408 // purpose : common slot for all menu/toolbar actions
409 //=======================================================================
410 void GeometryGUI::OnGUIEvent()
412 const QObject* obj = sender();
413 if ( !obj || !obj->inherits( "QAction" ) )
415 int id = actionId((QAction*)obj);
420 //=======================================================================
421 // function : GeometryGUI::OnGUIEvent()
422 // purpose : manage all events on GUI [static]
423 //=======================================================================
424 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
426 SUIT_Application* anApp = application();
428 SUIT_Desktop* desk = anApp->desktop();
430 // check type of the active viewframe
431 SUIT_ViewWindow* window = desk->activeWindow();
432 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
433 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
434 bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() );
435 // if current viewframe is not of OCC and not of VTK type - return immediately
436 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
437 QList<int> NotViewerDependentCommands;
438 NotViewerDependentCommands << GEOMOp::OpDelete
440 << GEOMOp::OpShowOnly
441 << GEOMOp::OpShowOnlyChildren
442 << GEOMOp::OpDiscloseChildren
443 << GEOMOp::OpConcealChildren
444 << GEOMOp::OpUnpublishObject
445 << GEOMOp::OpPublishObject
446 << GEOMOp::OpPointMarker
447 << GEOMOp::OpCreateFolder
448 << GEOMOp::OpSortChildren;
449 if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) {
450 // activate OCC viewer
451 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
454 // fix for IPAL9103, point 2
455 if ( CORBA::is_nil( GetGeomGen() ) ) {
456 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
461 // find corresponding GUI library
463 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
464 createOriginAndBaseVectors(); // internal operation
466 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
467 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
468 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
469 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
470 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
471 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
472 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
473 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
474 case GEOMOp::OpDelete: // MENU EDIT - DELETE
475 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
476 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
477 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
478 case GEOMOp::OpColor: // POPUP MENU - COLOR
479 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
480 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
481 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
482 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
483 case GEOMOp::OpIsos: // POPUP MENU - ISOS
484 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
485 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
486 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
487 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
488 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
489 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
490 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
491 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
492 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
493 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
494 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
495 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
496 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
497 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
498 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
499 case GEOMOp::OpClsBringToFront: //
500 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
501 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
502 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
503 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
504 libName = "GEOMToolsGUI";
506 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
507 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
508 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
509 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
510 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
511 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
512 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
513 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
514 case GEOMOp::OpHide: // MENU VIEW - ERASE
515 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
516 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
517 case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE
518 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
519 case GEOMOp::OpShading: // POPUP MENU - SHADING
520 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
521 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
522 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
523 case GEOMOp::OpVertices: // POPUP MENU - VERTICES
524 libName = "DisplayGUI";
526 case GEOMOp::OpPoint: // MENU BASIC - POINT
527 case GEOMOp::OpLine: // MENU BASIC - LINE
528 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
529 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
530 case GEOMOp::OpArc: // MENU BASIC - ARC
531 case GEOMOp::OpVector: // MENU BASIC - VECTOR
532 case GEOMOp::OpPlane: // MENU BASIC - PLANE
533 case GEOMOp::OpCurve: // MENU BASIC - CURVE
534 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
535 libName = "BasicGUI";
537 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
538 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
539 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
540 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
541 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
542 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
543 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
544 libName = "PrimitiveGUI";
546 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
547 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
548 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
549 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
550 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
551 libName = "GenerationGUI";
553 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
554 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
555 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
556 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
558 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
560 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
561 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
562 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
563 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
564 libName = "EntityGUI";
566 case GEOMOp::OpEdge: // MENU BUILD - EDGE
567 case GEOMOp::OpWire: // MENU BUILD - WIRE
568 case GEOMOp::OpFace: // MENU BUILD - FACE
569 case GEOMOp::OpShell: // MENU BUILD - SHELL
570 case GEOMOp::OpSolid: // MENU BUILD - SOLID
571 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
572 libName = "BuildGUI";
574 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
575 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
576 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
577 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
578 libName = "BooleanGUI";
580 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
581 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
582 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
583 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
584 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
585 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
586 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
587 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
588 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
589 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
590 libName = "TransformationGUI";
592 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
593 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
594 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
595 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
596 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
597 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
598 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
599 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
600 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
601 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
602 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
603 #ifdef DEBUG_CURVE_CREATOR
604 // for debug purposes, to be removed
605 case GEOMOp::OpCurveCreator: // MENU OPERATION - CURVE CREATOR
607 libName = "OperationGUI";
609 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
610 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
611 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
612 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
613 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
614 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
615 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
616 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
617 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
618 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
619 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
620 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
621 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
622 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
623 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
624 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
625 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
626 libName = "RepairGUI";
628 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
629 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
630 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
631 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
632 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
633 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
634 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
635 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
636 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
637 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
638 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
639 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
640 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
641 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
642 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
643 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
644 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
645 libName = "MeasureGUI";
647 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
648 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
649 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
650 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
651 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
652 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
653 libName = "GroupGUI";
655 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
656 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
657 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
658 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
659 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
660 libName = "BlocksGUI";
662 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
663 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
664 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
665 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
666 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
667 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
668 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
669 //libName = "AdvancedGUI";
672 if (myPluginActions.contains(id)) {
673 libName = myPluginActions[id].first;
675 GEOMPluginGUI* library = 0;
676 if ( !libName.isEmpty() ) {
678 libName = QString( "lib" ) + libName + ".so";
680 libName = libName + ".dll";
682 library = getPluginLibrary( libName );
685 // call method of corresponding GUI library
687 //QString action ("%1");
688 //action = action.arg(id);
690 //if( !theParam.isValid() )
691 library->OnGUIEvent( myPluginActions[id].second, desk );
693 // library->OnGUIEvent( id, desk, theParam);
696 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
698 updateCreationInfo();
704 GEOMGUI* library = 0;
705 if ( !libName.isEmpty() ) {
707 libName = QString( "lib" ) + libName + ".so";
709 libName = libName + ".dll";
711 library = getLibrary( libName );
714 // call method of corresponding GUI library
716 if( !theParam.isValid() )
717 library->OnGUIEvent( id, desk );
719 library->OnGUIEvent( id, desk, theParam);
722 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
724 updateCreationInfo();
727 //=================================================================================
728 // function : GeometryGUI::activateOperation()
730 //=================================================================================
731 bool GeometryGUI::activateOperation( int actionId )
733 OnGUIEvent(actionId);
737 //=================================================================================
738 // function : GeometryGUI::activateOperation()
740 //=================================================================================
741 bool GeometryGUI::activateOperation( const QString& actionId )
745 int id = actionId.toInt(&isOk);
752 //=================================================================================
753 // function : GeometryGUI::activateOperation()
755 //=================================================================================
756 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
760 QString pluginLib = plugin;
761 // TODO: if <plugin> is a plugin name, find plugin library name
762 if (myPluginLibs.contains(plugin))
763 pluginLib = myPluginLibs[plugin];
765 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
766 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
767 const PluginAction& anAction = actionsIter.value();
768 if (anAction.first == pluginLib && anAction.second == actionId) {
769 // activate operation
770 OnGUIEvent(actionsIter.key());
778 //=================================================================================
779 // function : GeometryGUI::OnKeyPress()
780 // purpose : Called when any key is pressed by user [static]
781 //=================================================================================
782 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
784 if ( !application() )
786 foreach ( GEOMGUI* lib, myGUIMap )
787 lib->OnKeyPress( e, application()->desktop(), w );
790 //=================================================================================
791 // function : GeometryGUI::OnMouseMove()
792 // purpose : Manages mouse move events [static]
793 //=================================================================================
794 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
796 if ( !application() )
798 foreach ( GEOMGUI* lib, myGUIMap )
799 lib->OnMouseMove( e, application()->desktop(), w );
802 //=================================================================================
803 // function : GeometryGUI::OnMouseRelease()
804 // purpose : Manages mouse release events [static]
805 //=================================================================================
806 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
808 if ( !application() )
810 foreach ( GEOMGUI* lib, myGUIMap )
811 lib->OnMouseRelease( e, application()->desktop(), w );
814 //=================================================================================
815 // function : GeometryGUI::OnMousePress()
816 // purpose : Manage mouse press events [static]
817 //=================================================================================
818 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
820 if ( !application() )
822 foreach ( GEOMGUI* lib, myGUIMap )
823 lib->OnMousePress( e, application()->desktop(), w );
826 //=======================================================================
827 // function : createGeomAction
829 //=======================================================================
830 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
831 const int accel, const bool toggle, const QString& shortcutAction )
833 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
834 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
835 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
837 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
839 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
840 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
842 application()->desktop(),
844 this, SLOT( OnGUIEvent() ),
848 //=======================================================================
849 // function : createOriginAndBaseVectors
851 //=======================================================================
852 void GeometryGUI::createOriginAndBaseVectors()
854 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
855 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
857 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
861 _PTR(Study) studyDS = appStudy->studyDS();
862 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
863 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
864 if ( !aBasicOperations->_is_nil() ) {
865 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
866 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
867 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
868 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
869 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
870 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
872 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
873 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
874 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
875 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
876 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
878 getApp()->updateObjectBrowser( true );
884 //=======================================================================
885 // function : GeometryGUI::initialize()
886 // purpose : Called when GEOM module is created
887 //=======================================================================
888 void GeometryGUI::initialize( CAM_Application* app )
890 SalomeApp_Module::initialize( app );
892 // ----- create actions --------------
894 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
896 createGeomAction( GEOMOp::OpPoint, "POINT" );
897 createGeomAction( GEOMOp::OpLine, "LINE" );
898 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
899 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
900 createGeomAction( GEOMOp::OpArc, "ARC" );
901 createGeomAction( GEOMOp::OpCurve, "CURVE" );
902 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
903 createGeomAction( GEOMOp::OpVector, "VECTOR" );
904 createGeomAction( GEOMOp::OpPlane, "PLANE" );
905 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
906 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
908 createGeomAction( GEOMOp::OpBox, "BOX" );
909 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
910 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
911 createGeomAction( GEOMOp::OpTorus, "TORUS" );
912 createGeomAction( GEOMOp::OpCone, "CONE" );
913 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
914 createGeomAction( GEOMOp::OpDisk, "DISK" );
916 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
917 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
918 createGeomAction( GEOMOp::OpFilling, "FILLING" );
919 createGeomAction( GEOMOp::OpPipe, "PIPE" );
920 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
922 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
923 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
924 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
925 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
926 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
928 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
929 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
931 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
933 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
934 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
936 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
937 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
938 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
939 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
941 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
943 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
945 createGeomAction( GEOMOp::OpEdge, "EDGE" );
946 createGeomAction( GEOMOp::OpWire, "WIRE" );
947 createGeomAction( GEOMOp::OpFace, "FACE" );
948 createGeomAction( GEOMOp::OpShell, "SHELL" );
949 createGeomAction( GEOMOp::OpSolid, "SOLID" );
950 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
952 createGeomAction( GEOMOp::OpFuse, "FUSE" );
953 createGeomAction( GEOMOp::OpCommon, "COMMON" );
954 createGeomAction( GEOMOp::OpCut, "CUT" );
955 createGeomAction( GEOMOp::OpSection, "SECTION" );
957 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
958 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
959 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
960 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
961 createGeomAction( GEOMOp::OpScale, "SCALE" );
962 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
963 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
964 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
965 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
967 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
968 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
969 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
970 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
971 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
972 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
973 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
974 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
975 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
976 #ifdef DEBUG_CURVE_CREATOR
977 // for debug purposes, to be removed
978 createGeomAction( GEOMOp::OpCurveCreator, "CURVE_CREATOR" );
980 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
981 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
983 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
984 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
985 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
987 createGeomAction( GEOMOp::OpSewing, "SEWING" );
988 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
989 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
990 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
991 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
992 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
993 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
994 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
995 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
996 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
997 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
998 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
999 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1000 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1001 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1002 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1003 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1005 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1006 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1007 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1008 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1009 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1010 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1011 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1012 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1013 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1015 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1016 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1017 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1018 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1019 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1020 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1022 #ifdef _DEBUG_ // PAL16821
1023 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1026 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1027 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1028 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1029 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1030 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1031 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1032 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1033 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1034 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1035 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1036 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1037 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1038 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1039 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1040 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1041 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1042 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1043 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1044 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1045 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1046 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1047 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1048 createGeomAction( GEOMOp::OpHide, "ERASE" );
1050 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1051 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1052 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1053 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1054 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1055 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1056 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1057 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1058 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1059 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1060 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1061 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1062 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1063 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1064 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1065 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1066 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1067 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1068 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1069 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1070 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1071 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1072 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1073 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1074 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1075 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1076 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1077 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1078 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1079 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1081 // Create actions for increase/decrease transparency shortcuts
1082 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1083 "Geometry:Increase transparency");
1084 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1085 "Geometry:Decrease transparency");
1087 // Create actions for increase/decrease number of isolines
1088 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1089 "Geometry:Increase number of isolines");
1090 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1091 "Geometry:Decrease number of isolines");
1093 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1094 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1095 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1096 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1097 //@@ 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 @@//
1099 // ---- create menus --------------------------
1101 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1103 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1104 createMenu( GEOMOp::OpDelete, editId, -1 );
1106 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1108 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1109 createMenu( GEOMOp::OpPoint, basicId, -1 );
1110 createMenu( GEOMOp::OpLine, basicId, -1 );
1111 createMenu( GEOMOp::OpCircle, basicId, -1 );
1112 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1113 createMenu( GEOMOp::OpArc, basicId, -1 );
1114 createMenu( GEOMOp::OpCurve, basicId, -1 );
1115 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1116 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1117 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1118 createMenu( separator(), basicId, -1 );
1119 createMenu( GEOMOp::OpVector, basicId, -1 );
1120 createMenu( GEOMOp::OpPlane, basicId, -1 );
1121 createMenu( GEOMOp::OpLCS, basicId, -1 );
1122 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1124 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1125 createMenu( GEOMOp::OpBox, primId, -1 );
1126 createMenu( GEOMOp::OpCylinder, primId, -1 );
1127 createMenu( GEOMOp::OpSphere, primId, -1 );
1128 createMenu( GEOMOp::OpTorus, primId, -1 );
1129 createMenu( GEOMOp::OpCone, primId, -1 );
1130 createMenu( GEOMOp::OpRectangle, primId, -1 );
1131 createMenu( GEOMOp::OpDisk, primId, -1 );
1132 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1134 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1135 createMenu( GEOMOp::OpPrism, genId, -1 );
1136 createMenu( GEOMOp::OpRevolution, genId, -1 );
1137 createMenu( GEOMOp::OpFilling, genId, -1 );
1138 createMenu( GEOMOp::OpPipe, genId, -1 );
1139 createMenu( GEOMOp::OpPipePath, genId, -1 );
1141 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1142 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1143 //@@ 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 @@//
1145 createMenu( separator(), newEntId, -1 );
1147 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1148 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1149 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1150 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1151 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1152 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1154 createMenu( separator(), newEntId, -1 );
1156 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1157 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1158 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1160 createMenu( separator(), newEntId, -1 );
1162 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1163 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1164 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1165 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1166 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1168 createMenu( separator(), newEntId, -1 );
1170 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1172 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1173 createMenu( GEOMOp::OpEdge, buildId, -1 );
1174 createMenu( GEOMOp::OpWire, buildId, -1 );
1175 createMenu( GEOMOp::OpFace, buildId, -1 );
1176 createMenu( GEOMOp::OpShell, buildId, -1 );
1177 createMenu( GEOMOp::OpSolid, buildId, -1 );
1178 createMenu( GEOMOp::OpCompound, buildId, -1 );
1180 createMenu( separator(), newEntId, -1 );
1182 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1184 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1187 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1189 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1190 createMenu( GEOMOp::OpFuse, boolId, -1 );
1191 createMenu( GEOMOp::OpCommon, boolId, -1 );
1192 createMenu( GEOMOp::OpCut, boolId, -1 );
1193 createMenu( GEOMOp::OpSection, boolId, -1 );
1195 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1196 createMenu( GEOMOp::OpTranslate, transId, -1 );
1197 createMenu( GEOMOp::OpRotate, transId, -1 );
1198 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1199 createMenu( GEOMOp::OpMirror, transId, -1 );
1200 createMenu( GEOMOp::OpScale, transId, -1 );
1201 createMenu( GEOMOp::OpOffset, transId, -1 );
1202 createMenu( GEOMOp::OpProjection, transId, -1 );
1203 createMenu( separator(), transId, -1 );
1204 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1205 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1207 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1208 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1209 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1210 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1212 createMenu( separator(), operId, -1 );
1214 createMenu( GEOMOp::OpPartition, operId, -1 );
1215 createMenu( GEOMOp::OpArchimede, operId, -1 );
1216 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1217 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1219 createMenu( separator(), operId, -1 );
1221 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1222 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1223 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1224 createMenu( GEOMOp::OpChamfer, operId, -1 );
1225 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1226 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1227 #ifdef DEBUG_CURVE_CREATOR
1228 // for debug purposes, to be removed
1229 createMenu( separator(), operId, -1 );
1230 createMenu( GEOMOp::OpCurveCreator, operId, -1 );
1232 //createMenu( GEOMOp::OpClipping, operId, -1 );
1234 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1235 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1236 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1237 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1238 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1239 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1240 createMenu( GEOMOp::OpSewing, repairId, -1 );
1241 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1242 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1243 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1244 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1245 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1246 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1247 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1248 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1249 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1250 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1251 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1253 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1254 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1255 createMenu( GEOMOp::OpProperties, measurId, -1 );
1256 createMenu( separator(), measurId, -1 );
1257 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1258 createMenu( GEOMOp::OpInertia, measurId, -1 );
1259 createMenu( GEOMOp::OpNormale, measurId, -1 );
1260 createMenu( separator(), measurId, -1 );
1261 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1262 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1263 createMenu( separator(), measurId, -1 );
1265 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1266 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1267 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1268 createMenu( GEOMOp::OpAngle, dimId, -1 );
1269 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1271 createMenu( separator(), measurId, -1 );
1272 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1273 createMenu( separator(), measurId, -1 );
1274 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1275 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1276 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1277 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1278 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1280 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1281 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1282 createMenu( separator(), toolsId, -1 );
1283 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1286 createMenu( separator(), toolsId, -1 );
1287 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1288 createMenu( separator(), toolsId, -1 );
1290 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1291 createMenu( separator(), viewId, -1 );
1293 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1294 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1295 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1296 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1297 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1298 createMenu( separator(), dispmodeId, -1 );
1299 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1300 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1302 createMenu( separator(), viewId, -1 );
1303 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1304 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1305 createMenu( separator(), viewId, -1 );
1306 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1307 createMenu( separator(), viewId, -1 );
1311 because of these items are accessible through object browser and viewers
1312 we have removed they from main menu
1314 createMenu( GEOMOp::OpShow, viewId, -1 );
1315 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1316 createMenu( GEOMOp::OpHide, viewId, -1 );
1319 // ---- create toolbars --------------------------
1321 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1322 createTool( GEOMOp::OpPoint, basicTbId );
1323 createTool( GEOMOp::OpLine, basicTbId );
1324 createTool( GEOMOp::OpCircle, basicTbId );
1325 createTool( GEOMOp::OpEllipse, basicTbId );
1326 createTool( GEOMOp::OpArc, basicTbId );
1327 createTool( GEOMOp::OpCurve, basicTbId );
1328 createTool( GEOMOp::OpVector, basicTbId );
1329 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1330 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1331 createTool( GEOMOp::OpIsoline, basicTbId );
1332 createTool( GEOMOp::OpPlane, basicTbId );
1333 createTool( GEOMOp::OpLCS, basicTbId );
1334 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1336 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1337 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1338 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1340 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1341 createTool( GEOMOp::OpBox, primTbId );
1342 createTool( GEOMOp::OpCylinder, primTbId );
1343 createTool( GEOMOp::OpSphere, primTbId );
1344 createTool( GEOMOp::OpTorus, primTbId );
1345 createTool( GEOMOp::OpCone, primTbId );
1346 createTool( GEOMOp::OpRectangle, primTbId );
1347 createTool( GEOMOp::OpDisk, primTbId );
1348 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1350 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1351 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1352 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1354 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1355 createTool( GEOMOp::OpFuse, boolTbId );
1356 createTool( GEOMOp::OpCommon, boolTbId );
1357 createTool( GEOMOp::OpCut, boolTbId );
1358 createTool( GEOMOp::OpSection, boolTbId );
1360 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1361 createTool( GEOMOp::OpPrism, genTbId );
1362 createTool( GEOMOp::OpRevolution, genTbId );
1363 createTool( GEOMOp::OpFilling, genTbId );
1364 createTool( GEOMOp::OpPipe, genTbId );
1365 createTool( GEOMOp::OpPipePath, genTbId );
1367 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1368 createTool( GEOMOp::OpTranslate, transTbId );
1369 createTool( GEOMOp::OpRotate, transTbId );
1370 createTool( GEOMOp::OpChangeLoc, transTbId );
1371 createTool( GEOMOp::OpMirror, transTbId );
1372 createTool( GEOMOp::OpScale, transTbId );
1373 createTool( GEOMOp::OpOffset, transTbId );
1374 createTool( GEOMOp::OpProjection, transTbId );
1375 createTool( separator(), transTbId );
1376 createTool( GEOMOp::OpMultiTranslate, transTbId );
1377 createTool( GEOMOp::OpMultiRotate, transTbId );
1379 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1380 createTool( GEOMOp::OpExplode, operTbId );
1381 createTool( GEOMOp::OpPartition, operTbId );
1382 createTool( GEOMOp::OpArchimede, operTbId );
1383 createTool( GEOMOp::OpShapesOnShape, operTbId );
1384 createTool( GEOMOp::OpSharedShapes, operTbId );
1386 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1387 createTool( GEOMOp::OpFillet1d, featTbId );
1388 createTool( GEOMOp::OpFillet2d, featTbId );
1389 createTool( GEOMOp::OpFillet3d, featTbId );
1390 createTool( GEOMOp::OpChamfer, featTbId );
1391 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1392 createTool( GEOMOp::OpExtrudedCut, featTbId );
1393 #ifdef DEBUG_CURVE_CREATOR
1394 // for debug purposes, to be removed
1395 createTool( GEOMOp::OpCurveCreator, featTbId );
1398 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1399 createTool( GEOMOp::OpEdge, buildTbId );
1400 createTool( GEOMOp::OpWire, buildTbId );
1401 createTool( GEOMOp::OpFace, buildTbId );
1402 createTool( GEOMOp::OpShell, buildTbId );
1403 createTool( GEOMOp::OpSolid, buildTbId );
1404 createTool( GEOMOp::OpCompound, buildTbId );
1406 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1407 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1408 createTool( GEOMOp::OpProperties, measureTbId );
1409 createTool( GEOMOp::OpCenterMass, measureTbId );
1410 createTool( GEOMOp::OpInertia, measureTbId );
1411 createTool( GEOMOp::OpNormale, measureTbId );
1412 createTool( separator(), measureTbId );
1413 createTool( GEOMOp::OpBoundingBox, measureTbId );
1414 createTool( GEOMOp::OpMinDistance, measureTbId );
1415 createTool( GEOMOp::OpAngle, measureTbId );
1416 createTool( GEOMOp::OpTolerance , measureTbId );
1417 createTool( separator(), measureTbId );
1418 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1419 createTool( GEOMOp::OpFreeFaces, measureTbId );
1420 createTool( separator(), measureTbId );
1421 createTool( GEOMOp::OpWhatIs, measureTbId );
1422 createTool( GEOMOp::OpCheckShape, measureTbId );
1423 createTool( GEOMOp::OpCheckCompound, measureTbId );
1424 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1425 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1427 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1428 createTool( GEOMOp::OpPictureImport, picturesTbId );
1430 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1433 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1434 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1435 //@@ 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 @@//
1437 // ---- create popup menus --------------------------
1439 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1440 QString clientOCC = "(client='OCCViewer')";
1441 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1442 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1444 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1445 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1446 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1447 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1449 QString autoColorPrefix =
1450 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1452 QtxPopupMgr* mgr = popupMgr();
1454 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1455 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1456 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1457 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1458 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1459 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1460 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1461 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1463 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1464 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1465 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1466 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1467 mgr->insert( separator(), -1, -1 ); // -----------
1469 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1470 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1471 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1472 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1473 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1474 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1475 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1476 mgr->insert( separator(), -1, -1 ); // -----------
1477 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1478 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1479 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1480 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1481 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1482 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1483 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1484 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1485 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1486 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1487 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1488 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1489 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1490 mgr->insert( separator(), dispmodeId, -1 );
1491 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1492 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1493 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1494 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1495 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1496 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1497 mgr->insert( separator(), -1, -1 ); // -----------
1499 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1500 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1501 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1502 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1503 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1504 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1505 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1506 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1507 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1508 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1510 // material properties
1511 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1512 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1515 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1516 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1518 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1519 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1520 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1522 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1523 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1525 mgr->insert( separator(), -1, -1 ); // -----------
1526 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1527 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1528 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1529 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1530 mgr->insert( separator(), -1, -1 ); // -----------
1532 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1533 onlyComponent = "((type='Component') and selcount=1)",
1534 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1535 types = "'Shape' 'Group' 'FieldStep'";
1537 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1538 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1540 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1541 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1543 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1544 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1546 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1548 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1549 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1550 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1551 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1552 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1553 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1554 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1555 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1556 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1557 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1558 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1559 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1560 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1561 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1562 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1563 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1564 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1565 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1566 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1567 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1568 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1569 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1570 mgr->insert( separator(), selectonlyId, -1);
1571 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1572 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1573 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1574 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1575 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1576 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1577 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1579 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1581 mgr->insert( separator(), -1, -1 ); // -----------
1582 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1583 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1584 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1585 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1587 mgr->insert( separator(), -1, -1 ); // -----------
1588 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1589 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1591 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1592 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1594 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1595 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1597 mgr->insert( separator(), -1, -1 ); // -----------
1598 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1599 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1601 mgr->insert( separator(), -1, -1 ); // -----------
1602 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1603 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1605 mgr->insert( separator(), -1, -1 ); // -----------
1606 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1607 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1609 mgr->insert( separator(), -1, -1 ); // -----------
1610 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1611 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1613 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1615 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1617 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1618 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1619 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1622 // create plugin actions and menus
1626 //=======================================================================
1627 // function : GeometryGUI::addPluginActions()
1629 //=======================================================================
1630 void GeometryGUI::addPluginActions()
1633 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1634 if (!resMgr) return;
1636 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1637 if (!appStudy) return;
1639 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1641 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1643 int id = GEOMOp::OpLastOperationID; // TODO?
1646 GEOMUtils::PluginInfo::const_iterator it;
1647 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1648 // bind action lib and label to its ID for activateOperation() method proper work
1649 GEOMUtils::PluginData pdata = (*it);
1650 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1651 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1652 std::list<GEOMUtils::ActionData>::const_iterator ait;
1653 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1654 GEOMUtils::ActionData adata = (*ait);
1657 if ( !adata.icon.empty() )
1658 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1660 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1661 QString actionName = smenus.last();
1662 actionName = actionName.toUpper().prepend( "MEN_" );
1663 smenus.removeLast();
1665 // path to action in toolbar
1666 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1667 QString actionTool = stools.last();
1668 actionTool = actionTool.toUpper().prepend( "TOP_" );
1669 stools.removeLast();
1671 QString actionStat = adata.statusText.c_str();
1672 actionStat = actionStat.toUpper().prepend( "STB_" );
1674 createAction( id, // ~ adata.label
1675 tr( actionTool.toLatin1().constData() ),
1677 tr( actionName.toLatin1().constData() ),
1678 tr( actionStat.toLatin1().constData() ),
1679 QKeySequence( tr( adata.accel.c_str() ) ),
1680 application()->desktop(),
1682 this, SLOT( OnGUIEvent() ),
1683 QString() /*shortcutAction*/ );
1686 foreach ( QString subMenu, smenus ) {
1687 QStringList subMenuList = subMenu.split( ":" );
1688 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1689 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1690 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1692 createMenu( id, menuId, -1 );
1694 if ( !stools.isEmpty() ) {
1695 QString subTool = stools[0];
1696 subTool = subTool.toUpper().prepend( "TOOL_" );
1697 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1698 createTool(id, toolId);
1701 // add action id to map
1702 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1703 myPluginActions[id] = anAction;
1710 //=======================================================================
1711 // function : GeometryGUI::activateModule()
1712 // purpose : Called when GEOM module is activated
1713 //=======================================================================
1714 bool GeometryGUI::activateModule( SUIT_Study* study )
1716 if ( CORBA::is_nil( myComponentGeom ) )
1719 bool res = SalomeApp_Module::activateModule( study );
1723 setMenuShown( true );
1724 setToolShown( true );
1726 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1727 PyGILState_STATE gstate = PyGILState_Ensure();
1728 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1729 if ( !pluginsmanager ) {
1733 PyObjWrapper result =
1734 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1735 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1736 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1740 PyGILState_Release(gstate);
1741 // end of GEOM plugins loading
1743 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1744 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1746 // Reset actions accelerator keys
1747 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1749 GUIMap::Iterator it;
1750 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1751 it.value()->activate( application()->desktop() );
1753 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1755 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1756 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1757 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1759 if ( !myCreationInfoWdg )
1760 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1761 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1762 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1765 SALOME_ListIO selected;
1766 sm->selectedObjects( selected );
1767 sm->clearSelected();
1769 SUIT_ViewManager* vm;
1770 ViewManagerList OCCViewManagers, VTKViewManagers;
1772 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1773 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1774 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1775 onViewManagerAdded(vm);
1777 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1778 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1779 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1780 onViewManagerAdded(vm);
1782 sm->setSelectedObjects( selected, true ); //NPAL 19674
1784 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1786 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1788 // 0020836 (Basic vectors and origin)
1789 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1790 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1791 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1793 _PTR(Study) studyDS = appStudy->studyDS();
1795 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1796 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1797 createOriginAndBaseVectors();
1805 //=======================================================================
1806 // function : GeometryGUI::deactivateModule()
1807 // purpose : Called when GEOM module is deactivated
1808 //=======================================================================
1809 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1811 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1813 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1815 setMenuShown( false );
1816 setToolShown( false );
1818 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1819 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1821 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1823 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1824 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1825 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1826 myCreationInfoWdg = 0;
1828 EmitSignalCloseAllDialogs();
1830 GUIMap::Iterator it;
1831 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1832 it.value()->deactivate();
1834 // Unset actions accelerator keys
1835 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1837 qDeleteAll(myOCCSelectors);
1838 myOCCSelectors.clear();
1839 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1841 qDeleteAll(myVTKSelectors);
1842 myVTKSelectors.clear();
1843 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1845 return SalomeApp_Module::deactivateModule( study );
1848 //=======================================================================
1849 // function : onWindowActivated()
1850 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1851 //=======================================================================
1852 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1857 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1858 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1860 // disable non-OCC viewframe menu commands
1861 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1862 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1863 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1864 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1865 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1866 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1867 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1869 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1870 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1871 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1872 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1874 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1877 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1879 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1880 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
1881 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1882 if ( myCreationInfoWdg )
1883 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1886 void GeometryGUI::viewManagers( QStringList& lst ) const
1888 lst.append( OCCViewer_Viewer::Type() );
1891 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1893 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1895 qDebug( "connect" );
1896 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1897 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1898 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1899 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1900 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1901 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1902 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1903 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1905 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1906 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1908 // disable OCC selectors
1909 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1910 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1911 while ( itOCCSel.hasNext() )
1912 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1913 sr->setEnabled(true);
1915 else if ( vm->getType() == SVTK_Viewer::Type() )
1917 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1918 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1920 // disable VTK selectors
1921 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1922 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1923 while ( itVTKSel.hasNext() )
1924 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1925 sr->setEnabled(true);
1929 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1931 SUIT_ViewModel* viewer = vm->getViewModel();
1932 if ( vm->getType() == OCCViewer_Viewer::Type() )
1934 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1935 while ( itOCCSel.hasNext() )
1936 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1937 if ( sr->viewer() == viewer )
1939 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1943 if ( vm->getType() == SVTK_Viewer::Type() )
1945 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1946 while ( itVTKSel.hasNext() )
1947 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1948 if ( sr->viewer() == viewer )
1950 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1956 //================================================================================
1958 * \brief Slot called when selection changed. Shows creation info of a selected object
1960 //================================================================================
1962 void GeometryGUI::updateCreationInfo()
1964 if ( myCreationInfoWdg )
1965 myCreationInfoWdg->clear();
1967 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
1968 // if ( !myCreationInfoWdg->isVisible() )
1971 // look for a sole selected GEOM_Object
1972 GEOM::GEOM_BaseObject_var geomObj;
1974 SALOME_ListIO selected;
1975 getApp()->selectionMgr()->selectedObjects( selected );
1977 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
1978 SALOME_ListIteratorOfListIO selIt( selected );
1979 for ( ; selIt.More(); selIt.Next() )
1981 Handle(SALOME_InteractiveObject) io = selIt.Value();
1982 if ( !io->hasEntry() ) continue;
1983 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
1984 if ( !sobj ) continue;
1985 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
1986 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
1987 if ( !gobj->_is_nil() )
1989 if ( !geomObj->_is_nil() )
1990 return; // several GEOM objects selected
1994 if ( geomObj->_is_nil() ) return;
1996 // pass creation info of geomObj to myCreationInfoWdg
1998 if ( myCreationInfoWdg ) {
2000 QString operationName;
2001 myCreationInfoWdg->setOperation( icon, operationName );
2005 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2007 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2008 QString name = info->operationName.in();
2009 if ( !name.isEmpty() ) {
2011 QString plugin_name;
2012 for ( size_t i = 0; i < info->params.length(); ++i ) {
2013 myCreationInfoWdg->addParam( info->params[i].name.in(),
2014 info->params[i].value.in() );
2015 QString value = info->params[i].name.in();
2016 if( value == PLUGIN_NAME ) {
2017 plugin_name = info->params[i].value.in();
2020 QString prefix = plugin_name.isEmpty() ? "GEOM" : plugin_name;
2021 icon = resMgr->loadPixmap( prefix, tr( ("ICO_"+name).toLatin1().constData() ), false );
2022 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2023 if ( operationName.startsWith( "MEN_" ))
2024 operationName = name; // no translation
2025 myCreationInfoWdg->setOperation( icon, operationName );
2034 void GeometryGUI::onAutoBringToFront()
2036 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front" );
2037 if( !isAutoBringToFront )
2040 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2041 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2044 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2045 if (!appStudy) return;
2047 GEOM_Displayer displayer( appStudy );
2049 SALOME_View* window = displayer.GetActiveView();
2050 if ( !window ) return;
2052 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2054 SALOME_ListIO selected;
2055 getApp()->selectionMgr()->selectedObjects( selected );
2056 if (!myTopLevelIOList.IsEmpty())
2058 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2060 Handle( SALOME_InteractiveObject ) io = It.Value();
2061 bool isSelected = false;
2062 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2064 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2065 if( io->isSame( sel_io ) )
2068 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2070 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2071 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2076 myTopLevelIOList.Assign(selected);
2077 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2079 Handle( SALOME_InteractiveObject ) io = It.Value();
2080 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2081 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2084 displayer.UpdateViewer();
2085 GeometryGUI::Modified();
2088 void GeometryGUI::updateFieldColorScale()
2090 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2092 GEOM_Displayer aDisplayer( aStudy );
2093 aDisplayer.UpdateColorScale();
2097 QString GeometryGUI::engineIOR() const
2099 if ( !CORBA::is_nil( GetGeomGen() ) )
2100 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2104 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2105 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2107 theWidth = theHeight = 0;
2109 Handle(TColStd_HArray1OfByte) aTexture;
2112 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2113 aTexture = aTextureMap[ theId ];
2114 if ( aTexture.IsNull() ) {
2115 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2116 if ( !aInsOp->_is_nil() ) {
2117 CORBA::Long aWidth, aHeight;
2118 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2119 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2121 theHeight = aHeight;
2123 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2125 for (int i = 0; i < aStream->length(); i++)
2126 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2127 aTextureMap[ theId ] = aTexture;
2135 LightApp_Selection* GeometryGUI::createSelection() const
2137 return new GEOMGUI_Selection();
2140 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2142 SalomeApp_Module::contextMenuPopup( client, menu, title );
2144 getApp()->selectionMgr()->selectedObjects( lst );
2146 //Add submenu for predefined materials
2147 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2148 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2149 QtxPopupMgr* mgr = popupMgr();
2150 //get parrent for submenu
2151 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2153 QMenu* oldMenu = act->menu() ;
2158 QMenu* matMenu = new QMenu();
2159 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2161 //Get current material model for the object
2163 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2164 if ( anApp && anApp->activeViewManager() ) {
2165 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2167 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2170 QString curModel = "";
2171 if ( v.canConvert<QString>() ) curModel = v.toString();
2172 // get list of all predefined materials
2173 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2175 foreach ( QString material, materials )
2177 QAction* menAct = matMenu->addAction( material );
2178 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2179 signalMapper->setMapping( menAct, material );
2180 menAct->setCheckable( true );
2181 // Set checked if this material is current
2182 Material_Model aModel;
2183 aModel.fromResources( material );
2184 if ( !found && aModel.toProperties() == curModel ) {
2185 menAct->setChecked( true );
2189 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2190 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2191 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2192 this, SLOT( OnSetMaterial( const QString & ) ) );
2193 act->setMenu( matMenu );
2197 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2198 Handle(SALOME_InteractiveObject) io = lst.First();
2199 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2200 _PTR(Study) study = appStudy->studyDS();
2201 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2203 QString aName = QString( obj->GetName().c_str() );
2204 aName.remove( QRegExp("\\s+$") );
2210 void GeometryGUI::OnSetMaterial(const QString& theName)
2212 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2216 void GeometryGUI::createPreferences()
2218 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2220 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2221 setPreferenceProperty( genGroup, "columns", 2 );
2223 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2224 LightApp_Preferences::Selector,
2225 "Geometry", "display_mode" );
2227 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2228 LightApp_Preferences::Color, "Geometry", "shading_color" );
2230 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2231 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2233 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2234 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2236 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2237 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2239 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2240 LightApp_Preferences::Color, "Geometry", "line_color" );
2242 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2243 LightApp_Preferences::Color, "Geometry", "point_color" );
2245 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2246 LightApp_Preferences::Color, "Geometry", "isos_color" );
2248 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2249 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2251 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2252 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2254 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2255 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2257 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2258 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2260 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2261 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2263 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2264 LightApp_Preferences::Selector,
2265 "Geometry", "material" );
2267 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2268 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2274 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2275 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2277 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2278 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2280 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2281 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2283 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2284 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2286 for (int i = 0; i < nb; i++) {
2287 setPreferenceProperty( wd[i], "min", 1 );
2288 setPreferenceProperty( wd[i], "max", 5 );
2291 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2292 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2294 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2295 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2297 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2298 setPreferenceProperty( aDimGroupId, "columns", 2 );
2300 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2301 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2303 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2304 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2306 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2307 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2309 int aDimFontHeightId = addPreference( tr( "PREF_DIMENSIONS_FONT_HEIGHT" ), aDimGroupId,
2310 LightApp_Preferences::DblSpin, "Geometry", "dimensions_font_height" );
2312 setPreferenceProperty( aDimFontHeightId, "min", 1e-9 );
2313 setPreferenceProperty( aDimFontHeightId, "max", 1e+9 );
2314 setPreferenceProperty( aDimFontHeightId, "precision", 9 );
2316 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2317 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2319 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2320 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2321 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2323 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2324 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2326 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2327 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2329 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2330 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2332 QStringList aListOfLengthUnits;
2333 aListOfLengthUnits << "m";
2334 aListOfLengthUnits << "cm";
2335 aListOfLengthUnits << "mm";
2336 aListOfLengthUnits << "in.";
2337 aListOfLengthUnits << "ft.";
2339 QStringList aListOfAngUnits;
2340 aListOfAngUnits << "rad";
2341 aListOfAngUnits << "deg";
2343 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2344 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2346 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2347 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2349 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2350 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2351 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2353 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2354 setPreferenceProperty( isoGroup, "columns", 2 );
2355 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2356 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2357 setPreferenceProperty( isoU, "min", 0 );
2358 setPreferenceProperty( isoU, "max", 100000 );
2359 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2360 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2361 setPreferenceProperty( isoV, "min", 0 );
2362 setPreferenceProperty( isoV, "max", 100000 );
2364 // Quantities with individual precision settings
2365 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2366 setPreferenceProperty( precGroup, "columns", 2 );
2368 const int nbQuantities = 8;
2369 int prec[nbQuantities], ii = 0;
2370 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2371 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2372 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2373 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2374 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2375 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2376 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2377 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2378 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2379 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2380 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2381 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2382 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2383 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2384 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2385 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2387 // Set property for precision value for spinboxes
2388 for ( ii = 0; ii < nbQuantities; ii++ ){
2389 setPreferenceProperty( prec[ii], "min", -14 );
2390 setPreferenceProperty( prec[ii], "max", 14 );
2391 setPreferenceProperty( prec[ii], "precision", 2 );
2394 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2395 setPreferenceProperty( VertexGroup, "columns", 2 );
2397 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2398 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2400 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2401 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2403 // Set property for default display mode
2404 QStringList aModesList;
2405 aModesList.append( tr("MEN_WIREFRAME") );
2406 aModesList.append( tr("MEN_SHADING") );
2407 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2408 aModesList.append( tr("MEN_TEXTURE") );
2410 QList<QVariant> anIndexesList;
2411 anIndexesList.append(0);
2412 anIndexesList.append(1);
2413 anIndexesList.append(2);
2414 anIndexesList.append(3);
2416 setPreferenceProperty( dispmode, "strings", aModesList );
2417 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2419 // Set property for top level display mode
2420 QStringList aTopModesList;
2421 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2422 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2423 aTopModesList.append( tr("MEN_WIREFRAME") );
2424 aTopModesList.append( tr("MEN_SHADING") );
2425 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2427 QList<QVariant> aTopIndexesList;
2428 aTopIndexesList.append(0);
2429 aTopIndexesList.append(1);
2430 aTopIndexesList.append(2);
2431 aTopIndexesList.append(3);
2432 aTopIndexesList.append(4);
2434 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2435 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2437 // Set property for step value for spinboxes
2438 setPreferenceProperty( step, "min", 1 );
2439 setPreferenceProperty( step, "max", 10000 );
2440 setPreferenceProperty( step, "precision", 3 );
2442 // Set property for trandparency value for spinboxes
2443 setPreferenceProperty( transparency, "min", 0 );
2444 setPreferenceProperty( transparency, "max", 100 );
2446 // Set property for deflection value for spinboxes
2447 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2448 setPreferenceProperty( defl, "max", 1.0 );
2449 setPreferenceProperty( defl, "step", 1.0e-04 );
2450 setPreferenceProperty( defl, "precision", 6 );
2452 // Set property for default material
2453 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2455 // Set property vertex marker type
2456 QList<QVariant> aMarkerTypeIndicesList;
2457 QList<QVariant> aMarkerTypeIconsList;
2459 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2460 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2461 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2462 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2463 aMarkerTypeIndicesList << (i-1);
2464 aMarkerTypeIconsList << pixmap;
2467 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2468 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2470 // Set property for vertex marker scale
2471 QList<QVariant> aMarkerScaleIndicesList;
2472 QStringList aMarkerScaleValuesList;
2474 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2475 aMarkerScaleIndicesList << iii;
2476 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2479 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2480 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2482 // Scalar bar for field step presentation
2483 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2484 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2486 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2487 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2488 setPreferenceProperty( sbXPosition, "min", 0 );
2489 setPreferenceProperty( sbXPosition, "max", 1 );
2490 setPreferenceProperty( sbXPosition, "step", 0.05 );
2492 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2493 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2494 setPreferenceProperty( sbYPosition, "min", 0 );
2495 setPreferenceProperty( sbYPosition, "max", 1 );
2496 setPreferenceProperty( sbYPosition, "step", 0.05 );
2498 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2499 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2500 setPreferenceProperty( sbWidth, "min", 0 );
2501 setPreferenceProperty( sbWidth, "max", 1 );
2502 setPreferenceProperty( sbWidth, "step", 0.05 );
2504 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2505 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2506 setPreferenceProperty( sbHeight, "min", 0 );
2507 setPreferenceProperty( sbHeight, "max", 1 );
2508 setPreferenceProperty( sbHeight, "step", 0.05 );
2510 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2511 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2512 setPreferenceProperty( sbTextHeight, "min", 6 );
2513 setPreferenceProperty( sbTextHeight, "max", 24 );
2514 setPreferenceProperty( sbTextHeight, "step", 1 );
2516 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2517 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2518 setPreferenceProperty( sbNbIntervals, "min", 2 );
2519 setPreferenceProperty( sbNbIntervals, "max", 64 );
2520 setPreferenceProperty( sbNbIntervals, "step", 1 );
2522 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2523 setPreferenceProperty( originGroup, "columns", 2 );
2525 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2526 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2527 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2528 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2530 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2531 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2533 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2534 setPreferenceProperty( operationsGroup, "columns", 2 );
2536 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2537 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2539 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2541 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2543 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2544 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2546 QStringList aHierarchyTypeList;
2547 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2548 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2549 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2551 QList<QVariant> aHierarchyTypeIndexesList;
2552 aHierarchyTypeIndexesList.append(0);
2553 aHierarchyTypeIndexesList.append(1);
2554 aHierarchyTypeIndexesList.append(2);
2556 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2557 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2559 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2560 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2562 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2564 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2565 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2567 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2568 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2569 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2570 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2571 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2572 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2573 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2574 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2576 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2577 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2578 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2579 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2580 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2581 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2588 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2590 if (section == "Geometry") {
2591 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2592 if (param == QString("SettingsGeomStep")) {
2593 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2594 EmitSignalDefaultStepValueChanged(spin_step);
2596 else if (param == QString("toplevel_color")) {
2597 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2598 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2600 else if (param == QString("toplevel_dm")) {
2601 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2603 else if (param == QString("scalar_bar_x_position") ||
2604 param == QString("scalar_bar_y_position") ||
2605 param == QString("scalar_bar_width") ||
2606 param == QString("scalar_bar_height") ||
2607 param == QString("scalar_bar_text_height") ||
2608 param == QString("scalar_bar_nb_intervals")) {
2609 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2611 GEOM_Displayer aDisplayer( aStudy );
2612 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2613 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2616 else if ( param == QString("dimensions_color") ||
2617 param == QString("dimensions_line_width") ||
2618 param == QString("dimensions_font_height") ||
2619 param == QString("dimensions_arrow_length") ||
2620 param == QString("dimensions_show_units") ||
2621 param == QString("dimensions_length_units") ||
2622 param == QString("dimensions_angle_units") )
2624 SalomeApp_Application* anApp = getApp();
2630 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2636 GEOM_Displayer aDisplayer( aStudy );
2638 ViewManagerList aVMs;
2639 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2640 ViewManagerList::Iterator anIt = aVMs.begin();
2641 for ( ; anIt != aVMs.end(); ++anIt )
2643 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2649 SALOME_ListIO aVisible;
2650 aViewer->GetVisible( aVisible );
2651 aDisplayer.Redisplay( aVisible, false, aViewer );
2654 aDisplayer.UpdateViewer();
2656 else if ( param.startsWith( "dependency_tree") )
2657 emit SignalDependencyTreeParamChanged( section, param );
2661 LightApp_Displayer* GeometryGUI::displayer()
2664 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2668 void GeometryGUI::setLocalSelectionMode(const int mode)
2670 myLocalSelectionMode = mode;
2673 int GeometryGUI::getLocalSelectionMode() const
2675 return myLocalSelectionMode;
2678 const char gSeparator = '_'; // character used to separate parameter names
2679 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2682 * \brief Store visual parameters
2684 * This method is called just before the study document is saved.
2685 * Store visual parameters in AttributeParameter attribute(s)
2687 void GeometryGUI::storeVisualParameters (int savePoint)
2689 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2690 if ( !appStudy || !appStudy->studyDS() )
2692 _PTR(Study) studyDS = appStudy->studyDS();
2694 // componentName is used for encoding of entries when storing them in IParameters
2695 std::string componentName = myComponentGeom->ComponentDataType();
2696 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2697 //if (!aSComponent) return;
2700 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2701 componentName.c_str(),
2703 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2705 QSet<QString> anEntriesToStoreShared;
2706 QList<SUIT_ViewManager*> lst;
2707 QList<SUIT_ViewManager*>::Iterator it;
2709 // main cycle to store parameters of displayed objects
2711 getApp()->viewManagers(lst);
2712 for (it = lst.begin(); it != lst.end(); it++) {
2713 SUIT_ViewManager* vman = *it;
2714 QString vType = vman->getType();
2715 int aMgrId = vman->getGlobalId();
2716 // saving VTK actors properties
2717 QVector<SUIT_ViewWindow*> views = vman->getViews();
2718 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2719 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
2720 ObjMap::ConstIterator o_it = anObjects.begin();
2721 for (; o_it != anObjects.end(); o_it++) {
2722 const PropMap aProps = o_it.value();
2724 //Check that object exists in the study
2725 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2726 if ( !obj || !(aProps.count() > 0))
2728 // entry is "encoded" = it does NOT contain component adress, since it is a
2729 // subject to change on next component loading
2731 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2733 _PTR(GenericAttribute) anAttr;
2734 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2737 // remember entry of object to store shared GEOM properties
2738 // (e.g. dimension properties).
2739 if ( vType == OCCViewer_Viewer::Type() )
2741 anEntriesToStoreShared.insert( o_it.key() );
2744 QString param, occParam = vType;
2745 occParam += GEOM::sectionSeparator();
2746 occParam += QString::number(aMgrId);
2747 occParam += GEOM::sectionSeparator();
2749 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2750 param = occParam + GEOM::propertyName( GEOM::Visibility );
2751 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2754 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2755 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2756 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2759 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2760 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2762 val << QString::number(c.redF());
2763 val << QString::number(c.greenF());
2764 val << QString::number(c.blueF());
2765 param = occParam + GEOM::propertyName( GEOM::Color );
2766 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2769 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2770 param = occParam + GEOM::propertyName( GEOM::Texture );
2771 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2774 if (vType == SVTK_Viewer::Type()) {
2775 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2776 param = occParam + GEOM::propertyName( GEOM::Opacity );
2777 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2779 } else if (vType == SOCC_Viewer::Type()) {
2780 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2781 param = occParam + GEOM::propertyName( GEOM::Transparency );
2782 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2785 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2786 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2787 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2791 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2792 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2793 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2796 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2797 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2798 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2801 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
2802 param = occParam + GEOM::propertyName( GEOM::Vertices );
2803 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
2806 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2807 param = occParam + GEOM::propertyName( GEOM::Deflection );
2808 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2811 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2812 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2813 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2814 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2817 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2818 param = occParam + GEOM::propertyName( GEOM::Material );
2819 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2822 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2823 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2824 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2827 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2828 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2829 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2831 } // object iterator
2833 } // for (viewManagers)
2835 // store dimension attributes of objects:
2836 // since the displayed object always persists in property map, we remember the object entries
2837 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
2838 QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
2839 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
2840 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
2842 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
2843 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName);
2845 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
2847 if ( aDimensions.GetNumber() == 0 )
2852 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
2857 * \brief Restore visual parameters
2859 * This method is called after the study document is opened.
2860 * Restore visual parameters from AttributeParameter attribute(s)
2862 void GeometryGUI::restoreVisualParameters (int savePoint)
2864 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2865 if (!appStudy || !appStudy->studyDS())
2867 _PTR(Study) studyDS = appStudy->studyDS();
2869 // componentName is used for encoding of entries when storing them in IParameters
2870 std::string componentName = myComponentGeom->ComponentDataType();
2871 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2872 //if (!aSComponent) return;
2875 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2876 componentName.c_str(),
2878 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2880 std::vector<std::string> entries = ip->getEntries();
2882 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2884 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2885 QString entry (ip->decodeEntry(*entIt).c_str());
2887 // Check that the entry corresponds to a real object in the Study
2888 // as the object may be deleted or modified after the visual state is saved.
2889 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2890 if (!so) continue; //Skip the not existent entry
2892 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2893 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2895 std::vector<std::string>::iterator namesIt = paramNames.begin();
2896 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2898 // actors are stored in a map after displaying of them for
2899 // quicker access in the future: map < viewID to actor >
2900 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2901 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2903 QString viewerTypStr;
2904 QString viewIndexStr;
2906 QVector<PropMap> aListOfMap;
2908 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2910 // visual parameters are stored in strings as follows:
2911 // 1) ViewerType_ViewIndex_ParamName
2912 // 2) ViewerType_ParamName (shared for GEOM module)
2913 // '_' is used as separator and should not be used in viewer type or parameter names.
2914 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2916 bool isShared = lst.size() == 2;
2917 bool isViewer = lst.size() == 3;
2918 if ( !isShared && !isViewer )
2923 // shared visual parameters
2926 QString aParamNameStr( lst[1] );
2927 QString aValuesStr( (*valuesIt).c_str() );
2929 // shared dimension properties are stored as attribute
2930 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
2932 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
2933 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
2939 // per view visual parameters
2940 viewerTypStr = lst[0];
2941 viewIndexStr = lst[1];
2942 QString paramNameStr = lst[2];
2945 viewIndex = viewIndexStr.toUInt(&ok);
2946 if (!ok) // bad conversion of view index to integer
2949 if ((viewIndex + 1) > aListOfMap.count()) {
2950 aListOfMap.resize(viewIndex + 1);
2953 QString val((*valuesIt).c_str());
2954 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
2955 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
2956 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
2957 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
2958 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
2959 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
2960 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
2961 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
2962 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
2963 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
2964 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
2965 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
2966 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
2967 QStringList rgb = val.split(GEOM::subSectionSeparator());
2968 if (rgb.count() == 3) {
2969 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
2970 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
2972 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
2973 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
2974 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
2975 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
2976 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
2977 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
2978 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
2979 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
2980 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
2981 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
2982 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
2983 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
2984 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
2985 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
2986 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
2987 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
2989 } // for names/parameters iterator
2991 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2993 for (int index = 0; index < aListOfMap.count(); index++) {
2995 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
2997 //Get Visibility property of the current PropMap
2998 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
2999 SUIT_ViewManager* vman = lst.at(index);
3000 SUIT_ViewModel* vmodel = vman->getViewModel();
3001 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
3004 } // for entries iterator
3006 // update all VTK and OCC views
3007 QList<SUIT_ViewManager*> lst;
3008 getApp()->viewManagers(lst);
3009 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3010 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3013 if (vmodel->getType() == SVTK_Viewer::Type()) {
3014 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3015 vtkView->getRenderer()->ResetCameraClippingRange();
3018 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3019 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3020 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3027 void GeometryGUI::onViewAboutToShow()
3029 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3030 QAction* a = action( GEOMOp::OpSwitchVectors );
3031 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3033 a->setEnabled(true);
3034 bool vmode = window->property("VectorsMode").toBool();
3035 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3036 aVerticesAction->setEnabled(true);
3037 vmode = window->property("VerticesMode").toBool();
3038 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3040 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3041 a->setEnabled(false);
3042 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3043 aVerticesAction->setEnabled(false);
3048 \brief Return action by id
3049 \param id identifier of the action
3052 QAction* GeometryGUI::getAction(const int id) {
3057 \brief GEOM module message handler
3059 This method can be re-implemented in the subclasses.
3060 This is a GEOM module message handler.
3062 \param msg the message received.
3064 void GeometryGUI::message(const QString& msg)
3067 QStringList data = msg.split("/");
3068 const int nbStrings = data.count();
3070 if (nbStrings > 0) {
3071 if (data[0] == "modified") {
3073 QString anIOR = nbStrings > 1 ? data[1] : QString();
3075 if ( anIOR.isEmpty() ) {
3079 // Get the geom object.
3080 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3082 // Clear the shape buffer
3083 GeometryGUI::ClearShapeBuffer (anObj);
3089 \brief Clears the shape buffer.
3091 This is a static method. It clears the shape buffer.
3093 \param theObj the object
3095 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3097 if ( CORBA::is_nil( theObj ) )
3100 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3101 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3102 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3104 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3109 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3114 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3118 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3119 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3120 _PTR(GenericAttribute) anAttr;
3121 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3122 _PTR(AttributeIOR) anIOR ( anAttr );
3123 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3124 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3130 \brief Returns the object from IOR.
3132 This is a static method. It returns the object from its IOR.
3134 \param IOR object IOR
3135 \return GEOM object.
3137 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3139 GEOM::GEOM_Object_var geomObj;
3140 if ( !IOR.isEmpty() ) {
3141 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3142 ( IOR.toLatin1().constData() );
3143 if ( !CORBA::is_nil( corbaObj ) )
3144 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3146 return geomObj._retn();
3150 \brief Returns IOR of the object.
3152 This is a static method. It returns the object's IOR.
3154 \param object the GEOM object.
3155 \return object's IOR.
3157 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3160 if ( !CORBA::is_nil( object ) ) {
3161 CORBA::String_var anIOR =
3162 SalomeApp_Application::orb()->object_to_string( object );
3169 \brief Check if this object is can't be renamed in place
3171 This method can be re-implemented in the subclasses.
3172 Return true in case if object isn't reference or component (module root).
3174 \param entry column id
3175 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3177 bool GeometryGUI::renameAllowed( const QString& entry) const {
3179 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3180 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3181 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3183 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3187 Rename object by entry.
3188 \param entry entry of the object
3189 \param name new name of the object
3190 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3192 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3194 bool result = false;
3196 SalomeApp_Application* app =
3197 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3198 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3203 _PTR(Study) aStudy = appStudy->studyDS();
3208 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3210 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3214 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3215 _PTR(GenericAttribute) anAttr;
3217 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3218 _PTR(AttributeName) aName (anAttr);
3220 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3221 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3222 if (!CORBA::is_nil(anObj)) {
3223 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3224 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3232 void GeometryGUI::updateMaterials()
3234 LightApp_Preferences* pref = preferences();
3236 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3237 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3238 if ( !materials.contains( currentMaterial ) )
3239 // user material set as default in the preferences, might be removed
3240 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3242 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3244 setPreferenceProperty( prefItem->id(),
3245 "strings", materials );
3246 prefItem->retrieve();
3252 \brief Check if the module allows "drag" operation of its objects.
3254 Overloaded from LightApp_Module class.
3256 This function is a part of the general drag-n-drop mechanism.
3257 The goal of this function is to check data object passed as a parameter
3258 and decide if it can be dragged or no.
3260 \param what data object being tested for drag operation
3261 \return \c true if module allows dragging of the specified object
3262 \sa isDropAccepted(), dropObjects()
3264 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3266 // we allow dragging object under root and object from folder
3267 int aLevel = what->level();
3268 bool anObjectInFolder = false;
3270 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3272 _PTR(SObject) aSO = dataObj->object();
3274 _PTR(GenericAttribute) anAttr;
3275 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3276 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3277 _PTR(AttributeLocalID) aLocalID( anAttr );
3278 anObjectInFolder = aLocalID->Value() == 999;
3283 return aLevel == 2 || anObjectInFolder;
3287 \brief Check if the module allows "drop" operation on the given object.
3289 Overloaded from LightApp_Module class.
3291 This function is a part of the general drag-n-drop mechanism.
3292 The goal of this function is to check data object passed as a parameter
3293 and decide if it can be used as a target for the "drop" operation.
3294 The processing of the drop operation itself is done in the dropObjects() function.
3296 \param where target data object
3297 \return \c true if module supports dropping on the \a where data object
3298 \sa isDraggable(), dropObjects()
3300 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3302 // we allow dropping into folder and top-level GEOM object
3303 int aLevel = where->level();
3304 bool isFolder = false;
3306 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3308 _PTR(SObject) aSO = dataObj->object();
3310 _PTR(GenericAttribute) anAttr;
3311 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3312 _PTR(AttributeLocalID) aLocalID( anAttr );
3313 isFolder = aLocalID->Value() == 999;
3318 return aLevel == 1 || isFolder;
3322 \brief Complete drag-n-drop operation.
3324 Overloaded from LightApp_Module class.
3326 This function is a part of the general drag-n-drop mechanism.
3327 Its goal is to handle dropping of the objects being dragged according
3328 to the chosen operation (move). The dropping is performed in the
3329 context of the parent data object \a where and the \a row (position in the
3330 children index) at which the data should be dropped. If \a row is equal to -1,
3331 this means that objects are added to the end of the children list.
3333 \param what objects being dropped
3334 \param where target data object
3335 \param row child index at which the drop operation is performed
3336 \param action drag-n-drop operation (Qt::DropAction) - move
3338 \sa isDraggable(), isDropAccepted()
3340 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3341 const int row, Qt::DropAction action )
3343 if (action != Qt::CopyAction && action != Qt::MoveAction)
3344 return; // unsupported action
3346 // get parent object
3347 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3348 if ( !dataObj ) return; // wrong parent
3349 _PTR(SObject) parentObj = dataObj->object();
3351 // Find the current Study and StudyBuilder
3352 _PTR(Study) aStudy = parentObj->GetStudy();
3353 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3354 // collect all parents of the target node
3355 QStringList parentIDs;
3356 _PTR(SObject) parent = parentObj;
3357 while( !parent->IsNull() ) {
3358 parentIDs << parent->GetID().c_str();
3359 parent = aUseCaseBuilder->GetFather(parent);
3362 // collect objects being dropped
3363 GEOM::object_list_var objects = new GEOM::object_list();
3364 objects->length( what.count() );
3366 for ( int i = 0; i < what.count(); i++ ) {
3367 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3368 if ( !dataObj ) continue; // skip wrong objects
3369 _PTR(SObject) sobj = dataObj->object();
3370 // check that dropped object is not a parent of target object
3371 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3372 return; // it's not allowed to move node into it's child
3374 objects[i] = _CAST(SObject, sobj)->GetSObject();
3377 objects->length( count );
3379 // call engine function
3380 GetGeomGen()->Move( objects.in(), // what
3381 _CAST(SObject, parentObj)->GetSObject(), // where
3384 // update Object browser
3385 getApp()->updateObjectBrowser( false );