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_TextTreeWdg.h"
37 #include "GEOMGUI_DimensionProperty.h"
38 #include "GEOM_Constants.h"
39 #include "GEOM_Displayer.h"
40 #include "GEOM_AISShape.hxx"
41 #include "GEOMUtils_XmlHandler.hxx"
43 #include "GEOM_Actor.h"
45 #include <Material_ResourceMgr.h>
46 #include <Material_Model.h>
48 #include <SUIT_Desktop.h>
49 #include <SUIT_MessageBox.h>
50 #include <SUIT_ResourceMgr.h>
51 #include <SUIT_Session.h>
52 #include <SUIT_ViewManager.h>
54 #include <PyInterp_Interp.h>
56 #include <OCCViewer_ViewWindow.h>
57 #include <OCCViewer_ViewPort3d.h>
58 #include <OCCViewer_ViewModel.h>
59 #include <OCCViewer_ViewManager.h>
61 #include <SOCC_ViewModel.h>
62 #include <SOCC_ViewWindow.h>
64 #include <SVTK_ViewWindow.h>
65 #include <SVTK_RenderWindowInteractor.h>
66 #include <SVTK_InteractorStyle.h>
67 #include <SVTK_ViewModel.h>
69 #include <GraphicsView_Viewer.h>
71 #include <SalomeApp_Application.h>
72 #include <SalomeApp_DataObject.h>
73 #include <SalomeApp_Study.h>
74 #include <SalomeApp_Tools.h>
76 #include <LightApp_SelectionMgr.h>
77 #include <LightApp_VTKSelector.h>
78 #include <LightApp_DataObject.h>
79 #include <LightApp_Preferences.h>
81 #include <SALOME_LifeCycleCORBA.hxx>
82 #include <SALOME_ListIO.hxx>
84 #include <SALOMEDSClient_ClientFactory.hxx>
85 #include <SALOMEDSClient_IParameters.hxx>
87 #include <SALOMEDS_SObject.hxx>
89 #include <Basics_OCCTVersion.hxx>
90 #include <QtxFontEdit.h>
101 #include <QSignalMapper>
102 #include <QFontDatabase>
104 #include <AIS_ListOfInteractive.hxx>
105 #include <AIS_ListIteratorOfListOfInteractive.hxx>
106 #include <Prs3d_Drawer.hxx>
107 #include <Prs3d_IsoAspect.hxx>
108 #include <Aspect_TypeOfMarker.hxx>
109 #include <OSD_SharedLibrary.hxx>
110 #include <NCollection_DataMap.hxx>
112 #include <TColStd_HArray1OfByte.hxx>
113 #include <TColStd_SequenceOfHAsciiString.hxx>
115 #include <utilities.h>
117 #include <vtkCamera.h>
118 #include <vtkRenderer.h>
120 #include <Standard_Failure.hxx>
121 #include <Standard_ErrorHandler.hxx>
123 #include <Font_SystemFont.hxx>
124 #include <Font_FontMgr.hxx>
125 #include <TCollection_HAsciiString.hxx>
127 #include "GEOM_version.h"
128 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
131 Standard_EXPORT CAM_Module* createModule() {
132 return new GeometryGUI();
135 Standard_EXPORT char* getModuleVersion() {
136 return (char*)GEOM_VERSION_STR;
140 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
142 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
144 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
146 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
147 if (CORBA::is_nil(myComponentGeom))
149 return GeometryGUI::myComponentGeom;
152 bool GeometryGUI::InitGeomGen()
155 if ( CORBA::is_nil( myComponentGeom ) ) return false;
159 //=======================================================================
160 // function : ClientSObjectToObject
162 //=======================================================================
163 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
165 _PTR(GenericAttribute) anAttr;
166 CORBA::Object_var anObj;
168 std::string aValue = theSObject->GetIOR();
169 if (strcmp(aValue.c_str(), "") != 0) {
170 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
171 anObj = anORB->string_to_object(aValue.c_str());
174 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
176 return anObj._retn();
179 //=======================================================================
180 // function : ClientStudyToStudy
182 //=======================================================================
183 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
185 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
186 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
187 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
188 int aStudyID = theStudy->StudyId();
189 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
190 return aDSStudy._retn();
193 void GeometryGUI::Modified (bool theIsUpdateActions)
195 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
196 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
197 appStudy->Modified();
198 if ( theIsUpdateActions )
199 app->updateActions();
204 //=======================================================================
205 // function : GeometryGUI::GeometryGUI()
206 // purpose : Constructor
207 //=======================================================================
208 GeometryGUI::GeometryGUI() :
209 SalomeApp_Module( "GEOM" ),
212 if ( CORBA::is_nil( myComponentGeom ) )
214 Engines::EngineComponent_var comp =
215 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
216 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
219 myActiveDialogBox = 0;
221 gp_Pnt origin = gp_Pnt(0., 0., 0.);
222 gp_Dir direction = gp_Dir(0., 0., 1.);
223 myWorkingPlane = gp_Ax3(origin, direction);
226 myLocalSelectionMode = GEOM_ALLOBJECTS;
228 myCreationInfoWdg = 0;
231 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
233 Q_INIT_RESOURCE( GEOMGUI );
236 //=======================================================================
237 // function : GeometryGUI::~GeometryGUI()
238 // purpose : Destructor
239 //=======================================================================
240 GeometryGUI::~GeometryGUI()
242 while (!myOCCSelectors.isEmpty())
243 delete myOCCSelectors.takeFirst();
245 while (!myVTKSelectors.isEmpty())
246 delete myVTKSelectors.takeFirst();
248 qDeleteAll(myGUIMap);
251 //=======================================================================
252 // function : GeometryGUI::getLibrary()
253 // purpose : get or load GUI library by name [ internal ]
254 //=======================================================================
255 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
256 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
258 if ( !myGUIMap.contains( libraryName ) ) {
259 // try to load library if it is not loaded yet
261 QString dirs = getenv( "LD_LIBRARY_PATH" );
264 QString dirs = getenv( "PATH" );
267 if ( !dirs.isEmpty() ) {
268 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
269 QListIterator<QString> it( dirList ); it.toBack();
270 while ( it.hasPrevious() ) {
271 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
273 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
274 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
276 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
277 continue; // continue search further
279 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
280 if ( osdF != NULL ) {
281 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
282 GEOMGUI* libGUI = (*func)( this );
284 myGUIMap[ libraryName ] = libGUI;
285 break; // found and loaded!
292 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
295 //=======================================================================
296 // function : GeometryGUI::getPluginLibrary()
297 // purpose : get or load GUI Plugin library by name [ internal ]
298 //=======================================================================
299 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
300 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
302 if ( !myGUIMap.contains( libraryName ) ) {
303 // try to load library if it is not loaded yet
305 QString dirs = getenv( "LD_LIBRARY_PATH" );
308 QString dirs = getenv( "PATH" );
311 if ( !dirs.isEmpty() ) {
312 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
313 QListIterator<QString> it( dirList ); it.toBack();
314 while ( it.hasPrevious() ) {
315 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
317 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
318 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
320 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
321 continue; // continue search further
323 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
324 if ( osdF != NULL ) {
325 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
326 GEOMPluginGUI* libGUI = (*func)( this );
328 myGUIMap[ libraryName ] = libGUI;
329 break; // found and loaded!
336 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
339 //=======================================================================
340 // function : GeometryGUI::ActiveWorkingPlane()
341 // purpose : Activate Working Plane View
342 //=======================================================================
343 void GeometryGUI::ActiveWorkingPlane()
345 gp_Dir DZ = myWorkingPlane.Direction();
346 gp_Dir DY = myWorkingPlane.YDirection();
348 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
349 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
350 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
353 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
355 Handle(V3d_View) view3d = vw->getViewPort()->getView();
357 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
358 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
362 else if ( ViewVTK ) {
363 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
365 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
367 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
368 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
369 camera->SetFocalPoint(0,0,0);
376 //=======================================================================
377 // function : GeometryGUI::SetActiveDialogBox()
378 // purpose : Set active dialog box
379 //=======================================================================
380 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
382 myActiveDialogBox = (QDialog*)aDlg;
385 //=======================================================================
386 // function : GeometryGUI::EmitSignalDeactivateDialog()
387 // purpose : Emit a signal to deactivate the active dialog Box
388 //=======================================================================
389 void GeometryGUI::EmitSignalDeactivateDialog()
391 emit SignalDeactivateActiveDialog();
394 //=======================================================================
395 // function : GeometryGUI::EmitSignalCloseAllDialogs()
396 // purpose : Emit a signal to close all non modal dialogs box
397 //=======================================================================
398 void GeometryGUI::EmitSignalCloseAllDialogs()
400 emit SignalCloseAllDialogs();
403 //=======================================================================
404 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
405 // purpose : Emit a signal to inform that default real spin box step has
407 //=======================================================================
408 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
410 emit SignalDefaultStepValueChanged(newVal);
413 //=======================================================================
414 // function : GeometryGUI::OnGUIEvent()
415 // purpose : common slot for all menu/toolbar actions
416 //=======================================================================
417 void GeometryGUI::OnGUIEvent()
419 const QObject* obj = sender();
420 if ( !obj || !obj->inherits( "QAction" ) )
422 int id = actionId((QAction*)obj);
427 //=======================================================================
428 // function : GeometryGUI::OnGUIEvent()
429 // purpose : manage all events on GUI [static]
430 //=======================================================================
431 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
433 SUIT_Application* anApp = application();
435 SUIT_Desktop* desk = anApp->desktop();
437 // check type of the active viewframe
438 SUIT_ViewWindow* window = desk->activeWindow();
439 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
440 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
441 bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() );
442 // if current viewframe is not of OCC and not of VTK type - return immediately
443 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
444 QList<int> NotViewerDependentCommands;
445 NotViewerDependentCommands << GEOMOp::OpDelete
447 << GEOMOp::OpShowOnly
448 << GEOMOp::OpShowOnlyChildren
449 << GEOMOp::OpDiscloseChildren
450 << GEOMOp::OpConcealChildren
451 << GEOMOp::OpUnpublishObject
452 << GEOMOp::OpPublishObject
453 << GEOMOp::OpPointMarker
454 << GEOMOp::OpCreateFolder
455 << GEOMOp::OpSortChildren;
456 if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) {
457 // activate OCC viewer
458 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
461 // fix for IPAL9103, point 2
462 if ( CORBA::is_nil( GetGeomGen() ) ) {
463 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
468 // find corresponding GUI library
470 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
471 createOriginAndBaseVectors(); // internal operation
473 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
474 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
475 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
476 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
477 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
478 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
479 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
480 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
481 case GEOMOp::OpDelete: // MENU EDIT - DELETE
482 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
483 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
484 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
485 case GEOMOp::OpColor: // POPUP MENU - COLOR
486 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
487 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
488 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
489 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
490 case GEOMOp::OpIsos: // POPUP MENU - ISOS
491 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
492 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
493 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
494 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
495 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
496 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
497 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
498 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
499 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
500 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
501 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
502 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
503 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
504 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
505 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
506 case GEOMOp::OpClsBringToFront: //
507 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
508 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
509 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
510 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
511 libName = "GEOMToolsGUI";
513 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
514 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
515 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
516 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
517 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
518 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
519 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
520 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
521 case GEOMOp::OpHide: // MENU VIEW - ERASE
522 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
523 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
524 case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE
525 case GEOMOp::OpSwitchName: // MENU VIEW - VERTICES MODE
526 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
527 case GEOMOp::OpShading: // POPUP MENU - SHADING
528 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
529 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
530 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
531 case GEOMOp::OpVertices: // POPUP MENU - VERTICES
532 case GEOMOp::OpShowName: // POPUP MENU - SHOW NAME
533 libName = "DisplayGUI";
535 case GEOMOp::OpPoint: // MENU BASIC - POINT
536 case GEOMOp::OpLine: // MENU BASIC - LINE
537 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
538 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
539 case GEOMOp::OpArc: // MENU BASIC - ARC
540 case GEOMOp::OpVector: // MENU BASIC - VECTOR
541 case GEOMOp::OpPlane: // MENU BASIC - PLANE
542 case GEOMOp::OpCurve: // MENU BASIC - CURVE
543 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
544 libName = "BasicGUI";
546 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
547 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
548 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
549 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
550 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
551 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
552 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
553 libName = "PrimitiveGUI";
555 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
556 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
557 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
558 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
559 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
560 case GEOMOp::OpThickness: // MENU GENERATION - THICKNESS
561 libName = "GenerationGUI";
563 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
564 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
565 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
566 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
567 case GEOMOp::OpSurfaceFromFace: // MENU ENTITY - SURFACE FROM FACE
569 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
571 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
572 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
573 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
574 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
575 case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR
576 libName = "EntityGUI";
578 case GEOMOp::OpEdge: // MENU BUILD - EDGE
579 case GEOMOp::OpWire: // MENU BUILD - WIRE
580 case GEOMOp::OpFace: // MENU BUILD - FACE
581 case GEOMOp::OpShell: // MENU BUILD - SHELL
582 case GEOMOp::OpSolid: // MENU BUILD - SOLID
583 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
584 libName = "BuildGUI";
586 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
587 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
588 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
589 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
590 libName = "BooleanGUI";
592 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
593 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
594 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
595 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
596 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
597 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
598 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
599 case GEOMOp::OpProjOnCyl: // MENU TRANSFORMATION - PROJECTION ON CYLINDER
600 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
601 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
602 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
603 case GEOMOp::OpExtension: // MENU TRANSFORMATION - EXTENSION
604 libName = "TransformationGUI";
606 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
607 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
608 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
609 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
610 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
611 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
612 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
613 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
614 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
615 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
616 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
617 case GEOMOp::OpTransferData: // MENU OPERATION - TRANSFER DATA
618 libName = "OperationGUI";
620 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
621 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
622 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
623 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
624 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
625 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
626 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
627 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
628 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
629 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
630 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
631 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
632 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
633 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
634 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
635 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
636 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
637 case GEOMOp::OpInspectObj: // MENU REPAIR - INSPECT OBJECT
638 libName = "RepairGUI";
640 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
641 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
642 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
643 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
644 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
645 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
646 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
647 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
648 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
649 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
650 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
651 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
652 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
653 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
654 case GEOMOp::OpFastCheckInters: // MENU MEASURE - FAST CHECK INTERSECTIONS
655 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
656 case GEOMOp::OpShapeStatistics: // MENU MEASURE - SHAPE STATISTICS
657 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
658 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
659 libName = "MeasureGUI";
661 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
662 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
663 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
664 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
665 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
666 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
667 libName = "GroupGUI";
669 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
670 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
671 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
672 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
673 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
674 libName = "BlocksGUI";
676 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
677 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
678 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
679 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
680 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
681 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
682 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
683 //libName = "AdvancedGUI";
686 if (myPluginActions.contains(id)) {
687 libName = myPluginActions[id].first;
689 GEOMPluginGUI* library = 0;
690 if ( !libName.isEmpty() ) {
692 libName = QString( "lib" ) + libName + ".so";
694 libName = libName + ".dll";
696 library = getPluginLibrary( libName );
699 // call method of corresponding GUI library
701 //QString action ("%1");
702 //action = action.arg(id);
704 //if( !theParam.isValid() )
705 library->OnGUIEvent( myPluginActions[id].second, desk );
707 // library->OnGUIEvent( id, desk, theParam);
710 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
712 updateCreationInfo();
718 GEOMGUI* library = 0;
719 if ( !libName.isEmpty() ) {
721 libName = QString( "lib" ) + libName + ".so";
723 libName = libName + ".dll";
725 library = getLibrary( libName );
728 // call method of corresponding GUI library
730 if( !theParam.isValid() )
731 library->OnGUIEvent( id, desk );
733 library->OnGUIEvent( id, desk, theParam);
736 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
738 updateCreationInfo();
741 //=================================================================================
742 // function : GeometryGUI::activateOperation()
744 //=================================================================================
745 bool GeometryGUI::activateOperation( int actionId )
747 OnGUIEvent(actionId);
751 //=================================================================================
752 // function : GeometryGUI::activateOperation()
754 //=================================================================================
755 bool GeometryGUI::activateOperation( const QString& actionId )
759 int id = actionId.toInt(&isOk);
766 //=================================================================================
767 // function : GeometryGUI::activateOperation()
769 //=================================================================================
770 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
774 QString pluginLib = plugin;
775 // TODO: if <plugin> is a plugin name, find plugin library name
776 if (myPluginLibs.contains(plugin))
777 pluginLib = myPluginLibs[plugin];
779 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
780 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
781 const PluginAction& anAction = actionsIter.value();
782 if (anAction.first == pluginLib && anAction.second == actionId) {
783 // activate operation
784 OnGUIEvent(actionsIter.key());
792 //=================================================================================
793 // function : GeometryGUI::OnKeyPress()
794 // purpose : Called when any key is pressed by user [static]
795 //=================================================================================
796 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
798 if ( !application() )
800 foreach ( GEOMGUI* lib, myGUIMap )
801 lib->OnKeyPress( e, application()->desktop(), w );
804 //=================================================================================
805 // function : GeometryGUI::OnMouseMove()
806 // purpose : Manages mouse move events [static]
807 //=================================================================================
808 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
810 if ( !application() )
812 foreach ( GEOMGUI* lib, myGUIMap )
813 lib->OnMouseMove( e, application()->desktop(), w );
816 //=================================================================================
817 // function : GeometryGUI::OnMouseRelease()
818 // purpose : Manages mouse release events [static]
819 //=================================================================================
820 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
822 if ( !application() )
824 foreach ( GEOMGUI* lib, myGUIMap )
825 lib->OnMouseRelease( e, application()->desktop(), w );
828 //=================================================================================
829 // function : GeometryGUI::OnMousePress()
830 // purpose : Manage mouse press events [static]
831 //=================================================================================
832 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
834 if ( !application() )
836 foreach ( GEOMGUI* lib, myGUIMap )
837 lib->OnMousePress( e, application()->desktop(), w );
840 //=======================================================================
841 // function : createGeomAction
843 //=======================================================================
844 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
845 const int accel, const bool toggle, const QString& shortcutAction )
847 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
848 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
849 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
851 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
853 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
854 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
856 application()->desktop(),
858 this, SLOT( OnGUIEvent() ),
862 //=======================================================================
863 // function : createOriginAndBaseVectors
865 //=======================================================================
866 void GeometryGUI::createOriginAndBaseVectors()
868 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
869 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
871 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
875 _PTR(Study) studyDS = appStudy->studyDS();
876 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
877 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
878 if ( !aBasicOperations->_is_nil() ) {
879 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
880 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
881 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
882 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
883 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
884 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
886 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
887 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
888 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
889 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
890 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
892 getApp()->updateObjectBrowser( true );
898 //=======================================================================
899 // function : GeometryGUI::initialize()
900 // purpose : Called when GEOM module is created
901 //=======================================================================
902 void GeometryGUI::initialize( CAM_Application* app )
904 SalomeApp_Module::initialize( app );
906 // ----- create actions --------------
908 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
910 createGeomAction( GEOMOp::OpPoint, "POINT" );
911 createGeomAction( GEOMOp::OpLine, "LINE" );
912 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
913 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
914 createGeomAction( GEOMOp::OpArc, "ARC" );
915 createGeomAction( GEOMOp::OpCurve, "CURVE" );
916 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
917 createGeomAction( GEOMOp::OpVector, "VECTOR" );
918 createGeomAction( GEOMOp::OpPlane, "PLANE" );
919 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
920 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
921 createGeomAction( GEOMOp::OpSurfaceFromFace, "SURFACE_FROM_FACE" );
923 createGeomAction( GEOMOp::OpBox, "BOX" );
924 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
925 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
926 createGeomAction( GEOMOp::OpTorus, "TORUS" );
927 createGeomAction( GEOMOp::OpCone, "CONE" );
928 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
929 createGeomAction( GEOMOp::OpDisk, "DISK" );
931 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
932 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
933 createGeomAction( GEOMOp::OpFilling, "FILLING" );
934 createGeomAction( GEOMOp::OpPipe, "PIPE" );
935 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
936 createGeomAction( GEOMOp::OpThickness, "THICKNESS" );
938 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
939 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
940 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
941 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
942 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
944 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
945 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
947 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
949 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
950 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
952 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
953 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
954 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
956 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
958 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
959 createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" );
961 createGeomAction( GEOMOp::OpEdge, "EDGE" );
962 createGeomAction( GEOMOp::OpWire, "WIRE" );
963 createGeomAction( GEOMOp::OpFace, "FACE" );
964 createGeomAction( GEOMOp::OpShell, "SHELL" );
965 createGeomAction( GEOMOp::OpSolid, "SOLID" );
966 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
968 createGeomAction( GEOMOp::OpFuse, "FUSE" );
969 createGeomAction( GEOMOp::OpCommon, "COMMON" );
970 createGeomAction( GEOMOp::OpCut, "CUT" );
971 createGeomAction( GEOMOp::OpSection, "SECTION" );
973 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
974 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
975 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
976 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
977 createGeomAction( GEOMOp::OpScale, "SCALE" );
978 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
979 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
980 createGeomAction( GEOMOp::OpProjOnCyl, "PROJ_ON_CYL" );
981 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
982 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
983 createGeomAction( GEOMOp::OpExtension, "EXTENSION" );
985 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
986 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
987 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
988 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
989 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
990 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
991 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
992 createGeomAction( GEOMOp::OpTransferData, "TRANSFER_DATA" );
993 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
994 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
995 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
996 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
998 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
999 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
1000 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
1002 createGeomAction( GEOMOp::OpSewing, "SEWING" );
1003 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
1004 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
1005 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
1006 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
1007 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
1008 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
1009 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
1010 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
1011 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
1012 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
1013 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
1014 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1015 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1016 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1017 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1018 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1019 createGeomAction( GEOMOp::OpInspectObj, "INSPECT_OBJECT" );
1021 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1022 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1023 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1024 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1025 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1026 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1027 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1028 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1029 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1031 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1032 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1033 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1034 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1035 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1036 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1037 createGeomAction( GEOMOp::OpFastCheckInters, "FAST_CHECK_INTERSECTIONS" );
1038 createGeomAction( GEOMOp::OpShapeStatistics, "SHAPE_STATISTICS" );
1040 #ifdef _DEBUG_ // PAL16821
1041 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1044 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1045 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1046 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1047 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1048 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1049 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1050 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1051 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1052 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1053 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1054 createGeomAction( GEOMOp::OpSwitchName, "NAME_MODE");
1055 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1056 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1057 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1058 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1059 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1060 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1061 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1062 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1063 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1064 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1065 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1066 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1067 createGeomAction( GEOMOp::OpHide, "ERASE" );
1069 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1070 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1071 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1072 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1073 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1074 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1075 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1076 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1077 createGeomAction( GEOMOp::OpShowName, "POP_SHOW_NAME", "", 0, true );
1078 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1079 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1080 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1081 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1082 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1083 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1084 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1085 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1086 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1087 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1088 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1089 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1090 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1091 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1092 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1093 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1094 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1095 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1096 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1097 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1098 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1099 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1101 // Create actions for increase/decrease transparency shortcuts
1102 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1103 "Geometry:Increase transparency");
1104 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1105 "Geometry:Decrease transparency");
1107 // Create actions for increase/decrease number of isolines
1108 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1109 "Geometry:Increase number of isolines");
1110 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1111 "Geometry:Decrease number of isolines");
1113 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1114 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1115 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1116 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1117 //@@ 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 @@//
1119 // ---- create menus --------------------------
1121 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1123 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1124 createMenu( GEOMOp::OpDelete, editId, -1 );
1126 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1128 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1129 createMenu( GEOMOp::OpPoint, basicId, -1 );
1130 createMenu( GEOMOp::OpLine, basicId, -1 );
1131 createMenu( GEOMOp::OpCircle, basicId, -1 );
1132 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1133 createMenu( GEOMOp::OpArc, basicId, -1 );
1134 createMenu( GEOMOp::OpCurve, basicId, -1 );
1135 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1136 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1137 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1138 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1139 createMenu( GEOMOp::OpSurfaceFromFace, basicId, -1 );
1140 createMenu( separator(), basicId, -1 );
1141 createMenu( GEOMOp::OpVector, basicId, -1 );
1142 createMenu( GEOMOp::OpPlane, basicId, -1 );
1143 createMenu( GEOMOp::OpLCS, basicId, -1 );
1144 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1146 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1147 createMenu( GEOMOp::OpBox, primId, -1 );
1148 createMenu( GEOMOp::OpCylinder, primId, -1 );
1149 createMenu( GEOMOp::OpSphere, primId, -1 );
1150 createMenu( GEOMOp::OpTorus, primId, -1 );
1151 createMenu( GEOMOp::OpCone, primId, -1 );
1152 createMenu( GEOMOp::OpRectangle, primId, -1 );
1153 createMenu( GEOMOp::OpDisk, primId, -1 );
1154 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1156 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1157 createMenu( GEOMOp::OpPrism, genId, -1 );
1158 createMenu( GEOMOp::OpRevolution, genId, -1 );
1159 createMenu( GEOMOp::OpFilling, genId, -1 );
1160 createMenu( GEOMOp::OpPipe, genId, -1 );
1161 createMenu( GEOMOp::OpPipePath, genId, -1 );
1162 createMenu( GEOMOp::OpThickness, genId, -1 );
1164 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1165 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1166 //@@ 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 @@//
1168 createMenu( separator(), newEntId, -1 );
1170 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1171 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1172 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1173 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1174 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1175 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1177 createMenu( separator(), newEntId, -1 );
1179 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1180 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1181 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1183 createMenu( separator(), newEntId, -1 );
1185 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1186 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1187 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1188 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1189 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1191 createMenu( separator(), newEntId, -1 );
1193 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1195 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1196 createMenu( GEOMOp::OpEdge, buildId, -1 );
1197 createMenu( GEOMOp::OpWire, buildId, -1 );
1198 createMenu( GEOMOp::OpFace, buildId, -1 );
1199 createMenu( GEOMOp::OpShell, buildId, -1 );
1200 createMenu( GEOMOp::OpSolid, buildId, -1 );
1201 createMenu( GEOMOp::OpCompound, buildId, -1 );
1203 createMenu( separator(), newEntId, -1 );
1205 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1207 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1210 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1212 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1213 createMenu( GEOMOp::OpFuse, boolId, -1 );
1214 createMenu( GEOMOp::OpCommon, boolId, -1 );
1215 createMenu( GEOMOp::OpCut, boolId, -1 );
1216 createMenu( GEOMOp::OpSection, boolId, -1 );
1218 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1219 createMenu( GEOMOp::OpTranslate, transId, -1 );
1220 createMenu( GEOMOp::OpRotate, transId, -1 );
1221 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1222 createMenu( GEOMOp::OpMirror, transId, -1 );
1223 createMenu( GEOMOp::OpScale, transId, -1 );
1224 createMenu( GEOMOp::OpOffset, transId, -1 );
1225 createMenu( GEOMOp::OpProjection, transId, -1 );
1226 createMenu( GEOMOp::OpExtension, transId, -1 );
1227 createMenu( GEOMOp::OpProjOnCyl, transId, -1 );
1228 createMenu( separator(), transId, -1 );
1229 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1230 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1232 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1233 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1234 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1235 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1237 createMenu( separator(), operId, -1 );
1239 createMenu( GEOMOp::OpPartition, operId, -1 );
1240 createMenu( GEOMOp::OpArchimede, operId, -1 );
1241 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1242 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1243 createMenu( GEOMOp::OpTransferData, operId, -1 );
1245 createMenu( separator(), operId, -1 );
1247 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1248 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1249 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1250 createMenu( GEOMOp::OpChamfer, operId, -1 );
1251 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1252 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1253 //createMenu( GEOMOp::OpClipping, operId, -1 );
1255 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1256 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1257 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1258 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1259 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1260 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1261 createMenu( GEOMOp::OpSewing, repairId, -1 );
1262 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1263 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1264 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1265 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1266 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1267 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1268 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1269 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1270 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1271 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1272 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1274 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1275 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1276 createMenu( GEOMOp::OpProperties, measurId, -1 );
1277 createMenu( separator(), measurId, -1 );
1278 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1279 createMenu( GEOMOp::OpInertia, measurId, -1 );
1280 createMenu( GEOMOp::OpNormale, measurId, -1 );
1281 createMenu( separator(), measurId, -1 );
1282 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1283 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1284 createMenu( separator(), measurId, -1 );
1286 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1287 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1288 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1289 createMenu( GEOMOp::OpAngle, dimId, -1 );
1290 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1292 createMenu( separator(), measurId, -1 );
1293 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1294 createMenu( separator(), measurId, -1 );
1295 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1296 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1297 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1298 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1299 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1300 createMenu( GEOMOp::OpFastCheckInters, measurId, -1 );
1301 createMenu( GEOMOp::OpInspectObj, measurId, -1 );
1302 createMenu( GEOMOp::OpShapeStatistics, measurId, -1 );
1304 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1305 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1306 createMenu( separator(), toolsId, -1 );
1307 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1310 createMenu( separator(), toolsId, -1 );
1311 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1312 createMenu( separator(), toolsId, -1 );
1314 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1315 createMenu( separator(), viewId, -1 );
1317 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1318 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1319 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1320 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1321 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1322 createMenu( separator(), dispmodeId, -1 );
1323 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1324 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1325 createMenu( GEOMOp::OpSwitchName, dispmodeId, -1 );
1327 createMenu( separator(), viewId, -1 );
1328 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1329 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1330 createMenu( separator(), viewId, -1 );
1331 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1332 createMenu( separator(), viewId, -1 );
1336 because of these items are accessible through object browser and viewers
1337 we have removed they from main menu
1339 createMenu( GEOMOp::OpShow, viewId, -1 );
1340 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1341 createMenu( GEOMOp::OpHide, viewId, -1 );
1344 // ---- create toolbars --------------------------
1346 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1347 createTool( GEOMOp::OpPoint, basicTbId );
1348 createTool( GEOMOp::OpLine, basicTbId );
1349 createTool( GEOMOp::OpCircle, basicTbId );
1350 createTool( GEOMOp::OpEllipse, basicTbId );
1351 createTool( GEOMOp::OpArc, basicTbId );
1352 createTool( GEOMOp::OpCurve, basicTbId );
1353 createTool( GEOMOp::OpVector, basicTbId );
1354 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1355 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1356 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1357 createTool( GEOMOp::OpIsoline, basicTbId );
1358 createTool( GEOMOp::OpSurfaceFromFace, basicTbId );
1359 createTool( GEOMOp::OpPlane, basicTbId );
1360 createTool( GEOMOp::OpLCS, basicTbId );
1361 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1363 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1364 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1365 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1367 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1368 createTool( GEOMOp::OpBox, primTbId );
1369 createTool( GEOMOp::OpCylinder, primTbId );
1370 createTool( GEOMOp::OpSphere, primTbId );
1371 createTool( GEOMOp::OpTorus, primTbId );
1372 createTool( GEOMOp::OpCone, primTbId );
1373 createTool( GEOMOp::OpRectangle, primTbId );
1374 createTool( GEOMOp::OpDisk, primTbId );
1375 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1377 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1378 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1379 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1381 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1382 createTool( GEOMOp::OpFuse, boolTbId );
1383 createTool( GEOMOp::OpCommon, boolTbId );
1384 createTool( GEOMOp::OpCut, boolTbId );
1385 createTool( GEOMOp::OpSection, boolTbId );
1387 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1388 createTool( GEOMOp::OpPrism, genTbId );
1389 createTool( GEOMOp::OpRevolution, genTbId );
1390 createTool( GEOMOp::OpFilling, genTbId );
1391 createTool( GEOMOp::OpPipe, genTbId );
1392 createTool( GEOMOp::OpPipePath, genTbId );
1393 createTool( GEOMOp::OpThickness, genTbId );
1395 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1396 createTool( GEOMOp::OpTranslate, transTbId );
1397 createTool( GEOMOp::OpRotate, transTbId );
1398 createTool( GEOMOp::OpChangeLoc, transTbId );
1399 createTool( GEOMOp::OpMirror, transTbId );
1400 createTool( GEOMOp::OpScale, transTbId );
1401 createTool( GEOMOp::OpOffset, transTbId );
1402 createTool( GEOMOp::OpProjection, transTbId );
1403 createTool( GEOMOp::OpExtension, transTbId );
1404 createTool( GEOMOp::OpProjOnCyl, transTbId );
1405 createTool( separator(), transTbId );
1406 createTool( GEOMOp::OpMultiTranslate, transTbId );
1407 createTool( GEOMOp::OpMultiRotate, transTbId );
1409 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1410 createTool( GEOMOp::OpExplode, operTbId );
1411 createTool( GEOMOp::OpPartition, operTbId );
1412 createTool( GEOMOp::OpArchimede, operTbId );
1413 createTool( GEOMOp::OpShapesOnShape, operTbId );
1414 createTool( GEOMOp::OpSharedShapes, operTbId );
1415 createTool( GEOMOp::OpTransferData, operTbId );
1417 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1418 createTool( GEOMOp::OpFillet1d, featTbId );
1419 createTool( GEOMOp::OpFillet2d, featTbId );
1420 createTool( GEOMOp::OpFillet3d, featTbId );
1421 createTool( GEOMOp::OpChamfer, featTbId );
1422 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1423 createTool( GEOMOp::OpExtrudedCut, featTbId );
1425 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1426 createTool( GEOMOp::OpEdge, buildTbId );
1427 createTool( GEOMOp::OpWire, buildTbId );
1428 createTool( GEOMOp::OpFace, buildTbId );
1429 createTool( GEOMOp::OpShell, buildTbId );
1430 createTool( GEOMOp::OpSolid, buildTbId );
1431 createTool( GEOMOp::OpCompound, buildTbId );
1433 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1434 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1435 createTool( GEOMOp::OpProperties, measureTbId );
1436 createTool( GEOMOp::OpCenterMass, measureTbId );
1437 createTool( GEOMOp::OpInertia, measureTbId );
1438 createTool( GEOMOp::OpNormale, measureTbId );
1439 createTool( separator(), measureTbId );
1440 createTool( GEOMOp::OpBoundingBox, measureTbId );
1441 createTool( GEOMOp::OpMinDistance, measureTbId );
1442 createTool( GEOMOp::OpAngle, measureTbId );
1443 createTool( GEOMOp::OpTolerance , measureTbId );
1444 createTool( separator(), measureTbId );
1445 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1446 createTool( GEOMOp::OpFreeFaces, measureTbId );
1447 createTool( separator(), measureTbId );
1448 createTool( GEOMOp::OpWhatIs, measureTbId );
1449 createTool( GEOMOp::OpCheckShape, measureTbId );
1450 createTool( GEOMOp::OpCheckCompound, measureTbId );
1451 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1452 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1453 createTool( GEOMOp::OpFastCheckInters, measureTbId );
1455 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1456 createTool( GEOMOp::OpPictureImport, picturesTbId );
1458 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1461 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1462 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1463 //@@ 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 @@//
1465 // ---- create popup menus --------------------------
1467 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1468 QString clientOCC = "(client='OCCViewer')";
1469 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1470 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1472 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1473 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1474 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1475 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1477 QString autoColorPrefix =
1478 "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') and type='Shape' and selcount=1";
1480 QtxPopupMgr* mgr = popupMgr();
1482 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1483 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1484 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1485 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1486 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1487 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1488 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1489 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1491 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1492 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1493 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1494 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1495 mgr->insert( separator(), -1, -1 ); // -----------
1497 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1498 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1499 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1500 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1501 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1502 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1503 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1504 mgr->insert( separator(), -1, -1 ); // -----------
1505 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1506 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1507 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1508 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1509 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1510 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1511 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1512 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1513 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1514 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1515 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1516 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1517 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1518 mgr->insert( separator(), dispmodeId, -1 );
1519 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1520 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1521 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1522 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1523 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1524 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1525 mgr->insert( action( GEOMOp::OpShowName ), dispmodeId, -1 ); // show name
1526 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1527 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK + " and isNameMode", QtxPopupMgr::ToggleRule );
1528 mgr->insert( separator(), -1, -1 ); // -----------
1530 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1531 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1532 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1533 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1534 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1535 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1536 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1537 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1538 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1539 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1541 // material properties
1542 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1543 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1546 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1547 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1549 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1550 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1551 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1553 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1554 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1556 mgr->insert( separator(), -1, -1 ); // -----------
1557 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1558 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1559 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1560 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1561 mgr->insert( separator(), -1, -1 ); // -----------
1563 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1564 onlyComponent = "((type='Component') and selcount=1)",
1565 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1566 types = "'Shape' 'Group' 'FieldStep'";
1568 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1569 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1571 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1572 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1574 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1575 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1577 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1579 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1580 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1581 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1582 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1583 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1584 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1585 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1586 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1587 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1588 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1589 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1590 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1591 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1592 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1593 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1594 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1595 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1596 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1597 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1598 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1599 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1600 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1601 mgr->insert( separator(), selectonlyId, -1);
1602 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1603 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1604 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1605 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1606 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1607 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1608 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1610 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1612 mgr->insert( separator(), -1, -1 ); // -----------
1613 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1614 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1615 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1616 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1618 mgr->insert( separator(), -1, -1 ); // -----------
1619 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1620 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1622 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1623 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1625 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1626 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1628 mgr->insert( separator(), -1, -1 ); // -----------
1629 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1630 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1632 mgr->insert( separator(), -1, -1 ); // -----------
1633 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1634 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1636 mgr->insert( separator(), -1, -1 ); // -----------
1637 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1638 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1640 mgr->insert( separator(), -1, -1 ); // -----------
1641 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1642 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1644 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1646 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1648 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1649 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1650 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1653 // create plugin actions and menus
1657 //=======================================================================
1658 // function : GeometryGUI::addPluginActions()
1660 //=======================================================================
1661 void GeometryGUI::addPluginActions()
1664 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1665 if (!resMgr) return;
1667 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1668 if (!appStudy) return;
1670 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1672 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1674 int id = GEOMOp::OpLastOperationID; // TODO?
1677 GEOMUtils::PluginInfo::const_iterator it;
1678 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1679 // bind action lib and label to its ID for activateOperation() method proper work
1680 GEOMUtils::PluginData pdata = (*it);
1681 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1682 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1683 std::list<GEOMUtils::ActionData>::const_iterator ait;
1684 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1685 GEOMUtils::ActionData adata = (*ait);
1688 if ( !adata.icon.empty() )
1689 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1691 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1692 QString actionName = smenus.last();
1693 actionName = actionName.toUpper().prepend( "MEN_" );
1694 smenus.removeLast();
1696 // path to action in toolbar
1697 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1698 QString actionTool = stools.last();
1699 actionTool = actionTool.toUpper().prepend( "TOP_" );
1700 stools.removeLast();
1702 QString actionStat = adata.statusText.c_str();
1703 actionStat = actionStat.toUpper().prepend( "STB_" );
1705 createAction( id, // ~ adata.label
1706 tr( actionTool.toLatin1().constData() ),
1708 tr( actionName.toLatin1().constData() ),
1709 tr( actionStat.toLatin1().constData() ),
1710 QKeySequence( tr( adata.accel.c_str() ) ),
1711 application()->desktop(),
1713 this, SLOT( OnGUIEvent() ),
1714 QString() /*shortcutAction*/ );
1717 foreach ( QString subMenu, smenus ) {
1718 QStringList subMenuList = subMenu.split( ":" );
1719 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1720 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1721 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1723 createMenu( id, menuId, -1 );
1725 if ( !stools.isEmpty() ) {
1726 QString subTool = stools[0];
1727 subTool = subTool.toUpper().prepend( "TOOL_" );
1728 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1729 createTool(id, toolId);
1732 // add action id to map
1733 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1734 myPluginActions[id] = anAction;
1741 //=======================================================================
1742 // function : GeometryGUI::activateModule()
1743 // purpose : Called when GEOM module is activated
1744 //=======================================================================
1745 bool GeometryGUI::activateModule( SUIT_Study* study )
1747 if ( CORBA::is_nil( myComponentGeom ) )
1750 bool res = SalomeApp_Module::activateModule( study );
1754 setMenuShown( true );
1755 setToolShown( true );
1757 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1758 PyGILState_STATE gstate = PyGILState_Ensure();
1759 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1760 if ( !pluginsmanager ) {
1764 PyObjWrapper result =
1765 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1766 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1767 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1771 PyGILState_Release(gstate);
1772 // end of GEOM plugins loading
1774 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1775 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1777 // Reset actions accelerator keys
1778 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1780 GUIMap::Iterator it;
1781 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1782 it.value()->activate( application()->desktop() );
1784 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1786 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1787 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1788 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1790 if ( !myCreationInfoWdg )
1791 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1792 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1793 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1795 if ( !myTextTreeWdg )
1796 myTextTreeWdg = new GEOMGUI_TextTreeWdg( getApp() );
1797 getApp()->insertDockWindow( myTextTreeWdg->getWinID(), myTextTreeWdg );
1798 getApp()->placeDockWindow( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
1801 SALOME_ListIO selected;
1802 sm->selectedObjects( selected );
1803 sm->clearSelected();
1805 SUIT_ViewManager* vm;
1806 ViewManagerList OCCViewManagers, VTKViewManagers;
1808 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1809 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1810 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1811 onViewManagerAdded(vm);
1813 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1814 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1815 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1816 onViewManagerAdded(vm);
1818 sm->setSelectedObjects( selected, true ); //NPAL 19674
1820 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1822 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1824 // 0020836 (Basic vectors and origin)
1825 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1826 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1827 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1829 _PTR(Study) studyDS = appStudy->studyDS();
1831 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1832 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1833 createOriginAndBaseVectors();
1841 //=======================================================================
1842 // function : GeometryGUI::deactivateModule()
1843 // purpose : Called when GEOM module is deactivated
1844 //=======================================================================
1845 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1847 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1849 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1851 setMenuShown( false );
1852 setToolShown( false );
1854 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1855 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1857 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1859 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1860 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1861 if ( myCreationInfoWdg ) {
1862 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1863 myCreationInfoWdg = 0;
1865 if ( myTextTreeWdg ) {
1866 getApp()->removeDockWindow( myTextTreeWdg->getWinID() );
1867 disconnect( application(), 0, myTextTreeWdg, 0 );
1871 EmitSignalCloseAllDialogs();
1873 GUIMap::Iterator it;
1874 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1875 it.value()->deactivate();
1877 // Unset actions accelerator keys
1878 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1880 qDeleteAll(myOCCSelectors);
1881 myOCCSelectors.clear();
1882 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1884 qDeleteAll(myVTKSelectors);
1885 myVTKSelectors.clear();
1886 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1888 return SalomeApp_Module::deactivateModule( study );
1891 //=======================================================================
1892 // function : onWindowActivated()
1893 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1894 //=======================================================================
1895 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1900 const bool ViewOCC = ( win->getViewManager() ? win->getViewManager()->getType() == OCCViewer_Viewer::Type() : false );
1901 //const bool ViewVTK = ( win->getViewManager() ? win->getViewManager()->getType() == SVTK_Viewer::Type() : false );
1903 // disable non-OCC viewframe menu commands
1904 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1905 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1906 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1907 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1908 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1909 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1910 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1912 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1913 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1914 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1915 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1917 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1920 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1922 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1923 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
1924 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1925 if ( myCreationInfoWdg )
1926 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1927 if ( myTextTreeWdg )
1928 mappa.insert( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
1931 void GeometryGUI::viewManagers( QStringList& lst ) const
1933 lst.append( OCCViewer_Viewer::Type() );
1936 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1938 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1940 qDebug( "connect" );
1941 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1942 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1943 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1944 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1945 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1946 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1947 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1948 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1950 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1951 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1953 // disable OCC selectors
1954 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1955 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1956 while ( itOCCSel.hasNext() )
1957 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1958 sr->setEnabled(true);
1960 else if ( vm->getType() == SVTK_Viewer::Type() )
1962 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1963 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1965 // disable VTK selectors
1966 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1967 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1968 while ( itVTKSel.hasNext() )
1969 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1970 sr->setEnabled(true);
1974 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1976 SUIT_ViewModel* viewer = vm->getViewModel();
1977 if ( vm->getType() == OCCViewer_Viewer::Type() )
1979 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1980 while ( itOCCSel.hasNext() )
1981 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1982 if ( sr->viewer() == viewer )
1984 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1988 if ( vm->getType() == SVTK_Viewer::Type() )
1990 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1991 while ( itVTKSel.hasNext() )
1992 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1993 if ( sr->viewer() == viewer )
1995 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2001 //================================================================================
2003 * \brief Slot called when selection changed. Shows creation info of a selected object
2005 //================================================================================
2007 void GeometryGUI::updateCreationInfo()
2009 if ( myCreationInfoWdg )
2010 myCreationInfoWdg->clear();
2012 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2013 // if ( !myCreationInfoWdg->isVisible() )
2016 // look for a sole selected GEOM_Object
2017 GEOM::GEOM_BaseObject_var geomObj;
2019 SALOME_ListIO selected;
2020 getApp()->selectionMgr()->selectedObjects( selected );
2022 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2023 SALOME_ListIteratorOfListIO selIt( selected );
2024 for ( ; selIt.More(); selIt.Next() )
2026 Handle(SALOME_InteractiveObject) io = selIt.Value();
2027 if ( !io->hasEntry() ) continue;
2028 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2029 if ( !sobj ) continue;
2030 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2031 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2032 if ( !gobj->_is_nil() )
2034 if ( !geomObj->_is_nil() )
2035 return; // several GEOM objects selected
2039 if ( geomObj->_is_nil() ) return;
2041 // pass creation info of geomObj to myCreationInfoWdg
2043 if ( myCreationInfoWdg ) {
2045 QString operationName;
2046 myCreationInfoWdg->setOperation( icon, operationName );
2050 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2052 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2053 QString name = info->operationName.in();
2054 if ( !name.isEmpty() ) {
2056 QString plugin_name;
2057 for ( size_t i = 0; i < info->params.length(); ++i ) {
2058 myCreationInfoWdg->addParam( info->params[i].name.in(),
2059 info->params[i].value.in() );
2060 QString value = info->params[i].name.in();
2061 if( value == PLUGIN_NAME ) {
2062 plugin_name = info->params[i].value.in();
2065 QString prefix = plugin_name.isEmpty() ? "GEOM" : plugin_name;
2066 icon = resMgr->loadPixmap( prefix, tr( ("ICO_"+name).toLatin1().constData() ), false );
2067 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2068 if ( operationName.startsWith( "MEN_" ))
2069 operationName = name; // no translation
2070 myCreationInfoWdg->setOperation( icon, operationName );
2079 void GeometryGUI::onAutoBringToFront()
2081 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2082 if( !isAutoBringToFront )
2085 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2086 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2089 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2090 if (!appStudy) return;
2092 GEOM_Displayer displayer( appStudy );
2094 SALOME_View* window = displayer.GetActiveView();
2095 if ( !window ) return;
2097 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2099 SALOME_ListIO selected;
2100 getApp()->selectionMgr()->selectedObjects( selected );
2101 if (!myTopLevelIOList.IsEmpty())
2103 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2105 Handle( SALOME_InteractiveObject ) io = It.Value();
2106 bool isSelected = false;
2107 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2109 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2110 if( io->isSame( sel_io ) )
2113 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2115 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2116 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2121 myTopLevelIOList.Assign(selected);
2122 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2124 Handle( SALOME_InteractiveObject ) io = It.Value();
2125 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2126 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2129 displayer.UpdateViewer();
2130 GeometryGUI::Modified();
2133 void GeometryGUI::updateFieldColorScale()
2135 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2137 GEOM_Displayer aDisplayer( aStudy );
2138 aDisplayer.UpdateColorScale();
2142 QString GeometryGUI::engineIOR() const
2144 if ( !CORBA::is_nil( GetGeomGen() ) )
2145 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2149 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2150 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2152 theWidth = theHeight = 0;
2154 Handle(TColStd_HArray1OfByte) aTexture;
2157 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2158 aTexture = aTextureMap[ theId ];
2159 if ( aTexture.IsNull() ) {
2160 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2161 if ( !aInsOp->_is_nil() ) {
2162 CORBA::Long aWidth, aHeight;
2163 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2164 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2166 theHeight = aHeight;
2168 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2170 for (int i = 0; i < aStream->length(); i++)
2171 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2172 aTextureMap[ theId ] = aTexture;
2180 LightApp_Selection* GeometryGUI::createSelection() const
2182 return new GEOMGUI_Selection();
2185 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2187 SalomeApp_Module::contextMenuPopup( client, menu, title );
2189 getApp()->selectionMgr()->selectedObjects( lst );
2191 //Add submenu for predefined materials
2192 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2193 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2194 QtxPopupMgr* mgr = popupMgr();
2195 //get parrent for submenu
2196 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2198 QMenu* oldMenu = act->menu() ;
2203 QMenu* matMenu = new QMenu();
2204 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2206 //Get current material model for the object
2208 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2209 if ( anApp && anApp->activeViewManager() ) {
2210 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2212 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2215 QString curModel = "";
2216 if ( v.canConvert<QString>() ) curModel = v.toString();
2217 // get list of all predefined materials
2218 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2220 foreach ( QString material, materials )
2222 QAction* menAct = matMenu->addAction( material );
2223 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2224 signalMapper->setMapping( menAct, material );
2225 menAct->setCheckable( true );
2226 // Set checked if this material is current
2227 Material_Model aModel;
2228 aModel.fromResources( material );
2229 if ( !found && aModel.toProperties() == curModel ) {
2230 menAct->setChecked( true );
2234 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2235 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2236 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2237 this, SLOT( OnSetMaterial( const QString & ) ) );
2238 act->setMenu( matMenu );
2242 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2243 Handle(SALOME_InteractiveObject) io = lst.First();
2244 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2245 _PTR(Study) study = appStudy->studyDS();
2246 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2248 QString aName = QString( obj->GetName().c_str() );
2249 aName.remove( QRegExp("\\s+$") );
2255 void GeometryGUI::OnSetMaterial(const QString& theName)
2257 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2261 void GeometryGUI::createPreferences()
2263 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2265 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2267 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2268 setPreferenceProperty( genGroup, "columns", 2 );
2270 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2271 LightApp_Preferences::Selector,
2272 "Geometry", "display_mode" );
2274 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2275 LightApp_Preferences::Color, "Geometry", "shading_color" );
2277 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2278 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2280 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2281 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2283 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2284 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2286 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2287 LightApp_Preferences::Color, "Geometry", "line_color" );
2289 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2290 LightApp_Preferences::Color, "Geometry", "point_color" );
2292 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2293 LightApp_Preferences::Color, "Geometry", "isos_color" );
2295 addPreference( tr( "PREF_LABEL_COLOR" ), genGroup,
2296 LightApp_Preferences::Color, "Geometry", "label_color" );
2298 addPreference( "", genGroup, LightApp_Preferences::Space );
2300 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2301 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2303 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2304 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2306 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2307 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2309 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2310 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2312 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2313 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2315 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2316 LightApp_Preferences::Selector,
2317 "Geometry", "material" );
2319 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2320 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2326 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2327 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2329 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2330 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2332 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2333 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2335 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2336 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2338 for (int i = 0; i < nb; i++) {
2339 setPreferenceProperty( wd[i], "min", 1 );
2340 setPreferenceProperty( wd[i], "max", 5 );
2343 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2344 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2346 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2347 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2349 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2350 setPreferenceProperty( aDimGroupId, "columns", 2 );
2352 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2353 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2355 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2356 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2358 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2359 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2361 int aDimFontId = addPreference( tr( "PREF_DIMENSIONS_FONT" ), aDimGroupId, LightApp_Preferences::Font, "Geometry", "dimensions_font" );
2363 int f = QtxFontEdit::Family | QtxFontEdit::Size;
2364 setPreferenceProperty( aDimFontId, "features", f );
2365 setPreferenceProperty( aDimFontId, "mode", QtxFontEdit::Custom );
2367 Handle(Font_FontMgr) fmgr = Font_FontMgr::GetInstance();
2368 QString aFontFile = "";
2369 resMgr->value("resources", "GEOM", aFontFile);
2370 aFontFile = aFontFile + QDir::separator() + "Y14.5M-2009.ttf";
2371 // add enginier font into combobox
2372 int fontID = QFontDatabase::addApplicationFont( aFontFile );
2373 Handle(Font_SystemFont) sf = new Font_SystemFont(
2374 new TCollection_HAsciiString("Y14.5M-2009"),
2376 new TCollection_HAsciiString(aFontFile.toLatin1().data()) );
2377 // register font in OCC font manager
2378 fmgr->RegisterFont( sf, Standard_False );
2380 // get list of supported fonts by OCC
2381 QStringList anOCCFonts;
2382 TColStd_SequenceOfHAsciiString theFontsNames;
2383 fmgr->GetAvailableFontsNames( theFontsNames );
2384 for(Standard_Integer i=1; i<=theFontsNames.Length(); i++) {
2385 Handle(TCollection_HAsciiString) str = theFontsNames(i);
2386 anOCCFonts << str->ToCString();
2388 anOCCFonts.removeDuplicates();
2389 // set the supported fonts into combobox to use its only
2390 setPreferenceProperty( aDimFontId, "fonts", anOCCFonts );
2392 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2393 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2395 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2396 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2397 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2399 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2400 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2402 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2403 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2405 QStringList aListOfLengthUnits;
2406 aListOfLengthUnits << "m";
2407 aListOfLengthUnits << "cm";
2408 aListOfLengthUnits << "mm";
2409 aListOfLengthUnits << "in.";
2410 aListOfLengthUnits << "ft.";
2412 QStringList aListOfAngUnits;
2413 aListOfAngUnits << "rad";
2414 aListOfAngUnits << "deg";
2416 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2417 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2419 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2420 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2422 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2423 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2425 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2426 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2427 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2429 addPreference( tr( "PREF_DIMENSIONS_USE_TEXT3D" ), aDimGroupId,
2430 LightApp_Preferences::Bool, "Geometry", "dimensions_use_text3d" );
2432 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2433 setPreferenceProperty( isoGroup, "columns", 2 );
2434 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2435 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2436 setPreferenceProperty( isoU, "min", 0 );
2437 setPreferenceProperty( isoU, "max", 100000 );
2438 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2439 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2440 setPreferenceProperty( isoV, "min", 0 );
2441 setPreferenceProperty( isoV, "max", 100000 );
2443 // Quantities with individual precision settings
2444 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2445 setPreferenceProperty( precGroup, "columns", 2 );
2447 const int nbQuantities = 8;
2448 int prec[nbQuantities], ii = 0;
2449 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2450 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2451 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2452 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2453 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2454 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2455 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2456 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2457 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2458 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2459 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2460 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2461 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2462 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2463 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2464 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2466 // Set property for precision value for spinboxes
2467 for ( ii = 0; ii < nbQuantities; ii++ ){
2468 setPreferenceProperty( prec[ii], "min", -14 );
2469 setPreferenceProperty( prec[ii], "max", 14 );
2470 setPreferenceProperty( prec[ii], "precision", 2 );
2473 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2474 setPreferenceProperty( VertexGroup, "columns", 2 );
2476 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2477 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2479 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2480 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2482 // Set property for default display mode
2483 QStringList aModesList;
2484 aModesList.append( tr("MEN_WIREFRAME") );
2485 aModesList.append( tr("MEN_SHADING") );
2486 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2487 aModesList.append( tr("MEN_TEXTURE") );
2489 QList<QVariant> anIndexesList;
2490 anIndexesList.append(0);
2491 anIndexesList.append(1);
2492 anIndexesList.append(2);
2493 anIndexesList.append(3);
2495 setPreferenceProperty( dispmode, "strings", aModesList );
2496 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2498 // Set property for top level display mode
2499 QStringList aTopModesList;
2500 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2501 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2502 aTopModesList.append( tr("MEN_WIREFRAME") );
2503 aTopModesList.append( tr("MEN_SHADING") );
2504 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2506 QList<QVariant> aTopIndexesList;
2507 aTopIndexesList.append(0);
2508 aTopIndexesList.append(1);
2509 aTopIndexesList.append(2);
2510 aTopIndexesList.append(3);
2511 aTopIndexesList.append(4);
2513 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2514 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2516 // Set property for step value for spinboxes
2517 setPreferenceProperty( step, "min", 1 );
2518 setPreferenceProperty( step, "max", 10000 );
2519 setPreferenceProperty( step, "precision", 3 );
2521 // Set property for trandparency value for spinboxes
2522 setPreferenceProperty( transparency, "min", 0 );
2523 setPreferenceProperty( transparency, "max", 100 );
2525 // Set property for deflection value for spinboxes
2526 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2527 setPreferenceProperty( defl, "max", 1.0 );
2528 setPreferenceProperty( defl, "step", 1.0e-04 );
2529 setPreferenceProperty( defl, "precision", 6 );
2531 // Set property for default material
2532 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2534 // Set property vertex marker type
2535 QList<QVariant> aMarkerTypeIndicesList;
2536 QList<QVariant> aMarkerTypeIconsList;
2538 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2539 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2540 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2541 aMarkerTypeIndicesList << (i-1);
2542 aMarkerTypeIconsList << pixmap;
2545 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2546 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2548 // Set property for vertex marker scale
2549 QList<QVariant> aMarkerScaleIndicesList;
2550 QStringList aMarkerScaleValuesList;
2552 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2553 aMarkerScaleIndicesList << iii;
2554 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2557 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2558 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2560 // Scalar bar for field step presentation
2561 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2562 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2564 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2565 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2566 setPreferenceProperty( sbXPosition, "min", 0 );
2567 setPreferenceProperty( sbXPosition, "max", 1 );
2568 setPreferenceProperty( sbXPosition, "step", 0.05 );
2570 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2571 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2572 setPreferenceProperty( sbYPosition, "min", 0 );
2573 setPreferenceProperty( sbYPosition, "max", 1 );
2574 setPreferenceProperty( sbYPosition, "step", 0.05 );
2576 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2577 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2578 setPreferenceProperty( sbWidth, "min", 0 );
2579 setPreferenceProperty( sbWidth, "max", 1 );
2580 setPreferenceProperty( sbWidth, "step", 0.05 );
2582 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2583 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2584 setPreferenceProperty( sbHeight, "min", 0 );
2585 setPreferenceProperty( sbHeight, "max", 1 );
2586 setPreferenceProperty( sbHeight, "step", 0.05 );
2588 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2589 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2590 setPreferenceProperty( sbTextHeight, "min", 6 );
2591 setPreferenceProperty( sbTextHeight, "max", 24 );
2592 setPreferenceProperty( sbTextHeight, "step", 1 );
2594 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2595 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2596 setPreferenceProperty( sbNbIntervals, "min", 2 );
2597 setPreferenceProperty( sbNbIntervals, "max", 64 );
2598 setPreferenceProperty( sbNbIntervals, "step", 1 );
2600 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2601 setPreferenceProperty( originGroup, "columns", 2 );
2603 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2604 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2605 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2606 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2608 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2609 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2611 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2612 setPreferenceProperty( operationsGroup, "columns", 2 );
2614 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2615 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2617 addPreference( tr( "PREF_HIDE_INPUT_OBJECT" ), operationsGroup,
2618 LightApp_Preferences::Bool, "Geometry", "hide_input_object" );
2620 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2622 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2624 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2625 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2627 QStringList aHierarchyTypeList;
2628 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2629 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2630 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2632 QList<QVariant> aHierarchyTypeIndexesList;
2633 aHierarchyTypeIndexesList.append(0);
2634 aHierarchyTypeIndexesList.append(1);
2635 aHierarchyTypeIndexesList.append(2);
2637 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2638 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2640 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2641 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2643 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2645 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2646 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2648 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2649 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2650 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2651 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2652 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2653 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2654 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2655 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2657 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2658 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2659 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2660 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2661 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2662 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2669 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2671 if (section == "Geometry") {
2672 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2673 if (param == QString("SettingsGeomStep")) {
2674 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2675 EmitSignalDefaultStepValueChanged(spin_step);
2677 else if (param == QString("toplevel_color")) {
2678 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2679 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2681 else if (param == QString("toplevel_dm")) {
2682 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2684 else if (param == QString("scalar_bar_x_position") ||
2685 param == QString("scalar_bar_y_position") ||
2686 param == QString("scalar_bar_width") ||
2687 param == QString("scalar_bar_height") ||
2688 param == QString("scalar_bar_text_height") ||
2689 param == QString("scalar_bar_nb_intervals")) {
2690 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2692 GEOM_Displayer aDisplayer( aStudy );
2693 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2694 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2697 else if ( param == QString("dimensions_color") ||
2698 param == QString("dimensions_line_width") ||
2699 param == QString("dimensions_font") ||
2700 param == QString("dimensions_arrow_length") ||
2701 param == QString("dimensions_show_units") ||
2702 param == QString("dimensions_length_units") ||
2703 param == QString("dimensions_angle_units") ||
2704 param == QString("dimensions_use_text3d") ||
2705 param == QString("label_color") )
2707 SalomeApp_Application* anApp = getApp();
2713 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2719 GEOM_Displayer aDisplayer( aStudy );
2721 ViewManagerList aVMs;
2722 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2723 ViewManagerList::Iterator anIt = aVMs.begin();
2724 for ( ; anIt != aVMs.end(); ++anIt )
2726 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2732 SALOME_ListIO aVisible;
2733 aViewer->GetVisible( aVisible );
2734 aDisplayer.Redisplay( aVisible, false, aViewer );
2736 if ( param == QString( "label_color" ) ) {
2737 ViewManagerList aVMsVTK;
2738 anApp->viewManagers( SVTK_Viewer::Type(), aVMsVTK );
2739 ViewManagerList::Iterator anIt = aVMsVTK.begin();
2740 for ( ; anIt != aVMsVTK.end(); ++anIt )
2742 SVTK_Viewer* aViewer = dynamic_cast<SVTK_Viewer*>( (*anIt)->getViewModel() );
2747 SALOME_ListIO aVisible;
2748 aViewer->GetVisible( aVisible );
2749 aDisplayer.Redisplay( aVisible, false, aViewer );
2752 aDisplayer.UpdateViewer();
2754 else if ( param.startsWith( "dependency_tree") )
2755 emit SignalDependencyTreeParamChanged( section, param );
2759 LightApp_Displayer* GeometryGUI::displayer()
2762 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2766 void GeometryGUI::setLocalSelectionMode(const int mode)
2768 myLocalSelectionMode = mode;
2771 int GeometryGUI::getLocalSelectionMode() const
2773 return myLocalSelectionMode;
2776 const char gSeparator = '_'; // character used to separate parameter names
2777 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2780 * \brief Store visual parameters
2782 * This method is called just before the study document is saved.
2783 * Store visual parameters in AttributeParameter attribute(s)
2785 void GeometryGUI::storeVisualParameters (int savePoint)
2787 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2788 if ( !appStudy || !appStudy->studyDS() )
2790 _PTR(Study) studyDS = appStudy->studyDS();
2792 // componentName is used for encoding of entries when storing them in IParameters
2793 std::string componentName = myComponentGeom->ComponentDataType();
2794 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2795 //if (!aSComponent) return;
2798 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2799 componentName.c_str(),
2801 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2803 QSet<QString> anEntriesToStoreShared;
2804 QList<SUIT_ViewManager*> lst;
2805 QList<SUIT_ViewManager*>::Iterator it;
2807 // main cycle to store parameters of displayed objects
2809 getApp()->viewManagers(lst);
2810 for (it = lst.begin(); it != lst.end(); it++) {
2811 SUIT_ViewManager* vman = *it;
2812 QString vType = vman->getType();
2813 int aMgrId = vman->getGlobalId();
2814 // saving VTK actors properties
2815 QVector<SUIT_ViewWindow*> views = vman->getViews();
2816 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2817 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
2818 ObjMap::ConstIterator o_it = anObjects.begin();
2819 for (; o_it != anObjects.end(); o_it++) {
2820 const PropMap& aProps = o_it.value();
2822 //Check that object exists in the study
2823 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2824 if ( !obj || !(aProps.count() > 0))
2826 // entry is "encoded" = it does NOT contain component adress, since it is a
2827 // subject to change on next component loading
2829 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2831 _PTR(GenericAttribute) anAttr;
2832 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2835 // remember entry of object to store shared GEOM properties
2836 // (e.g. dimension properties).
2837 if ( vType == OCCViewer_Viewer::Type() )
2839 anEntriesToStoreShared.insert( o_it.key() );
2842 QString param, occParam = vType;
2843 occParam += GEOM::sectionSeparator();
2844 occParam += QString::number(aMgrId);
2845 occParam += GEOM::sectionSeparator();
2847 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2848 param = occParam + GEOM::propertyName( GEOM::Visibility );
2849 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2852 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2853 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2854 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2857 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2858 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2860 val << QString::number(c.redF());
2861 val << QString::number(c.greenF());
2862 val << QString::number(c.blueF());
2863 param = occParam + GEOM::propertyName( GEOM::Color );
2864 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2867 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2868 param = occParam + GEOM::propertyName( GEOM::Texture );
2869 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2872 if (vType == SVTK_Viewer::Type()) {
2873 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2874 param = occParam + GEOM::propertyName( GEOM::Opacity );
2875 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2877 } else if (vType == SOCC_Viewer::Type()) {
2878 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2879 param = occParam + GEOM::propertyName( GEOM::Transparency );
2880 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2883 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2884 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2885 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2889 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2890 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2891 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2894 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2895 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2896 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2899 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
2900 param = occParam + GEOM::propertyName( GEOM::Vertices );
2901 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
2904 if (aProps.contains(GEOM::propertyName( GEOM::ShowName ))) {
2905 param = occParam + GEOM::propertyName( GEOM::ShowName );
2906 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::ShowName )).toString().toStdString());
2909 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2910 param = occParam + GEOM::propertyName( GEOM::Deflection );
2911 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2914 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2915 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2916 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2917 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2920 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2921 param = occParam + GEOM::propertyName( GEOM::Material );
2922 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2925 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2926 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2927 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2930 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2931 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2932 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2934 } // object iterator
2936 } // for (viewManagers)
2938 // store dimension attributes of objects:
2939 // since the displayed object always persists in property map, we remember the object entries
2940 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
2941 QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
2942 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
2943 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
2945 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
2946 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName);
2948 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
2950 if ( aDimensions.GetNumber() == 0 )
2955 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
2960 * \brief Restore visual parameters
2962 * This method is called after the study document is opened.
2963 * Restore visual parameters from AttributeParameter attribute(s)
2965 void GeometryGUI::restoreVisualParameters (int savePoint)
2967 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2968 if (!appStudy || !appStudy->studyDS())
2970 _PTR(Study) studyDS = appStudy->studyDS();
2972 // componentName is used for encoding of entries when storing them in IParameters
2973 std::string componentName = myComponentGeom->ComponentDataType();
2974 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2975 //if (!aSComponent) return;
2978 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2979 componentName.c_str(),
2981 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2983 std::vector<std::string> entries = ip->getEntries();
2985 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2987 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2988 QString entry (ip->decodeEntry(*entIt).c_str());
2990 // Check that the entry corresponds to a real object in the Study
2991 // as the object may be deleted or modified after the visual state is saved.
2992 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2993 if (!so) continue; //Skip the not existent entry
2995 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2996 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2998 std::vector<std::string>::iterator namesIt = paramNames.begin();
2999 std::vector<std::string>::iterator valuesIt = paramValues.begin();
3001 // actors are stored in a map after displaying of them for
3002 // quicker access in the future: map < viewID to actor >
3003 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
3004 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
3006 QString viewerTypStr;
3007 QString viewIndexStr;
3009 QVector<PropMap> aListOfMap;
3011 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
3013 // visual parameters are stored in strings as follows:
3014 // 1) ViewerType_ViewIndex_ParamName
3015 // 2) ViewerType_ParamName (shared for GEOM module)
3016 // '_' is used as separator and should not be used in viewer type or parameter names.
3017 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
3019 bool isShared = lst.size() == 2;
3020 bool isViewer = lst.size() == 3;
3021 if ( !isShared && !isViewer )
3026 // shared visual parameters
3029 QString aParamNameStr( lst[1] );
3030 QString aValuesStr( (*valuesIt).c_str() );
3032 // shared dimension properties are stored as attribute
3033 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
3035 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
3036 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
3042 // per view visual parameters
3043 viewerTypStr = lst[0];
3044 viewIndexStr = lst[1];
3045 QString paramNameStr = lst[2];
3048 viewIndex = viewIndexStr.toUInt(&ok);
3049 if (!ok) // bad conversion of view index to integer
3052 if ((viewIndex + 1) > aListOfMap.count()) {
3053 aListOfMap.resize(viewIndex + 1);
3056 QString val((*valuesIt).c_str());
3057 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
3058 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
3059 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
3060 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
3061 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
3062 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
3063 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
3064 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
3065 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
3066 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
3067 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
3068 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
3069 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
3070 QStringList rgb = val.split(GEOM::subSectionSeparator());
3071 if (rgb.count() == 3) {
3072 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
3073 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
3075 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
3076 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
3077 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
3078 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
3079 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
3080 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
3081 } else if (paramNameStr == GEOM::propertyName( GEOM::ShowName )) {
3082 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::ShowName ), val == "true" || val == "1");
3083 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3084 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3085 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3086 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3087 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3088 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3089 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3090 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3091 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3092 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3094 } // for names/parameters iterator
3096 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3098 for (int index = 0; index < aListOfMap.count(); index++) {
3099 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
3101 //Get Visibility property of the current PropMap
3102 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3103 SUIT_ViewManager* vman = lst.at(index);
3104 SUIT_ViewModel* vmodel = vman->getViewModel();
3105 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
3108 } // for entries iterator
3110 // update all VTK and OCC views
3111 QList<SUIT_ViewManager*> lst;
3112 getApp()->viewManagers(lst);
3113 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3114 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3117 if (vmodel->getType() == SVTK_Viewer::Type()) {
3118 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3119 vtkView->getRenderer()->ResetCameraClippingRange();
3122 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3123 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3124 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3131 // Compute current name mode of the viewer
3132 void UpdateNameMode( SalomeApp_Application* app )
3134 bool isMode = false;
3135 SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() );
3136 SUIT_ViewWindow* viewWindow = app->desktop()->activeWindow();
3137 GEOM_Displayer displayer( aStudy );
3138 int aMgrId = viewWindow->getViewManager()->getGlobalId();
3140 SALOME_View* window = displayer.GetActiveView();
3141 if ( !window ) return;
3143 SALOME_ListIO anIOlst;
3144 window->GetVisible( anIOlst );
3146 for ( SALOME_ListIteratorOfListIO It( anIOlst ); It.More(); It.Next() ) {
3147 Handle( SALOME_InteractiveObject ) io = It.Value();
3148 QVariant v = aStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::ShowName ), QVariant() );
3149 bool isIONameMode = v.isValid() ? v.toBool() : false;
3153 viewWindow->setProperty( "NameMode", isMode );
3156 void GeometryGUI::onViewAboutToShow()
3158 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3159 QAction* a = action( GEOMOp::OpSwitchVectors );
3160 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3161 QAction* aNameAction = action( GEOMOp::OpSwitchName );
3163 a->setEnabled(true);
3164 bool vmode = window->property("VectorsMode").toBool();
3165 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3166 aVerticesAction->setEnabled(true);
3167 vmode = window->property("VerticesMode").toBool();
3168 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3169 UpdateNameMode( getApp() );
3170 aNameAction->setEnabled(true);
3171 vmode = window->property("NameMode").toBool();
3172 aNameAction->setText ( vmode == 1 ? tr( "MEN_NAME_MODE_OFF" ) : tr("MEN_NAME_MODE_ON") );
3174 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3175 a->setEnabled(false);
3176 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3177 aVerticesAction->setEnabled(false);
3178 aNameAction->setText ( tr("MEN_NAME_MODE_ON") );
3179 aNameAction->setEnabled(false);
3184 \brief Return action by id
3185 \param id identifier of the action
3188 QAction* GeometryGUI::getAction(const int id) {
3193 \brief GEOM module message handler
3195 This method can be re-implemented in the subclasses.
3196 This is a GEOM module message handler.
3198 \param msg the message received.
3200 void GeometryGUI::message(const QString& msg)
3203 QStringList data = msg.split("/");
3204 const int nbStrings = data.count();
3206 if (nbStrings > 0) {
3207 if (data[0] == "modified") {
3209 QString anIOR = nbStrings > 1 ? data[1] : QString();
3211 if ( anIOR.isEmpty() ) {
3215 // Get the geom object.
3216 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3218 // Clear the shape buffer
3219 GeometryGUI::ClearShapeBuffer (anObj);
3225 \brief Clears the shape buffer.
3227 This is a static method. It clears the shape buffer.
3229 \param theObj the object
3231 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3233 if ( CORBA::is_nil( theObj ) )
3236 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3237 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3238 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3240 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3245 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3250 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3254 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3255 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3256 _PTR(GenericAttribute) anAttr;
3257 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3258 _PTR(AttributeIOR) anIOR ( anAttr );
3259 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3260 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3266 \brief Returns the object from IOR.
3268 This is a static method. It returns the object from its IOR.
3270 \param IOR object IOR
3271 \return GEOM object.
3273 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3275 GEOM::GEOM_Object_var geomObj;
3276 if ( !IOR.isEmpty() ) {
3277 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3278 ( IOR.toLatin1().constData() );
3279 if ( !CORBA::is_nil( corbaObj ) )
3280 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3282 return geomObj._retn();
3286 \brief Returns IOR of the object.
3288 This is a static method. It returns the object's IOR.
3290 \param object the GEOM object.
3291 \return object's IOR.
3293 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3296 if ( !CORBA::is_nil( object ) ) {
3297 CORBA::String_var anIOR =
3298 SalomeApp_Application::orb()->object_to_string( object );
3305 \brief Check if this object is can't be renamed in place
3307 This method can be re-implemented in the subclasses.
3308 Return true in case if object isn't reference or component (module root).
3310 \param entry column id
3311 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3313 bool GeometryGUI::renameAllowed( const QString& entry) const {
3315 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3316 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3317 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3319 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3323 Rename object by entry.
3324 \param entry entry of the object
3325 \param name new name of the object
3326 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3328 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3330 bool result = false;
3332 SalomeApp_Application* app =
3333 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3334 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3339 _PTR(Study) aStudy = appStudy->studyDS();
3344 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3346 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3350 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3351 _PTR(GenericAttribute) anAttr;
3353 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3354 _PTR(AttributeName) aName (anAttr);
3356 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3357 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3358 if (!CORBA::is_nil(anObj)) {
3359 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3360 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3368 void GeometryGUI::updateMaterials()
3370 LightApp_Preferences* pref = preferences();
3372 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3373 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3374 if ( !materials.contains( currentMaterial ) )
3375 // user material set as default in the preferences, might be removed
3376 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3378 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3380 setPreferenceProperty( prefItem->id(),
3381 "strings", materials );
3382 prefItem->retrieve();
3388 \brief Check if the module allows "drag" operation of its objects.
3390 Overloaded from LightApp_Module class.
3392 This function is a part of the general drag-n-drop mechanism.
3393 The goal of this function is to check data object passed as a parameter
3394 and decide if it can be dragged or no.
3396 \param what data object being tested for drag operation
3397 \return \c true if module allows dragging of the specified object
3398 \sa isDropAccepted(), dropObjects()
3400 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3402 // we allow dragging object under root and object from folder
3403 int aLevel = what->level();
3404 bool anObjectInFolder = false;
3406 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3408 _PTR(SObject) aSO = dataObj->object();
3410 _PTR(GenericAttribute) anAttr;
3411 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3412 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3413 _PTR(AttributeLocalID) aLocalID( anAttr );
3414 anObjectInFolder = aLocalID->Value() == 999;
3419 return aLevel == 2 || anObjectInFolder;
3423 \brief Check if the module allows "drop" operation on the given object.
3425 Overloaded from LightApp_Module class.
3427 This function is a part of the general drag-n-drop mechanism.
3428 The goal of this function is to check data object passed as a parameter
3429 and decide if it can be used as a target for the "drop" operation.
3430 The processing of the drop operation itself is done in the dropObjects() function.
3432 \param where target data object
3433 \return \c true if module supports dropping on the \a where data object
3434 \sa isDraggable(), dropObjects()
3436 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3438 // we allow dropping into folder and top-level GEOM object
3439 int aLevel = where->level();
3440 bool isFolder = false;
3442 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3444 _PTR(SObject) aSO = dataObj->object();
3446 _PTR(GenericAttribute) anAttr;
3447 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3448 _PTR(AttributeLocalID) aLocalID( anAttr );
3449 isFolder = aLocalID->Value() == 999;
3454 return aLevel == 1 || isFolder;
3458 \brief Complete drag-n-drop operation.
3460 Overloaded from LightApp_Module class.
3462 This function is a part of the general drag-n-drop mechanism.
3463 Its goal is to handle dropping of the objects being dragged according
3464 to the chosen operation (move). The dropping is performed in the
3465 context of the parent data object \a where and the \a row (position in the
3466 children index) at which the data should be dropped. If \a row is equal to -1,
3467 this means that objects are added to the end of the children list.
3469 \param what objects being dropped
3470 \param where target data object
3471 \param row child index at which the drop operation is performed
3472 \param action drag-n-drop operation (Qt::DropAction) - move
3474 \sa isDraggable(), isDropAccepted()
3476 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3477 const int row, Qt::DropAction action )
3479 if (action != Qt::CopyAction && action != Qt::MoveAction)
3480 return; // unsupported action
3482 // get parent object
3483 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3484 if ( !dataObj ) return; // wrong parent
3485 _PTR(SObject) parentObj = dataObj->object();
3487 // Find the current Study and StudyBuilder
3488 _PTR(Study) aStudy = parentObj->GetStudy();
3489 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3490 // collect all parents of the target node
3491 QStringList parentIDs;
3492 _PTR(SObject) parent = parentObj;
3493 while( !parent->IsNull() ) {
3494 parentIDs << parent->GetID().c_str();
3495 parent = aUseCaseBuilder->GetFather(parent);
3498 // collect objects being dropped
3499 GEOM::object_list_var objects = new GEOM::object_list();
3500 objects->length( what.count() );
3502 for ( int i = 0; i < what.count(); i++ ) {
3503 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3504 if ( !dataObj ) continue; // skip wrong objects
3505 _PTR(SObject) sobj = dataObj->object();
3506 // check that dropped object is not a parent of target object
3507 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3508 return; // it's not allowed to move node into it's child
3510 objects[i] = _CAST(SObject, sobj)->GetSObject();
3513 objects->length( count );
3515 // call engine function
3516 GetGeomGen()->Move( objects.in(), // what
3517 _CAST(SObject, parentObj)->GetSObject(), // where
3520 // update Object browser
3521 getApp()->updateObjectBrowser( false );
3524 void GeometryGUI::emitDimensionsUpdated( QString entry )
3526 emit DimensionsUpdated( entry );