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 libName = "GenerationGUI";
553 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
554 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
555 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
556 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
557 case GEOMOp::OpSurfaceFromFace: // MENU ENTITY - SURFACE FROM FACE
559 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
561 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
562 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
563 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
564 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
565 case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR
566 libName = "EntityGUI";
568 case GEOMOp::OpEdge: // MENU BUILD - EDGE
569 case GEOMOp::OpWire: // MENU BUILD - WIRE
570 case GEOMOp::OpFace: // MENU BUILD - FACE
571 case GEOMOp::OpShell: // MENU BUILD - SHELL
572 case GEOMOp::OpSolid: // MENU BUILD - SOLID
573 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
574 libName = "BuildGUI";
576 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
577 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
578 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
579 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
580 libName = "BooleanGUI";
582 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
583 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
584 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
585 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
586 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
587 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
588 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
589 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
590 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
591 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
592 case GEOMOp::OpExtension: // MENU TRANSFORMATION - EXTENSION
593 libName = "TransformationGUI";
595 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
596 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
597 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
598 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
599 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
600 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
601 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
602 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
603 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
604 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
605 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
606 case GEOMOp::OpTransferData: // MENU OPERATION - TRANSFER DATA
607 libName = "OperationGUI";
609 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
610 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
611 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
612 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
613 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
614 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
615 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
616 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
617 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
618 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
619 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
620 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
621 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
622 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
623 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
624 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
625 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
626 case GEOMOp::OpInspectObj: // MENU REPAIR - INSPECT OBJECT
627 libName = "RepairGUI";
629 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
630 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
631 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
632 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
633 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
634 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
635 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
636 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
637 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
638 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
639 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
640 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
641 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
642 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
643 case GEOMOp::OpFastCheckInters: // MENU MEASURE - FAST CHECK INTERSECTIONS
644 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
645 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
646 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
647 libName = "MeasureGUI";
649 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
650 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
651 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
652 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
653 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
654 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
655 libName = "GroupGUI";
657 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
658 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
659 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
660 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
661 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
662 libName = "BlocksGUI";
664 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
665 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
666 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
667 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
668 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
669 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
670 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
671 //libName = "AdvancedGUI";
674 if (myPluginActions.contains(id)) {
675 libName = myPluginActions[id].first;
677 GEOMPluginGUI* library = 0;
678 if ( !libName.isEmpty() ) {
680 libName = QString( "lib" ) + libName + ".so";
682 libName = libName + ".dll";
684 library = getPluginLibrary( libName );
687 // call method of corresponding GUI library
689 //QString action ("%1");
690 //action = action.arg(id);
692 //if( !theParam.isValid() )
693 library->OnGUIEvent( myPluginActions[id].second, desk );
695 // library->OnGUIEvent( id, desk, theParam);
698 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
700 updateCreationInfo();
706 GEOMGUI* library = 0;
707 if ( !libName.isEmpty() ) {
709 libName = QString( "lib" ) + libName + ".so";
711 libName = libName + ".dll";
713 library = getLibrary( libName );
716 // call method of corresponding GUI library
718 if( !theParam.isValid() )
719 library->OnGUIEvent( id, desk );
721 library->OnGUIEvent( id, desk, theParam);
724 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
726 updateCreationInfo();
729 //=================================================================================
730 // function : GeometryGUI::activateOperation()
732 //=================================================================================
733 bool GeometryGUI::activateOperation( int actionId )
735 OnGUIEvent(actionId);
739 //=================================================================================
740 // function : GeometryGUI::activateOperation()
742 //=================================================================================
743 bool GeometryGUI::activateOperation( const QString& actionId )
747 int id = actionId.toInt(&isOk);
754 //=================================================================================
755 // function : GeometryGUI::activateOperation()
757 //=================================================================================
758 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
762 QString pluginLib = plugin;
763 // TODO: if <plugin> is a plugin name, find plugin library name
764 if (myPluginLibs.contains(plugin))
765 pluginLib = myPluginLibs[plugin];
767 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
768 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
769 const PluginAction& anAction = actionsIter.value();
770 if (anAction.first == pluginLib && anAction.second == actionId) {
771 // activate operation
772 OnGUIEvent(actionsIter.key());
780 //=================================================================================
781 // function : GeometryGUI::OnKeyPress()
782 // purpose : Called when any key is pressed by user [static]
783 //=================================================================================
784 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
786 if ( !application() )
788 foreach ( GEOMGUI* lib, myGUIMap )
789 lib->OnKeyPress( e, application()->desktop(), w );
792 //=================================================================================
793 // function : GeometryGUI::OnMouseMove()
794 // purpose : Manages mouse move events [static]
795 //=================================================================================
796 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
798 if ( !application() )
800 foreach ( GEOMGUI* lib, myGUIMap )
801 lib->OnMouseMove( e, application()->desktop(), w );
804 //=================================================================================
805 // function : GeometryGUI::OnMouseRelease()
806 // purpose : Manages mouse release events [static]
807 //=================================================================================
808 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
810 if ( !application() )
812 foreach ( GEOMGUI* lib, myGUIMap )
813 lib->OnMouseRelease( e, application()->desktop(), w );
816 //=================================================================================
817 // function : GeometryGUI::OnMousePress()
818 // purpose : Manage mouse press events [static]
819 //=================================================================================
820 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
822 if ( !application() )
824 foreach ( GEOMGUI* lib, myGUIMap )
825 lib->OnMousePress( e, application()->desktop(), w );
828 //=======================================================================
829 // function : createGeomAction
831 //=======================================================================
832 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
833 const int accel, const bool toggle, const QString& shortcutAction )
835 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
836 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
837 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
839 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
841 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
842 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
844 application()->desktop(),
846 this, SLOT( OnGUIEvent() ),
850 //=======================================================================
851 // function : createOriginAndBaseVectors
853 //=======================================================================
854 void GeometryGUI::createOriginAndBaseVectors()
856 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
857 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
859 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
863 _PTR(Study) studyDS = appStudy->studyDS();
864 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
865 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
866 if ( !aBasicOperations->_is_nil() ) {
867 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
868 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
869 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
870 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
871 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
872 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
874 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
875 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
876 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
877 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
878 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
880 getApp()->updateObjectBrowser( true );
886 //=======================================================================
887 // function : GeometryGUI::initialize()
888 // purpose : Called when GEOM module is created
889 //=======================================================================
890 void GeometryGUI::initialize( CAM_Application* app )
892 SalomeApp_Module::initialize( app );
894 // ----- create actions --------------
896 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
898 createGeomAction( GEOMOp::OpPoint, "POINT" );
899 createGeomAction( GEOMOp::OpLine, "LINE" );
900 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
901 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
902 createGeomAction( GEOMOp::OpArc, "ARC" );
903 createGeomAction( GEOMOp::OpCurve, "CURVE" );
904 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
905 createGeomAction( GEOMOp::OpVector, "VECTOR" );
906 createGeomAction( GEOMOp::OpPlane, "PLANE" );
907 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
908 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
909 createGeomAction( GEOMOp::OpSurfaceFromFace, "SURFACE_FROM_FACE" );
911 createGeomAction( GEOMOp::OpBox, "BOX" );
912 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
913 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
914 createGeomAction( GEOMOp::OpTorus, "TORUS" );
915 createGeomAction( GEOMOp::OpCone, "CONE" );
916 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
917 createGeomAction( GEOMOp::OpDisk, "DISK" );
919 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
920 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
921 createGeomAction( GEOMOp::OpFilling, "FILLING" );
922 createGeomAction( GEOMOp::OpPipe, "PIPE" );
923 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
925 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
926 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
927 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
928 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
929 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
931 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
932 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
934 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
936 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
937 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
939 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
940 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
941 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
943 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
945 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
946 createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" );
948 createGeomAction( GEOMOp::OpEdge, "EDGE" );
949 createGeomAction( GEOMOp::OpWire, "WIRE" );
950 createGeomAction( GEOMOp::OpFace, "FACE" );
951 createGeomAction( GEOMOp::OpShell, "SHELL" );
952 createGeomAction( GEOMOp::OpSolid, "SOLID" );
953 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
955 createGeomAction( GEOMOp::OpFuse, "FUSE" );
956 createGeomAction( GEOMOp::OpCommon, "COMMON" );
957 createGeomAction( GEOMOp::OpCut, "CUT" );
958 createGeomAction( GEOMOp::OpSection, "SECTION" );
960 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
961 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
962 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
963 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
964 createGeomAction( GEOMOp::OpScale, "SCALE" );
965 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
966 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
967 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
968 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
969 createGeomAction( GEOMOp::OpExtension, "EXTENSION" );
971 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
972 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
973 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
974 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
975 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
976 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
977 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
978 createGeomAction( GEOMOp::OpTransferData, "TRANSFER_DATA" );
979 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
980 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
981 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
982 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
984 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
985 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
986 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
988 createGeomAction( GEOMOp::OpSewing, "SEWING" );
989 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
990 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
991 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
992 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
993 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
994 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
995 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
996 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
997 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
998 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
999 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
1000 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1001 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1002 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1003 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1004 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1005 createGeomAction( GEOMOp::OpInspectObj, "INSPECT_OBJECT" );
1007 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1008 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1009 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1010 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1011 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1012 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1013 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1014 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1015 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1017 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1018 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1019 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1020 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1021 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1022 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1023 createGeomAction( GEOMOp::OpFastCheckInters, "FAST_CHECK_INTERSECTIONS" );
1025 #ifdef _DEBUG_ // PAL16821
1026 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1029 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1030 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1031 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1032 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1033 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1034 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1035 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1036 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1037 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1038 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1039 createGeomAction( GEOMOp::OpSwitchName, "NAME_MODE");
1040 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1041 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1042 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1043 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1044 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1045 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1046 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1047 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1048 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1049 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1050 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1051 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1052 createGeomAction( GEOMOp::OpHide, "ERASE" );
1054 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1055 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1056 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1057 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1058 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1059 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1060 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1061 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1062 createGeomAction( GEOMOp::OpShowName, "POP_SHOW_NAME", "", 0, true );
1063 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1064 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1065 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1066 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1067 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1068 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1069 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1070 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1071 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1072 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1073 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1074 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1075 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1076 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1077 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1078 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1079 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1080 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1081 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1082 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1083 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1084 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1086 // Create actions for increase/decrease transparency shortcuts
1087 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1088 "Geometry:Increase transparency");
1089 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1090 "Geometry:Decrease transparency");
1092 // Create actions for increase/decrease number of isolines
1093 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1094 "Geometry:Increase number of isolines");
1095 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1096 "Geometry:Decrease number of isolines");
1098 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1099 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1100 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1101 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1102 //@@ 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 @@//
1104 // ---- create menus --------------------------
1106 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1108 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1109 createMenu( GEOMOp::OpDelete, editId, -1 );
1111 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1113 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1114 createMenu( GEOMOp::OpPoint, basicId, -1 );
1115 createMenu( GEOMOp::OpLine, basicId, -1 );
1116 createMenu( GEOMOp::OpCircle, basicId, -1 );
1117 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1118 createMenu( GEOMOp::OpArc, basicId, -1 );
1119 createMenu( GEOMOp::OpCurve, basicId, -1 );
1120 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1121 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1122 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1123 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1124 createMenu( GEOMOp::OpSurfaceFromFace, basicId, -1 );
1125 createMenu( separator(), basicId, -1 );
1126 createMenu( GEOMOp::OpVector, basicId, -1 );
1127 createMenu( GEOMOp::OpPlane, basicId, -1 );
1128 createMenu( GEOMOp::OpLCS, basicId, -1 );
1129 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1131 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1132 createMenu( GEOMOp::OpBox, primId, -1 );
1133 createMenu( GEOMOp::OpCylinder, primId, -1 );
1134 createMenu( GEOMOp::OpSphere, primId, -1 );
1135 createMenu( GEOMOp::OpTorus, primId, -1 );
1136 createMenu( GEOMOp::OpCone, primId, -1 );
1137 createMenu( GEOMOp::OpRectangle, primId, -1 );
1138 createMenu( GEOMOp::OpDisk, primId, -1 );
1139 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1141 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1142 createMenu( GEOMOp::OpPrism, genId, -1 );
1143 createMenu( GEOMOp::OpRevolution, genId, -1 );
1144 createMenu( GEOMOp::OpFilling, genId, -1 );
1145 createMenu( GEOMOp::OpPipe, genId, -1 );
1146 createMenu( GEOMOp::OpPipePath, genId, -1 );
1148 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1149 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1150 //@@ 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 @@//
1152 createMenu( separator(), newEntId, -1 );
1154 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1155 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1156 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1157 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1158 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1159 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1161 createMenu( separator(), newEntId, -1 );
1163 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1164 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1165 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1167 createMenu( separator(), newEntId, -1 );
1169 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1170 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1171 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1172 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1173 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1175 createMenu( separator(), newEntId, -1 );
1177 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1179 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1180 createMenu( GEOMOp::OpEdge, buildId, -1 );
1181 createMenu( GEOMOp::OpWire, buildId, -1 );
1182 createMenu( GEOMOp::OpFace, buildId, -1 );
1183 createMenu( GEOMOp::OpShell, buildId, -1 );
1184 createMenu( GEOMOp::OpSolid, buildId, -1 );
1185 createMenu( GEOMOp::OpCompound, buildId, -1 );
1187 createMenu( separator(), newEntId, -1 );
1189 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1191 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1194 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1196 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1197 createMenu( GEOMOp::OpFuse, boolId, -1 );
1198 createMenu( GEOMOp::OpCommon, boolId, -1 );
1199 createMenu( GEOMOp::OpCut, boolId, -1 );
1200 createMenu( GEOMOp::OpSection, boolId, -1 );
1202 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1203 createMenu( GEOMOp::OpTranslate, transId, -1 );
1204 createMenu( GEOMOp::OpRotate, transId, -1 );
1205 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1206 createMenu( GEOMOp::OpMirror, transId, -1 );
1207 createMenu( GEOMOp::OpScale, transId, -1 );
1208 createMenu( GEOMOp::OpOffset, transId, -1 );
1209 createMenu( GEOMOp::OpProjection, transId, -1 );
1210 createMenu( GEOMOp::OpExtension, transId, -1 );
1211 createMenu( separator(), transId, -1 );
1212 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1213 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1215 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1216 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1217 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1218 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1220 createMenu( separator(), operId, -1 );
1222 createMenu( GEOMOp::OpPartition, operId, -1 );
1223 createMenu( GEOMOp::OpArchimede, operId, -1 );
1224 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1225 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1226 createMenu( GEOMOp::OpTransferData, operId, -1 );
1228 createMenu( separator(), operId, -1 );
1230 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1231 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1232 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1233 createMenu( GEOMOp::OpChamfer, operId, -1 );
1234 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1235 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1236 //createMenu( GEOMOp::OpClipping, operId, -1 );
1238 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1239 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1240 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1241 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1242 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1243 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1244 createMenu( GEOMOp::OpSewing, repairId, -1 );
1245 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1246 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1247 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1248 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1249 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1250 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1251 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1252 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1253 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1254 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1255 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1257 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1258 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1259 createMenu( GEOMOp::OpProperties, measurId, -1 );
1260 createMenu( separator(), measurId, -1 );
1261 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1262 createMenu( GEOMOp::OpInertia, measurId, -1 );
1263 createMenu( GEOMOp::OpNormale, measurId, -1 );
1264 createMenu( separator(), measurId, -1 );
1265 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1266 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1267 createMenu( separator(), measurId, -1 );
1269 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1270 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1271 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1272 createMenu( GEOMOp::OpAngle, dimId, -1 );
1273 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1275 createMenu( separator(), measurId, -1 );
1276 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1277 createMenu( separator(), measurId, -1 );
1278 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1279 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1280 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1281 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1282 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1283 createMenu( GEOMOp::OpFastCheckInters, measurId, -1 );
1284 createMenu( GEOMOp::OpInspectObj, measurId, -1 );
1286 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1287 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1288 createMenu( separator(), toolsId, -1 );
1289 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1292 createMenu( separator(), toolsId, -1 );
1293 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1294 createMenu( separator(), toolsId, -1 );
1296 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1297 createMenu( separator(), viewId, -1 );
1299 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1300 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1301 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1302 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1303 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1304 createMenu( separator(), dispmodeId, -1 );
1305 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1306 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1307 createMenu( GEOMOp::OpSwitchName, dispmodeId, -1 );
1309 createMenu( separator(), viewId, -1 );
1310 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1311 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1312 createMenu( separator(), viewId, -1 );
1313 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1314 createMenu( separator(), viewId, -1 );
1318 because of these items are accessible through object browser and viewers
1319 we have removed they from main menu
1321 createMenu( GEOMOp::OpShow, viewId, -1 );
1322 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1323 createMenu( GEOMOp::OpHide, viewId, -1 );
1326 // ---- create toolbars --------------------------
1328 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1329 createTool( GEOMOp::OpPoint, basicTbId );
1330 createTool( GEOMOp::OpLine, basicTbId );
1331 createTool( GEOMOp::OpCircle, basicTbId );
1332 createTool( GEOMOp::OpEllipse, basicTbId );
1333 createTool( GEOMOp::OpArc, basicTbId );
1334 createTool( GEOMOp::OpCurve, basicTbId );
1335 createTool( GEOMOp::OpVector, basicTbId );
1336 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1337 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1338 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1339 createTool( GEOMOp::OpIsoline, basicTbId );
1340 createTool( GEOMOp::OpSurfaceFromFace, basicTbId );
1341 createTool( GEOMOp::OpPlane, basicTbId );
1342 createTool( GEOMOp::OpLCS, basicTbId );
1343 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1345 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1346 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1347 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1349 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1350 createTool( GEOMOp::OpBox, primTbId );
1351 createTool( GEOMOp::OpCylinder, primTbId );
1352 createTool( GEOMOp::OpSphere, primTbId );
1353 createTool( GEOMOp::OpTorus, primTbId );
1354 createTool( GEOMOp::OpCone, primTbId );
1355 createTool( GEOMOp::OpRectangle, primTbId );
1356 createTool( GEOMOp::OpDisk, primTbId );
1357 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1359 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1360 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1361 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1363 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1364 createTool( GEOMOp::OpFuse, boolTbId );
1365 createTool( GEOMOp::OpCommon, boolTbId );
1366 createTool( GEOMOp::OpCut, boolTbId );
1367 createTool( GEOMOp::OpSection, boolTbId );
1369 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1370 createTool( GEOMOp::OpPrism, genTbId );
1371 createTool( GEOMOp::OpRevolution, genTbId );
1372 createTool( GEOMOp::OpFilling, genTbId );
1373 createTool( GEOMOp::OpPipe, genTbId );
1374 createTool( GEOMOp::OpPipePath, genTbId );
1376 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1377 createTool( GEOMOp::OpTranslate, transTbId );
1378 createTool( GEOMOp::OpRotate, transTbId );
1379 createTool( GEOMOp::OpChangeLoc, transTbId );
1380 createTool( GEOMOp::OpMirror, transTbId );
1381 createTool( GEOMOp::OpScale, transTbId );
1382 createTool( GEOMOp::OpOffset, transTbId );
1383 createTool( GEOMOp::OpProjection, transTbId );
1384 createTool( GEOMOp::OpExtension, transTbId );
1385 createTool( separator(), transTbId );
1386 createTool( GEOMOp::OpMultiTranslate, transTbId );
1387 createTool( GEOMOp::OpMultiRotate, transTbId );
1389 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1390 createTool( GEOMOp::OpExplode, operTbId );
1391 createTool( GEOMOp::OpPartition, operTbId );
1392 createTool( GEOMOp::OpArchimede, operTbId );
1393 createTool( GEOMOp::OpShapesOnShape, operTbId );
1394 createTool( GEOMOp::OpSharedShapes, operTbId );
1395 createTool( GEOMOp::OpTransferData, operTbId );
1397 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1398 createTool( GEOMOp::OpFillet1d, featTbId );
1399 createTool( GEOMOp::OpFillet2d, featTbId );
1400 createTool( GEOMOp::OpFillet3d, featTbId );
1401 createTool( GEOMOp::OpChamfer, featTbId );
1402 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1403 createTool( GEOMOp::OpExtrudedCut, featTbId );
1405 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1406 createTool( GEOMOp::OpEdge, buildTbId );
1407 createTool( GEOMOp::OpWire, buildTbId );
1408 createTool( GEOMOp::OpFace, buildTbId );
1409 createTool( GEOMOp::OpShell, buildTbId );
1410 createTool( GEOMOp::OpSolid, buildTbId );
1411 createTool( GEOMOp::OpCompound, buildTbId );
1413 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1414 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1415 createTool( GEOMOp::OpProperties, measureTbId );
1416 createTool( GEOMOp::OpCenterMass, measureTbId );
1417 createTool( GEOMOp::OpInertia, measureTbId );
1418 createTool( GEOMOp::OpNormale, measureTbId );
1419 createTool( separator(), measureTbId );
1420 createTool( GEOMOp::OpBoundingBox, measureTbId );
1421 createTool( GEOMOp::OpMinDistance, measureTbId );
1422 createTool( GEOMOp::OpAngle, measureTbId );
1423 createTool( GEOMOp::OpTolerance , measureTbId );
1424 createTool( separator(), measureTbId );
1425 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1426 createTool( GEOMOp::OpFreeFaces, measureTbId );
1427 createTool( separator(), measureTbId );
1428 createTool( GEOMOp::OpWhatIs, measureTbId );
1429 createTool( GEOMOp::OpCheckShape, measureTbId );
1430 createTool( GEOMOp::OpCheckCompound, measureTbId );
1431 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1432 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1433 createTool( GEOMOp::OpFastCheckInters, measureTbId );
1435 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1436 createTool( GEOMOp::OpPictureImport, picturesTbId );
1438 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1441 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1442 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1443 //@@ 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 @@//
1445 // ---- create popup menus --------------------------
1447 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1448 QString clientOCC = "(client='OCCViewer')";
1449 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1450 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1452 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1453 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1454 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1455 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1457 QString autoColorPrefix =
1458 "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') and type='Shape' and selcount=1";
1460 QtxPopupMgr* mgr = popupMgr();
1462 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1463 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1464 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1465 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1466 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1467 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1468 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1469 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1471 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1472 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1473 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1474 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1475 mgr->insert( separator(), -1, -1 ); // -----------
1477 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1478 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1479 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1480 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1481 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1482 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1483 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1484 mgr->insert( separator(), -1, -1 ); // -----------
1485 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1486 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1487 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1488 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1489 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1490 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1491 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1492 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1493 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1494 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1495 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1496 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1497 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1498 mgr->insert( separator(), dispmodeId, -1 );
1499 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1500 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1501 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1502 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1503 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1504 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1505 mgr->insert( action( GEOMOp::OpShowName ), dispmodeId, -1 ); // show name
1506 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1507 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK + " and isNameMode", QtxPopupMgr::ToggleRule );
1508 mgr->insert( separator(), -1, -1 ); // -----------
1510 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1511 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1512 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1513 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1514 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1515 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1516 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1517 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1518 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1519 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1521 // material properties
1522 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1523 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1526 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1527 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1529 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1530 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1531 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1533 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1534 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1536 mgr->insert( separator(), -1, -1 ); // -----------
1537 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1538 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1539 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1540 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1541 mgr->insert( separator(), -1, -1 ); // -----------
1543 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1544 onlyComponent = "((type='Component') and selcount=1)",
1545 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1546 types = "'Shape' 'Group' 'FieldStep'";
1548 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1549 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1551 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1552 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1554 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1555 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1557 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1559 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1560 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1561 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1562 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1563 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1564 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1565 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1566 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1567 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1568 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1569 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1570 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1571 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1572 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1573 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1574 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1575 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1576 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1577 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1578 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1579 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1580 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1581 mgr->insert( separator(), selectonlyId, -1);
1582 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1583 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1584 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1585 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1586 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1587 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1588 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1590 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1592 mgr->insert( separator(), -1, -1 ); // -----------
1593 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1594 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1595 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1596 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1598 mgr->insert( separator(), -1, -1 ); // -----------
1599 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1600 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1602 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1603 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1605 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1606 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1608 mgr->insert( separator(), -1, -1 ); // -----------
1609 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1610 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1612 mgr->insert( separator(), -1, -1 ); // -----------
1613 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1614 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1616 mgr->insert( separator(), -1, -1 ); // -----------
1617 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1618 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1620 mgr->insert( separator(), -1, -1 ); // -----------
1621 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1622 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1624 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1626 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1628 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1629 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1630 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1633 // create plugin actions and menus
1637 //=======================================================================
1638 // function : GeometryGUI::addPluginActions()
1640 //=======================================================================
1641 void GeometryGUI::addPluginActions()
1644 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1645 if (!resMgr) return;
1647 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1648 if (!appStudy) return;
1650 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1652 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1654 int id = GEOMOp::OpLastOperationID; // TODO?
1657 GEOMUtils::PluginInfo::const_iterator it;
1658 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1659 // bind action lib and label to its ID for activateOperation() method proper work
1660 GEOMUtils::PluginData pdata = (*it);
1661 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1662 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1663 std::list<GEOMUtils::ActionData>::const_iterator ait;
1664 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1665 GEOMUtils::ActionData adata = (*ait);
1668 if ( !adata.icon.empty() )
1669 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1671 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1672 QString actionName = smenus.last();
1673 actionName = actionName.toUpper().prepend( "MEN_" );
1674 smenus.removeLast();
1676 // path to action in toolbar
1677 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1678 QString actionTool = stools.last();
1679 actionTool = actionTool.toUpper().prepend( "TOP_" );
1680 stools.removeLast();
1682 QString actionStat = adata.statusText.c_str();
1683 actionStat = actionStat.toUpper().prepend( "STB_" );
1685 createAction( id, // ~ adata.label
1686 tr( actionTool.toLatin1().constData() ),
1688 tr( actionName.toLatin1().constData() ),
1689 tr( actionStat.toLatin1().constData() ),
1690 QKeySequence( tr( adata.accel.c_str() ) ),
1691 application()->desktop(),
1693 this, SLOT( OnGUIEvent() ),
1694 QString() /*shortcutAction*/ );
1697 foreach ( QString subMenu, smenus ) {
1698 QStringList subMenuList = subMenu.split( ":" );
1699 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1700 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1701 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1703 createMenu( id, menuId, -1 );
1705 if ( !stools.isEmpty() ) {
1706 QString subTool = stools[0];
1707 subTool = subTool.toUpper().prepend( "TOOL_" );
1708 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1709 createTool(id, toolId);
1712 // add action id to map
1713 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1714 myPluginActions[id] = anAction;
1721 //=======================================================================
1722 // function : GeometryGUI::activateModule()
1723 // purpose : Called when GEOM module is activated
1724 //=======================================================================
1725 bool GeometryGUI::activateModule( SUIT_Study* study )
1727 if ( CORBA::is_nil( myComponentGeom ) )
1730 bool res = SalomeApp_Module::activateModule( study );
1734 setMenuShown( true );
1735 setToolShown( true );
1737 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1738 PyGILState_STATE gstate = PyGILState_Ensure();
1739 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1740 if ( !pluginsmanager ) {
1744 PyObjWrapper result =
1745 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1746 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1747 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1751 PyGILState_Release(gstate);
1752 // end of GEOM plugins loading
1754 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1755 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1757 // Reset actions accelerator keys
1758 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1760 GUIMap::Iterator it;
1761 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1762 it.value()->activate( application()->desktop() );
1764 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1766 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1767 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1768 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1770 if ( !myCreationInfoWdg )
1771 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1772 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1773 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1776 SALOME_ListIO selected;
1777 sm->selectedObjects( selected );
1778 sm->clearSelected();
1780 SUIT_ViewManager* vm;
1781 ViewManagerList OCCViewManagers, VTKViewManagers;
1783 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1784 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1785 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1786 onViewManagerAdded(vm);
1788 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1789 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1790 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1791 onViewManagerAdded(vm);
1793 sm->setSelectedObjects( selected, true ); //NPAL 19674
1795 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1797 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1799 // 0020836 (Basic vectors and origin)
1800 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1801 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1802 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1804 _PTR(Study) studyDS = appStudy->studyDS();
1806 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1807 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1808 createOriginAndBaseVectors();
1816 //=======================================================================
1817 // function : GeometryGUI::deactivateModule()
1818 // purpose : Called when GEOM module is deactivated
1819 //=======================================================================
1820 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1822 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1824 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1826 setMenuShown( false );
1827 setToolShown( false );
1829 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1830 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1832 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1834 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1835 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1836 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1837 myCreationInfoWdg = 0;
1839 EmitSignalCloseAllDialogs();
1841 GUIMap::Iterator it;
1842 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1843 it.value()->deactivate();
1845 // Unset actions accelerator keys
1846 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1848 qDeleteAll(myOCCSelectors);
1849 myOCCSelectors.clear();
1850 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1852 qDeleteAll(myVTKSelectors);
1853 myVTKSelectors.clear();
1854 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1856 return SalomeApp_Module::deactivateModule( study );
1859 //=======================================================================
1860 // function : onWindowActivated()
1861 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1862 //=======================================================================
1863 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1868 const bool ViewOCC = ( win->getViewManager() ? win->getViewManager()->getType() == OCCViewer_Viewer::Type() : false );
1869 //const bool ViewVTK = ( win->getViewManager() ? win->getViewManager()->getType() == SVTK_Viewer::Type() : false );
1871 // disable non-OCC viewframe menu commands
1872 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1873 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1874 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1875 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1876 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1877 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1878 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1880 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1881 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1882 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1883 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1885 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1888 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1890 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1891 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
1892 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1893 if ( myCreationInfoWdg )
1894 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1897 void GeometryGUI::viewManagers( QStringList& lst ) const
1899 lst.append( OCCViewer_Viewer::Type() );
1902 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1904 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1906 qDebug( "connect" );
1907 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1908 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1909 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1910 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1911 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1912 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1913 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1914 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1916 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1917 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1919 // disable OCC selectors
1920 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1921 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1922 while ( itOCCSel.hasNext() )
1923 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1924 sr->setEnabled(true);
1926 else if ( vm->getType() == SVTK_Viewer::Type() )
1928 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1929 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1931 // disable VTK selectors
1932 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1933 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1934 while ( itVTKSel.hasNext() )
1935 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1936 sr->setEnabled(true);
1940 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1942 SUIT_ViewModel* viewer = vm->getViewModel();
1943 if ( vm->getType() == OCCViewer_Viewer::Type() )
1945 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1946 while ( itOCCSel.hasNext() )
1947 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1948 if ( sr->viewer() == viewer )
1950 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1954 if ( vm->getType() == SVTK_Viewer::Type() )
1956 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1957 while ( itVTKSel.hasNext() )
1958 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1959 if ( sr->viewer() == viewer )
1961 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1967 //================================================================================
1969 * \brief Slot called when selection changed. Shows creation info of a selected object
1971 //================================================================================
1973 void GeometryGUI::updateCreationInfo()
1975 if ( myCreationInfoWdg )
1976 myCreationInfoWdg->clear();
1978 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
1979 // if ( !myCreationInfoWdg->isVisible() )
1982 // look for a sole selected GEOM_Object
1983 GEOM::GEOM_BaseObject_var geomObj;
1985 SALOME_ListIO selected;
1986 getApp()->selectionMgr()->selectedObjects( selected );
1988 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
1989 SALOME_ListIteratorOfListIO selIt( selected );
1990 for ( ; selIt.More(); selIt.Next() )
1992 Handle(SALOME_InteractiveObject) io = selIt.Value();
1993 if ( !io->hasEntry() ) continue;
1994 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
1995 if ( !sobj ) continue;
1996 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
1997 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
1998 if ( !gobj->_is_nil() )
2000 if ( !geomObj->_is_nil() )
2001 return; // several GEOM objects selected
2005 if ( geomObj->_is_nil() ) return;
2007 // pass creation info of geomObj to myCreationInfoWdg
2009 if ( myCreationInfoWdg ) {
2011 QString operationName;
2012 myCreationInfoWdg->setOperation( icon, operationName );
2016 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2018 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2019 QString name = info->operationName.in();
2020 if ( !name.isEmpty() ) {
2022 QString plugin_name;
2023 for ( size_t i = 0; i < info->params.length(); ++i ) {
2024 myCreationInfoWdg->addParam( info->params[i].name.in(),
2025 info->params[i].value.in() );
2026 QString value = info->params[i].name.in();
2027 if( value == PLUGIN_NAME ) {
2028 plugin_name = info->params[i].value.in();
2031 QString prefix = plugin_name.isEmpty() ? "GEOM" : plugin_name;
2032 icon = resMgr->loadPixmap( prefix, tr( ("ICO_"+name).toLatin1().constData() ), false );
2033 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2034 if ( operationName.startsWith( "MEN_" ))
2035 operationName = name; // no translation
2036 myCreationInfoWdg->setOperation( icon, operationName );
2045 void GeometryGUI::onAutoBringToFront()
2047 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2048 if( !isAutoBringToFront )
2051 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2052 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2055 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2056 if (!appStudy) return;
2058 GEOM_Displayer displayer( appStudy );
2060 SALOME_View* window = displayer.GetActiveView();
2061 if ( !window ) return;
2063 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2065 SALOME_ListIO selected;
2066 getApp()->selectionMgr()->selectedObjects( selected );
2067 if (!myTopLevelIOList.IsEmpty())
2069 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2071 Handle( SALOME_InteractiveObject ) io = It.Value();
2072 bool isSelected = false;
2073 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2075 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2076 if( io->isSame( sel_io ) )
2079 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2081 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2082 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2087 myTopLevelIOList.Assign(selected);
2088 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2090 Handle( SALOME_InteractiveObject ) io = It.Value();
2091 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2092 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2095 displayer.UpdateViewer();
2096 GeometryGUI::Modified();
2099 void GeometryGUI::updateFieldColorScale()
2101 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2103 GEOM_Displayer aDisplayer( aStudy );
2104 aDisplayer.UpdateColorScale();
2108 QString GeometryGUI::engineIOR() const
2110 if ( !CORBA::is_nil( GetGeomGen() ) )
2111 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2115 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2116 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2118 theWidth = theHeight = 0;
2120 Handle(TColStd_HArray1OfByte) aTexture;
2123 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2124 aTexture = aTextureMap[ theId ];
2125 if ( aTexture.IsNull() ) {
2126 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2127 if ( !aInsOp->_is_nil() ) {
2128 CORBA::Long aWidth, aHeight;
2129 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2130 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2132 theHeight = aHeight;
2134 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2136 for (int i = 0; i < aStream->length(); i++)
2137 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2138 aTextureMap[ theId ] = aTexture;
2146 LightApp_Selection* GeometryGUI::createSelection() const
2148 return new GEOMGUI_Selection();
2151 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2153 SalomeApp_Module::contextMenuPopup( client, menu, title );
2155 getApp()->selectionMgr()->selectedObjects( lst );
2157 //Add submenu for predefined materials
2158 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2159 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2160 QtxPopupMgr* mgr = popupMgr();
2161 //get parrent for submenu
2162 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2164 QMenu* oldMenu = act->menu() ;
2169 QMenu* matMenu = new QMenu();
2170 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2172 //Get current material model for the object
2174 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2175 if ( anApp && anApp->activeViewManager() ) {
2176 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2178 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2181 QString curModel = "";
2182 if ( v.canConvert<QString>() ) curModel = v.toString();
2183 // get list of all predefined materials
2184 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2186 foreach ( QString material, materials )
2188 QAction* menAct = matMenu->addAction( material );
2189 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2190 signalMapper->setMapping( menAct, material );
2191 menAct->setCheckable( true );
2192 // Set checked if this material is current
2193 Material_Model aModel;
2194 aModel.fromResources( material );
2195 if ( !found && aModel.toProperties() == curModel ) {
2196 menAct->setChecked( true );
2200 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2201 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2202 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2203 this, SLOT( OnSetMaterial( const QString & ) ) );
2204 act->setMenu( matMenu );
2208 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2209 Handle(SALOME_InteractiveObject) io = lst.First();
2210 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2211 _PTR(Study) study = appStudy->studyDS();
2212 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2214 QString aName = QString( obj->GetName().c_str() );
2215 aName.remove( QRegExp("\\s+$") );
2221 void GeometryGUI::OnSetMaterial(const QString& theName)
2223 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2227 void GeometryGUI::createPreferences()
2229 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2231 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2232 setPreferenceProperty( genGroup, "columns", 2 );
2234 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2235 LightApp_Preferences::Selector,
2236 "Geometry", "display_mode" );
2238 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2239 LightApp_Preferences::Color, "Geometry", "shading_color" );
2241 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2242 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2244 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2245 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2247 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2248 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2250 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2251 LightApp_Preferences::Color, "Geometry", "line_color" );
2253 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2254 LightApp_Preferences::Color, "Geometry", "point_color" );
2256 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2257 LightApp_Preferences::Color, "Geometry", "isos_color" );
2259 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2260 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2262 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2263 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2265 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2266 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2268 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2269 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2271 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2272 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2274 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2275 LightApp_Preferences::Selector,
2276 "Geometry", "material" );
2278 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2279 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2285 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2286 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2288 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2289 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2291 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2292 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2294 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2295 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2297 for (int i = 0; i < nb; i++) {
2298 setPreferenceProperty( wd[i], "min", 1 );
2299 setPreferenceProperty( wd[i], "max", 5 );
2302 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2303 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2305 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2306 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2308 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2309 setPreferenceProperty( aDimGroupId, "columns", 2 );
2311 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2312 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2314 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2315 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2317 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2318 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2320 int aDimFontHeightId = addPreference( tr( "PREF_DIMENSIONS_FONT_HEIGHT" ), aDimGroupId,
2321 LightApp_Preferences::DblSpin, "Geometry", "dimensions_font_height" );
2323 setPreferenceProperty( aDimFontHeightId, "min", 1e-9 );
2324 setPreferenceProperty( aDimFontHeightId, "max", 1e+9 );
2325 setPreferenceProperty( aDimFontHeightId, "precision", 9 );
2327 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2328 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2330 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2331 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2332 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2334 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2335 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2337 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2338 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2340 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2341 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2343 QStringList aListOfLengthUnits;
2344 aListOfLengthUnits << "m";
2345 aListOfLengthUnits << "cm";
2346 aListOfLengthUnits << "mm";
2347 aListOfLengthUnits << "in.";
2348 aListOfLengthUnits << "ft.";
2350 QStringList aListOfAngUnits;
2351 aListOfAngUnits << "rad";
2352 aListOfAngUnits << "deg";
2354 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2355 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2357 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2358 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2360 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2361 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2362 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2364 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2365 setPreferenceProperty( isoGroup, "columns", 2 );
2366 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2367 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2368 setPreferenceProperty( isoU, "min", 0 );
2369 setPreferenceProperty( isoU, "max", 100000 );
2370 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2371 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2372 setPreferenceProperty( isoV, "min", 0 );
2373 setPreferenceProperty( isoV, "max", 100000 );
2375 // Quantities with individual precision settings
2376 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2377 setPreferenceProperty( precGroup, "columns", 2 );
2379 const int nbQuantities = 8;
2380 int prec[nbQuantities], ii = 0;
2381 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2382 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2383 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2384 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2385 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2386 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2387 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2388 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2389 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2390 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2391 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2392 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2393 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2394 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2395 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2396 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2398 // Set property for precision value for spinboxes
2399 for ( ii = 0; ii < nbQuantities; ii++ ){
2400 setPreferenceProperty( prec[ii], "min", -14 );
2401 setPreferenceProperty( prec[ii], "max", 14 );
2402 setPreferenceProperty( prec[ii], "precision", 2 );
2405 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2406 setPreferenceProperty( VertexGroup, "columns", 2 );
2408 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2409 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2411 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2412 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2414 // Set property for default display mode
2415 QStringList aModesList;
2416 aModesList.append( tr("MEN_WIREFRAME") );
2417 aModesList.append( tr("MEN_SHADING") );
2418 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2419 aModesList.append( tr("MEN_TEXTURE") );
2421 QList<QVariant> anIndexesList;
2422 anIndexesList.append(0);
2423 anIndexesList.append(1);
2424 anIndexesList.append(2);
2425 anIndexesList.append(3);
2427 setPreferenceProperty( dispmode, "strings", aModesList );
2428 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2430 // Set property for top level display mode
2431 QStringList aTopModesList;
2432 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2433 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2434 aTopModesList.append( tr("MEN_WIREFRAME") );
2435 aTopModesList.append( tr("MEN_SHADING") );
2436 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2438 QList<QVariant> aTopIndexesList;
2439 aTopIndexesList.append(0);
2440 aTopIndexesList.append(1);
2441 aTopIndexesList.append(2);
2442 aTopIndexesList.append(3);
2443 aTopIndexesList.append(4);
2445 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2446 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2448 // Set property for step value for spinboxes
2449 setPreferenceProperty( step, "min", 1 );
2450 setPreferenceProperty( step, "max", 10000 );
2451 setPreferenceProperty( step, "precision", 3 );
2453 // Set property for trandparency value for spinboxes
2454 setPreferenceProperty( transparency, "min", 0 );
2455 setPreferenceProperty( transparency, "max", 100 );
2457 // Set property for deflection value for spinboxes
2458 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2459 setPreferenceProperty( defl, "max", 1.0 );
2460 setPreferenceProperty( defl, "step", 1.0e-04 );
2461 setPreferenceProperty( defl, "precision", 6 );
2463 // Set property for default material
2464 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2466 // Set property vertex marker type
2467 QList<QVariant> aMarkerTypeIndicesList;
2468 QList<QVariant> aMarkerTypeIconsList;
2470 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2471 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2472 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2473 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2474 aMarkerTypeIndicesList << (i-1);
2475 aMarkerTypeIconsList << pixmap;
2478 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2479 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2481 // Set property for vertex marker scale
2482 QList<QVariant> aMarkerScaleIndicesList;
2483 QStringList aMarkerScaleValuesList;
2485 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2486 aMarkerScaleIndicesList << iii;
2487 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2490 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2491 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2493 // Scalar bar for field step presentation
2494 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2495 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2497 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2498 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2499 setPreferenceProperty( sbXPosition, "min", 0 );
2500 setPreferenceProperty( sbXPosition, "max", 1 );
2501 setPreferenceProperty( sbXPosition, "step", 0.05 );
2503 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2504 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2505 setPreferenceProperty( sbYPosition, "min", 0 );
2506 setPreferenceProperty( sbYPosition, "max", 1 );
2507 setPreferenceProperty( sbYPosition, "step", 0.05 );
2509 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2510 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2511 setPreferenceProperty( sbWidth, "min", 0 );
2512 setPreferenceProperty( sbWidth, "max", 1 );
2513 setPreferenceProperty( sbWidth, "step", 0.05 );
2515 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2516 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2517 setPreferenceProperty( sbHeight, "min", 0 );
2518 setPreferenceProperty( sbHeight, "max", 1 );
2519 setPreferenceProperty( sbHeight, "step", 0.05 );
2521 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2522 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2523 setPreferenceProperty( sbTextHeight, "min", 6 );
2524 setPreferenceProperty( sbTextHeight, "max", 24 );
2525 setPreferenceProperty( sbTextHeight, "step", 1 );
2527 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2528 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2529 setPreferenceProperty( sbNbIntervals, "min", 2 );
2530 setPreferenceProperty( sbNbIntervals, "max", 64 );
2531 setPreferenceProperty( sbNbIntervals, "step", 1 );
2533 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2534 setPreferenceProperty( originGroup, "columns", 2 );
2536 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2537 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2538 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2539 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2541 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2542 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2544 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2545 setPreferenceProperty( operationsGroup, "columns", 2 );
2547 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2548 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2550 addPreference( tr( "PREF_HIDE_INPUT_OBJECT" ), operationsGroup,
2551 LightApp_Preferences::Bool, "Geometry", "hide_input_object" );
2553 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2555 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2557 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2558 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2560 QStringList aHierarchyTypeList;
2561 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2562 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2563 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2565 QList<QVariant> aHierarchyTypeIndexesList;
2566 aHierarchyTypeIndexesList.append(0);
2567 aHierarchyTypeIndexesList.append(1);
2568 aHierarchyTypeIndexesList.append(2);
2570 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2571 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2573 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2574 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2576 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2578 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2579 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2581 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2582 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2583 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2584 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2585 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2586 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2587 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2588 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2590 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2591 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2592 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2593 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2594 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2595 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2602 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2604 if (section == "Geometry") {
2605 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2606 if (param == QString("SettingsGeomStep")) {
2607 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2608 EmitSignalDefaultStepValueChanged(spin_step);
2610 else if (param == QString("toplevel_color")) {
2611 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2612 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2614 else if (param == QString("toplevel_dm")) {
2615 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2617 else if (param == QString("scalar_bar_x_position") ||
2618 param == QString("scalar_bar_y_position") ||
2619 param == QString("scalar_bar_width") ||
2620 param == QString("scalar_bar_height") ||
2621 param == QString("scalar_bar_text_height") ||
2622 param == QString("scalar_bar_nb_intervals")) {
2623 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2625 GEOM_Displayer aDisplayer( aStudy );
2626 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2627 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2630 else if ( param == QString("dimensions_color") ||
2631 param == QString("dimensions_line_width") ||
2632 param == QString("dimensions_font_height") ||
2633 param == QString("dimensions_arrow_length") ||
2634 param == QString("dimensions_show_units") ||
2635 param == QString("dimensions_length_units") ||
2636 param == QString("dimensions_angle_units") )
2638 SalomeApp_Application* anApp = getApp();
2644 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2650 GEOM_Displayer aDisplayer( aStudy );
2652 ViewManagerList aVMs;
2653 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2654 ViewManagerList::Iterator anIt = aVMs.begin();
2655 for ( ; anIt != aVMs.end(); ++anIt )
2657 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2663 SALOME_ListIO aVisible;
2664 aViewer->GetVisible( aVisible );
2665 aDisplayer.Redisplay( aVisible, false, aViewer );
2668 aDisplayer.UpdateViewer();
2670 else if ( param.startsWith( "dependency_tree") )
2671 emit SignalDependencyTreeParamChanged( section, param );
2675 LightApp_Displayer* GeometryGUI::displayer()
2678 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2682 void GeometryGUI::setLocalSelectionMode(const int mode)
2684 myLocalSelectionMode = mode;
2687 int GeometryGUI::getLocalSelectionMode() const
2689 return myLocalSelectionMode;
2692 const char gSeparator = '_'; // character used to separate parameter names
2693 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2696 * \brief Store visual parameters
2698 * This method is called just before the study document is saved.
2699 * Store visual parameters in AttributeParameter attribute(s)
2701 void GeometryGUI::storeVisualParameters (int savePoint)
2703 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2704 if ( !appStudy || !appStudy->studyDS() )
2706 _PTR(Study) studyDS = appStudy->studyDS();
2708 // componentName is used for encoding of entries when storing them in IParameters
2709 std::string componentName = myComponentGeom->ComponentDataType();
2710 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2711 //if (!aSComponent) return;
2714 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2715 componentName.c_str(),
2717 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2719 QSet<QString> anEntriesToStoreShared;
2720 QList<SUIT_ViewManager*> lst;
2721 QList<SUIT_ViewManager*>::Iterator it;
2723 // main cycle to store parameters of displayed objects
2725 getApp()->viewManagers(lst);
2726 for (it = lst.begin(); it != lst.end(); it++) {
2727 SUIT_ViewManager* vman = *it;
2728 QString vType = vman->getType();
2729 int aMgrId = vman->getGlobalId();
2730 // saving VTK actors properties
2731 QVector<SUIT_ViewWindow*> views = vman->getViews();
2732 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2733 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
2734 ObjMap::ConstIterator o_it = anObjects.begin();
2735 for (; o_it != anObjects.end(); o_it++) {
2736 const PropMap& aProps = o_it.value();
2738 //Check that object exists in the study
2739 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2740 if ( !obj || !(aProps.count() > 0))
2742 // entry is "encoded" = it does NOT contain component adress, since it is a
2743 // subject to change on next component loading
2745 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2747 _PTR(GenericAttribute) anAttr;
2748 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2751 // remember entry of object to store shared GEOM properties
2752 // (e.g. dimension properties).
2753 if ( vType == OCCViewer_Viewer::Type() )
2755 anEntriesToStoreShared.insert( o_it.key() );
2758 QString param, occParam = vType;
2759 occParam += GEOM::sectionSeparator();
2760 occParam += QString::number(aMgrId);
2761 occParam += GEOM::sectionSeparator();
2763 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2764 param = occParam + GEOM::propertyName( GEOM::Visibility );
2765 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2768 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2769 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2770 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2773 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2774 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2776 val << QString::number(c.redF());
2777 val << QString::number(c.greenF());
2778 val << QString::number(c.blueF());
2779 param = occParam + GEOM::propertyName( GEOM::Color );
2780 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2783 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2784 param = occParam + GEOM::propertyName( GEOM::Texture );
2785 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2788 if (vType == SVTK_Viewer::Type()) {
2789 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2790 param = occParam + GEOM::propertyName( GEOM::Opacity );
2791 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2793 } else if (vType == SOCC_Viewer::Type()) {
2794 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2795 param = occParam + GEOM::propertyName( GEOM::Transparency );
2796 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2799 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2800 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2801 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2805 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2806 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2807 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2810 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2811 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2812 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2815 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
2816 param = occParam + GEOM::propertyName( GEOM::Vertices );
2817 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
2820 if (aProps.contains(GEOM::propertyName( GEOM::ShowName ))) {
2821 param = occParam + GEOM::propertyName( GEOM::ShowName );
2822 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::ShowName )).toString().toStdString());
2825 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2826 param = occParam + GEOM::propertyName( GEOM::Deflection );
2827 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2830 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2831 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2832 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2833 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2836 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2837 param = occParam + GEOM::propertyName( GEOM::Material );
2838 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2841 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2842 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2843 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2846 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2847 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2848 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2850 } // object iterator
2852 } // for (viewManagers)
2854 // store dimension attributes of objects:
2855 // since the displayed object always persists in property map, we remember the object entries
2856 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
2857 QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
2858 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
2859 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
2861 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
2862 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName);
2864 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
2866 if ( aDimensions.GetNumber() == 0 )
2871 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
2876 * \brief Restore visual parameters
2878 * This method is called after the study document is opened.
2879 * Restore visual parameters from AttributeParameter attribute(s)
2881 void GeometryGUI::restoreVisualParameters (int savePoint)
2883 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2884 if (!appStudy || !appStudy->studyDS())
2886 _PTR(Study) studyDS = appStudy->studyDS();
2888 // componentName is used for encoding of entries when storing them in IParameters
2889 std::string componentName = myComponentGeom->ComponentDataType();
2890 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2891 //if (!aSComponent) return;
2894 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2895 componentName.c_str(),
2897 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2899 std::vector<std::string> entries = ip->getEntries();
2901 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2903 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2904 QString entry (ip->decodeEntry(*entIt).c_str());
2906 // Check that the entry corresponds to a real object in the Study
2907 // as the object may be deleted or modified after the visual state is saved.
2908 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2909 if (!so) continue; //Skip the not existent entry
2911 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2912 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2914 std::vector<std::string>::iterator namesIt = paramNames.begin();
2915 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2917 // actors are stored in a map after displaying of them for
2918 // quicker access in the future: map < viewID to actor >
2919 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2920 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2922 QString viewerTypStr;
2923 QString viewIndexStr;
2925 QVector<PropMap> aListOfMap;
2927 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2929 // visual parameters are stored in strings as follows:
2930 // 1) ViewerType_ViewIndex_ParamName
2931 // 2) ViewerType_ParamName (shared for GEOM module)
2932 // '_' is used as separator and should not be used in viewer type or parameter names.
2933 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2935 bool isShared = lst.size() == 2;
2936 bool isViewer = lst.size() == 3;
2937 if ( !isShared && !isViewer )
2942 // shared visual parameters
2945 QString aParamNameStr( lst[1] );
2946 QString aValuesStr( (*valuesIt).c_str() );
2948 // shared dimension properties are stored as attribute
2949 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
2951 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
2952 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
2958 // per view visual parameters
2959 viewerTypStr = lst[0];
2960 viewIndexStr = lst[1];
2961 QString paramNameStr = lst[2];
2964 viewIndex = viewIndexStr.toUInt(&ok);
2965 if (!ok) // bad conversion of view index to integer
2968 if ((viewIndex + 1) > aListOfMap.count()) {
2969 aListOfMap.resize(viewIndex + 1);
2972 QString val((*valuesIt).c_str());
2973 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
2974 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
2975 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
2976 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
2977 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
2978 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
2979 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
2980 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
2981 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
2982 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
2983 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
2984 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
2985 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
2986 QStringList rgb = val.split(GEOM::subSectionSeparator());
2987 if (rgb.count() == 3) {
2988 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
2989 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
2991 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
2992 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
2993 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
2994 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
2995 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
2996 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
2997 } else if (paramNameStr == GEOM::propertyName( GEOM::ShowName )) {
2998 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::ShowName ), val == "true" || val == "1");
2999 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3000 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3001 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3002 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3003 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3004 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3005 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3006 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3007 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3008 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3010 } // for names/parameters iterator
3012 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3014 for (int index = 0; index < aListOfMap.count(); index++) {
3015 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
3017 //Get Visibility property of the current PropMap
3018 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3019 SUIT_ViewManager* vman = lst.at(index);
3020 SUIT_ViewModel* vmodel = vman->getViewModel();
3021 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
3024 } // for entries iterator
3026 // update all VTK and OCC views
3027 QList<SUIT_ViewManager*> lst;
3028 getApp()->viewManagers(lst);
3029 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3030 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3033 if (vmodel->getType() == SVTK_Viewer::Type()) {
3034 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3035 vtkView->getRenderer()->ResetCameraClippingRange();
3038 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3039 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3040 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3047 // Compute current name mode of the viewer
3048 void UpdateNameMode( SalomeApp_Application* app )
3050 bool isMode = false;
3051 SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() );
3052 SUIT_ViewWindow* viewWindow = app->desktop()->activeWindow();
3053 GEOM_Displayer displayer( aStudy );
3054 int aMgrId = viewWindow->getViewManager()->getGlobalId();
3056 SALOME_ListIO anIOlst;
3057 displayer.GetActiveView()->GetVisible( anIOlst );
3059 for ( SALOME_ListIteratorOfListIO It( anIOlst ); It.More(); It.Next() ) {
3060 Handle( SALOME_InteractiveObject ) io = It.Value();
3061 QVariant v = aStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::ShowName ), QVariant() );
3062 bool isIONameMode = v.isValid() ? v.toBool() : false;
3066 viewWindow->setProperty( "NameMode", isMode );
3069 void GeometryGUI::onViewAboutToShow()
3071 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3072 QAction* a = action( GEOMOp::OpSwitchVectors );
3073 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3074 QAction* aNameAction = action( GEOMOp::OpSwitchName );
3076 a->setEnabled(true);
3077 bool vmode = window->property("VectorsMode").toBool();
3078 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3079 aVerticesAction->setEnabled(true);
3080 vmode = window->property("VerticesMode").toBool();
3081 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3082 UpdateNameMode( getApp() );
3083 aNameAction->setEnabled(true);
3084 vmode = window->property("NameMode").toBool();
3085 aNameAction->setText ( vmode == 1 ? tr( "MEN_NAME_MODE_OFF" ) : tr("MEN_NAME_MODE_ON") );
3087 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3088 a->setEnabled(false);
3089 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3090 aVerticesAction->setEnabled(false);
3091 aNameAction->setText ( tr("MEN_NAME_MODE_ON") );
3092 aNameAction->setEnabled(false);
3097 \brief Return action by id
3098 \param id identifier of the action
3101 QAction* GeometryGUI::getAction(const int id) {
3106 \brief GEOM module message handler
3108 This method can be re-implemented in the subclasses.
3109 This is a GEOM module message handler.
3111 \param msg the message received.
3113 void GeometryGUI::message(const QString& msg)
3116 QStringList data = msg.split("/");
3117 const int nbStrings = data.count();
3119 if (nbStrings > 0) {
3120 if (data[0] == "modified") {
3122 QString anIOR = nbStrings > 1 ? data[1] : QString();
3124 if ( anIOR.isEmpty() ) {
3128 // Get the geom object.
3129 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3131 // Clear the shape buffer
3132 GeometryGUI::ClearShapeBuffer (anObj);
3138 \brief Clears the shape buffer.
3140 This is a static method. It clears the shape buffer.
3142 \param theObj the object
3144 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3146 if ( CORBA::is_nil( theObj ) )
3149 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3150 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3151 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3153 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3158 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3163 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3167 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3168 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3169 _PTR(GenericAttribute) anAttr;
3170 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3171 _PTR(AttributeIOR) anIOR ( anAttr );
3172 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3173 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3179 \brief Returns the object from IOR.
3181 This is a static method. It returns the object from its IOR.
3183 \param IOR object IOR
3184 \return GEOM object.
3186 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3188 GEOM::GEOM_Object_var geomObj;
3189 if ( !IOR.isEmpty() ) {
3190 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3191 ( IOR.toLatin1().constData() );
3192 if ( !CORBA::is_nil( corbaObj ) )
3193 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3195 return geomObj._retn();
3199 \brief Returns IOR of the object.
3201 This is a static method. It returns the object's IOR.
3203 \param object the GEOM object.
3204 \return object's IOR.
3206 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3209 if ( !CORBA::is_nil( object ) ) {
3210 CORBA::String_var anIOR =
3211 SalomeApp_Application::orb()->object_to_string( object );
3218 \brief Check if this object is can't be renamed in place
3220 This method can be re-implemented in the subclasses.
3221 Return true in case if object isn't reference or component (module root).
3223 \param entry column id
3224 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3226 bool GeometryGUI::renameAllowed( const QString& entry) const {
3228 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3229 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3230 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3232 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3236 Rename object by entry.
3237 \param entry entry of the object
3238 \param name new name of the object
3239 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3241 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3243 bool result = false;
3245 SalomeApp_Application* app =
3246 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3247 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3252 _PTR(Study) aStudy = appStudy->studyDS();
3257 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3259 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3263 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3264 _PTR(GenericAttribute) anAttr;
3266 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3267 _PTR(AttributeName) aName (anAttr);
3269 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3270 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3271 if (!CORBA::is_nil(anObj)) {
3272 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3273 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3281 void GeometryGUI::updateMaterials()
3283 LightApp_Preferences* pref = preferences();
3285 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3286 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3287 if ( !materials.contains( currentMaterial ) )
3288 // user material set as default in the preferences, might be removed
3289 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3291 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3293 setPreferenceProperty( prefItem->id(),
3294 "strings", materials );
3295 prefItem->retrieve();
3301 \brief Check if the module allows "drag" operation of its objects.
3303 Overloaded from LightApp_Module class.
3305 This function is a part of the general drag-n-drop mechanism.
3306 The goal of this function is to check data object passed as a parameter
3307 and decide if it can be dragged or no.
3309 \param what data object being tested for drag operation
3310 \return \c true if module allows dragging of the specified object
3311 \sa isDropAccepted(), dropObjects()
3313 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3315 // we allow dragging object under root and object from folder
3316 int aLevel = what->level();
3317 bool anObjectInFolder = false;
3319 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3321 _PTR(SObject) aSO = dataObj->object();
3323 _PTR(GenericAttribute) anAttr;
3324 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3325 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3326 _PTR(AttributeLocalID) aLocalID( anAttr );
3327 anObjectInFolder = aLocalID->Value() == 999;
3332 return aLevel == 2 || anObjectInFolder;
3336 \brief Check if the module allows "drop" operation on the given object.
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 used as a target for the "drop" operation.
3343 The processing of the drop operation itself is done in the dropObjects() function.
3345 \param where target data object
3346 \return \c true if module supports dropping on the \a where data object
3347 \sa isDraggable(), dropObjects()
3349 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3351 // we allow dropping into folder and top-level GEOM object
3352 int aLevel = where->level();
3353 bool isFolder = false;
3355 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3357 _PTR(SObject) aSO = dataObj->object();
3359 _PTR(GenericAttribute) anAttr;
3360 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3361 _PTR(AttributeLocalID) aLocalID( anAttr );
3362 isFolder = aLocalID->Value() == 999;
3367 return aLevel == 1 || isFolder;
3371 \brief Complete drag-n-drop operation.
3373 Overloaded from LightApp_Module class.
3375 This function is a part of the general drag-n-drop mechanism.
3376 Its goal is to handle dropping of the objects being dragged according
3377 to the chosen operation (move). The dropping is performed in the
3378 context of the parent data object \a where and the \a row (position in the
3379 children index) at which the data should be dropped. If \a row is equal to -1,
3380 this means that objects are added to the end of the children list.
3382 \param what objects being dropped
3383 \param where target data object
3384 \param row child index at which the drop operation is performed
3385 \param action drag-n-drop operation (Qt::DropAction) - move
3387 \sa isDraggable(), isDropAccepted()
3389 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3390 const int row, Qt::DropAction action )
3392 if (action != Qt::CopyAction && action != Qt::MoveAction)
3393 return; // unsupported action
3395 // get parent object
3396 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3397 if ( !dataObj ) return; // wrong parent
3398 _PTR(SObject) parentObj = dataObj->object();
3400 // Find the current Study and StudyBuilder
3401 _PTR(Study) aStudy = parentObj->GetStudy();
3402 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3403 // collect all parents of the target node
3404 QStringList parentIDs;
3405 _PTR(SObject) parent = parentObj;
3406 while( !parent->IsNull() ) {
3407 parentIDs << parent->GetID().c_str();
3408 parent = aUseCaseBuilder->GetFather(parent);
3411 // collect objects being dropped
3412 GEOM::object_list_var objects = new GEOM::object_list();
3413 objects->length( what.count() );
3415 for ( int i = 0; i < what.count(); i++ ) {
3416 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3417 if ( !dataObj ) continue; // skip wrong objects
3418 _PTR(SObject) sobj = dataObj->object();
3419 // check that dropped object is not a parent of target object
3420 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3421 return; // it's not allowed to move node into it's child
3423 objects[i] = _CAST(SObject, sobj)->GetSObject();
3426 objects->length( count );
3428 // call engine function
3429 GetGeomGen()->Move( objects.in(), // what
3430 _CAST(SObject, parentObj)->GetSObject(), // where
3433 // update Object browser
3434 getApp()->updateObjectBrowser( false );