1 // Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : GeometryGUI.cxx
23 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
25 #include <Standard_math.hxx> // E.A. must be included before Python.h to fix compilation on windows
27 #undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
30 #include "GeometryGUI.h"
31 #include "GeometryGUI_Operations.h"
32 #include "GEOMPluginGUI.h"
33 #include "GEOMGUI_OCCSelector.h"
34 #include "GEOMGUI_Selection.h"
35 #include "GEOMGUI_CreationInfoWdg.h"
36 #include "GEOMGUI_DimensionProperty.h"
37 #include "GEOM_Constants.h"
38 #include "GEOM_Displayer.h"
39 #include "GEOM_AISShape.hxx"
40 #include "GEOMUtils_XmlHandler.hxx"
42 #include "GEOM_Actor.h"
44 #include <Material_ResourceMgr.h>
45 #include <Material_Model.h>
47 #include <SUIT_Desktop.h>
48 #include <SUIT_MessageBox.h>
49 #include <SUIT_ResourceMgr.h>
50 #include <SUIT_Session.h>
51 #include <SUIT_ViewManager.h>
53 #include <PyInterp_Interp.h>
55 #include <OCCViewer_ViewWindow.h>
56 #include <OCCViewer_ViewPort3d.h>
57 #include <OCCViewer_ViewModel.h>
58 #include <OCCViewer_ViewManager.h>
60 #include <SOCC_ViewModel.h>
61 #include <SOCC_ViewWindow.h>
63 #include <SVTK_ViewWindow.h>
64 #include <SVTK_RenderWindowInteractor.h>
65 #include <SVTK_InteractorStyle.h>
66 #include <SVTK_ViewModel.h>
68 #include <GraphicsView_Viewer.h>
70 #include <SalomeApp_Application.h>
71 #include <SalomeApp_DataObject.h>
72 #include <SalomeApp_Study.h>
73 #include <SalomeApp_Tools.h>
75 #include <LightApp_SelectionMgr.h>
76 #include <LightApp_VTKSelector.h>
77 #include <LightApp_DataObject.h>
78 #include <LightApp_Preferences.h>
80 #include <SALOME_LifeCycleCORBA.hxx>
81 #include <SALOME_ListIO.hxx>
83 #include <SALOMEDSClient_ClientFactory.hxx>
84 #include <SALOMEDSClient_IParameters.hxx>
86 #include <SALOMEDS_SObject.hxx>
88 #include <Basics_OCCTVersion.hxx>
99 #include <QSignalMapper>
101 #include <AIS_ListOfInteractive.hxx>
102 #include <AIS_ListIteratorOfListOfInteractive.hxx>
103 #include <Prs3d_Drawer.hxx>
104 #include <Prs3d_IsoAspect.hxx>
105 #include <Aspect_TypeOfMarker.hxx>
106 #include <OSD_SharedLibrary.hxx>
107 #include <NCollection_DataMap.hxx>
109 #include <TColStd_HArray1OfByte.hxx>
111 #include <utilities.h>
113 #include <vtkCamera.h>
114 #include <vtkRenderer.h>
116 #include <Standard_Failure.hxx>
117 #include <Standard_ErrorHandler.hxx>
119 #include "GEOM_version.h"
120 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
123 Standard_EXPORT CAM_Module* createModule() {
124 return new GeometryGUI();
127 Standard_EXPORT char* getModuleVersion() {
128 return (char*)GEOM_VERSION_STR;
132 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
134 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
136 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
138 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
139 if (CORBA::is_nil(myComponentGeom))
141 return GeometryGUI::myComponentGeom;
144 bool GeometryGUI::InitGeomGen()
147 if ( CORBA::is_nil( myComponentGeom ) ) return false;
151 //=======================================================================
152 // function : ClientSObjectToObject
154 //=======================================================================
155 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
157 _PTR(GenericAttribute) anAttr;
158 CORBA::Object_var anObj;
160 std::string aValue = theSObject->GetIOR();
161 if (strcmp(aValue.c_str(), "") != 0) {
162 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
163 anObj = anORB->string_to_object(aValue.c_str());
166 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
168 return anObj._retn();
171 //=======================================================================
172 // function : ClientStudyToStudy
174 //=======================================================================
175 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
177 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
178 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
179 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
180 int aStudyID = theStudy->StudyId();
181 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
182 return aDSStudy._retn();
185 void GeometryGUI::Modified (bool theIsUpdateActions)
187 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
188 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
189 appStudy->Modified();
190 if ( theIsUpdateActions )
191 app->updateActions();
196 //=======================================================================
197 // function : GeometryGUI::GeometryGUI()
198 // purpose : Constructor
199 //=======================================================================
200 GeometryGUI::GeometryGUI() :
201 SalomeApp_Module( "GEOM" ),
204 if ( CORBA::is_nil( myComponentGeom ) )
206 Engines::EngineComponent_var comp =
207 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
208 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
211 myActiveDialogBox = 0;
213 gp_Pnt origin = gp_Pnt(0., 0., 0.);
214 gp_Dir direction = gp_Dir(0., 0., 1.);
215 myWorkingPlane = gp_Ax3(origin, direction);
218 myLocalSelectionMode = GEOM_ALLOBJECTS;
220 myCreationInfoWdg = 0;
222 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
224 Q_INIT_RESOURCE( GEOMGUI );
227 //=======================================================================
228 // function : GeometryGUI::~GeometryGUI()
229 // purpose : Destructor
230 //=======================================================================
231 GeometryGUI::~GeometryGUI()
233 while (!myOCCSelectors.isEmpty())
234 delete myOCCSelectors.takeFirst();
236 while (!myVTKSelectors.isEmpty())
237 delete myVTKSelectors.takeFirst();
239 qDeleteAll(myGUIMap);
242 //=======================================================================
243 // function : GeometryGUI::getLibrary()
244 // purpose : get or load GUI library by name [ internal ]
245 //=======================================================================
246 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
247 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
249 if ( !myGUIMap.contains( libraryName ) ) {
250 // try to load library if it is not loaded yet
252 QString dirs = getenv( "LD_LIBRARY_PATH" );
255 QString dirs = getenv( "PATH" );
258 if ( !dirs.isEmpty() ) {
259 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
260 QListIterator<QString> it( dirList ); it.toBack();
261 while ( it.hasPrevious() ) {
262 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
264 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
265 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
267 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
268 continue; // continue search further
270 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
271 if ( osdF != NULL ) {
272 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
273 GEOMGUI* libGUI = (*func)( this );
275 myGUIMap[ libraryName ] = libGUI;
276 break; // found and loaded!
283 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
286 //=======================================================================
287 // function : GeometryGUI::getPluginLibrary()
288 // purpose : get or load GUI Plugin library by name [ internal ]
289 //=======================================================================
290 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
291 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
293 if ( !myGUIMap.contains( libraryName ) ) {
294 // try to load library if it is not loaded yet
296 QString dirs = getenv( "LD_LIBRARY_PATH" );
299 QString dirs = getenv( "PATH" );
302 if ( !dirs.isEmpty() ) {
303 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
304 QListIterator<QString> it( dirList ); it.toBack();
305 while ( it.hasPrevious() ) {
306 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
308 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
309 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
311 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
312 continue; // continue search further
314 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
315 if ( osdF != NULL ) {
316 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
317 GEOMPluginGUI* libGUI = (*func)( this );
319 myGUIMap[ libraryName ] = libGUI;
320 break; // found and loaded!
327 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
330 //=======================================================================
331 // function : GeometryGUI::ActiveWorkingPlane()
332 // purpose : Activate Working Plane View
333 //=======================================================================
334 void GeometryGUI::ActiveWorkingPlane()
336 gp_Dir DZ = myWorkingPlane.Direction();
337 gp_Dir DY = myWorkingPlane.YDirection();
339 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
340 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
341 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
344 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
346 Handle(V3d_View) view3d = vw->getViewPort()->getView();
348 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
349 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
353 else if ( ViewVTK ) {
354 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
356 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
358 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
359 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
360 camera->SetFocalPoint(0,0,0);
367 //=======================================================================
368 // function : GeometryGUI::SetActiveDialogBox()
369 // purpose : Set active dialog box
370 //=======================================================================
371 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
373 myActiveDialogBox = (QDialog*)aDlg;
376 //=======================================================================
377 // function : GeometryGUI::EmitSignalDeactivateDialog()
378 // purpose : Emit a signal to deactivate the active dialog Box
379 //=======================================================================
380 void GeometryGUI::EmitSignalDeactivateDialog()
382 emit SignalDeactivateActiveDialog();
385 //=======================================================================
386 // function : GeometryGUI::EmitSignalCloseAllDialogs()
387 // purpose : Emit a signal to close all non modal dialogs box
388 //=======================================================================
389 void GeometryGUI::EmitSignalCloseAllDialogs()
391 emit SignalCloseAllDialogs();
394 //=======================================================================
395 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
396 // purpose : Emit a signal to inform that default real spin box step has
398 //=======================================================================
399 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
401 emit SignalDefaultStepValueChanged(newVal);
404 //=======================================================================
405 // function : GeometryGUI::OnGUIEvent()
406 // purpose : common slot for all menu/toolbar actions
407 //=======================================================================
408 void GeometryGUI::OnGUIEvent()
410 const QObject* obj = sender();
411 if ( !obj || !obj->inherits( "QAction" ) )
413 int id = actionId((QAction*)obj);
418 //=======================================================================
419 // function : GeometryGUI::OnGUIEvent()
420 // purpose : manage all events on GUI [static]
421 //=======================================================================
422 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
424 SUIT_Application* anApp = application();
426 SUIT_Desktop* desk = anApp->desktop();
428 // check type of the active viewframe
429 SUIT_ViewWindow* window = desk->activeWindow();
430 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
431 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
432 bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() );
433 // if current viewframe is not of OCC and not of VTK type - return immediately
434 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
435 QList<int> NotViewerDependentCommands;
436 NotViewerDependentCommands << GEOMOp::OpDelete
438 << GEOMOp::OpShowOnly
439 << GEOMOp::OpShowOnlyChildren
440 << GEOMOp::OpDiscloseChildren
441 << GEOMOp::OpConcealChildren
442 << GEOMOp::OpUnpublishObject
443 << GEOMOp::OpPublishObject
444 << GEOMOp::OpPointMarker
445 << GEOMOp::OpCreateFolder
446 << GEOMOp::OpSortChildren;
447 if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) {
448 // activate OCC viewer
449 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
452 // fix for IPAL9103, point 2
453 if ( CORBA::is_nil( GetGeomGen() ) ) {
454 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
459 // find corresponding GUI library
461 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
462 createOriginAndBaseVectors(); // internal operation
464 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
465 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
466 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
467 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
468 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
469 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
470 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
471 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
472 case GEOMOp::OpDelete: // MENU EDIT - DELETE
473 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
474 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
475 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
476 case GEOMOp::OpColor: // POPUP MENU - COLOR
477 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
478 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
479 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
480 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
481 case GEOMOp::OpIsos: // POPUP MENU - ISOS
482 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
483 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
484 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
485 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
486 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
487 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
488 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
489 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
490 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
491 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
492 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
493 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
494 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
495 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
496 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
497 case GEOMOp::OpClsBringToFront: //
498 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
499 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
500 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
501 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
502 libName = "GEOMToolsGUI";
504 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
505 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
506 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
507 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
508 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
509 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
510 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
511 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
512 case GEOMOp::OpHide: // MENU VIEW - ERASE
513 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
514 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
515 case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE
516 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
517 case GEOMOp::OpShading: // POPUP MENU - SHADING
518 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
519 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
520 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
521 case GEOMOp::OpVertices: // POPUP MENU - VERTICES
522 libName = "DisplayGUI";
524 case GEOMOp::OpPoint: // MENU BASIC - POINT
525 case GEOMOp::OpLine: // MENU BASIC - LINE
526 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
527 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
528 case GEOMOp::OpArc: // MENU BASIC - ARC
529 case GEOMOp::OpVector: // MENU BASIC - VECTOR
530 case GEOMOp::OpPlane: // MENU BASIC - PLANE
531 case GEOMOp::OpCurve: // MENU BASIC - CURVE
532 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
533 libName = "BasicGUI";
535 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
536 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
537 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
538 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
539 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
540 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
541 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
542 libName = "PrimitiveGUI";
544 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
545 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
546 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
547 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
548 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
549 libName = "GenerationGUI";
551 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
552 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
553 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
554 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
555 case GEOMOp::OpSurfaceFromFace: // MENU ENTITY - SURFACE FROM FACE
557 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
559 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
560 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
561 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
562 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
563 case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR
564 libName = "EntityGUI";
566 case GEOMOp::OpEdge: // MENU BUILD - EDGE
567 case GEOMOp::OpWire: // MENU BUILD - WIRE
568 case GEOMOp::OpFace: // MENU BUILD - FACE
569 case GEOMOp::OpShell: // MENU BUILD - SHELL
570 case GEOMOp::OpSolid: // MENU BUILD - SOLID
571 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
572 libName = "BuildGUI";
574 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
575 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
576 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
577 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
578 libName = "BooleanGUI";
580 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
581 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
582 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
583 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
584 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
585 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
586 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
587 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
588 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
589 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
590 case GEOMOp::OpExtension: // MENU TRANSFORMATION - EXTENSION
591 libName = "TransformationGUI";
593 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
594 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
595 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
596 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
597 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
598 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
599 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
600 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
601 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
602 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
603 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
604 case GEOMOp::OpTransferData: // MENU OPERATION - TRANSFER DATA
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 case GEOMOp::OpInspectObj: // MENU REPAIR - INSPECT OBJECT
625 libName = "RepairGUI";
627 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
628 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
629 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
630 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
631 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
632 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
633 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
634 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
635 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
636 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
637 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
638 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
639 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
640 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
641 case GEOMOp::OpFastCheckInters: // MENU MEASURE - FAST CHECK INTERSECTIONS
642 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
643 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
644 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
645 libName = "MeasureGUI";
647 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
648 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
649 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
650 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
651 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
652 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
653 libName = "GroupGUI";
655 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
656 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
657 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
658 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
659 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
660 libName = "BlocksGUI";
662 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
663 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
664 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
665 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
666 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
667 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
668 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
669 //libName = "AdvancedGUI";
672 if (myPluginActions.contains(id)) {
673 libName = myPluginActions[id].first;
675 GEOMPluginGUI* library = 0;
676 if ( !libName.isEmpty() ) {
678 libName = QString( "lib" ) + libName + ".so";
680 libName = libName + ".dll";
682 library = getPluginLibrary( libName );
685 // call method of corresponding GUI library
687 //QString action ("%1");
688 //action = action.arg(id);
690 //if( !theParam.isValid() )
691 library->OnGUIEvent( myPluginActions[id].second, desk );
693 // library->OnGUIEvent( id, desk, theParam);
696 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
698 updateCreationInfo();
704 GEOMGUI* library = 0;
705 if ( !libName.isEmpty() ) {
707 libName = QString( "lib" ) + libName + ".so";
709 libName = libName + ".dll";
711 library = getLibrary( libName );
714 // call method of corresponding GUI library
716 if( !theParam.isValid() )
717 library->OnGUIEvent( id, desk );
719 library->OnGUIEvent( id, desk, theParam);
722 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
724 updateCreationInfo();
727 //=================================================================================
728 // function : GeometryGUI::activateOperation()
730 //=================================================================================
731 bool GeometryGUI::activateOperation( int actionId )
733 OnGUIEvent(actionId);
737 //=================================================================================
738 // function : GeometryGUI::activateOperation()
740 //=================================================================================
741 bool GeometryGUI::activateOperation( const QString& actionId )
745 int id = actionId.toInt(&isOk);
752 //=================================================================================
753 // function : GeometryGUI::activateOperation()
755 //=================================================================================
756 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
760 QString pluginLib = plugin;
761 // TODO: if <plugin> is a plugin name, find plugin library name
762 if (myPluginLibs.contains(plugin))
763 pluginLib = myPluginLibs[plugin];
765 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
766 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
767 const PluginAction& anAction = actionsIter.value();
768 if (anAction.first == pluginLib && anAction.second == actionId) {
769 // activate operation
770 OnGUIEvent(actionsIter.key());
778 //=================================================================================
779 // function : GeometryGUI::OnKeyPress()
780 // purpose : Called when any key is pressed by user [static]
781 //=================================================================================
782 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
784 if ( !application() )
786 foreach ( GEOMGUI* lib, myGUIMap )
787 lib->OnKeyPress( e, application()->desktop(), w );
790 //=================================================================================
791 // function : GeometryGUI::OnMouseMove()
792 // purpose : Manages mouse move events [static]
793 //=================================================================================
794 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
796 if ( !application() )
798 foreach ( GEOMGUI* lib, myGUIMap )
799 lib->OnMouseMove( e, application()->desktop(), w );
802 //=================================================================================
803 // function : GeometryGUI::OnMouseRelease()
804 // purpose : Manages mouse release events [static]
805 //=================================================================================
806 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
808 if ( !application() )
810 foreach ( GEOMGUI* lib, myGUIMap )
811 lib->OnMouseRelease( e, application()->desktop(), w );
814 //=================================================================================
815 // function : GeometryGUI::OnMousePress()
816 // purpose : Manage mouse press events [static]
817 //=================================================================================
818 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
820 if ( !application() )
822 foreach ( GEOMGUI* lib, myGUIMap )
823 lib->OnMousePress( e, application()->desktop(), w );
826 //=======================================================================
827 // function : createGeomAction
829 //=======================================================================
830 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
831 const int accel, const bool toggle, const QString& shortcutAction )
833 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
834 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
835 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
837 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
839 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
840 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
842 application()->desktop(),
844 this, SLOT( OnGUIEvent() ),
848 //=======================================================================
849 // function : createOriginAndBaseVectors
851 //=======================================================================
852 void GeometryGUI::createOriginAndBaseVectors()
854 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
855 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
857 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
861 _PTR(Study) studyDS = appStudy->studyDS();
862 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
863 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
864 if ( !aBasicOperations->_is_nil() ) {
865 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
866 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
867 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
868 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
869 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
870 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
872 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
873 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
874 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
875 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
876 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
878 getApp()->updateObjectBrowser( true );
884 //=======================================================================
885 // function : GeometryGUI::initialize()
886 // purpose : Called when GEOM module is created
887 //=======================================================================
888 void GeometryGUI::initialize( CAM_Application* app )
890 SalomeApp_Module::initialize( app );
892 // ----- create actions --------------
894 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
896 createGeomAction( GEOMOp::OpPoint, "POINT" );
897 createGeomAction( GEOMOp::OpLine, "LINE" );
898 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
899 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
900 createGeomAction( GEOMOp::OpArc, "ARC" );
901 createGeomAction( GEOMOp::OpCurve, "CURVE" );
902 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
903 createGeomAction( GEOMOp::OpVector, "VECTOR" );
904 createGeomAction( GEOMOp::OpPlane, "PLANE" );
905 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
906 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
907 createGeomAction( GEOMOp::OpSurfaceFromFace, "SURFACE_FROM_FACE" );
909 createGeomAction( GEOMOp::OpBox, "BOX" );
910 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
911 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
912 createGeomAction( GEOMOp::OpTorus, "TORUS" );
913 createGeomAction( GEOMOp::OpCone, "CONE" );
914 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
915 createGeomAction( GEOMOp::OpDisk, "DISK" );
917 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
918 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
919 createGeomAction( GEOMOp::OpFilling, "FILLING" );
920 createGeomAction( GEOMOp::OpPipe, "PIPE" );
921 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
923 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
924 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
925 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
926 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
927 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
929 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
930 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
932 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
934 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
935 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
937 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
938 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
939 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
941 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
943 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
944 createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" );
946 createGeomAction( GEOMOp::OpEdge, "EDGE" );
947 createGeomAction( GEOMOp::OpWire, "WIRE" );
948 createGeomAction( GEOMOp::OpFace, "FACE" );
949 createGeomAction( GEOMOp::OpShell, "SHELL" );
950 createGeomAction( GEOMOp::OpSolid, "SOLID" );
951 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
953 createGeomAction( GEOMOp::OpFuse, "FUSE" );
954 createGeomAction( GEOMOp::OpCommon, "COMMON" );
955 createGeomAction( GEOMOp::OpCut, "CUT" );
956 createGeomAction( GEOMOp::OpSection, "SECTION" );
958 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
959 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
960 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
961 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
962 createGeomAction( GEOMOp::OpScale, "SCALE" );
963 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
964 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
965 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
966 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
967 createGeomAction( GEOMOp::OpExtension, "EXTENSION" );
969 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
970 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
971 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
972 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
973 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
974 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
975 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
976 createGeomAction( GEOMOp::OpTransferData, "TRANSFER_DATA" );
977 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
978 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
979 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
980 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
982 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
983 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
984 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
986 createGeomAction( GEOMOp::OpSewing, "SEWING" );
987 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
988 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
989 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
990 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
991 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
992 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
993 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
994 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
995 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
996 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
997 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
998 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
999 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1000 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1001 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1002 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1003 createGeomAction( GEOMOp::OpInspectObj, "INSPECT_OBJECT" );
1005 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1006 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1007 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1008 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1009 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1010 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1011 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1012 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1013 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1015 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1016 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1017 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1018 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1019 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1020 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1021 createGeomAction( GEOMOp::OpFastCheckInters, "FAST_CHECK_INTERSECTIONS" );
1023 #ifdef _DEBUG_ // PAL16821
1024 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1027 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1028 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1029 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1030 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1031 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1032 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1033 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1034 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1035 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1036 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1037 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1038 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1039 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1040 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1041 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1042 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1043 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1044 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1045 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1046 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1047 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1048 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1049 createGeomAction( GEOMOp::OpHide, "ERASE" );
1051 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1052 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1053 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1054 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1055 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1056 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1057 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1058 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1059 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1060 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1061 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1062 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1063 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1064 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1065 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1066 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1067 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1068 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1069 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1070 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1071 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1072 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1073 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1074 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1075 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1076 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1077 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1078 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1079 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1080 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1082 // Create actions for increase/decrease transparency shortcuts
1083 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1084 "Geometry:Increase transparency");
1085 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1086 "Geometry:Decrease transparency");
1088 // Create actions for increase/decrease number of isolines
1089 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1090 "Geometry:Increase number of isolines");
1091 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1092 "Geometry:Decrease number of isolines");
1094 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1095 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1096 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1097 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1098 //@@ 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 @@//
1100 // ---- create menus --------------------------
1102 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1104 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1105 createMenu( GEOMOp::OpDelete, editId, -1 );
1107 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1109 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1110 createMenu( GEOMOp::OpPoint, basicId, -1 );
1111 createMenu( GEOMOp::OpLine, basicId, -1 );
1112 createMenu( GEOMOp::OpCircle, basicId, -1 );
1113 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1114 createMenu( GEOMOp::OpArc, basicId, -1 );
1115 createMenu( GEOMOp::OpCurve, basicId, -1 );
1116 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1117 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1118 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1119 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1120 createMenu( GEOMOp::OpSurfaceFromFace, basicId, -1 );
1121 createMenu( separator(), basicId, -1 );
1122 createMenu( GEOMOp::OpVector, basicId, -1 );
1123 createMenu( GEOMOp::OpPlane, basicId, -1 );
1124 createMenu( GEOMOp::OpLCS, basicId, -1 );
1125 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1127 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1128 createMenu( GEOMOp::OpBox, primId, -1 );
1129 createMenu( GEOMOp::OpCylinder, primId, -1 );
1130 createMenu( GEOMOp::OpSphere, primId, -1 );
1131 createMenu( GEOMOp::OpTorus, primId, -1 );
1132 createMenu( GEOMOp::OpCone, primId, -1 );
1133 createMenu( GEOMOp::OpRectangle, primId, -1 );
1134 createMenu( GEOMOp::OpDisk, primId, -1 );
1135 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1137 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1138 createMenu( GEOMOp::OpPrism, genId, -1 );
1139 createMenu( GEOMOp::OpRevolution, genId, -1 );
1140 createMenu( GEOMOp::OpFilling, genId, -1 );
1141 createMenu( GEOMOp::OpPipe, genId, -1 );
1142 createMenu( GEOMOp::OpPipePath, genId, -1 );
1144 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1145 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1146 //@@ 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 @@//
1148 createMenu( separator(), newEntId, -1 );
1150 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1151 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1152 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1153 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1154 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1155 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1157 createMenu( separator(), newEntId, -1 );
1159 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1160 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1161 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1163 createMenu( separator(), newEntId, -1 );
1165 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1166 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1167 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1168 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1169 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1171 createMenu( separator(), newEntId, -1 );
1173 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1175 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1176 createMenu( GEOMOp::OpEdge, buildId, -1 );
1177 createMenu( GEOMOp::OpWire, buildId, -1 );
1178 createMenu( GEOMOp::OpFace, buildId, -1 );
1179 createMenu( GEOMOp::OpShell, buildId, -1 );
1180 createMenu( GEOMOp::OpSolid, buildId, -1 );
1181 createMenu( GEOMOp::OpCompound, buildId, -1 );
1183 createMenu( separator(), newEntId, -1 );
1185 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1187 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1190 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1192 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1193 createMenu( GEOMOp::OpFuse, boolId, -1 );
1194 createMenu( GEOMOp::OpCommon, boolId, -1 );
1195 createMenu( GEOMOp::OpCut, boolId, -1 );
1196 createMenu( GEOMOp::OpSection, boolId, -1 );
1198 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1199 createMenu( GEOMOp::OpTranslate, transId, -1 );
1200 createMenu( GEOMOp::OpRotate, transId, -1 );
1201 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1202 createMenu( GEOMOp::OpMirror, transId, -1 );
1203 createMenu( GEOMOp::OpScale, transId, -1 );
1204 createMenu( GEOMOp::OpOffset, transId, -1 );
1205 createMenu( GEOMOp::OpProjection, transId, -1 );
1206 createMenu( GEOMOp::OpExtension, transId, -1 );
1207 createMenu( separator(), transId, -1 );
1208 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1209 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1211 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1212 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1213 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1214 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1216 createMenu( separator(), operId, -1 );
1218 createMenu( GEOMOp::OpPartition, operId, -1 );
1219 createMenu( GEOMOp::OpArchimede, operId, -1 );
1220 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1221 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1222 createMenu( GEOMOp::OpTransferData, operId, -1 );
1224 createMenu( separator(), operId, -1 );
1226 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1227 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1228 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1229 createMenu( GEOMOp::OpChamfer, operId, -1 );
1230 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1231 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1232 //createMenu( GEOMOp::OpClipping, operId, -1 );
1234 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1235 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1236 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1237 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1238 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1239 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1240 createMenu( GEOMOp::OpSewing, repairId, -1 );
1241 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1242 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1243 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1244 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1245 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1246 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1247 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1248 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1249 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1250 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1251 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1253 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1254 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1255 createMenu( GEOMOp::OpProperties, measurId, -1 );
1256 createMenu( separator(), measurId, -1 );
1257 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1258 createMenu( GEOMOp::OpInertia, measurId, -1 );
1259 createMenu( GEOMOp::OpNormale, measurId, -1 );
1260 createMenu( separator(), measurId, -1 );
1261 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1262 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1263 createMenu( separator(), measurId, -1 );
1265 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1266 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1267 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1268 createMenu( GEOMOp::OpAngle, dimId, -1 );
1269 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1271 createMenu( separator(), measurId, -1 );
1272 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1273 createMenu( separator(), measurId, -1 );
1274 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1275 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1276 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1277 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1278 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1279 createMenu( GEOMOp::OpFastCheckInters, measurId, -1 );
1280 createMenu( GEOMOp::OpInspectObj, measurId, -1 );
1282 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1283 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1284 createMenu( separator(), toolsId, -1 );
1285 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1288 createMenu( separator(), toolsId, -1 );
1289 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1290 createMenu( separator(), toolsId, -1 );
1292 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1293 createMenu( separator(), viewId, -1 );
1295 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1296 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1297 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1298 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1299 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1300 createMenu( separator(), dispmodeId, -1 );
1301 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1302 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1304 createMenu( separator(), viewId, -1 );
1305 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1306 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1307 createMenu( separator(), viewId, -1 );
1308 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1309 createMenu( separator(), viewId, -1 );
1313 because of these items are accessible through object browser and viewers
1314 we have removed they from main menu
1316 createMenu( GEOMOp::OpShow, viewId, -1 );
1317 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1318 createMenu( GEOMOp::OpHide, viewId, -1 );
1321 // ---- create toolbars --------------------------
1323 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1324 createTool( GEOMOp::OpPoint, basicTbId );
1325 createTool( GEOMOp::OpLine, basicTbId );
1326 createTool( GEOMOp::OpCircle, basicTbId );
1327 createTool( GEOMOp::OpEllipse, basicTbId );
1328 createTool( GEOMOp::OpArc, basicTbId );
1329 createTool( GEOMOp::OpCurve, basicTbId );
1330 createTool( GEOMOp::OpVector, basicTbId );
1331 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1332 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1333 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1334 createTool( GEOMOp::OpIsoline, basicTbId );
1335 createTool( GEOMOp::OpSurfaceFromFace, basicTbId );
1336 createTool( GEOMOp::OpPlane, basicTbId );
1337 createTool( GEOMOp::OpLCS, basicTbId );
1338 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1340 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1341 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1342 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1344 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1345 createTool( GEOMOp::OpBox, primTbId );
1346 createTool( GEOMOp::OpCylinder, primTbId );
1347 createTool( GEOMOp::OpSphere, primTbId );
1348 createTool( GEOMOp::OpTorus, primTbId );
1349 createTool( GEOMOp::OpCone, primTbId );
1350 createTool( GEOMOp::OpRectangle, primTbId );
1351 createTool( GEOMOp::OpDisk, primTbId );
1352 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1354 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1355 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1356 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1358 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1359 createTool( GEOMOp::OpFuse, boolTbId );
1360 createTool( GEOMOp::OpCommon, boolTbId );
1361 createTool( GEOMOp::OpCut, boolTbId );
1362 createTool( GEOMOp::OpSection, boolTbId );
1364 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1365 createTool( GEOMOp::OpPrism, genTbId );
1366 createTool( GEOMOp::OpRevolution, genTbId );
1367 createTool( GEOMOp::OpFilling, genTbId );
1368 createTool( GEOMOp::OpPipe, genTbId );
1369 createTool( GEOMOp::OpPipePath, genTbId );
1371 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1372 createTool( GEOMOp::OpTranslate, transTbId );
1373 createTool( GEOMOp::OpRotate, transTbId );
1374 createTool( GEOMOp::OpChangeLoc, transTbId );
1375 createTool( GEOMOp::OpMirror, transTbId );
1376 createTool( GEOMOp::OpScale, transTbId );
1377 createTool( GEOMOp::OpOffset, transTbId );
1378 createTool( GEOMOp::OpProjection, transTbId );
1379 createTool( GEOMOp::OpExtension, transTbId );
1380 createTool( separator(), transTbId );
1381 createTool( GEOMOp::OpMultiTranslate, transTbId );
1382 createTool( GEOMOp::OpMultiRotate, transTbId );
1384 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1385 createTool( GEOMOp::OpExplode, operTbId );
1386 createTool( GEOMOp::OpPartition, operTbId );
1387 createTool( GEOMOp::OpArchimede, operTbId );
1388 createTool( GEOMOp::OpShapesOnShape, operTbId );
1389 createTool( GEOMOp::OpSharedShapes, operTbId );
1390 createTool( GEOMOp::OpTransferData, operTbId );
1392 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1393 createTool( GEOMOp::OpFillet1d, featTbId );
1394 createTool( GEOMOp::OpFillet2d, featTbId );
1395 createTool( GEOMOp::OpFillet3d, featTbId );
1396 createTool( GEOMOp::OpChamfer, featTbId );
1397 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1398 createTool( GEOMOp::OpExtrudedCut, featTbId );
1400 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1401 createTool( GEOMOp::OpEdge, buildTbId );
1402 createTool( GEOMOp::OpWire, buildTbId );
1403 createTool( GEOMOp::OpFace, buildTbId );
1404 createTool( GEOMOp::OpShell, buildTbId );
1405 createTool( GEOMOp::OpSolid, buildTbId );
1406 createTool( GEOMOp::OpCompound, buildTbId );
1408 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1409 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1410 createTool( GEOMOp::OpProperties, measureTbId );
1411 createTool( GEOMOp::OpCenterMass, measureTbId );
1412 createTool( GEOMOp::OpInertia, measureTbId );
1413 createTool( GEOMOp::OpNormale, measureTbId );
1414 createTool( separator(), measureTbId );
1415 createTool( GEOMOp::OpBoundingBox, measureTbId );
1416 createTool( GEOMOp::OpMinDistance, measureTbId );
1417 createTool( GEOMOp::OpAngle, measureTbId );
1418 createTool( GEOMOp::OpTolerance , measureTbId );
1419 createTool( separator(), measureTbId );
1420 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1421 createTool( GEOMOp::OpFreeFaces, measureTbId );
1422 createTool( separator(), measureTbId );
1423 createTool( GEOMOp::OpWhatIs, measureTbId );
1424 createTool( GEOMOp::OpCheckShape, measureTbId );
1425 createTool( GEOMOp::OpCheckCompound, measureTbId );
1426 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1427 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1428 createTool( GEOMOp::OpFastCheckInters, measureTbId );
1430 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1431 createTool( GEOMOp::OpPictureImport, picturesTbId );
1433 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1436 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1437 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1438 //@@ 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 @@//
1440 // ---- create popup menus --------------------------
1442 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1443 QString clientOCC = "(client='OCCViewer')";
1444 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1445 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1447 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1448 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1449 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1450 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1452 QString autoColorPrefix =
1453 "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') and type='Shape' and selcount=1";
1455 QtxPopupMgr* mgr = popupMgr();
1457 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1458 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1459 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1460 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1461 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1462 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1463 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1464 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1466 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1467 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1468 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1469 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1470 mgr->insert( separator(), -1, -1 ); // -----------
1472 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1473 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1474 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1475 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1476 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1477 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1478 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1479 mgr->insert( separator(), -1, -1 ); // -----------
1480 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1481 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1482 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1483 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1484 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1485 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1486 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1487 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1488 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1489 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1490 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1491 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1492 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1493 mgr->insert( separator(), dispmodeId, -1 );
1494 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1495 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1496 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1497 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1498 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1499 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1500 mgr->insert( separator(), -1, -1 ); // -----------
1502 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1503 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1504 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1505 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1506 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1507 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1508 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1509 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1510 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1511 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1513 // material properties
1514 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1515 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1518 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1519 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1521 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1522 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1523 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1525 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1526 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1528 mgr->insert( separator(), -1, -1 ); // -----------
1529 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1530 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1531 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1532 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1533 mgr->insert( separator(), -1, -1 ); // -----------
1535 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1536 onlyComponent = "((type='Component') and selcount=1)",
1537 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1538 types = "'Shape' 'Group' 'FieldStep'";
1540 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1541 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1543 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1544 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1546 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1547 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1549 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1551 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1552 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1553 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1554 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1555 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1556 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1557 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1558 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1559 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1560 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1561 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1562 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1563 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1564 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1565 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1566 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1567 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1568 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1569 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1570 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1571 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1572 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1573 mgr->insert( separator(), selectonlyId, -1);
1574 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1575 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1576 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1577 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1578 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1579 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1580 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1582 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1584 mgr->insert( separator(), -1, -1 ); // -----------
1585 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1586 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1587 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1588 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1590 mgr->insert( separator(), -1, -1 ); // -----------
1591 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1592 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1594 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1595 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1597 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1598 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1600 mgr->insert( separator(), -1, -1 ); // -----------
1601 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1602 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1604 mgr->insert( separator(), -1, -1 ); // -----------
1605 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1606 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1608 mgr->insert( separator(), -1, -1 ); // -----------
1609 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1610 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1612 mgr->insert( separator(), -1, -1 ); // -----------
1613 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1614 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1616 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1618 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1620 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1621 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1622 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1625 // create plugin actions and menus
1629 //=======================================================================
1630 // function : GeometryGUI::addPluginActions()
1632 //=======================================================================
1633 void GeometryGUI::addPluginActions()
1636 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1637 if (!resMgr) return;
1639 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1640 if (!appStudy) return;
1642 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1644 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1646 int id = GEOMOp::OpLastOperationID; // TODO?
1649 GEOMUtils::PluginInfo::const_iterator it;
1650 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1651 // bind action lib and label to its ID for activateOperation() method proper work
1652 GEOMUtils::PluginData pdata = (*it);
1653 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1654 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1655 std::list<GEOMUtils::ActionData>::const_iterator ait;
1656 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1657 GEOMUtils::ActionData adata = (*ait);
1660 if ( !adata.icon.empty() )
1661 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1663 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1664 QString actionName = smenus.last();
1665 actionName = actionName.toUpper().prepend( "MEN_" );
1666 smenus.removeLast();
1668 // path to action in toolbar
1669 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1670 QString actionTool = stools.last();
1671 actionTool = actionTool.toUpper().prepend( "TOP_" );
1672 stools.removeLast();
1674 QString actionStat = adata.statusText.c_str();
1675 actionStat = actionStat.toUpper().prepend( "STB_" );
1677 createAction( id, // ~ adata.label
1678 tr( actionTool.toLatin1().constData() ),
1680 tr( actionName.toLatin1().constData() ),
1681 tr( actionStat.toLatin1().constData() ),
1682 QKeySequence( tr( adata.accel.c_str() ) ),
1683 application()->desktop(),
1685 this, SLOT( OnGUIEvent() ),
1686 QString() /*shortcutAction*/ );
1689 foreach ( QString subMenu, smenus ) {
1690 QStringList subMenuList = subMenu.split( ":" );
1691 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1692 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1693 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1695 createMenu( id, menuId, -1 );
1697 if ( !stools.isEmpty() ) {
1698 QString subTool = stools[0];
1699 subTool = subTool.toUpper().prepend( "TOOL_" );
1700 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1701 createTool(id, toolId);
1704 // add action id to map
1705 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1706 myPluginActions[id] = anAction;
1713 //=======================================================================
1714 // function : GeometryGUI::activateModule()
1715 // purpose : Called when GEOM module is activated
1716 //=======================================================================
1717 bool GeometryGUI::activateModule( SUIT_Study* study )
1719 if ( CORBA::is_nil( myComponentGeom ) )
1722 bool res = SalomeApp_Module::activateModule( study );
1726 setMenuShown( true );
1727 setToolShown( true );
1729 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1730 PyGILState_STATE gstate = PyGILState_Ensure();
1731 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1732 if ( !pluginsmanager ) {
1736 PyObjWrapper result =
1737 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1738 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1739 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1743 PyGILState_Release(gstate);
1744 // end of GEOM plugins loading
1746 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1747 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1749 // Reset actions accelerator keys
1750 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1752 GUIMap::Iterator it;
1753 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1754 it.value()->activate( application()->desktop() );
1756 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1758 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1759 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1760 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1762 if ( !myCreationInfoWdg )
1763 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1764 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1765 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1768 SALOME_ListIO selected;
1769 sm->selectedObjects( selected );
1770 sm->clearSelected();
1772 SUIT_ViewManager* vm;
1773 ViewManagerList OCCViewManagers, VTKViewManagers;
1775 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1776 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1777 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1778 onViewManagerAdded(vm);
1780 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1781 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1782 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1783 onViewManagerAdded(vm);
1785 sm->setSelectedObjects( selected, true ); //NPAL 19674
1787 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1789 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1791 // 0020836 (Basic vectors and origin)
1792 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1793 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1794 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1796 _PTR(Study) studyDS = appStudy->studyDS();
1798 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1799 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1800 createOriginAndBaseVectors();
1808 //=======================================================================
1809 // function : GeometryGUI::deactivateModule()
1810 // purpose : Called when GEOM module is deactivated
1811 //=======================================================================
1812 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1814 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1816 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1818 setMenuShown( false );
1819 setToolShown( false );
1821 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1822 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1824 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1826 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1827 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1828 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1829 myCreationInfoWdg = 0;
1831 EmitSignalCloseAllDialogs();
1833 GUIMap::Iterator it;
1834 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1835 it.value()->deactivate();
1837 // Unset actions accelerator keys
1838 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1840 qDeleteAll(myOCCSelectors);
1841 myOCCSelectors.clear();
1842 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1844 qDeleteAll(myVTKSelectors);
1845 myVTKSelectors.clear();
1846 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1848 return SalomeApp_Module::deactivateModule( study );
1851 //=======================================================================
1852 // function : onWindowActivated()
1853 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1854 //=======================================================================
1855 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1860 const bool ViewOCC = ( win->getViewManager() ? win->getViewManager()->getType() == OCCViewer_Viewer::Type() : false );
1861 //const bool ViewVTK = ( win->getViewManager() ? win->getViewManager()->getType() == SVTK_Viewer::Type() : false );
1863 // disable non-OCC viewframe menu commands
1864 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1865 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1866 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1867 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1868 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1869 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1870 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1872 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1873 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1874 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1875 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1877 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1880 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1882 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1883 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
1884 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1885 if ( myCreationInfoWdg )
1886 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1889 void GeometryGUI::viewManagers( QStringList& lst ) const
1891 lst.append( OCCViewer_Viewer::Type() );
1894 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1896 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1898 qDebug( "connect" );
1899 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1900 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1901 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1902 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1903 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1904 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1905 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1906 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1908 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1909 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1911 // disable OCC selectors
1912 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1913 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1914 while ( itOCCSel.hasNext() )
1915 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1916 sr->setEnabled(true);
1918 else if ( vm->getType() == SVTK_Viewer::Type() )
1920 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1921 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1923 // disable VTK selectors
1924 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1925 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1926 while ( itVTKSel.hasNext() )
1927 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1928 sr->setEnabled(true);
1932 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1934 SUIT_ViewModel* viewer = vm->getViewModel();
1935 if ( vm->getType() == OCCViewer_Viewer::Type() )
1937 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1938 while ( itOCCSel.hasNext() )
1939 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1940 if ( sr->viewer() == viewer )
1942 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1946 if ( vm->getType() == SVTK_Viewer::Type() )
1948 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1949 while ( itVTKSel.hasNext() )
1950 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1951 if ( sr->viewer() == viewer )
1953 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1959 //================================================================================
1961 * \brief Slot called when selection changed. Shows creation info of a selected object
1963 //================================================================================
1965 void GeometryGUI::updateCreationInfo()
1967 if ( myCreationInfoWdg )
1968 myCreationInfoWdg->clear();
1970 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
1971 // if ( !myCreationInfoWdg->isVisible() )
1974 // look for a sole selected GEOM_Object
1975 GEOM::GEOM_BaseObject_var geomObj;
1977 SALOME_ListIO selected;
1978 getApp()->selectionMgr()->selectedObjects( selected );
1980 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
1981 SALOME_ListIteratorOfListIO selIt( selected );
1982 for ( ; selIt.More(); selIt.Next() )
1984 Handle(SALOME_InteractiveObject) io = selIt.Value();
1985 if ( !io->hasEntry() ) continue;
1986 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
1987 if ( !sobj ) continue;
1988 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
1989 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
1990 if ( !gobj->_is_nil() )
1992 if ( !geomObj->_is_nil() )
1993 return; // several GEOM objects selected
1997 if ( geomObj->_is_nil() ) return;
1999 // pass creation info of geomObj to myCreationInfoWdg
2001 if ( myCreationInfoWdg ) {
2003 QString operationName;
2004 myCreationInfoWdg->setOperation( icon, operationName );
2008 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2010 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2011 QString name = info->operationName.in();
2012 if ( !name.isEmpty() ) {
2014 QString plugin_name;
2015 for ( size_t i = 0; i < info->params.length(); ++i ) {
2016 myCreationInfoWdg->addParam( info->params[i].name.in(),
2017 info->params[i].value.in() );
2018 QString value = info->params[i].name.in();
2019 if( value == PLUGIN_NAME ) {
2020 plugin_name = info->params[i].value.in();
2023 QString prefix = plugin_name.isEmpty() ? "GEOM" : plugin_name;
2024 icon = resMgr->loadPixmap( prefix, tr( ("ICO_"+name).toLatin1().constData() ), false );
2025 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2026 if ( operationName.startsWith( "MEN_" ))
2027 operationName = name; // no translation
2028 myCreationInfoWdg->setOperation( icon, operationName );
2037 void GeometryGUI::onAutoBringToFront()
2039 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2040 if( !isAutoBringToFront )
2043 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2044 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2047 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2048 if (!appStudy) return;
2050 GEOM_Displayer displayer( appStudy );
2052 SALOME_View* window = displayer.GetActiveView();
2053 if ( !window ) return;
2055 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2057 SALOME_ListIO selected;
2058 getApp()->selectionMgr()->selectedObjects( selected );
2059 if (!myTopLevelIOList.IsEmpty())
2061 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2063 Handle( SALOME_InteractiveObject ) io = It.Value();
2064 bool isSelected = false;
2065 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2067 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2068 if( io->isSame( sel_io ) )
2071 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2073 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2074 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2079 myTopLevelIOList.Assign(selected);
2080 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2082 Handle( SALOME_InteractiveObject ) io = It.Value();
2083 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2084 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2087 displayer.UpdateViewer();
2088 GeometryGUI::Modified();
2091 void GeometryGUI::updateFieldColorScale()
2093 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2095 GEOM_Displayer aDisplayer( aStudy );
2096 aDisplayer.UpdateColorScale();
2100 QString GeometryGUI::engineIOR() const
2102 if ( !CORBA::is_nil( GetGeomGen() ) )
2103 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2107 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2108 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2110 theWidth = theHeight = 0;
2112 Handle(TColStd_HArray1OfByte) aTexture;
2115 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2116 aTexture = aTextureMap[ theId ];
2117 if ( aTexture.IsNull() ) {
2118 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2119 if ( !aInsOp->_is_nil() ) {
2120 CORBA::Long aWidth, aHeight;
2121 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2122 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2124 theHeight = aHeight;
2126 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2128 for (int i = 0; i < aStream->length(); i++)
2129 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2130 aTextureMap[ theId ] = aTexture;
2138 LightApp_Selection* GeometryGUI::createSelection() const
2140 return new GEOMGUI_Selection();
2143 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2145 SalomeApp_Module::contextMenuPopup( client, menu, title );
2147 getApp()->selectionMgr()->selectedObjects( lst );
2149 //Add submenu for predefined materials
2150 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2151 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2152 QtxPopupMgr* mgr = popupMgr();
2153 //get parrent for submenu
2154 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2156 QMenu* oldMenu = act->menu() ;
2161 QMenu* matMenu = new QMenu();
2162 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2164 //Get current material model for the object
2166 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2167 if ( anApp && anApp->activeViewManager() ) {
2168 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2170 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2173 QString curModel = "";
2174 if ( v.canConvert<QString>() ) curModel = v.toString();
2175 // get list of all predefined materials
2176 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2178 foreach ( QString material, materials )
2180 QAction* menAct = matMenu->addAction( material );
2181 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2182 signalMapper->setMapping( menAct, material );
2183 menAct->setCheckable( true );
2184 // Set checked if this material is current
2185 Material_Model aModel;
2186 aModel.fromResources( material );
2187 if ( !found && aModel.toProperties() == curModel ) {
2188 menAct->setChecked( true );
2192 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2193 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2194 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2195 this, SLOT( OnSetMaterial( const QString & ) ) );
2196 act->setMenu( matMenu );
2200 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2201 Handle(SALOME_InteractiveObject) io = lst.First();
2202 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2203 _PTR(Study) study = appStudy->studyDS();
2204 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2206 QString aName = QString( obj->GetName().c_str() );
2207 aName.remove( QRegExp("\\s+$") );
2213 void GeometryGUI::OnSetMaterial(const QString& theName)
2215 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2219 void GeometryGUI::createPreferences()
2221 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2223 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2224 setPreferenceProperty( genGroup, "columns", 2 );
2226 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2227 LightApp_Preferences::Selector,
2228 "Geometry", "display_mode" );
2230 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2231 LightApp_Preferences::Color, "Geometry", "shading_color" );
2233 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2234 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2236 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2237 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2239 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2240 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2242 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2243 LightApp_Preferences::Color, "Geometry", "line_color" );
2245 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2246 LightApp_Preferences::Color, "Geometry", "point_color" );
2248 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2249 LightApp_Preferences::Color, "Geometry", "isos_color" );
2251 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2252 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2254 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2255 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2257 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2258 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2260 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2261 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2263 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2264 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2266 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2267 LightApp_Preferences::Selector,
2268 "Geometry", "material" );
2270 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2271 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2277 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2278 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2280 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2281 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2283 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2284 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2286 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2287 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2289 for (int i = 0; i < nb; i++) {
2290 setPreferenceProperty( wd[i], "min", 1 );
2291 setPreferenceProperty( wd[i], "max", 5 );
2294 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2295 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2297 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2298 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2300 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2301 setPreferenceProperty( aDimGroupId, "columns", 2 );
2303 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2304 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2306 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2307 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2309 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2310 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2312 int aDimFontHeightId = addPreference( tr( "PREF_DIMENSIONS_FONT_HEIGHT" ), aDimGroupId,
2313 LightApp_Preferences::DblSpin, "Geometry", "dimensions_font_height" );
2315 setPreferenceProperty( aDimFontHeightId, "min", 1e-9 );
2316 setPreferenceProperty( aDimFontHeightId, "max", 1e+9 );
2317 setPreferenceProperty( aDimFontHeightId, "precision", 9 );
2319 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2320 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2322 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2323 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2324 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2326 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2327 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2329 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2330 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2332 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2333 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2335 QStringList aListOfLengthUnits;
2336 aListOfLengthUnits << "m";
2337 aListOfLengthUnits << "cm";
2338 aListOfLengthUnits << "mm";
2339 aListOfLengthUnits << "in.";
2340 aListOfLengthUnits << "ft.";
2342 QStringList aListOfAngUnits;
2343 aListOfAngUnits << "rad";
2344 aListOfAngUnits << "deg";
2346 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2347 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2349 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2350 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2352 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2353 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2354 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2356 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2357 setPreferenceProperty( isoGroup, "columns", 2 );
2358 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2359 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2360 setPreferenceProperty( isoU, "min", 0 );
2361 setPreferenceProperty( isoU, "max", 100000 );
2362 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2363 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2364 setPreferenceProperty( isoV, "min", 0 );
2365 setPreferenceProperty( isoV, "max", 100000 );
2367 // Quantities with individual precision settings
2368 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2369 setPreferenceProperty( precGroup, "columns", 2 );
2371 const int nbQuantities = 8;
2372 int prec[nbQuantities], ii = 0;
2373 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2374 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2375 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2376 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2377 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2378 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2379 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2380 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2381 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2382 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2383 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2384 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2385 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2386 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2387 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2388 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2390 // Set property for precision value for spinboxes
2391 for ( ii = 0; ii < nbQuantities; ii++ ){
2392 setPreferenceProperty( prec[ii], "min", -14 );
2393 setPreferenceProperty( prec[ii], "max", 14 );
2394 setPreferenceProperty( prec[ii], "precision", 2 );
2397 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2398 setPreferenceProperty( VertexGroup, "columns", 2 );
2400 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2401 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2403 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2404 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2406 // Set property for default display mode
2407 QStringList aModesList;
2408 aModesList.append( tr("MEN_WIREFRAME") );
2409 aModesList.append( tr("MEN_SHADING") );
2410 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2411 aModesList.append( tr("MEN_TEXTURE") );
2413 QList<QVariant> anIndexesList;
2414 anIndexesList.append(0);
2415 anIndexesList.append(1);
2416 anIndexesList.append(2);
2417 anIndexesList.append(3);
2419 setPreferenceProperty( dispmode, "strings", aModesList );
2420 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2422 // Set property for top level display mode
2423 QStringList aTopModesList;
2424 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2425 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2426 aTopModesList.append( tr("MEN_WIREFRAME") );
2427 aTopModesList.append( tr("MEN_SHADING") );
2428 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2430 QList<QVariant> aTopIndexesList;
2431 aTopIndexesList.append(0);
2432 aTopIndexesList.append(1);
2433 aTopIndexesList.append(2);
2434 aTopIndexesList.append(3);
2435 aTopIndexesList.append(4);
2437 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2438 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2440 // Set property for step value for spinboxes
2441 setPreferenceProperty( step, "min", 1 );
2442 setPreferenceProperty( step, "max", 10000 );
2443 setPreferenceProperty( step, "precision", 3 );
2445 // Set property for trandparency value for spinboxes
2446 setPreferenceProperty( transparency, "min", 0 );
2447 setPreferenceProperty( transparency, "max", 100 );
2449 // Set property for deflection value for spinboxes
2450 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2451 setPreferenceProperty( defl, "max", 1.0 );
2452 setPreferenceProperty( defl, "step", 1.0e-04 );
2453 setPreferenceProperty( defl, "precision", 6 );
2455 // Set property for default material
2456 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2458 // Set property vertex marker type
2459 QList<QVariant> aMarkerTypeIndicesList;
2460 QList<QVariant> aMarkerTypeIconsList;
2462 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2463 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2464 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2465 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2466 aMarkerTypeIndicesList << (i-1);
2467 aMarkerTypeIconsList << pixmap;
2470 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2471 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2473 // Set property for vertex marker scale
2474 QList<QVariant> aMarkerScaleIndicesList;
2475 QStringList aMarkerScaleValuesList;
2477 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2478 aMarkerScaleIndicesList << iii;
2479 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2482 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2483 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2485 // Scalar bar for field step presentation
2486 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2487 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2489 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2490 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2491 setPreferenceProperty( sbXPosition, "min", 0 );
2492 setPreferenceProperty( sbXPosition, "max", 1 );
2493 setPreferenceProperty( sbXPosition, "step", 0.05 );
2495 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2496 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2497 setPreferenceProperty( sbYPosition, "min", 0 );
2498 setPreferenceProperty( sbYPosition, "max", 1 );
2499 setPreferenceProperty( sbYPosition, "step", 0.05 );
2501 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2502 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2503 setPreferenceProperty( sbWidth, "min", 0 );
2504 setPreferenceProperty( sbWidth, "max", 1 );
2505 setPreferenceProperty( sbWidth, "step", 0.05 );
2507 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2508 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2509 setPreferenceProperty( sbHeight, "min", 0 );
2510 setPreferenceProperty( sbHeight, "max", 1 );
2511 setPreferenceProperty( sbHeight, "step", 0.05 );
2513 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2514 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2515 setPreferenceProperty( sbTextHeight, "min", 6 );
2516 setPreferenceProperty( sbTextHeight, "max", 24 );
2517 setPreferenceProperty( sbTextHeight, "step", 1 );
2519 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2520 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2521 setPreferenceProperty( sbNbIntervals, "min", 2 );
2522 setPreferenceProperty( sbNbIntervals, "max", 64 );
2523 setPreferenceProperty( sbNbIntervals, "step", 1 );
2525 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2526 setPreferenceProperty( originGroup, "columns", 2 );
2528 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2529 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2530 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2531 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2533 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2534 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2536 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2537 setPreferenceProperty( operationsGroup, "columns", 2 );
2539 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2540 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2542 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2544 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2546 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2547 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2549 QStringList aHierarchyTypeList;
2550 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2551 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2552 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2554 QList<QVariant> aHierarchyTypeIndexesList;
2555 aHierarchyTypeIndexesList.append(0);
2556 aHierarchyTypeIndexesList.append(1);
2557 aHierarchyTypeIndexesList.append(2);
2559 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2560 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2562 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2563 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2565 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2567 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2568 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2570 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2571 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2572 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2573 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2574 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2575 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2576 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2577 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2579 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2580 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2581 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2582 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2583 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2584 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2591 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2593 if (section == "Geometry") {
2594 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2595 if (param == QString("SettingsGeomStep")) {
2596 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2597 EmitSignalDefaultStepValueChanged(spin_step);
2599 else if (param == QString("toplevel_color")) {
2600 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2601 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2603 else if (param == QString("toplevel_dm")) {
2604 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2606 else if (param == QString("scalar_bar_x_position") ||
2607 param == QString("scalar_bar_y_position") ||
2608 param == QString("scalar_bar_width") ||
2609 param == QString("scalar_bar_height") ||
2610 param == QString("scalar_bar_text_height") ||
2611 param == QString("scalar_bar_nb_intervals")) {
2612 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2614 GEOM_Displayer aDisplayer( aStudy );
2615 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2616 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2619 else if ( param == QString("dimensions_color") ||
2620 param == QString("dimensions_line_width") ||
2621 param == QString("dimensions_font_height") ||
2622 param == QString("dimensions_arrow_length") ||
2623 param == QString("dimensions_show_units") ||
2624 param == QString("dimensions_length_units") ||
2625 param == QString("dimensions_angle_units") )
2627 SalomeApp_Application* anApp = getApp();
2633 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2639 GEOM_Displayer aDisplayer( aStudy );
2641 ViewManagerList aVMs;
2642 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2643 ViewManagerList::Iterator anIt = aVMs.begin();
2644 for ( ; anIt != aVMs.end(); ++anIt )
2646 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2652 SALOME_ListIO aVisible;
2653 aViewer->GetVisible( aVisible );
2654 aDisplayer.Redisplay( aVisible, false, aViewer );
2657 aDisplayer.UpdateViewer();
2659 else if ( param.startsWith( "dependency_tree") )
2660 emit SignalDependencyTreeParamChanged( section, param );
2664 LightApp_Displayer* GeometryGUI::displayer()
2667 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2671 void GeometryGUI::setLocalSelectionMode(const int mode)
2673 myLocalSelectionMode = mode;
2676 int GeometryGUI::getLocalSelectionMode() const
2678 return myLocalSelectionMode;
2681 const char gSeparator = '_'; // character used to separate parameter names
2682 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2685 * \brief Store visual parameters
2687 * This method is called just before the study document is saved.
2688 * Store visual parameters in AttributeParameter attribute(s)
2690 void GeometryGUI::storeVisualParameters (int savePoint)
2692 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2693 if ( !appStudy || !appStudy->studyDS() )
2695 _PTR(Study) studyDS = appStudy->studyDS();
2697 // componentName is used for encoding of entries when storing them in IParameters
2698 std::string componentName = myComponentGeom->ComponentDataType();
2699 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2700 //if (!aSComponent) return;
2703 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2704 componentName.c_str(),
2706 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2708 QSet<QString> anEntriesToStoreShared;
2709 QList<SUIT_ViewManager*> lst;
2710 QList<SUIT_ViewManager*>::Iterator it;
2712 // main cycle to store parameters of displayed objects
2714 getApp()->viewManagers(lst);
2715 for (it = lst.begin(); it != lst.end(); it++) {
2716 SUIT_ViewManager* vman = *it;
2717 QString vType = vman->getType();
2718 int aMgrId = vman->getGlobalId();
2719 // saving VTK actors properties
2720 QVector<SUIT_ViewWindow*> views = vman->getViews();
2721 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2722 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
2723 ObjMap::ConstIterator o_it = anObjects.begin();
2724 for (; o_it != anObjects.end(); o_it++) {
2725 const PropMap& aProps = o_it.value();
2727 //Check that object exists in the study
2728 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2729 if ( !obj || !(aProps.count() > 0))
2731 // entry is "encoded" = it does NOT contain component adress, since it is a
2732 // subject to change on next component loading
2734 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2736 _PTR(GenericAttribute) anAttr;
2737 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2740 // remember entry of object to store shared GEOM properties
2741 // (e.g. dimension properties).
2742 if ( vType == OCCViewer_Viewer::Type() )
2744 anEntriesToStoreShared.insert( o_it.key() );
2747 QString param, occParam = vType;
2748 occParam += GEOM::sectionSeparator();
2749 occParam += QString::number(aMgrId);
2750 occParam += GEOM::sectionSeparator();
2752 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2753 param = occParam + GEOM::propertyName( GEOM::Visibility );
2754 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2757 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2758 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2759 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2762 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2763 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2765 val << QString::number(c.redF());
2766 val << QString::number(c.greenF());
2767 val << QString::number(c.blueF());
2768 param = occParam + GEOM::propertyName( GEOM::Color );
2769 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2772 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2773 param = occParam + GEOM::propertyName( GEOM::Texture );
2774 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2777 if (vType == SVTK_Viewer::Type()) {
2778 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2779 param = occParam + GEOM::propertyName( GEOM::Opacity );
2780 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2782 } else if (vType == SOCC_Viewer::Type()) {
2783 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2784 param = occParam + GEOM::propertyName( GEOM::Transparency );
2785 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2788 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2789 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2790 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2794 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2795 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2796 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2799 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2800 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2801 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2804 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
2805 param = occParam + GEOM::propertyName( GEOM::Vertices );
2806 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
2809 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2810 param = occParam + GEOM::propertyName( GEOM::Deflection );
2811 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2814 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2815 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2816 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2817 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2820 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2821 param = occParam + GEOM::propertyName( GEOM::Material );
2822 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2825 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2826 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2827 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2830 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2831 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2832 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2834 } // object iterator
2836 } // for (viewManagers)
2838 // store dimension attributes of objects:
2839 // since the displayed object always persists in property map, we remember the object entries
2840 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
2841 QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
2842 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
2843 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
2845 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
2846 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName);
2848 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
2850 if ( aDimensions.GetNumber() == 0 )
2855 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
2860 * \brief Restore visual parameters
2862 * This method is called after the study document is opened.
2863 * Restore visual parameters from AttributeParameter attribute(s)
2865 void GeometryGUI::restoreVisualParameters (int savePoint)
2867 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2868 if (!appStudy || !appStudy->studyDS())
2870 _PTR(Study) studyDS = appStudy->studyDS();
2872 // componentName is used for encoding of entries when storing them in IParameters
2873 std::string componentName = myComponentGeom->ComponentDataType();
2874 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2875 //if (!aSComponent) return;
2878 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2879 componentName.c_str(),
2881 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2883 std::vector<std::string> entries = ip->getEntries();
2885 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2887 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2888 QString entry (ip->decodeEntry(*entIt).c_str());
2890 // Check that the entry corresponds to a real object in the Study
2891 // as the object may be deleted or modified after the visual state is saved.
2892 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2893 if (!so) continue; //Skip the not existent entry
2895 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2896 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2898 std::vector<std::string>::iterator namesIt = paramNames.begin();
2899 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2901 // actors are stored in a map after displaying of them for
2902 // quicker access in the future: map < viewID to actor >
2903 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2904 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2906 QString viewerTypStr;
2907 QString viewIndexStr;
2909 QVector<PropMap> aListOfMap;
2911 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2913 // visual parameters are stored in strings as follows:
2914 // 1) ViewerType_ViewIndex_ParamName
2915 // 2) ViewerType_ParamName (shared for GEOM module)
2916 // '_' is used as separator and should not be used in viewer type or parameter names.
2917 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2919 bool isShared = lst.size() == 2;
2920 bool isViewer = lst.size() == 3;
2921 if ( !isShared && !isViewer )
2926 // shared visual parameters
2929 QString aParamNameStr( lst[1] );
2930 QString aValuesStr( (*valuesIt).c_str() );
2932 // shared dimension properties are stored as attribute
2933 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
2935 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
2936 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
2942 // per view visual parameters
2943 viewerTypStr = lst[0];
2944 viewIndexStr = lst[1];
2945 QString paramNameStr = lst[2];
2948 viewIndex = viewIndexStr.toUInt(&ok);
2949 if (!ok) // bad conversion of view index to integer
2952 if ((viewIndex + 1) > aListOfMap.count()) {
2953 aListOfMap.resize(viewIndex + 1);
2956 QString val((*valuesIt).c_str());
2957 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
2958 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
2959 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
2960 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
2961 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
2962 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
2963 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
2964 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
2965 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
2966 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
2967 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
2968 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
2969 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
2970 QStringList rgb = val.split(GEOM::subSectionSeparator());
2971 if (rgb.count() == 3) {
2972 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
2973 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
2975 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
2976 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
2977 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
2978 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
2979 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
2980 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
2981 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
2982 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
2983 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
2984 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
2985 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
2986 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
2987 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
2988 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
2989 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
2990 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
2992 } // for names/parameters iterator
2994 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2996 for (int index = 0; index < aListOfMap.count(); index++) {
2997 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
2999 //Get Visibility property of the current PropMap
3000 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3001 SUIT_ViewManager* vman = lst.at(index);
3002 SUIT_ViewModel* vmodel = vman->getViewModel();
3003 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
3006 } // for entries iterator
3008 // update all VTK and OCC views
3009 QList<SUIT_ViewManager*> lst;
3010 getApp()->viewManagers(lst);
3011 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3012 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3015 if (vmodel->getType() == SVTK_Viewer::Type()) {
3016 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3017 vtkView->getRenderer()->ResetCameraClippingRange();
3020 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3021 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3022 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3029 void GeometryGUI::onViewAboutToShow()
3031 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3032 QAction* a = action( GEOMOp::OpSwitchVectors );
3033 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3035 a->setEnabled(true);
3036 bool vmode = window->property("VectorsMode").toBool();
3037 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3038 aVerticesAction->setEnabled(true);
3039 vmode = window->property("VerticesMode").toBool();
3040 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3042 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3043 a->setEnabled(false);
3044 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3045 aVerticesAction->setEnabled(false);
3050 \brief Return action by id
3051 \param id identifier of the action
3054 QAction* GeometryGUI::getAction(const int id) {
3059 \brief GEOM module message handler
3061 This method can be re-implemented in the subclasses.
3062 This is a GEOM module message handler.
3064 \param msg the message received.
3066 void GeometryGUI::message(const QString& msg)
3069 QStringList data = msg.split("/");
3070 const int nbStrings = data.count();
3072 if (nbStrings > 0) {
3073 if (data[0] == "modified") {
3075 QString anIOR = nbStrings > 1 ? data[1] : QString();
3077 if ( anIOR.isEmpty() ) {
3081 // Get the geom object.
3082 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3084 // Clear the shape buffer
3085 GeometryGUI::ClearShapeBuffer (anObj);
3091 \brief Clears the shape buffer.
3093 This is a static method. It clears the shape buffer.
3095 \param theObj the object
3097 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3099 if ( CORBA::is_nil( theObj ) )
3102 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3103 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3104 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3106 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3111 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3116 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3120 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3121 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3122 _PTR(GenericAttribute) anAttr;
3123 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3124 _PTR(AttributeIOR) anIOR ( anAttr );
3125 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3126 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3132 \brief Returns the object from IOR.
3134 This is a static method. It returns the object from its IOR.
3136 \param IOR object IOR
3137 \return GEOM object.
3139 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3141 GEOM::GEOM_Object_var geomObj;
3142 if ( !IOR.isEmpty() ) {
3143 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3144 ( IOR.toLatin1().constData() );
3145 if ( !CORBA::is_nil( corbaObj ) )
3146 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3148 return geomObj._retn();
3152 \brief Returns IOR of the object.
3154 This is a static method. It returns the object's IOR.
3156 \param object the GEOM object.
3157 \return object's IOR.
3159 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3162 if ( !CORBA::is_nil( object ) ) {
3163 CORBA::String_var anIOR =
3164 SalomeApp_Application::orb()->object_to_string( object );
3171 \brief Check if this object is can't be renamed in place
3173 This method can be re-implemented in the subclasses.
3174 Return true in case if object isn't reference or component (module root).
3176 \param entry column id
3177 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3179 bool GeometryGUI::renameAllowed( const QString& entry) const {
3181 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3182 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3183 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3185 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3189 Rename object by entry.
3190 \param entry entry of the object
3191 \param name new name of the object
3192 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3194 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3196 bool result = false;
3198 SalomeApp_Application* app =
3199 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3200 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3205 _PTR(Study) aStudy = appStudy->studyDS();
3210 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3212 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3216 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3217 _PTR(GenericAttribute) anAttr;
3219 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3220 _PTR(AttributeName) aName (anAttr);
3222 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3223 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3224 if (!CORBA::is_nil(anObj)) {
3225 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3226 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3234 void GeometryGUI::updateMaterials()
3236 LightApp_Preferences* pref = preferences();
3238 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3239 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3240 if ( !materials.contains( currentMaterial ) )
3241 // user material set as default in the preferences, might be removed
3242 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3244 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3246 setPreferenceProperty( prefItem->id(),
3247 "strings", materials );
3248 prefItem->retrieve();
3254 \brief Check if the module allows "drag" operation of its objects.
3256 Overloaded from LightApp_Module class.
3258 This function is a part of the general drag-n-drop mechanism.
3259 The goal of this function is to check data object passed as a parameter
3260 and decide if it can be dragged or no.
3262 \param what data object being tested for drag operation
3263 \return \c true if module allows dragging of the specified object
3264 \sa isDropAccepted(), dropObjects()
3266 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3268 // we allow dragging object under root and object from folder
3269 int aLevel = what->level();
3270 bool anObjectInFolder = false;
3272 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3274 _PTR(SObject) aSO = dataObj->object();
3276 _PTR(GenericAttribute) anAttr;
3277 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3278 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3279 _PTR(AttributeLocalID) aLocalID( anAttr );
3280 anObjectInFolder = aLocalID->Value() == 999;
3285 return aLevel == 2 || anObjectInFolder;
3289 \brief Check if the module allows "drop" operation on the given object.
3291 Overloaded from LightApp_Module class.
3293 This function is a part of the general drag-n-drop mechanism.
3294 The goal of this function is to check data object passed as a parameter
3295 and decide if it can be used as a target for the "drop" operation.
3296 The processing of the drop operation itself is done in the dropObjects() function.
3298 \param where target data object
3299 \return \c true if module supports dropping on the \a where data object
3300 \sa isDraggable(), dropObjects()
3302 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3304 // we allow dropping into folder and top-level GEOM object
3305 int aLevel = where->level();
3306 bool isFolder = false;
3308 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3310 _PTR(SObject) aSO = dataObj->object();
3312 _PTR(GenericAttribute) anAttr;
3313 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3314 _PTR(AttributeLocalID) aLocalID( anAttr );
3315 isFolder = aLocalID->Value() == 999;
3320 return aLevel == 1 || isFolder;
3324 \brief Complete drag-n-drop operation.
3326 Overloaded from LightApp_Module class.
3328 This function is a part of the general drag-n-drop mechanism.
3329 Its goal is to handle dropping of the objects being dragged according
3330 to the chosen operation (move). The dropping is performed in the
3331 context of the parent data object \a where and the \a row (position in the
3332 children index) at which the data should be dropped. If \a row is equal to -1,
3333 this means that objects are added to the end of the children list.
3335 \param what objects being dropped
3336 \param where target data object
3337 \param row child index at which the drop operation is performed
3338 \param action drag-n-drop operation (Qt::DropAction) - move
3340 \sa isDraggable(), isDropAccepted()
3342 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3343 const int row, Qt::DropAction action )
3345 if (action != Qt::CopyAction && action != Qt::MoveAction)
3346 return; // unsupported action
3348 // get parent object
3349 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3350 if ( !dataObj ) return; // wrong parent
3351 _PTR(SObject) parentObj = dataObj->object();
3353 // Find the current Study and StudyBuilder
3354 _PTR(Study) aStudy = parentObj->GetStudy();
3355 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3356 // collect all parents of the target node
3357 QStringList parentIDs;
3358 _PTR(SObject) parent = parentObj;
3359 while( !parent->IsNull() ) {
3360 parentIDs << parent->GetID().c_str();
3361 parent = aUseCaseBuilder->GetFather(parent);
3364 // collect objects being dropped
3365 GEOM::object_list_var objects = new GEOM::object_list();
3366 objects->length( what.count() );
3368 for ( int i = 0; i < what.count(); i++ ) {
3369 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3370 if ( !dataObj ) continue; // skip wrong objects
3371 _PTR(SObject) sobj = dataObj->object();
3372 // check that dropped object is not a parent of target object
3373 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3374 return; // it's not allowed to move node into it's child
3376 objects[i] = _CAST(SObject, sobj)->GetSObject();
3379 objects->length( count );
3381 // call engine function
3382 GetGeomGen()->Move( objects.in(), // what
3383 _CAST(SObject, parentObj)->GetSObject(), // where
3386 // update Object browser
3387 getApp()->updateObjectBrowser( false );