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>
83 #include <SALOMEDSClient_ClientFactory.hxx>
84 #include <SALOMEDSClient_IParameters.hxx>
86 #include <SALOMEDS_SObject.hxx>
88 #include <Basics_OCCTVersion.hxx>
99 #include <QSignalMapper>
101 #include <AIS_Drawer.hxx>
102 #include <AIS_ListOfInteractive.hxx>
103 #include <AIS_ListIteratorOfListOfInteractive.hxx>
104 #include <Prs3d_Drawer.hxx>
105 #include <Prs3d_IsoAspect.hxx>
106 #include <Aspect_TypeOfMarker.hxx>
107 #include <OSD_SharedLibrary.hxx>
108 #include <NCollection_DataMap.hxx>
110 #include <TColStd_HArray1OfByte.hxx>
112 #include <utilities.h>
114 #include <vtkCamera.h>
115 #include <vtkRenderer.h>
117 #include <Standard_Failure.hxx>
118 #include <Standard_ErrorHandler.hxx>
120 #include "GEOM_version.h"
121 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
124 Standard_EXPORT CAM_Module* createModule() {
125 return new GeometryGUI();
128 Standard_EXPORT char* getModuleVersion() {
129 return (char*)GEOM_VERSION_STR;
133 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
135 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
137 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
139 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
140 if (CORBA::is_nil(myComponentGeom))
142 return GeometryGUI::myComponentGeom;
145 bool GeometryGUI::InitGeomGen()
148 if ( CORBA::is_nil( myComponentGeom ) ) return false;
152 //=======================================================================
153 // function : ClientSObjectToObject
155 //=======================================================================
156 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
158 _PTR(GenericAttribute) anAttr;
159 CORBA::Object_var anObj;
161 std::string aValue = theSObject->GetIOR();
162 if (strcmp(aValue.c_str(), "") != 0) {
163 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
164 anObj = anORB->string_to_object(aValue.c_str());
167 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
169 return anObj._retn();
172 //=======================================================================
173 // function : ClientStudyToStudy
175 //=======================================================================
176 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
178 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
179 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
180 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
181 int aStudyID = theStudy->StudyId();
182 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
183 return aDSStudy._retn();
186 void GeometryGUI::Modified (bool theIsUpdateActions)
188 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
189 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
190 appStudy->Modified();
191 if ( theIsUpdateActions )
192 app->updateActions();
197 //=======================================================================
198 // function : GeometryGUI::GeometryGUI()
199 // purpose : Constructor
200 //=======================================================================
201 GeometryGUI::GeometryGUI() :
202 SalomeApp_Module( "GEOM" ),
205 if ( CORBA::is_nil( myComponentGeom ) )
207 Engines::EngineComponent_var comp =
208 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
209 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
212 myActiveDialogBox = 0;
214 gp_Pnt origin = gp_Pnt(0., 0., 0.);
215 gp_Dir direction = gp_Dir(0., 0., 1.);
216 myWorkingPlane = gp_Ax3(origin, direction);
219 myLocalSelectionMode = GEOM_ALLOBJECTS;
221 myCreationInfoWdg = 0;
223 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
225 Q_INIT_RESOURCE( GEOMGUI );
228 //=======================================================================
229 // function : GeometryGUI::~GeometryGUI()
230 // purpose : Destructor
231 //=======================================================================
232 GeometryGUI::~GeometryGUI()
234 while (!myOCCSelectors.isEmpty())
235 delete myOCCSelectors.takeFirst();
237 while (!myVTKSelectors.isEmpty())
238 delete myVTKSelectors.takeFirst();
240 qDeleteAll(myGUIMap);
243 //=======================================================================
244 // function : GeometryGUI::getLibrary()
245 // purpose : get or load GUI library by name [ internal ]
246 //=======================================================================
247 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
248 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
250 if ( !myGUIMap.contains( libraryName ) ) {
251 // try to load library if it is not loaded yet
253 QString dirs = getenv( "LD_LIBRARY_PATH" );
256 QString dirs = getenv( "PATH" );
259 if ( !dirs.isEmpty() ) {
260 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
261 QListIterator<QString> it( dirList ); it.toBack();
262 while ( it.hasPrevious() ) {
263 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
265 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
266 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
268 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
269 continue; // continue search further
271 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
272 if ( osdF != NULL ) {
273 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
274 GEOMGUI* libGUI = (*func)( this );
276 myGUIMap[ libraryName ] = libGUI;
277 break; // found and loaded!
284 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
287 //=======================================================================
288 // function : GeometryGUI::getPluginLibrary()
289 // purpose : get or load GUI Plugin library by name [ internal ]
290 //=======================================================================
291 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
292 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
294 if ( !myGUIMap.contains( libraryName ) ) {
295 // try to load library if it is not loaded yet
297 QString dirs = getenv( "LD_LIBRARY_PATH" );
300 QString dirs = getenv( "PATH" );
303 if ( !dirs.isEmpty() ) {
304 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
305 QListIterator<QString> it( dirList ); it.toBack();
306 while ( it.hasPrevious() ) {
307 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
309 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
310 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
312 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
313 continue; // continue search further
315 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
316 if ( osdF != NULL ) {
317 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
318 GEOMPluginGUI* libGUI = (*func)( this );
320 myGUIMap[ libraryName ] = libGUI;
321 break; // found and loaded!
328 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
331 //=======================================================================
332 // function : GeometryGUI::ActiveWorkingPlane()
333 // purpose : Activate Working Plane View
334 //=======================================================================
335 void GeometryGUI::ActiveWorkingPlane()
337 gp_Dir DZ = myWorkingPlane.Direction();
338 gp_Dir DY = myWorkingPlane.YDirection();
340 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
341 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
342 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
345 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
347 Handle(V3d_View) view3d = vw->getViewPort()->getView();
349 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
350 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
354 else if ( ViewVTK ) {
355 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
357 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
359 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
360 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
361 camera->SetFocalPoint(0,0,0);
368 //=======================================================================
369 // function : GeometryGUI::SetActiveDialogBox()
370 // purpose : Set active dialog box
371 //=======================================================================
372 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
374 myActiveDialogBox = (QDialog*)aDlg;
377 //=======================================================================
378 // function : GeometryGUI::EmitSignalDeactivateDialog()
379 // purpose : Emit a signal to deactivate the active dialog Box
380 //=======================================================================
381 void GeometryGUI::EmitSignalDeactivateDialog()
383 emit SignalDeactivateActiveDialog();
386 //=======================================================================
387 // function : GeometryGUI::EmitSignalCloseAllDialogs()
388 // purpose : Emit a signal to close all non modal dialogs box
389 //=======================================================================
390 void GeometryGUI::EmitSignalCloseAllDialogs()
392 emit SignalCloseAllDialogs();
395 //=======================================================================
396 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
397 // purpose : Emit a signal to inform that default real spin box step has
399 //=======================================================================
400 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
402 emit SignalDefaultStepValueChanged(newVal);
405 //=======================================================================
406 // function : GeometryGUI::OnGUIEvent()
407 // purpose : common slot for all menu/toolbar actions
408 //=======================================================================
409 void GeometryGUI::OnGUIEvent()
411 const QObject* obj = sender();
412 if ( !obj || !obj->inherits( "QAction" ) )
414 int id = actionId((QAction*)obj);
419 //=======================================================================
420 // function : GeometryGUI::OnGUIEvent()
421 // purpose : manage all events on GUI [static]
422 //=======================================================================
423 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
425 SUIT_Application* anApp = application();
427 SUIT_Desktop* desk = anApp->desktop();
429 // check type of the active viewframe
430 SUIT_ViewWindow* window = desk->activeWindow();
431 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
432 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
433 bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() );
434 // if current viewframe is not of OCC and not of VTK type - return immediately
435 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
436 QList<int> NotViewerDependentCommands;
437 NotViewerDependentCommands << GEOMOp::OpDelete
439 << GEOMOp::OpShowOnly
440 << GEOMOp::OpShowOnlyChildren
441 << GEOMOp::OpDiscloseChildren
442 << GEOMOp::OpConcealChildren
443 << GEOMOp::OpUnpublishObject
444 << GEOMOp::OpPublishObject
445 << GEOMOp::OpPointMarker
446 << GEOMOp::OpCreateFolder
447 << GEOMOp::OpSortChildren;
448 if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) {
449 // activate OCC viewer
450 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
453 // fix for IPAL9103, point 2
454 if ( CORBA::is_nil( GetGeomGen() ) ) {
455 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
460 // find corresponding GUI library
462 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
463 createOriginAndBaseVectors(); // internal operation
465 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
466 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
467 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
468 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
469 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
470 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
471 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
472 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
473 case GEOMOp::OpDelete: // MENU EDIT - DELETE
474 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
475 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
476 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
477 case GEOMOp::OpColor: // POPUP MENU - COLOR
478 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
479 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
480 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
481 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
482 case GEOMOp::OpIsos: // POPUP MENU - ISOS
483 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
484 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
485 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
486 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
487 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
488 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
489 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
490 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
491 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
492 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
493 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
494 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
495 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
496 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
497 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
498 case GEOMOp::OpClsBringToFront: //
499 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
500 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
501 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
502 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
503 libName = "GEOMToolsGUI";
505 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
506 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
507 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
508 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
509 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
510 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
511 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
512 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
513 case GEOMOp::OpHide: // MENU VIEW - ERASE
514 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
515 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
516 case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE
517 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
518 case GEOMOp::OpShading: // POPUP MENU - SHADING
519 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
520 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
521 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
522 case GEOMOp::OpVertices: // POPUP MENU - VERTICES
523 libName = "DisplayGUI";
525 case GEOMOp::OpPoint: // MENU BASIC - POINT
526 case GEOMOp::OpLine: // MENU BASIC - LINE
527 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
528 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
529 case GEOMOp::OpArc: // MENU BASIC - ARC
530 case GEOMOp::OpVector: // MENU BASIC - VECTOR
531 case GEOMOp::OpPlane: // MENU BASIC - PLANE
532 case GEOMOp::OpCurve: // MENU BASIC - CURVE
533 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
534 libName = "BasicGUI";
536 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
537 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
538 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
539 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
540 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
541 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
542 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
543 libName = "PrimitiveGUI";
545 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
546 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
547 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
548 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
549 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
550 libName = "GenerationGUI";
552 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
553 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
554 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
555 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
557 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
559 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
560 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
561 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
562 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
563 case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR
564 libName = "EntityGUI";
566 case GEOMOp::OpEdge: // MENU BUILD - EDGE
567 case GEOMOp::OpWire: // MENU BUILD - WIRE
568 case GEOMOp::OpFace: // MENU BUILD - FACE
569 case GEOMOp::OpShell: // MENU BUILD - SHELL
570 case GEOMOp::OpSolid: // MENU BUILD - SOLID
571 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
572 libName = "BuildGUI";
574 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
575 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
576 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
577 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
578 libName = "BooleanGUI";
580 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
581 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
582 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
583 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
584 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
585 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
586 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
587 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
588 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
589 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
590 case GEOMOp::OpExtension: // MENU TRANSFORMATION - EXTENSION
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" );
964 createGeomAction( GEOMOp::OpExtension, "EXTENSION" );
966 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
967 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
968 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
969 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
970 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
971 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
972 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
973 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
974 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
975 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
976 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
978 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
979 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
980 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
982 createGeomAction( GEOMOp::OpSewing, "SEWING" );
983 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
984 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
985 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
986 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
987 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
988 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
989 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
990 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
991 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
992 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
993 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
994 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
995 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
996 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
997 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
998 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1000 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1001 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1002 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1003 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1004 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1005 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1006 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1007 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1008 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1010 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1011 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1012 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1013 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1014 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1015 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1017 #ifdef _DEBUG_ // PAL16821
1018 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1021 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1022 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1023 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1024 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1025 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1026 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1027 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1028 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1029 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1030 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1031 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1032 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1033 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1034 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1035 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1036 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1037 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1038 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1039 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1040 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1041 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1042 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1043 createGeomAction( GEOMOp::OpHide, "ERASE" );
1045 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1046 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1047 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1048 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1049 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1050 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1051 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1052 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1053 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1054 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1055 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1056 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1057 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1058 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1059 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1060 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1061 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1062 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1063 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1064 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1065 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1066 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1067 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1068 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1069 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1070 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1071 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1072 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1073 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1074 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1076 // Create actions for increase/decrease transparency shortcuts
1077 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1078 "Geometry:Increase transparency");
1079 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1080 "Geometry:Decrease transparency");
1082 // Create actions for increase/decrease number of isolines
1083 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1084 "Geometry:Increase number of isolines");
1085 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1086 "Geometry:Decrease number of isolines");
1088 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1089 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1090 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1091 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1092 //@@ 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 @@//
1094 // ---- create menus --------------------------
1096 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1098 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1099 createMenu( GEOMOp::OpDelete, editId, -1 );
1101 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1103 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1104 createMenu( GEOMOp::OpPoint, basicId, -1 );
1105 createMenu( GEOMOp::OpLine, basicId, -1 );
1106 createMenu( GEOMOp::OpCircle, basicId, -1 );
1107 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1108 createMenu( GEOMOp::OpArc, basicId, -1 );
1109 createMenu( GEOMOp::OpCurve, basicId, -1 );
1110 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1111 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1112 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1113 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1114 createMenu( separator(), basicId, -1 );
1115 createMenu( GEOMOp::OpVector, basicId, -1 );
1116 createMenu( GEOMOp::OpPlane, basicId, -1 );
1117 createMenu( GEOMOp::OpLCS, basicId, -1 );
1118 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1120 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1121 createMenu( GEOMOp::OpBox, primId, -1 );
1122 createMenu( GEOMOp::OpCylinder, primId, -1 );
1123 createMenu( GEOMOp::OpSphere, primId, -1 );
1124 createMenu( GEOMOp::OpTorus, primId, -1 );
1125 createMenu( GEOMOp::OpCone, primId, -1 );
1126 createMenu( GEOMOp::OpRectangle, primId, -1 );
1127 createMenu( GEOMOp::OpDisk, primId, -1 );
1128 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1130 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1131 createMenu( GEOMOp::OpPrism, genId, -1 );
1132 createMenu( GEOMOp::OpRevolution, genId, -1 );
1133 createMenu( GEOMOp::OpFilling, genId, -1 );
1134 createMenu( GEOMOp::OpPipe, genId, -1 );
1135 createMenu( GEOMOp::OpPipePath, genId, -1 );
1137 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1138 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1139 //@@ 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 @@//
1141 createMenu( separator(), newEntId, -1 );
1143 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1144 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1145 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1146 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1147 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1148 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1150 createMenu( separator(), newEntId, -1 );
1152 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1153 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1154 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1156 createMenu( separator(), newEntId, -1 );
1158 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1159 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1160 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1161 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1162 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1164 createMenu( separator(), newEntId, -1 );
1166 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1168 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1169 createMenu( GEOMOp::OpEdge, buildId, -1 );
1170 createMenu( GEOMOp::OpWire, buildId, -1 );
1171 createMenu( GEOMOp::OpFace, buildId, -1 );
1172 createMenu( GEOMOp::OpShell, buildId, -1 );
1173 createMenu( GEOMOp::OpSolid, buildId, -1 );
1174 createMenu( GEOMOp::OpCompound, buildId, -1 );
1176 createMenu( separator(), newEntId, -1 );
1178 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1180 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1183 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1185 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1186 createMenu( GEOMOp::OpFuse, boolId, -1 );
1187 createMenu( GEOMOp::OpCommon, boolId, -1 );
1188 createMenu( GEOMOp::OpCut, boolId, -1 );
1189 createMenu( GEOMOp::OpSection, boolId, -1 );
1191 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1192 createMenu( GEOMOp::OpTranslate, transId, -1 );
1193 createMenu( GEOMOp::OpRotate, transId, -1 );
1194 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1195 createMenu( GEOMOp::OpMirror, transId, -1 );
1196 createMenu( GEOMOp::OpScale, transId, -1 );
1197 createMenu( GEOMOp::OpOffset, transId, -1 );
1198 createMenu( GEOMOp::OpProjection, transId, -1 );
1199 createMenu( GEOMOp::OpExtension, transId, -1 );
1200 createMenu( separator(), transId, -1 );
1201 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1202 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1204 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1205 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1206 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1207 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1209 createMenu( separator(), operId, -1 );
1211 createMenu( GEOMOp::OpPartition, operId, -1 );
1212 createMenu( GEOMOp::OpArchimede, operId, -1 );
1213 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1214 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1216 createMenu( separator(), operId, -1 );
1218 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1219 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1220 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1221 createMenu( GEOMOp::OpChamfer, operId, -1 );
1222 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1223 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1224 //createMenu( GEOMOp::OpClipping, operId, -1 );
1226 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1227 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1228 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1229 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1230 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1231 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1232 createMenu( GEOMOp::OpSewing, repairId, -1 );
1233 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1234 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1235 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1236 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1237 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1238 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1239 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1240 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1241 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1242 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1243 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1245 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1246 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1247 createMenu( GEOMOp::OpProperties, measurId, -1 );
1248 createMenu( separator(), measurId, -1 );
1249 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1250 createMenu( GEOMOp::OpInertia, measurId, -1 );
1251 createMenu( GEOMOp::OpNormale, measurId, -1 );
1252 createMenu( separator(), measurId, -1 );
1253 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1254 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1255 createMenu( separator(), measurId, -1 );
1257 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1258 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1259 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1260 createMenu( GEOMOp::OpAngle, dimId, -1 );
1261 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1263 createMenu( separator(), measurId, -1 );
1264 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1265 createMenu( separator(), measurId, -1 );
1266 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1267 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1268 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1269 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1270 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1272 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1273 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1274 createMenu( separator(), toolsId, -1 );
1275 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1278 createMenu( separator(), toolsId, -1 );
1279 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1280 createMenu( separator(), toolsId, -1 );
1282 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1283 createMenu( separator(), viewId, -1 );
1285 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1286 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1287 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1288 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1289 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1290 createMenu( separator(), dispmodeId, -1 );
1291 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1292 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1294 createMenu( separator(), viewId, -1 );
1295 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1296 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1297 createMenu( separator(), viewId, -1 );
1298 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1299 createMenu( separator(), viewId, -1 );
1303 because of these items are accessible through object browser and viewers
1304 we have removed they from main menu
1306 createMenu( GEOMOp::OpShow, viewId, -1 );
1307 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1308 createMenu( GEOMOp::OpHide, viewId, -1 );
1311 // ---- create toolbars --------------------------
1313 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1314 createTool( GEOMOp::OpPoint, basicTbId );
1315 createTool( GEOMOp::OpLine, basicTbId );
1316 createTool( GEOMOp::OpCircle, basicTbId );
1317 createTool( GEOMOp::OpEllipse, basicTbId );
1318 createTool( GEOMOp::OpArc, basicTbId );
1319 createTool( GEOMOp::OpCurve, basicTbId );
1320 createTool( GEOMOp::OpVector, basicTbId );
1321 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1322 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1323 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1324 createTool( GEOMOp::OpIsoline, basicTbId );
1325 createTool( GEOMOp::OpPlane, basicTbId );
1326 createTool( GEOMOp::OpLCS, basicTbId );
1327 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1329 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1330 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1331 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1333 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1334 createTool( GEOMOp::OpBox, primTbId );
1335 createTool( GEOMOp::OpCylinder, primTbId );
1336 createTool( GEOMOp::OpSphere, primTbId );
1337 createTool( GEOMOp::OpTorus, primTbId );
1338 createTool( GEOMOp::OpCone, primTbId );
1339 createTool( GEOMOp::OpRectangle, primTbId );
1340 createTool( GEOMOp::OpDisk, primTbId );
1341 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1343 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1344 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1345 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1347 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1348 createTool( GEOMOp::OpFuse, boolTbId );
1349 createTool( GEOMOp::OpCommon, boolTbId );
1350 createTool( GEOMOp::OpCut, boolTbId );
1351 createTool( GEOMOp::OpSection, boolTbId );
1353 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1354 createTool( GEOMOp::OpPrism, genTbId );
1355 createTool( GEOMOp::OpRevolution, genTbId );
1356 createTool( GEOMOp::OpFilling, genTbId );
1357 createTool( GEOMOp::OpPipe, genTbId );
1358 createTool( GEOMOp::OpPipePath, genTbId );
1360 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1361 createTool( GEOMOp::OpTranslate, transTbId );
1362 createTool( GEOMOp::OpRotate, transTbId );
1363 createTool( GEOMOp::OpChangeLoc, transTbId );
1364 createTool( GEOMOp::OpMirror, transTbId );
1365 createTool( GEOMOp::OpScale, transTbId );
1366 createTool( GEOMOp::OpOffset, transTbId );
1367 createTool( GEOMOp::OpProjection, transTbId );
1368 createTool( GEOMOp::OpExtension, transTbId );
1369 createTool( separator(), transTbId );
1370 createTool( GEOMOp::OpMultiTranslate, transTbId );
1371 createTool( GEOMOp::OpMultiRotate, transTbId );
1373 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1374 createTool( GEOMOp::OpExplode, operTbId );
1375 createTool( GEOMOp::OpPartition, operTbId );
1376 createTool( GEOMOp::OpArchimede, operTbId );
1377 createTool( GEOMOp::OpShapesOnShape, operTbId );
1378 createTool( GEOMOp::OpSharedShapes, operTbId );
1380 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1381 createTool( GEOMOp::OpFillet1d, featTbId );
1382 createTool( GEOMOp::OpFillet2d, featTbId );
1383 createTool( GEOMOp::OpFillet3d, featTbId );
1384 createTool( GEOMOp::OpChamfer, featTbId );
1385 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1386 createTool( GEOMOp::OpExtrudedCut, featTbId );
1388 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1389 createTool( GEOMOp::OpEdge, buildTbId );
1390 createTool( GEOMOp::OpWire, buildTbId );
1391 createTool( GEOMOp::OpFace, buildTbId );
1392 createTool( GEOMOp::OpShell, buildTbId );
1393 createTool( GEOMOp::OpSolid, buildTbId );
1394 createTool( GEOMOp::OpCompound, buildTbId );
1396 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1397 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1398 createTool( GEOMOp::OpProperties, measureTbId );
1399 createTool( GEOMOp::OpCenterMass, measureTbId );
1400 createTool( GEOMOp::OpInertia, measureTbId );
1401 createTool( GEOMOp::OpNormale, measureTbId );
1402 createTool( separator(), measureTbId );
1403 createTool( GEOMOp::OpBoundingBox, measureTbId );
1404 createTool( GEOMOp::OpMinDistance, measureTbId );
1405 createTool( GEOMOp::OpAngle, measureTbId );
1406 createTool( GEOMOp::OpTolerance , measureTbId );
1407 createTool( separator(), measureTbId );
1408 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1409 createTool( GEOMOp::OpFreeFaces, measureTbId );
1410 createTool( separator(), measureTbId );
1411 createTool( GEOMOp::OpWhatIs, measureTbId );
1412 createTool( GEOMOp::OpCheckShape, measureTbId );
1413 createTool( GEOMOp::OpCheckCompound, measureTbId );
1414 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1415 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1417 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1418 createTool( GEOMOp::OpPictureImport, picturesTbId );
1420 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1423 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1424 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1425 //@@ 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 @@//
1427 // ---- create popup menus --------------------------
1429 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1430 QString clientOCC = "(client='OCCViewer')";
1431 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1432 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1434 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1435 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1436 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1437 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1439 QString autoColorPrefix =
1440 "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') and type='Shape' and selcount=1";
1442 QtxPopupMgr* mgr = popupMgr();
1444 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1445 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1446 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1447 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1448 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1449 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1450 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1451 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1453 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1454 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1455 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1456 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1457 mgr->insert( separator(), -1, -1 ); // -----------
1459 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1460 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1461 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1462 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1463 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1464 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1465 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1466 mgr->insert( separator(), -1, -1 ); // -----------
1467 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1468 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1469 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1470 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1471 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1472 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1473 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1474 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1475 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1476 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1477 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1478 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1479 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1480 mgr->insert( separator(), dispmodeId, -1 );
1481 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1482 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1483 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1484 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1485 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1486 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1487 mgr->insert( separator(), -1, -1 ); // -----------
1489 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1490 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1491 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1492 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1493 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1494 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1495 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1496 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1497 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1498 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1500 // material properties
1501 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1502 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1505 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1506 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1508 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1509 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1510 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1512 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1513 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1515 mgr->insert( separator(), -1, -1 ); // -----------
1516 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1517 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1518 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1519 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1520 mgr->insert( separator(), -1, -1 ); // -----------
1522 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1523 onlyComponent = "((type='Component') and selcount=1)",
1524 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1525 types = "'Shape' 'Group' 'FieldStep'";
1527 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1528 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1530 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1531 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1533 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1534 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1536 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1538 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1539 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1540 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1541 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1542 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1543 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1544 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1545 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1546 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1547 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1548 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1549 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1550 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1551 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1552 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1553 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1554 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1555 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1556 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1557 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1558 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1559 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1560 mgr->insert( separator(), selectonlyId, -1);
1561 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1562 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1563 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1564 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1565 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1566 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1567 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1569 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1571 mgr->insert( separator(), -1, -1 ); // -----------
1572 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1573 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1574 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1575 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1577 mgr->insert( separator(), -1, -1 ); // -----------
1578 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1579 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1581 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1582 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1584 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1585 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1587 mgr->insert( separator(), -1, -1 ); // -----------
1588 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1589 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1591 mgr->insert( separator(), -1, -1 ); // -----------
1592 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1593 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1595 mgr->insert( separator(), -1, -1 ); // -----------
1596 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1597 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1599 mgr->insert( separator(), -1, -1 ); // -----------
1600 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1601 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1603 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1605 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1607 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1608 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1609 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1612 // create plugin actions and menus
1616 //=======================================================================
1617 // function : GeometryGUI::addPluginActions()
1619 //=======================================================================
1620 void GeometryGUI::addPluginActions()
1623 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1624 if (!resMgr) return;
1626 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1627 if (!appStudy) return;
1629 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1631 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1633 int id = GEOMOp::OpLastOperationID; // TODO?
1636 GEOMUtils::PluginInfo::const_iterator it;
1637 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1638 // bind action lib and label to its ID for activateOperation() method proper work
1639 GEOMUtils::PluginData pdata = (*it);
1640 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1641 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1642 std::list<GEOMUtils::ActionData>::const_iterator ait;
1643 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1644 GEOMUtils::ActionData adata = (*ait);
1647 if ( !adata.icon.empty() )
1648 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1650 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1651 QString actionName = smenus.last();
1652 actionName = actionName.toUpper().prepend( "MEN_" );
1653 smenus.removeLast();
1655 // path to action in toolbar
1656 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1657 QString actionTool = stools.last();
1658 actionTool = actionTool.toUpper().prepend( "TOP_" );
1659 stools.removeLast();
1661 QString actionStat = adata.statusText.c_str();
1662 actionStat = actionStat.toUpper().prepend( "STB_" );
1664 createAction( id, // ~ adata.label
1665 tr( actionTool.toLatin1().constData() ),
1667 tr( actionName.toLatin1().constData() ),
1668 tr( actionStat.toLatin1().constData() ),
1669 QKeySequence( tr( adata.accel.c_str() ) ),
1670 application()->desktop(),
1672 this, SLOT( OnGUIEvent() ),
1673 QString() /*shortcutAction*/ );
1676 foreach ( QString subMenu, smenus ) {
1677 QStringList subMenuList = subMenu.split( ":" );
1678 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1679 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1680 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1682 createMenu( id, menuId, -1 );
1684 if ( !stools.isEmpty() ) {
1685 QString subTool = stools[0];
1686 subTool = subTool.toUpper().prepend( "TOOL_" );
1687 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1688 createTool(id, toolId);
1691 // add action id to map
1692 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1693 myPluginActions[id] = anAction;
1700 //=======================================================================
1701 // function : GeometryGUI::activateModule()
1702 // purpose : Called when GEOM module is activated
1703 //=======================================================================
1704 bool GeometryGUI::activateModule( SUIT_Study* study )
1706 if ( CORBA::is_nil( myComponentGeom ) )
1709 bool res = SalomeApp_Module::activateModule( study );
1713 setMenuShown( true );
1714 setToolShown( true );
1716 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1717 PyGILState_STATE gstate = PyGILState_Ensure();
1718 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1719 if ( !pluginsmanager ) {
1723 PyObjWrapper result =
1724 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1725 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1726 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1730 PyGILState_Release(gstate);
1731 // end of GEOM plugins loading
1733 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1734 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1736 // Reset actions accelerator keys
1737 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1739 GUIMap::Iterator it;
1740 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1741 it.value()->activate( application()->desktop() );
1743 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1745 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1746 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1747 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1749 if ( !myCreationInfoWdg )
1750 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1751 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1752 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1755 SALOME_ListIO selected;
1756 sm->selectedObjects( selected );
1757 sm->clearSelected();
1759 SUIT_ViewManager* vm;
1760 ViewManagerList OCCViewManagers, VTKViewManagers;
1762 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1763 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1764 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1765 onViewManagerAdded(vm);
1767 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1768 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1769 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1770 onViewManagerAdded(vm);
1772 sm->setSelectedObjects( selected, true ); //NPAL 19674
1774 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1776 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1778 // 0020836 (Basic vectors and origin)
1779 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1780 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1781 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1783 _PTR(Study) studyDS = appStudy->studyDS();
1785 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1786 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1787 createOriginAndBaseVectors();
1795 //=======================================================================
1796 // function : GeometryGUI::deactivateModule()
1797 // purpose : Called when GEOM module is deactivated
1798 //=======================================================================
1799 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1801 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1803 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1805 setMenuShown( false );
1806 setToolShown( false );
1808 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1809 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1811 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1813 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1814 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1815 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1816 myCreationInfoWdg = 0;
1818 EmitSignalCloseAllDialogs();
1820 GUIMap::Iterator it;
1821 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1822 it.value()->deactivate();
1824 // Unset actions accelerator keys
1825 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1827 qDeleteAll(myOCCSelectors);
1828 myOCCSelectors.clear();
1829 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1831 qDeleteAll(myVTKSelectors);
1832 myVTKSelectors.clear();
1833 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1835 return SalomeApp_Module::deactivateModule( study );
1838 //=======================================================================
1839 // function : onWindowActivated()
1840 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1841 //=======================================================================
1842 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1847 const bool ViewOCC = ( win->getViewManager() ? win->getViewManager()->getType() == OCCViewer_Viewer::Type() : false );
1848 //const bool ViewVTK = ( win->getViewManager() ? win->getViewManager()->getType() == SVTK_Viewer::Type() : false );
1850 // disable non-OCC viewframe menu commands
1851 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1852 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1853 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1854 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1855 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1856 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1857 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1859 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1860 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1861 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1862 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1864 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1867 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1869 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1870 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
1871 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1872 if ( myCreationInfoWdg )
1873 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1876 void GeometryGUI::viewManagers( QStringList& lst ) const
1878 lst.append( OCCViewer_Viewer::Type() );
1881 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1883 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1885 qDebug( "connect" );
1886 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1887 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1888 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1889 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1890 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1891 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1892 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1893 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1895 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1896 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1898 // disable OCC selectors
1899 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1900 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1901 while ( itOCCSel.hasNext() )
1902 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1903 sr->setEnabled(true);
1905 else if ( vm->getType() == SVTK_Viewer::Type() )
1907 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1908 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1910 // disable VTK selectors
1911 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1912 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1913 while ( itVTKSel.hasNext() )
1914 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1915 sr->setEnabled(true);
1919 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1921 SUIT_ViewModel* viewer = vm->getViewModel();
1922 if ( vm->getType() == OCCViewer_Viewer::Type() )
1924 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1925 while ( itOCCSel.hasNext() )
1926 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1927 if ( sr->viewer() == viewer )
1929 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1933 if ( vm->getType() == SVTK_Viewer::Type() )
1935 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1936 while ( itVTKSel.hasNext() )
1937 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1938 if ( sr->viewer() == viewer )
1940 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1946 //================================================================================
1948 * \brief Slot called when selection changed. Shows creation info of a selected object
1950 //================================================================================
1952 void GeometryGUI::updateCreationInfo()
1954 if ( myCreationInfoWdg )
1955 myCreationInfoWdg->clear();
1957 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
1958 // if ( !myCreationInfoWdg->isVisible() )
1961 // look for a sole selected GEOM_Object
1962 GEOM::GEOM_BaseObject_var geomObj;
1964 SALOME_ListIO selected;
1965 getApp()->selectionMgr()->selectedObjects( selected );
1967 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
1968 SALOME_ListIteratorOfListIO selIt( selected );
1969 for ( ; selIt.More(); selIt.Next() )
1971 Handle(SALOME_InteractiveObject) io = selIt.Value();
1972 if ( !io->hasEntry() ) continue;
1973 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
1974 if ( !sobj ) continue;
1975 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
1976 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
1977 if ( !gobj->_is_nil() )
1979 if ( !geomObj->_is_nil() )
1980 return; // several GEOM objects selected
1984 if ( geomObj->_is_nil() ) return;
1986 // pass creation info of geomObj to myCreationInfoWdg
1988 if ( myCreationInfoWdg ) {
1990 QString operationName;
1991 myCreationInfoWdg->setOperation( icon, operationName );
1995 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
1997 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1998 QString name = info->operationName.in();
1999 if ( !name.isEmpty() ) {
2001 QString plugin_name;
2002 for ( size_t i = 0; i < info->params.length(); ++i ) {
2003 myCreationInfoWdg->addParam( info->params[i].name.in(),
2004 info->params[i].value.in() );
2005 QString value = info->params[i].name.in();
2006 if( value == PLUGIN_NAME ) {
2007 plugin_name = info->params[i].value.in();
2010 QString prefix = plugin_name.isEmpty() ? "GEOM" : plugin_name;
2011 icon = resMgr->loadPixmap( prefix, tr( ("ICO_"+name).toLatin1().constData() ), false );
2012 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2013 if ( operationName.startsWith( "MEN_" ))
2014 operationName = name; // no translation
2015 myCreationInfoWdg->setOperation( icon, operationName );
2024 void GeometryGUI::onAutoBringToFront()
2026 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2027 if( !isAutoBringToFront )
2030 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2031 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2034 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2035 if (!appStudy) return;
2037 GEOM_Displayer displayer( appStudy );
2039 SALOME_View* window = displayer.GetActiveView();
2040 if ( !window ) return;
2042 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2044 SALOME_ListIO selected;
2045 getApp()->selectionMgr()->selectedObjects( selected );
2046 if (!myTopLevelIOList.IsEmpty())
2048 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2050 Handle( SALOME_InteractiveObject ) io = It.Value();
2051 bool isSelected = false;
2052 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2054 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2055 if( io->isSame( sel_io ) )
2058 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2060 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2061 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2066 myTopLevelIOList.Assign(selected);
2067 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2069 Handle( SALOME_InteractiveObject ) io = It.Value();
2070 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2071 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2074 displayer.UpdateViewer();
2075 GeometryGUI::Modified();
2078 void GeometryGUI::updateFieldColorScale()
2080 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2082 GEOM_Displayer aDisplayer( aStudy );
2083 aDisplayer.UpdateColorScale();
2087 QString GeometryGUI::engineIOR() const
2089 if ( !CORBA::is_nil( GetGeomGen() ) )
2090 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2094 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2095 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2097 theWidth = theHeight = 0;
2099 Handle(TColStd_HArray1OfByte) aTexture;
2102 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2103 aTexture = aTextureMap[ theId ];
2104 if ( aTexture.IsNull() ) {
2105 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2106 if ( !aInsOp->_is_nil() ) {
2107 CORBA::Long aWidth, aHeight;
2108 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2109 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2111 theHeight = aHeight;
2113 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2115 for (int i = 0; i < aStream->length(); i++)
2116 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2117 aTextureMap[ theId ] = aTexture;
2125 LightApp_Selection* GeometryGUI::createSelection() const
2127 return new GEOMGUI_Selection();
2130 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2132 SalomeApp_Module::contextMenuPopup( client, menu, title );
2134 getApp()->selectionMgr()->selectedObjects( lst );
2136 //Add submenu for predefined materials
2137 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2138 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2139 QtxPopupMgr* mgr = popupMgr();
2140 //get parrent for submenu
2141 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2143 QMenu* oldMenu = act->menu() ;
2148 QMenu* matMenu = new QMenu();
2149 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2151 //Get current material model for the object
2153 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2154 if ( anApp && anApp->activeViewManager() ) {
2155 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2157 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2160 QString curModel = "";
2161 if ( v.canConvert<QString>() ) curModel = v.toString();
2162 // get list of all predefined materials
2163 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2165 foreach ( QString material, materials )
2167 QAction* menAct = matMenu->addAction( material );
2168 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2169 signalMapper->setMapping( menAct, material );
2170 menAct->setCheckable( true );
2171 // Set checked if this material is current
2172 Material_Model aModel;
2173 aModel.fromResources( material );
2174 if ( !found && aModel.toProperties() == curModel ) {
2175 menAct->setChecked( true );
2179 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2180 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2181 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2182 this, SLOT( OnSetMaterial( const QString & ) ) );
2183 act->setMenu( matMenu );
2187 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2188 Handle(SALOME_InteractiveObject) io = lst.First();
2189 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2190 _PTR(Study) study = appStudy->studyDS();
2191 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2193 QString aName = QString( obj->GetName().c_str() );
2194 aName.remove( QRegExp("\\s+$") );
2200 void GeometryGUI::OnSetMaterial(const QString& theName)
2202 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2206 void GeometryGUI::createPreferences()
2208 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2210 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2211 setPreferenceProperty( genGroup, "columns", 2 );
2213 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2214 LightApp_Preferences::Selector,
2215 "Geometry", "display_mode" );
2217 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2218 LightApp_Preferences::Color, "Geometry", "shading_color" );
2220 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2221 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2223 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2224 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2226 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2227 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2229 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2230 LightApp_Preferences::Color, "Geometry", "line_color" );
2232 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2233 LightApp_Preferences::Color, "Geometry", "point_color" );
2235 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2236 LightApp_Preferences::Color, "Geometry", "isos_color" );
2238 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2239 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2241 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2242 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2244 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2245 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2247 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2248 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2250 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2251 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2253 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2254 LightApp_Preferences::Selector,
2255 "Geometry", "material" );
2257 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2258 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2264 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2265 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2267 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2268 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2270 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2271 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2273 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2274 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2276 for (int i = 0; i < nb; i++) {
2277 setPreferenceProperty( wd[i], "min", 1 );
2278 setPreferenceProperty( wd[i], "max", 5 );
2281 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2282 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2284 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2285 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2287 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2288 setPreferenceProperty( aDimGroupId, "columns", 2 );
2290 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2291 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2293 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2294 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2296 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2297 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2299 int aDimFontHeightId = addPreference( tr( "PREF_DIMENSIONS_FONT_HEIGHT" ), aDimGroupId,
2300 LightApp_Preferences::DblSpin, "Geometry", "dimensions_font_height" );
2302 setPreferenceProperty( aDimFontHeightId, "min", 1e-9 );
2303 setPreferenceProperty( aDimFontHeightId, "max", 1e+9 );
2304 setPreferenceProperty( aDimFontHeightId, "precision", 9 );
2306 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2307 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2309 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2310 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2311 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2313 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2314 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2316 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2317 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2319 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2320 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2322 QStringList aListOfLengthUnits;
2323 aListOfLengthUnits << "m";
2324 aListOfLengthUnits << "cm";
2325 aListOfLengthUnits << "mm";
2326 aListOfLengthUnits << "in.";
2327 aListOfLengthUnits << "ft.";
2329 QStringList aListOfAngUnits;
2330 aListOfAngUnits << "rad";
2331 aListOfAngUnits << "deg";
2333 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2334 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2336 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2337 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2339 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2340 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2341 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2343 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2344 setPreferenceProperty( isoGroup, "columns", 2 );
2345 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2346 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2347 setPreferenceProperty( isoU, "min", 0 );
2348 setPreferenceProperty( isoU, "max", 100000 );
2349 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2350 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2351 setPreferenceProperty( isoV, "min", 0 );
2352 setPreferenceProperty( isoV, "max", 100000 );
2354 // Quantities with individual precision settings
2355 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2356 setPreferenceProperty( precGroup, "columns", 2 );
2358 const int nbQuantities = 8;
2359 int prec[nbQuantities], ii = 0;
2360 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2361 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2362 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2363 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2364 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2365 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2366 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2367 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2368 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2369 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2370 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2371 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2372 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2373 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2374 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2375 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2377 // Set property for precision value for spinboxes
2378 for ( ii = 0; ii < nbQuantities; ii++ ){
2379 setPreferenceProperty( prec[ii], "min", -14 );
2380 setPreferenceProperty( prec[ii], "max", 14 );
2381 setPreferenceProperty( prec[ii], "precision", 2 );
2384 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2385 setPreferenceProperty( VertexGroup, "columns", 2 );
2387 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2388 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2390 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2391 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2393 // Set property for default display mode
2394 QStringList aModesList;
2395 aModesList.append( tr("MEN_WIREFRAME") );
2396 aModesList.append( tr("MEN_SHADING") );
2397 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2398 aModesList.append( tr("MEN_TEXTURE") );
2400 QList<QVariant> anIndexesList;
2401 anIndexesList.append(0);
2402 anIndexesList.append(1);
2403 anIndexesList.append(2);
2404 anIndexesList.append(3);
2406 setPreferenceProperty( dispmode, "strings", aModesList );
2407 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2409 // Set property for top level display mode
2410 QStringList aTopModesList;
2411 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2412 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2413 aTopModesList.append( tr("MEN_WIREFRAME") );
2414 aTopModesList.append( tr("MEN_SHADING") );
2415 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2417 QList<QVariant> aTopIndexesList;
2418 aTopIndexesList.append(0);
2419 aTopIndexesList.append(1);
2420 aTopIndexesList.append(2);
2421 aTopIndexesList.append(3);
2422 aTopIndexesList.append(4);
2424 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2425 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2427 // Set property for step value for spinboxes
2428 setPreferenceProperty( step, "min", 1 );
2429 setPreferenceProperty( step, "max", 10000 );
2430 setPreferenceProperty( step, "precision", 3 );
2432 // Set property for trandparency value for spinboxes
2433 setPreferenceProperty( transparency, "min", 0 );
2434 setPreferenceProperty( transparency, "max", 100 );
2436 // Set property for deflection value for spinboxes
2437 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2438 setPreferenceProperty( defl, "max", 1.0 );
2439 setPreferenceProperty( defl, "step", 1.0e-04 );
2440 setPreferenceProperty( defl, "precision", 6 );
2442 // Set property for default material
2443 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2445 // Set property vertex marker type
2446 QList<QVariant> aMarkerTypeIndicesList;
2447 QList<QVariant> aMarkerTypeIconsList;
2449 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2450 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2451 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2452 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2453 aMarkerTypeIndicesList << (i-1);
2454 aMarkerTypeIconsList << pixmap;
2457 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2458 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2460 // Set property for vertex marker scale
2461 QList<QVariant> aMarkerScaleIndicesList;
2462 QStringList aMarkerScaleValuesList;
2464 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2465 aMarkerScaleIndicesList << iii;
2466 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2469 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2470 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2472 // Scalar bar for field step presentation
2473 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2474 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2476 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2477 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2478 setPreferenceProperty( sbXPosition, "min", 0 );
2479 setPreferenceProperty( sbXPosition, "max", 1 );
2480 setPreferenceProperty( sbXPosition, "step", 0.05 );
2482 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2483 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2484 setPreferenceProperty( sbYPosition, "min", 0 );
2485 setPreferenceProperty( sbYPosition, "max", 1 );
2486 setPreferenceProperty( sbYPosition, "step", 0.05 );
2488 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2489 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2490 setPreferenceProperty( sbWidth, "min", 0 );
2491 setPreferenceProperty( sbWidth, "max", 1 );
2492 setPreferenceProperty( sbWidth, "step", 0.05 );
2494 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2495 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2496 setPreferenceProperty( sbHeight, "min", 0 );
2497 setPreferenceProperty( sbHeight, "max", 1 );
2498 setPreferenceProperty( sbHeight, "step", 0.05 );
2500 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2501 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2502 setPreferenceProperty( sbTextHeight, "min", 6 );
2503 setPreferenceProperty( sbTextHeight, "max", 24 );
2504 setPreferenceProperty( sbTextHeight, "step", 1 );
2506 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2507 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2508 setPreferenceProperty( sbNbIntervals, "min", 2 );
2509 setPreferenceProperty( sbNbIntervals, "max", 64 );
2510 setPreferenceProperty( sbNbIntervals, "step", 1 );
2512 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2513 setPreferenceProperty( originGroup, "columns", 2 );
2515 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2516 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2517 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2518 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2520 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2521 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2523 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2524 setPreferenceProperty( operationsGroup, "columns", 2 );
2526 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2527 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2529 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2531 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2533 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2534 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2536 QStringList aHierarchyTypeList;
2537 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2538 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2539 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2541 QList<QVariant> aHierarchyTypeIndexesList;
2542 aHierarchyTypeIndexesList.append(0);
2543 aHierarchyTypeIndexesList.append(1);
2544 aHierarchyTypeIndexesList.append(2);
2546 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2547 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2549 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2550 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2552 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2554 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2555 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2557 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2558 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2559 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2560 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2561 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2562 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2563 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2564 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2566 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2567 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2568 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2569 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2570 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2571 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2578 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2580 if (section == "Geometry") {
2581 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2582 if (param == QString("SettingsGeomStep")) {
2583 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2584 EmitSignalDefaultStepValueChanged(spin_step);
2586 else if (param == QString("toplevel_color")) {
2587 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2588 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2590 else if (param == QString("toplevel_dm")) {
2591 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2593 else if (param == QString("scalar_bar_x_position") ||
2594 param == QString("scalar_bar_y_position") ||
2595 param == QString("scalar_bar_width") ||
2596 param == QString("scalar_bar_height") ||
2597 param == QString("scalar_bar_text_height") ||
2598 param == QString("scalar_bar_nb_intervals")) {
2599 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2601 GEOM_Displayer aDisplayer( aStudy );
2602 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2603 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2606 else if ( param == QString("dimensions_color") ||
2607 param == QString("dimensions_line_width") ||
2608 param == QString("dimensions_font_height") ||
2609 param == QString("dimensions_arrow_length") ||
2610 param == QString("dimensions_show_units") ||
2611 param == QString("dimensions_length_units") ||
2612 param == QString("dimensions_angle_units") )
2614 SalomeApp_Application* anApp = getApp();
2620 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2626 GEOM_Displayer aDisplayer( aStudy );
2628 ViewManagerList aVMs;
2629 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2630 ViewManagerList::Iterator anIt = aVMs.begin();
2631 for ( ; anIt != aVMs.end(); ++anIt )
2633 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2639 SALOME_ListIO aVisible;
2640 aViewer->GetVisible( aVisible );
2641 aDisplayer.Redisplay( aVisible, false, aViewer );
2644 aDisplayer.UpdateViewer();
2646 else if ( param.startsWith( "dependency_tree") )
2647 emit SignalDependencyTreeParamChanged( section, param );
2651 LightApp_Displayer* GeometryGUI::displayer()
2654 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2658 void GeometryGUI::setLocalSelectionMode(const int mode)
2660 myLocalSelectionMode = mode;
2663 int GeometryGUI::getLocalSelectionMode() const
2665 return myLocalSelectionMode;
2668 const char gSeparator = '_'; // character used to separate parameter names
2669 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2672 * \brief Store visual parameters
2674 * This method is called just before the study document is saved.
2675 * Store visual parameters in AttributeParameter attribute(s)
2677 void GeometryGUI::storeVisualParameters (int savePoint)
2679 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2680 if ( !appStudy || !appStudy->studyDS() )
2682 _PTR(Study) studyDS = appStudy->studyDS();
2684 // componentName is used for encoding of entries when storing them in IParameters
2685 std::string componentName = myComponentGeom->ComponentDataType();
2686 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2687 //if (!aSComponent) return;
2690 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2691 componentName.c_str(),
2693 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2695 QSet<QString> anEntriesToStoreShared;
2696 QList<SUIT_ViewManager*> lst;
2697 QList<SUIT_ViewManager*>::Iterator it;
2699 // main cycle to store parameters of displayed objects
2701 getApp()->viewManagers(lst);
2702 for (it = lst.begin(); it != lst.end(); it++) {
2703 SUIT_ViewManager* vman = *it;
2704 QString vType = vman->getType();
2705 int aMgrId = vman->getGlobalId();
2706 // saving VTK actors properties
2707 QVector<SUIT_ViewWindow*> views = vman->getViews();
2708 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2709 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
2710 ObjMap::ConstIterator o_it = anObjects.begin();
2711 for (; o_it != anObjects.end(); o_it++) {
2712 const PropMap& aProps = o_it.value();
2714 //Check that object exists in the study
2715 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2716 if ( !obj || !(aProps.count() > 0))
2718 // entry is "encoded" = it does NOT contain component adress, since it is a
2719 // subject to change on next component loading
2721 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2723 _PTR(GenericAttribute) anAttr;
2724 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2727 // remember entry of object to store shared GEOM properties
2728 // (e.g. dimension properties).
2729 if ( vType == OCCViewer_Viewer::Type() )
2731 anEntriesToStoreShared.insert( o_it.key() );
2734 QString param, occParam = vType;
2735 occParam += GEOM::sectionSeparator();
2736 occParam += QString::number(aMgrId);
2737 occParam += GEOM::sectionSeparator();
2739 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2740 param = occParam + GEOM::propertyName( GEOM::Visibility );
2741 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2744 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2745 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2746 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2749 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2750 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2752 val << QString::number(c.redF());
2753 val << QString::number(c.greenF());
2754 val << QString::number(c.blueF());
2755 param = occParam + GEOM::propertyName( GEOM::Color );
2756 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2759 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2760 param = occParam + GEOM::propertyName( GEOM::Texture );
2761 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2764 if (vType == SVTK_Viewer::Type()) {
2765 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2766 param = occParam + GEOM::propertyName( GEOM::Opacity );
2767 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2769 } else if (vType == SOCC_Viewer::Type()) {
2770 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2771 param = occParam + GEOM::propertyName( GEOM::Transparency );
2772 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2775 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2776 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2777 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2781 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2782 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2783 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2786 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2787 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2788 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2791 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
2792 param = occParam + GEOM::propertyName( GEOM::Vertices );
2793 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
2796 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2797 param = occParam + GEOM::propertyName( GEOM::Deflection );
2798 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2801 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2802 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2803 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2804 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2807 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2808 param = occParam + GEOM::propertyName( GEOM::Material );
2809 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2812 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2813 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2814 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2817 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2818 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2819 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2821 } // object iterator
2823 } // for (viewManagers)
2825 // store dimension attributes of objects:
2826 // since the displayed object always persists in property map, we remember the object entries
2827 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
2828 QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
2829 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
2830 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
2832 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
2833 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName);
2835 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
2837 if ( aDimensions.GetNumber() == 0 )
2842 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
2847 * \brief Restore visual parameters
2849 * This method is called after the study document is opened.
2850 * Restore visual parameters from AttributeParameter attribute(s)
2852 void GeometryGUI::restoreVisualParameters (int savePoint)
2854 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2855 if (!appStudy || !appStudy->studyDS())
2857 _PTR(Study) studyDS = appStudy->studyDS();
2859 // componentName is used for encoding of entries when storing them in IParameters
2860 std::string componentName = myComponentGeom->ComponentDataType();
2861 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2862 //if (!aSComponent) return;
2865 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2866 componentName.c_str(),
2868 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2870 std::vector<std::string> entries = ip->getEntries();
2872 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2874 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2875 QString entry (ip->decodeEntry(*entIt).c_str());
2877 // Check that the entry corresponds to a real object in the Study
2878 // as the object may be deleted or modified after the visual state is saved.
2879 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2880 if (!so) continue; //Skip the not existent entry
2882 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2883 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2885 std::vector<std::string>::iterator namesIt = paramNames.begin();
2886 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2888 // actors are stored in a map after displaying of them for
2889 // quicker access in the future: map < viewID to actor >
2890 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2891 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2893 QString viewerTypStr;
2894 QString viewIndexStr;
2896 QVector<PropMap> aListOfMap;
2898 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2900 // visual parameters are stored in strings as follows:
2901 // 1) ViewerType_ViewIndex_ParamName
2902 // 2) ViewerType_ParamName (shared for GEOM module)
2903 // '_' is used as separator and should not be used in viewer type or parameter names.
2904 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2906 bool isShared = lst.size() == 2;
2907 bool isViewer = lst.size() == 3;
2908 if ( !isShared && !isViewer )
2913 // shared visual parameters
2916 QString aParamNameStr( lst[1] );
2917 QString aValuesStr( (*valuesIt).c_str() );
2919 // shared dimension properties are stored as attribute
2920 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
2922 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
2923 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
2929 // per view visual parameters
2930 viewerTypStr = lst[0];
2931 viewIndexStr = lst[1];
2932 QString paramNameStr = lst[2];
2935 viewIndex = viewIndexStr.toUInt(&ok);
2936 if (!ok) // bad conversion of view index to integer
2939 if ((viewIndex + 1) > aListOfMap.count()) {
2940 aListOfMap.resize(viewIndex + 1);
2943 QString val((*valuesIt).c_str());
2944 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
2945 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
2946 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
2947 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
2948 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
2949 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
2950 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
2951 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
2952 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
2953 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
2954 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
2955 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
2956 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
2957 QStringList rgb = val.split(GEOM::subSectionSeparator());
2958 if (rgb.count() == 3) {
2959 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
2960 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
2962 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
2963 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
2964 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
2965 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
2966 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
2967 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
2968 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
2969 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
2970 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
2971 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
2972 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
2973 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
2974 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
2975 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
2976 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
2977 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
2979 } // for names/parameters iterator
2981 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2983 for (int index = 0; index < aListOfMap.count(); index++) {
2984 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
2986 //Get Visibility property of the current PropMap
2987 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
2988 SUIT_ViewManager* vman = lst.at(index);
2989 SUIT_ViewModel* vmodel = vman->getViewModel();
2990 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
2993 } // for entries iterator
2995 // update all VTK and OCC views
2996 QList<SUIT_ViewManager*> lst;
2997 getApp()->viewManagers(lst);
2998 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
2999 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3002 if (vmodel->getType() == SVTK_Viewer::Type()) {
3003 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3004 vtkView->getRenderer()->ResetCameraClippingRange();
3007 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3008 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3009 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3016 void GeometryGUI::onViewAboutToShow()
3018 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3019 QAction* a = action( GEOMOp::OpSwitchVectors );
3020 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3022 a->setEnabled(true);
3023 bool vmode = window->property("VectorsMode").toBool();
3024 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3025 aVerticesAction->setEnabled(true);
3026 vmode = window->property("VerticesMode").toBool();
3027 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3029 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3030 a->setEnabled(false);
3031 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3032 aVerticesAction->setEnabled(false);
3037 \brief Return action by id
3038 \param id identifier of the action
3041 QAction* GeometryGUI::getAction(const int id) {
3046 \brief GEOM module message handler
3048 This method can be re-implemented in the subclasses.
3049 This is a GEOM module message handler.
3051 \param msg the message received.
3053 void GeometryGUI::message(const QString& msg)
3056 QStringList data = msg.split("/");
3057 const int nbStrings = data.count();
3059 if (nbStrings > 0) {
3060 if (data[0] == "modified") {
3062 QString anIOR = nbStrings > 1 ? data[1] : QString();
3064 if ( anIOR.isEmpty() ) {
3068 // Get the geom object.
3069 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3071 // Clear the shape buffer
3072 GeometryGUI::ClearShapeBuffer (anObj);
3078 \brief Clears the shape buffer.
3080 This is a static method. It clears the shape buffer.
3082 \param theObj the object
3084 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3086 if ( CORBA::is_nil( theObj ) )
3089 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3090 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3091 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3093 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3098 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3103 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3107 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3108 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3109 _PTR(GenericAttribute) anAttr;
3110 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3111 _PTR(AttributeIOR) anIOR ( anAttr );
3112 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3113 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3119 \brief Returns the object from IOR.
3121 This is a static method. It returns the object from its IOR.
3123 \param IOR object IOR
3124 \return GEOM object.
3126 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3128 GEOM::GEOM_Object_var geomObj;
3129 if ( !IOR.isEmpty() ) {
3130 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3131 ( IOR.toLatin1().constData() );
3132 if ( !CORBA::is_nil( corbaObj ) )
3133 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3135 return geomObj._retn();
3139 \brief Returns IOR of the object.
3141 This is a static method. It returns the object's IOR.
3143 \param object the GEOM object.
3144 \return object's IOR.
3146 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3149 if ( !CORBA::is_nil( object ) ) {
3150 CORBA::String_var anIOR =
3151 SalomeApp_Application::orb()->object_to_string( object );
3158 \brief Check if this object is can't be renamed in place
3160 This method can be re-implemented in the subclasses.
3161 Return true in case if object isn't reference or component (module root).
3163 \param entry column id
3164 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3166 bool GeometryGUI::renameAllowed( const QString& entry) const {
3168 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3169 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3170 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3172 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3176 Rename object by entry.
3177 \param entry entry of the object
3178 \param name new name of the object
3179 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3181 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3183 bool result = false;
3185 SalomeApp_Application* app =
3186 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3187 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3192 _PTR(Study) aStudy = appStudy->studyDS();
3197 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3199 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3203 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3204 _PTR(GenericAttribute) anAttr;
3206 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3207 _PTR(AttributeName) aName (anAttr);
3209 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3210 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3211 if (!CORBA::is_nil(anObj)) {
3212 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3213 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3221 void GeometryGUI::updateMaterials()
3223 LightApp_Preferences* pref = preferences();
3225 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3226 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3227 if ( !materials.contains( currentMaterial ) )
3228 // user material set as default in the preferences, might be removed
3229 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3231 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3233 setPreferenceProperty( prefItem->id(),
3234 "strings", materials );
3235 prefItem->retrieve();
3241 \brief Check if the module allows "drag" operation of its objects.
3243 Overloaded from LightApp_Module class.
3245 This function is a part of the general drag-n-drop mechanism.
3246 The goal of this function is to check data object passed as a parameter
3247 and decide if it can be dragged or no.
3249 \param what data object being tested for drag operation
3250 \return \c true if module allows dragging of the specified object
3251 \sa isDropAccepted(), dropObjects()
3253 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3255 // we allow dragging object under root and object from folder
3256 int aLevel = what->level();
3257 bool anObjectInFolder = false;
3259 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3261 _PTR(SObject) aSO = dataObj->object();
3263 _PTR(GenericAttribute) anAttr;
3264 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3265 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3266 _PTR(AttributeLocalID) aLocalID( anAttr );
3267 anObjectInFolder = aLocalID->Value() == 999;
3272 return aLevel == 2 || anObjectInFolder;
3276 \brief Check if the module allows "drop" operation on the given object.
3278 Overloaded from LightApp_Module class.
3280 This function is a part of the general drag-n-drop mechanism.
3281 The goal of this function is to check data object passed as a parameter
3282 and decide if it can be used as a target for the "drop" operation.
3283 The processing of the drop operation itself is done in the dropObjects() function.
3285 \param where target data object
3286 \return \c true if module supports dropping on the \a where data object
3287 \sa isDraggable(), dropObjects()
3289 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3291 // we allow dropping into folder and top-level GEOM object
3292 int aLevel = where->level();
3293 bool isFolder = false;
3295 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3297 _PTR(SObject) aSO = dataObj->object();
3299 _PTR(GenericAttribute) anAttr;
3300 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3301 _PTR(AttributeLocalID) aLocalID( anAttr );
3302 isFolder = aLocalID->Value() == 999;
3307 return aLevel == 1 || isFolder;
3311 \brief Complete drag-n-drop operation.
3313 Overloaded from LightApp_Module class.
3315 This function is a part of the general drag-n-drop mechanism.
3316 Its goal is to handle dropping of the objects being dragged according
3317 to the chosen operation (move). The dropping is performed in the
3318 context of the parent data object \a where and the \a row (position in the
3319 children index) at which the data should be dropped. If \a row is equal to -1,
3320 this means that objects are added to the end of the children list.
3322 \param what objects being dropped
3323 \param where target data object
3324 \param row child index at which the drop operation is performed
3325 \param action drag-n-drop operation (Qt::DropAction) - move
3327 \sa isDraggable(), isDropAccepted()
3329 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3330 const int row, Qt::DropAction action )
3332 if (action != Qt::CopyAction && action != Qt::MoveAction)
3333 return; // unsupported action
3335 // get parent object
3336 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3337 if ( !dataObj ) return; // wrong parent
3338 _PTR(SObject) parentObj = dataObj->object();
3340 // Find the current Study and StudyBuilder
3341 _PTR(Study) aStudy = parentObj->GetStudy();
3342 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3343 // collect all parents of the target node
3344 QStringList parentIDs;
3345 _PTR(SObject) parent = parentObj;
3346 while( !parent->IsNull() ) {
3347 parentIDs << parent->GetID().c_str();
3348 parent = aUseCaseBuilder->GetFather(parent);
3351 // collect objects being dropped
3352 GEOM::object_list_var objects = new GEOM::object_list();
3353 objects->length( what.count() );
3355 for ( int i = 0; i < what.count(); i++ ) {
3356 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3357 if ( !dataObj ) continue; // skip wrong objects
3358 _PTR(SObject) sobj = dataObj->object();
3359 // check that dropped object is not a parent of target object
3360 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3361 return; // it's not allowed to move node into it's child
3363 objects[i] = _CAST(SObject, sobj)->GetSObject();
3366 objects->length( count );
3368 // call engine function
3369 GetGeomGen()->Move( objects.in(), // what
3370 _CAST(SObject, parentObj)->GetSObject(), // where
3373 // update Object browser
3374 getApp()->updateObjectBrowser( false );