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
556 case GEOMOp::OpSurfaceFromFace: // MENU ENTITY - SURFACE FROM FACE
558 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
560 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
561 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
562 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
563 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
564 case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR
565 libName = "EntityGUI";
567 case GEOMOp::OpEdge: // MENU BUILD - EDGE
568 case GEOMOp::OpWire: // MENU BUILD - WIRE
569 case GEOMOp::OpFace: // MENU BUILD - FACE
570 case GEOMOp::OpShell: // MENU BUILD - SHELL
571 case GEOMOp::OpSolid: // MENU BUILD - SOLID
572 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
573 libName = "BuildGUI";
575 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
576 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
577 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
578 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
579 libName = "BooleanGUI";
581 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
582 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
583 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
584 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
585 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
586 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
587 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
588 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
589 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
590 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
591 case GEOMOp::OpExtension: // MENU TRANSFORMATION - EXTENSION
592 libName = "TransformationGUI";
594 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
595 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
596 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
597 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
598 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
599 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
600 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
601 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
602 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
603 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
604 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
605 case GEOMOp::OpTransferData: // MENU OPERATION - TRANSFER DATA
606 libName = "OperationGUI";
608 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
609 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
610 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
611 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
612 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
613 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
614 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
615 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
616 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
617 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
618 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
619 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
620 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
621 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
622 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
623 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
624 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
625 libName = "RepairGUI";
627 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
628 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
629 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
630 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
631 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
632 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
633 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
634 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
635 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
636 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
637 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
638 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
639 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
640 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
641 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
642 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
643 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
644 libName = "MeasureGUI";
646 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
647 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
648 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
649 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
650 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
651 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
652 libName = "GroupGUI";
654 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
655 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
656 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
657 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
658 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
659 libName = "BlocksGUI";
661 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
662 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
663 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
664 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
665 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
666 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
667 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
668 //libName = "AdvancedGUI";
671 if (myPluginActions.contains(id)) {
672 libName = myPluginActions[id].first;
674 GEOMPluginGUI* library = 0;
675 if ( !libName.isEmpty() ) {
677 libName = QString( "lib" ) + libName + ".so";
679 libName = libName + ".dll";
681 library = getPluginLibrary( libName );
684 // call method of corresponding GUI library
686 //QString action ("%1");
687 //action = action.arg(id);
689 //if( !theParam.isValid() )
690 library->OnGUIEvent( myPluginActions[id].second, desk );
692 // library->OnGUIEvent( id, desk, theParam);
695 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
697 updateCreationInfo();
703 GEOMGUI* library = 0;
704 if ( !libName.isEmpty() ) {
706 libName = QString( "lib" ) + libName + ".so";
708 libName = libName + ".dll";
710 library = getLibrary( libName );
713 // call method of corresponding GUI library
715 if( !theParam.isValid() )
716 library->OnGUIEvent( id, desk );
718 library->OnGUIEvent( id, desk, theParam);
721 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
723 updateCreationInfo();
726 //=================================================================================
727 // function : GeometryGUI::activateOperation()
729 //=================================================================================
730 bool GeometryGUI::activateOperation( int actionId )
732 OnGUIEvent(actionId);
736 //=================================================================================
737 // function : GeometryGUI::activateOperation()
739 //=================================================================================
740 bool GeometryGUI::activateOperation( const QString& actionId )
744 int id = actionId.toInt(&isOk);
751 //=================================================================================
752 // function : GeometryGUI::activateOperation()
754 //=================================================================================
755 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
759 QString pluginLib = plugin;
760 // TODO: if <plugin> is a plugin name, find plugin library name
761 if (myPluginLibs.contains(plugin))
762 pluginLib = myPluginLibs[plugin];
764 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
765 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
766 const PluginAction& anAction = actionsIter.value();
767 if (anAction.first == pluginLib && anAction.second == actionId) {
768 // activate operation
769 OnGUIEvent(actionsIter.key());
777 //=================================================================================
778 // function : GeometryGUI::OnKeyPress()
779 // purpose : Called when any key is pressed by user [static]
780 //=================================================================================
781 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
783 if ( !application() )
785 foreach ( GEOMGUI* lib, myGUIMap )
786 lib->OnKeyPress( e, application()->desktop(), w );
789 //=================================================================================
790 // function : GeometryGUI::OnMouseMove()
791 // purpose : Manages mouse move events [static]
792 //=================================================================================
793 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
795 if ( !application() )
797 foreach ( GEOMGUI* lib, myGUIMap )
798 lib->OnMouseMove( e, application()->desktop(), w );
801 //=================================================================================
802 // function : GeometryGUI::OnMouseRelease()
803 // purpose : Manages mouse release events [static]
804 //=================================================================================
805 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
807 if ( !application() )
809 foreach ( GEOMGUI* lib, myGUIMap )
810 lib->OnMouseRelease( e, application()->desktop(), w );
813 //=================================================================================
814 // function : GeometryGUI::OnMousePress()
815 // purpose : Manage mouse press events [static]
816 //=================================================================================
817 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
819 if ( !application() )
821 foreach ( GEOMGUI* lib, myGUIMap )
822 lib->OnMousePress( e, application()->desktop(), w );
825 //=======================================================================
826 // function : createGeomAction
828 //=======================================================================
829 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
830 const int accel, const bool toggle, const QString& shortcutAction )
832 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
833 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
834 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
836 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
838 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
839 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
841 application()->desktop(),
843 this, SLOT( OnGUIEvent() ),
847 //=======================================================================
848 // function : createOriginAndBaseVectors
850 //=======================================================================
851 void GeometryGUI::createOriginAndBaseVectors()
853 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
854 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
856 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
860 _PTR(Study) studyDS = appStudy->studyDS();
861 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
862 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
863 if ( !aBasicOperations->_is_nil() ) {
864 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
865 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
866 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
867 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
868 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
869 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
871 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
872 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
873 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
874 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
875 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
877 getApp()->updateObjectBrowser( true );
883 //=======================================================================
884 // function : GeometryGUI::initialize()
885 // purpose : Called when GEOM module is created
886 //=======================================================================
887 void GeometryGUI::initialize( CAM_Application* app )
889 SalomeApp_Module::initialize( app );
891 // ----- create actions --------------
893 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
895 createGeomAction( GEOMOp::OpPoint, "POINT" );
896 createGeomAction( GEOMOp::OpLine, "LINE" );
897 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
898 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
899 createGeomAction( GEOMOp::OpArc, "ARC" );
900 createGeomAction( GEOMOp::OpCurve, "CURVE" );
901 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
902 createGeomAction( GEOMOp::OpVector, "VECTOR" );
903 createGeomAction( GEOMOp::OpPlane, "PLANE" );
904 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
905 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
906 createGeomAction( GEOMOp::OpSurfaceFromFace, "SURFACE_FROM_FACE" );
908 createGeomAction( GEOMOp::OpBox, "BOX" );
909 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
910 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
911 createGeomAction( GEOMOp::OpTorus, "TORUS" );
912 createGeomAction( GEOMOp::OpCone, "CONE" );
913 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
914 createGeomAction( GEOMOp::OpDisk, "DISK" );
916 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
917 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
918 createGeomAction( GEOMOp::OpFilling, "FILLING" );
919 createGeomAction( GEOMOp::OpPipe, "PIPE" );
920 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
922 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
923 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
924 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
925 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
926 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
928 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
929 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
931 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
933 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
934 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
936 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
937 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
938 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
940 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
942 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
943 createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" );
945 createGeomAction( GEOMOp::OpEdge, "EDGE" );
946 createGeomAction( GEOMOp::OpWire, "WIRE" );
947 createGeomAction( GEOMOp::OpFace, "FACE" );
948 createGeomAction( GEOMOp::OpShell, "SHELL" );
949 createGeomAction( GEOMOp::OpSolid, "SOLID" );
950 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
952 createGeomAction( GEOMOp::OpFuse, "FUSE" );
953 createGeomAction( GEOMOp::OpCommon, "COMMON" );
954 createGeomAction( GEOMOp::OpCut, "CUT" );
955 createGeomAction( GEOMOp::OpSection, "SECTION" );
957 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
958 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
959 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
960 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
961 createGeomAction( GEOMOp::OpScale, "SCALE" );
962 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
963 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
964 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
965 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
966 createGeomAction( GEOMOp::OpExtension, "EXTENSION" );
968 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
969 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
970 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
971 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
972 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
973 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
974 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
975 createGeomAction( GEOMOp::OpTransferData, "TRANSFER_DATA" );
976 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
977 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
978 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
979 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
981 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
982 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
983 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
985 createGeomAction( GEOMOp::OpSewing, "SEWING" );
986 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
987 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
988 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
989 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
990 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
991 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
992 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
993 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
994 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
995 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
996 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
997 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
998 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
999 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1000 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1001 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1003 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1004 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1005 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1006 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1007 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1008 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1009 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1010 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1011 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1013 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1014 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1015 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1016 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1017 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1018 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1020 #ifdef _DEBUG_ // PAL16821
1021 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1024 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1025 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1026 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1027 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1028 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1029 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1030 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1031 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1032 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1033 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1034 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1035 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1036 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1037 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1038 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1039 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1040 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1041 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1042 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1043 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1044 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1045 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1046 createGeomAction( GEOMOp::OpHide, "ERASE" );
1048 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1049 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1050 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1051 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1052 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1053 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1054 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1055 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1056 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1057 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1058 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1059 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1060 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1061 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1062 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1063 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1064 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1065 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1066 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1067 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1068 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1069 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1070 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1071 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1072 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1073 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1074 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1075 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1076 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1077 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1079 // Create actions for increase/decrease transparency shortcuts
1080 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1081 "Geometry:Increase transparency");
1082 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1083 "Geometry:Decrease transparency");
1085 // Create actions for increase/decrease number of isolines
1086 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1087 "Geometry:Increase number of isolines");
1088 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1089 "Geometry:Decrease number of isolines");
1091 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1092 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1093 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1094 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1095 //@@ 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 @@//
1097 // ---- create menus --------------------------
1099 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1101 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1102 createMenu( GEOMOp::OpDelete, editId, -1 );
1104 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1106 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1107 createMenu( GEOMOp::OpPoint, basicId, -1 );
1108 createMenu( GEOMOp::OpLine, basicId, -1 );
1109 createMenu( GEOMOp::OpCircle, basicId, -1 );
1110 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1111 createMenu( GEOMOp::OpArc, basicId, -1 );
1112 createMenu( GEOMOp::OpCurve, basicId, -1 );
1113 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1114 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1115 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1116 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1117 createMenu( GEOMOp::OpSurfaceFromFace, basicId, -1 );
1118 createMenu( separator(), basicId, -1 );
1119 createMenu( GEOMOp::OpVector, basicId, -1 );
1120 createMenu( GEOMOp::OpPlane, basicId, -1 );
1121 createMenu( GEOMOp::OpLCS, basicId, -1 );
1122 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1124 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1125 createMenu( GEOMOp::OpBox, primId, -1 );
1126 createMenu( GEOMOp::OpCylinder, primId, -1 );
1127 createMenu( GEOMOp::OpSphere, primId, -1 );
1128 createMenu( GEOMOp::OpTorus, primId, -1 );
1129 createMenu( GEOMOp::OpCone, primId, -1 );
1130 createMenu( GEOMOp::OpRectangle, primId, -1 );
1131 createMenu( GEOMOp::OpDisk, primId, -1 );
1132 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1134 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1135 createMenu( GEOMOp::OpPrism, genId, -1 );
1136 createMenu( GEOMOp::OpRevolution, genId, -1 );
1137 createMenu( GEOMOp::OpFilling, genId, -1 );
1138 createMenu( GEOMOp::OpPipe, genId, -1 );
1139 createMenu( GEOMOp::OpPipePath, genId, -1 );
1141 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1142 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1143 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@//
1145 createMenu( separator(), newEntId, -1 );
1147 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1148 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1149 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1150 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1151 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1152 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1154 createMenu( separator(), newEntId, -1 );
1156 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1157 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1158 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1160 createMenu( separator(), newEntId, -1 );
1162 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1163 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1164 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1165 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1166 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1168 createMenu( separator(), newEntId, -1 );
1170 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1172 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1173 createMenu( GEOMOp::OpEdge, buildId, -1 );
1174 createMenu( GEOMOp::OpWire, buildId, -1 );
1175 createMenu( GEOMOp::OpFace, buildId, -1 );
1176 createMenu( GEOMOp::OpShell, buildId, -1 );
1177 createMenu( GEOMOp::OpSolid, buildId, -1 );
1178 createMenu( GEOMOp::OpCompound, buildId, -1 );
1180 createMenu( separator(), newEntId, -1 );
1182 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1184 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1187 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1189 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1190 createMenu( GEOMOp::OpFuse, boolId, -1 );
1191 createMenu( GEOMOp::OpCommon, boolId, -1 );
1192 createMenu( GEOMOp::OpCut, boolId, -1 );
1193 createMenu( GEOMOp::OpSection, boolId, -1 );
1195 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1196 createMenu( GEOMOp::OpTranslate, transId, -1 );
1197 createMenu( GEOMOp::OpRotate, transId, -1 );
1198 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1199 createMenu( GEOMOp::OpMirror, transId, -1 );
1200 createMenu( GEOMOp::OpScale, transId, -1 );
1201 createMenu( GEOMOp::OpOffset, transId, -1 );
1202 createMenu( GEOMOp::OpProjection, transId, -1 );
1203 createMenu( GEOMOp::OpExtension, transId, -1 );
1204 createMenu( separator(), transId, -1 );
1205 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1206 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1208 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1209 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1210 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1211 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1213 createMenu( separator(), operId, -1 );
1215 createMenu( GEOMOp::OpPartition, operId, -1 );
1216 createMenu( GEOMOp::OpArchimede, operId, -1 );
1217 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1218 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1219 createMenu( GEOMOp::OpTransferData, operId, -1 );
1221 createMenu( separator(), operId, -1 );
1223 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1224 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1225 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1226 createMenu( GEOMOp::OpChamfer, operId, -1 );
1227 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1228 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1229 //createMenu( GEOMOp::OpClipping, operId, -1 );
1231 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1232 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1233 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1234 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1235 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1236 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1237 createMenu( GEOMOp::OpSewing, repairId, -1 );
1238 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1239 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1240 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1241 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1242 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1243 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1244 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1245 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1246 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1247 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1248 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1250 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1251 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1252 createMenu( GEOMOp::OpProperties, measurId, -1 );
1253 createMenu( separator(), measurId, -1 );
1254 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1255 createMenu( GEOMOp::OpInertia, measurId, -1 );
1256 createMenu( GEOMOp::OpNormale, measurId, -1 );
1257 createMenu( separator(), measurId, -1 );
1258 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1259 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1260 createMenu( separator(), measurId, -1 );
1262 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1263 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1264 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1265 createMenu( GEOMOp::OpAngle, dimId, -1 );
1266 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1268 createMenu( separator(), measurId, -1 );
1269 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1270 createMenu( separator(), measurId, -1 );
1271 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1272 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1273 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1274 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1275 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1277 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1278 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1279 createMenu( separator(), toolsId, -1 );
1280 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1283 createMenu( separator(), toolsId, -1 );
1284 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1285 createMenu( separator(), toolsId, -1 );
1287 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1288 createMenu( separator(), viewId, -1 );
1290 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1291 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1292 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1293 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1294 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1295 createMenu( separator(), dispmodeId, -1 );
1296 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1297 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1299 createMenu( separator(), viewId, -1 );
1300 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1301 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1302 createMenu( separator(), viewId, -1 );
1303 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1304 createMenu( separator(), viewId, -1 );
1308 because of these items are accessible through object browser and viewers
1309 we have removed they from main menu
1311 createMenu( GEOMOp::OpShow, viewId, -1 );
1312 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1313 createMenu( GEOMOp::OpHide, viewId, -1 );
1316 // ---- create toolbars --------------------------
1318 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1319 createTool( GEOMOp::OpPoint, basicTbId );
1320 createTool( GEOMOp::OpLine, basicTbId );
1321 createTool( GEOMOp::OpCircle, basicTbId );
1322 createTool( GEOMOp::OpEllipse, basicTbId );
1323 createTool( GEOMOp::OpArc, basicTbId );
1324 createTool( GEOMOp::OpCurve, basicTbId );
1325 createTool( GEOMOp::OpVector, basicTbId );
1326 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1327 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1328 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1329 createTool( GEOMOp::OpIsoline, basicTbId );
1330 createTool( GEOMOp::OpSurfaceFromFace, basicTbId );
1331 createTool( GEOMOp::OpPlane, basicTbId );
1332 createTool( GEOMOp::OpLCS, basicTbId );
1333 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1335 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1336 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1337 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1339 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1340 createTool( GEOMOp::OpBox, primTbId );
1341 createTool( GEOMOp::OpCylinder, primTbId );
1342 createTool( GEOMOp::OpSphere, primTbId );
1343 createTool( GEOMOp::OpTorus, primTbId );
1344 createTool( GEOMOp::OpCone, primTbId );
1345 createTool( GEOMOp::OpRectangle, primTbId );
1346 createTool( GEOMOp::OpDisk, primTbId );
1347 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1349 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1350 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1351 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1353 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1354 createTool( GEOMOp::OpFuse, boolTbId );
1355 createTool( GEOMOp::OpCommon, boolTbId );
1356 createTool( GEOMOp::OpCut, boolTbId );
1357 createTool( GEOMOp::OpSection, boolTbId );
1359 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1360 createTool( GEOMOp::OpPrism, genTbId );
1361 createTool( GEOMOp::OpRevolution, genTbId );
1362 createTool( GEOMOp::OpFilling, genTbId );
1363 createTool( GEOMOp::OpPipe, genTbId );
1364 createTool( GEOMOp::OpPipePath, genTbId );
1366 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1367 createTool( GEOMOp::OpTranslate, transTbId );
1368 createTool( GEOMOp::OpRotate, transTbId );
1369 createTool( GEOMOp::OpChangeLoc, transTbId );
1370 createTool( GEOMOp::OpMirror, transTbId );
1371 createTool( GEOMOp::OpScale, transTbId );
1372 createTool( GEOMOp::OpOffset, transTbId );
1373 createTool( GEOMOp::OpProjection, transTbId );
1374 createTool( GEOMOp::OpExtension, transTbId );
1375 createTool( separator(), transTbId );
1376 createTool( GEOMOp::OpMultiTranslate, transTbId );
1377 createTool( GEOMOp::OpMultiRotate, transTbId );
1379 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1380 createTool( GEOMOp::OpExplode, operTbId );
1381 createTool( GEOMOp::OpPartition, operTbId );
1382 createTool( GEOMOp::OpArchimede, operTbId );
1383 createTool( GEOMOp::OpShapesOnShape, operTbId );
1384 createTool( GEOMOp::OpSharedShapes, operTbId );
1385 createTool( GEOMOp::OpTransferData, operTbId );
1387 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1388 createTool( GEOMOp::OpFillet1d, featTbId );
1389 createTool( GEOMOp::OpFillet2d, featTbId );
1390 createTool( GEOMOp::OpFillet3d, featTbId );
1391 createTool( GEOMOp::OpChamfer, featTbId );
1392 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1393 createTool( GEOMOp::OpExtrudedCut, featTbId );
1395 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1396 createTool( GEOMOp::OpEdge, buildTbId );
1397 createTool( GEOMOp::OpWire, buildTbId );
1398 createTool( GEOMOp::OpFace, buildTbId );
1399 createTool( GEOMOp::OpShell, buildTbId );
1400 createTool( GEOMOp::OpSolid, buildTbId );
1401 createTool( GEOMOp::OpCompound, buildTbId );
1403 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1404 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1405 createTool( GEOMOp::OpProperties, measureTbId );
1406 createTool( GEOMOp::OpCenterMass, measureTbId );
1407 createTool( GEOMOp::OpInertia, measureTbId );
1408 createTool( GEOMOp::OpNormale, measureTbId );
1409 createTool( separator(), measureTbId );
1410 createTool( GEOMOp::OpBoundingBox, measureTbId );
1411 createTool( GEOMOp::OpMinDistance, measureTbId );
1412 createTool( GEOMOp::OpAngle, measureTbId );
1413 createTool( GEOMOp::OpTolerance , measureTbId );
1414 createTool( separator(), measureTbId );
1415 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1416 createTool( GEOMOp::OpFreeFaces, measureTbId );
1417 createTool( separator(), measureTbId );
1418 createTool( GEOMOp::OpWhatIs, measureTbId );
1419 createTool( GEOMOp::OpCheckShape, measureTbId );
1420 createTool( GEOMOp::OpCheckCompound, measureTbId );
1421 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1422 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1424 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1425 createTool( GEOMOp::OpPictureImport, picturesTbId );
1427 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1430 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1431 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1432 //@@ 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 @@//
1434 // ---- create popup menus --------------------------
1436 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1437 QString clientOCC = "(client='OCCViewer')";
1438 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1439 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1441 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1442 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1443 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1444 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1446 QString autoColorPrefix =
1447 "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') and type='Shape' and selcount=1";
1449 QtxPopupMgr* mgr = popupMgr();
1451 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1452 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1453 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1454 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1455 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1456 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1457 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1458 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1460 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1461 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1462 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1463 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1464 mgr->insert( separator(), -1, -1 ); // -----------
1466 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1467 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1468 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1469 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1470 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1471 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1472 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1473 mgr->insert( separator(), -1, -1 ); // -----------
1474 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1475 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1476 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1477 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1478 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1479 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1480 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1481 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1482 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1483 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1484 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1485 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1486 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1487 mgr->insert( separator(), dispmodeId, -1 );
1488 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1489 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1490 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1491 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1492 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1493 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1494 mgr->insert( separator(), -1, -1 ); // -----------
1496 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1497 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1498 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1499 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1500 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1501 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1502 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1503 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1504 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1505 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1507 // material properties
1508 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1509 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1512 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1513 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1515 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1516 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1517 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1519 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1520 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1522 mgr->insert( separator(), -1, -1 ); // -----------
1523 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1524 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1525 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1526 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1527 mgr->insert( separator(), -1, -1 ); // -----------
1529 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1530 onlyComponent = "((type='Component') and selcount=1)",
1531 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1532 types = "'Shape' 'Group' 'FieldStep'";
1534 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1535 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1537 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1538 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1540 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1541 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1543 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1545 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1546 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1547 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1548 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1549 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1550 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1551 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1552 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1553 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1554 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1555 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1556 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1557 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1558 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1559 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1560 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1561 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1562 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1563 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1564 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1565 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1566 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1567 mgr->insert( separator(), selectonlyId, -1);
1568 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1569 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1570 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1571 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1572 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1573 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1574 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1576 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1578 mgr->insert( separator(), -1, -1 ); // -----------
1579 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1580 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1581 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1582 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1584 mgr->insert( separator(), -1, -1 ); // -----------
1585 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1586 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1588 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1589 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1591 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1592 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1594 mgr->insert( separator(), -1, -1 ); // -----------
1595 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1596 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1598 mgr->insert( separator(), -1, -1 ); // -----------
1599 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1600 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1602 mgr->insert( separator(), -1, -1 ); // -----------
1603 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1604 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1606 mgr->insert( separator(), -1, -1 ); // -----------
1607 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1608 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1610 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1612 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1614 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1615 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1616 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1619 // create plugin actions and menus
1623 //=======================================================================
1624 // function : GeometryGUI::addPluginActions()
1626 //=======================================================================
1627 void GeometryGUI::addPluginActions()
1630 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1631 if (!resMgr) return;
1633 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1634 if (!appStudy) return;
1636 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1638 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1640 int id = GEOMOp::OpLastOperationID; // TODO?
1643 GEOMUtils::PluginInfo::const_iterator it;
1644 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1645 // bind action lib and label to its ID for activateOperation() method proper work
1646 GEOMUtils::PluginData pdata = (*it);
1647 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1648 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1649 std::list<GEOMUtils::ActionData>::const_iterator ait;
1650 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1651 GEOMUtils::ActionData adata = (*ait);
1654 if ( !adata.icon.empty() )
1655 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1657 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1658 QString actionName = smenus.last();
1659 actionName = actionName.toUpper().prepend( "MEN_" );
1660 smenus.removeLast();
1662 // path to action in toolbar
1663 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1664 QString actionTool = stools.last();
1665 actionTool = actionTool.toUpper().prepend( "TOP_" );
1666 stools.removeLast();
1668 QString actionStat = adata.statusText.c_str();
1669 actionStat = actionStat.toUpper().prepend( "STB_" );
1671 createAction( id, // ~ adata.label
1672 tr( actionTool.toLatin1().constData() ),
1674 tr( actionName.toLatin1().constData() ),
1675 tr( actionStat.toLatin1().constData() ),
1676 QKeySequence( tr( adata.accel.c_str() ) ),
1677 application()->desktop(),
1679 this, SLOT( OnGUIEvent() ),
1680 QString() /*shortcutAction*/ );
1683 foreach ( QString subMenu, smenus ) {
1684 QStringList subMenuList = subMenu.split( ":" );
1685 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1686 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1687 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1689 createMenu( id, menuId, -1 );
1691 if ( !stools.isEmpty() ) {
1692 QString subTool = stools[0];
1693 subTool = subTool.toUpper().prepend( "TOOL_" );
1694 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1695 createTool(id, toolId);
1698 // add action id to map
1699 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1700 myPluginActions[id] = anAction;
1707 //=======================================================================
1708 // function : GeometryGUI::activateModule()
1709 // purpose : Called when GEOM module is activated
1710 //=======================================================================
1711 bool GeometryGUI::activateModule( SUIT_Study* study )
1713 if ( CORBA::is_nil( myComponentGeom ) )
1716 bool res = SalomeApp_Module::activateModule( study );
1720 setMenuShown( true );
1721 setToolShown( true );
1723 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1724 PyGILState_STATE gstate = PyGILState_Ensure();
1725 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1726 if ( !pluginsmanager ) {
1730 PyObjWrapper result =
1731 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1732 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1733 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1737 PyGILState_Release(gstate);
1738 // end of GEOM plugins loading
1740 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1741 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1743 // Reset actions accelerator keys
1744 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1746 GUIMap::Iterator it;
1747 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1748 it.value()->activate( application()->desktop() );
1750 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1752 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1753 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1754 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1756 if ( !myCreationInfoWdg )
1757 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1758 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1759 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1762 SALOME_ListIO selected;
1763 sm->selectedObjects( selected );
1764 sm->clearSelected();
1766 SUIT_ViewManager* vm;
1767 ViewManagerList OCCViewManagers, VTKViewManagers;
1769 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1770 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1771 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1772 onViewManagerAdded(vm);
1774 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1775 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1776 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1777 onViewManagerAdded(vm);
1779 sm->setSelectedObjects( selected, true ); //NPAL 19674
1781 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1783 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1785 // 0020836 (Basic vectors and origin)
1786 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1787 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1788 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1790 _PTR(Study) studyDS = appStudy->studyDS();
1792 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1793 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1794 createOriginAndBaseVectors();
1802 //=======================================================================
1803 // function : GeometryGUI::deactivateModule()
1804 // purpose : Called when GEOM module is deactivated
1805 //=======================================================================
1806 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1808 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1810 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1812 setMenuShown( false );
1813 setToolShown( false );
1815 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1816 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1818 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1820 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1821 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1822 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1823 myCreationInfoWdg = 0;
1825 EmitSignalCloseAllDialogs();
1827 GUIMap::Iterator it;
1828 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1829 it.value()->deactivate();
1831 // Unset actions accelerator keys
1832 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1834 qDeleteAll(myOCCSelectors);
1835 myOCCSelectors.clear();
1836 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1838 qDeleteAll(myVTKSelectors);
1839 myVTKSelectors.clear();
1840 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1842 return SalomeApp_Module::deactivateModule( study );
1845 //=======================================================================
1846 // function : onWindowActivated()
1847 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1848 //=======================================================================
1849 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1854 const bool ViewOCC = ( win->getViewManager() ? win->getViewManager()->getType() == OCCViewer_Viewer::Type() : false );
1855 //const bool ViewVTK = ( win->getViewManager() ? win->getViewManager()->getType() == SVTK_Viewer::Type() : false );
1857 // disable non-OCC viewframe menu commands
1858 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1859 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1860 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1861 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1862 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1863 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1864 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1866 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1867 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1868 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1869 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1871 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1874 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1876 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1877 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
1878 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1879 if ( myCreationInfoWdg )
1880 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1883 void GeometryGUI::viewManagers( QStringList& lst ) const
1885 lst.append( OCCViewer_Viewer::Type() );
1888 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1890 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1892 qDebug( "connect" );
1893 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1894 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1895 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1896 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1897 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1898 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1899 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1900 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1902 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1903 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1905 // disable OCC selectors
1906 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1907 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1908 while ( itOCCSel.hasNext() )
1909 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1910 sr->setEnabled(true);
1912 else if ( vm->getType() == SVTK_Viewer::Type() )
1914 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1915 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1917 // disable VTK selectors
1918 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1919 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1920 while ( itVTKSel.hasNext() )
1921 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1922 sr->setEnabled(true);
1926 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1928 SUIT_ViewModel* viewer = vm->getViewModel();
1929 if ( vm->getType() == OCCViewer_Viewer::Type() )
1931 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1932 while ( itOCCSel.hasNext() )
1933 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1934 if ( sr->viewer() == viewer )
1936 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1940 if ( vm->getType() == SVTK_Viewer::Type() )
1942 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1943 while ( itVTKSel.hasNext() )
1944 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1945 if ( sr->viewer() == viewer )
1947 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1953 //================================================================================
1955 * \brief Slot called when selection changed. Shows creation info of a selected object
1957 //================================================================================
1959 void GeometryGUI::updateCreationInfo()
1961 if ( myCreationInfoWdg )
1962 myCreationInfoWdg->clear();
1964 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
1965 // if ( !myCreationInfoWdg->isVisible() )
1968 // look for a sole selected GEOM_Object
1969 GEOM::GEOM_BaseObject_var geomObj;
1971 SALOME_ListIO selected;
1972 getApp()->selectionMgr()->selectedObjects( selected );
1974 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
1975 SALOME_ListIteratorOfListIO selIt( selected );
1976 for ( ; selIt.More(); selIt.Next() )
1978 Handle(SALOME_InteractiveObject) io = selIt.Value();
1979 if ( !io->hasEntry() ) continue;
1980 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
1981 if ( !sobj ) continue;
1982 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
1983 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
1984 if ( !gobj->_is_nil() )
1986 if ( !geomObj->_is_nil() )
1987 return; // several GEOM objects selected
1991 if ( geomObj->_is_nil() ) return;
1993 // pass creation info of geomObj to myCreationInfoWdg
1995 if ( myCreationInfoWdg ) {
1997 QString operationName;
1998 myCreationInfoWdg->setOperation( icon, operationName );
2002 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2004 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2005 QString name = info->operationName.in();
2006 if ( !name.isEmpty() ) {
2008 QString plugin_name;
2009 for ( size_t i = 0; i < info->params.length(); ++i ) {
2010 myCreationInfoWdg->addParam( info->params[i].name.in(),
2011 info->params[i].value.in() );
2012 QString value = info->params[i].name.in();
2013 if( value == PLUGIN_NAME ) {
2014 plugin_name = info->params[i].value.in();
2017 QString prefix = plugin_name.isEmpty() ? "GEOM" : plugin_name;
2018 icon = resMgr->loadPixmap( prefix, tr( ("ICO_"+name).toLatin1().constData() ), false );
2019 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2020 if ( operationName.startsWith( "MEN_" ))
2021 operationName = name; // no translation
2022 myCreationInfoWdg->setOperation( icon, operationName );
2031 void GeometryGUI::onAutoBringToFront()
2033 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2034 if( !isAutoBringToFront )
2037 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2038 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2041 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2042 if (!appStudy) return;
2044 GEOM_Displayer displayer( appStudy );
2046 SALOME_View* window = displayer.GetActiveView();
2047 if ( !window ) return;
2049 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2051 SALOME_ListIO selected;
2052 getApp()->selectionMgr()->selectedObjects( selected );
2053 if (!myTopLevelIOList.IsEmpty())
2055 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2057 Handle( SALOME_InteractiveObject ) io = It.Value();
2058 bool isSelected = false;
2059 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2061 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2062 if( io->isSame( sel_io ) )
2065 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2067 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2068 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2073 myTopLevelIOList.Assign(selected);
2074 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2076 Handle( SALOME_InteractiveObject ) io = It.Value();
2077 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2078 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2081 displayer.UpdateViewer();
2082 GeometryGUI::Modified();
2085 void GeometryGUI::updateFieldColorScale()
2087 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2089 GEOM_Displayer aDisplayer( aStudy );
2090 aDisplayer.UpdateColorScale();
2094 QString GeometryGUI::engineIOR() const
2096 if ( !CORBA::is_nil( GetGeomGen() ) )
2097 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2101 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2102 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2104 theWidth = theHeight = 0;
2106 Handle(TColStd_HArray1OfByte) aTexture;
2109 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2110 aTexture = aTextureMap[ theId ];
2111 if ( aTexture.IsNull() ) {
2112 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2113 if ( !aInsOp->_is_nil() ) {
2114 CORBA::Long aWidth, aHeight;
2115 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2116 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2118 theHeight = aHeight;
2120 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2122 for (int i = 0; i < aStream->length(); i++)
2123 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2124 aTextureMap[ theId ] = aTexture;
2132 LightApp_Selection* GeometryGUI::createSelection() const
2134 return new GEOMGUI_Selection();
2137 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2139 SalomeApp_Module::contextMenuPopup( client, menu, title );
2141 getApp()->selectionMgr()->selectedObjects( lst );
2143 //Add submenu for predefined materials
2144 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2145 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2146 QtxPopupMgr* mgr = popupMgr();
2147 //get parrent for submenu
2148 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2150 QMenu* oldMenu = act->menu() ;
2155 QMenu* matMenu = new QMenu();
2156 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2158 //Get current material model for the object
2160 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2161 if ( anApp && anApp->activeViewManager() ) {
2162 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2164 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2167 QString curModel = "";
2168 if ( v.canConvert<QString>() ) curModel = v.toString();
2169 // get list of all predefined materials
2170 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2172 foreach ( QString material, materials )
2174 QAction* menAct = matMenu->addAction( material );
2175 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2176 signalMapper->setMapping( menAct, material );
2177 menAct->setCheckable( true );
2178 // Set checked if this material is current
2179 Material_Model aModel;
2180 aModel.fromResources( material );
2181 if ( !found && aModel.toProperties() == curModel ) {
2182 menAct->setChecked( true );
2186 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2187 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2188 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2189 this, SLOT( OnSetMaterial( const QString & ) ) );
2190 act->setMenu( matMenu );
2194 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2195 Handle(SALOME_InteractiveObject) io = lst.First();
2196 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2197 _PTR(Study) study = appStudy->studyDS();
2198 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2200 QString aName = QString( obj->GetName().c_str() );
2201 aName.remove( QRegExp("\\s+$") );
2207 void GeometryGUI::OnSetMaterial(const QString& theName)
2209 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2213 void GeometryGUI::createPreferences()
2215 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2217 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2218 setPreferenceProperty( genGroup, "columns", 2 );
2220 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2221 LightApp_Preferences::Selector,
2222 "Geometry", "display_mode" );
2224 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2225 LightApp_Preferences::Color, "Geometry", "shading_color" );
2227 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2228 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2230 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2231 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2233 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2234 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2236 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2237 LightApp_Preferences::Color, "Geometry", "line_color" );
2239 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2240 LightApp_Preferences::Color, "Geometry", "point_color" );
2242 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2243 LightApp_Preferences::Color, "Geometry", "isos_color" );
2245 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2246 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2248 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2249 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2251 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2252 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2254 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2255 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2257 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2258 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2260 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2261 LightApp_Preferences::Selector,
2262 "Geometry", "material" );
2264 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2265 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2271 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2272 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2274 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2275 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2277 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2278 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2280 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2281 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2283 for (int i = 0; i < nb; i++) {
2284 setPreferenceProperty( wd[i], "min", 1 );
2285 setPreferenceProperty( wd[i], "max", 5 );
2288 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2289 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2291 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2292 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2294 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2295 setPreferenceProperty( aDimGroupId, "columns", 2 );
2297 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2298 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2300 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2301 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2303 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2304 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2306 int aDimFontHeightId = addPreference( tr( "PREF_DIMENSIONS_FONT_HEIGHT" ), aDimGroupId,
2307 LightApp_Preferences::DblSpin, "Geometry", "dimensions_font_height" );
2309 setPreferenceProperty( aDimFontHeightId, "min", 1e-9 );
2310 setPreferenceProperty( aDimFontHeightId, "max", 1e+9 );
2311 setPreferenceProperty( aDimFontHeightId, "precision", 9 );
2313 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2314 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2316 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2317 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2318 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2320 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2321 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2323 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2324 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2326 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2327 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2329 QStringList aListOfLengthUnits;
2330 aListOfLengthUnits << "m";
2331 aListOfLengthUnits << "cm";
2332 aListOfLengthUnits << "mm";
2333 aListOfLengthUnits << "in.";
2334 aListOfLengthUnits << "ft.";
2336 QStringList aListOfAngUnits;
2337 aListOfAngUnits << "rad";
2338 aListOfAngUnits << "deg";
2340 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2341 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2343 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2344 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2346 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2347 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2348 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2350 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2351 setPreferenceProperty( isoGroup, "columns", 2 );
2352 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2353 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2354 setPreferenceProperty( isoU, "min", 0 );
2355 setPreferenceProperty( isoU, "max", 100000 );
2356 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2357 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2358 setPreferenceProperty( isoV, "min", 0 );
2359 setPreferenceProperty( isoV, "max", 100000 );
2361 // Quantities with individual precision settings
2362 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2363 setPreferenceProperty( precGroup, "columns", 2 );
2365 const int nbQuantities = 8;
2366 int prec[nbQuantities], ii = 0;
2367 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2368 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2369 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2370 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2371 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2372 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2373 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2374 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2375 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2376 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2377 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2378 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2379 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2380 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2381 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2382 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2384 // Set property for precision value for spinboxes
2385 for ( ii = 0; ii < nbQuantities; ii++ ){
2386 setPreferenceProperty( prec[ii], "min", -14 );
2387 setPreferenceProperty( prec[ii], "max", 14 );
2388 setPreferenceProperty( prec[ii], "precision", 2 );
2391 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2392 setPreferenceProperty( VertexGroup, "columns", 2 );
2394 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2395 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2397 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2398 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2400 // Set property for default display mode
2401 QStringList aModesList;
2402 aModesList.append( tr("MEN_WIREFRAME") );
2403 aModesList.append( tr("MEN_SHADING") );
2404 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2405 aModesList.append( tr("MEN_TEXTURE") );
2407 QList<QVariant> anIndexesList;
2408 anIndexesList.append(0);
2409 anIndexesList.append(1);
2410 anIndexesList.append(2);
2411 anIndexesList.append(3);
2413 setPreferenceProperty( dispmode, "strings", aModesList );
2414 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2416 // Set property for top level display mode
2417 QStringList aTopModesList;
2418 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2419 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2420 aTopModesList.append( tr("MEN_WIREFRAME") );
2421 aTopModesList.append( tr("MEN_SHADING") );
2422 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2424 QList<QVariant> aTopIndexesList;
2425 aTopIndexesList.append(0);
2426 aTopIndexesList.append(1);
2427 aTopIndexesList.append(2);
2428 aTopIndexesList.append(3);
2429 aTopIndexesList.append(4);
2431 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2432 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2434 // Set property for step value for spinboxes
2435 setPreferenceProperty( step, "min", 1 );
2436 setPreferenceProperty( step, "max", 10000 );
2437 setPreferenceProperty( step, "precision", 3 );
2439 // Set property for trandparency value for spinboxes
2440 setPreferenceProperty( transparency, "min", 0 );
2441 setPreferenceProperty( transparency, "max", 100 );
2443 // Set property for deflection value for spinboxes
2444 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2445 setPreferenceProperty( defl, "max", 1.0 );
2446 setPreferenceProperty( defl, "step", 1.0e-04 );
2447 setPreferenceProperty( defl, "precision", 6 );
2449 // Set property for default material
2450 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2452 // Set property vertex marker type
2453 QList<QVariant> aMarkerTypeIndicesList;
2454 QList<QVariant> aMarkerTypeIconsList;
2456 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2457 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2458 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2459 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2460 aMarkerTypeIndicesList << (i-1);
2461 aMarkerTypeIconsList << pixmap;
2464 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2465 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2467 // Set property for vertex marker scale
2468 QList<QVariant> aMarkerScaleIndicesList;
2469 QStringList aMarkerScaleValuesList;
2471 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2472 aMarkerScaleIndicesList << iii;
2473 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2476 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2477 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2479 // Scalar bar for field step presentation
2480 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2481 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2483 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2484 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2485 setPreferenceProperty( sbXPosition, "min", 0 );
2486 setPreferenceProperty( sbXPosition, "max", 1 );
2487 setPreferenceProperty( sbXPosition, "step", 0.05 );
2489 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2490 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2491 setPreferenceProperty( sbYPosition, "min", 0 );
2492 setPreferenceProperty( sbYPosition, "max", 1 );
2493 setPreferenceProperty( sbYPosition, "step", 0.05 );
2495 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2496 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2497 setPreferenceProperty( sbWidth, "min", 0 );
2498 setPreferenceProperty( sbWidth, "max", 1 );
2499 setPreferenceProperty( sbWidth, "step", 0.05 );
2501 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2502 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2503 setPreferenceProperty( sbHeight, "min", 0 );
2504 setPreferenceProperty( sbHeight, "max", 1 );
2505 setPreferenceProperty( sbHeight, "step", 0.05 );
2507 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2508 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2509 setPreferenceProperty( sbTextHeight, "min", 6 );
2510 setPreferenceProperty( sbTextHeight, "max", 24 );
2511 setPreferenceProperty( sbTextHeight, "step", 1 );
2513 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2514 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2515 setPreferenceProperty( sbNbIntervals, "min", 2 );
2516 setPreferenceProperty( sbNbIntervals, "max", 64 );
2517 setPreferenceProperty( sbNbIntervals, "step", 1 );
2519 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2520 setPreferenceProperty( originGroup, "columns", 2 );
2522 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2523 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2524 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2525 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2527 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2528 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2530 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2531 setPreferenceProperty( operationsGroup, "columns", 2 );
2533 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2534 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2536 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2538 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2540 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2541 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2543 QStringList aHierarchyTypeList;
2544 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2545 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2546 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2548 QList<QVariant> aHierarchyTypeIndexesList;
2549 aHierarchyTypeIndexesList.append(0);
2550 aHierarchyTypeIndexesList.append(1);
2551 aHierarchyTypeIndexesList.append(2);
2553 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2554 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2556 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2557 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2559 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2561 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2562 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2564 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2565 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2566 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2567 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2568 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2569 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2570 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2571 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2573 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2574 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2575 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2576 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2577 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2578 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2585 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2587 if (section == "Geometry") {
2588 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2589 if (param == QString("SettingsGeomStep")) {
2590 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2591 EmitSignalDefaultStepValueChanged(spin_step);
2593 else if (param == QString("toplevel_color")) {
2594 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2595 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2597 else if (param == QString("toplevel_dm")) {
2598 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2600 else if (param == QString("scalar_bar_x_position") ||
2601 param == QString("scalar_bar_y_position") ||
2602 param == QString("scalar_bar_width") ||
2603 param == QString("scalar_bar_height") ||
2604 param == QString("scalar_bar_text_height") ||
2605 param == QString("scalar_bar_nb_intervals")) {
2606 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2608 GEOM_Displayer aDisplayer( aStudy );
2609 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2610 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2613 else if ( param == QString("dimensions_color") ||
2614 param == QString("dimensions_line_width") ||
2615 param == QString("dimensions_font_height") ||
2616 param == QString("dimensions_arrow_length") ||
2617 param == QString("dimensions_show_units") ||
2618 param == QString("dimensions_length_units") ||
2619 param == QString("dimensions_angle_units") )
2621 SalomeApp_Application* anApp = getApp();
2627 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2633 GEOM_Displayer aDisplayer( aStudy );
2635 ViewManagerList aVMs;
2636 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2637 ViewManagerList::Iterator anIt = aVMs.begin();
2638 for ( ; anIt != aVMs.end(); ++anIt )
2640 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2646 SALOME_ListIO aVisible;
2647 aViewer->GetVisible( aVisible );
2648 aDisplayer.Redisplay( aVisible, false, aViewer );
2651 aDisplayer.UpdateViewer();
2653 else if ( param.startsWith( "dependency_tree") )
2654 emit SignalDependencyTreeParamChanged( section, param );
2658 LightApp_Displayer* GeometryGUI::displayer()
2661 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2665 void GeometryGUI::setLocalSelectionMode(const int mode)
2667 myLocalSelectionMode = mode;
2670 int GeometryGUI::getLocalSelectionMode() const
2672 return myLocalSelectionMode;
2675 const char gSeparator = '_'; // character used to separate parameter names
2676 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2679 * \brief Store visual parameters
2681 * This method is called just before the study document is saved.
2682 * Store visual parameters in AttributeParameter attribute(s)
2684 void GeometryGUI::storeVisualParameters (int savePoint)
2686 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2687 if ( !appStudy || !appStudy->studyDS() )
2689 _PTR(Study) studyDS = appStudy->studyDS();
2691 // componentName is used for encoding of entries when storing them in IParameters
2692 std::string componentName = myComponentGeom->ComponentDataType();
2693 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2694 //if (!aSComponent) return;
2697 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2698 componentName.c_str(),
2700 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2702 QSet<QString> anEntriesToStoreShared;
2703 QList<SUIT_ViewManager*> lst;
2704 QList<SUIT_ViewManager*>::Iterator it;
2706 // main cycle to store parameters of displayed objects
2708 getApp()->viewManagers(lst);
2709 for (it = lst.begin(); it != lst.end(); it++) {
2710 SUIT_ViewManager* vman = *it;
2711 QString vType = vman->getType();
2712 int aMgrId = vman->getGlobalId();
2713 // saving VTK actors properties
2714 QVector<SUIT_ViewWindow*> views = vman->getViews();
2715 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2716 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
2717 ObjMap::ConstIterator o_it = anObjects.begin();
2718 for (; o_it != anObjects.end(); o_it++) {
2719 const PropMap& aProps = o_it.value();
2721 //Check that object exists in the study
2722 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2723 if ( !obj || !(aProps.count() > 0))
2725 // entry is "encoded" = it does NOT contain component adress, since it is a
2726 // subject to change on next component loading
2728 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2730 _PTR(GenericAttribute) anAttr;
2731 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2734 // remember entry of object to store shared GEOM properties
2735 // (e.g. dimension properties).
2736 if ( vType == OCCViewer_Viewer::Type() )
2738 anEntriesToStoreShared.insert( o_it.key() );
2741 QString param, occParam = vType;
2742 occParam += GEOM::sectionSeparator();
2743 occParam += QString::number(aMgrId);
2744 occParam += GEOM::sectionSeparator();
2746 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2747 param = occParam + GEOM::propertyName( GEOM::Visibility );
2748 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2751 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2752 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2753 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2756 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2757 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2759 val << QString::number(c.redF());
2760 val << QString::number(c.greenF());
2761 val << QString::number(c.blueF());
2762 param = occParam + GEOM::propertyName( GEOM::Color );
2763 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2766 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2767 param = occParam + GEOM::propertyName( GEOM::Texture );
2768 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2771 if (vType == SVTK_Viewer::Type()) {
2772 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2773 param = occParam + GEOM::propertyName( GEOM::Opacity );
2774 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2776 } else if (vType == SOCC_Viewer::Type()) {
2777 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2778 param = occParam + GEOM::propertyName( GEOM::Transparency );
2779 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2782 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2783 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2784 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2788 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2789 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2790 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2793 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2794 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2795 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2798 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
2799 param = occParam + GEOM::propertyName( GEOM::Vertices );
2800 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
2803 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2804 param = occParam + GEOM::propertyName( GEOM::Deflection );
2805 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2808 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2809 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2810 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2811 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2814 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2815 param = occParam + GEOM::propertyName( GEOM::Material );
2816 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2819 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2820 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2821 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2824 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2825 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2826 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2828 } // object iterator
2830 } // for (viewManagers)
2832 // store dimension attributes of objects:
2833 // since the displayed object always persists in property map, we remember the object entries
2834 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
2835 QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
2836 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
2837 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
2839 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
2840 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName);
2842 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
2844 if ( aDimensions.GetNumber() == 0 )
2849 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
2854 * \brief Restore visual parameters
2856 * This method is called after the study document is opened.
2857 * Restore visual parameters from AttributeParameter attribute(s)
2859 void GeometryGUI::restoreVisualParameters (int savePoint)
2861 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2862 if (!appStudy || !appStudy->studyDS())
2864 _PTR(Study) studyDS = appStudy->studyDS();
2866 // componentName is used for encoding of entries when storing them in IParameters
2867 std::string componentName = myComponentGeom->ComponentDataType();
2868 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2869 //if (!aSComponent) return;
2872 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2873 componentName.c_str(),
2875 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2877 std::vector<std::string> entries = ip->getEntries();
2879 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2881 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2882 QString entry (ip->decodeEntry(*entIt).c_str());
2884 // Check that the entry corresponds to a real object in the Study
2885 // as the object may be deleted or modified after the visual state is saved.
2886 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2887 if (!so) continue; //Skip the not existent entry
2889 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2890 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2892 std::vector<std::string>::iterator namesIt = paramNames.begin();
2893 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2895 // actors are stored in a map after displaying of them for
2896 // quicker access in the future: map < viewID to actor >
2897 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2898 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2900 QString viewerTypStr;
2901 QString viewIndexStr;
2903 QVector<PropMap> aListOfMap;
2905 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2907 // visual parameters are stored in strings as follows:
2908 // 1) ViewerType_ViewIndex_ParamName
2909 // 2) ViewerType_ParamName (shared for GEOM module)
2910 // '_' is used as separator and should not be used in viewer type or parameter names.
2911 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2913 bool isShared = lst.size() == 2;
2914 bool isViewer = lst.size() == 3;
2915 if ( !isShared && !isViewer )
2920 // shared visual parameters
2923 QString aParamNameStr( lst[1] );
2924 QString aValuesStr( (*valuesIt).c_str() );
2926 // shared dimension properties are stored as attribute
2927 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
2929 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
2930 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
2936 // per view visual parameters
2937 viewerTypStr = lst[0];
2938 viewIndexStr = lst[1];
2939 QString paramNameStr = lst[2];
2942 viewIndex = viewIndexStr.toUInt(&ok);
2943 if (!ok) // bad conversion of view index to integer
2946 if ((viewIndex + 1) > aListOfMap.count()) {
2947 aListOfMap.resize(viewIndex + 1);
2950 QString val((*valuesIt).c_str());
2951 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
2952 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
2953 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
2954 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
2955 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
2956 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
2957 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
2958 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
2959 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
2960 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
2961 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
2962 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
2963 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
2964 QStringList rgb = val.split(GEOM::subSectionSeparator());
2965 if (rgb.count() == 3) {
2966 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
2967 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
2969 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
2970 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
2971 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
2972 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
2973 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
2974 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
2975 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
2976 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
2977 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
2978 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
2979 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
2980 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
2981 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
2982 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
2983 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
2984 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
2986 } // for names/parameters iterator
2988 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2990 for (int index = 0; index < aListOfMap.count(); index++) {
2991 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
2993 //Get Visibility property of the current PropMap
2994 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
2995 SUIT_ViewManager* vman = lst.at(index);
2996 SUIT_ViewModel* vmodel = vman->getViewModel();
2997 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
3000 } // for entries iterator
3002 // update all VTK and OCC views
3003 QList<SUIT_ViewManager*> lst;
3004 getApp()->viewManagers(lst);
3005 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3006 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3009 if (vmodel->getType() == SVTK_Viewer::Type()) {
3010 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3011 vtkView->getRenderer()->ResetCameraClippingRange();
3014 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3015 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3016 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3023 void GeometryGUI::onViewAboutToShow()
3025 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3026 QAction* a = action( GEOMOp::OpSwitchVectors );
3027 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3029 a->setEnabled(true);
3030 bool vmode = window->property("VectorsMode").toBool();
3031 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3032 aVerticesAction->setEnabled(true);
3033 vmode = window->property("VerticesMode").toBool();
3034 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3036 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3037 a->setEnabled(false);
3038 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3039 aVerticesAction->setEnabled(false);
3044 \brief Return action by id
3045 \param id identifier of the action
3048 QAction* GeometryGUI::getAction(const int id) {
3053 \brief GEOM module message handler
3055 This method can be re-implemented in the subclasses.
3056 This is a GEOM module message handler.
3058 \param msg the message received.
3060 void GeometryGUI::message(const QString& msg)
3063 QStringList data = msg.split("/");
3064 const int nbStrings = data.count();
3066 if (nbStrings > 0) {
3067 if (data[0] == "modified") {
3069 QString anIOR = nbStrings > 1 ? data[1] : QString();
3071 if ( anIOR.isEmpty() ) {
3075 // Get the geom object.
3076 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3078 // Clear the shape buffer
3079 GeometryGUI::ClearShapeBuffer (anObj);
3085 \brief Clears the shape buffer.
3087 This is a static method. It clears the shape buffer.
3089 \param theObj the object
3091 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3093 if ( CORBA::is_nil( theObj ) )
3096 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3097 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3098 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3100 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3105 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3110 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3114 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3115 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3116 _PTR(GenericAttribute) anAttr;
3117 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3118 _PTR(AttributeIOR) anIOR ( anAttr );
3119 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3120 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3126 \brief Returns the object from IOR.
3128 This is a static method. It returns the object from its IOR.
3130 \param IOR object IOR
3131 \return GEOM object.
3133 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3135 GEOM::GEOM_Object_var geomObj;
3136 if ( !IOR.isEmpty() ) {
3137 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3138 ( IOR.toLatin1().constData() );
3139 if ( !CORBA::is_nil( corbaObj ) )
3140 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3142 return geomObj._retn();
3146 \brief Returns IOR of the object.
3148 This is a static method. It returns the object's IOR.
3150 \param object the GEOM object.
3151 \return object's IOR.
3153 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3156 if ( !CORBA::is_nil( object ) ) {
3157 CORBA::String_var anIOR =
3158 SalomeApp_Application::orb()->object_to_string( object );
3165 \brief Check if this object is can't be renamed in place
3167 This method can be re-implemented in the subclasses.
3168 Return true in case if object isn't reference or component (module root).
3170 \param entry column id
3171 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3173 bool GeometryGUI::renameAllowed( const QString& entry) const {
3175 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3176 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3177 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3179 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3183 Rename object by entry.
3184 \param entry entry of the object
3185 \param name new name of the object
3186 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3188 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3190 bool result = false;
3192 SalomeApp_Application* app =
3193 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3194 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3199 _PTR(Study) aStudy = appStudy->studyDS();
3204 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3206 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3210 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3211 _PTR(GenericAttribute) anAttr;
3213 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3214 _PTR(AttributeName) aName (anAttr);
3216 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3217 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3218 if (!CORBA::is_nil(anObj)) {
3219 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3220 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3228 void GeometryGUI::updateMaterials()
3230 LightApp_Preferences* pref = preferences();
3232 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3233 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3234 if ( !materials.contains( currentMaterial ) )
3235 // user material set as default in the preferences, might be removed
3236 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3238 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3240 setPreferenceProperty( prefItem->id(),
3241 "strings", materials );
3242 prefItem->retrieve();
3248 \brief Check if the module allows "drag" operation of its objects.
3250 Overloaded from LightApp_Module class.
3252 This function is a part of the general drag-n-drop mechanism.
3253 The goal of this function is to check data object passed as a parameter
3254 and decide if it can be dragged or no.
3256 \param what data object being tested for drag operation
3257 \return \c true if module allows dragging of the specified object
3258 \sa isDropAccepted(), dropObjects()
3260 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3262 // we allow dragging object under root and object from folder
3263 int aLevel = what->level();
3264 bool anObjectInFolder = false;
3266 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3268 _PTR(SObject) aSO = dataObj->object();
3270 _PTR(GenericAttribute) anAttr;
3271 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3272 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3273 _PTR(AttributeLocalID) aLocalID( anAttr );
3274 anObjectInFolder = aLocalID->Value() == 999;
3279 return aLevel == 2 || anObjectInFolder;
3283 \brief Check if the module allows "drop" operation on the given object.
3285 Overloaded from LightApp_Module class.
3287 This function is a part of the general drag-n-drop mechanism.
3288 The goal of this function is to check data object passed as a parameter
3289 and decide if it can be used as a target for the "drop" operation.
3290 The processing of the drop operation itself is done in the dropObjects() function.
3292 \param where target data object
3293 \return \c true if module supports dropping on the \a where data object
3294 \sa isDraggable(), dropObjects()
3296 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3298 // we allow dropping into folder and top-level GEOM object
3299 int aLevel = where->level();
3300 bool isFolder = false;
3302 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3304 _PTR(SObject) aSO = dataObj->object();
3306 _PTR(GenericAttribute) anAttr;
3307 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3308 _PTR(AttributeLocalID) aLocalID( anAttr );
3309 isFolder = aLocalID->Value() == 999;
3314 return aLevel == 1 || isFolder;
3318 \brief Complete drag-n-drop operation.
3320 Overloaded from LightApp_Module class.
3322 This function is a part of the general drag-n-drop mechanism.
3323 Its goal is to handle dropping of the objects being dragged according
3324 to the chosen operation (move). The dropping is performed in the
3325 context of the parent data object \a where and the \a row (position in the
3326 children index) at which the data should be dropped. If \a row is equal to -1,
3327 this means that objects are added to the end of the children list.
3329 \param what objects being dropped
3330 \param where target data object
3331 \param row child index at which the drop operation is performed
3332 \param action drag-n-drop operation (Qt::DropAction) - move
3334 \sa isDraggable(), isDropAccepted()
3336 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3337 const int row, Qt::DropAction action )
3339 if (action != Qt::CopyAction && action != Qt::MoveAction)
3340 return; // unsupported action
3342 // get parent object
3343 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3344 if ( !dataObj ) return; // wrong parent
3345 _PTR(SObject) parentObj = dataObj->object();
3347 // Find the current Study and StudyBuilder
3348 _PTR(Study) aStudy = parentObj->GetStudy();
3349 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3350 // collect all parents of the target node
3351 QStringList parentIDs;
3352 _PTR(SObject) parent = parentObj;
3353 while( !parent->IsNull() ) {
3354 parentIDs << parent->GetID().c_str();
3355 parent = aUseCaseBuilder->GetFather(parent);
3358 // collect objects being dropped
3359 GEOM::object_list_var objects = new GEOM::object_list();
3360 objects->length( what.count() );
3362 for ( int i = 0; i < what.count(); i++ ) {
3363 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3364 if ( !dataObj ) continue; // skip wrong objects
3365 _PTR(SObject) sobj = dataObj->object();
3366 // check that dropped object is not a parent of target object
3367 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3368 return; // it's not allowed to move node into it's child
3370 objects[i] = _CAST(SObject, sobj)->GetSObject();
3373 objects->length( count );
3375 // call engine function
3376 GetGeomGen()->Move( objects.in(), // what
3377 _CAST(SObject, parentObj)->GetSObject(), // where
3380 // update Object browser
3381 getApp()->updateObjectBrowser( false );