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 case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR
565 libName = "EntityGUI";
567 case GEOMOp::OpEdge: // MENU BUILD - EDGE
568 case GEOMOp::OpWire: // MENU BUILD - WIRE
569 case GEOMOp::OpFace: // MENU BUILD - FACE
570 case GEOMOp::OpShell: // MENU BUILD - SHELL
571 case GEOMOp::OpSolid: // MENU BUILD - SOLID
572 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
573 libName = "BuildGUI";
575 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
576 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
577 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
578 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
579 libName = "BooleanGUI";
581 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
582 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
583 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
584 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
585 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
586 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
587 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
588 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
589 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
590 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
591 libName = "TransformationGUI";
593 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
594 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
595 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
596 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
597 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
598 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
599 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
600 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
601 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
602 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
603 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
604 libName = "OperationGUI";
606 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
607 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
608 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
609 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
610 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
611 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
612 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
613 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
614 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
615 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
616 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
617 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
618 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
619 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
620 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
621 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
622 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
623 libName = "RepairGUI";
625 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
626 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
627 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
628 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
629 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
630 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
631 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
632 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
633 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
634 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
635 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
636 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
637 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
638 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
639 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
640 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
641 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
642 libName = "MeasureGUI";
644 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
645 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
646 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
647 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
648 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
649 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
650 libName = "GroupGUI";
652 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
653 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
654 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
655 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
656 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
657 libName = "BlocksGUI";
659 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
660 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
661 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
662 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
663 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
664 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
665 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
666 //libName = "AdvancedGUI";
669 if (myPluginActions.contains(id)) {
670 libName = myPluginActions[id].first;
672 GEOMPluginGUI* library = 0;
673 if ( !libName.isEmpty() ) {
675 libName = QString( "lib" ) + libName + ".so";
677 libName = libName + ".dll";
679 library = getPluginLibrary( libName );
682 // call method of corresponding GUI library
684 //QString action ("%1");
685 //action = action.arg(id);
687 //if( !theParam.isValid() )
688 library->OnGUIEvent( myPluginActions[id].second, desk );
690 // library->OnGUIEvent( id, desk, theParam);
693 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
695 updateCreationInfo();
701 GEOMGUI* library = 0;
702 if ( !libName.isEmpty() ) {
704 libName = QString( "lib" ) + libName + ".so";
706 libName = libName + ".dll";
708 library = getLibrary( libName );
711 // call method of corresponding GUI library
713 if( !theParam.isValid() )
714 library->OnGUIEvent( id, desk );
716 library->OnGUIEvent( id, desk, theParam);
719 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
721 updateCreationInfo();
724 //=================================================================================
725 // function : GeometryGUI::activateOperation()
727 //=================================================================================
728 bool GeometryGUI::activateOperation( int actionId )
730 OnGUIEvent(actionId);
734 //=================================================================================
735 // function : GeometryGUI::activateOperation()
737 //=================================================================================
738 bool GeometryGUI::activateOperation( const QString& actionId )
742 int id = actionId.toInt(&isOk);
749 //=================================================================================
750 // function : GeometryGUI::activateOperation()
752 //=================================================================================
753 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
757 QString pluginLib = plugin;
758 // TODO: if <plugin> is a plugin name, find plugin library name
759 if (myPluginLibs.contains(plugin))
760 pluginLib = myPluginLibs[plugin];
762 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
763 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
764 const PluginAction& anAction = actionsIter.value();
765 if (anAction.first == pluginLib && anAction.second == actionId) {
766 // activate operation
767 OnGUIEvent(actionsIter.key());
775 //=================================================================================
776 // function : GeometryGUI::OnKeyPress()
777 // purpose : Called when any key is pressed by user [static]
778 //=================================================================================
779 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
781 if ( !application() )
783 foreach ( GEOMGUI* lib, myGUIMap )
784 lib->OnKeyPress( e, application()->desktop(), w );
787 //=================================================================================
788 // function : GeometryGUI::OnMouseMove()
789 // purpose : Manages mouse move events [static]
790 //=================================================================================
791 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
793 if ( !application() )
795 foreach ( GEOMGUI* lib, myGUIMap )
796 lib->OnMouseMove( e, application()->desktop(), w );
799 //=================================================================================
800 // function : GeometryGUI::OnMouseRelease()
801 // purpose : Manages mouse release events [static]
802 //=================================================================================
803 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
805 if ( !application() )
807 foreach ( GEOMGUI* lib, myGUIMap )
808 lib->OnMouseRelease( e, application()->desktop(), w );
811 //=================================================================================
812 // function : GeometryGUI::OnMousePress()
813 // purpose : Manage mouse press events [static]
814 //=================================================================================
815 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
817 if ( !application() )
819 foreach ( GEOMGUI* lib, myGUIMap )
820 lib->OnMousePress( e, application()->desktop(), w );
823 //=======================================================================
824 // function : createGeomAction
826 //=======================================================================
827 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
828 const int accel, const bool toggle, const QString& shortcutAction )
830 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
831 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
832 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
834 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
836 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
837 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
839 application()->desktop(),
841 this, SLOT( OnGUIEvent() ),
845 //=======================================================================
846 // function : createOriginAndBaseVectors
848 //=======================================================================
849 void GeometryGUI::createOriginAndBaseVectors()
851 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
852 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
854 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
858 _PTR(Study) studyDS = appStudy->studyDS();
859 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
860 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
861 if ( !aBasicOperations->_is_nil() ) {
862 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
863 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
864 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
865 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
866 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
867 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
869 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
870 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
871 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
872 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
873 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
875 getApp()->updateObjectBrowser( true );
881 //=======================================================================
882 // function : GeometryGUI::initialize()
883 // purpose : Called when GEOM module is created
884 //=======================================================================
885 void GeometryGUI::initialize( CAM_Application* app )
887 SalomeApp_Module::initialize( app );
889 // ----- create actions --------------
891 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
893 createGeomAction( GEOMOp::OpPoint, "POINT" );
894 createGeomAction( GEOMOp::OpLine, "LINE" );
895 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
896 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
897 createGeomAction( GEOMOp::OpArc, "ARC" );
898 createGeomAction( GEOMOp::OpCurve, "CURVE" );
899 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
900 createGeomAction( GEOMOp::OpVector, "VECTOR" );
901 createGeomAction( GEOMOp::OpPlane, "PLANE" );
902 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
903 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
905 createGeomAction( GEOMOp::OpBox, "BOX" );
906 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
907 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
908 createGeomAction( GEOMOp::OpTorus, "TORUS" );
909 createGeomAction( GEOMOp::OpCone, "CONE" );
910 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
911 createGeomAction( GEOMOp::OpDisk, "DISK" );
913 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
914 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
915 createGeomAction( GEOMOp::OpFilling, "FILLING" );
916 createGeomAction( GEOMOp::OpPipe, "PIPE" );
917 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
919 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
920 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
921 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
922 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
923 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
925 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
926 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
928 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
930 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
931 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
933 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
934 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
935 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
936 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
938 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
940 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
941 createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" );
943 createGeomAction( GEOMOp::OpEdge, "EDGE" );
944 createGeomAction( GEOMOp::OpWire, "WIRE" );
945 createGeomAction( GEOMOp::OpFace, "FACE" );
946 createGeomAction( GEOMOp::OpShell, "SHELL" );
947 createGeomAction( GEOMOp::OpSolid, "SOLID" );
948 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
950 createGeomAction( GEOMOp::OpFuse, "FUSE" );
951 createGeomAction( GEOMOp::OpCommon, "COMMON" );
952 createGeomAction( GEOMOp::OpCut, "CUT" );
953 createGeomAction( GEOMOp::OpSection, "SECTION" );
955 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
956 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
957 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
958 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
959 createGeomAction( GEOMOp::OpScale, "SCALE" );
960 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
961 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
962 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
963 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
965 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
966 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
967 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
968 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
969 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
970 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
971 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
972 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
973 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
974 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
975 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
977 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
978 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
979 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
981 createGeomAction( GEOMOp::OpSewing, "SEWING" );
982 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
983 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
984 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
985 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
986 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
987 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
988 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
989 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
990 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
991 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
992 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
993 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
994 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
995 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
996 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
997 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
999 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1000 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1001 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1002 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1003 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1004 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1005 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1006 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1007 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1009 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1010 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1011 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1012 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1013 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1014 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1016 #ifdef _DEBUG_ // PAL16821
1017 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1020 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1021 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1022 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1023 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1024 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1025 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1026 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1027 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1028 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1029 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1030 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1031 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1032 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1033 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1034 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1035 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1036 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1037 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1038 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1039 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1040 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1041 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1042 createGeomAction( GEOMOp::OpHide, "ERASE" );
1044 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1045 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1046 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1047 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1048 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1049 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1050 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1051 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1052 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1053 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1054 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1055 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1056 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1057 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1058 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1059 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1060 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1061 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1062 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1063 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1064 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1065 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1066 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1067 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1068 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1069 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1070 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1071 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1072 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1073 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1075 // Create actions for increase/decrease transparency shortcuts
1076 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1077 "Geometry:Increase transparency");
1078 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1079 "Geometry:Decrease transparency");
1081 // Create actions for increase/decrease number of isolines
1082 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1083 "Geometry:Increase number of isolines");
1084 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1085 "Geometry:Decrease number of isolines");
1087 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1088 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1089 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1090 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1091 //@@ 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 @@//
1093 // ---- create menus --------------------------
1095 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1097 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1098 createMenu( GEOMOp::OpDelete, editId, -1 );
1100 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1102 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1103 createMenu( GEOMOp::OpPoint, basicId, -1 );
1104 createMenu( GEOMOp::OpLine, basicId, -1 );
1105 createMenu( GEOMOp::OpCircle, basicId, -1 );
1106 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1107 createMenu( GEOMOp::OpArc, basicId, -1 );
1108 createMenu( GEOMOp::OpCurve, basicId, -1 );
1109 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1110 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1111 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1112 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1113 createMenu( separator(), basicId, -1 );
1114 createMenu( GEOMOp::OpVector, basicId, -1 );
1115 createMenu( GEOMOp::OpPlane, basicId, -1 );
1116 createMenu( GEOMOp::OpLCS, basicId, -1 );
1117 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1119 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1120 createMenu( GEOMOp::OpBox, primId, -1 );
1121 createMenu( GEOMOp::OpCylinder, primId, -1 );
1122 createMenu( GEOMOp::OpSphere, primId, -1 );
1123 createMenu( GEOMOp::OpTorus, primId, -1 );
1124 createMenu( GEOMOp::OpCone, primId, -1 );
1125 createMenu( GEOMOp::OpRectangle, primId, -1 );
1126 createMenu( GEOMOp::OpDisk, primId, -1 );
1127 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1129 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1130 createMenu( GEOMOp::OpPrism, genId, -1 );
1131 createMenu( GEOMOp::OpRevolution, genId, -1 );
1132 createMenu( GEOMOp::OpFilling, genId, -1 );
1133 createMenu( GEOMOp::OpPipe, genId, -1 );
1134 createMenu( GEOMOp::OpPipePath, genId, -1 );
1136 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1137 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1138 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@//
1140 createMenu( separator(), newEntId, -1 );
1142 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1143 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1144 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1145 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1146 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1147 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1149 createMenu( separator(), newEntId, -1 );
1151 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1152 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1153 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1155 createMenu( separator(), newEntId, -1 );
1157 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1158 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1159 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1160 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1161 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1163 createMenu( separator(), newEntId, -1 );
1165 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1167 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1168 createMenu( GEOMOp::OpEdge, buildId, -1 );
1169 createMenu( GEOMOp::OpWire, buildId, -1 );
1170 createMenu( GEOMOp::OpFace, buildId, -1 );
1171 createMenu( GEOMOp::OpShell, buildId, -1 );
1172 createMenu( GEOMOp::OpSolid, buildId, -1 );
1173 createMenu( GEOMOp::OpCompound, buildId, -1 );
1175 createMenu( separator(), newEntId, -1 );
1177 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1179 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1182 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1184 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1185 createMenu( GEOMOp::OpFuse, boolId, -1 );
1186 createMenu( GEOMOp::OpCommon, boolId, -1 );
1187 createMenu( GEOMOp::OpCut, boolId, -1 );
1188 createMenu( GEOMOp::OpSection, boolId, -1 );
1190 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1191 createMenu( GEOMOp::OpTranslate, transId, -1 );
1192 createMenu( GEOMOp::OpRotate, transId, -1 );
1193 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1194 createMenu( GEOMOp::OpMirror, transId, -1 );
1195 createMenu( GEOMOp::OpScale, transId, -1 );
1196 createMenu( GEOMOp::OpOffset, transId, -1 );
1197 createMenu( GEOMOp::OpProjection, transId, -1 );
1198 createMenu( separator(), transId, -1 );
1199 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1200 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1202 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1203 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1204 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1205 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1207 createMenu( separator(), operId, -1 );
1209 createMenu( GEOMOp::OpPartition, operId, -1 );
1210 createMenu( GEOMOp::OpArchimede, operId, -1 );
1211 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1212 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1214 createMenu( separator(), operId, -1 );
1216 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1217 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1218 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1219 createMenu( GEOMOp::OpChamfer, operId, -1 );
1220 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1221 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1222 //createMenu( GEOMOp::OpClipping, operId, -1 );
1224 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1225 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1226 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1227 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1228 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1229 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1230 createMenu( GEOMOp::OpSewing, repairId, -1 );
1231 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1232 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1233 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1234 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1235 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1236 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1237 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1238 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1239 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1240 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1241 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1243 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1244 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1245 createMenu( GEOMOp::OpProperties, measurId, -1 );
1246 createMenu( separator(), measurId, -1 );
1247 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1248 createMenu( GEOMOp::OpInertia, measurId, -1 );
1249 createMenu( GEOMOp::OpNormale, measurId, -1 );
1250 createMenu( separator(), measurId, -1 );
1251 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1252 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1253 createMenu( separator(), measurId, -1 );
1255 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1256 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1257 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1258 createMenu( GEOMOp::OpAngle, dimId, -1 );
1259 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1261 createMenu( separator(), measurId, -1 );
1262 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1263 createMenu( separator(), measurId, -1 );
1264 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1265 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1266 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1267 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1268 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1270 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1271 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1272 createMenu( separator(), toolsId, -1 );
1273 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1276 createMenu( separator(), toolsId, -1 );
1277 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1278 createMenu( separator(), toolsId, -1 );
1280 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1281 createMenu( separator(), viewId, -1 );
1283 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1284 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1285 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1286 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1287 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1288 createMenu( separator(), dispmodeId, -1 );
1289 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1290 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1292 createMenu( separator(), viewId, -1 );
1293 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1294 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1295 createMenu( separator(), viewId, -1 );
1296 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1297 createMenu( separator(), viewId, -1 );
1301 because of these items are accessible through object browser and viewers
1302 we have removed they from main menu
1304 createMenu( GEOMOp::OpShow, viewId, -1 );
1305 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1306 createMenu( GEOMOp::OpHide, viewId, -1 );
1309 // ---- create toolbars --------------------------
1311 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1312 createTool( GEOMOp::OpPoint, basicTbId );
1313 createTool( GEOMOp::OpLine, basicTbId );
1314 createTool( GEOMOp::OpCircle, basicTbId );
1315 createTool( GEOMOp::OpEllipse, basicTbId );
1316 createTool( GEOMOp::OpArc, basicTbId );
1317 createTool( GEOMOp::OpCurve, basicTbId );
1318 createTool( GEOMOp::OpVector, basicTbId );
1319 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1320 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1321 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1322 createTool( GEOMOp::OpIsoline, basicTbId );
1323 createTool( GEOMOp::OpPlane, basicTbId );
1324 createTool( GEOMOp::OpLCS, basicTbId );
1325 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1327 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1328 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1329 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1331 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1332 createTool( GEOMOp::OpBox, primTbId );
1333 createTool( GEOMOp::OpCylinder, primTbId );
1334 createTool( GEOMOp::OpSphere, primTbId );
1335 createTool( GEOMOp::OpTorus, primTbId );
1336 createTool( GEOMOp::OpCone, primTbId );
1337 createTool( GEOMOp::OpRectangle, primTbId );
1338 createTool( GEOMOp::OpDisk, primTbId );
1339 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1341 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1342 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1343 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1345 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1346 createTool( GEOMOp::OpFuse, boolTbId );
1347 createTool( GEOMOp::OpCommon, boolTbId );
1348 createTool( GEOMOp::OpCut, boolTbId );
1349 createTool( GEOMOp::OpSection, boolTbId );
1351 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1352 createTool( GEOMOp::OpPrism, genTbId );
1353 createTool( GEOMOp::OpRevolution, genTbId );
1354 createTool( GEOMOp::OpFilling, genTbId );
1355 createTool( GEOMOp::OpPipe, genTbId );
1356 createTool( GEOMOp::OpPipePath, genTbId );
1358 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1359 createTool( GEOMOp::OpTranslate, transTbId );
1360 createTool( GEOMOp::OpRotate, transTbId );
1361 createTool( GEOMOp::OpChangeLoc, transTbId );
1362 createTool( GEOMOp::OpMirror, transTbId );
1363 createTool( GEOMOp::OpScale, transTbId );
1364 createTool( GEOMOp::OpOffset, transTbId );
1365 createTool( GEOMOp::OpProjection, transTbId );
1366 createTool( separator(), transTbId );
1367 createTool( GEOMOp::OpMultiTranslate, transTbId );
1368 createTool( GEOMOp::OpMultiRotate, transTbId );
1370 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1371 createTool( GEOMOp::OpExplode, operTbId );
1372 createTool( GEOMOp::OpPartition, operTbId );
1373 createTool( GEOMOp::OpArchimede, operTbId );
1374 createTool( GEOMOp::OpShapesOnShape, operTbId );
1375 createTool( GEOMOp::OpSharedShapes, operTbId );
1377 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1378 createTool( GEOMOp::OpFillet1d, featTbId );
1379 createTool( GEOMOp::OpFillet2d, featTbId );
1380 createTool( GEOMOp::OpFillet3d, featTbId );
1381 createTool( GEOMOp::OpChamfer, featTbId );
1382 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1383 createTool( GEOMOp::OpExtrudedCut, featTbId );
1385 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1386 createTool( GEOMOp::OpEdge, buildTbId );
1387 createTool( GEOMOp::OpWire, buildTbId );
1388 createTool( GEOMOp::OpFace, buildTbId );
1389 createTool( GEOMOp::OpShell, buildTbId );
1390 createTool( GEOMOp::OpSolid, buildTbId );
1391 createTool( GEOMOp::OpCompound, buildTbId );
1393 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1394 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1395 createTool( GEOMOp::OpProperties, measureTbId );
1396 createTool( GEOMOp::OpCenterMass, measureTbId );
1397 createTool( GEOMOp::OpInertia, measureTbId );
1398 createTool( GEOMOp::OpNormale, measureTbId );
1399 createTool( separator(), measureTbId );
1400 createTool( GEOMOp::OpBoundingBox, measureTbId );
1401 createTool( GEOMOp::OpMinDistance, measureTbId );
1402 createTool( GEOMOp::OpAngle, measureTbId );
1403 createTool( GEOMOp::OpTolerance , measureTbId );
1404 createTool( separator(), measureTbId );
1405 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1406 createTool( GEOMOp::OpFreeFaces, measureTbId );
1407 createTool( separator(), measureTbId );
1408 createTool( GEOMOp::OpWhatIs, measureTbId );
1409 createTool( GEOMOp::OpCheckShape, measureTbId );
1410 createTool( GEOMOp::OpCheckCompound, measureTbId );
1411 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1412 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1414 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1415 createTool( GEOMOp::OpPictureImport, picturesTbId );
1417 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1420 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1421 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1422 //@@ 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 @@//
1424 // ---- create popup menus --------------------------
1426 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1427 QString clientOCC = "(client='OCCViewer')";
1428 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1429 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1431 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1432 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1433 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1434 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1436 QString autoColorPrefix =
1437 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1439 QtxPopupMgr* mgr = popupMgr();
1441 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1442 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1443 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1444 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1445 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1446 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1447 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1448 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1450 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1451 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1452 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1453 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1454 mgr->insert( separator(), -1, -1 ); // -----------
1456 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1457 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1458 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1459 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1460 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1461 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1462 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1463 mgr->insert( separator(), -1, -1 ); // -----------
1464 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1465 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1466 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1467 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1468 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1469 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1470 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1471 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1472 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1473 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1474 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1475 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1476 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1477 mgr->insert( separator(), dispmodeId, -1 );
1478 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1479 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1480 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1481 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1482 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1483 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1484 mgr->insert( separator(), -1, -1 ); // -----------
1486 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1487 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1488 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1489 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1490 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1491 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1492 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1493 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1494 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1495 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1497 // material properties
1498 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1499 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1502 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1503 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1505 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1506 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1507 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1509 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1510 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1512 mgr->insert( separator(), -1, -1 ); // -----------
1513 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1514 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1515 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1516 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1517 mgr->insert( separator(), -1, -1 ); // -----------
1519 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1520 onlyComponent = "((type='Component') and selcount=1)",
1521 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1522 types = "'Shape' 'Group' 'FieldStep'";
1524 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1525 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1527 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1528 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1530 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1531 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1533 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1535 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1536 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1537 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1538 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1539 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1540 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1541 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1542 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1543 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1544 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1545 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1546 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1547 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1548 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1549 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1550 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1551 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1552 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1553 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1554 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1555 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1556 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1557 mgr->insert( separator(), selectonlyId, -1);
1558 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1559 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1560 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1561 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1562 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1563 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1564 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1566 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1568 mgr->insert( separator(), -1, -1 ); // -----------
1569 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1570 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1571 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1572 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1574 mgr->insert( separator(), -1, -1 ); // -----------
1575 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1576 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1578 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1579 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1581 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1582 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1584 mgr->insert( separator(), -1, -1 ); // -----------
1585 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1586 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1588 mgr->insert( separator(), -1, -1 ); // -----------
1589 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1590 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1592 mgr->insert( separator(), -1, -1 ); // -----------
1593 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1594 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1596 mgr->insert( separator(), -1, -1 ); // -----------
1597 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1598 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1600 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1602 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1604 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1605 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1606 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1609 // create plugin actions and menus
1613 //=======================================================================
1614 // function : GeometryGUI::addPluginActions()
1616 //=======================================================================
1617 void GeometryGUI::addPluginActions()
1620 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1621 if (!resMgr) return;
1623 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1624 if (!appStudy) return;
1626 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1628 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1630 int id = GEOMOp::OpLastOperationID; // TODO?
1633 GEOMUtils::PluginInfo::const_iterator it;
1634 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1635 // bind action lib and label to its ID for activateOperation() method proper work
1636 GEOMUtils::PluginData pdata = (*it);
1637 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1638 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1639 std::list<GEOMUtils::ActionData>::const_iterator ait;
1640 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1641 GEOMUtils::ActionData adata = (*ait);
1644 if ( !adata.icon.empty() )
1645 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1647 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1648 QString actionName = smenus.last();
1649 actionName = actionName.toUpper().prepend( "MEN_" );
1650 smenus.removeLast();
1652 // path to action in toolbar
1653 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1654 QString actionTool = stools.last();
1655 actionTool = actionTool.toUpper().prepend( "TOP_" );
1656 stools.removeLast();
1658 QString actionStat = adata.statusText.c_str();
1659 actionStat = actionStat.toUpper().prepend( "STB_" );
1661 createAction( id, // ~ adata.label
1662 tr( actionTool.toLatin1().constData() ),
1664 tr( actionName.toLatin1().constData() ),
1665 tr( actionStat.toLatin1().constData() ),
1666 QKeySequence( tr( adata.accel.c_str() ) ),
1667 application()->desktop(),
1669 this, SLOT( OnGUIEvent() ),
1670 QString() /*shortcutAction*/ );
1673 foreach ( QString subMenu, smenus ) {
1674 QStringList subMenuList = subMenu.split( ":" );
1675 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1676 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1677 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1679 createMenu( id, menuId, -1 );
1681 if ( !stools.isEmpty() ) {
1682 QString subTool = stools[0];
1683 subTool = subTool.toUpper().prepend( "TOOL_" );
1684 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1685 createTool(id, toolId);
1688 // add action id to map
1689 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1690 myPluginActions[id] = anAction;
1697 //=======================================================================
1698 // function : GeometryGUI::activateModule()
1699 // purpose : Called when GEOM module is activated
1700 //=======================================================================
1701 bool GeometryGUI::activateModule( SUIT_Study* study )
1703 if ( CORBA::is_nil( myComponentGeom ) )
1706 bool res = SalomeApp_Module::activateModule( study );
1710 setMenuShown( true );
1711 setToolShown( true );
1713 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1714 PyGILState_STATE gstate = PyGILState_Ensure();
1715 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1716 if ( !pluginsmanager ) {
1720 PyObjWrapper result =
1721 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1722 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1723 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1727 PyGILState_Release(gstate);
1728 // end of GEOM plugins loading
1730 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1731 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1733 // Reset actions accelerator keys
1734 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1736 GUIMap::Iterator it;
1737 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1738 it.value()->activate( application()->desktop() );
1740 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1742 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1743 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1744 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1746 if ( !myCreationInfoWdg )
1747 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1748 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1749 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1752 SALOME_ListIO selected;
1753 sm->selectedObjects( selected );
1754 sm->clearSelected();
1756 SUIT_ViewManager* vm;
1757 ViewManagerList OCCViewManagers, VTKViewManagers;
1759 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1760 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1761 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1762 onViewManagerAdded(vm);
1764 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1765 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1766 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1767 onViewManagerAdded(vm);
1769 sm->setSelectedObjects( selected, true ); //NPAL 19674
1771 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1773 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1775 // 0020836 (Basic vectors and origin)
1776 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1777 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1778 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1780 _PTR(Study) studyDS = appStudy->studyDS();
1782 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1783 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1784 createOriginAndBaseVectors();
1792 //=======================================================================
1793 // function : GeometryGUI::deactivateModule()
1794 // purpose : Called when GEOM module is deactivated
1795 //=======================================================================
1796 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1798 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1800 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1802 setMenuShown( false );
1803 setToolShown( false );
1805 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1806 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1808 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1810 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1811 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1812 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1813 myCreationInfoWdg = 0;
1815 EmitSignalCloseAllDialogs();
1817 GUIMap::Iterator it;
1818 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1819 it.value()->deactivate();
1821 // Unset actions accelerator keys
1822 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1824 qDeleteAll(myOCCSelectors);
1825 myOCCSelectors.clear();
1826 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1828 qDeleteAll(myVTKSelectors);
1829 myVTKSelectors.clear();
1830 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1832 return SalomeApp_Module::deactivateModule( study );
1835 //=======================================================================
1836 // function : onWindowActivated()
1837 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1838 //=======================================================================
1839 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1844 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1845 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1847 // disable non-OCC viewframe menu commands
1848 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1849 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1850 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1851 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1852 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1853 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1854 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1856 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1857 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1858 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1859 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1861 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1864 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1866 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1867 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
1868 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1869 if ( myCreationInfoWdg )
1870 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1873 void GeometryGUI::viewManagers( QStringList& lst ) const
1875 lst.append( OCCViewer_Viewer::Type() );
1878 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1880 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1882 qDebug( "connect" );
1883 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1884 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1885 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1886 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1887 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1888 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1889 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1890 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1892 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1893 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1895 // disable OCC selectors
1896 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1897 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1898 while ( itOCCSel.hasNext() )
1899 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1900 sr->setEnabled(true);
1902 else if ( vm->getType() == SVTK_Viewer::Type() )
1904 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1905 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1907 // disable VTK selectors
1908 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1909 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1910 while ( itVTKSel.hasNext() )
1911 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1912 sr->setEnabled(true);
1916 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1918 SUIT_ViewModel* viewer = vm->getViewModel();
1919 if ( vm->getType() == OCCViewer_Viewer::Type() )
1921 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1922 while ( itOCCSel.hasNext() )
1923 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1924 if ( sr->viewer() == viewer )
1926 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1930 if ( vm->getType() == SVTK_Viewer::Type() )
1932 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1933 while ( itVTKSel.hasNext() )
1934 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1935 if ( sr->viewer() == viewer )
1937 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1943 //================================================================================
1945 * \brief Slot called when selection changed. Shows creation info of a selected object
1947 //================================================================================
1949 void GeometryGUI::updateCreationInfo()
1951 if ( myCreationInfoWdg )
1952 myCreationInfoWdg->clear();
1954 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
1955 // if ( !myCreationInfoWdg->isVisible() )
1958 // look for a sole selected GEOM_Object
1959 GEOM::GEOM_BaseObject_var geomObj;
1961 SALOME_ListIO selected;
1962 getApp()->selectionMgr()->selectedObjects( selected );
1964 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
1965 SALOME_ListIteratorOfListIO selIt( selected );
1966 for ( ; selIt.More(); selIt.Next() )
1968 Handle(SALOME_InteractiveObject) io = selIt.Value();
1969 if ( !io->hasEntry() ) continue;
1970 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
1971 if ( !sobj ) continue;
1972 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
1973 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
1974 if ( !gobj->_is_nil() )
1976 if ( !geomObj->_is_nil() )
1977 return; // several GEOM objects selected
1981 if ( geomObj->_is_nil() ) return;
1983 // pass creation info of geomObj to myCreationInfoWdg
1985 if ( myCreationInfoWdg ) {
1987 QString operationName;
1988 myCreationInfoWdg->setOperation( icon, operationName );
1992 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
1994 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1995 QString name = info->operationName.in();
1996 if ( !name.isEmpty() ) {
1998 QString plugin_name;
1999 for ( size_t i = 0; i < info->params.length(); ++i ) {
2000 myCreationInfoWdg->addParam( info->params[i].name.in(),
2001 info->params[i].value.in() );
2002 QString value = info->params[i].name.in();
2003 if( value == PLUGIN_NAME ) {
2004 plugin_name = info->params[i].value.in();
2007 QString prefix = plugin_name.isEmpty() ? "GEOM" : plugin_name;
2008 icon = resMgr->loadPixmap( prefix, tr( ("ICO_"+name).toLatin1().constData() ), false );
2009 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2010 if ( operationName.startsWith( "MEN_" ))
2011 operationName = name; // no translation
2012 myCreationInfoWdg->setOperation( icon, operationName );
2021 void GeometryGUI::onAutoBringToFront()
2023 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2024 if( !isAutoBringToFront )
2027 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2028 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2031 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2032 if (!appStudy) return;
2034 GEOM_Displayer displayer( appStudy );
2036 SALOME_View* window = displayer.GetActiveView();
2037 if ( !window ) return;
2039 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2041 SALOME_ListIO selected;
2042 getApp()->selectionMgr()->selectedObjects( selected );
2043 if (!myTopLevelIOList.IsEmpty())
2045 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2047 Handle( SALOME_InteractiveObject ) io = It.Value();
2048 bool isSelected = false;
2049 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2051 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2052 if( io->isSame( sel_io ) )
2055 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2057 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2058 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2063 myTopLevelIOList.Assign(selected);
2064 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2066 Handle( SALOME_InteractiveObject ) io = It.Value();
2067 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2068 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2071 displayer.UpdateViewer();
2072 GeometryGUI::Modified();
2075 void GeometryGUI::updateFieldColorScale()
2077 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2079 GEOM_Displayer aDisplayer( aStudy );
2080 aDisplayer.UpdateColorScale();
2084 QString GeometryGUI::engineIOR() const
2086 if ( !CORBA::is_nil( GetGeomGen() ) )
2087 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2091 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2092 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2094 theWidth = theHeight = 0;
2096 Handle(TColStd_HArray1OfByte) aTexture;
2099 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2100 aTexture = aTextureMap[ theId ];
2101 if ( aTexture.IsNull() ) {
2102 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2103 if ( !aInsOp->_is_nil() ) {
2104 CORBA::Long aWidth, aHeight;
2105 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2106 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2108 theHeight = aHeight;
2110 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2112 for (int i = 0; i < aStream->length(); i++)
2113 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2114 aTextureMap[ theId ] = aTexture;
2122 LightApp_Selection* GeometryGUI::createSelection() const
2124 return new GEOMGUI_Selection();
2127 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2129 SalomeApp_Module::contextMenuPopup( client, menu, title );
2131 getApp()->selectionMgr()->selectedObjects( lst );
2133 //Add submenu for predefined materials
2134 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2135 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2136 QtxPopupMgr* mgr = popupMgr();
2137 //get parrent for submenu
2138 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2140 QMenu* oldMenu = act->menu() ;
2145 QMenu* matMenu = new QMenu();
2146 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2148 //Get current material model for the object
2150 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2151 if ( anApp && anApp->activeViewManager() ) {
2152 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2154 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2157 QString curModel = "";
2158 if ( v.canConvert<QString>() ) curModel = v.toString();
2159 // get list of all predefined materials
2160 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2162 foreach ( QString material, materials )
2164 QAction* menAct = matMenu->addAction( material );
2165 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2166 signalMapper->setMapping( menAct, material );
2167 menAct->setCheckable( true );
2168 // Set checked if this material is current
2169 Material_Model aModel;
2170 aModel.fromResources( material );
2171 if ( !found && aModel.toProperties() == curModel ) {
2172 menAct->setChecked( true );
2176 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2177 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2178 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2179 this, SLOT( OnSetMaterial( const QString & ) ) );
2180 act->setMenu( matMenu );
2184 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2185 Handle(SALOME_InteractiveObject) io = lst.First();
2186 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2187 _PTR(Study) study = appStudy->studyDS();
2188 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2190 QString aName = QString( obj->GetName().c_str() );
2191 aName.remove( QRegExp("\\s+$") );
2197 void GeometryGUI::OnSetMaterial(const QString& theName)
2199 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2203 void GeometryGUI::createPreferences()
2205 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2207 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2208 setPreferenceProperty( genGroup, "columns", 2 );
2210 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2211 LightApp_Preferences::Selector,
2212 "Geometry", "display_mode" );
2214 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2215 LightApp_Preferences::Color, "Geometry", "shading_color" );
2217 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2218 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2220 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2221 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2223 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2224 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2226 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2227 LightApp_Preferences::Color, "Geometry", "line_color" );
2229 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2230 LightApp_Preferences::Color, "Geometry", "point_color" );
2232 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2233 LightApp_Preferences::Color, "Geometry", "isos_color" );
2235 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2236 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2238 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2239 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2241 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2242 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2244 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2245 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2247 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2248 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2250 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2251 LightApp_Preferences::Selector,
2252 "Geometry", "material" );
2254 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2255 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2261 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2262 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2264 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2265 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2267 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2268 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2270 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2271 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2273 for (int i = 0; i < nb; i++) {
2274 setPreferenceProperty( wd[i], "min", 1 );
2275 setPreferenceProperty( wd[i], "max", 5 );
2278 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2279 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2281 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2282 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2284 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2285 setPreferenceProperty( aDimGroupId, "columns", 2 );
2287 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2288 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2290 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2291 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2293 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2294 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2296 int aDimFontHeightId = addPreference( tr( "PREF_DIMENSIONS_FONT_HEIGHT" ), aDimGroupId,
2297 LightApp_Preferences::DblSpin, "Geometry", "dimensions_font_height" );
2299 setPreferenceProperty( aDimFontHeightId, "min", 1e-9 );
2300 setPreferenceProperty( aDimFontHeightId, "max", 1e+9 );
2301 setPreferenceProperty( aDimFontHeightId, "precision", 9 );
2303 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2304 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2306 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2307 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2308 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2310 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2311 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2313 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2314 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2316 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2317 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2319 QStringList aListOfLengthUnits;
2320 aListOfLengthUnits << "m";
2321 aListOfLengthUnits << "cm";
2322 aListOfLengthUnits << "mm";
2323 aListOfLengthUnits << "in.";
2324 aListOfLengthUnits << "ft.";
2326 QStringList aListOfAngUnits;
2327 aListOfAngUnits << "rad";
2328 aListOfAngUnits << "deg";
2330 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2331 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2333 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2334 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2336 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2337 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2338 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2340 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2341 setPreferenceProperty( isoGroup, "columns", 2 );
2342 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2343 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2344 setPreferenceProperty( isoU, "min", 0 );
2345 setPreferenceProperty( isoU, "max", 100000 );
2346 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2347 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2348 setPreferenceProperty( isoV, "min", 0 );
2349 setPreferenceProperty( isoV, "max", 100000 );
2351 // Quantities with individual precision settings
2352 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2353 setPreferenceProperty( precGroup, "columns", 2 );
2355 const int nbQuantities = 8;
2356 int prec[nbQuantities], ii = 0;
2357 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2358 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2359 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2360 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2361 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2362 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2363 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2364 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2365 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2366 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2367 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2368 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2369 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2370 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2371 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2372 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2374 // Set property for precision value for spinboxes
2375 for ( ii = 0; ii < nbQuantities; ii++ ){
2376 setPreferenceProperty( prec[ii], "min", -14 );
2377 setPreferenceProperty( prec[ii], "max", 14 );
2378 setPreferenceProperty( prec[ii], "precision", 2 );
2381 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2382 setPreferenceProperty( VertexGroup, "columns", 2 );
2384 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2385 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2387 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2388 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2390 // Set property for default display mode
2391 QStringList aModesList;
2392 aModesList.append( tr("MEN_WIREFRAME") );
2393 aModesList.append( tr("MEN_SHADING") );
2394 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2395 aModesList.append( tr("MEN_TEXTURE") );
2397 QList<QVariant> anIndexesList;
2398 anIndexesList.append(0);
2399 anIndexesList.append(1);
2400 anIndexesList.append(2);
2401 anIndexesList.append(3);
2403 setPreferenceProperty( dispmode, "strings", aModesList );
2404 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2406 // Set property for top level display mode
2407 QStringList aTopModesList;
2408 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2409 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2410 aTopModesList.append( tr("MEN_WIREFRAME") );
2411 aTopModesList.append( tr("MEN_SHADING") );
2412 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2414 QList<QVariant> aTopIndexesList;
2415 aTopIndexesList.append(0);
2416 aTopIndexesList.append(1);
2417 aTopIndexesList.append(2);
2418 aTopIndexesList.append(3);
2419 aTopIndexesList.append(4);
2421 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2422 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2424 // Set property for step value for spinboxes
2425 setPreferenceProperty( step, "min", 1 );
2426 setPreferenceProperty( step, "max", 10000 );
2427 setPreferenceProperty( step, "precision", 3 );
2429 // Set property for trandparency value for spinboxes
2430 setPreferenceProperty( transparency, "min", 0 );
2431 setPreferenceProperty( transparency, "max", 100 );
2433 // Set property for deflection value for spinboxes
2434 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2435 setPreferenceProperty( defl, "max", 1.0 );
2436 setPreferenceProperty( defl, "step", 1.0e-04 );
2437 setPreferenceProperty( defl, "precision", 6 );
2439 // Set property for default material
2440 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2442 // Set property vertex marker type
2443 QList<QVariant> aMarkerTypeIndicesList;
2444 QList<QVariant> aMarkerTypeIconsList;
2446 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2447 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2448 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2449 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2450 aMarkerTypeIndicesList << (i-1);
2451 aMarkerTypeIconsList << pixmap;
2454 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2455 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2457 // Set property for vertex marker scale
2458 QList<QVariant> aMarkerScaleIndicesList;
2459 QStringList aMarkerScaleValuesList;
2461 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2462 aMarkerScaleIndicesList << iii;
2463 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2466 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2467 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2469 // Scalar bar for field step presentation
2470 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2471 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2473 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2474 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2475 setPreferenceProperty( sbXPosition, "min", 0 );
2476 setPreferenceProperty( sbXPosition, "max", 1 );
2477 setPreferenceProperty( sbXPosition, "step", 0.05 );
2479 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2480 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2481 setPreferenceProperty( sbYPosition, "min", 0 );
2482 setPreferenceProperty( sbYPosition, "max", 1 );
2483 setPreferenceProperty( sbYPosition, "step", 0.05 );
2485 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2486 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2487 setPreferenceProperty( sbWidth, "min", 0 );
2488 setPreferenceProperty( sbWidth, "max", 1 );
2489 setPreferenceProperty( sbWidth, "step", 0.05 );
2491 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2492 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2493 setPreferenceProperty( sbHeight, "min", 0 );
2494 setPreferenceProperty( sbHeight, "max", 1 );
2495 setPreferenceProperty( sbHeight, "step", 0.05 );
2497 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2498 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2499 setPreferenceProperty( sbTextHeight, "min", 6 );
2500 setPreferenceProperty( sbTextHeight, "max", 24 );
2501 setPreferenceProperty( sbTextHeight, "step", 1 );
2503 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2504 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2505 setPreferenceProperty( sbNbIntervals, "min", 2 );
2506 setPreferenceProperty( sbNbIntervals, "max", 64 );
2507 setPreferenceProperty( sbNbIntervals, "step", 1 );
2509 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2510 setPreferenceProperty( originGroup, "columns", 2 );
2512 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2513 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2514 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2515 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2517 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2518 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2520 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2521 setPreferenceProperty( operationsGroup, "columns", 2 );
2523 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2524 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2526 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2528 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2530 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2531 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2533 QStringList aHierarchyTypeList;
2534 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2535 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2536 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2538 QList<QVariant> aHierarchyTypeIndexesList;
2539 aHierarchyTypeIndexesList.append(0);
2540 aHierarchyTypeIndexesList.append(1);
2541 aHierarchyTypeIndexesList.append(2);
2543 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2544 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2546 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2547 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2549 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2551 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2552 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2554 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2555 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2556 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2557 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2558 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2559 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2560 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2561 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2563 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2564 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2565 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2566 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2567 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2568 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2575 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2577 if (section == "Geometry") {
2578 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2579 if (param == QString("SettingsGeomStep")) {
2580 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2581 EmitSignalDefaultStepValueChanged(spin_step);
2583 else if (param == QString("toplevel_color")) {
2584 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2585 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2587 else if (param == QString("toplevel_dm")) {
2588 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2590 else if (param == QString("scalar_bar_x_position") ||
2591 param == QString("scalar_bar_y_position") ||
2592 param == QString("scalar_bar_width") ||
2593 param == QString("scalar_bar_height") ||
2594 param == QString("scalar_bar_text_height") ||
2595 param == QString("scalar_bar_nb_intervals")) {
2596 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2598 GEOM_Displayer aDisplayer( aStudy );
2599 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2600 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2603 else if ( param == QString("dimensions_color") ||
2604 param == QString("dimensions_line_width") ||
2605 param == QString("dimensions_font_height") ||
2606 param == QString("dimensions_arrow_length") ||
2607 param == QString("dimensions_show_units") ||
2608 param == QString("dimensions_length_units") ||
2609 param == QString("dimensions_angle_units") )
2611 SalomeApp_Application* anApp = getApp();
2617 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2623 GEOM_Displayer aDisplayer( aStudy );
2625 ViewManagerList aVMs;
2626 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2627 ViewManagerList::Iterator anIt = aVMs.begin();
2628 for ( ; anIt != aVMs.end(); ++anIt )
2630 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2636 SALOME_ListIO aVisible;
2637 aViewer->GetVisible( aVisible );
2638 aDisplayer.Redisplay( aVisible, false, aViewer );
2641 aDisplayer.UpdateViewer();
2643 else if ( param.startsWith( "dependency_tree") )
2644 emit SignalDependencyTreeParamChanged( section, param );
2648 LightApp_Displayer* GeometryGUI::displayer()
2651 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2655 void GeometryGUI::setLocalSelectionMode(const int mode)
2657 myLocalSelectionMode = mode;
2660 int GeometryGUI::getLocalSelectionMode() const
2662 return myLocalSelectionMode;
2665 const char gSeparator = '_'; // character used to separate parameter names
2666 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2669 * \brief Store visual parameters
2671 * This method is called just before the study document is saved.
2672 * Store visual parameters in AttributeParameter attribute(s)
2674 void GeometryGUI::storeVisualParameters (int savePoint)
2676 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2677 if ( !appStudy || !appStudy->studyDS() )
2679 _PTR(Study) studyDS = appStudy->studyDS();
2681 // componentName is used for encoding of entries when storing them in IParameters
2682 std::string componentName = myComponentGeom->ComponentDataType();
2683 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2684 //if (!aSComponent) return;
2687 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2688 componentName.c_str(),
2690 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2692 QSet<QString> anEntriesToStoreShared;
2693 QList<SUIT_ViewManager*> lst;
2694 QList<SUIT_ViewManager*>::Iterator it;
2696 // main cycle to store parameters of displayed objects
2698 getApp()->viewManagers(lst);
2699 for (it = lst.begin(); it != lst.end(); it++) {
2700 SUIT_ViewManager* vman = *it;
2701 QString vType = vman->getType();
2702 int aMgrId = vman->getGlobalId();
2703 // saving VTK actors properties
2704 QVector<SUIT_ViewWindow*> views = vman->getViews();
2705 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2706 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
2707 ObjMap::ConstIterator o_it = anObjects.begin();
2708 for (; o_it != anObjects.end(); o_it++) {
2709 const PropMap aProps = o_it.value();
2711 //Check that object exists in the study
2712 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2713 if ( !obj || !(aProps.count() > 0))
2715 // entry is "encoded" = it does NOT contain component adress, since it is a
2716 // subject to change on next component loading
2718 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2720 _PTR(GenericAttribute) anAttr;
2721 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2724 // remember entry of object to store shared GEOM properties
2725 // (e.g. dimension properties).
2726 if ( vType == OCCViewer_Viewer::Type() )
2728 anEntriesToStoreShared.insert( o_it.key() );
2731 QString param, occParam = vType;
2732 occParam += GEOM::sectionSeparator();
2733 occParam += QString::number(aMgrId);
2734 occParam += GEOM::sectionSeparator();
2736 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2737 param = occParam + GEOM::propertyName( GEOM::Visibility );
2738 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2741 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2742 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2743 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2746 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2747 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2749 val << QString::number(c.redF());
2750 val << QString::number(c.greenF());
2751 val << QString::number(c.blueF());
2752 param = occParam + GEOM::propertyName( GEOM::Color );
2753 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2756 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2757 param = occParam + GEOM::propertyName( GEOM::Texture );
2758 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2761 if (vType == SVTK_Viewer::Type()) {
2762 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2763 param = occParam + GEOM::propertyName( GEOM::Opacity );
2764 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2766 } else if (vType == SOCC_Viewer::Type()) {
2767 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2768 param = occParam + GEOM::propertyName( GEOM::Transparency );
2769 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2772 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2773 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2774 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2778 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2779 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2780 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2783 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2784 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2785 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2788 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
2789 param = occParam + GEOM::propertyName( GEOM::Vertices );
2790 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
2793 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2794 param = occParam + GEOM::propertyName( GEOM::Deflection );
2795 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2798 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2799 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2800 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2801 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2804 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2805 param = occParam + GEOM::propertyName( GEOM::Material );
2806 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2809 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2810 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2811 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2814 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2815 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2816 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2818 } // object iterator
2820 } // for (viewManagers)
2822 // store dimension attributes of objects:
2823 // since the displayed object always persists in property map, we remember the object entries
2824 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
2825 QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
2826 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
2827 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
2829 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
2830 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName);
2832 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
2834 if ( aDimensions.GetNumber() == 0 )
2839 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
2844 * \brief Restore visual parameters
2846 * This method is called after the study document is opened.
2847 * Restore visual parameters from AttributeParameter attribute(s)
2849 void GeometryGUI::restoreVisualParameters (int savePoint)
2851 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2852 if (!appStudy || !appStudy->studyDS())
2854 _PTR(Study) studyDS = appStudy->studyDS();
2856 // componentName is used for encoding of entries when storing them in IParameters
2857 std::string componentName = myComponentGeom->ComponentDataType();
2858 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2859 //if (!aSComponent) return;
2862 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2863 componentName.c_str(),
2865 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2867 std::vector<std::string> entries = ip->getEntries();
2869 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2871 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2872 QString entry (ip->decodeEntry(*entIt).c_str());
2874 // Check that the entry corresponds to a real object in the Study
2875 // as the object may be deleted or modified after the visual state is saved.
2876 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2877 if (!so) continue; //Skip the not existent entry
2879 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2880 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2882 std::vector<std::string>::iterator namesIt = paramNames.begin();
2883 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2885 // actors are stored in a map after displaying of them for
2886 // quicker access in the future: map < viewID to actor >
2887 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2888 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2890 QString viewerTypStr;
2891 QString viewIndexStr;
2893 QVector<PropMap> aListOfMap;
2895 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2897 // visual parameters are stored in strings as follows:
2898 // 1) ViewerType_ViewIndex_ParamName
2899 // 2) ViewerType_ParamName (shared for GEOM module)
2900 // '_' is used as separator and should not be used in viewer type or parameter names.
2901 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2903 bool isShared = lst.size() == 2;
2904 bool isViewer = lst.size() == 3;
2905 if ( !isShared && !isViewer )
2910 // shared visual parameters
2913 QString aParamNameStr( lst[1] );
2914 QString aValuesStr( (*valuesIt).c_str() );
2916 // shared dimension properties are stored as attribute
2917 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
2919 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
2920 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
2926 // per view visual parameters
2927 viewerTypStr = lst[0];
2928 viewIndexStr = lst[1];
2929 QString paramNameStr = lst[2];
2932 viewIndex = viewIndexStr.toUInt(&ok);
2933 if (!ok) // bad conversion of view index to integer
2936 if ((viewIndex + 1) > aListOfMap.count()) {
2937 aListOfMap.resize(viewIndex + 1);
2940 QString val((*valuesIt).c_str());
2941 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
2942 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
2943 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
2944 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
2945 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
2946 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
2947 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
2948 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
2949 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
2950 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
2951 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
2952 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
2953 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
2954 QStringList rgb = val.split(GEOM::subSectionSeparator());
2955 if (rgb.count() == 3) {
2956 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
2957 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
2959 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
2960 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
2961 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
2962 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
2963 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
2964 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
2965 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
2966 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
2967 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
2968 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
2969 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
2970 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
2971 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
2972 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
2973 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
2974 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
2976 } // for names/parameters iterator
2978 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2980 for (int index = 0; index < aListOfMap.count(); index++) {
2982 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
2984 //Get Visibility property of the current PropMap
2985 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
2986 SUIT_ViewManager* vman = lst.at(index);
2987 SUIT_ViewModel* vmodel = vman->getViewModel();
2988 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
2991 } // for entries iterator
2993 // update all VTK and OCC views
2994 QList<SUIT_ViewManager*> lst;
2995 getApp()->viewManagers(lst);
2996 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
2997 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3000 if (vmodel->getType() == SVTK_Viewer::Type()) {
3001 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3002 vtkView->getRenderer()->ResetCameraClippingRange();
3005 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3006 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3007 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3014 void GeometryGUI::onViewAboutToShow()
3016 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3017 QAction* a = action( GEOMOp::OpSwitchVectors );
3018 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3020 a->setEnabled(true);
3021 bool vmode = window->property("VectorsMode").toBool();
3022 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3023 aVerticesAction->setEnabled(true);
3024 vmode = window->property("VerticesMode").toBool();
3025 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3027 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3028 a->setEnabled(false);
3029 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3030 aVerticesAction->setEnabled(false);
3035 \brief Return action by id
3036 \param id identifier of the action
3039 QAction* GeometryGUI::getAction(const int id) {
3044 \brief GEOM module message handler
3046 This method can be re-implemented in the subclasses.
3047 This is a GEOM module message handler.
3049 \param msg the message received.
3051 void GeometryGUI::message(const QString& msg)
3054 QStringList data = msg.split("/");
3055 const int nbStrings = data.count();
3057 if (nbStrings > 0) {
3058 if (data[0] == "modified") {
3060 QString anIOR = nbStrings > 1 ? data[1] : QString();
3062 if ( anIOR.isEmpty() ) {
3066 // Get the geom object.
3067 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3069 // Clear the shape buffer
3070 GeometryGUI::ClearShapeBuffer (anObj);
3076 \brief Clears the shape buffer.
3078 This is a static method. It clears the shape buffer.
3080 \param theObj the object
3082 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3084 if ( CORBA::is_nil( theObj ) )
3087 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3088 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3089 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3091 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3096 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3101 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3105 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3106 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3107 _PTR(GenericAttribute) anAttr;
3108 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3109 _PTR(AttributeIOR) anIOR ( anAttr );
3110 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3111 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3117 \brief Returns the object from IOR.
3119 This is a static method. It returns the object from its IOR.
3121 \param IOR object IOR
3122 \return GEOM object.
3124 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3126 GEOM::GEOM_Object_var geomObj;
3127 if ( !IOR.isEmpty() ) {
3128 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3129 ( IOR.toLatin1().constData() );
3130 if ( !CORBA::is_nil( corbaObj ) )
3131 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3133 return geomObj._retn();
3137 \brief Returns IOR of the object.
3139 This is a static method. It returns the object's IOR.
3141 \param object the GEOM object.
3142 \return object's IOR.
3144 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3147 if ( !CORBA::is_nil( object ) ) {
3148 CORBA::String_var anIOR =
3149 SalomeApp_Application::orb()->object_to_string( object );
3156 \brief Check if this object is can't be renamed in place
3158 This method can be re-implemented in the subclasses.
3159 Return true in case if object isn't reference or component (module root).
3161 \param entry column id
3162 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3164 bool GeometryGUI::renameAllowed( const QString& entry) const {
3166 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3167 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3168 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3170 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3174 Rename object by entry.
3175 \param entry entry of the object
3176 \param name new name of the object
3177 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3179 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3181 bool result = false;
3183 SalomeApp_Application* app =
3184 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3185 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3190 _PTR(Study) aStudy = appStudy->studyDS();
3195 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3197 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3201 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3202 _PTR(GenericAttribute) anAttr;
3204 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3205 _PTR(AttributeName) aName (anAttr);
3207 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3208 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3209 if (!CORBA::is_nil(anObj)) {
3210 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3211 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3219 void GeometryGUI::updateMaterials()
3221 LightApp_Preferences* pref = preferences();
3223 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3224 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3225 if ( !materials.contains( currentMaterial ) )
3226 // user material set as default in the preferences, might be removed
3227 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3229 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3231 setPreferenceProperty( prefItem->id(),
3232 "strings", materials );
3233 prefItem->retrieve();
3239 \brief Check if the module allows "drag" operation of its objects.
3241 Overloaded from LightApp_Module class.
3243 This function is a part of the general drag-n-drop mechanism.
3244 The goal of this function is to check data object passed as a parameter
3245 and decide if it can be dragged or no.
3247 \param what data object being tested for drag operation
3248 \return \c true if module allows dragging of the specified object
3249 \sa isDropAccepted(), dropObjects()
3251 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3253 // we allow dragging object under root and object from folder
3254 int aLevel = what->level();
3255 bool anObjectInFolder = false;
3257 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3259 _PTR(SObject) aSO = dataObj->object();
3261 _PTR(GenericAttribute) anAttr;
3262 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3263 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3264 _PTR(AttributeLocalID) aLocalID( anAttr );
3265 anObjectInFolder = aLocalID->Value() == 999;
3270 return aLevel == 2 || anObjectInFolder;
3274 \brief Check if the module allows "drop" operation on the given object.
3276 Overloaded from LightApp_Module class.
3278 This function is a part of the general drag-n-drop mechanism.
3279 The goal of this function is to check data object passed as a parameter
3280 and decide if it can be used as a target for the "drop" operation.
3281 The processing of the drop operation itself is done in the dropObjects() function.
3283 \param where target data object
3284 \return \c true if module supports dropping on the \a where data object
3285 \sa isDraggable(), dropObjects()
3287 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3289 // we allow dropping into folder and top-level GEOM object
3290 int aLevel = where->level();
3291 bool isFolder = false;
3293 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3295 _PTR(SObject) aSO = dataObj->object();
3297 _PTR(GenericAttribute) anAttr;
3298 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3299 _PTR(AttributeLocalID) aLocalID( anAttr );
3300 isFolder = aLocalID->Value() == 999;
3305 return aLevel == 1 || isFolder;
3309 \brief Complete drag-n-drop operation.
3311 Overloaded from LightApp_Module class.
3313 This function is a part of the general drag-n-drop mechanism.
3314 Its goal is to handle dropping of the objects being dragged according
3315 to the chosen operation (move). The dropping is performed in the
3316 context of the parent data object \a where and the \a row (position in the
3317 children index) at which the data should be dropped. If \a row is equal to -1,
3318 this means that objects are added to the end of the children list.
3320 \param what objects being dropped
3321 \param where target data object
3322 \param row child index at which the drop operation is performed
3323 \param action drag-n-drop operation (Qt::DropAction) - move
3325 \sa isDraggable(), isDropAccepted()
3327 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3328 const int row, Qt::DropAction action )
3330 if (action != Qt::CopyAction && action != Qt::MoveAction)
3331 return; // unsupported action
3333 // get parent object
3334 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3335 if ( !dataObj ) return; // wrong parent
3336 _PTR(SObject) parentObj = dataObj->object();
3338 // Find the current Study and StudyBuilder
3339 _PTR(Study) aStudy = parentObj->GetStudy();
3340 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3341 // collect all parents of the target node
3342 QStringList parentIDs;
3343 _PTR(SObject) parent = parentObj;
3344 while( !parent->IsNull() ) {
3345 parentIDs << parent->GetID().c_str();
3346 parent = aUseCaseBuilder->GetFather(parent);
3349 // collect objects being dropped
3350 GEOM::object_list_var objects = new GEOM::object_list();
3351 objects->length( what.count() );
3353 for ( int i = 0; i < what.count(); i++ ) {
3354 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3355 if ( !dataObj ) continue; // skip wrong objects
3356 _PTR(SObject) sobj = dataObj->object();
3357 // check that dropped object is not a parent of target object
3358 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3359 return; // it's not allowed to move node into it's child
3361 objects[i] = _CAST(SObject, sobj)->GetSObject();
3364 objects->length( count );
3366 // call engine function
3367 GetGeomGen()->Move( objects.in(), // what
3368 _CAST(SObject, parentObj)->GetSObject(), // where
3371 // update Object browser
3372 getApp()->updateObjectBrowser( false );