1 // Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : GeometryGUI.cxx
23 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
25 #include <Standard_math.hxx> // E.A. must be included before Python.h to fix compilation on windows
27 #undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
30 #include "GeometryGUI.h"
31 #include "GeometryGUI_Operations.h"
32 #include "GEOMPluginGUI.h"
33 #include "GEOMGUI_OCCSelector.h"
34 #include "GEOMGUI_Selection.h"
35 #include "GEOMGUI_CreationInfoWdg.h"
36 #include "GEOMGUI_DimensionProperty.h"
37 #include "GEOM_Constants.h"
38 #include "GEOM_Displayer.h"
39 #include "GEOM_AISShape.hxx"
40 #include "GEOMUtils_XmlHandler.hxx"
42 #include "GEOM_Actor.h"
44 #include <Material_ResourceMgr.h>
45 #include <Material_Model.h>
47 #include <SUIT_Desktop.h>
48 #include <SUIT_MessageBox.h>
49 #include <SUIT_ResourceMgr.h>
50 #include <SUIT_Session.h>
51 #include <SUIT_ViewManager.h>
53 #include <PyInterp_Interp.h>
55 #include <OCCViewer_ViewWindow.h>
56 #include <OCCViewer_ViewPort3d.h>
57 #include <OCCViewer_ViewModel.h>
58 #include <OCCViewer_ViewManager.h>
60 #include <SOCC_ViewModel.h>
61 #include <SOCC_ViewWindow.h>
63 #include <SVTK_ViewWindow.h>
64 #include <SVTK_RenderWindowInteractor.h>
65 #include <SVTK_InteractorStyle.h>
66 #include <SVTK_ViewModel.h>
68 #include <GraphicsView_Viewer.h>
70 #include <SalomeApp_Application.h>
71 #include <SalomeApp_DataObject.h>
72 #include <SalomeApp_Study.h>
73 #include <SalomeApp_Tools.h>
75 #include <LightApp_SelectionMgr.h>
76 #include <LightApp_VTKSelector.h>
77 #include <LightApp_DataObject.h>
78 #include <LightApp_Preferences.h>
80 #include <SALOME_LifeCycleCORBA.hxx>
81 #include <SALOME_ListIO.hxx>
83 #include <SALOMEDSClient_ClientFactory.hxx>
84 #include <SALOMEDSClient_IParameters.hxx>
86 #include <SALOMEDS_SObject.hxx>
88 #include <Basics_OCCTVersion.hxx>
99 #include <QSignalMapper>
101 #include <AIS_ListOfInteractive.hxx>
102 #include <AIS_ListIteratorOfListOfInteractive.hxx>
103 #include <Prs3d_Drawer.hxx>
104 #include <Prs3d_IsoAspect.hxx>
105 #include <Aspect_TypeOfMarker.hxx>
106 #include <OSD_SharedLibrary.hxx>
107 #include <NCollection_DataMap.hxx>
109 #include <TColStd_HArray1OfByte.hxx>
111 #include <utilities.h>
113 #include <vtkCamera.h>
114 #include <vtkRenderer.h>
116 #include <Standard_Failure.hxx>
117 #include <Standard_ErrorHandler.hxx>
119 #include "GEOM_version.h"
120 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
123 Standard_EXPORT CAM_Module* createModule() {
124 return new GeometryGUI();
127 Standard_EXPORT char* getModuleVersion() {
128 return (char*)GEOM_VERSION_STR;
132 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
134 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
136 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
138 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
139 if (CORBA::is_nil(myComponentGeom))
141 return GeometryGUI::myComponentGeom;
144 bool GeometryGUI::InitGeomGen()
147 if ( CORBA::is_nil( myComponentGeom ) ) return false;
151 //=======================================================================
152 // function : ClientSObjectToObject
154 //=======================================================================
155 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
157 _PTR(GenericAttribute) anAttr;
158 CORBA::Object_var anObj;
160 std::string aValue = theSObject->GetIOR();
161 if (strcmp(aValue.c_str(), "") != 0) {
162 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
163 anObj = anORB->string_to_object(aValue.c_str());
166 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
168 return anObj._retn();
171 //=======================================================================
172 // function : ClientStudyToStudy
174 //=======================================================================
175 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
177 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
178 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
179 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
180 int aStudyID = theStudy->StudyId();
181 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
182 return aDSStudy._retn();
185 void GeometryGUI::Modified (bool theIsUpdateActions)
187 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
188 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
189 appStudy->Modified();
190 if ( theIsUpdateActions )
191 app->updateActions();
196 //=======================================================================
197 // function : GeometryGUI::GeometryGUI()
198 // purpose : Constructor
199 //=======================================================================
200 GeometryGUI::GeometryGUI() :
201 SalomeApp_Module( "GEOM" ),
204 if ( CORBA::is_nil( myComponentGeom ) )
206 Engines::EngineComponent_var comp =
207 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
208 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
211 myActiveDialogBox = 0;
213 gp_Pnt origin = gp_Pnt(0., 0., 0.);
214 gp_Dir direction = gp_Dir(0., 0., 1.);
215 myWorkingPlane = gp_Ax3(origin, direction);
218 myLocalSelectionMode = GEOM_ALLOBJECTS;
220 myCreationInfoWdg = 0;
222 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
224 Q_INIT_RESOURCE( GEOMGUI );
227 //=======================================================================
228 // function : GeometryGUI::~GeometryGUI()
229 // purpose : Destructor
230 //=======================================================================
231 GeometryGUI::~GeometryGUI()
233 while (!myOCCSelectors.isEmpty())
234 delete myOCCSelectors.takeFirst();
236 while (!myVTKSelectors.isEmpty())
237 delete myVTKSelectors.takeFirst();
239 qDeleteAll(myGUIMap);
242 //=======================================================================
243 // function : GeometryGUI::getLibrary()
244 // purpose : get or load GUI library by name [ internal ]
245 //=======================================================================
246 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
247 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
249 if ( !myGUIMap.contains( libraryName ) ) {
250 // try to load library if it is not loaded yet
252 QString dirs = getenv( "LD_LIBRARY_PATH" );
255 QString dirs = getenv( "PATH" );
258 if ( !dirs.isEmpty() ) {
259 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
260 QListIterator<QString> it( dirList ); it.toBack();
261 while ( it.hasPrevious() ) {
262 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
264 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
265 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
267 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
268 continue; // continue search further
270 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
271 if ( osdF != NULL ) {
272 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
273 GEOMGUI* libGUI = (*func)( this );
275 myGUIMap[ libraryName ] = libGUI;
276 break; // found and loaded!
283 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
286 //=======================================================================
287 // function : GeometryGUI::getPluginLibrary()
288 // purpose : get or load GUI Plugin library by name [ internal ]
289 //=======================================================================
290 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
291 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
293 if ( !myGUIMap.contains( libraryName ) ) {
294 // try to load library if it is not loaded yet
296 QString dirs = getenv( "LD_LIBRARY_PATH" );
299 QString dirs = getenv( "PATH" );
302 if ( !dirs.isEmpty() ) {
303 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
304 QListIterator<QString> it( dirList ); it.toBack();
305 while ( it.hasPrevious() ) {
306 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
308 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
309 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
311 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
312 continue; // continue search further
314 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
315 if ( osdF != NULL ) {
316 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
317 GEOMPluginGUI* libGUI = (*func)( this );
319 myGUIMap[ libraryName ] = libGUI;
320 break; // found and loaded!
327 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
330 //=======================================================================
331 // function : GeometryGUI::ActiveWorkingPlane()
332 // purpose : Activate Working Plane View
333 //=======================================================================
334 void GeometryGUI::ActiveWorkingPlane()
336 gp_Dir DZ = myWorkingPlane.Direction();
337 gp_Dir DY = myWorkingPlane.YDirection();
339 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
340 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
341 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
344 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
346 Handle(V3d_View) view3d = vw->getViewPort()->getView();
348 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
349 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
353 else if ( ViewVTK ) {
354 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
356 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
358 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
359 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
360 camera->SetFocalPoint(0,0,0);
367 //=======================================================================
368 // function : GeometryGUI::SetActiveDialogBox()
369 // purpose : Set active dialog box
370 //=======================================================================
371 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
373 myActiveDialogBox = (QDialog*)aDlg;
376 //=======================================================================
377 // function : GeometryGUI::EmitSignalDeactivateDialog()
378 // purpose : Emit a signal to deactivate the active dialog Box
379 //=======================================================================
380 void GeometryGUI::EmitSignalDeactivateDialog()
382 emit SignalDeactivateActiveDialog();
385 //=======================================================================
386 // function : GeometryGUI::EmitSignalCloseAllDialogs()
387 // purpose : Emit a signal to close all non modal dialogs box
388 //=======================================================================
389 void GeometryGUI::EmitSignalCloseAllDialogs()
391 emit SignalCloseAllDialogs();
394 //=======================================================================
395 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
396 // purpose : Emit a signal to inform that default real spin box step has
398 //=======================================================================
399 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
401 emit SignalDefaultStepValueChanged(newVal);
404 //=======================================================================
405 // function : GeometryGUI::OnGUIEvent()
406 // purpose : common slot for all menu/toolbar actions
407 //=======================================================================
408 void GeometryGUI::OnGUIEvent()
410 const QObject* obj = sender();
411 if ( !obj || !obj->inherits( "QAction" ) )
413 int id = actionId((QAction*)obj);
418 //=======================================================================
419 // function : GeometryGUI::OnGUIEvent()
420 // purpose : manage all events on GUI [static]
421 //=======================================================================
422 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
424 SUIT_Application* anApp = application();
426 SUIT_Desktop* desk = anApp->desktop();
428 // check type of the active viewframe
429 SUIT_ViewWindow* window = desk->activeWindow();
430 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
431 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
432 bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() );
433 // if current viewframe is not of OCC and not of VTK type - return immediately
434 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
435 QList<int> NotViewerDependentCommands;
436 NotViewerDependentCommands << GEOMOp::OpDelete
438 << GEOMOp::OpShowOnly
439 << GEOMOp::OpShowOnlyChildren
440 << GEOMOp::OpDiscloseChildren
441 << GEOMOp::OpConcealChildren
442 << GEOMOp::OpUnpublishObject
443 << GEOMOp::OpPublishObject
444 << GEOMOp::OpPointMarker
445 << GEOMOp::OpCreateFolder
446 << GEOMOp::OpSortChildren;
447 if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) {
448 // activate OCC viewer
449 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
452 // fix for IPAL9103, point 2
453 if ( CORBA::is_nil( GetGeomGen() ) ) {
454 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
459 // find corresponding GUI library
461 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
462 createOriginAndBaseVectors(); // internal operation
464 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
465 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
466 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
467 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
468 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
469 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
470 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
471 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
472 case GEOMOp::OpDelete: // MENU EDIT - DELETE
473 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
474 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
475 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
476 case GEOMOp::OpColor: // POPUP MENU - COLOR
477 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
478 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
479 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
480 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
481 case GEOMOp::OpIsos: // POPUP MENU - ISOS
482 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
483 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
484 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
485 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
486 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
487 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
488 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
489 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
490 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
491 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
492 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
493 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
494 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
495 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
496 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
497 case GEOMOp::OpClsBringToFront: //
498 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
499 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
500 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
501 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
502 libName = "GEOMToolsGUI";
504 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
505 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
506 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
507 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
508 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
509 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
510 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
511 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
512 case GEOMOp::OpHide: // MENU VIEW - ERASE
513 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
514 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
515 case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE
516 case GEOMOp::OpSwitchName: // MENU VIEW - VERTICES MODE
517 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
518 case GEOMOp::OpShading: // POPUP MENU - SHADING
519 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
520 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
521 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
522 case GEOMOp::OpVertices: // POPUP MENU - VERTICES
523 case GEOMOp::OpShowName: // POPUP MENU - SHOW NAME
524 libName = "DisplayGUI";
526 case GEOMOp::OpPoint: // MENU BASIC - POINT
527 case GEOMOp::OpLine: // MENU BASIC - LINE
528 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
529 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
530 case GEOMOp::OpArc: // MENU BASIC - ARC
531 case GEOMOp::OpVector: // MENU BASIC - VECTOR
532 case GEOMOp::OpPlane: // MENU BASIC - PLANE
533 case GEOMOp::OpCurve: // MENU BASIC - CURVE
534 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
535 libName = "BasicGUI";
537 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
538 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
539 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
540 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
541 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
542 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
543 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
544 libName = "PrimitiveGUI";
546 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
547 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
548 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
549 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
550 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
551 case GEOMOp::OpThickness: // MENU GENERATION - THICKNESS
552 libName = "GenerationGUI";
554 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
555 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
556 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
557 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
558 case GEOMOp::OpSurfaceFromFace: // MENU ENTITY - SURFACE FROM FACE
560 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
562 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
563 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
564 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
565 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
566 case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR
567 libName = "EntityGUI";
569 case GEOMOp::OpEdge: // MENU BUILD - EDGE
570 case GEOMOp::OpWire: // MENU BUILD - WIRE
571 case GEOMOp::OpFace: // MENU BUILD - FACE
572 case GEOMOp::OpShell: // MENU BUILD - SHELL
573 case GEOMOp::OpSolid: // MENU BUILD - SOLID
574 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
575 libName = "BuildGUI";
577 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
578 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
579 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
580 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
581 libName = "BooleanGUI";
583 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
584 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
585 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
586 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
587 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
588 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
589 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
590 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
591 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
592 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
593 case GEOMOp::OpExtension: // MENU TRANSFORMATION - EXTENSION
594 libName = "TransformationGUI";
596 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
597 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
598 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
599 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
600 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
601 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
602 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
603 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
604 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
605 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
606 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
607 case GEOMOp::OpTransferData: // MENU OPERATION - TRANSFER DATA
608 libName = "OperationGUI";
610 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
611 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
612 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
613 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
614 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
615 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
616 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
617 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
618 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
619 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
620 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
621 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
622 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
623 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
624 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
625 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
626 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
627 case GEOMOp::OpInspectObj: // MENU REPAIR - INSPECT OBJECT
628 libName = "RepairGUI";
630 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
631 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
632 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
633 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
634 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
635 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
636 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
637 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
638 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
639 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
640 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
641 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
642 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
643 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
644 case GEOMOp::OpFastCheckInters: // MENU MEASURE - FAST CHECK INTERSECTIONS
645 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
646 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
647 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
648 libName = "MeasureGUI";
650 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
651 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
652 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
653 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
654 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
655 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
656 libName = "GroupGUI";
658 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
659 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
660 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
661 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
662 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
663 libName = "BlocksGUI";
665 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
666 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
667 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
668 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
669 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
670 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
671 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
672 //libName = "AdvancedGUI";
675 if (myPluginActions.contains(id)) {
676 libName = myPluginActions[id].first;
678 GEOMPluginGUI* library = 0;
679 if ( !libName.isEmpty() ) {
681 libName = QString( "lib" ) + libName + ".so";
683 libName = libName + ".dll";
685 library = getPluginLibrary( libName );
688 // call method of corresponding GUI library
690 //QString action ("%1");
691 //action = action.arg(id);
693 //if( !theParam.isValid() )
694 library->OnGUIEvent( myPluginActions[id].second, desk );
696 // library->OnGUIEvent( id, desk, theParam);
699 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
701 updateCreationInfo();
707 GEOMGUI* library = 0;
708 if ( !libName.isEmpty() ) {
710 libName = QString( "lib" ) + libName + ".so";
712 libName = libName + ".dll";
714 library = getLibrary( libName );
717 // call method of corresponding GUI library
719 if( !theParam.isValid() )
720 library->OnGUIEvent( id, desk );
722 library->OnGUIEvent( id, desk, theParam);
725 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
727 updateCreationInfo();
730 //=================================================================================
731 // function : GeometryGUI::activateOperation()
733 //=================================================================================
734 bool GeometryGUI::activateOperation( int actionId )
736 OnGUIEvent(actionId);
740 //=================================================================================
741 // function : GeometryGUI::activateOperation()
743 //=================================================================================
744 bool GeometryGUI::activateOperation( const QString& actionId )
748 int id = actionId.toInt(&isOk);
755 //=================================================================================
756 // function : GeometryGUI::activateOperation()
758 //=================================================================================
759 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
763 QString pluginLib = plugin;
764 // TODO: if <plugin> is a plugin name, find plugin library name
765 if (myPluginLibs.contains(plugin))
766 pluginLib = myPluginLibs[plugin];
768 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
769 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
770 const PluginAction& anAction = actionsIter.value();
771 if (anAction.first == pluginLib && anAction.second == actionId) {
772 // activate operation
773 OnGUIEvent(actionsIter.key());
781 //=================================================================================
782 // function : GeometryGUI::OnKeyPress()
783 // purpose : Called when any key is pressed by user [static]
784 //=================================================================================
785 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
787 if ( !application() )
789 foreach ( GEOMGUI* lib, myGUIMap )
790 lib->OnKeyPress( e, application()->desktop(), w );
793 //=================================================================================
794 // function : GeometryGUI::OnMouseMove()
795 // purpose : Manages mouse move events [static]
796 //=================================================================================
797 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
799 if ( !application() )
801 foreach ( GEOMGUI* lib, myGUIMap )
802 lib->OnMouseMove( e, application()->desktop(), w );
805 //=================================================================================
806 // function : GeometryGUI::OnMouseRelease()
807 // purpose : Manages mouse release events [static]
808 //=================================================================================
809 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
811 if ( !application() )
813 foreach ( GEOMGUI* lib, myGUIMap )
814 lib->OnMouseRelease( e, application()->desktop(), w );
817 //=================================================================================
818 // function : GeometryGUI::OnMousePress()
819 // purpose : Manage mouse press events [static]
820 //=================================================================================
821 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
823 if ( !application() )
825 foreach ( GEOMGUI* lib, myGUIMap )
826 lib->OnMousePress( e, application()->desktop(), w );
829 //=======================================================================
830 // function : createGeomAction
832 //=======================================================================
833 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
834 const int accel, const bool toggle, const QString& shortcutAction )
836 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
837 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
838 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
840 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
842 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
843 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
845 application()->desktop(),
847 this, SLOT( OnGUIEvent() ),
851 //=======================================================================
852 // function : createOriginAndBaseVectors
854 //=======================================================================
855 void GeometryGUI::createOriginAndBaseVectors()
857 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
858 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
860 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
864 _PTR(Study) studyDS = appStudy->studyDS();
865 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
866 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
867 if ( !aBasicOperations->_is_nil() ) {
868 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
869 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
870 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
871 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
872 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
873 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
875 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
876 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
877 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
878 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
879 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
881 getApp()->updateObjectBrowser( true );
887 //=======================================================================
888 // function : GeometryGUI::initialize()
889 // purpose : Called when GEOM module is created
890 //=======================================================================
891 void GeometryGUI::initialize( CAM_Application* app )
893 SalomeApp_Module::initialize( app );
895 // ----- create actions --------------
897 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
899 createGeomAction( GEOMOp::OpPoint, "POINT" );
900 createGeomAction( GEOMOp::OpLine, "LINE" );
901 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
902 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
903 createGeomAction( GEOMOp::OpArc, "ARC" );
904 createGeomAction( GEOMOp::OpCurve, "CURVE" );
905 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
906 createGeomAction( GEOMOp::OpVector, "VECTOR" );
907 createGeomAction( GEOMOp::OpPlane, "PLANE" );
908 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
909 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
910 createGeomAction( GEOMOp::OpSurfaceFromFace, "SURFACE_FROM_FACE" );
912 createGeomAction( GEOMOp::OpBox, "BOX" );
913 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
914 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
915 createGeomAction( GEOMOp::OpTorus, "TORUS" );
916 createGeomAction( GEOMOp::OpCone, "CONE" );
917 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
918 createGeomAction( GEOMOp::OpDisk, "DISK" );
920 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
921 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
922 createGeomAction( GEOMOp::OpFilling, "FILLING" );
923 createGeomAction( GEOMOp::OpPipe, "PIPE" );
924 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
925 createGeomAction( GEOMOp::OpThickness, "THICKNESS" );
927 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
928 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
929 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
930 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
931 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
933 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
934 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
936 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
938 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
939 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
941 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
942 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
943 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
945 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
947 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
948 createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" );
950 createGeomAction( GEOMOp::OpEdge, "EDGE" );
951 createGeomAction( GEOMOp::OpWire, "WIRE" );
952 createGeomAction( GEOMOp::OpFace, "FACE" );
953 createGeomAction( GEOMOp::OpShell, "SHELL" );
954 createGeomAction( GEOMOp::OpSolid, "SOLID" );
955 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
957 createGeomAction( GEOMOp::OpFuse, "FUSE" );
958 createGeomAction( GEOMOp::OpCommon, "COMMON" );
959 createGeomAction( GEOMOp::OpCut, "CUT" );
960 createGeomAction( GEOMOp::OpSection, "SECTION" );
962 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
963 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
964 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
965 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
966 createGeomAction( GEOMOp::OpScale, "SCALE" );
967 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
968 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
969 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
970 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
971 createGeomAction( GEOMOp::OpExtension, "EXTENSION" );
973 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
974 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
975 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
976 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
977 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
978 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
979 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
980 createGeomAction( GEOMOp::OpTransferData, "TRANSFER_DATA" );
981 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
982 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
983 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
984 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
986 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
987 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
988 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
990 createGeomAction( GEOMOp::OpSewing, "SEWING" );
991 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
992 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
993 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
994 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
995 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
996 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
997 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
998 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
999 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
1000 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
1001 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
1002 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1003 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1004 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1005 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1006 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1007 createGeomAction( GEOMOp::OpInspectObj, "INSPECT_OBJECT" );
1009 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1010 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1011 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1012 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1013 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1014 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1015 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1016 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1017 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1019 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1020 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1021 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1022 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1023 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1024 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1025 createGeomAction( GEOMOp::OpFastCheckInters, "FAST_CHECK_INTERSECTIONS" );
1027 #ifdef _DEBUG_ // PAL16821
1028 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1031 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1032 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1033 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1034 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1035 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1036 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1037 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1038 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1039 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1040 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1041 createGeomAction( GEOMOp::OpSwitchName, "NAME_MODE");
1042 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1043 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1044 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1045 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1046 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1047 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1048 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1049 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1050 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1051 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1052 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1053 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1054 createGeomAction( GEOMOp::OpHide, "ERASE" );
1056 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1057 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1058 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1059 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1060 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1061 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1062 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1063 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1064 createGeomAction( GEOMOp::OpShowName, "POP_SHOW_NAME", "", 0, true );
1065 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1066 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1067 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1068 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1069 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1070 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1071 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1072 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1073 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1074 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1075 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1076 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1077 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1078 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1079 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1080 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1081 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1082 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1083 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1084 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1085 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1086 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1088 // Create actions for increase/decrease transparency shortcuts
1089 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1090 "Geometry:Increase transparency");
1091 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1092 "Geometry:Decrease transparency");
1094 // Create actions for increase/decrease number of isolines
1095 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1096 "Geometry:Increase number of isolines");
1097 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1098 "Geometry:Decrease number of isolines");
1100 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1101 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1102 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1103 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1104 //@@ 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 @@//
1106 // ---- create menus --------------------------
1108 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1110 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1111 createMenu( GEOMOp::OpDelete, editId, -1 );
1113 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1115 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1116 createMenu( GEOMOp::OpPoint, basicId, -1 );
1117 createMenu( GEOMOp::OpLine, basicId, -1 );
1118 createMenu( GEOMOp::OpCircle, basicId, -1 );
1119 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1120 createMenu( GEOMOp::OpArc, basicId, -1 );
1121 createMenu( GEOMOp::OpCurve, basicId, -1 );
1122 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1123 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1124 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1125 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1126 createMenu( GEOMOp::OpSurfaceFromFace, basicId, -1 );
1127 createMenu( separator(), basicId, -1 );
1128 createMenu( GEOMOp::OpVector, basicId, -1 );
1129 createMenu( GEOMOp::OpPlane, basicId, -1 );
1130 createMenu( GEOMOp::OpLCS, basicId, -1 );
1131 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1133 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1134 createMenu( GEOMOp::OpBox, primId, -1 );
1135 createMenu( GEOMOp::OpCylinder, primId, -1 );
1136 createMenu( GEOMOp::OpSphere, primId, -1 );
1137 createMenu( GEOMOp::OpTorus, primId, -1 );
1138 createMenu( GEOMOp::OpCone, primId, -1 );
1139 createMenu( GEOMOp::OpRectangle, primId, -1 );
1140 createMenu( GEOMOp::OpDisk, primId, -1 );
1141 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1143 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1144 createMenu( GEOMOp::OpPrism, genId, -1 );
1145 createMenu( GEOMOp::OpRevolution, genId, -1 );
1146 createMenu( GEOMOp::OpFilling, genId, -1 );
1147 createMenu( GEOMOp::OpPipe, genId, -1 );
1148 createMenu( GEOMOp::OpPipePath, genId, -1 );
1149 createMenu( GEOMOp::OpThickness, genId, -1 );
1151 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1152 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1153 //@@ 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 @@//
1155 createMenu( separator(), newEntId, -1 );
1157 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1158 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1159 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1160 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1161 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1162 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1164 createMenu( separator(), newEntId, -1 );
1166 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1167 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1168 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1170 createMenu( separator(), newEntId, -1 );
1172 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1173 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1174 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1175 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1176 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1178 createMenu( separator(), newEntId, -1 );
1180 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1182 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1183 createMenu( GEOMOp::OpEdge, buildId, -1 );
1184 createMenu( GEOMOp::OpWire, buildId, -1 );
1185 createMenu( GEOMOp::OpFace, buildId, -1 );
1186 createMenu( GEOMOp::OpShell, buildId, -1 );
1187 createMenu( GEOMOp::OpSolid, buildId, -1 );
1188 createMenu( GEOMOp::OpCompound, buildId, -1 );
1190 createMenu( separator(), newEntId, -1 );
1192 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1194 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1197 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1199 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1200 createMenu( GEOMOp::OpFuse, boolId, -1 );
1201 createMenu( GEOMOp::OpCommon, boolId, -1 );
1202 createMenu( GEOMOp::OpCut, boolId, -1 );
1203 createMenu( GEOMOp::OpSection, boolId, -1 );
1205 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1206 createMenu( GEOMOp::OpTranslate, transId, -1 );
1207 createMenu( GEOMOp::OpRotate, transId, -1 );
1208 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1209 createMenu( GEOMOp::OpMirror, transId, -1 );
1210 createMenu( GEOMOp::OpScale, transId, -1 );
1211 createMenu( GEOMOp::OpOffset, transId, -1 );
1212 createMenu( GEOMOp::OpProjection, transId, -1 );
1213 createMenu( GEOMOp::OpExtension, transId, -1 );
1214 createMenu( separator(), transId, -1 );
1215 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1216 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1218 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1219 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1220 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1221 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1223 createMenu( separator(), operId, -1 );
1225 createMenu( GEOMOp::OpPartition, operId, -1 );
1226 createMenu( GEOMOp::OpArchimede, operId, -1 );
1227 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1228 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1229 createMenu( GEOMOp::OpTransferData, operId, -1 );
1231 createMenu( separator(), operId, -1 );
1233 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1234 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1235 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1236 createMenu( GEOMOp::OpChamfer, operId, -1 );
1237 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1238 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1239 //createMenu( GEOMOp::OpClipping, operId, -1 );
1241 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1242 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1243 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1244 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1245 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1246 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1247 createMenu( GEOMOp::OpSewing, repairId, -1 );
1248 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1249 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1250 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1251 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1252 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1253 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1254 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1255 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1256 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1257 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1258 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1260 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1261 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1262 createMenu( GEOMOp::OpProperties, measurId, -1 );
1263 createMenu( separator(), measurId, -1 );
1264 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1265 createMenu( GEOMOp::OpInertia, measurId, -1 );
1266 createMenu( GEOMOp::OpNormale, measurId, -1 );
1267 createMenu( separator(), measurId, -1 );
1268 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1269 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1270 createMenu( separator(), measurId, -1 );
1272 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1273 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1274 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1275 createMenu( GEOMOp::OpAngle, dimId, -1 );
1276 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1278 createMenu( separator(), measurId, -1 );
1279 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1280 createMenu( separator(), measurId, -1 );
1281 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1282 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1283 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1284 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1285 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1286 createMenu( GEOMOp::OpFastCheckInters, measurId, -1 );
1287 createMenu( GEOMOp::OpInspectObj, measurId, -1 );
1289 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1290 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1291 createMenu( separator(), toolsId, -1 );
1292 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1295 createMenu( separator(), toolsId, -1 );
1296 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1297 createMenu( separator(), toolsId, -1 );
1299 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1300 createMenu( separator(), viewId, -1 );
1302 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1303 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1304 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1305 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1306 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1307 createMenu( separator(), dispmodeId, -1 );
1308 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1309 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1310 createMenu( GEOMOp::OpSwitchName, dispmodeId, -1 );
1312 createMenu( separator(), viewId, -1 );
1313 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1314 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1315 createMenu( separator(), viewId, -1 );
1316 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1317 createMenu( separator(), viewId, -1 );
1321 because of these items are accessible through object browser and viewers
1322 we have removed they from main menu
1324 createMenu( GEOMOp::OpShow, viewId, -1 );
1325 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1326 createMenu( GEOMOp::OpHide, viewId, -1 );
1329 // ---- create toolbars --------------------------
1331 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1332 createTool( GEOMOp::OpPoint, basicTbId );
1333 createTool( GEOMOp::OpLine, basicTbId );
1334 createTool( GEOMOp::OpCircle, basicTbId );
1335 createTool( GEOMOp::OpEllipse, basicTbId );
1336 createTool( GEOMOp::OpArc, basicTbId );
1337 createTool( GEOMOp::OpCurve, basicTbId );
1338 createTool( GEOMOp::OpVector, basicTbId );
1339 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1340 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1341 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1342 createTool( GEOMOp::OpIsoline, basicTbId );
1343 createTool( GEOMOp::OpSurfaceFromFace, basicTbId );
1344 createTool( GEOMOp::OpPlane, basicTbId );
1345 createTool( GEOMOp::OpLCS, basicTbId );
1346 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1348 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1349 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1350 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1352 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1353 createTool( GEOMOp::OpBox, primTbId );
1354 createTool( GEOMOp::OpCylinder, primTbId );
1355 createTool( GEOMOp::OpSphere, primTbId );
1356 createTool( GEOMOp::OpTorus, primTbId );
1357 createTool( GEOMOp::OpCone, primTbId );
1358 createTool( GEOMOp::OpRectangle, primTbId );
1359 createTool( GEOMOp::OpDisk, primTbId );
1360 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1362 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1363 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1364 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1366 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1367 createTool( GEOMOp::OpFuse, boolTbId );
1368 createTool( GEOMOp::OpCommon, boolTbId );
1369 createTool( GEOMOp::OpCut, boolTbId );
1370 createTool( GEOMOp::OpSection, boolTbId );
1372 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1373 createTool( GEOMOp::OpPrism, genTbId );
1374 createTool( GEOMOp::OpRevolution, genTbId );
1375 createTool( GEOMOp::OpFilling, genTbId );
1376 createTool( GEOMOp::OpPipe, genTbId );
1377 createTool( GEOMOp::OpPipePath, genTbId );
1378 createTool( GEOMOp::OpThickness, genTbId );
1380 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1381 createTool( GEOMOp::OpTranslate, transTbId );
1382 createTool( GEOMOp::OpRotate, transTbId );
1383 createTool( GEOMOp::OpChangeLoc, transTbId );
1384 createTool( GEOMOp::OpMirror, transTbId );
1385 createTool( GEOMOp::OpScale, transTbId );
1386 createTool( GEOMOp::OpOffset, transTbId );
1387 createTool( GEOMOp::OpProjection, transTbId );
1388 createTool( GEOMOp::OpExtension, transTbId );
1389 createTool( separator(), transTbId );
1390 createTool( GEOMOp::OpMultiTranslate, transTbId );
1391 createTool( GEOMOp::OpMultiRotate, transTbId );
1393 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1394 createTool( GEOMOp::OpExplode, operTbId );
1395 createTool( GEOMOp::OpPartition, operTbId );
1396 createTool( GEOMOp::OpArchimede, operTbId );
1397 createTool( GEOMOp::OpShapesOnShape, operTbId );
1398 createTool( GEOMOp::OpSharedShapes, operTbId );
1399 createTool( GEOMOp::OpTransferData, operTbId );
1401 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1402 createTool( GEOMOp::OpFillet1d, featTbId );
1403 createTool( GEOMOp::OpFillet2d, featTbId );
1404 createTool( GEOMOp::OpFillet3d, featTbId );
1405 createTool( GEOMOp::OpChamfer, featTbId );
1406 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1407 createTool( GEOMOp::OpExtrudedCut, featTbId );
1409 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1410 createTool( GEOMOp::OpEdge, buildTbId );
1411 createTool( GEOMOp::OpWire, buildTbId );
1412 createTool( GEOMOp::OpFace, buildTbId );
1413 createTool( GEOMOp::OpShell, buildTbId );
1414 createTool( GEOMOp::OpSolid, buildTbId );
1415 createTool( GEOMOp::OpCompound, buildTbId );
1417 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1418 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1419 createTool( GEOMOp::OpProperties, measureTbId );
1420 createTool( GEOMOp::OpCenterMass, measureTbId );
1421 createTool( GEOMOp::OpInertia, measureTbId );
1422 createTool( GEOMOp::OpNormale, measureTbId );
1423 createTool( separator(), measureTbId );
1424 createTool( GEOMOp::OpBoundingBox, measureTbId );
1425 createTool( GEOMOp::OpMinDistance, measureTbId );
1426 createTool( GEOMOp::OpAngle, measureTbId );
1427 createTool( GEOMOp::OpTolerance , measureTbId );
1428 createTool( separator(), measureTbId );
1429 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1430 createTool( GEOMOp::OpFreeFaces, measureTbId );
1431 createTool( separator(), measureTbId );
1432 createTool( GEOMOp::OpWhatIs, measureTbId );
1433 createTool( GEOMOp::OpCheckShape, measureTbId );
1434 createTool( GEOMOp::OpCheckCompound, measureTbId );
1435 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1436 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1437 createTool( GEOMOp::OpFastCheckInters, measureTbId );
1439 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1440 createTool( GEOMOp::OpPictureImport, picturesTbId );
1442 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1445 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1446 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1447 //@@ 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 @@//
1449 // ---- create popup menus --------------------------
1451 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1452 QString clientOCC = "(client='OCCViewer')";
1453 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1454 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1456 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1457 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1458 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1459 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1461 QString autoColorPrefix =
1462 "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') and type='Shape' and selcount=1";
1464 QtxPopupMgr* mgr = popupMgr();
1466 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1467 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1468 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1469 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1470 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1471 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1472 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1473 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1475 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1476 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1477 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1478 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1479 mgr->insert( separator(), -1, -1 ); // -----------
1481 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1482 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1483 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1484 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1485 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1486 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1487 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1488 mgr->insert( separator(), -1, -1 ); // -----------
1489 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1490 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1491 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1492 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1493 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1494 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1495 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1496 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1497 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1498 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1499 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1500 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1501 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1502 mgr->insert( separator(), dispmodeId, -1 );
1503 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1504 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1505 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1506 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1507 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1508 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1509 mgr->insert( action( GEOMOp::OpShowName ), dispmodeId, -1 ); // show name
1510 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1511 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK + " and isNameMode", QtxPopupMgr::ToggleRule );
1512 mgr->insert( separator(), -1, -1 ); // -----------
1514 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1515 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1516 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1517 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1518 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1519 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1520 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1521 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1522 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1523 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1525 // material properties
1526 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1527 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1530 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1531 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1533 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1534 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1535 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1537 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1538 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1540 mgr->insert( separator(), -1, -1 ); // -----------
1541 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1542 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1543 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1544 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1545 mgr->insert( separator(), -1, -1 ); // -----------
1547 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1548 onlyComponent = "((type='Component') and selcount=1)",
1549 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1550 types = "'Shape' 'Group' 'FieldStep'";
1552 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1553 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1555 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1556 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1558 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1559 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1561 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1563 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1564 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1565 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1566 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1567 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1568 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1569 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1570 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1571 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1572 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1573 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1574 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1575 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1576 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1577 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1578 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1579 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1580 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1581 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1582 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1583 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1584 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1585 mgr->insert( separator(), selectonlyId, -1);
1586 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1587 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1588 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1589 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1590 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1591 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1592 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1594 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1596 mgr->insert( separator(), -1, -1 ); // -----------
1597 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1598 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1599 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1600 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1602 mgr->insert( separator(), -1, -1 ); // -----------
1603 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1604 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1606 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1607 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1609 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1610 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1612 mgr->insert( separator(), -1, -1 ); // -----------
1613 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1614 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1616 mgr->insert( separator(), -1, -1 ); // -----------
1617 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1618 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1620 mgr->insert( separator(), -1, -1 ); // -----------
1621 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1622 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1624 mgr->insert( separator(), -1, -1 ); // -----------
1625 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1626 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1628 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1630 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1632 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1633 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1634 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1637 // create plugin actions and menus
1641 //=======================================================================
1642 // function : GeometryGUI::addPluginActions()
1644 //=======================================================================
1645 void GeometryGUI::addPluginActions()
1648 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1649 if (!resMgr) return;
1651 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1652 if (!appStudy) return;
1654 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1656 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1658 int id = GEOMOp::OpLastOperationID; // TODO?
1661 GEOMUtils::PluginInfo::const_iterator it;
1662 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1663 // bind action lib and label to its ID for activateOperation() method proper work
1664 GEOMUtils::PluginData pdata = (*it);
1665 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1666 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1667 std::list<GEOMUtils::ActionData>::const_iterator ait;
1668 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1669 GEOMUtils::ActionData adata = (*ait);
1672 if ( !adata.icon.empty() )
1673 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1675 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1676 QString actionName = smenus.last();
1677 actionName = actionName.toUpper().prepend( "MEN_" );
1678 smenus.removeLast();
1680 // path to action in toolbar
1681 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1682 QString actionTool = stools.last();
1683 actionTool = actionTool.toUpper().prepend( "TOP_" );
1684 stools.removeLast();
1686 QString actionStat = adata.statusText.c_str();
1687 actionStat = actionStat.toUpper().prepend( "STB_" );
1689 createAction( id, // ~ adata.label
1690 tr( actionTool.toLatin1().constData() ),
1692 tr( actionName.toLatin1().constData() ),
1693 tr( actionStat.toLatin1().constData() ),
1694 QKeySequence( tr( adata.accel.c_str() ) ),
1695 application()->desktop(),
1697 this, SLOT( OnGUIEvent() ),
1698 QString() /*shortcutAction*/ );
1701 foreach ( QString subMenu, smenus ) {
1702 QStringList subMenuList = subMenu.split( ":" );
1703 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1704 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1705 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1707 createMenu( id, menuId, -1 );
1709 if ( !stools.isEmpty() ) {
1710 QString subTool = stools[0];
1711 subTool = subTool.toUpper().prepend( "TOOL_" );
1712 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1713 createTool(id, toolId);
1716 // add action id to map
1717 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1718 myPluginActions[id] = anAction;
1725 //=======================================================================
1726 // function : GeometryGUI::activateModule()
1727 // purpose : Called when GEOM module is activated
1728 //=======================================================================
1729 bool GeometryGUI::activateModule( SUIT_Study* study )
1731 if ( CORBA::is_nil( myComponentGeom ) )
1734 bool res = SalomeApp_Module::activateModule( study );
1738 setMenuShown( true );
1739 setToolShown( true );
1741 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1742 PyGILState_STATE gstate = PyGILState_Ensure();
1743 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1744 if ( !pluginsmanager ) {
1748 PyObjWrapper result =
1749 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1750 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1751 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1755 PyGILState_Release(gstate);
1756 // end of GEOM plugins loading
1758 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1759 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1761 // Reset actions accelerator keys
1762 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1764 GUIMap::Iterator it;
1765 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1766 it.value()->activate( application()->desktop() );
1768 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1770 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1771 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1772 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1774 if ( !myCreationInfoWdg )
1775 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1776 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1777 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1780 SALOME_ListIO selected;
1781 sm->selectedObjects( selected );
1782 sm->clearSelected();
1784 SUIT_ViewManager* vm;
1785 ViewManagerList OCCViewManagers, VTKViewManagers;
1787 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1788 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1789 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1790 onViewManagerAdded(vm);
1792 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1793 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1794 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1795 onViewManagerAdded(vm);
1797 sm->setSelectedObjects( selected, true ); //NPAL 19674
1799 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1801 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1803 // 0020836 (Basic vectors and origin)
1804 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1805 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1806 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1808 _PTR(Study) studyDS = appStudy->studyDS();
1810 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1811 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1812 createOriginAndBaseVectors();
1820 //=======================================================================
1821 // function : GeometryGUI::deactivateModule()
1822 // purpose : Called when GEOM module is deactivated
1823 //=======================================================================
1824 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1826 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1828 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1830 setMenuShown( false );
1831 setToolShown( false );
1833 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1834 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1836 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1838 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1839 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1840 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1841 myCreationInfoWdg = 0;
1843 EmitSignalCloseAllDialogs();
1845 GUIMap::Iterator it;
1846 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1847 it.value()->deactivate();
1849 // Unset actions accelerator keys
1850 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1852 qDeleteAll(myOCCSelectors);
1853 myOCCSelectors.clear();
1854 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1856 qDeleteAll(myVTKSelectors);
1857 myVTKSelectors.clear();
1858 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1860 return SalomeApp_Module::deactivateModule( study );
1863 //=======================================================================
1864 // function : onWindowActivated()
1865 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1866 //=======================================================================
1867 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1872 const bool ViewOCC = ( win->getViewManager() ? win->getViewManager()->getType() == OCCViewer_Viewer::Type() : false );
1873 //const bool ViewVTK = ( win->getViewManager() ? win->getViewManager()->getType() == SVTK_Viewer::Type() : false );
1875 // disable non-OCC viewframe menu commands
1876 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1877 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1878 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1879 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1880 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1881 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1882 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1884 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1885 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1886 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1887 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1889 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1892 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1894 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1895 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
1896 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1897 if ( myCreationInfoWdg )
1898 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1901 void GeometryGUI::viewManagers( QStringList& lst ) const
1903 lst.append( OCCViewer_Viewer::Type() );
1906 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1908 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1910 qDebug( "connect" );
1911 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1912 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1913 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1914 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1915 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1916 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1917 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1918 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1920 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1921 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1923 // disable OCC selectors
1924 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1925 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1926 while ( itOCCSel.hasNext() )
1927 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1928 sr->setEnabled(true);
1930 else if ( vm->getType() == SVTK_Viewer::Type() )
1932 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1933 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1935 // disable VTK selectors
1936 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1937 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1938 while ( itVTKSel.hasNext() )
1939 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1940 sr->setEnabled(true);
1944 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1946 SUIT_ViewModel* viewer = vm->getViewModel();
1947 if ( vm->getType() == OCCViewer_Viewer::Type() )
1949 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1950 while ( itOCCSel.hasNext() )
1951 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1952 if ( sr->viewer() == viewer )
1954 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1958 if ( vm->getType() == SVTK_Viewer::Type() )
1960 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1961 while ( itVTKSel.hasNext() )
1962 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1963 if ( sr->viewer() == viewer )
1965 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1971 //================================================================================
1973 * \brief Slot called when selection changed. Shows creation info of a selected object
1975 //================================================================================
1977 void GeometryGUI::updateCreationInfo()
1979 if ( myCreationInfoWdg )
1980 myCreationInfoWdg->clear();
1982 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
1983 // if ( !myCreationInfoWdg->isVisible() )
1986 // look for a sole selected GEOM_Object
1987 GEOM::GEOM_BaseObject_var geomObj;
1989 SALOME_ListIO selected;
1990 getApp()->selectionMgr()->selectedObjects( selected );
1992 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
1993 SALOME_ListIteratorOfListIO selIt( selected );
1994 for ( ; selIt.More(); selIt.Next() )
1996 Handle(SALOME_InteractiveObject) io = selIt.Value();
1997 if ( !io->hasEntry() ) continue;
1998 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
1999 if ( !sobj ) continue;
2000 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2001 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2002 if ( !gobj->_is_nil() )
2004 if ( !geomObj->_is_nil() )
2005 return; // several GEOM objects selected
2009 if ( geomObj->_is_nil() ) return;
2011 // pass creation info of geomObj to myCreationInfoWdg
2013 if ( myCreationInfoWdg ) {
2015 QString operationName;
2016 myCreationInfoWdg->setOperation( icon, operationName );
2020 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2022 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2023 QString name = info->operationName.in();
2024 if ( !name.isEmpty() ) {
2026 QString plugin_name;
2027 for ( size_t i = 0; i < info->params.length(); ++i ) {
2028 myCreationInfoWdg->addParam( info->params[i].name.in(),
2029 info->params[i].value.in() );
2030 QString value = info->params[i].name.in();
2031 if( value == PLUGIN_NAME ) {
2032 plugin_name = info->params[i].value.in();
2035 QString prefix = plugin_name.isEmpty() ? "GEOM" : plugin_name;
2036 icon = resMgr->loadPixmap( prefix, tr( ("ICO_"+name).toLatin1().constData() ), false );
2037 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2038 if ( operationName.startsWith( "MEN_" ))
2039 operationName = name; // no translation
2040 myCreationInfoWdg->setOperation( icon, operationName );
2049 void GeometryGUI::onAutoBringToFront()
2051 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2052 if( !isAutoBringToFront )
2055 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2056 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2059 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2060 if (!appStudy) return;
2062 GEOM_Displayer displayer( appStudy );
2064 SALOME_View* window = displayer.GetActiveView();
2065 if ( !window ) return;
2067 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2069 SALOME_ListIO selected;
2070 getApp()->selectionMgr()->selectedObjects( selected );
2071 if (!myTopLevelIOList.IsEmpty())
2073 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2075 Handle( SALOME_InteractiveObject ) io = It.Value();
2076 bool isSelected = false;
2077 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2079 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2080 if( io->isSame( sel_io ) )
2083 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2085 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2086 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2091 myTopLevelIOList.Assign(selected);
2092 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2094 Handle( SALOME_InteractiveObject ) io = It.Value();
2095 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2096 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2099 displayer.UpdateViewer();
2100 GeometryGUI::Modified();
2103 void GeometryGUI::updateFieldColorScale()
2105 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2107 GEOM_Displayer aDisplayer( aStudy );
2108 aDisplayer.UpdateColorScale();
2112 QString GeometryGUI::engineIOR() const
2114 if ( !CORBA::is_nil( GetGeomGen() ) )
2115 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2119 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2120 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2122 theWidth = theHeight = 0;
2124 Handle(TColStd_HArray1OfByte) aTexture;
2127 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2128 aTexture = aTextureMap[ theId ];
2129 if ( aTexture.IsNull() ) {
2130 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2131 if ( !aInsOp->_is_nil() ) {
2132 CORBA::Long aWidth, aHeight;
2133 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2134 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2136 theHeight = aHeight;
2138 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2140 for (int i = 0; i < aStream->length(); i++)
2141 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2142 aTextureMap[ theId ] = aTexture;
2150 LightApp_Selection* GeometryGUI::createSelection() const
2152 return new GEOMGUI_Selection();
2155 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2157 SalomeApp_Module::contextMenuPopup( client, menu, title );
2159 getApp()->selectionMgr()->selectedObjects( lst );
2161 //Add submenu for predefined materials
2162 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2163 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2164 QtxPopupMgr* mgr = popupMgr();
2165 //get parrent for submenu
2166 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2168 QMenu* oldMenu = act->menu() ;
2173 QMenu* matMenu = new QMenu();
2174 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2176 //Get current material model for the object
2178 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2179 if ( anApp && anApp->activeViewManager() ) {
2180 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2182 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2185 QString curModel = "";
2186 if ( v.canConvert<QString>() ) curModel = v.toString();
2187 // get list of all predefined materials
2188 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2190 foreach ( QString material, materials )
2192 QAction* menAct = matMenu->addAction( material );
2193 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2194 signalMapper->setMapping( menAct, material );
2195 menAct->setCheckable( true );
2196 // Set checked if this material is current
2197 Material_Model aModel;
2198 aModel.fromResources( material );
2199 if ( !found && aModel.toProperties() == curModel ) {
2200 menAct->setChecked( true );
2204 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2205 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2206 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2207 this, SLOT( OnSetMaterial( const QString & ) ) );
2208 act->setMenu( matMenu );
2212 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2213 Handle(SALOME_InteractiveObject) io = lst.First();
2214 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2215 _PTR(Study) study = appStudy->studyDS();
2216 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2218 QString aName = QString( obj->GetName().c_str() );
2219 aName.remove( QRegExp("\\s+$") );
2225 void GeometryGUI::OnSetMaterial(const QString& theName)
2227 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2231 void GeometryGUI::createPreferences()
2233 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2235 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2236 setPreferenceProperty( genGroup, "columns", 2 );
2238 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2239 LightApp_Preferences::Selector,
2240 "Geometry", "display_mode" );
2242 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2243 LightApp_Preferences::Color, "Geometry", "shading_color" );
2245 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2246 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2248 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2249 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2251 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2252 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2254 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2255 LightApp_Preferences::Color, "Geometry", "line_color" );
2257 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2258 LightApp_Preferences::Color, "Geometry", "point_color" );
2260 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2261 LightApp_Preferences::Color, "Geometry", "isos_color" );
2263 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2264 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2266 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2267 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2269 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2270 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2272 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2273 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2275 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2276 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2278 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2279 LightApp_Preferences::Selector,
2280 "Geometry", "material" );
2282 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2283 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2289 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2290 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2292 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2293 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2295 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2296 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2298 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2299 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2301 for (int i = 0; i < nb; i++) {
2302 setPreferenceProperty( wd[i], "min", 1 );
2303 setPreferenceProperty( wd[i], "max", 5 );
2306 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2307 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2309 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2310 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2312 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2313 setPreferenceProperty( aDimGroupId, "columns", 2 );
2315 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2316 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2318 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2319 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2321 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2322 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2324 int aDimFontHeightId = addPreference( tr( "PREF_DIMENSIONS_FONT_HEIGHT" ), aDimGroupId,
2325 LightApp_Preferences::DblSpin, "Geometry", "dimensions_font_height" );
2327 setPreferenceProperty( aDimFontHeightId, "min", 1e-9 );
2328 setPreferenceProperty( aDimFontHeightId, "max", 1e+9 );
2329 setPreferenceProperty( aDimFontHeightId, "precision", 9 );
2331 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2332 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2334 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2335 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2336 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2338 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2339 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2341 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2342 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2344 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2345 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2347 QStringList aListOfLengthUnits;
2348 aListOfLengthUnits << "m";
2349 aListOfLengthUnits << "cm";
2350 aListOfLengthUnits << "mm";
2351 aListOfLengthUnits << "in.";
2352 aListOfLengthUnits << "ft.";
2354 QStringList aListOfAngUnits;
2355 aListOfAngUnits << "rad";
2356 aListOfAngUnits << "deg";
2358 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2359 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2361 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2362 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2364 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2365 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2366 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2368 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2369 setPreferenceProperty( isoGroup, "columns", 2 );
2370 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2371 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2372 setPreferenceProperty( isoU, "min", 0 );
2373 setPreferenceProperty( isoU, "max", 100000 );
2374 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2375 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2376 setPreferenceProperty( isoV, "min", 0 );
2377 setPreferenceProperty( isoV, "max", 100000 );
2379 // Quantities with individual precision settings
2380 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2381 setPreferenceProperty( precGroup, "columns", 2 );
2383 const int nbQuantities = 8;
2384 int prec[nbQuantities], ii = 0;
2385 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2386 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2387 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2388 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2389 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2390 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2391 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2392 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2393 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2394 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2395 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2396 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2397 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2398 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2399 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2400 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2402 // Set property for precision value for spinboxes
2403 for ( ii = 0; ii < nbQuantities; ii++ ){
2404 setPreferenceProperty( prec[ii], "min", -14 );
2405 setPreferenceProperty( prec[ii], "max", 14 );
2406 setPreferenceProperty( prec[ii], "precision", 2 );
2409 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2410 setPreferenceProperty( VertexGroup, "columns", 2 );
2412 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2413 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2415 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2416 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2418 // Set property for default display mode
2419 QStringList aModesList;
2420 aModesList.append( tr("MEN_WIREFRAME") );
2421 aModesList.append( tr("MEN_SHADING") );
2422 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2423 aModesList.append( tr("MEN_TEXTURE") );
2425 QList<QVariant> anIndexesList;
2426 anIndexesList.append(0);
2427 anIndexesList.append(1);
2428 anIndexesList.append(2);
2429 anIndexesList.append(3);
2431 setPreferenceProperty( dispmode, "strings", aModesList );
2432 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2434 // Set property for top level display mode
2435 QStringList aTopModesList;
2436 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2437 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2438 aTopModesList.append( tr("MEN_WIREFRAME") );
2439 aTopModesList.append( tr("MEN_SHADING") );
2440 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2442 QList<QVariant> aTopIndexesList;
2443 aTopIndexesList.append(0);
2444 aTopIndexesList.append(1);
2445 aTopIndexesList.append(2);
2446 aTopIndexesList.append(3);
2447 aTopIndexesList.append(4);
2449 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2450 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2452 // Set property for step value for spinboxes
2453 setPreferenceProperty( step, "min", 1 );
2454 setPreferenceProperty( step, "max", 10000 );
2455 setPreferenceProperty( step, "precision", 3 );
2457 // Set property for trandparency value for spinboxes
2458 setPreferenceProperty( transparency, "min", 0 );
2459 setPreferenceProperty( transparency, "max", 100 );
2461 // Set property for deflection value for spinboxes
2462 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2463 setPreferenceProperty( defl, "max", 1.0 );
2464 setPreferenceProperty( defl, "step", 1.0e-04 );
2465 setPreferenceProperty( defl, "precision", 6 );
2467 // Set property for default material
2468 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2470 // Set property vertex marker type
2471 QList<QVariant> aMarkerTypeIndicesList;
2472 QList<QVariant> aMarkerTypeIconsList;
2474 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2475 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2476 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2477 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2478 aMarkerTypeIndicesList << (i-1);
2479 aMarkerTypeIconsList << pixmap;
2482 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2483 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2485 // Set property for vertex marker scale
2486 QList<QVariant> aMarkerScaleIndicesList;
2487 QStringList aMarkerScaleValuesList;
2489 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2490 aMarkerScaleIndicesList << iii;
2491 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2494 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2495 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2497 // Scalar bar for field step presentation
2498 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2499 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2501 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2502 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2503 setPreferenceProperty( sbXPosition, "min", 0 );
2504 setPreferenceProperty( sbXPosition, "max", 1 );
2505 setPreferenceProperty( sbXPosition, "step", 0.05 );
2507 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2508 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2509 setPreferenceProperty( sbYPosition, "min", 0 );
2510 setPreferenceProperty( sbYPosition, "max", 1 );
2511 setPreferenceProperty( sbYPosition, "step", 0.05 );
2513 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2514 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2515 setPreferenceProperty( sbWidth, "min", 0 );
2516 setPreferenceProperty( sbWidth, "max", 1 );
2517 setPreferenceProperty( sbWidth, "step", 0.05 );
2519 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2520 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2521 setPreferenceProperty( sbHeight, "min", 0 );
2522 setPreferenceProperty( sbHeight, "max", 1 );
2523 setPreferenceProperty( sbHeight, "step", 0.05 );
2525 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2526 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2527 setPreferenceProperty( sbTextHeight, "min", 6 );
2528 setPreferenceProperty( sbTextHeight, "max", 24 );
2529 setPreferenceProperty( sbTextHeight, "step", 1 );
2531 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2532 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2533 setPreferenceProperty( sbNbIntervals, "min", 2 );
2534 setPreferenceProperty( sbNbIntervals, "max", 64 );
2535 setPreferenceProperty( sbNbIntervals, "step", 1 );
2537 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2538 setPreferenceProperty( originGroup, "columns", 2 );
2540 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2541 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2542 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2543 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2545 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2546 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2548 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2549 setPreferenceProperty( operationsGroup, "columns", 2 );
2551 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2552 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2554 addPreference( tr( "PREF_HIDE_INPUT_OBJECT" ), operationsGroup,
2555 LightApp_Preferences::Bool, "Geometry", "hide_input_object" );
2557 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2559 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2561 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2562 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2564 QStringList aHierarchyTypeList;
2565 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2566 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2567 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2569 QList<QVariant> aHierarchyTypeIndexesList;
2570 aHierarchyTypeIndexesList.append(0);
2571 aHierarchyTypeIndexesList.append(1);
2572 aHierarchyTypeIndexesList.append(2);
2574 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2575 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2577 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2578 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2580 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2582 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2583 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2585 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2586 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2587 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2588 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2589 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2590 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2591 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2592 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2594 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2595 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2596 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2597 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2598 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2599 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2606 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2608 if (section == "Geometry") {
2609 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2610 if (param == QString("SettingsGeomStep")) {
2611 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2612 EmitSignalDefaultStepValueChanged(spin_step);
2614 else if (param == QString("toplevel_color")) {
2615 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2616 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2618 else if (param == QString("toplevel_dm")) {
2619 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2621 else if (param == QString("scalar_bar_x_position") ||
2622 param == QString("scalar_bar_y_position") ||
2623 param == QString("scalar_bar_width") ||
2624 param == QString("scalar_bar_height") ||
2625 param == QString("scalar_bar_text_height") ||
2626 param == QString("scalar_bar_nb_intervals")) {
2627 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2629 GEOM_Displayer aDisplayer( aStudy );
2630 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2631 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2634 else if ( param == QString("dimensions_color") ||
2635 param == QString("dimensions_line_width") ||
2636 param == QString("dimensions_font_height") ||
2637 param == QString("dimensions_arrow_length") ||
2638 param == QString("dimensions_show_units") ||
2639 param == QString("dimensions_length_units") ||
2640 param == QString("dimensions_angle_units") )
2642 SalomeApp_Application* anApp = getApp();
2648 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2654 GEOM_Displayer aDisplayer( aStudy );
2656 ViewManagerList aVMs;
2657 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2658 ViewManagerList::Iterator anIt = aVMs.begin();
2659 for ( ; anIt != aVMs.end(); ++anIt )
2661 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2667 SALOME_ListIO aVisible;
2668 aViewer->GetVisible( aVisible );
2669 aDisplayer.Redisplay( aVisible, false, aViewer );
2672 aDisplayer.UpdateViewer();
2674 else if ( param.startsWith( "dependency_tree") )
2675 emit SignalDependencyTreeParamChanged( section, param );
2679 LightApp_Displayer* GeometryGUI::displayer()
2682 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2686 void GeometryGUI::setLocalSelectionMode(const int mode)
2688 myLocalSelectionMode = mode;
2691 int GeometryGUI::getLocalSelectionMode() const
2693 return myLocalSelectionMode;
2696 const char gSeparator = '_'; // character used to separate parameter names
2697 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2700 * \brief Store visual parameters
2702 * This method is called just before the study document is saved.
2703 * Store visual parameters in AttributeParameter attribute(s)
2705 void GeometryGUI::storeVisualParameters (int savePoint)
2707 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2708 if ( !appStudy || !appStudy->studyDS() )
2710 _PTR(Study) studyDS = appStudy->studyDS();
2712 // componentName is used for encoding of entries when storing them in IParameters
2713 std::string componentName = myComponentGeom->ComponentDataType();
2714 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2715 //if (!aSComponent) return;
2718 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2719 componentName.c_str(),
2721 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2723 QSet<QString> anEntriesToStoreShared;
2724 QList<SUIT_ViewManager*> lst;
2725 QList<SUIT_ViewManager*>::Iterator it;
2727 // main cycle to store parameters of displayed objects
2729 getApp()->viewManagers(lst);
2730 for (it = lst.begin(); it != lst.end(); it++) {
2731 SUIT_ViewManager* vman = *it;
2732 QString vType = vman->getType();
2733 int aMgrId = vman->getGlobalId();
2734 // saving VTK actors properties
2735 QVector<SUIT_ViewWindow*> views = vman->getViews();
2736 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2737 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
2738 ObjMap::ConstIterator o_it = anObjects.begin();
2739 for (; o_it != anObjects.end(); o_it++) {
2740 const PropMap& aProps = o_it.value();
2742 //Check that object exists in the study
2743 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2744 if ( !obj || !(aProps.count() > 0))
2746 // entry is "encoded" = it does NOT contain component adress, since it is a
2747 // subject to change on next component loading
2749 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2751 _PTR(GenericAttribute) anAttr;
2752 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2755 // remember entry of object to store shared GEOM properties
2756 // (e.g. dimension properties).
2757 if ( vType == OCCViewer_Viewer::Type() )
2759 anEntriesToStoreShared.insert( o_it.key() );
2762 QString param, occParam = vType;
2763 occParam += GEOM::sectionSeparator();
2764 occParam += QString::number(aMgrId);
2765 occParam += GEOM::sectionSeparator();
2767 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2768 param = occParam + GEOM::propertyName( GEOM::Visibility );
2769 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2772 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2773 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2774 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2777 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2778 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2780 val << QString::number(c.redF());
2781 val << QString::number(c.greenF());
2782 val << QString::number(c.blueF());
2783 param = occParam + GEOM::propertyName( GEOM::Color );
2784 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2787 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2788 param = occParam + GEOM::propertyName( GEOM::Texture );
2789 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2792 if (vType == SVTK_Viewer::Type()) {
2793 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2794 param = occParam + GEOM::propertyName( GEOM::Opacity );
2795 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2797 } else if (vType == SOCC_Viewer::Type()) {
2798 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2799 param = occParam + GEOM::propertyName( GEOM::Transparency );
2800 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2803 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2804 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2805 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2809 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2810 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2811 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2814 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2815 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2816 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2819 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
2820 param = occParam + GEOM::propertyName( GEOM::Vertices );
2821 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
2824 if (aProps.contains(GEOM::propertyName( GEOM::ShowName ))) {
2825 param = occParam + GEOM::propertyName( GEOM::ShowName );
2826 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::ShowName )).toString().toStdString());
2829 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2830 param = occParam + GEOM::propertyName( GEOM::Deflection );
2831 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2834 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2835 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2836 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2837 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2840 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2841 param = occParam + GEOM::propertyName( GEOM::Material );
2842 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2845 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2846 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2847 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2850 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2851 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2852 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2854 } // object iterator
2856 } // for (viewManagers)
2858 // store dimension attributes of objects:
2859 // since the displayed object always persists in property map, we remember the object entries
2860 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
2861 QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
2862 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
2863 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
2865 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
2866 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName);
2868 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
2870 if ( aDimensions.GetNumber() == 0 )
2875 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
2880 * \brief Restore visual parameters
2882 * This method is called after the study document is opened.
2883 * Restore visual parameters from AttributeParameter attribute(s)
2885 void GeometryGUI::restoreVisualParameters (int savePoint)
2887 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2888 if (!appStudy || !appStudy->studyDS())
2890 _PTR(Study) studyDS = appStudy->studyDS();
2892 // componentName is used for encoding of entries when storing them in IParameters
2893 std::string componentName = myComponentGeom->ComponentDataType();
2894 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2895 //if (!aSComponent) return;
2898 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2899 componentName.c_str(),
2901 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2903 std::vector<std::string> entries = ip->getEntries();
2905 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2907 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2908 QString entry (ip->decodeEntry(*entIt).c_str());
2910 // Check that the entry corresponds to a real object in the Study
2911 // as the object may be deleted or modified after the visual state is saved.
2912 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2913 if (!so) continue; //Skip the not existent entry
2915 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2916 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2918 std::vector<std::string>::iterator namesIt = paramNames.begin();
2919 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2921 // actors are stored in a map after displaying of them for
2922 // quicker access in the future: map < viewID to actor >
2923 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2924 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2926 QString viewerTypStr;
2927 QString viewIndexStr;
2929 QVector<PropMap> aListOfMap;
2931 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2933 // visual parameters are stored in strings as follows:
2934 // 1) ViewerType_ViewIndex_ParamName
2935 // 2) ViewerType_ParamName (shared for GEOM module)
2936 // '_' is used as separator and should not be used in viewer type or parameter names.
2937 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2939 bool isShared = lst.size() == 2;
2940 bool isViewer = lst.size() == 3;
2941 if ( !isShared && !isViewer )
2946 // shared visual parameters
2949 QString aParamNameStr( lst[1] );
2950 QString aValuesStr( (*valuesIt).c_str() );
2952 // shared dimension properties are stored as attribute
2953 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
2955 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
2956 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
2962 // per view visual parameters
2963 viewerTypStr = lst[0];
2964 viewIndexStr = lst[1];
2965 QString paramNameStr = lst[2];
2968 viewIndex = viewIndexStr.toUInt(&ok);
2969 if (!ok) // bad conversion of view index to integer
2972 if ((viewIndex + 1) > aListOfMap.count()) {
2973 aListOfMap.resize(viewIndex + 1);
2976 QString val((*valuesIt).c_str());
2977 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
2978 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
2979 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
2980 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
2981 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
2982 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
2983 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
2984 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
2985 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
2986 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
2987 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
2988 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
2989 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
2990 QStringList rgb = val.split(GEOM::subSectionSeparator());
2991 if (rgb.count() == 3) {
2992 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
2993 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
2995 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
2996 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
2997 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
2998 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
2999 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
3000 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
3001 } else if (paramNameStr == GEOM::propertyName( GEOM::ShowName )) {
3002 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::ShowName ), val == "true" || val == "1");
3003 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3004 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3005 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3006 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3007 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3008 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3009 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3010 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3011 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3012 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3014 } // for names/parameters iterator
3016 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3018 for (int index = 0; index < aListOfMap.count(); index++) {
3019 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
3021 //Get Visibility property of the current PropMap
3022 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3023 SUIT_ViewManager* vman = lst.at(index);
3024 SUIT_ViewModel* vmodel = vman->getViewModel();
3025 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
3028 } // for entries iterator
3030 // update all VTK and OCC views
3031 QList<SUIT_ViewManager*> lst;
3032 getApp()->viewManagers(lst);
3033 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3034 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3037 if (vmodel->getType() == SVTK_Viewer::Type()) {
3038 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3039 vtkView->getRenderer()->ResetCameraClippingRange();
3042 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3043 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3044 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3051 // Compute current name mode of the viewer
3052 void UpdateNameMode( SalomeApp_Application* app )
3054 bool isMode = false;
3055 SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() );
3056 SUIT_ViewWindow* viewWindow = app->desktop()->activeWindow();
3057 GEOM_Displayer displayer( aStudy );
3058 int aMgrId = viewWindow->getViewManager()->getGlobalId();
3060 SALOME_ListIO anIOlst;
3061 displayer.GetActiveView()->GetVisible( anIOlst );
3063 for ( SALOME_ListIteratorOfListIO It( anIOlst ); It.More(); It.Next() ) {
3064 Handle( SALOME_InteractiveObject ) io = It.Value();
3065 QVariant v = aStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::ShowName ), QVariant() );
3066 bool isIONameMode = v.isValid() ? v.toBool() : false;
3070 viewWindow->setProperty( "NameMode", isMode );
3073 void GeometryGUI::onViewAboutToShow()
3075 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3076 QAction* a = action( GEOMOp::OpSwitchVectors );
3077 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3078 QAction* aNameAction = action( GEOMOp::OpSwitchName );
3080 a->setEnabled(true);
3081 bool vmode = window->property("VectorsMode").toBool();
3082 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3083 aVerticesAction->setEnabled(true);
3084 vmode = window->property("VerticesMode").toBool();
3085 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3086 UpdateNameMode( getApp() );
3087 aNameAction->setEnabled(true);
3088 vmode = window->property("NameMode").toBool();
3089 aNameAction->setText ( vmode == 1 ? tr( "MEN_NAME_MODE_OFF" ) : tr("MEN_NAME_MODE_ON") );
3091 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3092 a->setEnabled(false);
3093 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3094 aVerticesAction->setEnabled(false);
3095 aNameAction->setText ( tr("MEN_NAME_MODE_ON") );
3096 aNameAction->setEnabled(false);
3101 \brief Return action by id
3102 \param id identifier of the action
3105 QAction* GeometryGUI::getAction(const int id) {
3110 \brief GEOM module message handler
3112 This method can be re-implemented in the subclasses.
3113 This is a GEOM module message handler.
3115 \param msg the message received.
3117 void GeometryGUI::message(const QString& msg)
3120 QStringList data = msg.split("/");
3121 const int nbStrings = data.count();
3123 if (nbStrings > 0) {
3124 if (data[0] == "modified") {
3126 QString anIOR = nbStrings > 1 ? data[1] : QString();
3128 if ( anIOR.isEmpty() ) {
3132 // Get the geom object.
3133 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3135 // Clear the shape buffer
3136 GeometryGUI::ClearShapeBuffer (anObj);
3142 \brief Clears the shape buffer.
3144 This is a static method. It clears the shape buffer.
3146 \param theObj the object
3148 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3150 if ( CORBA::is_nil( theObj ) )
3153 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3154 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3155 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3157 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3162 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3167 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3171 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3172 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3173 _PTR(GenericAttribute) anAttr;
3174 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3175 _PTR(AttributeIOR) anIOR ( anAttr );
3176 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3177 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3183 \brief Returns the object from IOR.
3185 This is a static method. It returns the object from its IOR.
3187 \param IOR object IOR
3188 \return GEOM object.
3190 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3192 GEOM::GEOM_Object_var geomObj;
3193 if ( !IOR.isEmpty() ) {
3194 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3195 ( IOR.toLatin1().constData() );
3196 if ( !CORBA::is_nil( corbaObj ) )
3197 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3199 return geomObj._retn();
3203 \brief Returns IOR of the object.
3205 This is a static method. It returns the object's IOR.
3207 \param object the GEOM object.
3208 \return object's IOR.
3210 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3213 if ( !CORBA::is_nil( object ) ) {
3214 CORBA::String_var anIOR =
3215 SalomeApp_Application::orb()->object_to_string( object );
3222 \brief Check if this object is can't be renamed in place
3224 This method can be re-implemented in the subclasses.
3225 Return true in case if object isn't reference or component (module root).
3227 \param entry column id
3228 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3230 bool GeometryGUI::renameAllowed( const QString& entry) const {
3232 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3233 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3234 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3236 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3240 Rename object by entry.
3241 \param entry entry of the object
3242 \param name new name of the object
3243 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3245 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3247 bool result = false;
3249 SalomeApp_Application* app =
3250 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3251 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3256 _PTR(Study) aStudy = appStudy->studyDS();
3261 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3263 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3267 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3268 _PTR(GenericAttribute) anAttr;
3270 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3271 _PTR(AttributeName) aName (anAttr);
3273 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3274 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3275 if (!CORBA::is_nil(anObj)) {
3276 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3277 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3285 void GeometryGUI::updateMaterials()
3287 LightApp_Preferences* pref = preferences();
3289 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3290 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3291 if ( !materials.contains( currentMaterial ) )
3292 // user material set as default in the preferences, might be removed
3293 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3295 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3297 setPreferenceProperty( prefItem->id(),
3298 "strings", materials );
3299 prefItem->retrieve();
3305 \brief Check if the module allows "drag" operation of its objects.
3307 Overloaded from LightApp_Module class.
3309 This function is a part of the general drag-n-drop mechanism.
3310 The goal of this function is to check data object passed as a parameter
3311 and decide if it can be dragged or no.
3313 \param what data object being tested for drag operation
3314 \return \c true if module allows dragging of the specified object
3315 \sa isDropAccepted(), dropObjects()
3317 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3319 // we allow dragging object under root and object from folder
3320 int aLevel = what->level();
3321 bool anObjectInFolder = false;
3323 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3325 _PTR(SObject) aSO = dataObj->object();
3327 _PTR(GenericAttribute) anAttr;
3328 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3329 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3330 _PTR(AttributeLocalID) aLocalID( anAttr );
3331 anObjectInFolder = aLocalID->Value() == 999;
3336 return aLevel == 2 || anObjectInFolder;
3340 \brief Check if the module allows "drop" operation on the given object.
3342 Overloaded from LightApp_Module class.
3344 This function is a part of the general drag-n-drop mechanism.
3345 The goal of this function is to check data object passed as a parameter
3346 and decide if it can be used as a target for the "drop" operation.
3347 The processing of the drop operation itself is done in the dropObjects() function.
3349 \param where target data object
3350 \return \c true if module supports dropping on the \a where data object
3351 \sa isDraggable(), dropObjects()
3353 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3355 // we allow dropping into folder and top-level GEOM object
3356 int aLevel = where->level();
3357 bool isFolder = false;
3359 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3361 _PTR(SObject) aSO = dataObj->object();
3363 _PTR(GenericAttribute) anAttr;
3364 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3365 _PTR(AttributeLocalID) aLocalID( anAttr );
3366 isFolder = aLocalID->Value() == 999;
3371 return aLevel == 1 || isFolder;
3375 \brief Complete drag-n-drop operation.
3377 Overloaded from LightApp_Module class.
3379 This function is a part of the general drag-n-drop mechanism.
3380 Its goal is to handle dropping of the objects being dragged according
3381 to the chosen operation (move). The dropping is performed in the
3382 context of the parent data object \a where and the \a row (position in the
3383 children index) at which the data should be dropped. If \a row is equal to -1,
3384 this means that objects are added to the end of the children list.
3386 \param what objects being dropped
3387 \param where target data object
3388 \param row child index at which the drop operation is performed
3389 \param action drag-n-drop operation (Qt::DropAction) - move
3391 \sa isDraggable(), isDropAccepted()
3393 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3394 const int row, Qt::DropAction action )
3396 if (action != Qt::CopyAction && action != Qt::MoveAction)
3397 return; // unsupported action
3399 // get parent object
3400 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3401 if ( !dataObj ) return; // wrong parent
3402 _PTR(SObject) parentObj = dataObj->object();
3404 // Find the current Study and StudyBuilder
3405 _PTR(Study) aStudy = parentObj->GetStudy();
3406 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3407 // collect all parents of the target node
3408 QStringList parentIDs;
3409 _PTR(SObject) parent = parentObj;
3410 while( !parent->IsNull() ) {
3411 parentIDs << parent->GetID().c_str();
3412 parent = aUseCaseBuilder->GetFather(parent);
3415 // collect objects being dropped
3416 GEOM::object_list_var objects = new GEOM::object_list();
3417 objects->length( what.count() );
3419 for ( int i = 0; i < what.count(); i++ ) {
3420 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3421 if ( !dataObj ) continue; // skip wrong objects
3422 _PTR(SObject) sobj = dataObj->object();
3423 // check that dropped object is not a parent of target object
3424 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3425 return; // it's not allowed to move node into it's child
3427 objects[i] = _CAST(SObject, sobj)->GetSObject();
3430 objects->length( count );
3432 // call engine function
3433 GetGeomGen()->Move( objects.in(), // what
3434 _CAST(SObject, parentObj)->GetSObject(), // where
3437 // update Object browser
3438 getApp()->updateObjectBrowser( false );