1 // Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : GeometryGUI.cxx
23 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
25 #include <Standard_math.hxx> // E.A. must be included before Python.h to fix compilation on windows
27 #undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
30 #include "GeometryGUI.h"
31 #include "GeometryGUI_Operations.h"
32 #include "GEOMPluginGUI.h"
33 #include "GEOMGUI_OCCSelector.h"
34 #include "GEOMGUI_Selection.h"
35 #include "GEOMGUI_CreationInfoWdg.h"
36 #include "GEOMGUI_DimensionProperty.h"
37 #include "GEOM_Constants.h"
38 #include "GEOM_Displayer.h"
39 #include "GEOM_AISShape.hxx"
40 #include "GEOMUtils_XmlHandler.hxx"
42 #include "GEOM_Actor.h"
44 #include <Material_ResourceMgr.h>
45 #include <Material_Model.h>
47 #include <SUIT_Desktop.h>
48 #include <SUIT_MessageBox.h>
49 #include <SUIT_ResourceMgr.h>
50 #include <SUIT_Session.h>
51 #include <SUIT_ViewManager.h>
53 #include <PyInterp_Interp.h>
55 #include <OCCViewer_ViewWindow.h>
56 #include <OCCViewer_ViewPort3d.h>
57 #include <OCCViewer_ViewModel.h>
58 #include <OCCViewer_ViewManager.h>
60 #include <SOCC_ViewModel.h>
61 #include <SOCC_ViewWindow.h>
63 #include <SVTK_ViewWindow.h>
64 #include <SVTK_RenderWindowInteractor.h>
65 #include <SVTK_InteractorStyle.h>
66 #include <SVTK_ViewModel.h>
68 #include <GraphicsView_Viewer.h>
70 #include <SalomeApp_Application.h>
71 #include <SalomeApp_DataObject.h>
72 #include <SalomeApp_Study.h>
73 #include <SalomeApp_Tools.h>
75 #include <LightApp_SelectionMgr.h>
76 #include <LightApp_VTKSelector.h>
77 #include <LightApp_DataObject.h>
78 #include <LightApp_Preferences.h>
80 #include <SALOME_LifeCycleCORBA.hxx>
81 #include <SALOME_ListIO.hxx>
83 #include <SALOMEDSClient_ClientFactory.hxx>
84 #include <SALOMEDSClient_IParameters.hxx>
86 #include <SALOMEDS_SObject.hxx>
88 #include <Basics_OCCTVersion.hxx>
99 #include <QSignalMapper>
101 #include <AIS_Drawer.hxx>
102 #include <AIS_ListOfInteractive.hxx>
103 #include <AIS_ListIteratorOfListOfInteractive.hxx>
104 #include <Prs3d_Drawer.hxx>
105 #include <Prs3d_IsoAspect.hxx>
106 #include <Aspect_TypeOfMarker.hxx>
107 #include <OSD_SharedLibrary.hxx>
108 #include <NCollection_DataMap.hxx>
110 #include <TColStd_HArray1OfByte.hxx>
112 #include <utilities.h>
114 #include <vtkCamera.h>
115 #include <vtkRenderer.h>
117 #include <Standard_Failure.hxx>
118 #include <Standard_ErrorHandler.hxx>
120 #include "GEOM_version.h"
121 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
124 Standard_EXPORT CAM_Module* createModule() {
125 return new GeometryGUI();
128 Standard_EXPORT char* getModuleVersion() {
129 return (char*)GEOM_VERSION_STR;
133 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
135 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
137 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
139 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
140 if (CORBA::is_nil(myComponentGeom))
142 return GeometryGUI::myComponentGeom;
145 bool GeometryGUI::InitGeomGen()
148 if ( CORBA::is_nil( myComponentGeom ) ) return false;
152 //=======================================================================
153 // function : ClientSObjectToObject
155 //=======================================================================
156 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
158 _PTR(GenericAttribute) anAttr;
159 CORBA::Object_var anObj;
161 std::string aValue = theSObject->GetIOR();
162 if (strcmp(aValue.c_str(), "") != 0) {
163 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
164 anObj = anORB->string_to_object(aValue.c_str());
167 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
169 return anObj._retn();
172 //=======================================================================
173 // function : ClientStudyToStudy
175 //=======================================================================
176 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
178 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
179 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
180 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
181 int aStudyID = theStudy->StudyId();
182 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
183 return aDSStudy._retn();
186 void GeometryGUI::Modified (bool theIsUpdateActions)
188 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
189 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
190 appStudy->Modified();
191 if ( theIsUpdateActions )
192 app->updateActions();
197 //=======================================================================
198 // function : GeometryGUI::GeometryGUI()
199 // purpose : Constructor
200 //=======================================================================
201 GeometryGUI::GeometryGUI() :
202 SalomeApp_Module( "GEOM" ),
205 if ( CORBA::is_nil( myComponentGeom ) )
207 Engines::EngineComponent_var comp =
208 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
209 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
212 myActiveDialogBox = 0;
214 gp_Pnt origin = gp_Pnt(0., 0., 0.);
215 gp_Dir direction = gp_Dir(0., 0., 1.);
216 myWorkingPlane = gp_Ax3(origin, direction);
219 myLocalSelectionMode = GEOM_ALLOBJECTS;
221 myCreationInfoWdg = 0;
223 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
225 Q_INIT_RESOURCE( GEOMGUI );
228 //=======================================================================
229 // function : GeometryGUI::~GeometryGUI()
230 // purpose : Destructor
231 //=======================================================================
232 GeometryGUI::~GeometryGUI()
234 while (!myOCCSelectors.isEmpty())
235 delete myOCCSelectors.takeFirst();
237 while (!myVTKSelectors.isEmpty())
238 delete myVTKSelectors.takeFirst();
240 qDeleteAll(myGUIMap);
243 //=======================================================================
244 // function : GeometryGUI::getLibrary()
245 // purpose : get or load GUI library by name [ internal ]
246 //=======================================================================
247 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
248 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
250 if ( !myGUIMap.contains( libraryName ) ) {
251 // try to load library if it is not loaded yet
253 QString dirs = getenv( "LD_LIBRARY_PATH" );
256 QString dirs = getenv( "PATH" );
259 if ( !dirs.isEmpty() ) {
260 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
261 QListIterator<QString> it( dirList ); it.toBack();
262 while ( it.hasPrevious() ) {
263 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
265 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
266 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
268 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
269 continue; // continue search further
271 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
272 if ( osdF != NULL ) {
273 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
274 GEOMGUI* libGUI = (*func)( this );
276 myGUIMap[ libraryName ] = libGUI;
277 break; // found and loaded!
284 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
287 //=======================================================================
288 // function : GeometryGUI::getPluginLibrary()
289 // purpose : get or load GUI Plugin library by name [ internal ]
290 //=======================================================================
291 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
292 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
294 if ( !myGUIMap.contains( libraryName ) ) {
295 // try to load library if it is not loaded yet
297 QString dirs = getenv( "LD_LIBRARY_PATH" );
300 QString dirs = getenv( "PATH" );
303 if ( !dirs.isEmpty() ) {
304 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
305 QListIterator<QString> it( dirList ); it.toBack();
306 while ( it.hasPrevious() ) {
307 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
309 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
310 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
312 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
313 continue; // continue search further
315 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
316 if ( osdF != NULL ) {
317 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
318 GEOMPluginGUI* libGUI = (*func)( this );
320 myGUIMap[ libraryName ] = libGUI;
321 break; // found and loaded!
328 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
331 //=======================================================================
332 // function : GeometryGUI::ActiveWorkingPlane()
333 // purpose : Activate Working Plane View
334 //=======================================================================
335 void GeometryGUI::ActiveWorkingPlane()
337 gp_Dir DZ = myWorkingPlane.Direction();
338 gp_Dir DY = myWorkingPlane.YDirection();
340 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
341 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
342 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
345 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
347 Handle(V3d_View) view3d = vw->getViewPort()->getView();
349 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
350 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
354 else if ( ViewVTK ) {
355 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
357 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
359 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
360 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
361 camera->SetFocalPoint(0,0,0);
368 //=======================================================================
369 // function : GeometryGUI::SetActiveDialogBox()
370 // purpose : Set active dialog box
371 //=======================================================================
372 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
374 myActiveDialogBox = (QDialog*)aDlg;
377 //=======================================================================
378 // function : GeometryGUI::EmitSignalDeactivateDialog()
379 // purpose : Emit a signal to deactivate the active dialog Box
380 //=======================================================================
381 void GeometryGUI::EmitSignalDeactivateDialog()
383 emit SignalDeactivateActiveDialog();
386 //=======================================================================
387 // function : GeometryGUI::EmitSignalCloseAllDialogs()
388 // purpose : Emit a signal to close all non modal dialogs box
389 //=======================================================================
390 void GeometryGUI::EmitSignalCloseAllDialogs()
392 emit SignalCloseAllDialogs();
395 //=======================================================================
396 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
397 // purpose : Emit a signal to inform that default real spin box step has
399 //=======================================================================
400 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
402 emit SignalDefaultStepValueChanged(newVal);
405 //=======================================================================
406 // function : GeometryGUI::OnGUIEvent()
407 // purpose : common slot for all menu/toolbar actions
408 //=======================================================================
409 void GeometryGUI::OnGUIEvent()
411 const QObject* obj = sender();
412 if ( !obj || !obj->inherits( "QAction" ) )
414 int id = actionId((QAction*)obj);
419 //=======================================================================
420 // function : GeometryGUI::OnGUIEvent()
421 // purpose : manage all events on GUI [static]
422 //=======================================================================
423 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
425 SUIT_Application* anApp = application();
427 SUIT_Desktop* desk = anApp->desktop();
429 // check type of the active viewframe
430 SUIT_ViewWindow* window = desk->activeWindow();
431 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
432 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
433 bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() );
434 // if current viewframe is not of OCC and not of VTK type - return immediately
435 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
436 QList<int> NotViewerDependentCommands;
437 NotViewerDependentCommands << GEOMOp::OpDelete
439 << GEOMOp::OpShowOnly
440 << GEOMOp::OpShowOnlyChildren
441 << GEOMOp::OpDiscloseChildren
442 << GEOMOp::OpConcealChildren
443 << GEOMOp::OpUnpublishObject
444 << GEOMOp::OpPublishObject
445 << GEOMOp::OpPointMarker
446 << GEOMOp::OpCreateFolder
447 << GEOMOp::OpSortChildren;
448 if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) {
449 // activate OCC viewer
450 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
453 // fix for IPAL9103, point 2
454 if ( CORBA::is_nil( GetGeomGen() ) ) {
455 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
460 // find corresponding GUI library
462 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
463 createOriginAndBaseVectors(); // internal operation
465 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
466 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
467 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
468 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
469 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
470 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
471 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
472 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
473 case GEOMOp::OpDelete: // MENU EDIT - DELETE
474 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
475 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
476 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
477 case GEOMOp::OpColor: // POPUP MENU - COLOR
478 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
479 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
480 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
481 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
482 case GEOMOp::OpIsos: // POPUP MENU - ISOS
483 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
484 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
485 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
486 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
487 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
488 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
489 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
490 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
491 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
492 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
493 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
494 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
495 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
496 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
497 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
498 case GEOMOp::OpClsBringToFront: //
499 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
500 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
501 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
502 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
503 libName = "GEOMToolsGUI";
505 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
506 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
507 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
508 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
509 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
510 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
511 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
512 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
513 case GEOMOp::OpHide: // MENU VIEW - ERASE
514 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
515 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
516 case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE
517 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
518 case GEOMOp::OpShading: // POPUP MENU - SHADING
519 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
520 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
521 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
522 case GEOMOp::OpVertices: // POPUP MENU - VERTICES
523 libName = "DisplayGUI";
525 case GEOMOp::OpPoint: // MENU BASIC - POINT
526 case GEOMOp::OpLine: // MENU BASIC - LINE
527 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
528 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
529 case GEOMOp::OpArc: // MENU BASIC - ARC
530 case GEOMOp::OpVector: // MENU BASIC - VECTOR
531 case GEOMOp::OpPlane: // MENU BASIC - PLANE
532 case GEOMOp::OpCurve: // MENU BASIC - CURVE
533 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
534 libName = "BasicGUI";
536 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
537 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
538 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
539 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
540 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
541 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
542 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
543 libName = "PrimitiveGUI";
545 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
546 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
547 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
548 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
549 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
550 libName = "GenerationGUI";
552 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
553 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
554 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
555 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
557 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
559 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
560 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
561 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
562 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
563 case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR
564 libName = "EntityGUI";
566 case GEOMOp::OpEdge: // MENU BUILD - EDGE
567 case GEOMOp::OpWire: // MENU BUILD - WIRE
568 case GEOMOp::OpFace: // MENU BUILD - FACE
569 case GEOMOp::OpShell: // MENU BUILD - SHELL
570 case GEOMOp::OpSolid: // MENU BUILD - SOLID
571 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
572 libName = "BuildGUI";
574 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
575 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
576 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
577 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
578 libName = "BooleanGUI";
580 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
581 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
582 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
583 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
584 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
585 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
586 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
587 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
588 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
589 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
590 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 libName = "OperationGUI";
605 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
606 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
607 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
608 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
609 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
610 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
611 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
612 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
613 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
614 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
615 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
616 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
617 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
618 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
619 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
620 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
621 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
622 libName = "RepairGUI";
624 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
625 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
626 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
627 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
628 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
629 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
630 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
631 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
632 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
633 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
634 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
635 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
636 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
637 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
638 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
639 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
640 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
641 libName = "MeasureGUI";
643 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
644 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
645 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
646 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
647 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
648 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
649 libName = "GroupGUI";
651 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
652 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
653 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
654 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
655 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
656 libName = "BlocksGUI";
658 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
659 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
660 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
661 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
662 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
663 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
664 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
665 //libName = "AdvancedGUI";
668 if (myPluginActions.contains(id)) {
669 libName = myPluginActions[id].first;
671 GEOMPluginGUI* library = 0;
672 if ( !libName.isEmpty() ) {
674 libName = QString( "lib" ) + libName + ".so";
676 libName = libName + ".dll";
678 library = getPluginLibrary( libName );
681 // call method of corresponding GUI library
683 //QString action ("%1");
684 //action = action.arg(id);
686 //if( !theParam.isValid() )
687 library->OnGUIEvent( myPluginActions[id].second, desk );
689 // library->OnGUIEvent( id, desk, theParam);
692 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
694 updateCreationInfo();
700 GEOMGUI* library = 0;
701 if ( !libName.isEmpty() ) {
703 libName = QString( "lib" ) + libName + ".so";
705 libName = libName + ".dll";
707 library = getLibrary( libName );
710 // call method of corresponding GUI library
712 if( !theParam.isValid() )
713 library->OnGUIEvent( id, desk );
715 library->OnGUIEvent( id, desk, theParam);
718 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
720 updateCreationInfo();
723 //=================================================================================
724 // function : GeometryGUI::activateOperation()
726 //=================================================================================
727 bool GeometryGUI::activateOperation( int actionId )
729 OnGUIEvent(actionId);
733 //=================================================================================
734 // function : GeometryGUI::activateOperation()
736 //=================================================================================
737 bool GeometryGUI::activateOperation( const QString& actionId )
741 int id = actionId.toInt(&isOk);
748 //=================================================================================
749 // function : GeometryGUI::activateOperation()
751 //=================================================================================
752 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
756 QString pluginLib = plugin;
757 // TODO: if <plugin> is a plugin name, find plugin library name
758 if (myPluginLibs.contains(plugin))
759 pluginLib = myPluginLibs[plugin];
761 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
762 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
763 const PluginAction& anAction = actionsIter.value();
764 if (anAction.first == pluginLib && anAction.second == actionId) {
765 // activate operation
766 OnGUIEvent(actionsIter.key());
774 //=================================================================================
775 // function : GeometryGUI::OnKeyPress()
776 // purpose : Called when any key is pressed by user [static]
777 //=================================================================================
778 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
780 if ( !application() )
782 foreach ( GEOMGUI* lib, myGUIMap )
783 lib->OnKeyPress( e, application()->desktop(), w );
786 //=================================================================================
787 // function : GeometryGUI::OnMouseMove()
788 // purpose : Manages mouse move events [static]
789 //=================================================================================
790 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
792 if ( !application() )
794 foreach ( GEOMGUI* lib, myGUIMap )
795 lib->OnMouseMove( e, application()->desktop(), w );
798 //=================================================================================
799 // function : GeometryGUI::OnMouseRelease()
800 // purpose : Manages mouse release events [static]
801 //=================================================================================
802 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
804 if ( !application() )
806 foreach ( GEOMGUI* lib, myGUIMap )
807 lib->OnMouseRelease( e, application()->desktop(), w );
810 //=================================================================================
811 // function : GeometryGUI::OnMousePress()
812 // purpose : Manage mouse press events [static]
813 //=================================================================================
814 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
816 if ( !application() )
818 foreach ( GEOMGUI* lib, myGUIMap )
819 lib->OnMousePress( e, application()->desktop(), w );
822 //=======================================================================
823 // function : createGeomAction
825 //=======================================================================
826 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
827 const int accel, const bool toggle, const QString& shortcutAction )
829 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
830 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
831 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
833 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
835 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
836 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
838 application()->desktop(),
840 this, SLOT( OnGUIEvent() ),
844 //=======================================================================
845 // function : createOriginAndBaseVectors
847 //=======================================================================
848 void GeometryGUI::createOriginAndBaseVectors()
850 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
851 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
853 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
857 _PTR(Study) studyDS = appStudy->studyDS();
858 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
859 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
860 if ( !aBasicOperations->_is_nil() ) {
861 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
862 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
863 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
864 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
865 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
866 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
868 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
869 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
870 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
871 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
872 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
874 getApp()->updateObjectBrowser( true );
880 //=======================================================================
881 // function : GeometryGUI::initialize()
882 // purpose : Called when GEOM module is created
883 //=======================================================================
884 void GeometryGUI::initialize( CAM_Application* app )
886 SalomeApp_Module::initialize( app );
888 // ----- create actions --------------
890 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
892 createGeomAction( GEOMOp::OpPoint, "POINT" );
893 createGeomAction( GEOMOp::OpLine, "LINE" );
894 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
895 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
896 createGeomAction( GEOMOp::OpArc, "ARC" );
897 createGeomAction( GEOMOp::OpCurve, "CURVE" );
898 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
899 createGeomAction( GEOMOp::OpVector, "VECTOR" );
900 createGeomAction( GEOMOp::OpPlane, "PLANE" );
901 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
902 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
904 createGeomAction( GEOMOp::OpBox, "BOX" );
905 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
906 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
907 createGeomAction( GEOMOp::OpTorus, "TORUS" );
908 createGeomAction( GEOMOp::OpCone, "CONE" );
909 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
910 createGeomAction( GEOMOp::OpDisk, "DISK" );
912 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
913 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
914 createGeomAction( GEOMOp::OpFilling, "FILLING" );
915 createGeomAction( GEOMOp::OpPipe, "PIPE" );
916 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
918 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
919 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
920 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
921 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
922 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
924 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
925 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
927 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
929 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
930 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
932 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
933 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
934 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
935 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
937 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
939 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
940 createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" );
942 createGeomAction( GEOMOp::OpEdge, "EDGE" );
943 createGeomAction( GEOMOp::OpWire, "WIRE" );
944 createGeomAction( GEOMOp::OpFace, "FACE" );
945 createGeomAction( GEOMOp::OpShell, "SHELL" );
946 createGeomAction( GEOMOp::OpSolid, "SOLID" );
947 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
949 createGeomAction( GEOMOp::OpFuse, "FUSE" );
950 createGeomAction( GEOMOp::OpCommon, "COMMON" );
951 createGeomAction( GEOMOp::OpCut, "CUT" );
952 createGeomAction( GEOMOp::OpSection, "SECTION" );
954 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
955 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
956 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
957 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
958 createGeomAction( GEOMOp::OpScale, "SCALE" );
959 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
960 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
961 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
962 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
964 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
965 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
966 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
967 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
968 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
969 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
970 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
971 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
972 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
973 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
974 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
976 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
977 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
978 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
980 createGeomAction( GEOMOp::OpSewing, "SEWING" );
981 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
982 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
983 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
984 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
985 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
986 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
987 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
988 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
989 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
990 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
991 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
992 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
993 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
994 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
995 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
996 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
998 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
999 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1000 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1001 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1002 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1003 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1004 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1005 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1006 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1008 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1009 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1010 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1011 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1012 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1013 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1015 #ifdef _DEBUG_ // PAL16821
1016 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1019 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1020 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1021 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1022 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1023 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1024 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1025 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1026 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1027 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1028 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1029 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1030 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1031 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1032 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1033 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1034 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1035 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1036 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1037 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1038 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1039 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1040 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1041 createGeomAction( GEOMOp::OpHide, "ERASE" );
1043 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1044 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1045 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1046 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1047 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1048 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1049 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1050 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1051 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1052 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1053 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1054 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1055 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1056 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1057 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1058 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1059 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1060 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1061 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1062 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1063 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1064 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1065 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1066 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1067 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1068 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1069 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1070 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1071 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1072 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1074 // Create actions for increase/decrease transparency shortcuts
1075 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1076 "Geometry:Increase transparency");
1077 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1078 "Geometry:Decrease transparency");
1080 // Create actions for increase/decrease number of isolines
1081 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1082 "Geometry:Increase number of isolines");
1083 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1084 "Geometry:Decrease number of isolines");
1086 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1087 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1088 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1089 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1090 //@@ 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 @@//
1092 // ---- create menus --------------------------
1094 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1096 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1097 createMenu( GEOMOp::OpDelete, editId, -1 );
1099 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1101 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1102 createMenu( GEOMOp::OpPoint, basicId, -1 );
1103 createMenu( GEOMOp::OpLine, basicId, -1 );
1104 createMenu( GEOMOp::OpCircle, basicId, -1 );
1105 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1106 createMenu( GEOMOp::OpArc, basicId, -1 );
1107 createMenu( GEOMOp::OpCurve, basicId, -1 );
1108 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1109 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1110 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1111 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1112 createMenu( separator(), basicId, -1 );
1113 createMenu( GEOMOp::OpVector, basicId, -1 );
1114 createMenu( GEOMOp::OpPlane, basicId, -1 );
1115 createMenu( GEOMOp::OpLCS, basicId, -1 );
1116 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1118 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1119 createMenu( GEOMOp::OpBox, primId, -1 );
1120 createMenu( GEOMOp::OpCylinder, primId, -1 );
1121 createMenu( GEOMOp::OpSphere, primId, -1 );
1122 createMenu( GEOMOp::OpTorus, primId, -1 );
1123 createMenu( GEOMOp::OpCone, primId, -1 );
1124 createMenu( GEOMOp::OpRectangle, primId, -1 );
1125 createMenu( GEOMOp::OpDisk, primId, -1 );
1126 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1128 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1129 createMenu( GEOMOp::OpPrism, genId, -1 );
1130 createMenu( GEOMOp::OpRevolution, genId, -1 );
1131 createMenu( GEOMOp::OpFilling, genId, -1 );
1132 createMenu( GEOMOp::OpPipe, genId, -1 );
1133 createMenu( GEOMOp::OpPipePath, genId, -1 );
1135 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1136 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1137 //@@ 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 @@//
1139 createMenu( separator(), newEntId, -1 );
1141 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1142 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1143 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1144 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1145 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1146 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1148 createMenu( separator(), newEntId, -1 );
1150 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1151 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1152 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1154 createMenu( separator(), newEntId, -1 );
1156 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1157 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1158 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1159 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1160 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1162 createMenu( separator(), newEntId, -1 );
1164 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1166 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1167 createMenu( GEOMOp::OpEdge, buildId, -1 );
1168 createMenu( GEOMOp::OpWire, buildId, -1 );
1169 createMenu( GEOMOp::OpFace, buildId, -1 );
1170 createMenu( GEOMOp::OpShell, buildId, -1 );
1171 createMenu( GEOMOp::OpSolid, buildId, -1 );
1172 createMenu( GEOMOp::OpCompound, buildId, -1 );
1174 createMenu( separator(), newEntId, -1 );
1176 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1178 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1181 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1183 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1184 createMenu( GEOMOp::OpFuse, boolId, -1 );
1185 createMenu( GEOMOp::OpCommon, boolId, -1 );
1186 createMenu( GEOMOp::OpCut, boolId, -1 );
1187 createMenu( GEOMOp::OpSection, boolId, -1 );
1189 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1190 createMenu( GEOMOp::OpTranslate, transId, -1 );
1191 createMenu( GEOMOp::OpRotate, transId, -1 );
1192 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1193 createMenu( GEOMOp::OpMirror, transId, -1 );
1194 createMenu( GEOMOp::OpScale, transId, -1 );
1195 createMenu( GEOMOp::OpOffset, transId, -1 );
1196 createMenu( GEOMOp::OpProjection, transId, -1 );
1197 createMenu( separator(), transId, -1 );
1198 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1199 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1201 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1202 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1203 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1204 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1206 createMenu( separator(), operId, -1 );
1208 createMenu( GEOMOp::OpPartition, operId, -1 );
1209 createMenu( GEOMOp::OpArchimede, operId, -1 );
1210 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1211 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1213 createMenu( separator(), operId, -1 );
1215 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1216 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1217 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1218 createMenu( GEOMOp::OpChamfer, operId, -1 );
1219 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1220 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1221 //createMenu( GEOMOp::OpClipping, operId, -1 );
1223 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1224 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1225 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1226 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1227 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1228 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1229 createMenu( GEOMOp::OpSewing, repairId, -1 );
1230 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1231 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1232 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1233 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1234 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1235 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1236 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1237 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1238 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1239 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1240 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1242 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1243 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1244 createMenu( GEOMOp::OpProperties, measurId, -1 );
1245 createMenu( separator(), measurId, -1 );
1246 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1247 createMenu( GEOMOp::OpInertia, measurId, -1 );
1248 createMenu( GEOMOp::OpNormale, measurId, -1 );
1249 createMenu( separator(), measurId, -1 );
1250 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1251 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1252 createMenu( separator(), measurId, -1 );
1254 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1255 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1256 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1257 createMenu( GEOMOp::OpAngle, dimId, -1 );
1258 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1260 createMenu( separator(), measurId, -1 );
1261 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1262 createMenu( separator(), measurId, -1 );
1263 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1264 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1265 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1266 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1267 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1269 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1270 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1271 createMenu( separator(), toolsId, -1 );
1272 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1275 createMenu( separator(), toolsId, -1 );
1276 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1277 createMenu( separator(), toolsId, -1 );
1279 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1280 createMenu( separator(), viewId, -1 );
1282 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1283 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1284 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1285 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1286 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1287 createMenu( separator(), dispmodeId, -1 );
1288 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1289 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1291 createMenu( separator(), viewId, -1 );
1292 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1293 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1294 createMenu( separator(), viewId, -1 );
1295 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1296 createMenu( separator(), viewId, -1 );
1300 because of these items are accessible through object browser and viewers
1301 we have removed they from main menu
1303 createMenu( GEOMOp::OpShow, viewId, -1 );
1304 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1305 createMenu( GEOMOp::OpHide, viewId, -1 );
1308 // ---- create toolbars --------------------------
1310 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1311 createTool( GEOMOp::OpPoint, basicTbId );
1312 createTool( GEOMOp::OpLine, basicTbId );
1313 createTool( GEOMOp::OpCircle, basicTbId );
1314 createTool( GEOMOp::OpEllipse, basicTbId );
1315 createTool( GEOMOp::OpArc, basicTbId );
1316 createTool( GEOMOp::OpCurve, basicTbId );
1317 createTool( GEOMOp::OpVector, basicTbId );
1318 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1319 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1320 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1321 createTool( GEOMOp::OpIsoline, basicTbId );
1322 createTool( GEOMOp::OpPlane, basicTbId );
1323 createTool( GEOMOp::OpLCS, basicTbId );
1324 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1326 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1327 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1328 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1330 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1331 createTool( GEOMOp::OpBox, primTbId );
1332 createTool( GEOMOp::OpCylinder, primTbId );
1333 createTool( GEOMOp::OpSphere, primTbId );
1334 createTool( GEOMOp::OpTorus, primTbId );
1335 createTool( GEOMOp::OpCone, primTbId );
1336 createTool( GEOMOp::OpRectangle, primTbId );
1337 createTool( GEOMOp::OpDisk, primTbId );
1338 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1340 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1341 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1342 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1344 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1345 createTool( GEOMOp::OpFuse, boolTbId );
1346 createTool( GEOMOp::OpCommon, boolTbId );
1347 createTool( GEOMOp::OpCut, boolTbId );
1348 createTool( GEOMOp::OpSection, boolTbId );
1350 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1351 createTool( GEOMOp::OpPrism, genTbId );
1352 createTool( GEOMOp::OpRevolution, genTbId );
1353 createTool( GEOMOp::OpFilling, genTbId );
1354 createTool( GEOMOp::OpPipe, genTbId );
1355 createTool( GEOMOp::OpPipePath, genTbId );
1357 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1358 createTool( GEOMOp::OpTranslate, transTbId );
1359 createTool( GEOMOp::OpRotate, transTbId );
1360 createTool( GEOMOp::OpChangeLoc, transTbId );
1361 createTool( GEOMOp::OpMirror, transTbId );
1362 createTool( GEOMOp::OpScale, transTbId );
1363 createTool( GEOMOp::OpOffset, transTbId );
1364 createTool( GEOMOp::OpProjection, transTbId );
1365 createTool( separator(), transTbId );
1366 createTool( GEOMOp::OpMultiTranslate, transTbId );
1367 createTool( GEOMOp::OpMultiRotate, transTbId );
1369 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1370 createTool( GEOMOp::OpExplode, operTbId );
1371 createTool( GEOMOp::OpPartition, operTbId );
1372 createTool( GEOMOp::OpArchimede, operTbId );
1373 createTool( GEOMOp::OpShapesOnShape, operTbId );
1374 createTool( GEOMOp::OpSharedShapes, operTbId );
1376 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1377 createTool( GEOMOp::OpFillet1d, featTbId );
1378 createTool( GEOMOp::OpFillet2d, featTbId );
1379 createTool( GEOMOp::OpFillet3d, featTbId );
1380 createTool( GEOMOp::OpChamfer, featTbId );
1381 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1382 createTool( GEOMOp::OpExtrudedCut, featTbId );
1384 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1385 createTool( GEOMOp::OpEdge, buildTbId );
1386 createTool( GEOMOp::OpWire, buildTbId );
1387 createTool( GEOMOp::OpFace, buildTbId );
1388 createTool( GEOMOp::OpShell, buildTbId );
1389 createTool( GEOMOp::OpSolid, buildTbId );
1390 createTool( GEOMOp::OpCompound, buildTbId );
1392 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1393 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1394 createTool( GEOMOp::OpProperties, measureTbId );
1395 createTool( GEOMOp::OpCenterMass, measureTbId );
1396 createTool( GEOMOp::OpInertia, measureTbId );
1397 createTool( GEOMOp::OpNormale, measureTbId );
1398 createTool( separator(), measureTbId );
1399 createTool( GEOMOp::OpBoundingBox, measureTbId );
1400 createTool( GEOMOp::OpMinDistance, measureTbId );
1401 createTool( GEOMOp::OpAngle, measureTbId );
1402 createTool( GEOMOp::OpTolerance , measureTbId );
1403 createTool( separator(), measureTbId );
1404 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1405 createTool( GEOMOp::OpFreeFaces, measureTbId );
1406 createTool( separator(), measureTbId );
1407 createTool( GEOMOp::OpWhatIs, measureTbId );
1408 createTool( GEOMOp::OpCheckShape, measureTbId );
1409 createTool( GEOMOp::OpCheckCompound, measureTbId );
1410 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1411 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1413 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1414 createTool( GEOMOp::OpPictureImport, picturesTbId );
1416 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1419 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1420 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1421 //@@ 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 @@//
1423 // ---- create popup menus --------------------------
1425 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1426 QString clientOCC = "(client='OCCViewer')";
1427 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1428 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1430 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1431 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1432 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1433 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1435 QString autoColorPrefix =
1436 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1438 QtxPopupMgr* mgr = popupMgr();
1440 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1441 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1442 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1443 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1444 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1445 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1446 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1447 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1449 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1450 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1451 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1452 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1453 mgr->insert( separator(), -1, -1 ); // -----------
1455 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1456 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1457 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1458 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1459 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1460 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1461 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1462 mgr->insert( separator(), -1, -1 ); // -----------
1463 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1464 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1465 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1466 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1467 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1468 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1469 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1470 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1471 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1472 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1473 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1474 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1475 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1476 mgr->insert( separator(), dispmodeId, -1 );
1477 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1478 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1479 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1480 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1481 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1482 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1483 mgr->insert( separator(), -1, -1 ); // -----------
1485 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1486 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1487 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1488 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1489 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1490 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1491 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1492 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1493 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1494 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1496 // material properties
1497 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1498 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1501 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1502 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1504 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1505 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1506 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1508 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1509 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1511 mgr->insert( separator(), -1, -1 ); // -----------
1512 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1513 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1514 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1515 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1516 mgr->insert( separator(), -1, -1 ); // -----------
1518 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1519 onlyComponent = "((type='Component') and selcount=1)",
1520 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1521 types = "'Shape' 'Group' 'FieldStep'";
1523 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1524 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1526 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1527 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1529 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1530 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1532 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1534 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1535 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1536 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1537 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1538 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1539 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1540 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1541 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1542 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1543 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1544 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1545 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1546 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1547 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1548 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1549 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1550 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1551 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1552 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1553 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1554 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1555 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1556 mgr->insert( separator(), selectonlyId, -1);
1557 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1558 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1559 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1560 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1561 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1562 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1563 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1565 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1567 mgr->insert( separator(), -1, -1 ); // -----------
1568 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1569 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1570 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1571 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1573 mgr->insert( separator(), -1, -1 ); // -----------
1574 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1575 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1577 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1578 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1580 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1581 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1583 mgr->insert( separator(), -1, -1 ); // -----------
1584 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1585 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1587 mgr->insert( separator(), -1, -1 ); // -----------
1588 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1589 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1591 mgr->insert( separator(), -1, -1 ); // -----------
1592 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1593 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1595 mgr->insert( separator(), -1, -1 ); // -----------
1596 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1597 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1599 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1601 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1603 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1604 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1605 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1608 // create plugin actions and menus
1612 //=======================================================================
1613 // function : GeometryGUI::addPluginActions()
1615 //=======================================================================
1616 void GeometryGUI::addPluginActions()
1619 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1620 if (!resMgr) return;
1622 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1623 if (!appStudy) return;
1625 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1627 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1629 int id = GEOMOp::OpLastOperationID; // TODO?
1632 GEOMUtils::PluginInfo::const_iterator it;
1633 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1634 // bind action lib and label to its ID for activateOperation() method proper work
1635 GEOMUtils::PluginData pdata = (*it);
1636 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1637 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1638 std::list<GEOMUtils::ActionData>::const_iterator ait;
1639 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1640 GEOMUtils::ActionData adata = (*ait);
1643 if ( !adata.icon.empty() )
1644 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1646 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1647 QString actionName = smenus.last();
1648 actionName = actionName.toUpper().prepend( "MEN_" );
1649 smenus.removeLast();
1651 // path to action in toolbar
1652 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1653 QString actionTool = stools.last();
1654 actionTool = actionTool.toUpper().prepend( "TOP_" );
1655 stools.removeLast();
1657 QString actionStat = adata.statusText.c_str();
1658 actionStat = actionStat.toUpper().prepend( "STB_" );
1660 createAction( id, // ~ adata.label
1661 tr( actionTool.toLatin1().constData() ),
1663 tr( actionName.toLatin1().constData() ),
1664 tr( actionStat.toLatin1().constData() ),
1665 QKeySequence( tr( adata.accel.c_str() ) ),
1666 application()->desktop(),
1668 this, SLOT( OnGUIEvent() ),
1669 QString() /*shortcutAction*/ );
1672 foreach ( QString subMenu, smenus ) {
1673 QStringList subMenuList = subMenu.split( ":" );
1674 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1675 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1676 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1678 createMenu( id, menuId, -1 );
1680 if ( !stools.isEmpty() ) {
1681 QString subTool = stools[0];
1682 subTool = subTool.toUpper().prepend( "TOOL_" );
1683 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1684 createTool(id, toolId);
1687 // add action id to map
1688 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1689 myPluginActions[id] = anAction;
1696 //=======================================================================
1697 // function : GeometryGUI::activateModule()
1698 // purpose : Called when GEOM module is activated
1699 //=======================================================================
1700 bool GeometryGUI::activateModule( SUIT_Study* study )
1702 if ( CORBA::is_nil( myComponentGeom ) )
1705 bool res = SalomeApp_Module::activateModule( study );
1709 setMenuShown( true );
1710 setToolShown( true );
1712 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1713 PyGILState_STATE gstate = PyGILState_Ensure();
1714 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1715 if ( !pluginsmanager ) {
1719 PyObjWrapper result =
1720 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1721 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1722 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1726 PyGILState_Release(gstate);
1727 // end of GEOM plugins loading
1729 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1730 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1732 // Reset actions accelerator keys
1733 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1735 GUIMap::Iterator it;
1736 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1737 it.value()->activate( application()->desktop() );
1739 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1741 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1742 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1743 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1745 if ( !myCreationInfoWdg )
1746 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1747 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1748 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1751 SALOME_ListIO selected;
1752 sm->selectedObjects( selected );
1753 sm->clearSelected();
1755 SUIT_ViewManager* vm;
1756 ViewManagerList OCCViewManagers, VTKViewManagers;
1758 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1759 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1760 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1761 onViewManagerAdded(vm);
1763 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1764 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1765 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1766 onViewManagerAdded(vm);
1768 sm->setSelectedObjects( selected, true ); //NPAL 19674
1770 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1772 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1774 // 0020836 (Basic vectors and origin)
1775 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1776 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1777 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1779 _PTR(Study) studyDS = appStudy->studyDS();
1781 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1782 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1783 createOriginAndBaseVectors();
1791 //=======================================================================
1792 // function : GeometryGUI::deactivateModule()
1793 // purpose : Called when GEOM module is deactivated
1794 //=======================================================================
1795 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1797 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1799 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1801 setMenuShown( false );
1802 setToolShown( false );
1804 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1805 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1807 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1809 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1810 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1811 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1812 myCreationInfoWdg = 0;
1814 EmitSignalCloseAllDialogs();
1816 GUIMap::Iterator it;
1817 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1818 it.value()->deactivate();
1820 // Unset actions accelerator keys
1821 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1823 qDeleteAll(myOCCSelectors);
1824 myOCCSelectors.clear();
1825 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1827 qDeleteAll(myVTKSelectors);
1828 myVTKSelectors.clear();
1829 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1831 return SalomeApp_Module::deactivateModule( study );
1834 //=======================================================================
1835 // function : onWindowActivated()
1836 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1837 //=======================================================================
1838 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1843 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1844 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1846 // disable non-OCC viewframe menu commands
1847 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1848 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1849 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1850 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1851 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1852 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1853 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1855 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1856 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1857 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1858 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1860 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1863 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1865 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1866 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
1867 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1868 if ( myCreationInfoWdg )
1869 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1872 void GeometryGUI::viewManagers( QStringList& lst ) const
1874 lst.append( OCCViewer_Viewer::Type() );
1877 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1879 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1881 qDebug( "connect" );
1882 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1883 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1884 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1885 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1886 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1887 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1888 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1889 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1891 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1892 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1894 // disable OCC selectors
1895 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1896 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1897 while ( itOCCSel.hasNext() )
1898 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1899 sr->setEnabled(true);
1901 else if ( vm->getType() == SVTK_Viewer::Type() )
1903 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1904 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1906 // disable VTK selectors
1907 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1908 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1909 while ( itVTKSel.hasNext() )
1910 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1911 sr->setEnabled(true);
1915 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1917 SUIT_ViewModel* viewer = vm->getViewModel();
1918 if ( vm->getType() == OCCViewer_Viewer::Type() )
1920 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1921 while ( itOCCSel.hasNext() )
1922 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1923 if ( sr->viewer() == viewer )
1925 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1929 if ( vm->getType() == SVTK_Viewer::Type() )
1931 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1932 while ( itVTKSel.hasNext() )
1933 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1934 if ( sr->viewer() == viewer )
1936 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1942 //================================================================================
1944 * \brief Slot called when selection changed. Shows creation info of a selected object
1946 //================================================================================
1948 void GeometryGUI::updateCreationInfo()
1950 if ( myCreationInfoWdg )
1951 myCreationInfoWdg->clear();
1953 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
1954 // if ( !myCreationInfoWdg->isVisible() )
1957 // look for a sole selected GEOM_Object
1958 GEOM::GEOM_BaseObject_var geomObj;
1960 SALOME_ListIO selected;
1961 getApp()->selectionMgr()->selectedObjects( selected );
1963 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
1964 SALOME_ListIteratorOfListIO selIt( selected );
1965 for ( ; selIt.More(); selIt.Next() )
1967 Handle(SALOME_InteractiveObject) io = selIt.Value();
1968 if ( !io->hasEntry() ) continue;
1969 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
1970 if ( !sobj ) continue;
1971 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
1972 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
1973 if ( !gobj->_is_nil() )
1975 if ( !geomObj->_is_nil() )
1976 return; // several GEOM objects selected
1980 if ( geomObj->_is_nil() ) return;
1982 // pass creation info of geomObj to myCreationInfoWdg
1984 if ( myCreationInfoWdg ) {
1986 QString operationName;
1987 myCreationInfoWdg->setOperation( icon, operationName );
1991 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
1993 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1994 QString name = info->operationName.in();
1995 if ( !name.isEmpty() ) {
1997 QString plugin_name;
1998 for ( size_t i = 0; i < info->params.length(); ++i ) {
1999 myCreationInfoWdg->addParam( info->params[i].name.in(),
2000 info->params[i].value.in() );
2001 QString value = info->params[i].name.in();
2002 if( value == PLUGIN_NAME ) {
2003 plugin_name = info->params[i].value.in();
2006 QString prefix = plugin_name.isEmpty() ? "GEOM" : plugin_name;
2007 icon = resMgr->loadPixmap( prefix, tr( ("ICO_"+name).toLatin1().constData() ), false );
2008 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2009 if ( operationName.startsWith( "MEN_" ))
2010 operationName = name; // no translation
2011 myCreationInfoWdg->setOperation( icon, operationName );
2020 void GeometryGUI::onAutoBringToFront()
2022 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2023 if( !isAutoBringToFront )
2026 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2027 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2030 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2031 if (!appStudy) return;
2033 GEOM_Displayer displayer( appStudy );
2035 SALOME_View* window = displayer.GetActiveView();
2036 if ( !window ) return;
2038 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2040 SALOME_ListIO selected;
2041 getApp()->selectionMgr()->selectedObjects( selected );
2042 if (!myTopLevelIOList.IsEmpty())
2044 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2046 Handle( SALOME_InteractiveObject ) io = It.Value();
2047 bool isSelected = false;
2048 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2050 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2051 if( io->isSame( sel_io ) )
2054 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2056 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2057 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2062 myTopLevelIOList.Assign(selected);
2063 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2065 Handle( SALOME_InteractiveObject ) io = It.Value();
2066 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2067 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2070 displayer.UpdateViewer();
2071 GeometryGUI::Modified();
2074 void GeometryGUI::updateFieldColorScale()
2076 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2078 GEOM_Displayer aDisplayer( aStudy );
2079 aDisplayer.UpdateColorScale();
2083 QString GeometryGUI::engineIOR() const
2085 if ( !CORBA::is_nil( GetGeomGen() ) )
2086 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2090 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2091 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2093 theWidth = theHeight = 0;
2095 Handle(TColStd_HArray1OfByte) aTexture;
2098 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2099 aTexture = aTextureMap[ theId ];
2100 if ( aTexture.IsNull() ) {
2101 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2102 if ( !aInsOp->_is_nil() ) {
2103 CORBA::Long aWidth, aHeight;
2104 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2105 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2107 theHeight = aHeight;
2109 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2111 for (int i = 0; i < aStream->length(); i++)
2112 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2113 aTextureMap[ theId ] = aTexture;
2121 LightApp_Selection* GeometryGUI::createSelection() const
2123 return new GEOMGUI_Selection();
2126 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2128 SalomeApp_Module::contextMenuPopup( client, menu, title );
2130 getApp()->selectionMgr()->selectedObjects( lst );
2132 //Add submenu for predefined materials
2133 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2134 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2135 QtxPopupMgr* mgr = popupMgr();
2136 //get parrent for submenu
2137 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2139 QMenu* oldMenu = act->menu() ;
2144 QMenu* matMenu = new QMenu();
2145 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2147 //Get current material model for the object
2149 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2150 if ( anApp && anApp->activeViewManager() ) {
2151 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2153 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2156 QString curModel = "";
2157 if ( v.canConvert<QString>() ) curModel = v.toString();
2158 // get list of all predefined materials
2159 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2161 foreach ( QString material, materials )
2163 QAction* menAct = matMenu->addAction( material );
2164 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2165 signalMapper->setMapping( menAct, material );
2166 menAct->setCheckable( true );
2167 // Set checked if this material is current
2168 Material_Model aModel;
2169 aModel.fromResources( material );
2170 if ( !found && aModel.toProperties() == curModel ) {
2171 menAct->setChecked( true );
2175 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2176 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2177 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2178 this, SLOT( OnSetMaterial( const QString & ) ) );
2179 act->setMenu( matMenu );
2183 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2184 Handle(SALOME_InteractiveObject) io = lst.First();
2185 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2186 _PTR(Study) study = appStudy->studyDS();
2187 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2189 QString aName = QString( obj->GetName().c_str() );
2190 aName.remove( QRegExp("\\s+$") );
2196 void GeometryGUI::OnSetMaterial(const QString& theName)
2198 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2202 void GeometryGUI::createPreferences()
2204 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2206 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2207 setPreferenceProperty( genGroup, "columns", 2 );
2209 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2210 LightApp_Preferences::Selector,
2211 "Geometry", "display_mode" );
2213 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2214 LightApp_Preferences::Color, "Geometry", "shading_color" );
2216 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2217 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2219 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2220 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2222 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2223 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2225 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2226 LightApp_Preferences::Color, "Geometry", "line_color" );
2228 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2229 LightApp_Preferences::Color, "Geometry", "point_color" );
2231 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2232 LightApp_Preferences::Color, "Geometry", "isos_color" );
2234 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2235 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2237 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2238 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2240 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2241 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2243 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2244 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2246 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2247 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2249 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2250 LightApp_Preferences::Selector,
2251 "Geometry", "material" );
2253 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2254 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2260 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2261 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2263 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2264 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2266 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2267 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2269 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2270 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2272 for (int i = 0; i < nb; i++) {
2273 setPreferenceProperty( wd[i], "min", 1 );
2274 setPreferenceProperty( wd[i], "max", 5 );
2277 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2278 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2280 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2281 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2283 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2284 setPreferenceProperty( aDimGroupId, "columns", 2 );
2286 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2287 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2289 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2290 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2292 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2293 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2295 int aDimFontHeightId = addPreference( tr( "PREF_DIMENSIONS_FONT_HEIGHT" ), aDimGroupId,
2296 LightApp_Preferences::DblSpin, "Geometry", "dimensions_font_height" );
2298 setPreferenceProperty( aDimFontHeightId, "min", 1e-9 );
2299 setPreferenceProperty( aDimFontHeightId, "max", 1e+9 );
2300 setPreferenceProperty( aDimFontHeightId, "precision", 9 );
2302 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2303 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2305 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2306 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2307 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2309 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2310 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2312 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2313 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2315 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2316 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2318 QStringList aListOfLengthUnits;
2319 aListOfLengthUnits << "m";
2320 aListOfLengthUnits << "cm";
2321 aListOfLengthUnits << "mm";
2322 aListOfLengthUnits << "in.";
2323 aListOfLengthUnits << "ft.";
2325 QStringList aListOfAngUnits;
2326 aListOfAngUnits << "rad";
2327 aListOfAngUnits << "deg";
2329 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2330 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2332 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2333 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2335 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2336 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2337 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2339 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2340 setPreferenceProperty( isoGroup, "columns", 2 );
2341 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2342 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2343 setPreferenceProperty( isoU, "min", 0 );
2344 setPreferenceProperty( isoU, "max", 100000 );
2345 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2346 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2347 setPreferenceProperty( isoV, "min", 0 );
2348 setPreferenceProperty( isoV, "max", 100000 );
2350 // Quantities with individual precision settings
2351 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2352 setPreferenceProperty( precGroup, "columns", 2 );
2354 const int nbQuantities = 8;
2355 int prec[nbQuantities], ii = 0;
2356 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2357 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2358 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2359 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2360 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2361 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2362 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2363 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2364 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2365 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2366 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2367 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2368 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2369 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2370 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2371 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2373 // Set property for precision value for spinboxes
2374 for ( ii = 0; ii < nbQuantities; ii++ ){
2375 setPreferenceProperty( prec[ii], "min", -14 );
2376 setPreferenceProperty( prec[ii], "max", 14 );
2377 setPreferenceProperty( prec[ii], "precision", 2 );
2380 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2381 setPreferenceProperty( VertexGroup, "columns", 2 );
2383 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2384 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2386 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2387 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2389 // Set property for default display mode
2390 QStringList aModesList;
2391 aModesList.append( tr("MEN_WIREFRAME") );
2392 aModesList.append( tr("MEN_SHADING") );
2393 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2394 aModesList.append( tr("MEN_TEXTURE") );
2396 QList<QVariant> anIndexesList;
2397 anIndexesList.append(0);
2398 anIndexesList.append(1);
2399 anIndexesList.append(2);
2400 anIndexesList.append(3);
2402 setPreferenceProperty( dispmode, "strings", aModesList );
2403 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2405 // Set property for top level display mode
2406 QStringList aTopModesList;
2407 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2408 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2409 aTopModesList.append( tr("MEN_WIREFRAME") );
2410 aTopModesList.append( tr("MEN_SHADING") );
2411 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2413 QList<QVariant> aTopIndexesList;
2414 aTopIndexesList.append(0);
2415 aTopIndexesList.append(1);
2416 aTopIndexesList.append(2);
2417 aTopIndexesList.append(3);
2418 aTopIndexesList.append(4);
2420 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2421 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2423 // Set property for step value for spinboxes
2424 setPreferenceProperty( step, "min", 1 );
2425 setPreferenceProperty( step, "max", 10000 );
2426 setPreferenceProperty( step, "precision", 3 );
2428 // Set property for trandparency value for spinboxes
2429 setPreferenceProperty( transparency, "min", 0 );
2430 setPreferenceProperty( transparency, "max", 100 );
2432 // Set property for deflection value for spinboxes
2433 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2434 setPreferenceProperty( defl, "max", 1.0 );
2435 setPreferenceProperty( defl, "step", 1.0e-04 );
2436 setPreferenceProperty( defl, "precision", 6 );
2438 // Set property for default material
2439 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2441 // Set property vertex marker type
2442 QList<QVariant> aMarkerTypeIndicesList;
2443 QList<QVariant> aMarkerTypeIconsList;
2445 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2446 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2447 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2448 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2449 aMarkerTypeIndicesList << (i-1);
2450 aMarkerTypeIconsList << pixmap;
2453 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2454 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2456 // Set property for vertex marker scale
2457 QList<QVariant> aMarkerScaleIndicesList;
2458 QStringList aMarkerScaleValuesList;
2460 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2461 aMarkerScaleIndicesList << iii;
2462 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2465 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2466 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2468 // Scalar bar for field step presentation
2469 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2470 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2472 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2473 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2474 setPreferenceProperty( sbXPosition, "min", 0 );
2475 setPreferenceProperty( sbXPosition, "max", 1 );
2476 setPreferenceProperty( sbXPosition, "step", 0.05 );
2478 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2479 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2480 setPreferenceProperty( sbYPosition, "min", 0 );
2481 setPreferenceProperty( sbYPosition, "max", 1 );
2482 setPreferenceProperty( sbYPosition, "step", 0.05 );
2484 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2485 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2486 setPreferenceProperty( sbWidth, "min", 0 );
2487 setPreferenceProperty( sbWidth, "max", 1 );
2488 setPreferenceProperty( sbWidth, "step", 0.05 );
2490 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2491 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2492 setPreferenceProperty( sbHeight, "min", 0 );
2493 setPreferenceProperty( sbHeight, "max", 1 );
2494 setPreferenceProperty( sbHeight, "step", 0.05 );
2496 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2497 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2498 setPreferenceProperty( sbTextHeight, "min", 6 );
2499 setPreferenceProperty( sbTextHeight, "max", 24 );
2500 setPreferenceProperty( sbTextHeight, "step", 1 );
2502 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2503 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2504 setPreferenceProperty( sbNbIntervals, "min", 2 );
2505 setPreferenceProperty( sbNbIntervals, "max", 64 );
2506 setPreferenceProperty( sbNbIntervals, "step", 1 );
2508 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2509 setPreferenceProperty( originGroup, "columns", 2 );
2511 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2512 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2513 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2514 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2516 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2517 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2519 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2520 setPreferenceProperty( operationsGroup, "columns", 2 );
2522 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2523 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2525 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2527 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2529 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2530 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2532 QStringList aHierarchyTypeList;
2533 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2534 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2535 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2537 QList<QVariant> aHierarchyTypeIndexesList;
2538 aHierarchyTypeIndexesList.append(0);
2539 aHierarchyTypeIndexesList.append(1);
2540 aHierarchyTypeIndexesList.append(2);
2542 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2543 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2545 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2546 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2548 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2550 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2551 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2553 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2554 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2555 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2556 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2557 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2558 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2559 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2560 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2562 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2563 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2564 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2565 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2566 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2567 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2574 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2576 if (section == "Geometry") {
2577 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2578 if (param == QString("SettingsGeomStep")) {
2579 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2580 EmitSignalDefaultStepValueChanged(spin_step);
2582 else if (param == QString("toplevel_color")) {
2583 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2584 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2586 else if (param == QString("toplevel_dm")) {
2587 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2589 else if (param == QString("scalar_bar_x_position") ||
2590 param == QString("scalar_bar_y_position") ||
2591 param == QString("scalar_bar_width") ||
2592 param == QString("scalar_bar_height") ||
2593 param == QString("scalar_bar_text_height") ||
2594 param == QString("scalar_bar_nb_intervals")) {
2595 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2597 GEOM_Displayer aDisplayer( aStudy );
2598 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2599 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2602 else if ( param == QString("dimensions_color") ||
2603 param == QString("dimensions_line_width") ||
2604 param == QString("dimensions_font_height") ||
2605 param == QString("dimensions_arrow_length") ||
2606 param == QString("dimensions_show_units") ||
2607 param == QString("dimensions_length_units") ||
2608 param == QString("dimensions_angle_units") )
2610 SalomeApp_Application* anApp = getApp();
2616 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2622 GEOM_Displayer aDisplayer( aStudy );
2624 ViewManagerList aVMs;
2625 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2626 ViewManagerList::Iterator anIt = aVMs.begin();
2627 for ( ; anIt != aVMs.end(); ++anIt )
2629 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2635 SALOME_ListIO aVisible;
2636 aViewer->GetVisible( aVisible );
2637 aDisplayer.Redisplay( aVisible, false, aViewer );
2640 aDisplayer.UpdateViewer();
2642 else if ( param.startsWith( "dependency_tree") )
2643 emit SignalDependencyTreeParamChanged( section, param );
2647 LightApp_Displayer* GeometryGUI::displayer()
2650 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2654 void GeometryGUI::setLocalSelectionMode(const int mode)
2656 myLocalSelectionMode = mode;
2659 int GeometryGUI::getLocalSelectionMode() const
2661 return myLocalSelectionMode;
2664 const char gSeparator = '_'; // character used to separate parameter names
2665 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2668 * \brief Store visual parameters
2670 * This method is called just before the study document is saved.
2671 * Store visual parameters in AttributeParameter attribute(s)
2673 void GeometryGUI::storeVisualParameters (int savePoint)
2675 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2676 if ( !appStudy || !appStudy->studyDS() )
2678 _PTR(Study) studyDS = appStudy->studyDS();
2680 // componentName is used for encoding of entries when storing them in IParameters
2681 std::string componentName = myComponentGeom->ComponentDataType();
2682 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2683 //if (!aSComponent) return;
2686 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2687 componentName.c_str(),
2689 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2691 QSet<QString> anEntriesToStoreShared;
2692 QList<SUIT_ViewManager*> lst;
2693 QList<SUIT_ViewManager*>::Iterator it;
2695 // main cycle to store parameters of displayed objects
2697 getApp()->viewManagers(lst);
2698 for (it = lst.begin(); it != lst.end(); it++) {
2699 SUIT_ViewManager* vman = *it;
2700 QString vType = vman->getType();
2701 int aMgrId = vman->getGlobalId();
2702 // saving VTK actors properties
2703 QVector<SUIT_ViewWindow*> views = vman->getViews();
2704 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2705 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
2706 ObjMap::ConstIterator o_it = anObjects.begin();
2707 for (; o_it != anObjects.end(); o_it++) {
2708 const PropMap& aProps = o_it.value();
2710 //Check that object exists in the study
2711 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2712 if ( !obj || !(aProps.count() > 0))
2714 // entry is "encoded" = it does NOT contain component adress, since it is a
2715 // subject to change on next component loading
2717 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2719 _PTR(GenericAttribute) anAttr;
2720 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2723 // remember entry of object to store shared GEOM properties
2724 // (e.g. dimension properties).
2725 if ( vType == OCCViewer_Viewer::Type() )
2727 anEntriesToStoreShared.insert( o_it.key() );
2730 QString param, occParam = vType;
2731 occParam += GEOM::sectionSeparator();
2732 occParam += QString::number(aMgrId);
2733 occParam += GEOM::sectionSeparator();
2735 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2736 param = occParam + GEOM::propertyName( GEOM::Visibility );
2737 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2740 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2741 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2742 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2745 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2746 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2748 val << QString::number(c.redF());
2749 val << QString::number(c.greenF());
2750 val << QString::number(c.blueF());
2751 param = occParam + GEOM::propertyName( GEOM::Color );
2752 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2755 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2756 param = occParam + GEOM::propertyName( GEOM::Texture );
2757 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2760 if (vType == SVTK_Viewer::Type()) {
2761 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2762 param = occParam + GEOM::propertyName( GEOM::Opacity );
2763 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2765 } else if (vType == SOCC_Viewer::Type()) {
2766 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2767 param = occParam + GEOM::propertyName( GEOM::Transparency );
2768 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2771 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2772 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2773 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2777 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2778 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2779 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2782 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2783 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2784 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2787 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
2788 param = occParam + GEOM::propertyName( GEOM::Vertices );
2789 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
2792 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2793 param = occParam + GEOM::propertyName( GEOM::Deflection );
2794 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2797 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2798 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2799 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2800 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2803 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2804 param = occParam + GEOM::propertyName( GEOM::Material );
2805 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2808 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2809 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2810 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2813 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2814 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2815 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2817 } // object iterator
2819 } // for (viewManagers)
2821 // store dimension attributes of objects:
2822 // since the displayed object always persists in property map, we remember the object entries
2823 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
2824 QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
2825 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
2826 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
2828 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
2829 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName);
2831 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
2833 if ( aDimensions.GetNumber() == 0 )
2838 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
2843 * \brief Restore visual parameters
2845 * This method is called after the study document is opened.
2846 * Restore visual parameters from AttributeParameter attribute(s)
2848 void GeometryGUI::restoreVisualParameters (int savePoint)
2850 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2851 if (!appStudy || !appStudy->studyDS())
2853 _PTR(Study) studyDS = appStudy->studyDS();
2855 // componentName is used for encoding of entries when storing them in IParameters
2856 std::string componentName = myComponentGeom->ComponentDataType();
2857 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2858 //if (!aSComponent) return;
2861 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2862 componentName.c_str(),
2864 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2866 std::vector<std::string> entries = ip->getEntries();
2868 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2870 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2871 QString entry (ip->decodeEntry(*entIt).c_str());
2873 // Check that the entry corresponds to a real object in the Study
2874 // as the object may be deleted or modified after the visual state is saved.
2875 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2876 if (!so) continue; //Skip the not existent entry
2878 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2879 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2881 std::vector<std::string>::iterator namesIt = paramNames.begin();
2882 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2884 // actors are stored in a map after displaying of them for
2885 // quicker access in the future: map < viewID to actor >
2886 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2887 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2889 QString viewerTypStr;
2890 QString viewIndexStr;
2892 QVector<PropMap> aListOfMap;
2894 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2896 // visual parameters are stored in strings as follows:
2897 // 1) ViewerType_ViewIndex_ParamName
2898 // 2) ViewerType_ParamName (shared for GEOM module)
2899 // '_' is used as separator and should not be used in viewer type or parameter names.
2900 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2902 bool isShared = lst.size() == 2;
2903 bool isViewer = lst.size() == 3;
2904 if ( !isShared && !isViewer )
2909 // shared visual parameters
2912 QString aParamNameStr( lst[1] );
2913 QString aValuesStr( (*valuesIt).c_str() );
2915 // shared dimension properties are stored as attribute
2916 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
2918 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
2919 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
2925 // per view visual parameters
2926 viewerTypStr = lst[0];
2927 viewIndexStr = lst[1];
2928 QString paramNameStr = lst[2];
2931 viewIndex = viewIndexStr.toUInt(&ok);
2932 if (!ok) // bad conversion of view index to integer
2935 if ((viewIndex + 1) > aListOfMap.count()) {
2936 aListOfMap.resize(viewIndex + 1);
2939 QString val((*valuesIt).c_str());
2940 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
2941 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
2942 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
2943 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
2944 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
2945 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
2946 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
2947 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
2948 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
2949 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
2950 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
2951 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
2952 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
2953 QStringList rgb = val.split(GEOM::subSectionSeparator());
2954 if (rgb.count() == 3) {
2955 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
2956 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
2958 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
2959 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
2960 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
2961 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
2962 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
2963 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
2964 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
2965 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
2966 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
2967 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
2968 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
2969 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
2970 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
2971 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
2972 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
2973 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
2975 } // for names/parameters iterator
2977 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2979 for (int index = 0; index < aListOfMap.count(); index++) {
2980 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
2982 //Get Visibility property of the current PropMap
2983 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
2984 SUIT_ViewManager* vman = lst.at(index);
2985 SUIT_ViewModel* vmodel = vman->getViewModel();
2986 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
2989 } // for entries iterator
2991 // update all VTK and OCC views
2992 QList<SUIT_ViewManager*> lst;
2993 getApp()->viewManagers(lst);
2994 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
2995 SUIT_ViewModel* vmodel = (*it)->getViewModel();
2998 if (vmodel->getType() == SVTK_Viewer::Type()) {
2999 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3000 vtkView->getRenderer()->ResetCameraClippingRange();
3003 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3004 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3005 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3012 void GeometryGUI::onViewAboutToShow()
3014 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3015 QAction* a = action( GEOMOp::OpSwitchVectors );
3016 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3018 a->setEnabled(true);
3019 bool vmode = window->property("VectorsMode").toBool();
3020 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3021 aVerticesAction->setEnabled(true);
3022 vmode = window->property("VerticesMode").toBool();
3023 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3025 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3026 a->setEnabled(false);
3027 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3028 aVerticesAction->setEnabled(false);
3033 \brief Return action by id
3034 \param id identifier of the action
3037 QAction* GeometryGUI::getAction(const int id) {
3042 \brief GEOM module message handler
3044 This method can be re-implemented in the subclasses.
3045 This is a GEOM module message handler.
3047 \param msg the message received.
3049 void GeometryGUI::message(const QString& msg)
3052 QStringList data = msg.split("/");
3053 const int nbStrings = data.count();
3055 if (nbStrings > 0) {
3056 if (data[0] == "modified") {
3058 QString anIOR = nbStrings > 1 ? data[1] : QString();
3060 if ( anIOR.isEmpty() ) {
3064 // Get the geom object.
3065 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3067 // Clear the shape buffer
3068 GeometryGUI::ClearShapeBuffer (anObj);
3074 \brief Clears the shape buffer.
3076 This is a static method. It clears the shape buffer.
3078 \param theObj the object
3080 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3082 if ( CORBA::is_nil( theObj ) )
3085 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3086 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3087 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3089 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3094 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3099 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3103 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3104 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3105 _PTR(GenericAttribute) anAttr;
3106 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3107 _PTR(AttributeIOR) anIOR ( anAttr );
3108 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3109 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3115 \brief Returns the object from IOR.
3117 This is a static method. It returns the object from its IOR.
3119 \param IOR object IOR
3120 \return GEOM object.
3122 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3124 GEOM::GEOM_Object_var geomObj;
3125 if ( !IOR.isEmpty() ) {
3126 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3127 ( IOR.toLatin1().constData() );
3128 if ( !CORBA::is_nil( corbaObj ) )
3129 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3131 return geomObj._retn();
3135 \brief Returns IOR of the object.
3137 This is a static method. It returns the object's IOR.
3139 \param object the GEOM object.
3140 \return object's IOR.
3142 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3145 if ( !CORBA::is_nil( object ) ) {
3146 CORBA::String_var anIOR =
3147 SalomeApp_Application::orb()->object_to_string( object );
3154 \brief Check if this object is can't be renamed in place
3156 This method can be re-implemented in the subclasses.
3157 Return true in case if object isn't reference or component (module root).
3159 \param entry column id
3160 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3162 bool GeometryGUI::renameAllowed( const QString& entry) const {
3164 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3165 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3166 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3168 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3172 Rename object by entry.
3173 \param entry entry of the object
3174 \param name new name of the object
3175 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3177 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3179 bool result = false;
3181 SalomeApp_Application* app =
3182 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3183 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3188 _PTR(Study) aStudy = appStudy->studyDS();
3193 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3195 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3199 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3200 _PTR(GenericAttribute) anAttr;
3202 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3203 _PTR(AttributeName) aName (anAttr);
3205 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3206 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3207 if (!CORBA::is_nil(anObj)) {
3208 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3209 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3217 void GeometryGUI::updateMaterials()
3219 LightApp_Preferences* pref = preferences();
3221 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3222 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3223 if ( !materials.contains( currentMaterial ) )
3224 // user material set as default in the preferences, might be removed
3225 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3227 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3229 setPreferenceProperty( prefItem->id(),
3230 "strings", materials );
3231 prefItem->retrieve();
3237 \brief Check if the module allows "drag" operation of its objects.
3239 Overloaded from LightApp_Module class.
3241 This function is a part of the general drag-n-drop mechanism.
3242 The goal of this function is to check data object passed as a parameter
3243 and decide if it can be dragged or no.
3245 \param what data object being tested for drag operation
3246 \return \c true if module allows dragging of the specified object
3247 \sa isDropAccepted(), dropObjects()
3249 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3251 // we allow dragging object under root and object from folder
3252 int aLevel = what->level();
3253 bool anObjectInFolder = false;
3255 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3257 _PTR(SObject) aSO = dataObj->object();
3259 _PTR(GenericAttribute) anAttr;
3260 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3261 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3262 _PTR(AttributeLocalID) aLocalID( anAttr );
3263 anObjectInFolder = aLocalID->Value() == 999;
3268 return aLevel == 2 || anObjectInFolder;
3272 \brief Check if the module allows "drop" operation on the given object.
3274 Overloaded from LightApp_Module class.
3276 This function is a part of the general drag-n-drop mechanism.
3277 The goal of this function is to check data object passed as a parameter
3278 and decide if it can be used as a target for the "drop" operation.
3279 The processing of the drop operation itself is done in the dropObjects() function.
3281 \param where target data object
3282 \return \c true if module supports dropping on the \a where data object
3283 \sa isDraggable(), dropObjects()
3285 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3287 // we allow dropping into folder and top-level GEOM object
3288 int aLevel = where->level();
3289 bool isFolder = false;
3291 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3293 _PTR(SObject) aSO = dataObj->object();
3295 _PTR(GenericAttribute) anAttr;
3296 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3297 _PTR(AttributeLocalID) aLocalID( anAttr );
3298 isFolder = aLocalID->Value() == 999;
3303 return aLevel == 1 || isFolder;
3307 \brief Complete drag-n-drop operation.
3309 Overloaded from LightApp_Module class.
3311 This function is a part of the general drag-n-drop mechanism.
3312 Its goal is to handle dropping of the objects being dragged according
3313 to the chosen operation (move). The dropping is performed in the
3314 context of the parent data object \a where and the \a row (position in the
3315 children index) at which the data should be dropped. If \a row is equal to -1,
3316 this means that objects are added to the end of the children list.
3318 \param what objects being dropped
3319 \param where target data object
3320 \param row child index at which the drop operation is performed
3321 \param action drag-n-drop operation (Qt::DropAction) - move
3323 \sa isDraggable(), isDropAccepted()
3325 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3326 const int row, Qt::DropAction action )
3328 if (action != Qt::CopyAction && action != Qt::MoveAction)
3329 return; // unsupported action
3331 // get parent object
3332 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3333 if ( !dataObj ) return; // wrong parent
3334 _PTR(SObject) parentObj = dataObj->object();
3336 // Find the current Study and StudyBuilder
3337 _PTR(Study) aStudy = parentObj->GetStudy();
3338 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3339 // collect all parents of the target node
3340 QStringList parentIDs;
3341 _PTR(SObject) parent = parentObj;
3342 while( !parent->IsNull() ) {
3343 parentIDs << parent->GetID().c_str();
3344 parent = aUseCaseBuilder->GetFather(parent);
3347 // collect objects being dropped
3348 GEOM::object_list_var objects = new GEOM::object_list();
3349 objects->length( what.count() );
3351 for ( int i = 0; i < what.count(); i++ ) {
3352 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3353 if ( !dataObj ) continue; // skip wrong objects
3354 _PTR(SObject) sobj = dataObj->object();
3355 // check that dropped object is not a parent of target object
3356 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3357 return; // it's not allowed to move node into it's child
3359 objects[i] = _CAST(SObject, sobj)->GetSObject();
3362 objects->length( count );
3364 // call engine function
3365 GetGeomGen()->Move( objects.in(), // what
3366 _CAST(SObject, parentObj)->GetSObject(), // where
3369 // update Object browser
3370 getApp()->updateObjectBrowser( false );