1 // Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : GeometryGUI.cxx
23 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
25 #include <Standard_math.hxx> // E.A. must be included before Python.h to fix compilation on windows
27 #undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
30 #include "GeometryGUI.h"
31 #include "GeometryGUI_Operations.h"
32 #include "GEOMPluginGUI.h"
33 #include "GEOMGUI_OCCSelector.h"
34 #include "GEOMGUI_Selection.h"
35 #include "GEOMGUI_CreationInfoWdg.h"
36 #include "GEOMGUI_DimensionProperty.h"
37 #include "GEOM_Constants.h"
38 #include "GEOM_Displayer.h"
39 #include "GEOM_AISShape.hxx"
40 #include "GEOMUtils_XmlHandler.hxx"
42 #include "GEOM_Actor.h"
44 #include <Material_ResourceMgr.h>
45 #include <Material_Model.h>
47 #include <SUIT_Desktop.h>
48 #include <SUIT_MessageBox.h>
49 #include <SUIT_ResourceMgr.h>
50 #include <SUIT_Session.h>
51 #include <SUIT_ViewManager.h>
53 #include <PyInterp_Interp.h>
55 #include <OCCViewer_ViewWindow.h>
56 #include <OCCViewer_ViewPort3d.h>
57 #include <OCCViewer_ViewModel.h>
58 #include <OCCViewer_ViewManager.h>
60 #include <SOCC_ViewModel.h>
61 #include <SOCC_ViewWindow.h>
63 #include <SVTK_ViewWindow.h>
64 #include <SVTK_RenderWindowInteractor.h>
65 #include <SVTK_InteractorStyle.h>
66 #include <SVTK_ViewModel.h>
68 #include <GraphicsView_Viewer.h>
70 #include <SalomeApp_Application.h>
71 #include <SalomeApp_DataObject.h>
72 #include <SalomeApp_Study.h>
73 #include <SalomeApp_Tools.h>
75 #include <LightApp_SelectionMgr.h>
76 #include <LightApp_VTKSelector.h>
77 #include <LightApp_DataObject.h>
78 #include <LightApp_Preferences.h>
80 #include <SALOME_LifeCycleCORBA.hxx>
81 #include <SALOME_ListIO.hxx>
83 #include <SALOMEDSClient_ClientFactory.hxx>
84 #include <SALOMEDSClient_IParameters.hxx>
86 #include <SALOMEDS_SObject.hxx>
88 #include <Basics_OCCTVersion.hxx>
99 #include <QSignalMapper>
101 #include <AIS_Drawer.hxx>
102 #include <AIS_ListOfInteractive.hxx>
103 #include <AIS_ListIteratorOfListOfInteractive.hxx>
104 #include <Prs3d_Drawer.hxx>
105 #include <Prs3d_IsoAspect.hxx>
106 #include <Aspect_TypeOfMarker.hxx>
107 #include <OSD_SharedLibrary.hxx>
108 #include <NCollection_DataMap.hxx>
110 #include <TColStd_HArray1OfByte.hxx>
112 #include <utilities.h>
114 #include <vtkCamera.h>
115 #include <vtkRenderer.h>
117 #include <Standard_Failure.hxx>
118 #include <Standard_ErrorHandler.hxx>
120 #include "GEOM_version.h"
121 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
124 Standard_EXPORT CAM_Module* createModule() {
125 return new GeometryGUI();
128 Standard_EXPORT char* getModuleVersion() {
129 return (char*)GEOM_VERSION_STR;
133 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
135 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
137 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
139 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
140 if (CORBA::is_nil(myComponentGeom))
142 return GeometryGUI::myComponentGeom;
145 bool GeometryGUI::InitGeomGen()
148 if ( CORBA::is_nil( myComponentGeom ) ) return false;
152 //=======================================================================
153 // function : ClientSObjectToObject
155 //=======================================================================
156 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
158 _PTR(GenericAttribute) anAttr;
159 CORBA::Object_var anObj;
161 std::string aValue = theSObject->GetIOR();
162 if (strcmp(aValue.c_str(), "") != 0) {
163 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
164 anObj = anORB->string_to_object(aValue.c_str());
167 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
169 return anObj._retn();
172 //=======================================================================
173 // function : ClientStudyToStudy
175 //=======================================================================
176 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
178 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
179 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
180 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
181 int aStudyID = theStudy->StudyId();
182 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
183 return aDSStudy._retn();
186 void GeometryGUI::Modified (bool theIsUpdateActions)
188 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
189 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
190 appStudy->Modified();
191 if ( theIsUpdateActions )
192 app->updateActions();
197 //=======================================================================
198 // function : GeometryGUI::GeometryGUI()
199 // purpose : Constructor
200 //=======================================================================
201 GeometryGUI::GeometryGUI() :
202 SalomeApp_Module( "GEOM" ),
205 if ( CORBA::is_nil( myComponentGeom ) )
207 Engines::EngineComponent_var comp =
208 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
209 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
212 myActiveDialogBox = 0;
214 gp_Pnt origin = gp_Pnt(0., 0., 0.);
215 gp_Dir direction = gp_Dir(0., 0., 1.);
216 myWorkingPlane = gp_Ax3(origin, direction);
219 myLocalSelectionMode = GEOM_ALLOBJECTS;
221 myCreationInfoWdg = 0;
223 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
225 Q_INIT_RESOURCE( GEOMGUI );
228 //=======================================================================
229 // function : GeometryGUI::~GeometryGUI()
230 // purpose : Destructor
231 //=======================================================================
232 GeometryGUI::~GeometryGUI()
234 while (!myOCCSelectors.isEmpty())
235 delete myOCCSelectors.takeFirst();
237 while (!myVTKSelectors.isEmpty())
238 delete myVTKSelectors.takeFirst();
240 qDeleteAll(myGUIMap);
243 //=======================================================================
244 // function : GeometryGUI::getLibrary()
245 // purpose : get or load GUI library by name [ internal ]
246 //=======================================================================
247 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
248 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
250 if ( !myGUIMap.contains( libraryName ) ) {
251 // try to load library if it is not loaded yet
253 QString dirs = getenv( "LD_LIBRARY_PATH" );
256 QString dirs = getenv( "PATH" );
259 if ( !dirs.isEmpty() ) {
260 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
261 QListIterator<QString> it( dirList ); it.toBack();
262 while ( it.hasPrevious() ) {
263 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
265 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
266 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
268 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
269 continue; // continue search further
271 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
272 if ( osdF != NULL ) {
273 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
274 GEOMGUI* libGUI = (*func)( this );
276 myGUIMap[ libraryName ] = libGUI;
277 break; // found and loaded!
284 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
287 //=======================================================================
288 // function : GeometryGUI::getPluginLibrary()
289 // purpose : get or load GUI Plugin library by name [ internal ]
290 //=======================================================================
291 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
292 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
294 if ( !myGUIMap.contains( libraryName ) ) {
295 // try to load library if it is not loaded yet
297 QString dirs = getenv( "LD_LIBRARY_PATH" );
300 QString dirs = getenv( "PATH" );
303 if ( !dirs.isEmpty() ) {
304 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
305 QListIterator<QString> it( dirList ); it.toBack();
306 while ( it.hasPrevious() ) {
307 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
309 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
310 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
312 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
313 continue; // continue search further
315 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
316 if ( osdF != NULL ) {
317 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
318 GEOMPluginGUI* libGUI = (*func)( this );
320 myGUIMap[ libraryName ] = libGUI;
321 break; // found and loaded!
328 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
331 //=======================================================================
332 // function : GeometryGUI::ActiveWorkingPlane()
333 // purpose : Activate Working Plane View
334 //=======================================================================
335 void GeometryGUI::ActiveWorkingPlane()
337 gp_Dir DZ = myWorkingPlane.Direction();
338 gp_Dir DY = myWorkingPlane.YDirection();
340 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
341 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
342 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
345 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
347 Handle(V3d_View) view3d = vw->getViewPort()->getView();
349 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
350 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
354 else if ( ViewVTK ) {
355 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
357 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
359 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
360 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
361 camera->SetFocalPoint(0,0,0);
368 //=======================================================================
369 // function : GeometryGUI::SetActiveDialogBox()
370 // purpose : Set active dialog box
371 //=======================================================================
372 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
374 myActiveDialogBox = (QDialog*)aDlg;
377 //=======================================================================
378 // function : GeometryGUI::EmitSignalDeactivateDialog()
379 // purpose : Emit a signal to deactivate the active dialog Box
380 //=======================================================================
381 void GeometryGUI::EmitSignalDeactivateDialog()
383 emit SignalDeactivateActiveDialog();
386 //=======================================================================
387 // function : GeometryGUI::EmitSignalCloseAllDialogs()
388 // purpose : Emit a signal to close all non modal dialogs box
389 //=======================================================================
390 void GeometryGUI::EmitSignalCloseAllDialogs()
392 emit SignalCloseAllDialogs();
395 //=======================================================================
396 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
397 // purpose : Emit a signal to inform that default real spin box step has
399 //=======================================================================
400 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
402 emit SignalDefaultStepValueChanged(newVal);
405 //=======================================================================
406 // function : GeometryGUI::OnGUIEvent()
407 // purpose : common slot for all menu/toolbar actions
408 //=======================================================================
409 void GeometryGUI::OnGUIEvent()
411 const QObject* obj = sender();
412 if ( !obj || !obj->inherits( "QAction" ) )
414 int id = actionId((QAction*)obj);
419 //=======================================================================
420 // function : GeometryGUI::OnGUIEvent()
421 // purpose : manage all events on GUI [static]
422 //=======================================================================
423 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
425 SUIT_Application* anApp = application();
427 SUIT_Desktop* desk = anApp->desktop();
429 // check type of the active viewframe
430 SUIT_ViewWindow* window = desk->activeWindow();
431 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
432 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
433 bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() );
434 // if current viewframe is not of OCC and not of VTK type - return immediately
435 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
436 QList<int> NotViewerDependentCommands;
437 NotViewerDependentCommands << GEOMOp::OpDelete
439 << GEOMOp::OpShowOnly
440 << GEOMOp::OpShowOnlyChildren
441 << GEOMOp::OpDiscloseChildren
442 << GEOMOp::OpConcealChildren
443 << GEOMOp::OpUnpublishObject
444 << GEOMOp::OpPublishObject
445 << GEOMOp::OpPointMarker
446 << GEOMOp::OpCreateFolder
447 << GEOMOp::OpSortChildren;
448 if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) {
449 // activate OCC viewer
450 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
453 // fix for IPAL9103, point 2
454 if ( CORBA::is_nil( GetGeomGen() ) ) {
455 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
460 // find corresponding GUI library
462 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
463 createOriginAndBaseVectors(); // internal operation
465 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
466 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
467 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
468 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
469 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
470 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
471 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
472 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
473 case GEOMOp::OpDelete: // MENU EDIT - DELETE
474 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
475 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
476 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
477 case GEOMOp::OpColor: // POPUP MENU - COLOR
478 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
479 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
480 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
481 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
482 case GEOMOp::OpIsos: // POPUP MENU - ISOS
483 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
484 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
485 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
486 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
487 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
488 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
489 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
490 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
491 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
492 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
493 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
494 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
495 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
496 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
497 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
498 case GEOMOp::OpClsBringToFront: //
499 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
500 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
501 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
502 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
503 libName = "GEOMToolsGUI";
505 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
506 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
507 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
508 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
509 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
510 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
511 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
512 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
513 case GEOMOp::OpHide: // MENU VIEW - ERASE
514 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
515 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
516 case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE
517 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
518 case GEOMOp::OpShading: // POPUP MENU - SHADING
519 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
520 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
521 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
522 case GEOMOp::OpVertices: // POPUP MENU - VERTICES
523 libName = "DisplayGUI";
525 case GEOMOp::OpPoint: // MENU BASIC - POINT
526 case GEOMOp::OpLine: // MENU BASIC - LINE
527 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
528 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
529 case GEOMOp::OpArc: // MENU BASIC - ARC
530 case GEOMOp::OpVector: // MENU BASIC - VECTOR
531 case GEOMOp::OpPlane: // MENU BASIC - PLANE
532 case GEOMOp::OpCurve: // MENU BASIC - CURVE
533 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
534 libName = "BasicGUI";
536 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
537 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
538 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
539 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
540 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
541 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
542 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
543 libName = "PrimitiveGUI";
545 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
546 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
547 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
548 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
549 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
550 libName = "GenerationGUI";
552 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
553 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
554 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
555 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
556 case GEOMOp::OpSurfaceFromFace: // MENU ENTITY - SURFACE FROM FACE
558 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
560 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
561 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
562 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
563 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
564 case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR
565 libName = "EntityGUI";
567 case GEOMOp::OpEdge: // MENU BUILD - EDGE
568 case GEOMOp::OpWire: // MENU BUILD - WIRE
569 case GEOMOp::OpFace: // MENU BUILD - FACE
570 case GEOMOp::OpShell: // MENU BUILD - SHELL
571 case GEOMOp::OpSolid: // MENU BUILD - SOLID
572 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
573 libName = "BuildGUI";
575 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
576 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
577 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
578 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
579 libName = "BooleanGUI";
581 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
582 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
583 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
584 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
585 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
586 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
587 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
588 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
589 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
590 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
591 case GEOMOp::OpExtension: // MENU TRANSFORMATION - EXTENSION
592 libName = "TransformationGUI";
594 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
595 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
596 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
597 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
598 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
599 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
600 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
601 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
602 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
603 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
604 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
605 libName = "OperationGUI";
607 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
608 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
609 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
610 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
611 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
612 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
613 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
614 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
615 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
616 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
617 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
618 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
619 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
620 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
621 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
622 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
623 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
624 libName = "RepairGUI";
626 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
627 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
628 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
629 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
630 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
631 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
632 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
633 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
634 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
635 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
636 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
637 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
638 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
639 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
640 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
641 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
642 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
643 libName = "MeasureGUI";
645 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
646 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
647 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
648 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
649 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
650 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
651 libName = "GroupGUI";
653 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
654 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
655 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
656 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
657 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
658 libName = "BlocksGUI";
660 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
661 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
662 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
663 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
664 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
665 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
666 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
667 //libName = "AdvancedGUI";
670 if (myPluginActions.contains(id)) {
671 libName = myPluginActions[id].first;
673 GEOMPluginGUI* library = 0;
674 if ( !libName.isEmpty() ) {
676 libName = QString( "lib" ) + libName + ".so";
678 libName = libName + ".dll";
680 library = getPluginLibrary( libName );
683 // call method of corresponding GUI library
685 //QString action ("%1");
686 //action = action.arg(id);
688 //if( !theParam.isValid() )
689 library->OnGUIEvent( myPluginActions[id].second, desk );
691 // library->OnGUIEvent( id, desk, theParam);
694 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
696 updateCreationInfo();
702 GEOMGUI* library = 0;
703 if ( !libName.isEmpty() ) {
705 libName = QString( "lib" ) + libName + ".so";
707 libName = libName + ".dll";
709 library = getLibrary( libName );
712 // call method of corresponding GUI library
714 if( !theParam.isValid() )
715 library->OnGUIEvent( id, desk );
717 library->OnGUIEvent( id, desk, theParam);
720 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
722 updateCreationInfo();
725 //=================================================================================
726 // function : GeometryGUI::activateOperation()
728 //=================================================================================
729 bool GeometryGUI::activateOperation( int actionId )
731 OnGUIEvent(actionId);
735 //=================================================================================
736 // function : GeometryGUI::activateOperation()
738 //=================================================================================
739 bool GeometryGUI::activateOperation( const QString& actionId )
743 int id = actionId.toInt(&isOk);
750 //=================================================================================
751 // function : GeometryGUI::activateOperation()
753 //=================================================================================
754 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
758 QString pluginLib = plugin;
759 // TODO: if <plugin> is a plugin name, find plugin library name
760 if (myPluginLibs.contains(plugin))
761 pluginLib = myPluginLibs[plugin];
763 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
764 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
765 const PluginAction& anAction = actionsIter.value();
766 if (anAction.first == pluginLib && anAction.second == actionId) {
767 // activate operation
768 OnGUIEvent(actionsIter.key());
776 //=================================================================================
777 // function : GeometryGUI::OnKeyPress()
778 // purpose : Called when any key is pressed by user [static]
779 //=================================================================================
780 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
782 if ( !application() )
784 foreach ( GEOMGUI* lib, myGUIMap )
785 lib->OnKeyPress( e, application()->desktop(), w );
788 //=================================================================================
789 // function : GeometryGUI::OnMouseMove()
790 // purpose : Manages mouse move events [static]
791 //=================================================================================
792 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
794 if ( !application() )
796 foreach ( GEOMGUI* lib, myGUIMap )
797 lib->OnMouseMove( e, application()->desktop(), w );
800 //=================================================================================
801 // function : GeometryGUI::OnMouseRelease()
802 // purpose : Manages mouse release events [static]
803 //=================================================================================
804 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
806 if ( !application() )
808 foreach ( GEOMGUI* lib, myGUIMap )
809 lib->OnMouseRelease( e, application()->desktop(), w );
812 //=================================================================================
813 // function : GeometryGUI::OnMousePress()
814 // purpose : Manage mouse press events [static]
815 //=================================================================================
816 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
818 if ( !application() )
820 foreach ( GEOMGUI* lib, myGUIMap )
821 lib->OnMousePress( e, application()->desktop(), w );
824 //=======================================================================
825 // function : createGeomAction
827 //=======================================================================
828 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
829 const int accel, const bool toggle, const QString& shortcutAction )
831 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
832 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
833 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
835 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
837 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
838 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
840 application()->desktop(),
842 this, SLOT( OnGUIEvent() ),
846 //=======================================================================
847 // function : createOriginAndBaseVectors
849 //=======================================================================
850 void GeometryGUI::createOriginAndBaseVectors()
852 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
853 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
855 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
859 _PTR(Study) studyDS = appStudy->studyDS();
860 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
861 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
862 if ( !aBasicOperations->_is_nil() ) {
863 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
864 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
865 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
866 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
867 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
868 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
870 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
871 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
872 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
873 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
874 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
876 getApp()->updateObjectBrowser( true );
882 //=======================================================================
883 // function : GeometryGUI::initialize()
884 // purpose : Called when GEOM module is created
885 //=======================================================================
886 void GeometryGUI::initialize( CAM_Application* app )
888 SalomeApp_Module::initialize( app );
890 // ----- create actions --------------
892 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
894 createGeomAction( GEOMOp::OpPoint, "POINT" );
895 createGeomAction( GEOMOp::OpLine, "LINE" );
896 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
897 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
898 createGeomAction( GEOMOp::OpArc, "ARC" );
899 createGeomAction( GEOMOp::OpCurve, "CURVE" );
900 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
901 createGeomAction( GEOMOp::OpVector, "VECTOR" );
902 createGeomAction( GEOMOp::OpPlane, "PLANE" );
903 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
904 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
905 createGeomAction( GEOMOp::OpSurfaceFromFace, "SURFACE_FROM_FACE" );
907 createGeomAction( GEOMOp::OpBox, "BOX" );
908 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
909 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
910 createGeomAction( GEOMOp::OpTorus, "TORUS" );
911 createGeomAction( GEOMOp::OpCone, "CONE" );
912 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
913 createGeomAction( GEOMOp::OpDisk, "DISK" );
915 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
916 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
917 createGeomAction( GEOMOp::OpFilling, "FILLING" );
918 createGeomAction( GEOMOp::OpPipe, "PIPE" );
919 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
921 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
922 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
923 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
924 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
925 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
927 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
928 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
930 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
932 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
933 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
935 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
936 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
937 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
939 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
941 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
942 createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" );
944 createGeomAction( GEOMOp::OpEdge, "EDGE" );
945 createGeomAction( GEOMOp::OpWire, "WIRE" );
946 createGeomAction( GEOMOp::OpFace, "FACE" );
947 createGeomAction( GEOMOp::OpShell, "SHELL" );
948 createGeomAction( GEOMOp::OpSolid, "SOLID" );
949 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
951 createGeomAction( GEOMOp::OpFuse, "FUSE" );
952 createGeomAction( GEOMOp::OpCommon, "COMMON" );
953 createGeomAction( GEOMOp::OpCut, "CUT" );
954 createGeomAction( GEOMOp::OpSection, "SECTION" );
956 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
957 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
958 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
959 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
960 createGeomAction( GEOMOp::OpScale, "SCALE" );
961 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
962 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
963 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
964 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
965 createGeomAction( GEOMOp::OpExtension, "EXTENSION" );
967 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
968 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
969 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
970 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
971 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
972 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
973 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
974 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
975 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
976 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
977 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
979 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
980 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
981 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
983 createGeomAction( GEOMOp::OpSewing, "SEWING" );
984 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
985 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
986 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
987 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
988 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
989 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
990 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
991 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
992 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
993 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
994 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
995 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
996 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
997 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
998 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
999 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1001 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1002 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1003 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1004 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1005 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1006 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1007 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1008 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1009 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1011 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1012 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1013 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1014 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1015 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1016 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1018 #ifdef _DEBUG_ // PAL16821
1019 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1022 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1023 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1024 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1025 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1026 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1027 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1028 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1029 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1030 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1031 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1032 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1033 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1034 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1035 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1036 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1037 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1038 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1039 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1040 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1041 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1042 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1043 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1044 createGeomAction( GEOMOp::OpHide, "ERASE" );
1046 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1047 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1048 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1049 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1050 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1051 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1052 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1053 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1054 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1055 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1056 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1057 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1058 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1059 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1060 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1061 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1062 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1063 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1064 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1065 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1066 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1067 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1068 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1069 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1070 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1071 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1072 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1073 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1074 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1075 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1077 // Create actions for increase/decrease transparency shortcuts
1078 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1079 "Geometry:Increase transparency");
1080 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1081 "Geometry:Decrease transparency");
1083 // Create actions for increase/decrease number of isolines
1084 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1085 "Geometry:Increase number of isolines");
1086 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1087 "Geometry:Decrease number of isolines");
1089 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1090 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1091 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1092 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1093 //@@ 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 @@//
1095 // ---- create menus --------------------------
1097 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1099 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1100 createMenu( GEOMOp::OpDelete, editId, -1 );
1102 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1104 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1105 createMenu( GEOMOp::OpPoint, basicId, -1 );
1106 createMenu( GEOMOp::OpLine, basicId, -1 );
1107 createMenu( GEOMOp::OpCircle, basicId, -1 );
1108 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1109 createMenu( GEOMOp::OpArc, basicId, -1 );
1110 createMenu( GEOMOp::OpCurve, basicId, -1 );
1111 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1112 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1113 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1114 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1115 createMenu( GEOMOp::OpSurfaceFromFace, basicId, -1 );
1116 createMenu( separator(), basicId, -1 );
1117 createMenu( GEOMOp::OpVector, basicId, -1 );
1118 createMenu( GEOMOp::OpPlane, basicId, -1 );
1119 createMenu( GEOMOp::OpLCS, basicId, -1 );
1120 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1122 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1123 createMenu( GEOMOp::OpBox, primId, -1 );
1124 createMenu( GEOMOp::OpCylinder, primId, -1 );
1125 createMenu( GEOMOp::OpSphere, primId, -1 );
1126 createMenu( GEOMOp::OpTorus, primId, -1 );
1127 createMenu( GEOMOp::OpCone, primId, -1 );
1128 createMenu( GEOMOp::OpRectangle, primId, -1 );
1129 createMenu( GEOMOp::OpDisk, primId, -1 );
1130 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1132 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1133 createMenu( GEOMOp::OpPrism, genId, -1 );
1134 createMenu( GEOMOp::OpRevolution, genId, -1 );
1135 createMenu( GEOMOp::OpFilling, genId, -1 );
1136 createMenu( GEOMOp::OpPipe, genId, -1 );
1137 createMenu( GEOMOp::OpPipePath, genId, -1 );
1139 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1140 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1141 //@@ 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 @@//
1143 createMenu( separator(), newEntId, -1 );
1145 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1146 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1147 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1148 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1149 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1150 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1152 createMenu( separator(), newEntId, -1 );
1154 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1155 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1156 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1158 createMenu( separator(), newEntId, -1 );
1160 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1161 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1162 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1163 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1164 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1166 createMenu( separator(), newEntId, -1 );
1168 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1170 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1171 createMenu( GEOMOp::OpEdge, buildId, -1 );
1172 createMenu( GEOMOp::OpWire, buildId, -1 );
1173 createMenu( GEOMOp::OpFace, buildId, -1 );
1174 createMenu( GEOMOp::OpShell, buildId, -1 );
1175 createMenu( GEOMOp::OpSolid, buildId, -1 );
1176 createMenu( GEOMOp::OpCompound, buildId, -1 );
1178 createMenu( separator(), newEntId, -1 );
1180 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1182 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1185 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1187 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1188 createMenu( GEOMOp::OpFuse, boolId, -1 );
1189 createMenu( GEOMOp::OpCommon, boolId, -1 );
1190 createMenu( GEOMOp::OpCut, boolId, -1 );
1191 createMenu( GEOMOp::OpSection, boolId, -1 );
1193 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1194 createMenu( GEOMOp::OpTranslate, transId, -1 );
1195 createMenu( GEOMOp::OpRotate, transId, -1 );
1196 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1197 createMenu( GEOMOp::OpMirror, transId, -1 );
1198 createMenu( GEOMOp::OpScale, transId, -1 );
1199 createMenu( GEOMOp::OpOffset, transId, -1 );
1200 createMenu( GEOMOp::OpProjection, transId, -1 );
1201 createMenu( GEOMOp::OpExtension, transId, -1 );
1202 createMenu( separator(), transId, -1 );
1203 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1204 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1206 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1207 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1208 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1209 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1211 createMenu( separator(), operId, -1 );
1213 createMenu( GEOMOp::OpPartition, operId, -1 );
1214 createMenu( GEOMOp::OpArchimede, operId, -1 );
1215 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1216 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1218 createMenu( separator(), operId, -1 );
1220 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1221 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1222 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1223 createMenu( GEOMOp::OpChamfer, operId, -1 );
1224 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1225 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1226 //createMenu( GEOMOp::OpClipping, operId, -1 );
1228 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1229 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1230 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1231 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1232 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1233 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1234 createMenu( GEOMOp::OpSewing, repairId, -1 );
1235 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1236 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1237 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1238 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1239 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1240 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1241 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1242 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1243 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1244 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1245 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1247 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1248 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1249 createMenu( GEOMOp::OpProperties, measurId, -1 );
1250 createMenu( separator(), measurId, -1 );
1251 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1252 createMenu( GEOMOp::OpInertia, measurId, -1 );
1253 createMenu( GEOMOp::OpNormale, measurId, -1 );
1254 createMenu( separator(), measurId, -1 );
1255 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1256 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1257 createMenu( separator(), measurId, -1 );
1259 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1260 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1261 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1262 createMenu( GEOMOp::OpAngle, dimId, -1 );
1263 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1265 createMenu( separator(), measurId, -1 );
1266 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1267 createMenu( separator(), measurId, -1 );
1268 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1269 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1270 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1271 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1272 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1274 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1275 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1276 createMenu( separator(), toolsId, -1 );
1277 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1280 createMenu( separator(), toolsId, -1 );
1281 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1282 createMenu( separator(), toolsId, -1 );
1284 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1285 createMenu( separator(), viewId, -1 );
1287 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1288 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1289 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1290 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1291 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1292 createMenu( separator(), dispmodeId, -1 );
1293 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1294 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1296 createMenu( separator(), viewId, -1 );
1297 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1298 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1299 createMenu( separator(), viewId, -1 );
1300 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1301 createMenu( separator(), viewId, -1 );
1305 because of these items are accessible through object browser and viewers
1306 we have removed they from main menu
1308 createMenu( GEOMOp::OpShow, viewId, -1 );
1309 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1310 createMenu( GEOMOp::OpHide, viewId, -1 );
1313 // ---- create toolbars --------------------------
1315 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1316 createTool( GEOMOp::OpPoint, basicTbId );
1317 createTool( GEOMOp::OpLine, basicTbId );
1318 createTool( GEOMOp::OpCircle, basicTbId );
1319 createTool( GEOMOp::OpEllipse, basicTbId );
1320 createTool( GEOMOp::OpArc, basicTbId );
1321 createTool( GEOMOp::OpCurve, basicTbId );
1322 createTool( GEOMOp::OpVector, basicTbId );
1323 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1324 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1325 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1326 createTool( GEOMOp::OpIsoline, basicTbId );
1327 createTool( GEOMOp::OpSurfaceFromFace, basicTbId );
1328 createTool( GEOMOp::OpPlane, basicTbId );
1329 createTool( GEOMOp::OpLCS, basicTbId );
1330 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1332 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1333 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1334 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1336 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1337 createTool( GEOMOp::OpBox, primTbId );
1338 createTool( GEOMOp::OpCylinder, primTbId );
1339 createTool( GEOMOp::OpSphere, primTbId );
1340 createTool( GEOMOp::OpTorus, primTbId );
1341 createTool( GEOMOp::OpCone, primTbId );
1342 createTool( GEOMOp::OpRectangle, primTbId );
1343 createTool( GEOMOp::OpDisk, primTbId );
1344 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1346 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1347 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1348 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1350 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1351 createTool( GEOMOp::OpFuse, boolTbId );
1352 createTool( GEOMOp::OpCommon, boolTbId );
1353 createTool( GEOMOp::OpCut, boolTbId );
1354 createTool( GEOMOp::OpSection, boolTbId );
1356 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1357 createTool( GEOMOp::OpPrism, genTbId );
1358 createTool( GEOMOp::OpRevolution, genTbId );
1359 createTool( GEOMOp::OpFilling, genTbId );
1360 createTool( GEOMOp::OpPipe, genTbId );
1361 createTool( GEOMOp::OpPipePath, genTbId );
1363 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1364 createTool( GEOMOp::OpTranslate, transTbId );
1365 createTool( GEOMOp::OpRotate, transTbId );
1366 createTool( GEOMOp::OpChangeLoc, transTbId );
1367 createTool( GEOMOp::OpMirror, transTbId );
1368 createTool( GEOMOp::OpScale, transTbId );
1369 createTool( GEOMOp::OpOffset, transTbId );
1370 createTool( GEOMOp::OpProjection, transTbId );
1371 createTool( GEOMOp::OpExtension, transTbId );
1372 createTool( separator(), transTbId );
1373 createTool( GEOMOp::OpMultiTranslate, transTbId );
1374 createTool( GEOMOp::OpMultiRotate, transTbId );
1376 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1377 createTool( GEOMOp::OpExplode, operTbId );
1378 createTool( GEOMOp::OpPartition, operTbId );
1379 createTool( GEOMOp::OpArchimede, operTbId );
1380 createTool( GEOMOp::OpShapesOnShape, operTbId );
1381 createTool( GEOMOp::OpSharedShapes, operTbId );
1383 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1384 createTool( GEOMOp::OpFillet1d, featTbId );
1385 createTool( GEOMOp::OpFillet2d, featTbId );
1386 createTool( GEOMOp::OpFillet3d, featTbId );
1387 createTool( GEOMOp::OpChamfer, featTbId );
1388 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1389 createTool( GEOMOp::OpExtrudedCut, featTbId );
1391 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1392 createTool( GEOMOp::OpEdge, buildTbId );
1393 createTool( GEOMOp::OpWire, buildTbId );
1394 createTool( GEOMOp::OpFace, buildTbId );
1395 createTool( GEOMOp::OpShell, buildTbId );
1396 createTool( GEOMOp::OpSolid, buildTbId );
1397 createTool( GEOMOp::OpCompound, buildTbId );
1399 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1400 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1401 createTool( GEOMOp::OpProperties, measureTbId );
1402 createTool( GEOMOp::OpCenterMass, measureTbId );
1403 createTool( GEOMOp::OpInertia, measureTbId );
1404 createTool( GEOMOp::OpNormale, measureTbId );
1405 createTool( separator(), measureTbId );
1406 createTool( GEOMOp::OpBoundingBox, measureTbId );
1407 createTool( GEOMOp::OpMinDistance, measureTbId );
1408 createTool( GEOMOp::OpAngle, measureTbId );
1409 createTool( GEOMOp::OpTolerance , measureTbId );
1410 createTool( separator(), measureTbId );
1411 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1412 createTool( GEOMOp::OpFreeFaces, measureTbId );
1413 createTool( separator(), measureTbId );
1414 createTool( GEOMOp::OpWhatIs, measureTbId );
1415 createTool( GEOMOp::OpCheckShape, measureTbId );
1416 createTool( GEOMOp::OpCheckCompound, measureTbId );
1417 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1418 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1420 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1421 createTool( GEOMOp::OpPictureImport, picturesTbId );
1423 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1426 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1427 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1428 //@@ 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 @@//
1430 // ---- create popup menus --------------------------
1432 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1433 QString clientOCC = "(client='OCCViewer')";
1434 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1435 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1437 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1438 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1439 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1440 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1442 QString autoColorPrefix =
1443 "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') and type='Shape' and selcount=1";
1445 QtxPopupMgr* mgr = popupMgr();
1447 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1448 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1449 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1450 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1451 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1452 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1453 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1454 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1456 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1457 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1458 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1459 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1460 mgr->insert( separator(), -1, -1 ); // -----------
1462 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1463 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1464 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1465 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1466 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1467 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1468 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1469 mgr->insert( separator(), -1, -1 ); // -----------
1470 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1471 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1472 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1473 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1474 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1475 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1476 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1477 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1478 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1479 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1480 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1481 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1482 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1483 mgr->insert( separator(), dispmodeId, -1 );
1484 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1485 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1486 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1487 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1488 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1489 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1490 mgr->insert( separator(), -1, -1 ); // -----------
1492 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1493 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1494 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1495 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1496 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1497 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1498 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1499 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1500 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1501 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1503 // material properties
1504 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1505 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1508 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1509 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1511 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1512 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1513 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1515 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1516 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1518 mgr->insert( separator(), -1, -1 ); // -----------
1519 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1520 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1521 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1522 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1523 mgr->insert( separator(), -1, -1 ); // -----------
1525 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1526 onlyComponent = "((type='Component') and selcount=1)",
1527 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1528 types = "'Shape' 'Group' 'FieldStep'";
1530 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1531 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1533 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1534 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1536 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1537 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1539 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1541 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1542 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1543 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1544 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1545 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1546 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1547 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1548 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1549 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1550 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1551 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1552 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1553 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1554 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1555 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1556 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1557 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1558 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1559 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1560 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1561 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1562 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1563 mgr->insert( separator(), selectonlyId, -1);
1564 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1565 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1566 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1567 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1568 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1569 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1570 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1572 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1574 mgr->insert( separator(), -1, -1 ); // -----------
1575 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1576 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1577 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1578 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1580 mgr->insert( separator(), -1, -1 ); // -----------
1581 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1582 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1584 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1585 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1587 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1588 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1590 mgr->insert( separator(), -1, -1 ); // -----------
1591 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1592 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1594 mgr->insert( separator(), -1, -1 ); // -----------
1595 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1596 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1598 mgr->insert( separator(), -1, -1 ); // -----------
1599 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1600 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1602 mgr->insert( separator(), -1, -1 ); // -----------
1603 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1604 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1606 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1608 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1610 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1611 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1612 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1615 // create plugin actions and menus
1619 //=======================================================================
1620 // function : GeometryGUI::addPluginActions()
1622 //=======================================================================
1623 void GeometryGUI::addPluginActions()
1626 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1627 if (!resMgr) return;
1629 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1630 if (!appStudy) return;
1632 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1634 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1636 int id = GEOMOp::OpLastOperationID; // TODO?
1639 GEOMUtils::PluginInfo::const_iterator it;
1640 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1641 // bind action lib and label to its ID for activateOperation() method proper work
1642 GEOMUtils::PluginData pdata = (*it);
1643 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1644 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1645 std::list<GEOMUtils::ActionData>::const_iterator ait;
1646 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1647 GEOMUtils::ActionData adata = (*ait);
1650 if ( !adata.icon.empty() )
1651 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1653 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1654 QString actionName = smenus.last();
1655 actionName = actionName.toUpper().prepend( "MEN_" );
1656 smenus.removeLast();
1658 // path to action in toolbar
1659 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1660 QString actionTool = stools.last();
1661 actionTool = actionTool.toUpper().prepend( "TOP_" );
1662 stools.removeLast();
1664 QString actionStat = adata.statusText.c_str();
1665 actionStat = actionStat.toUpper().prepend( "STB_" );
1667 createAction( id, // ~ adata.label
1668 tr( actionTool.toLatin1().constData() ),
1670 tr( actionName.toLatin1().constData() ),
1671 tr( actionStat.toLatin1().constData() ),
1672 QKeySequence( tr( adata.accel.c_str() ) ),
1673 application()->desktop(),
1675 this, SLOT( OnGUIEvent() ),
1676 QString() /*shortcutAction*/ );
1679 foreach ( QString subMenu, smenus ) {
1680 QStringList subMenuList = subMenu.split( ":" );
1681 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1682 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1683 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1685 createMenu( id, menuId, -1 );
1687 if ( !stools.isEmpty() ) {
1688 QString subTool = stools[0];
1689 subTool = subTool.toUpper().prepend( "TOOL_" );
1690 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1691 createTool(id, toolId);
1694 // add action id to map
1695 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1696 myPluginActions[id] = anAction;
1703 //=======================================================================
1704 // function : GeometryGUI::activateModule()
1705 // purpose : Called when GEOM module is activated
1706 //=======================================================================
1707 bool GeometryGUI::activateModule( SUIT_Study* study )
1709 if ( CORBA::is_nil( myComponentGeom ) )
1712 bool res = SalomeApp_Module::activateModule( study );
1716 setMenuShown( true );
1717 setToolShown( true );
1719 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1720 PyGILState_STATE gstate = PyGILState_Ensure();
1721 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1722 if ( !pluginsmanager ) {
1726 PyObjWrapper result =
1727 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1728 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1729 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1733 PyGILState_Release(gstate);
1734 // end of GEOM plugins loading
1736 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1737 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1739 // Reset actions accelerator keys
1740 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1742 GUIMap::Iterator it;
1743 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1744 it.value()->activate( application()->desktop() );
1746 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1748 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1749 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1750 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1752 if ( !myCreationInfoWdg )
1753 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1754 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1755 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1758 SALOME_ListIO selected;
1759 sm->selectedObjects( selected );
1760 sm->clearSelected();
1762 SUIT_ViewManager* vm;
1763 ViewManagerList OCCViewManagers, VTKViewManagers;
1765 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1766 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1767 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1768 onViewManagerAdded(vm);
1770 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1771 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1772 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1773 onViewManagerAdded(vm);
1775 sm->setSelectedObjects( selected, true ); //NPAL 19674
1777 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1779 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1781 // 0020836 (Basic vectors and origin)
1782 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1783 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1784 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1786 _PTR(Study) studyDS = appStudy->studyDS();
1788 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1789 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1790 createOriginAndBaseVectors();
1798 //=======================================================================
1799 // function : GeometryGUI::deactivateModule()
1800 // purpose : Called when GEOM module is deactivated
1801 //=======================================================================
1802 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1804 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1806 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1808 setMenuShown( false );
1809 setToolShown( false );
1811 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1812 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1814 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1816 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1817 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1818 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1819 myCreationInfoWdg = 0;
1821 EmitSignalCloseAllDialogs();
1823 GUIMap::Iterator it;
1824 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1825 it.value()->deactivate();
1827 // Unset actions accelerator keys
1828 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1830 qDeleteAll(myOCCSelectors);
1831 myOCCSelectors.clear();
1832 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1834 qDeleteAll(myVTKSelectors);
1835 myVTKSelectors.clear();
1836 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1838 return SalomeApp_Module::deactivateModule( study );
1841 //=======================================================================
1842 // function : onWindowActivated()
1843 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1844 //=======================================================================
1845 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1850 const bool ViewOCC = ( win->getViewManager() ? win->getViewManager()->getType() == OCCViewer_Viewer::Type() : false );
1851 //const bool ViewVTK = ( win->getViewManager() ? win->getViewManager()->getType() == SVTK_Viewer::Type() : false );
1853 // disable non-OCC viewframe menu commands
1854 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1855 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1856 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1857 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1858 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1859 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1860 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1862 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1863 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1864 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1865 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1867 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1870 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1872 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1873 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
1874 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1875 if ( myCreationInfoWdg )
1876 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1879 void GeometryGUI::viewManagers( QStringList& lst ) const
1881 lst.append( OCCViewer_Viewer::Type() );
1884 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1886 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1888 qDebug( "connect" );
1889 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1890 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1891 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1892 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1893 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1894 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1895 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1896 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1898 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1899 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1901 // disable OCC selectors
1902 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1903 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1904 while ( itOCCSel.hasNext() )
1905 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1906 sr->setEnabled(true);
1908 else if ( vm->getType() == SVTK_Viewer::Type() )
1910 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1911 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1913 // disable VTK selectors
1914 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1915 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1916 while ( itVTKSel.hasNext() )
1917 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1918 sr->setEnabled(true);
1922 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1924 SUIT_ViewModel* viewer = vm->getViewModel();
1925 if ( vm->getType() == OCCViewer_Viewer::Type() )
1927 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1928 while ( itOCCSel.hasNext() )
1929 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1930 if ( sr->viewer() == viewer )
1932 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1936 if ( vm->getType() == SVTK_Viewer::Type() )
1938 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1939 while ( itVTKSel.hasNext() )
1940 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1941 if ( sr->viewer() == viewer )
1943 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1949 //================================================================================
1951 * \brief Slot called when selection changed. Shows creation info of a selected object
1953 //================================================================================
1955 void GeometryGUI::updateCreationInfo()
1957 if ( myCreationInfoWdg )
1958 myCreationInfoWdg->clear();
1960 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
1961 // if ( !myCreationInfoWdg->isVisible() )
1964 // look for a sole selected GEOM_Object
1965 GEOM::GEOM_BaseObject_var geomObj;
1967 SALOME_ListIO selected;
1968 getApp()->selectionMgr()->selectedObjects( selected );
1970 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
1971 SALOME_ListIteratorOfListIO selIt( selected );
1972 for ( ; selIt.More(); selIt.Next() )
1974 Handle(SALOME_InteractiveObject) io = selIt.Value();
1975 if ( !io->hasEntry() ) continue;
1976 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
1977 if ( !sobj ) continue;
1978 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
1979 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
1980 if ( !gobj->_is_nil() )
1982 if ( !geomObj->_is_nil() )
1983 return; // several GEOM objects selected
1987 if ( geomObj->_is_nil() ) return;
1989 // pass creation info of geomObj to myCreationInfoWdg
1991 if ( myCreationInfoWdg ) {
1993 QString operationName;
1994 myCreationInfoWdg->setOperation( icon, operationName );
1998 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2000 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2001 QString name = info->operationName.in();
2002 if ( !name.isEmpty() ) {
2004 QString plugin_name;
2005 for ( size_t i = 0; i < info->params.length(); ++i ) {
2006 myCreationInfoWdg->addParam( info->params[i].name.in(),
2007 info->params[i].value.in() );
2008 QString value = info->params[i].name.in();
2009 if( value == PLUGIN_NAME ) {
2010 plugin_name = info->params[i].value.in();
2013 QString prefix = plugin_name.isEmpty() ? "GEOM" : plugin_name;
2014 icon = resMgr->loadPixmap( prefix, tr( ("ICO_"+name).toLatin1().constData() ), false );
2015 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2016 if ( operationName.startsWith( "MEN_" ))
2017 operationName = name; // no translation
2018 myCreationInfoWdg->setOperation( icon, operationName );
2027 void GeometryGUI::onAutoBringToFront()
2029 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2030 if( !isAutoBringToFront )
2033 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2034 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2037 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2038 if (!appStudy) return;
2040 GEOM_Displayer displayer( appStudy );
2042 SALOME_View* window = displayer.GetActiveView();
2043 if ( !window ) return;
2045 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2047 SALOME_ListIO selected;
2048 getApp()->selectionMgr()->selectedObjects( selected );
2049 if (!myTopLevelIOList.IsEmpty())
2051 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2053 Handle( SALOME_InteractiveObject ) io = It.Value();
2054 bool isSelected = false;
2055 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2057 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2058 if( io->isSame( sel_io ) )
2061 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2063 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2064 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2069 myTopLevelIOList.Assign(selected);
2070 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2072 Handle( SALOME_InteractiveObject ) io = It.Value();
2073 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2074 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2077 displayer.UpdateViewer();
2078 GeometryGUI::Modified();
2081 void GeometryGUI::updateFieldColorScale()
2083 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2085 GEOM_Displayer aDisplayer( aStudy );
2086 aDisplayer.UpdateColorScale();
2090 QString GeometryGUI::engineIOR() const
2092 if ( !CORBA::is_nil( GetGeomGen() ) )
2093 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2097 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2098 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2100 theWidth = theHeight = 0;
2102 Handle(TColStd_HArray1OfByte) aTexture;
2105 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2106 aTexture = aTextureMap[ theId ];
2107 if ( aTexture.IsNull() ) {
2108 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2109 if ( !aInsOp->_is_nil() ) {
2110 CORBA::Long aWidth, aHeight;
2111 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2112 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2114 theHeight = aHeight;
2116 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2118 for (int i = 0; i < aStream->length(); i++)
2119 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2120 aTextureMap[ theId ] = aTexture;
2128 LightApp_Selection* GeometryGUI::createSelection() const
2130 return new GEOMGUI_Selection();
2133 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2135 SalomeApp_Module::contextMenuPopup( client, menu, title );
2137 getApp()->selectionMgr()->selectedObjects( lst );
2139 //Add submenu for predefined materials
2140 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2141 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2142 QtxPopupMgr* mgr = popupMgr();
2143 //get parrent for submenu
2144 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2146 QMenu* oldMenu = act->menu() ;
2151 QMenu* matMenu = new QMenu();
2152 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2154 //Get current material model for the object
2156 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2157 if ( anApp && anApp->activeViewManager() ) {
2158 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2160 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2163 QString curModel = "";
2164 if ( v.canConvert<QString>() ) curModel = v.toString();
2165 // get list of all predefined materials
2166 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2168 foreach ( QString material, materials )
2170 QAction* menAct = matMenu->addAction( material );
2171 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2172 signalMapper->setMapping( menAct, material );
2173 menAct->setCheckable( true );
2174 // Set checked if this material is current
2175 Material_Model aModel;
2176 aModel.fromResources( material );
2177 if ( !found && aModel.toProperties() == curModel ) {
2178 menAct->setChecked( true );
2182 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2183 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2184 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2185 this, SLOT( OnSetMaterial( const QString & ) ) );
2186 act->setMenu( matMenu );
2190 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2191 Handle(SALOME_InteractiveObject) io = lst.First();
2192 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2193 _PTR(Study) study = appStudy->studyDS();
2194 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2196 QString aName = QString( obj->GetName().c_str() );
2197 aName.remove( QRegExp("\\s+$") );
2203 void GeometryGUI::OnSetMaterial(const QString& theName)
2205 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2209 void GeometryGUI::createPreferences()
2211 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2213 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2214 setPreferenceProperty( genGroup, "columns", 2 );
2216 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2217 LightApp_Preferences::Selector,
2218 "Geometry", "display_mode" );
2220 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2221 LightApp_Preferences::Color, "Geometry", "shading_color" );
2223 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2224 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2226 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2227 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2229 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2230 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2232 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2233 LightApp_Preferences::Color, "Geometry", "line_color" );
2235 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2236 LightApp_Preferences::Color, "Geometry", "point_color" );
2238 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2239 LightApp_Preferences::Color, "Geometry", "isos_color" );
2241 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2242 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2244 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2245 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2247 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2248 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2250 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2251 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2253 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2254 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2256 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2257 LightApp_Preferences::Selector,
2258 "Geometry", "material" );
2260 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2261 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2267 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2268 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2270 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2271 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2273 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2274 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2276 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2277 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2279 for (int i = 0; i < nb; i++) {
2280 setPreferenceProperty( wd[i], "min", 1 );
2281 setPreferenceProperty( wd[i], "max", 5 );
2284 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2285 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2287 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2288 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2290 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2291 setPreferenceProperty( aDimGroupId, "columns", 2 );
2293 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2294 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2296 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2297 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2299 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2300 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2302 int aDimFontHeightId = addPreference( tr( "PREF_DIMENSIONS_FONT_HEIGHT" ), aDimGroupId,
2303 LightApp_Preferences::DblSpin, "Geometry", "dimensions_font_height" );
2305 setPreferenceProperty( aDimFontHeightId, "min", 1e-9 );
2306 setPreferenceProperty( aDimFontHeightId, "max", 1e+9 );
2307 setPreferenceProperty( aDimFontHeightId, "precision", 9 );
2309 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2310 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2312 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2313 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2314 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2316 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2317 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2319 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2320 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2322 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2323 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2325 QStringList aListOfLengthUnits;
2326 aListOfLengthUnits << "m";
2327 aListOfLengthUnits << "cm";
2328 aListOfLengthUnits << "mm";
2329 aListOfLengthUnits << "in.";
2330 aListOfLengthUnits << "ft.";
2332 QStringList aListOfAngUnits;
2333 aListOfAngUnits << "rad";
2334 aListOfAngUnits << "deg";
2336 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2337 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2339 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2340 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2342 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2343 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2344 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2346 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2347 setPreferenceProperty( isoGroup, "columns", 2 );
2348 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2349 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2350 setPreferenceProperty( isoU, "min", 0 );
2351 setPreferenceProperty( isoU, "max", 100000 );
2352 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2353 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2354 setPreferenceProperty( isoV, "min", 0 );
2355 setPreferenceProperty( isoV, "max", 100000 );
2357 // Quantities with individual precision settings
2358 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2359 setPreferenceProperty( precGroup, "columns", 2 );
2361 const int nbQuantities = 8;
2362 int prec[nbQuantities], ii = 0;
2363 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2364 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2365 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2366 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2367 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2368 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2369 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2370 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2371 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2372 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2373 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2374 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2375 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2376 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2377 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2378 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2380 // Set property for precision value for spinboxes
2381 for ( ii = 0; ii < nbQuantities; ii++ ){
2382 setPreferenceProperty( prec[ii], "min", -14 );
2383 setPreferenceProperty( prec[ii], "max", 14 );
2384 setPreferenceProperty( prec[ii], "precision", 2 );
2387 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2388 setPreferenceProperty( VertexGroup, "columns", 2 );
2390 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2391 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2393 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2394 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2396 // Set property for default display mode
2397 QStringList aModesList;
2398 aModesList.append( tr("MEN_WIREFRAME") );
2399 aModesList.append( tr("MEN_SHADING") );
2400 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2401 aModesList.append( tr("MEN_TEXTURE") );
2403 QList<QVariant> anIndexesList;
2404 anIndexesList.append(0);
2405 anIndexesList.append(1);
2406 anIndexesList.append(2);
2407 anIndexesList.append(3);
2409 setPreferenceProperty( dispmode, "strings", aModesList );
2410 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2412 // Set property for top level display mode
2413 QStringList aTopModesList;
2414 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2415 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2416 aTopModesList.append( tr("MEN_WIREFRAME") );
2417 aTopModesList.append( tr("MEN_SHADING") );
2418 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2420 QList<QVariant> aTopIndexesList;
2421 aTopIndexesList.append(0);
2422 aTopIndexesList.append(1);
2423 aTopIndexesList.append(2);
2424 aTopIndexesList.append(3);
2425 aTopIndexesList.append(4);
2427 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2428 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2430 // Set property for step value for spinboxes
2431 setPreferenceProperty( step, "min", 1 );
2432 setPreferenceProperty( step, "max", 10000 );
2433 setPreferenceProperty( step, "precision", 3 );
2435 // Set property for trandparency value for spinboxes
2436 setPreferenceProperty( transparency, "min", 0 );
2437 setPreferenceProperty( transparency, "max", 100 );
2439 // Set property for deflection value for spinboxes
2440 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2441 setPreferenceProperty( defl, "max", 1.0 );
2442 setPreferenceProperty( defl, "step", 1.0e-04 );
2443 setPreferenceProperty( defl, "precision", 6 );
2445 // Set property for default material
2446 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2448 // Set property vertex marker type
2449 QList<QVariant> aMarkerTypeIndicesList;
2450 QList<QVariant> aMarkerTypeIconsList;
2452 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2453 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2454 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2455 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2456 aMarkerTypeIndicesList << (i-1);
2457 aMarkerTypeIconsList << pixmap;
2460 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2461 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2463 // Set property for vertex marker scale
2464 QList<QVariant> aMarkerScaleIndicesList;
2465 QStringList aMarkerScaleValuesList;
2467 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2468 aMarkerScaleIndicesList << iii;
2469 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2472 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2473 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2475 // Scalar bar for field step presentation
2476 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2477 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2479 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2480 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2481 setPreferenceProperty( sbXPosition, "min", 0 );
2482 setPreferenceProperty( sbXPosition, "max", 1 );
2483 setPreferenceProperty( sbXPosition, "step", 0.05 );
2485 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2486 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2487 setPreferenceProperty( sbYPosition, "min", 0 );
2488 setPreferenceProperty( sbYPosition, "max", 1 );
2489 setPreferenceProperty( sbYPosition, "step", 0.05 );
2491 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2492 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2493 setPreferenceProperty( sbWidth, "min", 0 );
2494 setPreferenceProperty( sbWidth, "max", 1 );
2495 setPreferenceProperty( sbWidth, "step", 0.05 );
2497 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2498 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2499 setPreferenceProperty( sbHeight, "min", 0 );
2500 setPreferenceProperty( sbHeight, "max", 1 );
2501 setPreferenceProperty( sbHeight, "step", 0.05 );
2503 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2504 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2505 setPreferenceProperty( sbTextHeight, "min", 6 );
2506 setPreferenceProperty( sbTextHeight, "max", 24 );
2507 setPreferenceProperty( sbTextHeight, "step", 1 );
2509 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2510 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2511 setPreferenceProperty( sbNbIntervals, "min", 2 );
2512 setPreferenceProperty( sbNbIntervals, "max", 64 );
2513 setPreferenceProperty( sbNbIntervals, "step", 1 );
2515 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2516 setPreferenceProperty( originGroup, "columns", 2 );
2518 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2519 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2520 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2521 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2523 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2524 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2526 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2527 setPreferenceProperty( operationsGroup, "columns", 2 );
2529 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2530 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2532 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2534 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2536 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2537 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2539 QStringList aHierarchyTypeList;
2540 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2541 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2542 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2544 QList<QVariant> aHierarchyTypeIndexesList;
2545 aHierarchyTypeIndexesList.append(0);
2546 aHierarchyTypeIndexesList.append(1);
2547 aHierarchyTypeIndexesList.append(2);
2549 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2550 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2552 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2553 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2555 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2557 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2558 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2560 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2561 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2562 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2563 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2564 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2565 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2566 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2567 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2569 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2570 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2571 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2572 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2573 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2574 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2581 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2583 if (section == "Geometry") {
2584 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2585 if (param == QString("SettingsGeomStep")) {
2586 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2587 EmitSignalDefaultStepValueChanged(spin_step);
2589 else if (param == QString("toplevel_color")) {
2590 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2591 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2593 else if (param == QString("toplevel_dm")) {
2594 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2596 else if (param == QString("scalar_bar_x_position") ||
2597 param == QString("scalar_bar_y_position") ||
2598 param == QString("scalar_bar_width") ||
2599 param == QString("scalar_bar_height") ||
2600 param == QString("scalar_bar_text_height") ||
2601 param == QString("scalar_bar_nb_intervals")) {
2602 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2604 GEOM_Displayer aDisplayer( aStudy );
2605 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2606 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2609 else if ( param == QString("dimensions_color") ||
2610 param == QString("dimensions_line_width") ||
2611 param == QString("dimensions_font_height") ||
2612 param == QString("dimensions_arrow_length") ||
2613 param == QString("dimensions_show_units") ||
2614 param == QString("dimensions_length_units") ||
2615 param == QString("dimensions_angle_units") )
2617 SalomeApp_Application* anApp = getApp();
2623 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2629 GEOM_Displayer aDisplayer( aStudy );
2631 ViewManagerList aVMs;
2632 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2633 ViewManagerList::Iterator anIt = aVMs.begin();
2634 for ( ; anIt != aVMs.end(); ++anIt )
2636 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2642 SALOME_ListIO aVisible;
2643 aViewer->GetVisible( aVisible );
2644 aDisplayer.Redisplay( aVisible, false, aViewer );
2647 aDisplayer.UpdateViewer();
2649 else if ( param.startsWith( "dependency_tree") )
2650 emit SignalDependencyTreeParamChanged( section, param );
2654 LightApp_Displayer* GeometryGUI::displayer()
2657 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2661 void GeometryGUI::setLocalSelectionMode(const int mode)
2663 myLocalSelectionMode = mode;
2666 int GeometryGUI::getLocalSelectionMode() const
2668 return myLocalSelectionMode;
2671 const char gSeparator = '_'; // character used to separate parameter names
2672 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2675 * \brief Store visual parameters
2677 * This method is called just before the study document is saved.
2678 * Store visual parameters in AttributeParameter attribute(s)
2680 void GeometryGUI::storeVisualParameters (int savePoint)
2682 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2683 if ( !appStudy || !appStudy->studyDS() )
2685 _PTR(Study) studyDS = appStudy->studyDS();
2687 // componentName is used for encoding of entries when storing them in IParameters
2688 std::string componentName = myComponentGeom->ComponentDataType();
2689 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2690 //if (!aSComponent) return;
2693 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2694 componentName.c_str(),
2696 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2698 QSet<QString> anEntriesToStoreShared;
2699 QList<SUIT_ViewManager*> lst;
2700 QList<SUIT_ViewManager*>::Iterator it;
2702 // main cycle to store parameters of displayed objects
2704 getApp()->viewManagers(lst);
2705 for (it = lst.begin(); it != lst.end(); it++) {
2706 SUIT_ViewManager* vman = *it;
2707 QString vType = vman->getType();
2708 int aMgrId = vman->getGlobalId();
2709 // saving VTK actors properties
2710 QVector<SUIT_ViewWindow*> views = vman->getViews();
2711 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2712 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
2713 ObjMap::ConstIterator o_it = anObjects.begin();
2714 for (; o_it != anObjects.end(); o_it++) {
2715 const PropMap& aProps = o_it.value();
2717 //Check that object exists in the study
2718 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2719 if ( !obj || !(aProps.count() > 0))
2721 // entry is "encoded" = it does NOT contain component adress, since it is a
2722 // subject to change on next component loading
2724 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2726 _PTR(GenericAttribute) anAttr;
2727 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2730 // remember entry of object to store shared GEOM properties
2731 // (e.g. dimension properties).
2732 if ( vType == OCCViewer_Viewer::Type() )
2734 anEntriesToStoreShared.insert( o_it.key() );
2737 QString param, occParam = vType;
2738 occParam += GEOM::sectionSeparator();
2739 occParam += QString::number(aMgrId);
2740 occParam += GEOM::sectionSeparator();
2742 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2743 param = occParam + GEOM::propertyName( GEOM::Visibility );
2744 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2747 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2748 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2749 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2752 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2753 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2755 val << QString::number(c.redF());
2756 val << QString::number(c.greenF());
2757 val << QString::number(c.blueF());
2758 param = occParam + GEOM::propertyName( GEOM::Color );
2759 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2762 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2763 param = occParam + GEOM::propertyName( GEOM::Texture );
2764 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2767 if (vType == SVTK_Viewer::Type()) {
2768 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2769 param = occParam + GEOM::propertyName( GEOM::Opacity );
2770 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2772 } else if (vType == SOCC_Viewer::Type()) {
2773 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2774 param = occParam + GEOM::propertyName( GEOM::Transparency );
2775 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2778 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2779 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2780 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2784 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2785 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2786 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2789 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2790 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2791 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2794 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
2795 param = occParam + GEOM::propertyName( GEOM::Vertices );
2796 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
2799 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2800 param = occParam + GEOM::propertyName( GEOM::Deflection );
2801 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2804 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2805 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2806 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2807 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2810 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2811 param = occParam + GEOM::propertyName( GEOM::Material );
2812 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2815 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2816 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2817 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2820 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2821 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2822 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2824 } // object iterator
2826 } // for (viewManagers)
2828 // store dimension attributes of objects:
2829 // since the displayed object always persists in property map, we remember the object entries
2830 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
2831 QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
2832 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
2833 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
2835 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
2836 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName);
2838 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
2840 if ( aDimensions.GetNumber() == 0 )
2845 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
2850 * \brief Restore visual parameters
2852 * This method is called after the study document is opened.
2853 * Restore visual parameters from AttributeParameter attribute(s)
2855 void GeometryGUI::restoreVisualParameters (int savePoint)
2857 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2858 if (!appStudy || !appStudy->studyDS())
2860 _PTR(Study) studyDS = appStudy->studyDS();
2862 // componentName is used for encoding of entries when storing them in IParameters
2863 std::string componentName = myComponentGeom->ComponentDataType();
2864 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2865 //if (!aSComponent) return;
2868 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2869 componentName.c_str(),
2871 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2873 std::vector<std::string> entries = ip->getEntries();
2875 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2877 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2878 QString entry (ip->decodeEntry(*entIt).c_str());
2880 // Check that the entry corresponds to a real object in the Study
2881 // as the object may be deleted or modified after the visual state is saved.
2882 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2883 if (!so) continue; //Skip the not existent entry
2885 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2886 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2888 std::vector<std::string>::iterator namesIt = paramNames.begin();
2889 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2891 // actors are stored in a map after displaying of them for
2892 // quicker access in the future: map < viewID to actor >
2893 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2894 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2896 QString viewerTypStr;
2897 QString viewIndexStr;
2899 QVector<PropMap> aListOfMap;
2901 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2903 // visual parameters are stored in strings as follows:
2904 // 1) ViewerType_ViewIndex_ParamName
2905 // 2) ViewerType_ParamName (shared for GEOM module)
2906 // '_' is used as separator and should not be used in viewer type or parameter names.
2907 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2909 bool isShared = lst.size() == 2;
2910 bool isViewer = lst.size() == 3;
2911 if ( !isShared && !isViewer )
2916 // shared visual parameters
2919 QString aParamNameStr( lst[1] );
2920 QString aValuesStr( (*valuesIt).c_str() );
2922 // shared dimension properties are stored as attribute
2923 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
2925 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
2926 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
2932 // per view visual parameters
2933 viewerTypStr = lst[0];
2934 viewIndexStr = lst[1];
2935 QString paramNameStr = lst[2];
2938 viewIndex = viewIndexStr.toUInt(&ok);
2939 if (!ok) // bad conversion of view index to integer
2942 if ((viewIndex + 1) > aListOfMap.count()) {
2943 aListOfMap.resize(viewIndex + 1);
2946 QString val((*valuesIt).c_str());
2947 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
2948 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
2949 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
2950 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
2951 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
2952 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
2953 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
2954 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
2955 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
2956 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
2957 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
2958 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
2959 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
2960 QStringList rgb = val.split(GEOM::subSectionSeparator());
2961 if (rgb.count() == 3) {
2962 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
2963 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
2965 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
2966 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
2967 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
2968 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
2969 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
2970 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
2971 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
2972 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
2973 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
2974 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
2975 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
2976 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
2977 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
2978 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
2979 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
2980 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
2982 } // for names/parameters iterator
2984 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2986 for (int index = 0; index < aListOfMap.count(); index++) {
2987 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
2989 //Get Visibility property of the current PropMap
2990 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
2991 SUIT_ViewManager* vman = lst.at(index);
2992 SUIT_ViewModel* vmodel = vman->getViewModel();
2993 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
2996 } // for entries iterator
2998 // update all VTK and OCC views
2999 QList<SUIT_ViewManager*> lst;
3000 getApp()->viewManagers(lst);
3001 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3002 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3005 if (vmodel->getType() == SVTK_Viewer::Type()) {
3006 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3007 vtkView->getRenderer()->ResetCameraClippingRange();
3010 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3011 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3012 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3019 void GeometryGUI::onViewAboutToShow()
3021 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3022 QAction* a = action( GEOMOp::OpSwitchVectors );
3023 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3025 a->setEnabled(true);
3026 bool vmode = window->property("VectorsMode").toBool();
3027 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3028 aVerticesAction->setEnabled(true);
3029 vmode = window->property("VerticesMode").toBool();
3030 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3032 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3033 a->setEnabled(false);
3034 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3035 aVerticesAction->setEnabled(false);
3040 \brief Return action by id
3041 \param id identifier of the action
3044 QAction* GeometryGUI::getAction(const int id) {
3049 \brief GEOM module message handler
3051 This method can be re-implemented in the subclasses.
3052 This is a GEOM module message handler.
3054 \param msg the message received.
3056 void GeometryGUI::message(const QString& msg)
3059 QStringList data = msg.split("/");
3060 const int nbStrings = data.count();
3062 if (nbStrings > 0) {
3063 if (data[0] == "modified") {
3065 QString anIOR = nbStrings > 1 ? data[1] : QString();
3067 if ( anIOR.isEmpty() ) {
3071 // Get the geom object.
3072 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3074 // Clear the shape buffer
3075 GeometryGUI::ClearShapeBuffer (anObj);
3081 \brief Clears the shape buffer.
3083 This is a static method. It clears the shape buffer.
3085 \param theObj the object
3087 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3089 if ( CORBA::is_nil( theObj ) )
3092 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3093 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3094 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3096 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3101 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3106 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3110 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3111 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3112 _PTR(GenericAttribute) anAttr;
3113 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3114 _PTR(AttributeIOR) anIOR ( anAttr );
3115 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3116 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3122 \brief Returns the object from IOR.
3124 This is a static method. It returns the object from its IOR.
3126 \param IOR object IOR
3127 \return GEOM object.
3129 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3131 GEOM::GEOM_Object_var geomObj;
3132 if ( !IOR.isEmpty() ) {
3133 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3134 ( IOR.toLatin1().constData() );
3135 if ( !CORBA::is_nil( corbaObj ) )
3136 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3138 return geomObj._retn();
3142 \brief Returns IOR of the object.
3144 This is a static method. It returns the object's IOR.
3146 \param object the GEOM object.
3147 \return object's IOR.
3149 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3152 if ( !CORBA::is_nil( object ) ) {
3153 CORBA::String_var anIOR =
3154 SalomeApp_Application::orb()->object_to_string( object );
3161 \brief Check if this object is can't be renamed in place
3163 This method can be re-implemented in the subclasses.
3164 Return true in case if object isn't reference or component (module root).
3166 \param entry column id
3167 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3169 bool GeometryGUI::renameAllowed( const QString& entry) const {
3171 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3172 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3173 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3175 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3179 Rename object by entry.
3180 \param entry entry of the object
3181 \param name new name of the object
3182 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3184 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3186 bool result = false;
3188 SalomeApp_Application* app =
3189 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3190 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3195 _PTR(Study) aStudy = appStudy->studyDS();
3200 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3202 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3206 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3207 _PTR(GenericAttribute) anAttr;
3209 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3210 _PTR(AttributeName) aName (anAttr);
3212 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3213 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3214 if (!CORBA::is_nil(anObj)) {
3215 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3216 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3224 void GeometryGUI::updateMaterials()
3226 LightApp_Preferences* pref = preferences();
3228 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3229 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3230 if ( !materials.contains( currentMaterial ) )
3231 // user material set as default in the preferences, might be removed
3232 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3234 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3236 setPreferenceProperty( prefItem->id(),
3237 "strings", materials );
3238 prefItem->retrieve();
3244 \brief Check if the module allows "drag" operation of its objects.
3246 Overloaded from LightApp_Module class.
3248 This function is a part of the general drag-n-drop mechanism.
3249 The goal of this function is to check data object passed as a parameter
3250 and decide if it can be dragged or no.
3252 \param what data object being tested for drag operation
3253 \return \c true if module allows dragging of the specified object
3254 \sa isDropAccepted(), dropObjects()
3256 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3258 // we allow dragging object under root and object from folder
3259 int aLevel = what->level();
3260 bool anObjectInFolder = false;
3262 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3264 _PTR(SObject) aSO = dataObj->object();
3266 _PTR(GenericAttribute) anAttr;
3267 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3268 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3269 _PTR(AttributeLocalID) aLocalID( anAttr );
3270 anObjectInFolder = aLocalID->Value() == 999;
3275 return aLevel == 2 || anObjectInFolder;
3279 \brief Check if the module allows "drop" operation on the given object.
3281 Overloaded from LightApp_Module class.
3283 This function is a part of the general drag-n-drop mechanism.
3284 The goal of this function is to check data object passed as a parameter
3285 and decide if it can be used as a target for the "drop" operation.
3286 The processing of the drop operation itself is done in the dropObjects() function.
3288 \param where target data object
3289 \return \c true if module supports dropping on the \a where data object
3290 \sa isDraggable(), dropObjects()
3292 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3294 // we allow dropping into folder and top-level GEOM object
3295 int aLevel = where->level();
3296 bool isFolder = false;
3298 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3300 _PTR(SObject) aSO = dataObj->object();
3302 _PTR(GenericAttribute) anAttr;
3303 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3304 _PTR(AttributeLocalID) aLocalID( anAttr );
3305 isFolder = aLocalID->Value() == 999;
3310 return aLevel == 1 || isFolder;
3314 \brief Complete drag-n-drop operation.
3316 Overloaded from LightApp_Module class.
3318 This function is a part of the general drag-n-drop mechanism.
3319 Its goal is to handle dropping of the objects being dragged according
3320 to the chosen operation (move). The dropping is performed in the
3321 context of the parent data object \a where and the \a row (position in the
3322 children index) at which the data should be dropped. If \a row is equal to -1,
3323 this means that objects are added to the end of the children list.
3325 \param what objects being dropped
3326 \param where target data object
3327 \param row child index at which the drop operation is performed
3328 \param action drag-n-drop operation (Qt::DropAction) - move
3330 \sa isDraggable(), isDropAccepted()
3332 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3333 const int row, Qt::DropAction action )
3335 if (action != Qt::CopyAction && action != Qt::MoveAction)
3336 return; // unsupported action
3338 // get parent object
3339 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3340 if ( !dataObj ) return; // wrong parent
3341 _PTR(SObject) parentObj = dataObj->object();
3343 // Find the current Study and StudyBuilder
3344 _PTR(Study) aStudy = parentObj->GetStudy();
3345 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3346 // collect all parents of the target node
3347 QStringList parentIDs;
3348 _PTR(SObject) parent = parentObj;
3349 while( !parent->IsNull() ) {
3350 parentIDs << parent->GetID().c_str();
3351 parent = aUseCaseBuilder->GetFather(parent);
3354 // collect objects being dropped
3355 GEOM::object_list_var objects = new GEOM::object_list();
3356 objects->length( what.count() );
3358 for ( int i = 0; i < what.count(); i++ ) {
3359 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3360 if ( !dataObj ) continue; // skip wrong objects
3361 _PTR(SObject) sobj = dataObj->object();
3362 // check that dropped object is not a parent of target object
3363 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3364 return; // it's not allowed to move node into it's child
3366 objects[i] = _CAST(SObject, sobj)->GetSObject();
3369 objects->length( count );
3371 // call engine function
3372 GetGeomGen()->Move( objects.in(), // what
3373 _CAST(SObject, parentObj)->GetSObject(), // where
3376 // update Object browser
3377 getApp()->updateObjectBrowser( false );