1 // Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : GeometryGUI.cxx
23 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
25 #include <Standard_math.hxx> // E.A. must be included before Python.h to fix compilation on windows
27 #undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
30 #include "GeometryGUI.h"
31 #include "GeometryGUI_Operations.h"
32 #include "GEOMPluginGUI.h"
33 #include "GEOMGUI_XmlHandler.h"
34 #include "GEOMGUI_OCCSelector.h"
35 #include "GEOMGUI_Selection.h"
36 #include "GEOMGUI_CreationInfoWdg.h"
37 #include "GEOMGUI_DimensionProperty.h"
38 #include "GEOM_Constants.h"
39 #include "GEOM_Displayer.h"
40 #include "GEOM_AISShape.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 <SalomeApp_Application.h>
69 #include <SalomeApp_DataObject.h>
70 #include <SalomeApp_Study.h>
71 #include <SalomeApp_Tools.h>
73 #include <LightApp_SelectionMgr.h>
74 #include <LightApp_VTKSelector.h>
75 #include <LightApp_DataObject.h>
76 #include <LightApp_Preferences.h>
78 #include <SALOME_LifeCycleCORBA.hxx>
79 // #include <SALOME_ListIO.hxx>
80 #include <SALOME_ListIteratorOfListIO.hxx>
82 #include <SALOMEDSClient_ClientFactory.hxx>
83 #include <SALOMEDSClient_IParameters.hxx>
85 #include <SALOMEDS_SObject.hxx>
87 #include <Basics_OCCTVersion.hxx>
98 #include <QSignalMapper>
100 #include <AIS_Drawer.hxx>
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 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
110 #include <TColStd_HArray1OfByte.hxx>
112 #include <Graphic3d_HArray1OfBytes.hxx>
115 #include <utilities.h>
117 #include <vtkCamera.h>
118 #include <vtkRenderer.h>
120 #include <Standard_Failure.hxx>
121 #include <Standard_ErrorHandler.hxx>
123 #include "GEOM_version.h"
124 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
127 Standard_EXPORT CAM_Module* createModule() {
128 return new GeometryGUI();
131 Standard_EXPORT char* getModuleVersion() {
132 return (char*)GEOM_VERSION_STR;
136 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
138 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
140 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
142 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
143 if (CORBA::is_nil(myComponentGeom))
145 return GeometryGUI::myComponentGeom;
148 bool GeometryGUI::InitGeomGen()
151 if ( CORBA::is_nil( myComponentGeom ) ) return false;
155 //=======================================================================
156 // function : ClientSObjectToObject
158 //=======================================================================
159 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
161 _PTR(GenericAttribute) anAttr;
162 CORBA::Object_var anObj;
164 std::string aValue = theSObject->GetIOR();
165 if (strcmp(aValue.c_str(), "") != 0) {
166 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
167 anObj = anORB->string_to_object(aValue.c_str());
170 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
172 return anObj._retn();
175 //=======================================================================
176 // function : ClientStudyToStudy
178 //=======================================================================
179 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
181 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
182 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
183 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
184 int aStudyID = theStudy->StudyId();
185 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
186 return aDSStudy._retn();
189 void GeometryGUI::Modified (bool theIsUpdateActions)
191 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
192 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
193 appStudy->Modified();
194 if ( theIsUpdateActions )
195 app->updateActions();
200 //=======================================================================
201 // function : GeometryGUI::GeometryGUI()
202 // purpose : Constructor
203 //=======================================================================
204 GeometryGUI::GeometryGUI() :
205 SalomeApp_Module( "GEOM" ),
208 if ( CORBA::is_nil( myComponentGeom ) )
210 Engines::EngineComponent_var comp =
211 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
212 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
215 myActiveDialogBox = 0;
217 gp_Pnt origin = gp_Pnt(0., 0., 0.);
218 gp_Dir direction = gp_Dir(0., 0., 1.);
219 myWorkingPlane = gp_Ax3(origin, direction);
222 myLocalSelectionMode = GEOM_ALLOBJECTS;
224 myCreationInfoWdg = 0;
226 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
228 Q_INIT_RESOURCE( GEOMGUI );
231 //=======================================================================
232 // function : GeometryGUI::~GeometryGUI()
233 // purpose : Destructor
234 //=======================================================================
235 GeometryGUI::~GeometryGUI()
237 while (!myOCCSelectors.isEmpty())
238 delete myOCCSelectors.takeFirst();
240 while (!myVTKSelectors.isEmpty())
241 delete myVTKSelectors.takeFirst();
243 qDeleteAll(myGUIMap);
246 //=======================================================================
247 // function : GeometryGUI::getLibrary()
248 // purpose : get or load GUI library by name [ internal ]
249 //=======================================================================
250 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
251 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
253 if ( !myGUIMap.contains( libraryName ) ) {
254 // try to load library if it is not loaded yet
256 QString dirs = getenv( "LD_LIBRARY_PATH" );
259 QString dirs = getenv( "PATH" );
262 if ( !dirs.isEmpty() ) {
263 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
264 QListIterator<QString> it( dirList ); it.toBack();
265 while ( it.hasPrevious() ) {
266 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
268 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
269 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
271 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
272 continue; // continue search further
274 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
275 if ( osdF != NULL ) {
276 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
277 GEOMGUI* libGUI = (*func)( this );
279 myGUIMap[ libraryName ] = libGUI;
280 break; // found and loaded!
287 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
290 //=======================================================================
291 // function : GeometryGUI::getPluginLibrary()
292 // purpose : get or load GUI Plugin library by name [ internal ]
293 //=======================================================================
294 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
295 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
297 if ( !myGUIMap.contains( libraryName ) ) {
298 // try to load library if it is not loaded yet
300 QString dirs = getenv( "LD_LIBRARY_PATH" );
303 QString dirs = getenv( "PATH" );
306 if ( !dirs.isEmpty() ) {
307 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
308 QListIterator<QString> it( dirList ); it.toBack();
309 while ( it.hasPrevious() ) {
310 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
312 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
313 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
315 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
316 continue; // continue search further
318 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
319 if ( osdF != NULL ) {
320 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
321 GEOMPluginGUI* libGUI = (*func)( this );
323 myGUIMap[ libraryName ] = libGUI;
324 break; // found and loaded!
331 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
334 //=======================================================================
335 // function : GeometryGUI::ActiveWorkingPlane()
336 // purpose : Activate Working Plane View
337 //=======================================================================
338 void GeometryGUI::ActiveWorkingPlane()
340 gp_Dir DZ = myWorkingPlane.Direction();
341 gp_Dir DY = myWorkingPlane.YDirection();
343 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
344 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
345 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
348 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
350 Handle(V3d_View) view3d = vw->getViewPort()->getView();
352 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
353 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
357 else if ( ViewVTK ) {
358 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
360 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
362 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
363 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
364 camera->SetFocalPoint(0,0,0);
371 //=======================================================================
372 // function : GeometryGUI::SetActiveDialogBox()
373 // purpose : Set active dialog box
374 //=======================================================================
375 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
377 myActiveDialogBox = (QDialog*)aDlg;
380 //=======================================================================
381 // function : GeometryGUI::EmitSignalDeactivateDialog()
382 // purpose : Emit a signal to deactivate the active dialog Box
383 //=======================================================================
384 void GeometryGUI::EmitSignalDeactivateDialog()
386 emit SignalDeactivateActiveDialog();
389 //=======================================================================
390 // function : GeometryGUI::EmitSignalCloseAllDialogs()
391 // purpose : Emit a signal to close all non modal dialogs box
392 //=======================================================================
393 void GeometryGUI::EmitSignalCloseAllDialogs()
395 emit SignalCloseAllDialogs();
398 //=======================================================================
399 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
400 // purpose : Emit a signal to inform that default real spin box step has
402 //=======================================================================
403 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
405 emit SignalDefaultStepValueChanged(newVal);
408 //=======================================================================
409 // function : GeometryGUI::OnGUIEvent()
410 // purpose : common slot for all menu/toolbar actions
411 //=======================================================================
412 void GeometryGUI::OnGUIEvent()
414 const QObject* obj = sender();
415 if ( !obj || !obj->inherits( "QAction" ) )
417 int id = actionId((QAction*)obj);
422 //=======================================================================
423 // function : GeometryGUI::OnGUIEvent()
424 // purpose : manage all events on GUI [static]
425 //=======================================================================
426 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
428 SUIT_Application* anApp = application();
430 SUIT_Desktop* desk = anApp->desktop();
432 // check type of the active viewframe
433 SUIT_ViewWindow* window = desk->activeWindow();
434 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
435 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
436 // if current viewframe is not of OCC and not of VTK type - return immediately
437 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
438 QList<int> NotViewerDependentCommands;
439 NotViewerDependentCommands << GEOMOp::OpDelete
441 << GEOMOp::OpShowOnly
442 << GEOMOp::OpShowOnlyChildren
443 << GEOMOp::OpDiscloseChildren
444 << GEOMOp::OpConcealChildren
445 << GEOMOp::OpUnpublishObject
446 << GEOMOp::OpPublishObject
447 << GEOMOp::OpPointMarker
448 << GEOMOp::OpCreateFolder
449 << GEOMOp::OpSortChildren;
450 if ( !ViewOCC && !ViewVTK && !NotViewerDependentCommands.contains( id ) ) {
451 // activate OCC viewer
452 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
455 // fix for IPAL9103, point 2
456 if ( CORBA::is_nil( GetGeomGen() ) ) {
457 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
462 // find corresponding GUI library
464 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
465 createOriginAndBaseVectors(); // internal operation
467 case GEOMOp::OpImport: // MENU FILE - IMPORT
468 case GEOMOp::OpExport: // MENU FILE - EXPORT
469 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
470 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
471 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
472 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
473 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
474 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
475 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
476 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
477 case GEOMOp::OpDelete: // MENU EDIT - DELETE
478 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
479 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
480 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
481 case GEOMOp::OpColor: // POPUP MENU - COLOR
482 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
483 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
484 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
485 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
486 case GEOMOp::OpIsos: // POPUP MENU - ISOS
487 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
488 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
489 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
490 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
491 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
492 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
493 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
494 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
495 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
496 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
497 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
498 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
499 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
500 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
501 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
502 case GEOMOp::OpClsBringToFront: //
503 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
504 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
505 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
506 libName = "GEOMToolsGUI";
508 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
509 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
510 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
511 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
512 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
513 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
514 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
515 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
516 case GEOMOp::OpHide: // MENU VIEW - ERASE
517 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
518 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
519 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
520 case GEOMOp::OpShading: // POPUP MENU - SHADING
521 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
522 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
523 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
524 libName = "DisplayGUI";
526 case GEOMOp::OpPoint: // MENU BASIC - POINT
527 case GEOMOp::OpLine: // MENU BASIC - LINE
528 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
529 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
530 case GEOMOp::OpArc: // MENU BASIC - ARC
531 case GEOMOp::OpVector: // MENU BASIC - VECTOR
532 case GEOMOp::OpPlane: // MENU BASIC - PLANE
533 case GEOMOp::OpCurve: // MENU BASIC - CURVE
534 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
535 libName = "BasicGUI";
537 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
538 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
539 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
540 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
541 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
542 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
543 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
544 libName = "PrimitiveGUI";
546 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
547 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
548 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
549 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
550 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
551 libName = "GenerationGUI";
553 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
554 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
555 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
556 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
558 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
560 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
561 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
562 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
563 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
564 libName = "EntityGUI";
566 case GEOMOp::OpEdge: // MENU BUILD - EDGE
567 case GEOMOp::OpWire: // MENU BUILD - WIRE
568 case GEOMOp::OpFace: // MENU BUILD - FACE
569 case GEOMOp::OpShell: // MENU BUILD - SHELL
570 case GEOMOp::OpSolid: // MENU BUILD - SOLID
571 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
572 libName = "BuildGUI";
574 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
575 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
576 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
577 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
578 libName = "BooleanGUI";
580 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
581 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
582 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
583 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
584 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
585 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
586 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
587 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
588 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
589 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
590 libName = "TransformationGUI";
592 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
593 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
594 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
595 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
596 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
597 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
598 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
599 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
600 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
601 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
602 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
603 #ifdef DEBUG_CURVE_CREATOR
604 // for debug purposes, to be removed
605 case GEOMOp::OpCurveCreator: // MENU OPERATION - CURVE CREATOR
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 libName = "RepairGUI";
628 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
629 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
630 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
631 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
632 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
633 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
634 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
635 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
636 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
637 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
638 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
639 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
640 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
641 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
642 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
643 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
644 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
645 libName = "MeasureGUI";
647 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
648 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
649 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
650 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
651 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
652 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
653 libName = "GroupGUI";
655 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
656 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
657 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
658 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
659 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
660 libName = "BlocksGUI";
662 case GEOMOp::OpExportXAO: // MENU NEW ENTITY - IMPORTEXPORT - EXPORTXAO
663 case GEOMOp::OpImportXAO: // MENU NEW ENTITY - IMPORTEXPORT - IMPORTXAO
664 libName = "ImportExportGUI";
666 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
667 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
668 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
669 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
670 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
671 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
672 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
673 //libName = "AdvancedGUI";
676 if (myPluginActions.contains(id)) {
677 libName = myPluginActions[id].first;
679 GEOMPluginGUI* library = 0;
680 if ( !libName.isEmpty() ) {
682 libName = QString( "lib" ) + libName + ".so";
684 libName = libName + ".dll";
686 library = getPluginLibrary( libName );
689 // call method of corresponding GUI library
691 //QString action ("%1");
692 //action = action.arg(id);
694 //if( !theParam.isValid() )
695 library->OnGUIEvent( myPluginActions[id].second, desk );
697 // library->OnGUIEvent( id, desk, theParam);
700 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
702 updateCreationInfo();
708 GEOMGUI* library = 0;
709 if ( !libName.isEmpty() ) {
711 libName = QString( "lib" ) + libName + ".so";
713 libName = libName + ".dll";
715 library = getLibrary( libName );
718 // call method of corresponding GUI library
720 if( !theParam.isValid() )
721 library->OnGUIEvent( id, desk );
723 library->OnGUIEvent( id, desk, theParam);
726 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
728 updateCreationInfo();
731 //=================================================================================
732 // function : GeometryGUI::activateOperation()
734 //=================================================================================
735 bool GeometryGUI::activateOperation( int actionId )
737 OnGUIEvent(actionId);
741 //=================================================================================
742 // function : GeometryGUI::activateOperation()
744 //=================================================================================
745 bool GeometryGUI::activateOperation( const QString& actionId )
749 int id = actionId.toInt(&isOk);
756 //=================================================================================
757 // function : GeometryGUI::activateOperation()
759 //=================================================================================
760 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
764 QString pluginLib = plugin;
765 // TODO: if <plugin> is a plugin name, find plugin library name
766 if (myPluginLibs.contains(plugin))
767 pluginLib = myPluginLibs[plugin];
769 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
770 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
771 const PluginAction& anAction = actionsIter.value();
772 if (anAction.first == pluginLib && anAction.second == actionId) {
773 // activate operation
774 OnGUIEvent(actionsIter.key());
782 //=================================================================================
783 // function : GeometryGUI::OnKeyPress()
784 // purpose : Called when any key is pressed by user [static]
785 //=================================================================================
786 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
788 if ( !application() )
790 foreach ( GEOMGUI* lib, myGUIMap )
791 lib->OnKeyPress( e, application()->desktop(), w );
794 //=================================================================================
795 // function : GeometryGUI::OnMouseMove()
796 // purpose : Manages mouse move events [static]
797 //=================================================================================
798 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
800 if ( !application() )
802 foreach ( GEOMGUI* lib, myGUIMap )
803 lib->OnMouseMove( e, application()->desktop(), w );
806 //=================================================================================
807 // function : GeometryGUI::OnMouseRelease()
808 // purpose : Manages mouse release events [static]
809 //=================================================================================
810 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
812 if ( !application() )
814 foreach ( GEOMGUI* lib, myGUIMap )
815 lib->OnMouseRelease( e, application()->desktop(), w );
818 //=================================================================================
819 // function : GeometryGUI::OnMousePress()
820 // purpose : Manage mouse press events [static]
821 //=================================================================================
822 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
824 if ( !application() )
826 foreach ( GEOMGUI* lib, myGUIMap )
827 lib->OnMousePress( e, application()->desktop(), w );
830 //=======================================================================
831 // function : createGeomAction
833 //=======================================================================
834 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
835 const int accel, const bool toggle, const QString& shortcutAction )
837 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
838 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
839 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
841 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
843 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
844 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
846 application()->desktop(),
848 this, SLOT( OnGUIEvent() ),
852 //=======================================================================
853 // function : createOriginAndBaseVectors
855 //=======================================================================
856 void GeometryGUI::createOriginAndBaseVectors()
858 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
859 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
861 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
865 _PTR(Study) studyDS = appStudy->studyDS();
866 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
867 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
868 if ( !aBasicOperations->_is_nil() ) {
869 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
870 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
871 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
872 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
873 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
874 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
876 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
877 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
878 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
879 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
880 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
882 getApp()->updateObjectBrowser( true );
888 //=======================================================================
889 // function : GeometryGUI::initialize()
890 // purpose : Called when GEOM module is created
891 //=======================================================================
892 void GeometryGUI::initialize( CAM_Application* app )
894 SalomeApp_Module::initialize( app );
896 // ----- create actions --------------
898 createGeomAction( GEOMOp::OpImport, "IMPORT", "", Qt::ControlModifier + Qt::Key_I );
899 createGeomAction( GEOMOp::OpExport, "EXPORT", "", Qt::ControlModifier + Qt::Key_E );
901 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
903 createGeomAction( GEOMOp::OpPoint, "POINT" );
904 createGeomAction( GEOMOp::OpLine, "LINE" );
905 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
906 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
907 createGeomAction( GEOMOp::OpArc, "ARC" );
908 createGeomAction( GEOMOp::OpCurve, "CURVE" );
909 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
910 createGeomAction( GEOMOp::OpVector, "VECTOR" );
911 createGeomAction( GEOMOp::OpPlane, "PLANE" );
912 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
913 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
915 createGeomAction( GEOMOp::OpBox, "BOX" );
916 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
917 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
918 createGeomAction( GEOMOp::OpTorus, "TORUS" );
919 createGeomAction( GEOMOp::OpCone, "CONE" );
920 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
921 createGeomAction( GEOMOp::OpDisk, "DISK" );
923 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
924 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
925 createGeomAction( GEOMOp::OpFilling, "FILLING" );
926 createGeomAction( GEOMOp::OpPipe, "PIPE" );
927 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
929 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
930 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
931 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
932 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
933 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
935 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
936 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
938 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
940 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
941 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
943 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
944 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
945 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
946 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
948 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
950 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
952 createGeomAction( GEOMOp::OpEdge, "EDGE" );
953 createGeomAction( GEOMOp::OpWire, "WIRE" );
954 createGeomAction( GEOMOp::OpFace, "FACE" );
955 createGeomAction( GEOMOp::OpShell, "SHELL" );
956 createGeomAction( GEOMOp::OpSolid, "SOLID" );
957 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
959 createGeomAction( GEOMOp::OpFuse, "FUSE" );
960 createGeomAction( GEOMOp::OpCommon, "COMMON" );
961 createGeomAction( GEOMOp::OpCut, "CUT" );
962 createGeomAction( GEOMOp::OpSection, "SECTION" );
964 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
965 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
966 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
967 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
968 createGeomAction( GEOMOp::OpScale, "SCALE" );
969 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
970 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
971 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
972 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
974 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
975 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
976 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
977 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
978 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
979 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
980 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
981 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
982 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
983 #ifdef DEBUG_CURVE_CREATOR
984 // for debug purposes, to be removed
985 createGeomAction( GEOMOp::OpCurveCreator, "CURVE_CREATOR" );
987 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
988 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
990 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
991 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
992 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
994 createGeomAction( GEOMOp::OpSewing, "SEWING" );
995 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
996 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
997 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
998 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
999 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
1000 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
1001 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
1002 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
1003 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
1004 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
1005 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
1006 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1007 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1008 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1009 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1010 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1012 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1013 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1014 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1015 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1016 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1017 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1018 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1019 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1020 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1022 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1023 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1024 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1025 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1026 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1027 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1029 #ifdef _DEBUG_ // PAL16821
1030 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1033 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1034 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1035 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1036 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1037 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1038 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1039 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1040 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1041 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1042 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1043 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1044 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1045 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1046 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1047 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1048 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1049 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1050 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1051 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1052 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1053 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1054 createGeomAction( GEOMOp::OpHide, "ERASE" );
1056 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1057 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1058 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1059 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1060 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1061 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1062 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 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::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1083 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1085 // Create actions for increase/decrease transparency shortcuts
1086 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1087 "Geometry:Increase transparency");
1088 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1089 "Geometry:Decrease transparency");
1091 // Create actions for increase/decrease number of isolines
1092 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1093 "Geometry:Increase number of isolines");
1094 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1095 "Geometry:Decrease number of isolines");
1097 // Import/Export XAO
1098 createGeomAction( GEOMOp::OpExportXAO, "EXPORTXAO" );
1099 createGeomAction( GEOMOp::OpImportXAO, "IMPORTXAO" );
1101 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1102 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1103 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1104 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1105 //@@ 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 @@//
1107 // ---- create menus --------------------------
1109 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1110 createMenu( separator(), fileId, 10 );
1111 createMenu( GEOMOp::OpImport, fileId, 10 );
1112 createMenu( GEOMOp::OpExport, fileId, 10 );
1113 int impexpId = createMenu( tr( "MEN_IMPORTEXPORT" ), fileId, -1, 10 );
1114 createMenu( GEOMOp::OpExportXAO, impexpId, -1 );
1115 createMenu( GEOMOp::OpImportXAO, impexpId, -1 );
1116 createMenu( separator(), fileId, -1 );
1118 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1119 createMenu( GEOMOp::OpDelete, editId, -1 );
1121 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1123 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1124 createMenu( GEOMOp::OpPoint, basicId, -1 );
1125 createMenu( GEOMOp::OpLine, basicId, -1 );
1126 createMenu( GEOMOp::OpCircle, basicId, -1 );
1127 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1128 createMenu( GEOMOp::OpArc, basicId, -1 );
1129 createMenu( GEOMOp::OpCurve, basicId, -1 );
1130 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1131 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1132 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1133 createMenu( separator(), basicId, -1 );
1134 createMenu( GEOMOp::OpVector, basicId, -1 );
1135 createMenu( GEOMOp::OpPlane, basicId, -1 );
1136 createMenu( GEOMOp::OpLCS, basicId, -1 );
1137 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1139 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1140 createMenu( GEOMOp::OpBox, primId, -1 );
1141 createMenu( GEOMOp::OpCylinder, primId, -1 );
1142 createMenu( GEOMOp::OpSphere, primId, -1 );
1143 createMenu( GEOMOp::OpTorus, primId, -1 );
1144 createMenu( GEOMOp::OpCone, primId, -1 );
1145 createMenu( GEOMOp::OpRectangle, primId, -1 );
1146 createMenu( GEOMOp::OpDisk, primId, -1 );
1147 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1149 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1150 createMenu( GEOMOp::OpPrism, genId, -1 );
1151 createMenu( GEOMOp::OpRevolution, genId, -1 );
1152 createMenu( GEOMOp::OpFilling, genId, -1 );
1153 createMenu( GEOMOp::OpPipe, genId, -1 );
1154 #if OCC_VERSION_LARGE > 0x06050300
1155 createMenu( GEOMOp::OpPipePath, genId, -1 );
1158 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1159 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1160 //@@ 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 @@//
1162 createMenu( separator(), newEntId, -1 );
1164 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1165 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1166 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1167 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1168 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1169 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1171 createMenu( separator(), newEntId, -1 );
1173 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1174 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1175 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1177 createMenu( separator(), newEntId, -1 );
1179 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1180 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1181 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1182 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1183 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1185 createMenu( separator(), newEntId, -1 );
1187 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1189 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1190 createMenu( GEOMOp::OpEdge, buildId, -1 );
1191 createMenu( GEOMOp::OpWire, buildId, -1 );
1192 createMenu( GEOMOp::OpFace, buildId, -1 );
1193 createMenu( GEOMOp::OpShell, buildId, -1 );
1194 createMenu( GEOMOp::OpSolid, buildId, -1 );
1195 createMenu( GEOMOp::OpCompound, buildId, -1 );
1197 createMenu( separator(), newEntId, -1 );
1199 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1201 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1204 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1206 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1207 createMenu( GEOMOp::OpFuse, boolId, -1 );
1208 createMenu( GEOMOp::OpCommon, boolId, -1 );
1209 createMenu( GEOMOp::OpCut, boolId, -1 );
1210 createMenu( GEOMOp::OpSection, boolId, -1 );
1212 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1213 createMenu( GEOMOp::OpTranslate, transId, -1 );
1214 createMenu( GEOMOp::OpRotate, transId, -1 );
1215 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1216 createMenu( GEOMOp::OpMirror, transId, -1 );
1217 createMenu( GEOMOp::OpScale, transId, -1 );
1218 createMenu( GEOMOp::OpOffset, transId, -1 );
1219 createMenu( GEOMOp::OpProjection, transId, -1 );
1220 createMenu( separator(), transId, -1 );
1221 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1222 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1224 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1225 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1226 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1227 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1229 createMenu( separator(), operId, -1 );
1231 createMenu( GEOMOp::OpPartition, operId, -1 );
1232 createMenu( GEOMOp::OpArchimede, operId, -1 );
1233 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1234 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1236 createMenu( separator(), operId, -1 );
1238 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1239 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1240 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1241 createMenu( GEOMOp::OpChamfer, operId, -1 );
1242 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1243 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1244 #ifdef DEBUG_CURVE_CREATOR
1245 // for debug purposes, to be removed
1246 createMenu( separator(), operId, -1 );
1247 createMenu( GEOMOp::OpCurveCreator, operId, -1 );
1249 //createMenu( GEOMOp::OpClipping, operId, -1 );
1251 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1252 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1253 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1254 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1255 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1256 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1257 createMenu( GEOMOp::OpSewing, repairId, -1 );
1258 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1259 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1260 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1261 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1262 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1263 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1264 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1265 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1266 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1267 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1268 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1270 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1271 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1272 createMenu( GEOMOp::OpProperties, measurId, -1 );
1273 createMenu( separator(), measurId, -1 );
1274 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1275 createMenu( GEOMOp::OpInertia, measurId, -1 );
1276 createMenu( GEOMOp::OpNormale, measurId, -1 );
1277 createMenu( separator(), measurId, -1 );
1278 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1279 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1280 createMenu( separator(), measurId, -1 );
1282 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1283 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1284 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1285 createMenu( GEOMOp::OpAngle, dimId, -1 );
1286 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1288 createMenu( separator(), measurId, -1 );
1289 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1290 createMenu( separator(), measurId, -1 );
1291 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1292 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1293 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1294 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1295 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1297 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1298 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1299 createMenu( separator(), toolsId, -1 );
1300 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1303 createMenu( separator(), toolsId, -1 );
1304 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1305 createMenu( separator(), toolsId, -1 );
1307 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1308 createMenu( separator(), viewId, -1 );
1310 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1311 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1312 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1313 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1314 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1315 createMenu( separator(), dispmodeId, -1 );
1316 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1318 createMenu( separator(), viewId, -1 );
1319 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1320 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1321 createMenu( separator(), viewId, -1 );
1322 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1323 createMenu( separator(), viewId, -1 );
1327 because of these items are accessible through object browser and viewers
1328 we have removed they from main menu
1330 createMenu( GEOMOp::OpShow, viewId, -1 );
1331 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1332 createMenu( GEOMOp::OpHide, viewId, -1 );
1335 // ---- create toolbars --------------------------
1337 int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1338 createTool( GEOMOp::OpPoint, basicTbId );
1339 createTool( GEOMOp::OpLine, basicTbId );
1340 createTool( GEOMOp::OpCircle, basicTbId );
1341 createTool( GEOMOp::OpEllipse, basicTbId );
1342 createTool( GEOMOp::OpArc, basicTbId );
1343 createTool( GEOMOp::OpCurve, basicTbId );
1344 createTool( GEOMOp::OpVector, basicTbId );
1345 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1346 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1347 createTool( GEOMOp::OpIsoline, basicTbId );
1348 createTool( GEOMOp::OpPlane, basicTbId );
1349 createTool( GEOMOp::OpLCS, basicTbId );
1350 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1352 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ) );
1353 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1354 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1356 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1357 createTool( GEOMOp::OpBox, primTbId );
1358 createTool( GEOMOp::OpCylinder, primTbId );
1359 createTool( GEOMOp::OpSphere, primTbId );
1360 createTool( GEOMOp::OpTorus, primTbId );
1361 createTool( GEOMOp::OpCone, primTbId );
1362 createTool( GEOMOp::OpRectangle, primTbId );
1363 createTool( GEOMOp::OpDisk, primTbId );
1364 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1366 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ) );
1367 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1368 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1370 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1371 createTool( GEOMOp::OpFuse, boolTbId );
1372 createTool( GEOMOp::OpCommon, boolTbId );
1373 createTool( GEOMOp::OpCut, boolTbId );
1374 createTool( GEOMOp::OpSection, boolTbId );
1376 int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1377 createTool( GEOMOp::OpPrism, genTbId );
1378 createTool( GEOMOp::OpRevolution, genTbId );
1379 createTool( GEOMOp::OpFilling, genTbId );
1380 createTool( GEOMOp::OpPipe, genTbId );
1381 #if OCC_VERSION_LARGE > 0x06050300
1382 createTool( GEOMOp::OpPipePath, genTbId );
1385 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1386 createTool( GEOMOp::OpTranslate, transTbId );
1387 createTool( GEOMOp::OpRotate, transTbId );
1388 createTool( GEOMOp::OpChangeLoc, transTbId );
1389 createTool( GEOMOp::OpMirror, transTbId );
1390 createTool( GEOMOp::OpScale, transTbId );
1391 createTool( GEOMOp::OpOffset, transTbId );
1392 createTool( GEOMOp::OpProjection, transTbId );
1393 createTool( separator(), transTbId );
1394 createTool( GEOMOp::OpMultiTranslate, transTbId );
1395 createTool( GEOMOp::OpMultiRotate, transTbId );
1397 int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1398 createTool( GEOMOp::OpExplode, operTbId );
1399 createTool( GEOMOp::OpPartition, operTbId );
1400 createTool( GEOMOp::OpArchimede, operTbId );
1401 createTool( GEOMOp::OpShapesOnShape, operTbId );
1402 createTool( GEOMOp::OpSharedShapes, operTbId );
1404 int featTbId = createTool( tr( "TOOL_FEATURES" ) );
1405 createTool( GEOMOp::OpFillet1d, featTbId );
1406 createTool( GEOMOp::OpFillet2d, featTbId );
1407 createTool( GEOMOp::OpFillet3d, featTbId );
1408 createTool( GEOMOp::OpChamfer, featTbId );
1409 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1410 createTool( GEOMOp::OpExtrudedCut, featTbId );
1411 #ifdef DEBUG_CURVE_CREATOR
1412 // for debug purposes, to be removed
1413 createTool( GEOMOp::OpCurveCreator, featTbId );
1416 int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1417 createTool( GEOMOp::OpEdge, buildTbId );
1418 createTool( GEOMOp::OpWire, buildTbId );
1419 createTool( GEOMOp::OpFace, buildTbId );
1420 createTool( GEOMOp::OpShell, buildTbId );
1421 createTool( GEOMOp::OpSolid, buildTbId );
1422 createTool( GEOMOp::OpCompound, buildTbId );
1424 int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1425 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1426 createTool( GEOMOp::OpProperties, measureTbId );
1427 createTool( GEOMOp::OpCenterMass, measureTbId );
1428 createTool( GEOMOp::OpInertia, measureTbId );
1429 createTool( GEOMOp::OpNormale, measureTbId );
1430 createTool( separator(), measureTbId );
1431 createTool( GEOMOp::OpBoundingBox, measureTbId );
1432 createTool( GEOMOp::OpMinDistance, measureTbId );
1433 createTool( GEOMOp::OpAngle, measureTbId );
1434 createTool( GEOMOp::OpTolerance , measureTbId );
1435 createTool( separator(), measureTbId );
1436 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1437 createTool( GEOMOp::OpFreeFaces, measureTbId );
1438 createTool( separator(), measureTbId );
1439 createTool( GEOMOp::OpWhatIs, measureTbId );
1440 createTool( GEOMOp::OpCheckShape, measureTbId );
1441 createTool( GEOMOp::OpCheckCompound, measureTbId );
1442 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1443 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1445 int picturesTbId = createTool( tr( "TOOL_PICTURES" ) );
1446 createTool( GEOMOp::OpPictureImport, picturesTbId );
1448 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1451 int impexpTbId = createTool( tr( "TOOL_IMPORTEXPORT" ) );
1452 createTool( GEOMOp::OpExportXAO, impexpTbId );
1453 createTool( GEOMOp::OpImportXAO, impexpTbId );
1455 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1456 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1457 //@@ 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 @@//
1459 // ---- create popup menus --------------------------
1461 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1462 QString clientOCC = "(client='OCCViewer')";
1463 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1464 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1466 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1467 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1468 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1469 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1471 QString autoColorPrefix =
1472 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1474 QtxPopupMgr* mgr = popupMgr();
1476 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1477 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1478 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1479 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1480 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1481 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1482 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1483 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1485 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1486 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1487 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1488 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1489 mgr->insert( separator(), -1, -1 ); // -----------
1491 #if OCC_VERSION_LARGE > 0x06050200
1492 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1493 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1494 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1495 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1496 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1497 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1498 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1500 mgr->insert( separator(), -1, -1 ); // -----------
1501 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1502 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1503 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1504 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1505 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1506 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1507 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1508 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1509 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1510 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1511 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1512 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1513 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1514 mgr->insert( separator(), dispmodeId, -1 );
1515 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1516 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1517 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1518 mgr->insert( separator(), -1, -1 ); // -----------
1520 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1521 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1522 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1523 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1524 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1525 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1526 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1527 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1528 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1529 //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1530 mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1532 // material properties
1533 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1534 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1537 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1538 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1540 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1541 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1542 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1544 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1545 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1547 mgr->insert( separator(), -1, -1 ); // -----------
1548 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1549 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1550 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1551 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1552 mgr->insert( separator(), -1, -1 ); // -----------
1554 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1555 onlyComponent = "((type='Component') and selcount=1)",
1556 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1557 types = "'Shape' 'Group' 'FieldStep'";
1559 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1560 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1562 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1563 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1565 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1566 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1568 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1570 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1571 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1572 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1573 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1574 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1575 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1576 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1577 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1578 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1579 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1580 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1581 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1582 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1583 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1584 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1585 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1586 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1587 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1588 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1589 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1590 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1591 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1592 mgr->insert( separator(), selectonlyId, -1);
1593 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1594 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1595 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1596 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1597 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1598 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1599 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1601 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1603 mgr->insert( separator(), -1, -1 ); // -----------
1604 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1605 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1606 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1607 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1609 mgr->insert( separator(), -1, -1 ); // -----------
1610 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1611 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1613 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1614 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1616 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1617 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1619 mgr->insert( separator(), -1, -1 ); // -----------
1620 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1621 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1623 mgr->insert( separator(), -1, -1 ); // -----------
1624 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1625 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1627 mgr->insert( separator(), -1, -1 ); // -----------
1628 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1629 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1631 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1633 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1635 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1636 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1637 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1640 // create plugin actions and menus
1644 //=======================================================================
1645 // function : GeometryGUI::addPluginActions()
1647 //=======================================================================
1648 void GeometryGUI::addPluginActions()
1651 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1652 if (!resMgr) return;
1654 // Find names of a resource XML files ("GEOMActions.xml" and others);
1656 char* cenv = getenv("GEOM_PluginsList");
1658 PluginsXml.sprintf("%s", cenv);
1660 QStringList PluginsXmlList = PluginsXml.split(":", QString::SkipEmptyParts);
1661 if (PluginsXmlList.count() == 0) return;
1663 // get full names of xml files from PluginsXmlList
1664 QStringList xmlFiles;
1665 xmlFiles.append(QDir::home().filePath("CustomGeomPlugins.xml")); // may be inexistent
1666 for (int i = 0; i < PluginsXmlList.count(); i++) {
1667 PluginsXml = PluginsXmlList[ i ];
1669 // Find full path to the resource XML file
1670 QString xmlFile = resMgr->path("resources", "GEOM", PluginsXml + ".xml");
1671 if ( xmlFile.isEmpty() ) // try PLUGIN resources
1672 xmlFile = resMgr->path("resources", PluginsXml, PluginsXml + ".xml");
1673 if ( !xmlFile.isEmpty() )
1674 xmlFiles.append( xmlFile );
1677 // create "Advanced Operations" menu and corresponding toolbar
1678 //int advancedMenuId = createMenu(tr("MEN_ADVANCED"), -1, -1, 10);
1679 //int advancedTbarId = createTool(tr("TOOL_ADVANCED"));
1680 int id = GEOMOp::OpLastOperationID; // TODO?
1683 QString aNoAccessFiles;
1684 for (int i = 0; i < xmlFiles.count(); i++) {
1685 QString xmlFile = xmlFiles[ i ];
1687 QFile file (xmlFile);
1688 if (file.exists() && file.open(QIODevice::ReadOnly)) {
1691 GEOMGUI_XmlHandler* aXmlHandler = new GEOMGUI_XmlHandler();
1692 ASSERT(aXmlHandler);
1694 QXmlInputSource source (&file);
1695 QXmlSimpleReader reader;
1696 reader.setContentHandler(aXmlHandler);
1697 reader.setErrorHandler(aXmlHandler);
1698 bool ok = reader.parse(source);
1702 // bind action lib and label to its ID for activateOperation() method proper work
1703 myPluginLibs[aXmlHandler->myPluginData.myName] = aXmlHandler->myPluginData.myClientLib;
1705 QListIterator<GEOMGUI_ActionData> anActionsIter (aXmlHandler->myPluginData.myListOfActions);
1706 while (anActionsIter.hasNext()) {
1707 GEOMGUI_ActionData anActionData = anActionsIter.next();
1709 //QPixmap icon = resMgr->loadPixmap("GEOM", tr(anActionData.myIcon.toLatin1().constData()));
1710 QPixmap icon = resMgr->loadPixmap(aXmlHandler->myPluginData.myName,
1711 anActionData.myIcon.toLatin1().constData());
1713 // path to action in menu
1714 QStringList smenus = anActionData.myMenu.split( "/" );
1715 QString actionName = smenus.last();
1716 actionName = actionName.toUpper().prepend("MEN_");
1717 smenus.removeLast();
1719 // path to action in toolbar
1720 QStringList stools = anActionData.myTooltip.split( "/" );
1721 QString actionTool = stools.last();
1722 actionTool = actionTool.toUpper().prepend("TOP_");
1723 stools.removeLast();
1725 QString actionStat = anActionData.myStatusBar;
1726 actionStat = actionStat.toUpper().prepend("STB_");
1728 createAction(id, // ~ anActionData.myLabel
1729 tr(actionTool.toLatin1().constData()),
1731 tr(actionName.toLatin1().constData()),
1732 tr(actionStat.toLatin1().constData()),
1734 application()->desktop(),
1736 this, SLOT(OnGUIEvent()),
1737 QString() /*shortcutAction*/);
1740 foreach (QString subMenu, smenus) {
1741 subMenu = subMenu.toUpper().prepend("MEN_");
1742 menuId = createMenu(tr(subMenu.toLatin1().constData()), menuId, -1);
1744 //createMenu(id, pluginMenuId, -1);
1745 createMenu(id, menuId, -1);
1747 QString subTool = stools[0];
1748 subTool = subTool.toUpper().prepend("TOOL_");
1749 int toolId = createTool(tr(subTool.toLatin1().constData()));
1750 //createTool(id, advancedTbarId);
1751 createTool(id, toolId);
1753 // add action id to map
1754 PluginAction anAction (aXmlHandler->myPluginData.myClientLib, anActionData.myLabel);
1755 myPluginActions[id] = anAction;
1761 SUIT_MessageBox::critical(application()->desktop(),
1762 tr("INF_PARSE_ERROR"),
1763 tr(aXmlHandler->errorProtocol().toLatin1().data()));
1767 else if ( i > 0 ) { // 1st is ~/CustomGeomPlugins.xml
1768 if (aNoAccessFiles.isEmpty())
1769 aNoAccessFiles = xmlFile;
1771 aNoAccessFiles += ", " + xmlFile;
1773 } // end loop on xmlFiles
1775 if (!aNoAccessFiles.isEmpty()) {
1776 QString aMess = QObject::tr("PLUGIN_FILE_CANT_OPEN") + " " + aNoAccessFiles + "\n";
1777 aMess += QObject::tr("PLUGIN_FILE_CHECK_VARIABLE");
1778 SUIT_MessageBox::warning(application()->desktop(), tr("GEOM_WRN_WARNING"), aMess);
1782 //=======================================================================
1783 // function : GeometryGUI::activateModule()
1784 // purpose : Called when GEOM module is activated
1785 //=======================================================================
1786 bool GeometryGUI::activateModule( SUIT_Study* study )
1788 if ( CORBA::is_nil( myComponentGeom ) )
1791 bool res = SalomeApp_Module::activateModule( study );
1795 setMenuShown( true );
1796 setToolShown( true );
1798 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1799 PyGILState_STATE gstate = PyGILState_Ensure();
1800 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1801 if ( !pluginsmanager ) {
1805 PyObjWrapper result =
1806 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1807 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1808 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1812 PyGILState_Release(gstate);
1813 // end of GEOM plugins loading
1815 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1816 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1818 // Reset actions accelerator keys
1819 action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1820 action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1821 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1823 GUIMap::Iterator it;
1824 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1825 it.value()->activate( application()->desktop() );
1827 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1829 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1830 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1831 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1833 if ( !myCreationInfoWdg )
1834 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1835 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1836 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1838 SUIT_ViewManager* vm;
1839 ViewManagerList OCCViewManagers, VTKViewManagers;
1841 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1842 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1843 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1844 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1846 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1847 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1848 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1849 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1852 SALOME_ListIO selected;
1853 sm->selectedObjects( selected );
1854 sm->clearSelected();
1856 // disable OCC selectors
1857 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1858 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1859 while ( itOCCSel.hasNext() )
1860 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1861 sr->setEnabled(true);
1863 // disable VTK selectors
1864 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1865 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1866 while ( itVTKSel.hasNext() )
1867 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1868 sr->setEnabled(true);
1870 sm->setSelectedObjects( selected, true ); //NPAL 19674
1872 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1874 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1876 // 0020836 (Basic vectors and origin)
1877 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1878 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1879 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1881 _PTR(Study) studyDS = appStudy->studyDS();
1883 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1884 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1885 createOriginAndBaseVectors();
1893 //=======================================================================
1894 // function : GeometryGUI::deactivateModule()
1895 // purpose : Called when GEOM module is deactivated
1896 //=======================================================================
1897 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1899 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1901 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1903 setMenuShown( false );
1904 setToolShown( false );
1906 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1907 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1909 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1911 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1912 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1913 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1914 myCreationInfoWdg = 0;
1916 EmitSignalCloseAllDialogs();
1918 GUIMap::Iterator it;
1919 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1920 it.value()->deactivate();
1922 // Unset actions accelerator keys
1923 action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1924 action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1925 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1927 qDeleteAll(myOCCSelectors);
1928 myOCCSelectors.clear();
1929 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1931 qDeleteAll(myVTKSelectors);
1932 myVTKSelectors.clear();
1933 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1935 return SalomeApp_Module::deactivateModule( study );
1938 //=======================================================================
1939 // function : onWindowActivated()
1940 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1941 //=======================================================================
1942 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1947 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1948 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1950 // disable non-OCC viewframe menu commands
1951 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1952 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1953 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1954 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1955 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1956 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1957 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1959 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1960 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1961 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1962 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1964 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1967 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1969 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1970 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
1971 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1972 if ( myCreationInfoWdg )
1973 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1976 void GeometryGUI::viewManagers( QStringList& lst ) const
1978 lst.append( OCCViewer_Viewer::Type() );
1981 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1983 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1985 qDebug( "connect" );
1986 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1987 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1988 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1989 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1990 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1991 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1992 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1993 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1995 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1996 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1998 // disable OCC selectors
1999 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
2000 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2001 while ( itOCCSel.hasNext() )
2002 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2003 sr->setEnabled(true);
2005 else if ( vm->getType() == SVTK_Viewer::Type() )
2007 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2008 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
2010 // disable VTK selectors
2011 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
2012 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2013 while ( itVTKSel.hasNext() )
2014 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2015 sr->setEnabled(true);
2019 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
2021 SUIT_ViewModel* viewer = vm->getViewModel();
2022 if ( vm->getType() == OCCViewer_Viewer::Type() )
2024 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2025 while ( itOCCSel.hasNext() )
2026 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2027 if ( sr->viewer() == viewer )
2029 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
2033 if ( vm->getType() == SVTK_Viewer::Type() )
2035 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2036 while ( itVTKSel.hasNext() )
2037 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2038 if ( sr->viewer() == viewer )
2040 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2046 //================================================================================
2048 * \brief Slot called when selection changed. Shows creation info of a selected object
2050 //================================================================================
2052 void GeometryGUI::updateCreationInfo()
2054 if ( myCreationInfoWdg )
2055 myCreationInfoWdg->clear();
2057 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2058 // if ( !myCreationInfoWdg->isVisible() )
2061 // look for a sole selected GEOM_Object
2062 GEOM::GEOM_BaseObject_var geomObj;
2064 SALOME_ListIO selected;
2065 getApp()->selectionMgr()->selectedObjects( selected );
2067 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2068 SALOME_ListIteratorOfListIO selIt( selected );
2069 for ( ; selIt.More(); selIt.Next() )
2071 Handle(SALOME_InteractiveObject) io = selIt.Value();
2072 if ( !io->hasEntry() ) continue;
2073 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2074 if ( !sobj ) continue;
2075 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2076 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2077 if ( !gobj->_is_nil() )
2079 if ( !geomObj->_is_nil() )
2080 return; // several GEOM objects selected
2084 if ( geomObj->_is_nil() ) return;
2086 // pass creation info of geomObj to myCreationInfoWdg
2088 if ( myCreationInfoWdg ) {
2090 QString operationName;
2091 myCreationInfoWdg->setOperation( icon, operationName );
2095 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2097 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2098 QString name = info->operationName.in();
2099 if ( !name.isEmpty() ) {
2100 icon = resMgr->loadPixmap( "GEOM", tr( ("ICO_"+name).toLatin1().constData() ), false );
2101 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2102 if ( operationName.startsWith( "MEN_" ))
2103 operationName = name; // no translation
2104 myCreationInfoWdg->setOperation( icon, operationName );
2106 for ( size_t i = 0; i < info->params.length(); ++i )
2107 myCreationInfoWdg->addParam( info->params[i].name.in(),
2108 info->params[i].value.in() );
2117 void GeometryGUI::onAutoBringToFront()
2119 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front" );
2120 if( !isAutoBringToFront )
2123 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2124 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2127 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2128 if (!appStudy) return;
2130 GEOM_Displayer displayer( appStudy );
2132 SALOME_View* window = displayer.GetActiveView();
2133 if ( !window ) return;
2135 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2137 SALOME_ListIO selected;
2138 getApp()->selectionMgr()->selectedObjects( selected );
2139 if (!myTopLevelIOList.IsEmpty())
2141 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2143 Handle( SALOME_InteractiveObject ) io = It.Value();
2144 bool isSelected = false;
2145 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2147 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2148 if( io->isSame( sel_io ) )
2151 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2153 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2154 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2159 myTopLevelIOList.Assign(selected);
2160 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2162 Handle( SALOME_InteractiveObject ) io = It.Value();
2163 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2164 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2167 displayer.UpdateViewer();
2168 GeometryGUI::Modified();
2171 void GeometryGUI::updateFieldColorScale()
2173 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2175 GEOM_Displayer aDisplayer( aStudy );
2176 aDisplayer.UpdateColorScale();
2180 QString GeometryGUI::engineIOR() const
2182 if ( !CORBA::is_nil( GetGeomGen() ) )
2183 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2187 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2188 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2190 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
2192 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2194 theWidth = theHeight = 0;
2196 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2197 Handle(TColStd_HArray1OfByte) aTexture;
2199 Handle(Graphic3d_HArray1OfBytes) aTexture;
2203 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2204 aTexture = aTextureMap[ theId ];
2205 if ( aTexture.IsNull() ) {
2206 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2207 if ( !aInsOp->_is_nil() ) {
2208 CORBA::Long aWidth, aHeight;
2209 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2210 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2212 theHeight = aHeight;
2214 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2215 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2217 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
2220 for (int i = 0; i < aStream->length(); i++)
2221 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2222 aTextureMap[ theId ] = aTexture;
2230 LightApp_Selection* GeometryGUI::createSelection() const
2232 return new GEOMGUI_Selection();
2235 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2237 SalomeApp_Module::contextMenuPopup( client, menu, title );
2239 getApp()->selectionMgr()->selectedObjects( lst );
2241 //Add submenu for predefined materials
2242 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2243 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2244 QtxPopupMgr* mgr = popupMgr();
2245 //get parrent for submenu
2246 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2248 QMenu* oldMenu = act->menu() ;
2253 QMenu* matMenu = new QMenu();
2254 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2256 //Get current material model for the object
2258 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2259 if ( anApp && anApp->activeViewManager() ) {
2260 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2262 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2265 QString curModel = "";
2266 if ( v.canConvert<QString>() ) curModel = v.toString();
2267 // get list of all predefined materials
2268 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2270 foreach ( QString material, materials )
2272 QAction* menAct = matMenu->addAction( material );
2273 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2274 signalMapper->setMapping( menAct, material );
2275 menAct->setCheckable( true );
2276 // Set checked if this material is current
2277 Material_Model aModel;
2278 aModel.fromResources( material );
2279 if ( !found && aModel.toProperties() == curModel ) {
2280 menAct->setChecked( true );
2284 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2285 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2286 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2287 this, SLOT( OnSetMaterial( const QString & ) ) );
2288 act->setMenu( matMenu );
2292 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2293 Handle(SALOME_InteractiveObject) io = lst.First();
2294 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2295 _PTR(Study) study = appStudy->studyDS();
2296 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2298 QString aName = QString( obj->GetName().c_str() );
2299 aName.remove( QRegExp("\\s+$") );
2305 void GeometryGUI::OnSetMaterial(const QString& theName)
2307 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2311 void GeometryGUI::createPreferences()
2313 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2315 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2316 setPreferenceProperty( genGroup, "columns", 2 );
2318 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2319 LightApp_Preferences::Selector,
2320 "Geometry", "display_mode" );
2322 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2323 LightApp_Preferences::Color, "Geometry", "shading_color" );
2325 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2326 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2328 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2329 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2331 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2332 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2334 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2335 LightApp_Preferences::Color, "Geometry", "line_color" );
2337 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2338 LightApp_Preferences::Color, "Geometry", "point_color" );
2340 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2341 LightApp_Preferences::Color, "Geometry", "isos_color" );
2343 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2344 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2346 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2347 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2349 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2350 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2352 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2353 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2355 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2356 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2358 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2359 LightApp_Preferences::Selector,
2360 "Geometry", "material" );
2362 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2363 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2369 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2370 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2372 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2373 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2375 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2376 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2378 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2379 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2381 for (int i = 0; i < nb; i++) {
2382 setPreferenceProperty( wd[i], "min", 1 );
2383 setPreferenceProperty( wd[i], "max", 5 );
2386 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2387 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2389 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2390 setPreferenceProperty( aDimGroupId, "columns", 2 );
2392 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2393 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2395 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2396 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2398 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2399 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2401 int aDimFontHeightId = addPreference( tr( "PREF_DIMENSIONS_FONT_HEIGHT" ), aDimGroupId,
2402 LightApp_Preferences::DblSpin, "Geometry", "dimensions_font_height" );
2404 setPreferenceProperty( aDimFontHeightId, "min", 1e-9 );
2405 setPreferenceProperty( aDimFontHeightId, "max", 1e+9 );
2406 setPreferenceProperty( aDimFontHeightId, "precision", 9 );
2408 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2409 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2411 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2412 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2413 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2415 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2416 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2418 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2419 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2421 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2422 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2424 QStringList aListOfLengthUnits;
2425 aListOfLengthUnits << "m";
2426 aListOfLengthUnits << "cm";
2427 aListOfLengthUnits << "mm";
2428 aListOfLengthUnits << "in.";
2429 aListOfLengthUnits << "ft.";
2431 QStringList aListOfAngUnits;
2432 aListOfAngUnits << "rad";
2433 aListOfAngUnits << "deg";
2435 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2436 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2438 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2439 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2441 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2442 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2443 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2445 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2446 setPreferenceProperty( isoGroup, "columns", 2 );
2447 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2448 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2449 setPreferenceProperty( isoU, "min", 0 );
2450 setPreferenceProperty( isoU, "max", 100000 );
2451 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2452 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2453 setPreferenceProperty( isoV, "min", 0 );
2454 setPreferenceProperty( isoV, "max", 100000 );
2456 // Quantities with individual precision settings
2457 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2458 setPreferenceProperty( precGroup, "columns", 2 );
2460 const int nbQuantities = 8;
2461 int prec[nbQuantities], ii = 0;
2462 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2463 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2464 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2465 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2466 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2467 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2468 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2469 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2470 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2471 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2472 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2473 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2474 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2475 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2476 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2477 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2479 // Set property for precision value for spinboxes
2480 for ( ii = 0; ii < nbQuantities; ii++ ){
2481 setPreferenceProperty( prec[ii], "min", -14 );
2482 setPreferenceProperty( prec[ii], "max", 14 );
2483 setPreferenceProperty( prec[ii], "precision", 2 );
2486 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2487 setPreferenceProperty( VertexGroup, "columns", 2 );
2489 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2490 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2492 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2493 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2495 // Set property for default display mode
2496 QStringList aModesList;
2497 aModesList.append( tr("MEN_WIREFRAME") );
2498 aModesList.append( tr("MEN_SHADING") );
2499 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2500 aModesList.append( tr("MEN_TEXTURE") );
2502 QList<QVariant> anIndexesList;
2503 anIndexesList.append(0);
2504 anIndexesList.append(1);
2505 anIndexesList.append(2);
2506 anIndexesList.append(3);
2508 setPreferenceProperty( dispmode, "strings", aModesList );
2509 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2511 // Set property for top level display mode
2512 QStringList aTopModesList;
2513 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2514 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2515 aTopModesList.append( tr("MEN_WIREFRAME") );
2516 aTopModesList.append( tr("MEN_SHADING") );
2517 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2519 QList<QVariant> aTopIndexesList;
2520 aTopIndexesList.append(0);
2521 aTopIndexesList.append(1);
2522 aTopIndexesList.append(2);
2523 aTopIndexesList.append(3);
2524 aTopIndexesList.append(4);
2526 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2527 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2529 // Set property for step value for spinboxes
2530 setPreferenceProperty( step, "min", 1 );
2531 setPreferenceProperty( step, "max", 10000 );
2532 setPreferenceProperty( step, "precision", 3 );
2534 // Set property for deflection value for spinboxes
2535 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2536 setPreferenceProperty( defl, "max", 1.0 );
2537 setPreferenceProperty( defl, "step", 1.0e-04 );
2538 setPreferenceProperty( defl, "precision", 6 );
2540 // Set property for default material
2541 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2543 // Set property vertex marker type
2544 QList<QVariant> aMarkerTypeIndicesList;
2545 QList<QVariant> aMarkerTypeIconsList;
2547 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2548 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2549 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2550 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2551 aMarkerTypeIndicesList << (i-1);
2552 aMarkerTypeIconsList << pixmap;
2555 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2556 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2558 // Set property for vertex marker scale
2559 QList<QVariant> aMarkerScaleIndicesList;
2560 QStringList aMarkerScaleValuesList;
2562 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2563 aMarkerScaleIndicesList << iii;
2564 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2567 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2568 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2570 // Scalar bar for field step presentation
2571 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2572 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2574 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2575 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2576 setPreferenceProperty( sbXPosition, "min", 0 );
2577 setPreferenceProperty( sbXPosition, "max", 1 );
2578 setPreferenceProperty( sbXPosition, "step", 0.05 );
2580 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2581 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2582 setPreferenceProperty( sbYPosition, "min", 0 );
2583 setPreferenceProperty( sbYPosition, "max", 1 );
2584 setPreferenceProperty( sbYPosition, "step", 0.05 );
2586 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2587 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2588 setPreferenceProperty( sbWidth, "min", 0 );
2589 setPreferenceProperty( sbWidth, "max", 1 );
2590 setPreferenceProperty( sbWidth, "step", 0.05 );
2592 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2593 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2594 setPreferenceProperty( sbHeight, "min", 0 );
2595 setPreferenceProperty( sbHeight, "max", 1 );
2596 setPreferenceProperty( sbHeight, "step", 0.05 );
2598 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2599 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2600 setPreferenceProperty( sbTextHeight, "min", 6 );
2601 setPreferenceProperty( sbTextHeight, "max", 24 );
2602 setPreferenceProperty( sbTextHeight, "step", 1 );
2604 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2605 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2606 setPreferenceProperty( sbNbIntervals, "min", 2 );
2607 setPreferenceProperty( sbNbIntervals, "max", 64 );
2608 setPreferenceProperty( sbNbIntervals, "step", 1 );
2610 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2611 setPreferenceProperty( originGroup, "columns", 2 );
2613 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2614 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2615 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2616 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2618 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2619 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2621 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2622 setPreferenceProperty( operationsGroup, "columns", 2 );
2624 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2625 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2627 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2629 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2631 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2632 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2634 QStringList aHierarchyTypeList;
2635 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2636 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2637 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2639 QList<QVariant> aHierarchyTypeIndexesList;
2640 aHierarchyTypeIndexesList.append(0);
2641 aHierarchyTypeIndexesList.append(1);
2642 aHierarchyTypeIndexesList.append(2);
2644 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2645 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2647 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2648 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2650 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2652 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2653 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2655 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2656 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2657 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2658 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2659 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2660 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2661 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2662 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2664 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2665 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2666 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2667 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2668 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2669 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2676 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2678 if (section == "Geometry") {
2679 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2680 if (param == QString("SettingsGeomStep")) {
2681 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2682 EmitSignalDefaultStepValueChanged(spin_step);
2684 else if (param == QString("toplevel_color")) {
2685 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2686 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2688 else if (param == QString("toplevel_dm")) {
2689 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2691 else if (param == QString("scalar_bar_x_position") ||
2692 param == QString("scalar_bar_y_position") ||
2693 param == QString("scalar_bar_width") ||
2694 param == QString("scalar_bar_height") ||
2695 param == QString("scalar_bar_text_height") ||
2696 param == QString("scalar_bar_nb_intervals")) {
2697 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2699 GEOM_Displayer aDisplayer( aStudy );
2700 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2701 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2704 else if ( param == QString("dimensions_color") ||
2705 param == QString("dimensions_line_width") ||
2706 param == QString("dimensions_font_height") ||
2707 param == QString("dimensions_arrow_length") ||
2708 param == QString("dimensions_show_units") ||
2709 param == QString("dimensions_length_units") ||
2710 param == QString("dimensions_angle_units") )
2712 SalomeApp_Application* anApp = getApp();
2718 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2724 GEOM_Displayer aDisplayer( aStudy );
2726 ViewManagerList aVMs;
2727 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2728 ViewManagerList::Iterator anIt = aVMs.begin();
2729 for ( ; anIt != aVMs.end(); ++anIt )
2731 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2737 SALOME_ListIO aVisible;
2738 aViewer->GetVisible( aVisible );
2739 aDisplayer.Redisplay( aVisible, false, aViewer );
2742 aDisplayer.UpdateViewer();
2744 else if ( param.startsWith( "dependency_tree") )
2745 emit SignalDependencyTreeParamChanged( section, param );
2749 LightApp_Displayer* GeometryGUI::displayer()
2752 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2756 void GeometryGUI::setLocalSelectionMode(const int mode)
2758 myLocalSelectionMode = mode;
2761 int GeometryGUI::getLocalSelectionMode() const
2763 return myLocalSelectionMode;
2766 const char gSeparator = '_'; // character used to separate parameter names
2767 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2770 * \brief Store visual parameters
2772 * This method is called just before the study document is saved.
2773 * Store visual parameters in AttributeParameter attribute(s)
2775 void GeometryGUI::storeVisualParameters (int savePoint)
2777 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2778 if ( !appStudy || !appStudy->studyDS() )
2780 _PTR(Study) studyDS = appStudy->studyDS();
2782 // componentName is used for encoding of entries when storing them in IParameters
2783 std::string componentName = myComponentGeom->ComponentDataType();
2784 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2785 //if (!aSComponent) return;
2788 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2789 componentName.c_str(),
2791 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2793 QSet<QString> anEntriesToStoreShared;
2794 QList<SUIT_ViewManager*> lst;
2795 QList<SUIT_ViewManager*>::Iterator it;
2797 // main cycle to store parameters of displayed objects
2799 getApp()->viewManagers(lst);
2800 for (it = lst.begin(); it != lst.end(); it++) {
2801 SUIT_ViewManager* vman = *it;
2802 QString vType = vman->getType();
2803 int aMgrId = vman->getGlobalId();
2804 // saving VTK actors properties
2805 QVector<SUIT_ViewWindow*> views = vman->getViews();
2806 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2807 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
2808 ObjMap::ConstIterator o_it = anObjects.begin();
2809 for (; o_it != anObjects.end(); o_it++) {
2810 const PropMap aProps = o_it.value();
2812 //Check that object exists in the study
2813 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2814 if ( !obj || !(aProps.count() > 0))
2816 // entry is "encoded" = it does NOT contain component adress, since it is a
2817 // subject to change on next component loading
2819 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2821 _PTR(GenericAttribute) anAttr;
2822 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2825 // remember entry of object to store shared GEOM properties
2826 // (e.g. dimension properties).
2827 if ( vType == OCCViewer_Viewer::Type() )
2829 anEntriesToStoreShared.insert( o_it.key() );
2832 QString param, occParam = vType;
2833 occParam += GEOM::sectionSeparator();
2834 occParam += QString::number(aMgrId);
2835 occParam += GEOM::sectionSeparator();
2837 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2838 param = occParam + GEOM::propertyName( GEOM::Visibility );
2839 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2842 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2843 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2844 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2847 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2848 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2850 val << QString::number(c.redF());
2851 val << QString::number(c.greenF());
2852 val << QString::number(c.blueF());
2853 param = occParam + GEOM::propertyName( GEOM::Color );
2854 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2857 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2858 param = occParam + GEOM::propertyName( GEOM::Texture );
2859 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2862 if (vType == SVTK_Viewer::Type()) {
2863 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2864 param = occParam + GEOM::propertyName( GEOM::Opacity );
2865 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2867 } else if (vType == SOCC_Viewer::Type()) {
2868 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2869 param = occParam + GEOM::propertyName( GEOM::Transparency );
2870 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2873 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2874 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2875 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2879 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2880 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2881 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2884 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2885 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2886 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2889 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2890 param = occParam + GEOM::propertyName( GEOM::Deflection );
2891 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2894 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2895 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2896 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2897 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2900 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2901 param = occParam + GEOM::propertyName( GEOM::Material );
2902 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2905 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2906 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2907 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2910 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2911 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2912 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2914 } // object iterator
2916 } // for (viewManagers)
2918 // store dimension attributes of objects:
2919 // since the displayed object always persists in property map, we remember the object entries
2920 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
2921 QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
2922 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
2923 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
2925 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
2926 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName);
2928 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
2930 if ( aDimensions.GetNumber() == 0 )
2935 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
2940 * \brief Restore visual parameters
2942 * This method is called after the study document is opened.
2943 * Restore visual parameters from AttributeParameter attribute(s)
2945 void GeometryGUI::restoreVisualParameters (int savePoint)
2947 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2948 if (!appStudy || !appStudy->studyDS())
2950 _PTR(Study) studyDS = appStudy->studyDS();
2952 // componentName is used for encoding of entries when storing them in IParameters
2953 std::string componentName = myComponentGeom->ComponentDataType();
2954 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2955 //if (!aSComponent) return;
2958 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2959 componentName.c_str(),
2961 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2963 std::vector<std::string> entries = ip->getEntries();
2965 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2967 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2968 QString entry (ip->decodeEntry(*entIt).c_str());
2970 // Check that the entry corresponds to a real object in the Study
2971 // as the object may be deleted or modified after the visual state is saved.
2972 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2973 if (!so) continue; //Skip the not existent entry
2975 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2976 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2978 std::vector<std::string>::iterator namesIt = paramNames.begin();
2979 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2981 // actors are stored in a map after displaying of them for
2982 // quicker access in the future: map < viewID to actor >
2983 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2984 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2986 QString viewerTypStr;
2987 QString viewIndexStr;
2989 QVector<PropMap> aListOfMap;
2991 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2993 // visual parameters are stored in strings as follows:
2994 // 1) ViewerType_ViewIndex_ParamName
2995 // 2) ViewerType_ParamName (shared for GEOM module)
2996 // '_' is used as separator and should not be used in viewer type or parameter names.
2997 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2999 bool isShared = lst.size() == 2;
3000 bool isViewer = lst.size() == 3;
3001 if ( !isShared && !isViewer )
3006 // shared visual parameters
3009 QString aParamNameStr( lst[1] );
3010 QString aValuesStr( (*valuesIt).c_str() );
3012 // shared dimension properties are stored as attribute
3013 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
3015 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
3016 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
3022 // per view visual parameters
3023 viewerTypStr = lst[0];
3024 viewIndexStr = lst[1];
3025 QString paramNameStr = lst[2];
3028 viewIndex = viewIndexStr.toUInt(&ok);
3029 if (!ok) // bad conversion of view index to integer
3032 if ((viewIndex + 1) > aListOfMap.count()) {
3033 aListOfMap.resize(viewIndex + 1);
3036 QString val((*valuesIt).c_str());
3037 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
3038 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
3039 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
3040 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
3041 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
3042 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
3043 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
3044 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
3045 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
3046 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
3047 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
3048 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
3049 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
3050 QStringList rgb = val.split(GEOM::subSectionSeparator());
3051 if (rgb.count() == 3) {
3052 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
3053 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
3055 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
3056 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
3057 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
3058 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
3059 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3060 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3061 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3062 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3063 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3064 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3065 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3066 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3067 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3068 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3070 } // for names/parameters iterator
3072 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3074 for (int index = 0; index < aListOfMap.count(); index++) {
3076 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
3078 //Get Visibility property of the current PropMap
3079 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3080 SUIT_ViewManager* vman = lst.at(index);
3081 SUIT_ViewModel* vmodel = vman->getViewModel();
3082 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
3085 } // for entries iterator
3087 // update all VTK and OCC views
3088 QList<SUIT_ViewManager*> lst;
3089 getApp()->viewManagers(lst);
3090 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3091 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3094 if (vmodel->getType() == SVTK_Viewer::Type()) {
3095 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3096 vtkView->getRenderer()->ResetCameraClippingRange();
3099 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3100 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3101 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3108 void GeometryGUI::onViewAboutToShow()
3110 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3111 QAction* a = action( GEOMOp::OpSwitchVectors );
3113 a->setEnabled(true);
3114 bool vmode = window->property("VectorsMode").toBool();
3115 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3117 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3118 a->setEnabled(false);
3123 \brief Return action by id
3124 \param id identifier of the action
3127 QAction* GeometryGUI::getAction(const int id) {
3132 \brief GEOM module message handler
3134 This method can be re-implemented in the subclasses.
3135 This is a GEOM module message handler.
3137 \param msg the message received.
3139 void GeometryGUI::message(const QString& msg)
3142 QStringList data = msg.split("/");
3143 const int nbStrings = data.count();
3145 if (nbStrings > 0) {
3146 if (data[0] == "modified") {
3148 QString anIOR = nbStrings > 1 ? data[1] : QString();
3150 if ( anIOR.isEmpty() ) {
3154 // Get the geom object.
3155 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3157 // Clear the shape buffer
3158 GeometryGUI::ClearShapeBuffer (anObj);
3164 \brief Clears the shape buffer.
3166 This is a static method. It clears the shape buffer.
3168 \param theObj the object
3170 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3172 if ( CORBA::is_nil( theObj ) )
3175 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3176 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3177 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3179 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3184 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3189 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3193 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3194 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3195 _PTR(GenericAttribute) anAttr;
3196 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3197 _PTR(AttributeIOR) anIOR ( anAttr );
3198 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3199 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3205 \brief Returns the object from IOR.
3207 This is a static method. It returns the object from its IOR.
3209 \param IOR object IOR
3210 \return GEOM object.
3212 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3214 GEOM::GEOM_Object_var geomObj;
3215 if ( !IOR.isEmpty() ) {
3216 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3217 ( IOR.toLatin1().constData() );
3218 if ( !CORBA::is_nil( corbaObj ) )
3219 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3221 return geomObj._retn();
3225 \brief Returns IOR of the object.
3227 This is a static method. It returns the object's IOR.
3229 \param object the GEOM object.
3230 \return object's IOR.
3232 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3235 if ( !CORBA::is_nil( object ) ) {
3236 CORBA::String_var anIOR =
3237 SalomeApp_Application::orb()->object_to_string( object );
3244 \brief Check if this object is can't be renamed in place
3246 This method can be re-implemented in the subclasses.
3247 Return true in case if object isn't reference or component (module root).
3249 \param entry column id
3250 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3252 bool GeometryGUI::renameAllowed( const QString& entry) const {
3254 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3255 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3256 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3258 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3262 Rename object by entry.
3263 \param entry entry of the object
3264 \param name new name of the object
3265 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3267 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3269 bool result = false;
3271 SalomeApp_Application* app =
3272 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3273 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3278 _PTR(Study) aStudy = appStudy->studyDS();
3283 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3285 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3289 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3290 _PTR(GenericAttribute) anAttr;
3292 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3293 _PTR(AttributeName) aName (anAttr);
3295 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3296 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3297 if (!CORBA::is_nil(anObj)) {
3298 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3299 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3307 void GeometryGUI::updateMaterials()
3309 LightApp_Preferences* pref = preferences();
3311 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3312 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3313 if ( !materials.contains( currentMaterial ) )
3314 // user material set as default in the preferences, might be removed
3315 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3317 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3319 setPreferenceProperty( prefItem->id(),
3320 "strings", materials );
3321 prefItem->retrieve();
3327 \brief Check if the module allows "drag" operation of its objects.
3329 Overloaded from LightApp_Module class.
3331 This function is a part of the general drag-n-drop mechanism.
3332 The goal of this function is to check data object passed as a parameter
3333 and decide if it can be dragged or no.
3335 \param what data object being tested for drag operation
3336 \return \c true if module allows dragging of the specified object
3337 \sa isDropAccepted(), dropObjects()
3339 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3341 // we allow dragging object under root and object from folder
3342 int aLevel = what->level();
3343 bool anObjectInFolder = false;
3345 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3347 _PTR(SObject) aSO = dataObj->object();
3349 _PTR(GenericAttribute) anAttr;
3350 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3351 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3352 _PTR(AttributeLocalID) aLocalID( anAttr );
3353 anObjectInFolder = aLocalID->Value() == 999;
3358 return aLevel == 2 || anObjectInFolder;
3362 \brief Check if the module allows "drop" operation on the given object.
3364 Overloaded from LightApp_Module class.
3366 This function is a part of the general drag-n-drop mechanism.
3367 The goal of this function is to check data object passed as a parameter
3368 and decide if it can be used as a target for the "drop" operation.
3369 The processing of the drop operation itself is done in the dropObjects() function.
3371 \param where target data object
3372 \return \c true if module supports dropping on the \a where data object
3373 \sa isDraggable(), dropObjects()
3375 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3377 // we allow dropping into folder and top-level GEOM object
3378 int aLevel = where->level();
3379 bool isFolder = false;
3381 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3383 _PTR(SObject) aSO = dataObj->object();
3385 _PTR(GenericAttribute) anAttr;
3386 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3387 _PTR(AttributeLocalID) aLocalID( anAttr );
3388 isFolder = aLocalID->Value() == 999;
3393 return aLevel == 1 || isFolder;
3397 \brief Complete drag-n-drop operation.
3399 Overloaded from LightApp_Module class.
3401 This function is a part of the general drag-n-drop mechanism.
3402 Its goal is to handle dropping of the objects being dragged according
3403 to the chosen operation (move). The dropping is performed in the
3404 context of the parent data object \a where and the \a row (position in the
3405 children index) at which the data should be dropped. If \a row is equal to -1,
3406 this means that objects are added to the end of the children list.
3408 \param what objects being dropped
3409 \param where target data object
3410 \param row child index at which the drop operation is performed
3411 \param action drag-n-drop operation (Qt::DropAction) - move
3413 \sa isDraggable(), isDropAccepted()
3415 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3416 const int row, Qt::DropAction action )
3418 if (action != Qt::CopyAction && action != Qt::MoveAction)
3419 return; // unsupported action
3421 // get parent object
3422 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3423 if ( !dataObj ) return; // wrong parent
3424 _PTR(SObject) parentObj = dataObj->object();
3426 // Find the current Study and StudyBuilder
3427 _PTR(Study) aStudy = parentObj->GetStudy();
3428 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3429 // collect all parents of the target node
3430 QStringList parentIDs;
3431 _PTR(SObject) parent = parentObj;
3432 while( !parent->IsNull() ) {
3433 parentIDs << parent->GetID().c_str();
3434 parent = aUseCaseBuilder->GetFather(parent);
3437 // collect objects being dropped
3438 GEOM::object_list_var objects = new GEOM::object_list();
3439 objects->length( what.count() );
3441 for ( int i = 0; i < what.count(); i++ ) {
3442 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3443 if ( !dataObj ) continue; // skip wrong objects
3444 _PTR(SObject) sobj = dataObj->object();
3445 // check that dropped object is not a parent of target object
3446 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3447 return; // it's not allowed to move node into it's child
3449 objects[i] = _CAST(SObject, sobj)->GetSObject();
3452 objects->length( count );
3454 // call engine function
3455 GetGeomGen()->Move( objects.in(), // what
3456 _CAST(SObject, parentObj)->GetSObject(), // where
3459 // update Object browser
3460 getApp()->updateObjectBrowser( false );