1 // Copyright (C) 2007-2015 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_ListOfInteractive.hxx>
102 #include <AIS_ListIteratorOfListOfInteractive.hxx>
103 #include <Prs3d_Drawer.hxx>
104 #include <Prs3d_IsoAspect.hxx>
105 #include <Aspect_TypeOfMarker.hxx>
106 #include <OSD_SharedLibrary.hxx>
107 #include <NCollection_DataMap.hxx>
109 #include <TColStd_HArray1OfByte.hxx>
111 #include <utilities.h>
113 #include <vtkCamera.h>
114 #include <vtkRenderer.h>
116 #include <Standard_Failure.hxx>
117 #include <Standard_ErrorHandler.hxx>
119 #include "GEOM_version.h"
120 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
123 Standard_EXPORT CAM_Module* createModule() {
124 return new GeometryGUI();
127 Standard_EXPORT char* getModuleVersion() {
128 return (char*)GEOM_VERSION_STR;
132 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
134 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
136 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
138 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
139 if (CORBA::is_nil(myComponentGeom))
141 return GeometryGUI::myComponentGeom;
144 bool GeometryGUI::InitGeomGen()
147 if ( CORBA::is_nil( myComponentGeom ) ) return false;
151 //=======================================================================
152 // function : ClientSObjectToObject
154 //=======================================================================
155 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
157 _PTR(GenericAttribute) anAttr;
158 CORBA::Object_var anObj;
160 std::string aValue = theSObject->GetIOR();
161 if (strcmp(aValue.c_str(), "") != 0) {
162 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
163 anObj = anORB->string_to_object(aValue.c_str());
166 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
168 return anObj._retn();
171 //=======================================================================
172 // function : ClientStudyToStudy
174 //=======================================================================
175 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
177 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
178 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
179 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
180 int aStudyID = theStudy->StudyId();
181 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
182 return aDSStudy._retn();
185 void GeometryGUI::Modified (bool theIsUpdateActions)
187 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
188 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
189 appStudy->Modified();
190 if ( theIsUpdateActions )
191 app->updateActions();
196 //=======================================================================
197 // function : GeometryGUI::GeometryGUI()
198 // purpose : Constructor
199 //=======================================================================
200 GeometryGUI::GeometryGUI() :
201 SalomeApp_Module( "GEOM" ),
204 if ( CORBA::is_nil( myComponentGeom ) )
206 Engines::EngineComponent_var comp =
207 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
208 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
211 myActiveDialogBox = 0;
213 gp_Pnt origin = gp_Pnt(0., 0., 0.);
214 gp_Dir direction = gp_Dir(0., 0., 1.);
215 myWorkingPlane = gp_Ax3(origin, direction);
218 myLocalSelectionMode = GEOM_ALLOBJECTS;
220 myCreationInfoWdg = 0;
222 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
224 Q_INIT_RESOURCE( GEOMGUI );
227 //=======================================================================
228 // function : GeometryGUI::~GeometryGUI()
229 // purpose : Destructor
230 //=======================================================================
231 GeometryGUI::~GeometryGUI()
233 while (!myOCCSelectors.isEmpty())
234 delete myOCCSelectors.takeFirst();
236 while (!myVTKSelectors.isEmpty())
237 delete myVTKSelectors.takeFirst();
239 qDeleteAll(myGUIMap);
242 //=======================================================================
243 // function : GeometryGUI::getLibrary()
244 // purpose : get or load GUI library by name [ internal ]
245 //=======================================================================
246 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
247 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
249 if ( !myGUIMap.contains( libraryName ) ) {
250 // try to load library if it is not loaded yet
252 QString dirs = getenv( "LD_LIBRARY_PATH" );
255 QString dirs = getenv( "PATH" );
258 if ( !dirs.isEmpty() ) {
259 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
260 QListIterator<QString> it( dirList ); it.toBack();
261 while ( it.hasPrevious() ) {
262 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
264 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
265 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
267 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
268 continue; // continue search further
270 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
271 if ( osdF != NULL ) {
272 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
273 GEOMGUI* libGUI = (*func)( this );
275 myGUIMap[ libraryName ] = libGUI;
276 break; // found and loaded!
283 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
286 //=======================================================================
287 // function : GeometryGUI::getPluginLibrary()
288 // purpose : get or load GUI Plugin library by name [ internal ]
289 //=======================================================================
290 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
291 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
293 if ( !myGUIMap.contains( libraryName ) ) {
294 // try to load library if it is not loaded yet
296 QString dirs = getenv( "LD_LIBRARY_PATH" );
299 QString dirs = getenv( "PATH" );
302 if ( !dirs.isEmpty() ) {
303 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
304 QListIterator<QString> it( dirList ); it.toBack();
305 while ( it.hasPrevious() ) {
306 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
308 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
309 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
311 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
312 continue; // continue search further
314 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
315 if ( osdF != NULL ) {
316 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
317 GEOMPluginGUI* libGUI = (*func)( this );
319 myGUIMap[ libraryName ] = libGUI;
320 break; // found and loaded!
327 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
330 //=======================================================================
331 // function : GeometryGUI::ActiveWorkingPlane()
332 // purpose : Activate Working Plane View
333 //=======================================================================
334 void GeometryGUI::ActiveWorkingPlane()
336 gp_Dir DZ = myWorkingPlane.Direction();
337 gp_Dir DY = myWorkingPlane.YDirection();
339 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
340 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
341 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
344 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
346 Handle(V3d_View) view3d = vw->getViewPort()->getView();
348 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
349 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
353 else if ( ViewVTK ) {
354 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
356 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
358 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
359 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
360 camera->SetFocalPoint(0,0,0);
367 //=======================================================================
368 // function : GeometryGUI::SetActiveDialogBox()
369 // purpose : Set active dialog box
370 //=======================================================================
371 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
373 myActiveDialogBox = (QDialog*)aDlg;
376 //=======================================================================
377 // function : GeometryGUI::EmitSignalDeactivateDialog()
378 // purpose : Emit a signal to deactivate the active dialog Box
379 //=======================================================================
380 void GeometryGUI::EmitSignalDeactivateDialog()
382 emit SignalDeactivateActiveDialog();
385 //=======================================================================
386 // function : GeometryGUI::EmitSignalCloseAllDialogs()
387 // purpose : Emit a signal to close all non modal dialogs box
388 //=======================================================================
389 void GeometryGUI::EmitSignalCloseAllDialogs()
391 emit SignalCloseAllDialogs();
394 //=======================================================================
395 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
396 // purpose : Emit a signal to inform that default real spin box step has
398 //=======================================================================
399 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
401 emit SignalDefaultStepValueChanged(newVal);
404 //=======================================================================
405 // function : GeometryGUI::OnGUIEvent()
406 // purpose : common slot for all menu/toolbar actions
407 //=======================================================================
408 void GeometryGUI::OnGUIEvent()
410 const QObject* obj = sender();
411 if ( !obj || !obj->inherits( "QAction" ) )
413 int id = actionId((QAction*)obj);
418 //=======================================================================
419 // function : GeometryGUI::OnGUIEvent()
420 // purpose : manage all events on GUI [static]
421 //=======================================================================
422 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
424 SUIT_Application* anApp = application();
426 SUIT_Desktop* desk = anApp->desktop();
428 // check type of the active viewframe
429 SUIT_ViewWindow* window = desk->activeWindow();
430 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
431 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
432 bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() );
433 // if current viewframe is not of OCC and not of VTK type - return immediately
434 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
435 QList<int> NotViewerDependentCommands;
436 NotViewerDependentCommands << GEOMOp::OpDelete
438 << GEOMOp::OpShowOnly
439 << GEOMOp::OpShowOnlyChildren
440 << GEOMOp::OpDiscloseChildren
441 << GEOMOp::OpConcealChildren
442 << GEOMOp::OpUnpublishObject
443 << GEOMOp::OpPublishObject
444 << GEOMOp::OpPointMarker
445 << GEOMOp::OpCreateFolder
446 << GEOMOp::OpSortChildren;
447 if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) {
448 // activate OCC viewer
449 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
452 // fix for IPAL9103, point 2
453 if ( CORBA::is_nil( GetGeomGen() ) ) {
454 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
459 // find corresponding GUI library
461 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
462 createOriginAndBaseVectors(); // internal operation
464 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
465 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
466 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
467 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
468 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
469 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
470 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
471 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
472 case GEOMOp::OpDelete: // MENU EDIT - DELETE
473 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
474 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
475 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
476 case GEOMOp::OpColor: // POPUP MENU - COLOR
477 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
478 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
479 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
480 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
481 case GEOMOp::OpIsos: // POPUP MENU - ISOS
482 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
483 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
484 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
485 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
486 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
487 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
488 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
489 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
490 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
491 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
492 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
493 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
494 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
495 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
496 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
497 case GEOMOp::OpClsBringToFront: //
498 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
499 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
500 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
501 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
502 libName = "GEOMToolsGUI";
504 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
505 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
506 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
507 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
508 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
509 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
510 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
511 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
512 case GEOMOp::OpHide: // MENU VIEW - ERASE
513 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
514 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
515 case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE
516 case GEOMOp::OpSwitchName: // 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 case GEOMOp::OpShowName: // POPUP MENU - SHOW NAME
524 libName = "DisplayGUI";
526 case GEOMOp::OpPoint: // MENU BASIC - POINT
527 case GEOMOp::OpLine: // MENU BASIC - LINE
528 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
529 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
530 case GEOMOp::OpArc: // MENU BASIC - ARC
531 case GEOMOp::OpVector: // MENU BASIC - VECTOR
532 case GEOMOp::OpPlane: // MENU BASIC - PLANE
533 case GEOMOp::OpCurve: // MENU BASIC - CURVE
534 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
535 libName = "BasicGUI";
537 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
538 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
539 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
540 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
541 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
542 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
543 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
544 libName = "PrimitiveGUI";
546 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
547 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
548 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
549 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
550 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
551 case GEOMOp::OpThickness: // MENU GENERATION - THICKNESS
552 libName = "GenerationGUI";
554 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
555 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
556 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
557 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
558 case GEOMOp::OpSurfaceFromFace: // MENU ENTITY - SURFACE FROM FACE
560 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
562 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
563 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
564 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
565 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
566 case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR
567 libName = "EntityGUI";
569 case GEOMOp::OpEdge: // MENU BUILD - EDGE
570 case GEOMOp::OpWire: // MENU BUILD - WIRE
571 case GEOMOp::OpFace: // MENU BUILD - FACE
572 case GEOMOp::OpShell: // MENU BUILD - SHELL
573 case GEOMOp::OpSolid: // MENU BUILD - SOLID
574 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
575 libName = "BuildGUI";
577 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
578 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
579 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
580 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
581 libName = "BooleanGUI";
583 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
584 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
585 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
586 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
587 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
588 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
589 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
590 case GEOMOp::OpProjOnCyl: // MENU TRANSFORMATION - PROJECTION ON CYLINDER
591 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
592 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
593 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
594 case GEOMOp::OpExtension: // MENU TRANSFORMATION - EXTENSION
595 libName = "TransformationGUI";
597 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
598 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
599 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
600 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
601 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
602 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
603 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
604 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
605 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
606 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
607 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
608 case GEOMOp::OpTransferData: // MENU OPERATION - TRANSFER DATA
609 libName = "OperationGUI";
611 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
612 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
613 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
614 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
615 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
616 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
617 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
618 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
619 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
620 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
621 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
622 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
623 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
624 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
625 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
626 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
627 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
628 case GEOMOp::OpInspectObj: // MENU REPAIR - INSPECT OBJECT
629 libName = "RepairGUI";
631 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
632 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
633 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
634 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
635 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
636 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
637 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
638 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
639 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
640 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
641 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
642 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
643 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
644 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
645 case GEOMOp::OpFastCheckInters: // MENU MEASURE - FAST CHECK INTERSECTIONS
646 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
647 case GEOMOp::OpShapeStatistics: // MENU MEASURE - SHAPE STATISTICS
648 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
649 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
650 libName = "MeasureGUI";
652 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
653 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
654 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
655 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
656 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
657 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
658 libName = "GroupGUI";
660 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
661 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
662 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
663 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
664 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
665 libName = "BlocksGUI";
667 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
668 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
669 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
670 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
671 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
672 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
673 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
674 //libName = "AdvancedGUI";
677 if (myPluginActions.contains(id)) {
678 libName = myPluginActions[id].first;
680 GEOMPluginGUI* library = 0;
681 if ( !libName.isEmpty() ) {
683 libName = QString( "lib" ) + libName + ".so";
685 libName = libName + ".dll";
687 library = getPluginLibrary( libName );
690 // call method of corresponding GUI library
692 //QString action ("%1");
693 //action = action.arg(id);
695 //if( !theParam.isValid() )
696 library->OnGUIEvent( myPluginActions[id].second, desk );
698 // library->OnGUIEvent( id, desk, theParam);
701 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
703 updateCreationInfo();
709 GEOMGUI* library = 0;
710 if ( !libName.isEmpty() ) {
712 libName = QString( "lib" ) + libName + ".so";
714 libName = libName + ".dll";
716 library = getLibrary( libName );
719 // call method of corresponding GUI library
721 if( !theParam.isValid() )
722 library->OnGUIEvent( id, desk );
724 library->OnGUIEvent( id, desk, theParam);
727 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
729 updateCreationInfo();
732 //=================================================================================
733 // function : GeometryGUI::activateOperation()
735 //=================================================================================
736 bool GeometryGUI::activateOperation( int actionId )
738 OnGUIEvent(actionId);
742 //=================================================================================
743 // function : GeometryGUI::activateOperation()
745 //=================================================================================
746 bool GeometryGUI::activateOperation( const QString& actionId )
750 int id = actionId.toInt(&isOk);
757 //=================================================================================
758 // function : GeometryGUI::activateOperation()
760 //=================================================================================
761 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
765 QString pluginLib = plugin;
766 // TODO: if <plugin> is a plugin name, find plugin library name
767 if (myPluginLibs.contains(plugin))
768 pluginLib = myPluginLibs[plugin];
770 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
771 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
772 const PluginAction& anAction = actionsIter.value();
773 if (anAction.first == pluginLib && anAction.second == actionId) {
774 // activate operation
775 OnGUIEvent(actionsIter.key());
783 //=================================================================================
784 // function : GeometryGUI::OnKeyPress()
785 // purpose : Called when any key is pressed by user [static]
786 //=================================================================================
787 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
789 if ( !application() )
791 foreach ( GEOMGUI* lib, myGUIMap )
792 lib->OnKeyPress( e, application()->desktop(), w );
795 //=================================================================================
796 // function : GeometryGUI::OnMouseMove()
797 // purpose : Manages mouse move events [static]
798 //=================================================================================
799 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
801 if ( !application() )
803 foreach ( GEOMGUI* lib, myGUIMap )
804 lib->OnMouseMove( e, application()->desktop(), w );
807 //=================================================================================
808 // function : GeometryGUI::OnMouseRelease()
809 // purpose : Manages mouse release events [static]
810 //=================================================================================
811 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
813 if ( !application() )
815 foreach ( GEOMGUI* lib, myGUIMap )
816 lib->OnMouseRelease( e, application()->desktop(), w );
819 //=================================================================================
820 // function : GeometryGUI::OnMousePress()
821 // purpose : Manage mouse press events [static]
822 //=================================================================================
823 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
825 if ( !application() )
827 foreach ( GEOMGUI* lib, myGUIMap )
828 lib->OnMousePress( e, application()->desktop(), w );
831 //=======================================================================
832 // function : createGeomAction
834 //=======================================================================
835 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
836 const int accel, const bool toggle, const QString& shortcutAction )
838 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
839 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
840 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
842 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
844 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
845 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
847 application()->desktop(),
849 this, SLOT( OnGUIEvent() ),
853 //=======================================================================
854 // function : createOriginAndBaseVectors
856 //=======================================================================
857 void GeometryGUI::createOriginAndBaseVectors()
859 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
860 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
862 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
866 _PTR(Study) studyDS = appStudy->studyDS();
867 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
868 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
869 if ( !aBasicOperations->_is_nil() ) {
870 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
871 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
872 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
873 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
874 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
875 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
877 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
878 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
879 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
880 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
881 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
883 getApp()->updateObjectBrowser( true );
889 //=======================================================================
890 // function : GeometryGUI::initialize()
891 // purpose : Called when GEOM module is created
892 //=======================================================================
893 void GeometryGUI::initialize( CAM_Application* app )
895 SalomeApp_Module::initialize( app );
897 // ----- create actions --------------
899 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
901 createGeomAction( GEOMOp::OpPoint, "POINT" );
902 createGeomAction( GEOMOp::OpLine, "LINE" );
903 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
904 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
905 createGeomAction( GEOMOp::OpArc, "ARC" );
906 createGeomAction( GEOMOp::OpCurve, "CURVE" );
907 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
908 createGeomAction( GEOMOp::OpVector, "VECTOR" );
909 createGeomAction( GEOMOp::OpPlane, "PLANE" );
910 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
911 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
912 createGeomAction( GEOMOp::OpSurfaceFromFace, "SURFACE_FROM_FACE" );
914 createGeomAction( GEOMOp::OpBox, "BOX" );
915 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
916 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
917 createGeomAction( GEOMOp::OpTorus, "TORUS" );
918 createGeomAction( GEOMOp::OpCone, "CONE" );
919 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
920 createGeomAction( GEOMOp::OpDisk, "DISK" );
922 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
923 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
924 createGeomAction( GEOMOp::OpFilling, "FILLING" );
925 createGeomAction( GEOMOp::OpPipe, "PIPE" );
926 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
927 createGeomAction( GEOMOp::OpThickness, "THICKNESS" );
929 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
930 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
931 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
932 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
933 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
935 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
936 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
938 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
940 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
941 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
943 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
944 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
945 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
947 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
949 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
950 createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" );
952 createGeomAction( GEOMOp::OpEdge, "EDGE" );
953 createGeomAction( GEOMOp::OpWire, "WIRE" );
954 createGeomAction( GEOMOp::OpFace, "FACE" );
955 createGeomAction( GEOMOp::OpShell, "SHELL" );
956 createGeomAction( GEOMOp::OpSolid, "SOLID" );
957 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
959 createGeomAction( GEOMOp::OpFuse, "FUSE" );
960 createGeomAction( GEOMOp::OpCommon, "COMMON" );
961 createGeomAction( GEOMOp::OpCut, "CUT" );
962 createGeomAction( GEOMOp::OpSection, "SECTION" );
964 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
965 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
966 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
967 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
968 createGeomAction( GEOMOp::OpScale, "SCALE" );
969 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
970 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
971 createGeomAction( GEOMOp::OpProjOnCyl, "PROJ_ON_CYL" );
972 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
973 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
974 createGeomAction( GEOMOp::OpExtension, "EXTENSION" );
976 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
977 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
978 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
979 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
980 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
981 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
982 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
983 createGeomAction( GEOMOp::OpTransferData, "TRANSFER_DATA" );
984 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
985 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
986 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
987 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
989 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
990 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
991 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
993 createGeomAction( GEOMOp::OpSewing, "SEWING" );
994 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
995 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
996 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
997 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
998 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
999 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
1000 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
1001 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
1002 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
1003 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
1004 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
1005 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1006 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1007 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1008 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1009 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1010 createGeomAction( GEOMOp::OpInspectObj, "INSPECT_OBJECT" );
1012 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1013 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1014 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1015 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1016 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1017 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1018 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1019 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1020 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1022 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1023 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1024 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1025 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1026 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1027 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1028 createGeomAction( GEOMOp::OpFastCheckInters, "FAST_CHECK_INTERSECTIONS" );
1029 createGeomAction( GEOMOp::OpShapeStatistics, "SHAPE_STATISTICS" );
1031 #ifdef _DEBUG_ // PAL16821
1032 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1035 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1036 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1037 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1038 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1039 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1040 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1041 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1042 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1043 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1044 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1045 createGeomAction( GEOMOp::OpSwitchName, "NAME_MODE");
1046 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1047 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1048 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1049 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1050 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1051 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1052 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1053 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1054 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1055 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1056 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1057 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1058 createGeomAction( GEOMOp::OpHide, "ERASE" );
1060 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1061 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1062 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1063 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1064 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1065 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1066 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1067 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1068 createGeomAction( GEOMOp::OpShowName, "POP_SHOW_NAME", "", 0, true );
1069 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1070 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1071 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1072 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1073 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1074 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1075 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1076 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1077 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1078 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1079 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1080 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1081 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1082 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1083 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1084 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1085 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1086 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1087 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1088 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1089 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1090 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1092 // Create actions for increase/decrease transparency shortcuts
1093 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1094 "Geometry:Increase transparency");
1095 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1096 "Geometry:Decrease transparency");
1098 // Create actions for increase/decrease number of isolines
1099 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1100 "Geometry:Increase number of isolines");
1101 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1102 "Geometry:Decrease number of isolines");
1104 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1105 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1106 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1107 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1108 //@@ 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 @@//
1110 // ---- create menus --------------------------
1112 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1114 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1115 createMenu( GEOMOp::OpDelete, editId, -1 );
1117 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1119 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1120 createMenu( GEOMOp::OpPoint, basicId, -1 );
1121 createMenu( GEOMOp::OpLine, basicId, -1 );
1122 createMenu( GEOMOp::OpCircle, basicId, -1 );
1123 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1124 createMenu( GEOMOp::OpArc, basicId, -1 );
1125 createMenu( GEOMOp::OpCurve, basicId, -1 );
1126 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1127 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1128 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1129 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1130 createMenu( GEOMOp::OpSurfaceFromFace, basicId, -1 );
1131 createMenu( separator(), basicId, -1 );
1132 createMenu( GEOMOp::OpVector, basicId, -1 );
1133 createMenu( GEOMOp::OpPlane, basicId, -1 );
1134 createMenu( GEOMOp::OpLCS, basicId, -1 );
1135 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1137 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1138 createMenu( GEOMOp::OpBox, primId, -1 );
1139 createMenu( GEOMOp::OpCylinder, primId, -1 );
1140 createMenu( GEOMOp::OpSphere, primId, -1 );
1141 createMenu( GEOMOp::OpTorus, primId, -1 );
1142 createMenu( GEOMOp::OpCone, primId, -1 );
1143 createMenu( GEOMOp::OpRectangle, primId, -1 );
1144 createMenu( GEOMOp::OpDisk, primId, -1 );
1145 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1147 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1148 createMenu( GEOMOp::OpPrism, genId, -1 );
1149 createMenu( GEOMOp::OpRevolution, genId, -1 );
1150 createMenu( GEOMOp::OpFilling, genId, -1 );
1151 createMenu( GEOMOp::OpPipe, genId, -1 );
1152 createMenu( GEOMOp::OpPipePath, genId, -1 );
1153 createMenu( GEOMOp::OpThickness, genId, -1 );
1155 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1156 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1157 //@@ 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 @@//
1159 createMenu( separator(), newEntId, -1 );
1161 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1162 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1163 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1164 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1165 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1166 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1168 createMenu( separator(), newEntId, -1 );
1170 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1171 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1172 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1174 createMenu( separator(), newEntId, -1 );
1176 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1177 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1178 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1179 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1180 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1182 createMenu( separator(), newEntId, -1 );
1184 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1186 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1187 createMenu( GEOMOp::OpEdge, buildId, -1 );
1188 createMenu( GEOMOp::OpWire, buildId, -1 );
1189 createMenu( GEOMOp::OpFace, buildId, -1 );
1190 createMenu( GEOMOp::OpShell, buildId, -1 );
1191 createMenu( GEOMOp::OpSolid, buildId, -1 );
1192 createMenu( GEOMOp::OpCompound, buildId, -1 );
1194 createMenu( separator(), newEntId, -1 );
1196 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1198 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1201 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1203 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1204 createMenu( GEOMOp::OpFuse, boolId, -1 );
1205 createMenu( GEOMOp::OpCommon, boolId, -1 );
1206 createMenu( GEOMOp::OpCut, boolId, -1 );
1207 createMenu( GEOMOp::OpSection, boolId, -1 );
1209 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1210 createMenu( GEOMOp::OpTranslate, transId, -1 );
1211 createMenu( GEOMOp::OpRotate, transId, -1 );
1212 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1213 createMenu( GEOMOp::OpMirror, transId, -1 );
1214 createMenu( GEOMOp::OpScale, transId, -1 );
1215 createMenu( GEOMOp::OpOffset, transId, -1 );
1216 createMenu( GEOMOp::OpProjection, transId, -1 );
1217 createMenu( GEOMOp::OpExtension, transId, -1 );
1218 createMenu( GEOMOp::OpProjOnCyl, transId, -1 );
1219 createMenu( separator(), transId, -1 );
1220 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1221 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1223 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1224 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1225 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1226 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1228 createMenu( separator(), operId, -1 );
1230 createMenu( GEOMOp::OpPartition, operId, -1 );
1231 createMenu( GEOMOp::OpArchimede, operId, -1 );
1232 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1233 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1234 createMenu( GEOMOp::OpTransferData, operId, -1 );
1236 createMenu( separator(), operId, -1 );
1238 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1239 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1240 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1241 createMenu( GEOMOp::OpChamfer, operId, -1 );
1242 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1243 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1244 //createMenu( GEOMOp::OpClipping, operId, -1 );
1246 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1247 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1248 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1249 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1250 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1251 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1252 createMenu( GEOMOp::OpSewing, repairId, -1 );
1253 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1254 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1255 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1256 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1257 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1258 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1259 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1260 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1261 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1262 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1263 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1265 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1266 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1267 createMenu( GEOMOp::OpProperties, measurId, -1 );
1268 createMenu( separator(), measurId, -1 );
1269 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1270 createMenu( GEOMOp::OpInertia, measurId, -1 );
1271 createMenu( GEOMOp::OpNormale, measurId, -1 );
1272 createMenu( separator(), measurId, -1 );
1273 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1274 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1275 createMenu( separator(), measurId, -1 );
1277 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1278 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1279 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1280 createMenu( GEOMOp::OpAngle, dimId, -1 );
1281 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1283 createMenu( separator(), measurId, -1 );
1284 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1285 createMenu( separator(), measurId, -1 );
1286 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1287 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1288 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1289 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1290 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1291 createMenu( GEOMOp::OpFastCheckInters, measurId, -1 );
1292 createMenu( GEOMOp::OpInspectObj, measurId, -1 );
1293 createMenu( GEOMOp::OpShapeStatistics, measurId, -1 );
1295 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1296 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1297 createMenu( separator(), toolsId, -1 );
1298 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1301 createMenu( separator(), toolsId, -1 );
1302 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1303 createMenu( separator(), toolsId, -1 );
1305 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1306 createMenu( separator(), viewId, -1 );
1308 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1309 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1310 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1311 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1312 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1313 createMenu( separator(), dispmodeId, -1 );
1314 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1315 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1316 createMenu( GEOMOp::OpSwitchName, dispmodeId, -1 );
1318 createMenu( separator(), viewId, -1 );
1319 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1320 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1321 createMenu( separator(), viewId, -1 );
1322 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1323 createMenu( separator(), viewId, -1 );
1327 because of these items are accessible through object browser and viewers
1328 we have removed they from main menu
1330 createMenu( GEOMOp::OpShow, viewId, -1 );
1331 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1332 createMenu( GEOMOp::OpHide, viewId, -1 );
1335 // ---- create toolbars --------------------------
1337 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1338 createTool( GEOMOp::OpPoint, basicTbId );
1339 createTool( GEOMOp::OpLine, basicTbId );
1340 createTool( GEOMOp::OpCircle, basicTbId );
1341 createTool( GEOMOp::OpEllipse, basicTbId );
1342 createTool( GEOMOp::OpArc, basicTbId );
1343 createTool( GEOMOp::OpCurve, basicTbId );
1344 createTool( GEOMOp::OpVector, basicTbId );
1345 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1346 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1347 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1348 createTool( GEOMOp::OpIsoline, basicTbId );
1349 createTool( GEOMOp::OpSurfaceFromFace, basicTbId );
1350 createTool( GEOMOp::OpPlane, basicTbId );
1351 createTool( GEOMOp::OpLCS, basicTbId );
1352 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1354 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1355 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1356 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1358 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1359 createTool( GEOMOp::OpBox, primTbId );
1360 createTool( GEOMOp::OpCylinder, primTbId );
1361 createTool( GEOMOp::OpSphere, primTbId );
1362 createTool( GEOMOp::OpTorus, primTbId );
1363 createTool( GEOMOp::OpCone, primTbId );
1364 createTool( GEOMOp::OpRectangle, primTbId );
1365 createTool( GEOMOp::OpDisk, primTbId );
1366 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1368 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1369 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1370 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1372 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1373 createTool( GEOMOp::OpFuse, boolTbId );
1374 createTool( GEOMOp::OpCommon, boolTbId );
1375 createTool( GEOMOp::OpCut, boolTbId );
1376 createTool( GEOMOp::OpSection, boolTbId );
1378 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1379 createTool( GEOMOp::OpPrism, genTbId );
1380 createTool( GEOMOp::OpRevolution, genTbId );
1381 createTool( GEOMOp::OpFilling, genTbId );
1382 createTool( GEOMOp::OpPipe, genTbId );
1383 createTool( GEOMOp::OpPipePath, genTbId );
1384 createTool( GEOMOp::OpThickness, genTbId );
1386 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1387 createTool( GEOMOp::OpTranslate, transTbId );
1388 createTool( GEOMOp::OpRotate, transTbId );
1389 createTool( GEOMOp::OpChangeLoc, transTbId );
1390 createTool( GEOMOp::OpMirror, transTbId );
1391 createTool( GEOMOp::OpScale, transTbId );
1392 createTool( GEOMOp::OpOffset, transTbId );
1393 createTool( GEOMOp::OpProjection, transTbId );
1394 createTool( GEOMOp::OpExtension, transTbId );
1395 createTool( GEOMOp::OpProjOnCyl, transTbId );
1396 createTool( separator(), transTbId );
1397 createTool( GEOMOp::OpMultiTranslate, transTbId );
1398 createTool( GEOMOp::OpMultiRotate, transTbId );
1400 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1401 createTool( GEOMOp::OpExplode, operTbId );
1402 createTool( GEOMOp::OpPartition, operTbId );
1403 createTool( GEOMOp::OpArchimede, operTbId );
1404 createTool( GEOMOp::OpShapesOnShape, operTbId );
1405 createTool( GEOMOp::OpSharedShapes, operTbId );
1406 createTool( GEOMOp::OpTransferData, operTbId );
1408 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1409 createTool( GEOMOp::OpFillet1d, featTbId );
1410 createTool( GEOMOp::OpFillet2d, featTbId );
1411 createTool( GEOMOp::OpFillet3d, featTbId );
1412 createTool( GEOMOp::OpChamfer, featTbId );
1413 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1414 createTool( GEOMOp::OpExtrudedCut, featTbId );
1416 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1417 createTool( GEOMOp::OpEdge, buildTbId );
1418 createTool( GEOMOp::OpWire, buildTbId );
1419 createTool( GEOMOp::OpFace, buildTbId );
1420 createTool( GEOMOp::OpShell, buildTbId );
1421 createTool( GEOMOp::OpSolid, buildTbId );
1422 createTool( GEOMOp::OpCompound, buildTbId );
1424 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1425 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1426 createTool( GEOMOp::OpProperties, measureTbId );
1427 createTool( GEOMOp::OpCenterMass, measureTbId );
1428 createTool( GEOMOp::OpInertia, measureTbId );
1429 createTool( GEOMOp::OpNormale, measureTbId );
1430 createTool( separator(), measureTbId );
1431 createTool( GEOMOp::OpBoundingBox, measureTbId );
1432 createTool( GEOMOp::OpMinDistance, measureTbId );
1433 createTool( GEOMOp::OpAngle, measureTbId );
1434 createTool( GEOMOp::OpTolerance , measureTbId );
1435 createTool( separator(), measureTbId );
1436 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1437 createTool( GEOMOp::OpFreeFaces, measureTbId );
1438 createTool( separator(), measureTbId );
1439 createTool( GEOMOp::OpWhatIs, measureTbId );
1440 createTool( GEOMOp::OpCheckShape, measureTbId );
1441 createTool( GEOMOp::OpCheckCompound, measureTbId );
1442 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1443 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1444 createTool( GEOMOp::OpFastCheckInters, measureTbId );
1446 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1447 createTool( GEOMOp::OpPictureImport, picturesTbId );
1449 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1452 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1453 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1454 //@@ 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 @@//
1456 // ---- create popup menus --------------------------
1458 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1459 QString clientOCC = "(client='OCCViewer')";
1460 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1461 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1463 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1464 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1465 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1466 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1468 QString autoColorPrefix =
1469 "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') and type='Shape' and selcount=1";
1471 QtxPopupMgr* mgr = popupMgr();
1473 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1474 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1475 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1476 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1477 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1478 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1479 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1480 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1482 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1483 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1484 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1485 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1486 mgr->insert( separator(), -1, -1 ); // -----------
1488 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1489 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1490 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1491 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1492 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1493 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1494 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1495 mgr->insert( separator(), -1, -1 ); // -----------
1496 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1497 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1498 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1499 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1500 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1501 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1502 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1503 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1504 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1505 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1506 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1507 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1508 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1509 mgr->insert( separator(), dispmodeId, -1 );
1510 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1511 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1512 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1513 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1514 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1515 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1516 mgr->insert( action( GEOMOp::OpShowName ), dispmodeId, -1 ); // show name
1517 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1518 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK + " and isNameMode", QtxPopupMgr::ToggleRule );
1519 mgr->insert( separator(), -1, -1 ); // -----------
1521 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1522 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1523 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1524 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1525 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1526 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1527 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1528 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1529 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1530 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1532 // material properties
1533 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1534 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1537 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1538 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1540 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1541 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1542 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1544 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1545 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1547 mgr->insert( separator(), -1, -1 ); // -----------
1548 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1549 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1550 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1551 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1552 mgr->insert( separator(), -1, -1 ); // -----------
1554 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1555 onlyComponent = "((type='Component') and selcount=1)",
1556 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1557 types = "'Shape' 'Group' 'FieldStep'";
1559 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1560 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1562 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1563 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1565 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1566 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1568 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1570 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1571 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1572 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1573 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1574 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1575 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1576 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1577 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1578 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1579 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1580 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1581 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1582 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1583 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1584 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1585 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1586 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1587 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1588 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1589 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1590 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1591 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1592 mgr->insert( separator(), selectonlyId, -1);
1593 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1594 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1595 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1596 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1597 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1598 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1599 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1601 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1603 mgr->insert( separator(), -1, -1 ); // -----------
1604 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1605 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1606 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1607 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1609 mgr->insert( separator(), -1, -1 ); // -----------
1610 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1611 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1613 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1614 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1616 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1617 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1619 mgr->insert( separator(), -1, -1 ); // -----------
1620 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1621 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1623 mgr->insert( separator(), -1, -1 ); // -----------
1624 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1625 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1627 mgr->insert( separator(), -1, -1 ); // -----------
1628 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1629 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1631 mgr->insert( separator(), -1, -1 ); // -----------
1632 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1633 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1635 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1637 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1639 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1640 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1641 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1644 // create plugin actions and menus
1648 //=======================================================================
1649 // function : GeometryGUI::addPluginActions()
1651 //=======================================================================
1652 void GeometryGUI::addPluginActions()
1655 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1656 if (!resMgr) return;
1658 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1659 if (!appStudy) return;
1661 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1663 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1665 int id = GEOMOp::OpLastOperationID; // TODO?
1668 GEOMUtils::PluginInfo::const_iterator it;
1669 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1670 // bind action lib and label to its ID for activateOperation() method proper work
1671 GEOMUtils::PluginData pdata = (*it);
1672 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1673 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1674 std::list<GEOMUtils::ActionData>::const_iterator ait;
1675 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1676 GEOMUtils::ActionData adata = (*ait);
1679 if ( !adata.icon.empty() )
1680 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1682 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1683 QString actionName = smenus.last();
1684 actionName = actionName.toUpper().prepend( "MEN_" );
1685 smenus.removeLast();
1687 // path to action in toolbar
1688 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1689 QString actionTool = stools.last();
1690 actionTool = actionTool.toUpper().prepend( "TOP_" );
1691 stools.removeLast();
1693 QString actionStat = adata.statusText.c_str();
1694 actionStat = actionStat.toUpper().prepend( "STB_" );
1696 createAction( id, // ~ adata.label
1697 tr( actionTool.toLatin1().constData() ),
1699 tr( actionName.toLatin1().constData() ),
1700 tr( actionStat.toLatin1().constData() ),
1701 QKeySequence( tr( adata.accel.c_str() ) ),
1702 application()->desktop(),
1704 this, SLOT( OnGUIEvent() ),
1705 QString() /*shortcutAction*/ );
1708 foreach ( QString subMenu, smenus ) {
1709 QStringList subMenuList = subMenu.split( ":" );
1710 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1711 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1712 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1714 createMenu( id, menuId, -1 );
1716 if ( !stools.isEmpty() ) {
1717 QString subTool = stools[0];
1718 subTool = subTool.toUpper().prepend( "TOOL_" );
1719 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1720 createTool(id, toolId);
1723 // add action id to map
1724 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1725 myPluginActions[id] = anAction;
1732 //=======================================================================
1733 // function : GeometryGUI::activateModule()
1734 // purpose : Called when GEOM module is activated
1735 //=======================================================================
1736 bool GeometryGUI::activateModule( SUIT_Study* study )
1738 if ( CORBA::is_nil( myComponentGeom ) )
1741 bool res = SalomeApp_Module::activateModule( study );
1745 setMenuShown( true );
1746 setToolShown( true );
1748 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1749 PyGILState_STATE gstate = PyGILState_Ensure();
1750 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1751 if ( !pluginsmanager ) {
1755 PyObjWrapper result =
1756 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1757 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1758 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1762 PyGILState_Release(gstate);
1763 // end of GEOM plugins loading
1765 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1766 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1768 // Reset actions accelerator keys
1769 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1771 GUIMap::Iterator it;
1772 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1773 it.value()->activate( application()->desktop() );
1775 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1777 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1778 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1779 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1781 if ( !myCreationInfoWdg )
1782 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1783 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1784 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1787 SALOME_ListIO selected;
1788 sm->selectedObjects( selected );
1789 sm->clearSelected();
1791 SUIT_ViewManager* vm;
1792 ViewManagerList OCCViewManagers, VTKViewManagers;
1794 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1795 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1796 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1797 onViewManagerAdded(vm);
1799 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1800 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1801 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1802 onViewManagerAdded(vm);
1804 sm->setSelectedObjects( selected, true ); //NPAL 19674
1806 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1808 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1810 // 0020836 (Basic vectors and origin)
1811 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1812 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1813 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1815 _PTR(Study) studyDS = appStudy->studyDS();
1817 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1818 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1819 createOriginAndBaseVectors();
1827 //=======================================================================
1828 // function : GeometryGUI::deactivateModule()
1829 // purpose : Called when GEOM module is deactivated
1830 //=======================================================================
1831 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1833 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1835 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1837 setMenuShown( false );
1838 setToolShown( false );
1840 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1841 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1843 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1845 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1846 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1847 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1848 myCreationInfoWdg = 0;
1850 EmitSignalCloseAllDialogs();
1852 GUIMap::Iterator it;
1853 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1854 it.value()->deactivate();
1856 // Unset actions accelerator keys
1857 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1859 qDeleteAll(myOCCSelectors);
1860 myOCCSelectors.clear();
1861 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1863 qDeleteAll(myVTKSelectors);
1864 myVTKSelectors.clear();
1865 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1867 return SalomeApp_Module::deactivateModule( study );
1870 //=======================================================================
1871 // function : onWindowActivated()
1872 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1873 //=======================================================================
1874 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1879 const bool ViewOCC = ( win->getViewManager() ? win->getViewManager()->getType() == OCCViewer_Viewer::Type() : false );
1880 //const bool ViewVTK = ( win->getViewManager() ? win->getViewManager()->getType() == SVTK_Viewer::Type() : false );
1882 // disable non-OCC viewframe menu commands
1883 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1884 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1885 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1886 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1887 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1888 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1889 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1891 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1892 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1893 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1894 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1896 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1899 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1901 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1902 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
1903 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1904 if ( myCreationInfoWdg )
1905 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1908 void GeometryGUI::viewManagers( QStringList& lst ) const
1910 lst.append( OCCViewer_Viewer::Type() );
1913 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1915 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1917 qDebug( "connect" );
1918 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1919 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1920 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1921 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1922 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1923 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1924 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1925 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1927 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1928 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1930 // disable OCC selectors
1931 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1932 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1933 while ( itOCCSel.hasNext() )
1934 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1935 sr->setEnabled(true);
1937 else if ( vm->getType() == SVTK_Viewer::Type() )
1939 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1940 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1942 // disable VTK selectors
1943 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1944 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1945 while ( itVTKSel.hasNext() )
1946 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1947 sr->setEnabled(true);
1951 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1953 SUIT_ViewModel* viewer = vm->getViewModel();
1954 if ( vm->getType() == OCCViewer_Viewer::Type() )
1956 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1957 while ( itOCCSel.hasNext() )
1958 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1959 if ( sr->viewer() == viewer )
1961 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1965 if ( vm->getType() == SVTK_Viewer::Type() )
1967 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1968 while ( itVTKSel.hasNext() )
1969 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1970 if ( sr->viewer() == viewer )
1972 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1978 //================================================================================
1980 * \brief Slot called when selection changed. Shows creation info of a selected object
1982 //================================================================================
1984 void GeometryGUI::updateCreationInfo()
1986 if ( myCreationInfoWdg )
1987 myCreationInfoWdg->clear();
1989 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
1990 // if ( !myCreationInfoWdg->isVisible() )
1993 // look for a sole selected GEOM_Object
1994 GEOM::GEOM_BaseObject_var geomObj;
1996 SALOME_ListIO selected;
1997 getApp()->selectionMgr()->selectedObjects( selected );
1999 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2000 SALOME_ListIteratorOfListIO selIt( selected );
2001 for ( ; selIt.More(); selIt.Next() )
2003 Handle(SALOME_InteractiveObject) io = selIt.Value();
2004 if ( !io->hasEntry() ) continue;
2005 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2006 if ( !sobj ) continue;
2007 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2008 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2009 if ( !gobj->_is_nil() )
2011 if ( !geomObj->_is_nil() )
2012 return; // several GEOM objects selected
2016 if ( geomObj->_is_nil() ) return;
2018 // pass creation info of geomObj to myCreationInfoWdg
2020 if ( myCreationInfoWdg ) {
2022 QString operationName;
2023 myCreationInfoWdg->setOperation( icon, operationName );
2027 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2029 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2030 QString name = info->operationName.in();
2031 if ( !name.isEmpty() ) {
2033 QString plugin_name;
2034 for ( size_t i = 0; i < info->params.length(); ++i ) {
2035 myCreationInfoWdg->addParam( info->params[i].name.in(),
2036 info->params[i].value.in() );
2037 QString value = info->params[i].name.in();
2038 if( value == PLUGIN_NAME ) {
2039 plugin_name = info->params[i].value.in();
2042 QString prefix = plugin_name.isEmpty() ? "GEOM" : plugin_name;
2043 icon = resMgr->loadPixmap( prefix, tr( ("ICO_"+name).toLatin1().constData() ), false );
2044 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2045 if ( operationName.startsWith( "MEN_" ))
2046 operationName = name; // no translation
2047 myCreationInfoWdg->setOperation( icon, operationName );
2056 void GeometryGUI::onAutoBringToFront()
2058 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2059 if( !isAutoBringToFront )
2062 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2063 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2066 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2067 if (!appStudy) return;
2069 GEOM_Displayer displayer( appStudy );
2071 SALOME_View* window = displayer.GetActiveView();
2072 if ( !window ) return;
2074 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2076 SALOME_ListIO selected;
2077 getApp()->selectionMgr()->selectedObjects( selected );
2078 if (!myTopLevelIOList.IsEmpty())
2080 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2082 Handle( SALOME_InteractiveObject ) io = It.Value();
2083 bool isSelected = false;
2084 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2086 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2087 if( io->isSame( sel_io ) )
2090 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2092 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2093 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2098 myTopLevelIOList.Assign(selected);
2099 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2101 Handle( SALOME_InteractiveObject ) io = It.Value();
2102 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2103 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2106 displayer.UpdateViewer();
2107 GeometryGUI::Modified();
2110 void GeometryGUI::updateFieldColorScale()
2112 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2114 GEOM_Displayer aDisplayer( aStudy );
2115 aDisplayer.UpdateColorScale();
2119 QString GeometryGUI::engineIOR() const
2121 if ( !CORBA::is_nil( GetGeomGen() ) )
2122 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2126 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2127 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2129 theWidth = theHeight = 0;
2131 Handle(TColStd_HArray1OfByte) aTexture;
2134 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2135 aTexture = aTextureMap[ theId ];
2136 if ( aTexture.IsNull() ) {
2137 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2138 if ( !aInsOp->_is_nil() ) {
2139 CORBA::Long aWidth, aHeight;
2140 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2141 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2143 theHeight = aHeight;
2145 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2147 for (int i = 0; i < aStream->length(); i++)
2148 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2149 aTextureMap[ theId ] = aTexture;
2157 LightApp_Selection* GeometryGUI::createSelection() const
2159 return new GEOMGUI_Selection();
2162 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2164 SalomeApp_Module::contextMenuPopup( client, menu, title );
2166 getApp()->selectionMgr()->selectedObjects( lst );
2168 //Add submenu for predefined materials
2169 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2170 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2171 QtxPopupMgr* mgr = popupMgr();
2172 //get parrent for submenu
2173 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2175 QMenu* oldMenu = act->menu() ;
2180 QMenu* matMenu = new QMenu();
2181 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2183 //Get current material model for the object
2185 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2186 if ( anApp && anApp->activeViewManager() ) {
2187 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2189 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2192 QString curModel = "";
2193 if ( v.canConvert<QString>() ) curModel = v.toString();
2194 // get list of all predefined materials
2195 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2197 foreach ( QString material, materials )
2199 QAction* menAct = matMenu->addAction( material );
2200 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2201 signalMapper->setMapping( menAct, material );
2202 menAct->setCheckable( true );
2203 // Set checked if this material is current
2204 Material_Model aModel;
2205 aModel.fromResources( material );
2206 if ( !found && aModel.toProperties() == curModel ) {
2207 menAct->setChecked( true );
2211 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2212 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2213 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2214 this, SLOT( OnSetMaterial( const QString & ) ) );
2215 act->setMenu( matMenu );
2219 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2220 Handle(SALOME_InteractiveObject) io = lst.First();
2221 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2222 _PTR(Study) study = appStudy->studyDS();
2223 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2225 QString aName = QString( obj->GetName().c_str() );
2226 aName.remove( QRegExp("\\s+$") );
2232 void GeometryGUI::OnSetMaterial(const QString& theName)
2234 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2238 void GeometryGUI::createPreferences()
2240 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2242 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2243 setPreferenceProperty( genGroup, "columns", 2 );
2245 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2246 LightApp_Preferences::Selector,
2247 "Geometry", "display_mode" );
2249 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2250 LightApp_Preferences::Color, "Geometry", "shading_color" );
2252 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2253 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2255 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2256 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2258 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2259 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2261 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2262 LightApp_Preferences::Color, "Geometry", "line_color" );
2264 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2265 LightApp_Preferences::Color, "Geometry", "point_color" );
2267 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2268 LightApp_Preferences::Color, "Geometry", "isos_color" );
2270 addPreference( tr( "PREF_LABEL_COLOR" ), genGroup,
2271 LightApp_Preferences::Color, "Geometry", "label_color" );
2273 addPreference( "", genGroup, LightApp_Preferences::Space );
2275 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2276 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2278 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2279 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2281 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2282 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2284 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2285 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2287 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2288 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2290 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2291 LightApp_Preferences::Selector,
2292 "Geometry", "material" );
2294 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2295 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2301 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2302 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2304 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2305 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2307 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2308 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2310 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2311 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2313 for (int i = 0; i < nb; i++) {
2314 setPreferenceProperty( wd[i], "min", 1 );
2315 setPreferenceProperty( wd[i], "max", 5 );
2318 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2319 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2321 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2322 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2324 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2325 setPreferenceProperty( aDimGroupId, "columns", 2 );
2327 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2328 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2330 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2331 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2333 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2334 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2336 int aDimFontHeightId = addPreference( tr( "PREF_DIMENSIONS_FONT_HEIGHT" ), aDimGroupId,
2337 LightApp_Preferences::DblSpin, "Geometry", "dimensions_font_height" );
2339 setPreferenceProperty( aDimFontHeightId, "min", 1e-9 );
2340 setPreferenceProperty( aDimFontHeightId, "max", 1e+9 );
2341 setPreferenceProperty( aDimFontHeightId, "precision", 9 );
2343 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2344 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2346 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2347 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2348 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2350 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2351 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2353 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2354 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2356 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2357 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2359 QStringList aListOfLengthUnits;
2360 aListOfLengthUnits << "m";
2361 aListOfLengthUnits << "cm";
2362 aListOfLengthUnits << "mm";
2363 aListOfLengthUnits << "in.";
2364 aListOfLengthUnits << "ft.";
2366 QStringList aListOfAngUnits;
2367 aListOfAngUnits << "rad";
2368 aListOfAngUnits << "deg";
2370 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2371 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2373 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2374 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2376 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2377 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2378 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2380 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2381 setPreferenceProperty( isoGroup, "columns", 2 );
2382 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2383 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2384 setPreferenceProperty( isoU, "min", 0 );
2385 setPreferenceProperty( isoU, "max", 100000 );
2386 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2387 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2388 setPreferenceProperty( isoV, "min", 0 );
2389 setPreferenceProperty( isoV, "max", 100000 );
2391 // Quantities with individual precision settings
2392 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2393 setPreferenceProperty( precGroup, "columns", 2 );
2395 const int nbQuantities = 8;
2396 int prec[nbQuantities], ii = 0;
2397 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2398 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2399 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2400 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2401 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2402 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2403 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2404 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2405 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2406 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2407 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2408 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2409 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2410 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2411 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2412 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2414 // Set property for precision value for spinboxes
2415 for ( ii = 0; ii < nbQuantities; ii++ ){
2416 setPreferenceProperty( prec[ii], "min", -14 );
2417 setPreferenceProperty( prec[ii], "max", 14 );
2418 setPreferenceProperty( prec[ii], "precision", 2 );
2421 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2422 setPreferenceProperty( VertexGroup, "columns", 2 );
2424 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2425 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2427 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2428 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2430 // Set property for default display mode
2431 QStringList aModesList;
2432 aModesList.append( tr("MEN_WIREFRAME") );
2433 aModesList.append( tr("MEN_SHADING") );
2434 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2435 aModesList.append( tr("MEN_TEXTURE") );
2437 QList<QVariant> anIndexesList;
2438 anIndexesList.append(0);
2439 anIndexesList.append(1);
2440 anIndexesList.append(2);
2441 anIndexesList.append(3);
2443 setPreferenceProperty( dispmode, "strings", aModesList );
2444 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2446 // Set property for top level display mode
2447 QStringList aTopModesList;
2448 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2449 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2450 aTopModesList.append( tr("MEN_WIREFRAME") );
2451 aTopModesList.append( tr("MEN_SHADING") );
2452 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2454 QList<QVariant> aTopIndexesList;
2455 aTopIndexesList.append(0);
2456 aTopIndexesList.append(1);
2457 aTopIndexesList.append(2);
2458 aTopIndexesList.append(3);
2459 aTopIndexesList.append(4);
2461 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2462 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2464 // Set property for step value for spinboxes
2465 setPreferenceProperty( step, "min", 1 );
2466 setPreferenceProperty( step, "max", 10000 );
2467 setPreferenceProperty( step, "precision", 3 );
2469 // Set property for trandparency value for spinboxes
2470 setPreferenceProperty( transparency, "min", 0 );
2471 setPreferenceProperty( transparency, "max", 100 );
2473 // Set property for deflection value for spinboxes
2474 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2475 setPreferenceProperty( defl, "max", 1.0 );
2476 setPreferenceProperty( defl, "step", 1.0e-04 );
2477 setPreferenceProperty( defl, "precision", 6 );
2479 // Set property for default material
2480 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2482 // Set property vertex marker type
2483 QList<QVariant> aMarkerTypeIndicesList;
2484 QList<QVariant> aMarkerTypeIconsList;
2486 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2487 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2488 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2489 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2490 aMarkerTypeIndicesList << (i-1);
2491 aMarkerTypeIconsList << pixmap;
2494 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2495 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2497 // Set property for vertex marker scale
2498 QList<QVariant> aMarkerScaleIndicesList;
2499 QStringList aMarkerScaleValuesList;
2501 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2502 aMarkerScaleIndicesList << iii;
2503 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2506 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2507 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2509 // Scalar bar for field step presentation
2510 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2511 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2513 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2514 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2515 setPreferenceProperty( sbXPosition, "min", 0 );
2516 setPreferenceProperty( sbXPosition, "max", 1 );
2517 setPreferenceProperty( sbXPosition, "step", 0.05 );
2519 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2520 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2521 setPreferenceProperty( sbYPosition, "min", 0 );
2522 setPreferenceProperty( sbYPosition, "max", 1 );
2523 setPreferenceProperty( sbYPosition, "step", 0.05 );
2525 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2526 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2527 setPreferenceProperty( sbWidth, "min", 0 );
2528 setPreferenceProperty( sbWidth, "max", 1 );
2529 setPreferenceProperty( sbWidth, "step", 0.05 );
2531 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2532 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2533 setPreferenceProperty( sbHeight, "min", 0 );
2534 setPreferenceProperty( sbHeight, "max", 1 );
2535 setPreferenceProperty( sbHeight, "step", 0.05 );
2537 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2538 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2539 setPreferenceProperty( sbTextHeight, "min", 6 );
2540 setPreferenceProperty( sbTextHeight, "max", 24 );
2541 setPreferenceProperty( sbTextHeight, "step", 1 );
2543 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2544 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2545 setPreferenceProperty( sbNbIntervals, "min", 2 );
2546 setPreferenceProperty( sbNbIntervals, "max", 64 );
2547 setPreferenceProperty( sbNbIntervals, "step", 1 );
2549 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2550 setPreferenceProperty( originGroup, "columns", 2 );
2552 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2553 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2554 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2555 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2557 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2558 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2560 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2561 setPreferenceProperty( operationsGroup, "columns", 2 );
2563 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2564 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2566 addPreference( tr( "PREF_HIDE_INPUT_OBJECT" ), operationsGroup,
2567 LightApp_Preferences::Bool, "Geometry", "hide_input_object" );
2569 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2571 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2573 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2574 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2576 QStringList aHierarchyTypeList;
2577 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2578 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2579 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2581 QList<QVariant> aHierarchyTypeIndexesList;
2582 aHierarchyTypeIndexesList.append(0);
2583 aHierarchyTypeIndexesList.append(1);
2584 aHierarchyTypeIndexesList.append(2);
2586 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2587 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2589 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2590 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2592 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2594 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2595 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2597 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2598 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2599 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2600 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2601 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2602 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2603 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2604 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2606 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2607 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2608 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2609 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2610 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2611 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2618 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2620 if (section == "Geometry") {
2621 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2622 if (param == QString("SettingsGeomStep")) {
2623 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2624 EmitSignalDefaultStepValueChanged(spin_step);
2626 else if (param == QString("toplevel_color")) {
2627 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2628 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2630 else if (param == QString("toplevel_dm")) {
2631 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2633 else if (param == QString("scalar_bar_x_position") ||
2634 param == QString("scalar_bar_y_position") ||
2635 param == QString("scalar_bar_width") ||
2636 param == QString("scalar_bar_height") ||
2637 param == QString("scalar_bar_text_height") ||
2638 param == QString("scalar_bar_nb_intervals")) {
2639 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2641 GEOM_Displayer aDisplayer( aStudy );
2642 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2643 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2646 else if ( param == QString("dimensions_color") ||
2647 param == QString("dimensions_line_width") ||
2648 param == QString("dimensions_font_height") ||
2649 param == QString("dimensions_arrow_length") ||
2650 param == QString("dimensions_show_units") ||
2651 param == QString("dimensions_length_units") ||
2652 param == QString("dimensions_angle_units") ||
2653 param == QString("label_color") )
2655 SalomeApp_Application* anApp = getApp();
2661 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2667 GEOM_Displayer aDisplayer( aStudy );
2669 ViewManagerList aVMs;
2670 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2671 ViewManagerList::Iterator anIt = aVMs.begin();
2672 for ( ; anIt != aVMs.end(); ++anIt )
2674 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2680 SALOME_ListIO aVisible;
2681 aViewer->GetVisible( aVisible );
2682 aDisplayer.Redisplay( aVisible, false, aViewer );
2684 if ( param == QString( "label_color" ) ) {
2685 ViewManagerList aVMsVTK;
2686 anApp->viewManagers( SVTK_Viewer::Type(), aVMsVTK );
2687 ViewManagerList::Iterator anIt = aVMsVTK.begin();
2688 for ( ; anIt != aVMsVTK.end(); ++anIt )
2690 SVTK_Viewer* aViewer = dynamic_cast<SVTK_Viewer*>( (*anIt)->getViewModel() );
2695 SALOME_ListIO aVisible;
2696 aViewer->GetVisible( aVisible );
2697 aDisplayer.Redisplay( aVisible, false, aViewer );
2700 aDisplayer.UpdateViewer();
2702 else if ( param.startsWith( "dependency_tree") )
2703 emit SignalDependencyTreeParamChanged( section, param );
2707 LightApp_Displayer* GeometryGUI::displayer()
2710 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2714 void GeometryGUI::setLocalSelectionMode(const int mode)
2716 myLocalSelectionMode = mode;
2719 int GeometryGUI::getLocalSelectionMode() const
2721 return myLocalSelectionMode;
2724 const char gSeparator = '_'; // character used to separate parameter names
2725 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2728 * \brief Store visual parameters
2730 * This method is called just before the study document is saved.
2731 * Store visual parameters in AttributeParameter attribute(s)
2733 void GeometryGUI::storeVisualParameters (int savePoint)
2735 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2736 if ( !appStudy || !appStudy->studyDS() )
2738 _PTR(Study) studyDS = appStudy->studyDS();
2740 // componentName is used for encoding of entries when storing them in IParameters
2741 std::string componentName = myComponentGeom->ComponentDataType();
2742 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2743 //if (!aSComponent) return;
2746 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2747 componentName.c_str(),
2749 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2751 QSet<QString> anEntriesToStoreShared;
2752 QList<SUIT_ViewManager*> lst;
2753 QList<SUIT_ViewManager*>::Iterator it;
2755 // main cycle to store parameters of displayed objects
2757 getApp()->viewManagers(lst);
2758 for (it = lst.begin(); it != lst.end(); it++) {
2759 SUIT_ViewManager* vman = *it;
2760 QString vType = vman->getType();
2761 int aMgrId = vman->getGlobalId();
2762 // saving VTK actors properties
2763 QVector<SUIT_ViewWindow*> views = vman->getViews();
2764 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2765 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
2766 ObjMap::ConstIterator o_it = anObjects.begin();
2767 for (; o_it != anObjects.end(); o_it++) {
2768 const PropMap& aProps = o_it.value();
2770 //Check that object exists in the study
2771 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2772 if ( !obj || !(aProps.count() > 0))
2774 // entry is "encoded" = it does NOT contain component adress, since it is a
2775 // subject to change on next component loading
2777 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2779 _PTR(GenericAttribute) anAttr;
2780 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2783 // remember entry of object to store shared GEOM properties
2784 // (e.g. dimension properties).
2785 if ( vType == OCCViewer_Viewer::Type() )
2787 anEntriesToStoreShared.insert( o_it.key() );
2790 QString param, occParam = vType;
2791 occParam += GEOM::sectionSeparator();
2792 occParam += QString::number(aMgrId);
2793 occParam += GEOM::sectionSeparator();
2795 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2796 param = occParam + GEOM::propertyName( GEOM::Visibility );
2797 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2800 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2801 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2802 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2805 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2806 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2808 val << QString::number(c.redF());
2809 val << QString::number(c.greenF());
2810 val << QString::number(c.blueF());
2811 param = occParam + GEOM::propertyName( GEOM::Color );
2812 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2815 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2816 param = occParam + GEOM::propertyName( GEOM::Texture );
2817 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2820 if (vType == SVTK_Viewer::Type()) {
2821 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2822 param = occParam + GEOM::propertyName( GEOM::Opacity );
2823 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2825 } else if (vType == SOCC_Viewer::Type()) {
2826 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2827 param = occParam + GEOM::propertyName( GEOM::Transparency );
2828 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2831 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2832 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2833 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2837 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2838 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2839 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2842 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2843 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2844 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2847 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
2848 param = occParam + GEOM::propertyName( GEOM::Vertices );
2849 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
2852 if (aProps.contains(GEOM::propertyName( GEOM::ShowName ))) {
2853 param = occParam + GEOM::propertyName( GEOM::ShowName );
2854 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::ShowName )).toString().toStdString());
2857 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2858 param = occParam + GEOM::propertyName( GEOM::Deflection );
2859 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2862 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2863 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2864 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2865 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2868 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2869 param = occParam + GEOM::propertyName( GEOM::Material );
2870 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2873 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2874 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2875 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2878 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2879 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2880 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2882 } // object iterator
2884 } // for (viewManagers)
2886 // store dimension attributes of objects:
2887 // since the displayed object always persists in property map, we remember the object entries
2888 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
2889 QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
2890 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
2891 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
2893 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
2894 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName);
2896 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
2898 if ( aDimensions.GetNumber() == 0 )
2903 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
2908 * \brief Restore visual parameters
2910 * This method is called after the study document is opened.
2911 * Restore visual parameters from AttributeParameter attribute(s)
2913 void GeometryGUI::restoreVisualParameters (int savePoint)
2915 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2916 if (!appStudy || !appStudy->studyDS())
2918 _PTR(Study) studyDS = appStudy->studyDS();
2920 // componentName is used for encoding of entries when storing them in IParameters
2921 std::string componentName = myComponentGeom->ComponentDataType();
2922 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2923 //if (!aSComponent) return;
2926 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2927 componentName.c_str(),
2929 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2931 std::vector<std::string> entries = ip->getEntries();
2933 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2935 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2936 QString entry (ip->decodeEntry(*entIt).c_str());
2938 // Check that the entry corresponds to a real object in the Study
2939 // as the object may be deleted or modified after the visual state is saved.
2940 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2941 if (!so) continue; //Skip the not existent entry
2943 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2944 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2946 std::vector<std::string>::iterator namesIt = paramNames.begin();
2947 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2949 // actors are stored in a map after displaying of them for
2950 // quicker access in the future: map < viewID to actor >
2951 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2952 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2954 QString viewerTypStr;
2955 QString viewIndexStr;
2957 QVector<PropMap> aListOfMap;
2959 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2961 // visual parameters are stored in strings as follows:
2962 // 1) ViewerType_ViewIndex_ParamName
2963 // 2) ViewerType_ParamName (shared for GEOM module)
2964 // '_' is used as separator and should not be used in viewer type or parameter names.
2965 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2967 bool isShared = lst.size() == 2;
2968 bool isViewer = lst.size() == 3;
2969 if ( !isShared && !isViewer )
2974 // shared visual parameters
2977 QString aParamNameStr( lst[1] );
2978 QString aValuesStr( (*valuesIt).c_str() );
2980 // shared dimension properties are stored as attribute
2981 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
2983 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
2984 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
2990 // per view visual parameters
2991 viewerTypStr = lst[0];
2992 viewIndexStr = lst[1];
2993 QString paramNameStr = lst[2];
2996 viewIndex = viewIndexStr.toUInt(&ok);
2997 if (!ok) // bad conversion of view index to integer
3000 if ((viewIndex + 1) > aListOfMap.count()) {
3001 aListOfMap.resize(viewIndex + 1);
3004 QString val((*valuesIt).c_str());
3005 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
3006 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
3007 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
3008 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
3009 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
3010 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
3011 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
3012 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
3013 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
3014 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
3015 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
3016 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
3017 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
3018 QStringList rgb = val.split(GEOM::subSectionSeparator());
3019 if (rgb.count() == 3) {
3020 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
3021 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
3023 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
3024 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
3025 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
3026 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
3027 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
3028 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
3029 } else if (paramNameStr == GEOM::propertyName( GEOM::ShowName )) {
3030 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::ShowName ), val == "true" || val == "1");
3031 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3032 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3033 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3034 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3035 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3036 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3037 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3038 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3039 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3040 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3042 } // for names/parameters iterator
3044 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3046 for (int index = 0; index < aListOfMap.count(); index++) {
3047 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
3049 //Get Visibility property of the current PropMap
3050 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3051 SUIT_ViewManager* vman = lst.at(index);
3052 SUIT_ViewModel* vmodel = vman->getViewModel();
3053 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
3056 } // for entries iterator
3058 // update all VTK and OCC views
3059 QList<SUIT_ViewManager*> lst;
3060 getApp()->viewManagers(lst);
3061 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3062 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3065 if (vmodel->getType() == SVTK_Viewer::Type()) {
3066 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3067 vtkView->getRenderer()->ResetCameraClippingRange();
3070 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3071 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3072 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3079 // Compute current name mode of the viewer
3080 void UpdateNameMode( SalomeApp_Application* app )
3082 bool isMode = false;
3083 SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() );
3084 SUIT_ViewWindow* viewWindow = app->desktop()->activeWindow();
3085 GEOM_Displayer displayer( aStudy );
3086 int aMgrId = viewWindow->getViewManager()->getGlobalId();
3088 SALOME_View* window = displayer.GetActiveView();
3089 if ( !window ) return;
3091 SALOME_ListIO anIOlst;
3092 window->GetVisible( anIOlst );
3094 for ( SALOME_ListIteratorOfListIO It( anIOlst ); It.More(); It.Next() ) {
3095 Handle( SALOME_InteractiveObject ) io = It.Value();
3096 QVariant v = aStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::ShowName ), QVariant() );
3097 bool isIONameMode = v.isValid() ? v.toBool() : false;
3101 viewWindow->setProperty( "NameMode", isMode );
3104 void GeometryGUI::onViewAboutToShow()
3106 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3107 QAction* a = action( GEOMOp::OpSwitchVectors );
3108 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3109 QAction* aNameAction = action( GEOMOp::OpSwitchName );
3111 a->setEnabled(true);
3112 bool vmode = window->property("VectorsMode").toBool();
3113 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3114 aVerticesAction->setEnabled(true);
3115 vmode = window->property("VerticesMode").toBool();
3116 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3117 UpdateNameMode( getApp() );
3118 aNameAction->setEnabled(true);
3119 vmode = window->property("NameMode").toBool();
3120 aNameAction->setText ( vmode == 1 ? tr( "MEN_NAME_MODE_OFF" ) : tr("MEN_NAME_MODE_ON") );
3122 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3123 a->setEnabled(false);
3124 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3125 aVerticesAction->setEnabled(false);
3126 aNameAction->setText ( tr("MEN_NAME_MODE_ON") );
3127 aNameAction->setEnabled(false);
3132 \brief Return action by id
3133 \param id identifier of the action
3136 QAction* GeometryGUI::getAction(const int id) {
3141 \brief GEOM module message handler
3143 This method can be re-implemented in the subclasses.
3144 This is a GEOM module message handler.
3146 \param msg the message received.
3148 void GeometryGUI::message(const QString& msg)
3151 QStringList data = msg.split("/");
3152 const int nbStrings = data.count();
3154 if (nbStrings > 0) {
3155 if (data[0] == "modified") {
3157 QString anIOR = nbStrings > 1 ? data[1] : QString();
3159 if ( anIOR.isEmpty() ) {
3163 // Get the geom object.
3164 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3166 // Clear the shape buffer
3167 GeometryGUI::ClearShapeBuffer (anObj);
3173 \brief Clears the shape buffer.
3175 This is a static method. It clears the shape buffer.
3177 \param theObj the object
3179 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3181 if ( CORBA::is_nil( theObj ) )
3184 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3185 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3186 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3188 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3193 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3198 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3202 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3203 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3204 _PTR(GenericAttribute) anAttr;
3205 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3206 _PTR(AttributeIOR) anIOR ( anAttr );
3207 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3208 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3214 \brief Returns the object from IOR.
3216 This is a static method. It returns the object from its IOR.
3218 \param IOR object IOR
3219 \return GEOM object.
3221 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3223 GEOM::GEOM_Object_var geomObj;
3224 if ( !IOR.isEmpty() ) {
3225 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3226 ( IOR.toLatin1().constData() );
3227 if ( !CORBA::is_nil( corbaObj ) )
3228 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3230 return geomObj._retn();
3234 \brief Returns IOR of the object.
3236 This is a static method. It returns the object's IOR.
3238 \param object the GEOM object.
3239 \return object's IOR.
3241 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3244 if ( !CORBA::is_nil( object ) ) {
3245 CORBA::String_var anIOR =
3246 SalomeApp_Application::orb()->object_to_string( object );
3253 \brief Check if this object is can't be renamed in place
3255 This method can be re-implemented in the subclasses.
3256 Return true in case if object isn't reference or component (module root).
3258 \param entry column id
3259 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3261 bool GeometryGUI::renameAllowed( const QString& entry) const {
3263 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3264 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3265 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3267 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3271 Rename object by entry.
3272 \param entry entry of the object
3273 \param name new name of the object
3274 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3276 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3278 bool result = false;
3280 SalomeApp_Application* app =
3281 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3282 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3287 _PTR(Study) aStudy = appStudy->studyDS();
3292 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3294 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3298 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3299 _PTR(GenericAttribute) anAttr;
3301 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3302 _PTR(AttributeName) aName (anAttr);
3304 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3305 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3306 if (!CORBA::is_nil(anObj)) {
3307 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3308 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3316 void GeometryGUI::updateMaterials()
3318 LightApp_Preferences* pref = preferences();
3320 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3321 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3322 if ( !materials.contains( currentMaterial ) )
3323 // user material set as default in the preferences, might be removed
3324 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3326 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3328 setPreferenceProperty( prefItem->id(),
3329 "strings", materials );
3330 prefItem->retrieve();
3336 \brief Check if the module allows "drag" operation of its objects.
3338 Overloaded from LightApp_Module class.
3340 This function is a part of the general drag-n-drop mechanism.
3341 The goal of this function is to check data object passed as a parameter
3342 and decide if it can be dragged or no.
3344 \param what data object being tested for drag operation
3345 \return \c true if module allows dragging of the specified object
3346 \sa isDropAccepted(), dropObjects()
3348 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3350 // we allow dragging object under root and object from folder
3351 int aLevel = what->level();
3352 bool anObjectInFolder = false;
3354 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3356 _PTR(SObject) aSO = dataObj->object();
3358 _PTR(GenericAttribute) anAttr;
3359 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3360 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3361 _PTR(AttributeLocalID) aLocalID( anAttr );
3362 anObjectInFolder = aLocalID->Value() == 999;
3367 return aLevel == 2 || anObjectInFolder;
3371 \brief Check if the module allows "drop" operation on the given object.
3373 Overloaded from LightApp_Module class.
3375 This function is a part of the general drag-n-drop mechanism.
3376 The goal of this function is to check data object passed as a parameter
3377 and decide if it can be used as a target for the "drop" operation.
3378 The processing of the drop operation itself is done in the dropObjects() function.
3380 \param where target data object
3381 \return \c true if module supports dropping on the \a where data object
3382 \sa isDraggable(), dropObjects()
3384 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3386 // we allow dropping into folder and top-level GEOM object
3387 int aLevel = where->level();
3388 bool isFolder = false;
3390 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3392 _PTR(SObject) aSO = dataObj->object();
3394 _PTR(GenericAttribute) anAttr;
3395 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3396 _PTR(AttributeLocalID) aLocalID( anAttr );
3397 isFolder = aLocalID->Value() == 999;
3402 return aLevel == 1 || isFolder;
3406 \brief Complete drag-n-drop operation.
3408 Overloaded from LightApp_Module class.
3410 This function is a part of the general drag-n-drop mechanism.
3411 Its goal is to handle dropping of the objects being dragged according
3412 to the chosen operation (move). The dropping is performed in the
3413 context of the parent data object \a where and the \a row (position in the
3414 children index) at which the data should be dropped. If \a row is equal to -1,
3415 this means that objects are added to the end of the children list.
3417 \param what objects being dropped
3418 \param where target data object
3419 \param row child index at which the drop operation is performed
3420 \param action drag-n-drop operation (Qt::DropAction) - move
3422 \sa isDraggable(), isDropAccepted()
3424 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3425 const int row, Qt::DropAction action )
3427 if (action != Qt::CopyAction && action != Qt::MoveAction)
3428 return; // unsupported action
3430 // get parent object
3431 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3432 if ( !dataObj ) return; // wrong parent
3433 _PTR(SObject) parentObj = dataObj->object();
3435 // Find the current Study and StudyBuilder
3436 _PTR(Study) aStudy = parentObj->GetStudy();
3437 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3438 // collect all parents of the target node
3439 QStringList parentIDs;
3440 _PTR(SObject) parent = parentObj;
3441 while( !parent->IsNull() ) {
3442 parentIDs << parent->GetID().c_str();
3443 parent = aUseCaseBuilder->GetFather(parent);
3446 // collect objects being dropped
3447 GEOM::object_list_var objects = new GEOM::object_list();
3448 objects->length( what.count() );
3450 for ( int i = 0; i < what.count(); i++ ) {
3451 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3452 if ( !dataObj ) continue; // skip wrong objects
3453 _PTR(SObject) sobj = dataObj->object();
3454 // check that dropped object is not a parent of target object
3455 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3456 return; // it's not allowed to move node into it's child
3458 objects[i] = _CAST(SObject, sobj)->GetSObject();
3461 objects->length( count );
3463 // call engine function
3464 GetGeomGen()->Move( objects.in(), // what
3465 _CAST(SObject, parentObj)->GetSObject(), // where
3468 // update Object browser
3469 getApp()->updateObjectBrowser( false );