1 // Copyright (C) 2007-2016 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 <OCCViewer_ViewWindow.h>
55 #include <OCCViewer_ViewPort3d.h>
56 #include <OCCViewer_ViewModel.h>
57 #include <OCCViewer_ViewManager.h>
59 #include <SOCC_ViewModel.h>
60 #include <SOCC_ViewWindow.h>
62 #include <SVTK_ViewWindow.h>
63 #include <SVTK_RenderWindowInteractor.h>
64 #include <SVTK_InteractorStyle.h>
65 #include <SVTK_ViewModel.h>
67 #ifndef DISABLE_GRAPHICSVIEW
68 #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 #ifndef DISABLE_GRAPHICSVIEW
442 bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() );
446 // if current viewframe is not of OCC and not of VTK type - return immediately
447 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
448 QList<int> NotViewerDependentCommands;
449 NotViewerDependentCommands << GEOMOp::OpDelete
451 << GEOMOp::OpShowOnly
452 << GEOMOp::OpShowOnlyChildren
453 << GEOMOp::OpDiscloseChildren
454 << GEOMOp::OpConcealChildren
455 << GEOMOp::OpUnpublishObject
456 << GEOMOp::OpPublishObject
457 << GEOMOp::OpPointMarker
458 << GEOMOp::OpCreateFolder
459 << GEOMOp::OpSortChildren;
460 if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) {
461 // activate OCC viewer
462 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
465 // fix for IPAL9103, point 2
466 if ( CORBA::is_nil( GetGeomGen() ) ) {
467 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
472 // find corresponding GUI library
474 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
475 createOriginAndBaseVectors(); // internal operation
477 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
478 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
479 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
480 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
481 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
482 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
483 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
484 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
485 case GEOMOp::OpDelete: // MENU EDIT - DELETE
486 #ifndef DISABLE_PYCONSOLE
487 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
489 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
490 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
491 case GEOMOp::OpColor: // POPUP MENU - COLOR
492 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
493 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
494 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
495 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
496 case GEOMOp::OpIsos: // POPUP MENU - ISOS
497 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
498 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
499 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
500 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
501 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
502 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
503 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
504 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
505 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
506 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
507 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
508 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
509 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
510 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
511 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
512 case GEOMOp::OpClsBringToFront: //
513 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
514 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
515 #ifndef DISABLE_GRAPHICSVIEW
516 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
518 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
519 libName = "GEOMToolsGUI";
521 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
522 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
523 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
524 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
525 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
526 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
527 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
528 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
529 case GEOMOp::OpHide: // MENU VIEW - ERASE
530 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
531 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
532 case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE
533 case GEOMOp::OpSwitchName: // MENU VIEW - VERTICES MODE
534 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
535 case GEOMOp::OpShading: // POPUP MENU - SHADING
536 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
537 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
538 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
539 case GEOMOp::OpVertices: // POPUP MENU - VERTICES
540 case GEOMOp::OpShowName: // POPUP MENU - SHOW NAME
541 libName = "DisplayGUI";
543 case GEOMOp::OpPoint: // MENU BASIC - POINT
544 case GEOMOp::OpLine: // MENU BASIC - LINE
545 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
546 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
547 case GEOMOp::OpArc: // MENU BASIC - ARC
548 case GEOMOp::OpVector: // MENU BASIC - VECTOR
549 case GEOMOp::OpPlane: // MENU BASIC - PLANE
550 case GEOMOp::OpCurve: // MENU BASIC - CURVE
551 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
552 libName = "BasicGUI";
554 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
555 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
556 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
557 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
558 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
559 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
560 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
561 libName = "PrimitiveGUI";
563 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
564 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
565 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
566 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
567 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
568 case GEOMOp::OpThickness: // MENU GENERATION - THICKNESS
569 libName = "GenerationGUI";
571 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
572 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
573 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
574 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
575 case GEOMOp::OpSurfaceFromFace: // MENU ENTITY - SURFACE FROM FACE
577 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
579 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
580 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
581 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
582 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
583 case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR
584 libName = "EntityGUI";
586 case GEOMOp::OpEdge: // MENU BUILD - EDGE
587 case GEOMOp::OpWire: // MENU BUILD - WIRE
588 case GEOMOp::OpFace: // MENU BUILD - FACE
589 case GEOMOp::OpShell: // MENU BUILD - SHELL
590 case GEOMOp::OpSolid: // MENU BUILD - SOLID
591 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
592 libName = "BuildGUI";
594 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
595 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
596 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
597 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
598 libName = "BooleanGUI";
600 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
601 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
602 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
603 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
604 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
605 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
606 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
607 case GEOMOp::OpProjOnCyl: // MENU TRANSFORMATION - PROJECTION ON CYLINDER
608 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
609 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
610 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
611 case GEOMOp::OpExtension: // MENU TRANSFORMATION - EXTENSION
612 libName = "TransformationGUI";
614 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
615 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
616 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
617 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
618 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
619 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
620 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
621 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
622 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
623 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
624 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
625 case GEOMOp::OpTransferData: // MENU OPERATION - TRANSFER DATA
626 case GEOMOp::OpExtraction: // MENU OPERATION - EXTRACT AND REBUILD
627 libName = "OperationGUI";
629 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
630 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
631 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
632 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
633 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
634 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
635 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
636 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
637 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
638 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
639 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
640 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
641 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
642 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
643 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
644 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
645 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
646 case GEOMOp::OpInspectObj: // MENU REPAIR - INSPECT OBJECT
647 libName = "RepairGUI";
649 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
650 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
651 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
652 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
653 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
654 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
655 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
656 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
657 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
658 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
659 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
660 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
661 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
662 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
663 case GEOMOp::OpFastCheckInters: // MENU MEASURE - FAST CHECK INTERSECTIONS
664 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
665 #ifndef DISABLE_PLOT2DVIEWER
666 case GEOMOp::OpShapeStatistics: // MENU MEASURE - SHAPE STATISTICS
668 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
669 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
670 libName = "MeasureGUI";
672 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
673 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
674 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
675 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
676 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
677 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
678 libName = "GroupGUI";
680 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
681 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
682 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
683 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
684 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
685 libName = "BlocksGUI";
687 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
688 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
689 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
690 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
691 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
692 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
693 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
694 //libName = "AdvancedGUI";
697 if (myPluginActions.contains(id)) {
698 libName = myPluginActions[id].first;
700 GEOMPluginGUI* library = 0;
701 if ( !libName.isEmpty() ) {
703 libName = QString( "lib" ) + libName + ".so";
705 libName = libName + ".dll";
707 library = getPluginLibrary( libName );
710 // call method of corresponding GUI library
712 //QString action ("%1");
713 //action = action.arg(id);
715 //if( !theParam.isValid() )
716 library->OnGUIEvent( myPluginActions[id].second, desk );
718 // library->OnGUIEvent( id, desk, theParam);
721 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
723 updateCreationInfo();
729 GEOMGUI* library = 0;
730 if ( !libName.isEmpty() ) {
732 libName = QString( "lib" ) + libName + ".so";
734 libName = libName + ".dll";
736 library = getLibrary( libName );
739 // call method of corresponding GUI library
741 if( !theParam.isValid() )
742 library->OnGUIEvent( id, desk );
744 library->OnGUIEvent( id, desk, theParam);
747 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
749 updateCreationInfo();
752 //=================================================================================
753 // function : GeometryGUI::activateOperation()
755 //=================================================================================
756 bool GeometryGUI::activateOperation( int actionId )
758 OnGUIEvent(actionId);
762 //=================================================================================
763 // function : GeometryGUI::activateOperation()
765 //=================================================================================
766 bool GeometryGUI::activateOperation( const QString& actionId )
770 int id = actionId.toInt(&isOk);
777 //=================================================================================
778 // function : GeometryGUI::activateOperation()
780 //=================================================================================
781 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
785 QString pluginLib = plugin;
786 // TODO: if <plugin> is a plugin name, find plugin library name
787 if (myPluginLibs.contains(plugin))
788 pluginLib = myPluginLibs[plugin];
790 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
791 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
792 const PluginAction& anAction = actionsIter.value();
793 if (anAction.first == pluginLib && anAction.second == actionId) {
794 // activate operation
795 OnGUIEvent(actionsIter.key());
803 //=================================================================================
804 // function : GeometryGUI::OnKeyPress()
805 // purpose : Called when any key is pressed by user [static]
806 //=================================================================================
807 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
809 if ( !application() )
811 foreach ( GEOMGUI* lib, myGUIMap )
812 lib->OnKeyPress( e, application()->desktop(), w );
815 //=================================================================================
816 // function : GeometryGUI::OnMouseMove()
817 // purpose : Manages mouse move events [static]
818 //=================================================================================
819 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
821 if ( !application() )
823 foreach ( GEOMGUI* lib, myGUIMap )
824 lib->OnMouseMove( e, application()->desktop(), w );
827 //=================================================================================
828 // function : GeometryGUI::OnMouseRelease()
829 // purpose : Manages mouse release events [static]
830 //=================================================================================
831 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
833 if ( !application() )
835 foreach ( GEOMGUI* lib, myGUIMap )
836 lib->OnMouseRelease( e, application()->desktop(), w );
839 //=================================================================================
840 // function : GeometryGUI::OnMousePress()
841 // purpose : Manage mouse press events [static]
842 //=================================================================================
843 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
845 if ( !application() )
847 foreach ( GEOMGUI* lib, myGUIMap )
848 lib->OnMousePress( e, application()->desktop(), w );
851 //=======================================================================
852 // function : createGeomAction
854 //=======================================================================
855 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
856 const int accel, const bool toggle, const QString& shortcutAction )
858 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
859 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
860 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
862 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
864 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
865 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
867 application()->desktop(),
869 this, SLOT( OnGUIEvent() ),
873 //=======================================================================
874 // function : createOriginAndBaseVectors
876 //=======================================================================
877 void GeometryGUI::createOriginAndBaseVectors()
879 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
880 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
882 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
886 _PTR(Study) studyDS = appStudy->studyDS();
887 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
888 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
889 if ( !aBasicOperations->_is_nil() ) {
890 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
891 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
892 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
893 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
894 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
895 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
897 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
898 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
899 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
900 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
901 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
902 anOrigin->UnRegister();
906 aBasicOperations->UnRegister();
908 getApp()->updateObjectBrowser( true );
914 //=======================================================================
915 // function : GeometryGUI::initialize()
916 // purpose : Called when GEOM module is created
917 //=======================================================================
918 void GeometryGUI::initialize( CAM_Application* app )
920 SalomeApp_Module::initialize( app );
922 // ----- create actions --------------
924 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
926 createGeomAction( GEOMOp::OpPoint, "POINT" );
927 createGeomAction( GEOMOp::OpLine, "LINE" );
928 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
929 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
930 createGeomAction( GEOMOp::OpArc, "ARC" );
931 createGeomAction( GEOMOp::OpCurve, "CURVE" );
932 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
933 createGeomAction( GEOMOp::OpVector, "VECTOR" );
934 createGeomAction( GEOMOp::OpPlane, "PLANE" );
935 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
936 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
937 createGeomAction( GEOMOp::OpSurfaceFromFace, "SURFACE_FROM_FACE" );
939 createGeomAction( GEOMOp::OpBox, "BOX" );
940 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
941 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
942 createGeomAction( GEOMOp::OpTorus, "TORUS" );
943 createGeomAction( GEOMOp::OpCone, "CONE" );
944 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
945 createGeomAction( GEOMOp::OpDisk, "DISK" );
947 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
948 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
949 createGeomAction( GEOMOp::OpFilling, "FILLING" );
950 createGeomAction( GEOMOp::OpPipe, "PIPE" );
951 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
952 createGeomAction( GEOMOp::OpThickness, "THICKNESS" );
954 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
955 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
956 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
957 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
958 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
960 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
961 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
963 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
965 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
966 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
968 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
969 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
970 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
972 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
974 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
975 createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" );
977 createGeomAction( GEOMOp::OpEdge, "EDGE" );
978 createGeomAction( GEOMOp::OpWire, "WIRE" );
979 createGeomAction( GEOMOp::OpFace, "FACE" );
980 createGeomAction( GEOMOp::OpShell, "SHELL" );
981 createGeomAction( GEOMOp::OpSolid, "SOLID" );
982 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
984 createGeomAction( GEOMOp::OpFuse, "FUSE" );
985 createGeomAction( GEOMOp::OpCommon, "COMMON" );
986 createGeomAction( GEOMOp::OpCut, "CUT" );
987 createGeomAction( GEOMOp::OpSection, "SECTION" );
989 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
990 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
991 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
992 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
993 createGeomAction( GEOMOp::OpScale, "SCALE" );
994 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
995 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
996 createGeomAction( GEOMOp::OpProjOnCyl, "PROJ_ON_CYL" );
997 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
998 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
999 createGeomAction( GEOMOp::OpExtension, "EXTENSION" );
1001 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
1002 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
1003 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
1004 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
1005 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
1006 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
1007 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
1008 createGeomAction( GEOMOp::OpTransferData, "TRANSFER_DATA" );
1009 createGeomAction( GEOMOp::OpExtraction, "EXTRACTION" );
1010 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
1011 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
1012 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
1013 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
1015 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
1016 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
1017 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
1019 createGeomAction( GEOMOp::OpSewing, "SEWING" );
1020 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
1021 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
1022 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
1023 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
1024 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
1025 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
1026 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
1027 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
1028 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
1029 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
1030 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
1031 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1032 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1033 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1034 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1035 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1036 createGeomAction( GEOMOp::OpInspectObj, "INSPECT_OBJECT" );
1038 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1039 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1040 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1041 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1042 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1043 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1044 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1045 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1046 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1048 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1049 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1050 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1051 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1052 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1053 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1054 createGeomAction( GEOMOp::OpFastCheckInters, "FAST_CHECK_INTERSECTIONS" );
1055 #ifndef DISABLE_PLOT2DVIEWER
1056 createGeomAction( GEOMOp::OpShapeStatistics, "SHAPE_STATISTICS" );
1059 #ifndef DISABLE_PYCONSOLE
1060 #ifdef _DEBUG_ // PAL16821
1061 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1065 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1066 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1067 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1068 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1069 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1070 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1071 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1072 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1073 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1074 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1075 createGeomAction( GEOMOp::OpSwitchName, "NAME_MODE");
1076 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1077 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1078 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1079 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1080 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1081 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1082 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1083 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1084 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1085 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1086 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1087 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1088 createGeomAction( GEOMOp::OpHide, "ERASE" );
1090 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1091 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1092 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1093 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1094 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1095 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1096 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1097 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1098 createGeomAction( GEOMOp::OpShowName, "POP_SHOW_NAME", "", 0, true );
1099 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1100 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1101 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1102 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1103 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1104 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1105 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1106 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1107 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1108 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1109 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1110 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1111 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1112 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1113 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1114 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1115 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1116 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1117 #ifndef DISABLE_GRAPHICSVIEW
1118 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1120 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1121 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1122 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1124 // Create actions for increase/decrease transparency shortcuts
1125 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1126 "Geometry:Increase transparency");
1127 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1128 "Geometry:Decrease transparency");
1130 // Create actions for increase/decrease number of isolines
1131 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1132 "Geometry:Increase number of isolines");
1133 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1134 "Geometry:Decrease number of isolines");
1136 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1137 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1138 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1139 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1140 //@@ 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 @@//
1142 // ---- create menus --------------------------
1144 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1146 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1147 createMenu( GEOMOp::OpDelete, editId, -1 );
1149 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1151 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1152 createMenu( GEOMOp::OpPoint, basicId, -1 );
1153 createMenu( GEOMOp::OpLine, basicId, -1 );
1154 createMenu( GEOMOp::OpCircle, basicId, -1 );
1155 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1156 createMenu( GEOMOp::OpArc, basicId, -1 );
1157 createMenu( GEOMOp::OpCurve, basicId, -1 );
1158 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1159 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1160 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1161 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1162 createMenu( GEOMOp::OpSurfaceFromFace, basicId, -1 );
1163 createMenu( separator(), basicId, -1 );
1164 createMenu( GEOMOp::OpVector, basicId, -1 );
1165 createMenu( GEOMOp::OpPlane, basicId, -1 );
1166 createMenu( GEOMOp::OpLCS, basicId, -1 );
1167 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1169 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1170 createMenu( GEOMOp::OpBox, primId, -1 );
1171 createMenu( GEOMOp::OpCylinder, primId, -1 );
1172 createMenu( GEOMOp::OpSphere, primId, -1 );
1173 createMenu( GEOMOp::OpTorus, primId, -1 );
1174 createMenu( GEOMOp::OpCone, primId, -1 );
1175 createMenu( GEOMOp::OpRectangle, primId, -1 );
1176 createMenu( GEOMOp::OpDisk, primId, -1 );
1177 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1179 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1180 createMenu( GEOMOp::OpPrism, genId, -1 );
1181 createMenu( GEOMOp::OpRevolution, genId, -1 );
1182 createMenu( GEOMOp::OpFilling, genId, -1 );
1183 createMenu( GEOMOp::OpPipe, genId, -1 );
1184 createMenu( GEOMOp::OpPipePath, genId, -1 );
1185 createMenu( GEOMOp::OpThickness, genId, -1 );
1187 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1188 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1189 //@@ 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 @@//
1191 createMenu( separator(), newEntId, -1 );
1193 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1194 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1195 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1196 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1197 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1198 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1200 createMenu( separator(), newEntId, -1 );
1202 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1203 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1204 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1206 createMenu( separator(), newEntId, -1 );
1208 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1209 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1210 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1211 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1212 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1214 createMenu( separator(), newEntId, -1 );
1216 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1218 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1219 createMenu( GEOMOp::OpEdge, buildId, -1 );
1220 createMenu( GEOMOp::OpWire, buildId, -1 );
1221 createMenu( GEOMOp::OpFace, buildId, -1 );
1222 createMenu( GEOMOp::OpShell, buildId, -1 );
1223 createMenu( GEOMOp::OpSolid, buildId, -1 );
1224 createMenu( GEOMOp::OpCompound, buildId, -1 );
1226 createMenu( separator(), newEntId, -1 );
1228 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1230 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1233 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1235 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1236 createMenu( GEOMOp::OpFuse, boolId, -1 );
1237 createMenu( GEOMOp::OpCommon, boolId, -1 );
1238 createMenu( GEOMOp::OpCut, boolId, -1 );
1239 createMenu( GEOMOp::OpSection, boolId, -1 );
1241 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1242 createMenu( GEOMOp::OpTranslate, transId, -1 );
1243 createMenu( GEOMOp::OpRotate, transId, -1 );
1244 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1245 createMenu( GEOMOp::OpMirror, transId, -1 );
1246 createMenu( GEOMOp::OpScale, transId, -1 );
1247 createMenu( GEOMOp::OpOffset, transId, -1 );
1248 createMenu( GEOMOp::OpProjection, transId, -1 );
1249 createMenu( GEOMOp::OpExtension, transId, -1 );
1250 createMenu( GEOMOp::OpProjOnCyl, transId, -1 );
1251 createMenu( separator(), transId, -1 );
1252 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1253 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1255 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1256 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1257 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1258 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1260 createMenu( separator(), operId, -1 );
1262 createMenu( GEOMOp::OpPartition, operId, -1 );
1263 createMenu( GEOMOp::OpArchimede, operId, -1 );
1264 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1265 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1266 createMenu( GEOMOp::OpTransferData, operId, -1 );
1267 createMenu( GEOMOp::OpExtraction, operId, -1 );
1269 createMenu( separator(), operId, -1 );
1271 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1272 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1273 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1274 createMenu( GEOMOp::OpChamfer, operId, -1 );
1275 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1276 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1277 //createMenu( GEOMOp::OpClipping, operId, -1 );
1279 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1280 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1281 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1282 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1283 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1284 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1285 createMenu( GEOMOp::OpSewing, repairId, -1 );
1286 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1287 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1288 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1289 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1290 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1291 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1292 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1293 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1294 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1295 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1296 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1298 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1299 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1300 createMenu( GEOMOp::OpProperties, measurId, -1 );
1301 createMenu( separator(), measurId, -1 );
1302 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1303 createMenu( GEOMOp::OpInertia, measurId, -1 );
1304 createMenu( GEOMOp::OpNormale, measurId, -1 );
1305 createMenu( separator(), measurId, -1 );
1306 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1307 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1308 createMenu( separator(), measurId, -1 );
1310 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1311 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1312 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1313 createMenu( GEOMOp::OpAngle, dimId, -1 );
1314 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1316 createMenu( separator(), measurId, -1 );
1317 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1318 createMenu( separator(), measurId, -1 );
1319 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1320 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1321 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1322 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1323 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1324 createMenu( GEOMOp::OpFastCheckInters, measurId, -1 );
1325 createMenu( GEOMOp::OpInspectObj, measurId, -1 );
1326 #ifndef DISABLE_PLOT2DVIEWER
1327 createMenu( GEOMOp::OpShapeStatistics, measurId, -1 );
1330 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1331 #ifndef DISABLE_PYCONSOLE
1332 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1333 createMenu( separator(), toolsId, -1 );
1334 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1338 createMenu( separator(), toolsId, -1 );
1339 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1340 createMenu( separator(), toolsId, -1 );
1342 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1343 createMenu( separator(), viewId, -1 );
1345 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1346 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1347 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1348 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1349 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1350 createMenu( separator(), dispmodeId, -1 );
1351 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1352 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1353 createMenu( GEOMOp::OpSwitchName, dispmodeId, -1 );
1355 createMenu( separator(), viewId, -1 );
1356 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1357 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1358 createMenu( separator(), viewId, -1 );
1359 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1360 createMenu( separator(), viewId, -1 );
1364 because of these items are accessible through object browser and viewers
1365 we have removed they from main menu
1367 createMenu( GEOMOp::OpShow, viewId, -1 );
1368 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1369 createMenu( GEOMOp::OpHide, viewId, -1 );
1372 // ---- create toolbars --------------------------
1374 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1375 createTool( GEOMOp::OpPoint, basicTbId );
1376 createTool( GEOMOp::OpLine, basicTbId );
1377 createTool( GEOMOp::OpCircle, basicTbId );
1378 createTool( GEOMOp::OpEllipse, basicTbId );
1379 createTool( GEOMOp::OpArc, basicTbId );
1380 createTool( GEOMOp::OpCurve, basicTbId );
1381 createTool( GEOMOp::OpVector, basicTbId );
1382 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1383 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1384 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1385 createTool( GEOMOp::OpIsoline, basicTbId );
1386 createTool( GEOMOp::OpSurfaceFromFace, basicTbId );
1387 createTool( GEOMOp::OpPlane, basicTbId );
1388 createTool( GEOMOp::OpLCS, basicTbId );
1389 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1391 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1392 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1393 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1395 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1396 createTool( GEOMOp::OpBox, primTbId );
1397 createTool( GEOMOp::OpCylinder, primTbId );
1398 createTool( GEOMOp::OpSphere, primTbId );
1399 createTool( GEOMOp::OpTorus, primTbId );
1400 createTool( GEOMOp::OpCone, primTbId );
1401 createTool( GEOMOp::OpRectangle, primTbId );
1402 createTool( GEOMOp::OpDisk, primTbId );
1403 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1405 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1406 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1407 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1409 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1410 createTool( GEOMOp::OpFuse, boolTbId );
1411 createTool( GEOMOp::OpCommon, boolTbId );
1412 createTool( GEOMOp::OpCut, boolTbId );
1413 createTool( GEOMOp::OpSection, boolTbId );
1415 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1416 createTool( GEOMOp::OpPrism, genTbId );
1417 createTool( GEOMOp::OpRevolution, genTbId );
1418 createTool( GEOMOp::OpFilling, genTbId );
1419 createTool( GEOMOp::OpPipe, genTbId );
1420 createTool( GEOMOp::OpPipePath, genTbId );
1421 createTool( GEOMOp::OpThickness, genTbId );
1423 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1424 createTool( GEOMOp::OpTranslate, transTbId );
1425 createTool( GEOMOp::OpRotate, transTbId );
1426 createTool( GEOMOp::OpChangeLoc, transTbId );
1427 createTool( GEOMOp::OpMirror, transTbId );
1428 createTool( GEOMOp::OpScale, transTbId );
1429 createTool( GEOMOp::OpOffset, transTbId );
1430 createTool( GEOMOp::OpProjection, transTbId );
1431 createTool( GEOMOp::OpExtension, transTbId );
1432 createTool( GEOMOp::OpProjOnCyl, transTbId );
1433 createTool( separator(), transTbId );
1434 createTool( GEOMOp::OpMultiTranslate, transTbId );
1435 createTool( GEOMOp::OpMultiRotate, transTbId );
1437 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1438 createTool( GEOMOp::OpExplode, operTbId );
1439 createTool( GEOMOp::OpPartition, operTbId );
1440 createTool( GEOMOp::OpArchimede, operTbId );
1441 createTool( GEOMOp::OpShapesOnShape, operTbId );
1442 createTool( GEOMOp::OpSharedShapes, operTbId );
1443 createTool( GEOMOp::OpTransferData, operTbId );
1444 createTool( GEOMOp::OpExtraction, operTbId );
1446 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1447 createTool( GEOMOp::OpFillet1d, featTbId );
1448 createTool( GEOMOp::OpFillet2d, featTbId );
1449 createTool( GEOMOp::OpFillet3d, featTbId );
1450 createTool( GEOMOp::OpChamfer, featTbId );
1451 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1452 createTool( GEOMOp::OpExtrudedCut, featTbId );
1454 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1455 createTool( GEOMOp::OpEdge, buildTbId );
1456 createTool( GEOMOp::OpWire, buildTbId );
1457 createTool( GEOMOp::OpFace, buildTbId );
1458 createTool( GEOMOp::OpShell, buildTbId );
1459 createTool( GEOMOp::OpSolid, buildTbId );
1460 createTool( GEOMOp::OpCompound, buildTbId );
1462 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1463 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1464 createTool( GEOMOp::OpProperties, measureTbId );
1465 createTool( GEOMOp::OpCenterMass, measureTbId );
1466 createTool( GEOMOp::OpInertia, measureTbId );
1467 createTool( GEOMOp::OpNormale, measureTbId );
1468 createTool( separator(), measureTbId );
1469 createTool( GEOMOp::OpBoundingBox, measureTbId );
1470 createTool( GEOMOp::OpMinDistance, measureTbId );
1471 createTool( GEOMOp::OpAngle, measureTbId );
1472 createTool( GEOMOp::OpTolerance , measureTbId );
1473 createTool( separator(), measureTbId );
1474 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1475 createTool( GEOMOp::OpFreeFaces, measureTbId );
1476 createTool( separator(), measureTbId );
1477 createTool( GEOMOp::OpWhatIs, measureTbId );
1478 createTool( GEOMOp::OpCheckShape, measureTbId );
1479 createTool( GEOMOp::OpCheckCompound, measureTbId );
1480 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1481 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1482 createTool( GEOMOp::OpFastCheckInters, measureTbId );
1484 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1485 createTool( GEOMOp::OpPictureImport, picturesTbId );
1487 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1490 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1491 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1492 //@@ 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 @@//
1494 // ---- create popup menus --------------------------
1496 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1497 QString clientOCC = "(client='OCCViewer')";
1498 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1499 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1501 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1502 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1503 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1504 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1506 QString autoColorPrefix =
1507 "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') and type='Shape' and selcount=1";
1509 QtxPopupMgr* mgr = popupMgr();
1511 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1512 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1513 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1514 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1515 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1516 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1517 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1518 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1520 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1521 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1522 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1523 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1524 mgr->insert( separator(), -1, -1 ); // -----------
1526 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1527 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1528 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1529 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1530 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1531 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1532 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1533 mgr->insert( separator(), -1, -1 ); // -----------
1534 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1535 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1536 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1537 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1538 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1539 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1540 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1541 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1542 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1543 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1544 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1545 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1546 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1547 mgr->insert( separator(), dispmodeId, -1 );
1548 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1549 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1550 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1551 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1552 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1553 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1554 mgr->insert( action( GEOMOp::OpShowName ), dispmodeId, -1 ); // show name
1555 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1556 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK + " and isNameMode", QtxPopupMgr::ToggleRule );
1557 mgr->insert( separator(), -1, -1 ); // -----------
1559 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1560 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1561 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1562 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1563 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1564 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1565 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1566 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1567 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1568 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1570 // material properties
1571 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1572 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1575 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1576 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1578 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1579 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1580 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1582 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1583 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1585 mgr->insert( separator(), -1, -1 ); // -----------
1586 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1587 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1588 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1589 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1590 mgr->insert( separator(), -1, -1 ); // -----------
1592 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1593 onlyComponent = "((type='Component') and selcount=1)",
1594 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1595 types = "'Shape' 'Group' 'FieldStep'";
1597 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1598 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1600 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1601 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1603 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1604 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1606 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1608 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1609 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1610 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1611 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1612 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1613 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1614 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1615 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1616 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1617 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1618 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1619 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1620 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1621 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1622 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1623 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1624 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1625 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1626 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1627 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1628 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1629 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1630 mgr->insert( separator(), selectonlyId, -1);
1631 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1632 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1633 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1634 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1635 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1636 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1637 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1639 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1641 mgr->insert( separator(), -1, -1 ); // -----------
1642 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1643 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1644 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1645 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1647 mgr->insert( separator(), -1, -1 ); // -----------
1648 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1649 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1651 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1652 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1654 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1655 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1657 mgr->insert( separator(), -1, -1 ); // -----------
1658 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1659 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1661 mgr->insert( separator(), -1, -1 ); // -----------
1662 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1663 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1665 #ifndef DISABLE_GRAPHICSVIEW
1666 mgr->insert( separator(), -1, -1 ); // -----------
1667 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1668 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1671 mgr->insert( separator(), -1, -1 ); // -----------
1672 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1673 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1675 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1677 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1679 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1680 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1681 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1684 // create plugin actions and menus
1688 //=======================================================================
1689 // function : GeometryGUI::addPluginActions()
1691 //=======================================================================
1692 void GeometryGUI::addPluginActions()
1695 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1696 if (!resMgr) return;
1698 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1699 if (!appStudy) return;
1701 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1703 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1705 int id = GEOMOp::OpLastOperationID; // TODO?
1708 GEOMUtils::PluginInfo::const_iterator it;
1709 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1710 // bind action lib and label to its ID for activateOperation() method proper work
1711 GEOMUtils::PluginData pdata = (*it);
1712 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1713 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1714 std::list<GEOMUtils::ActionData>::const_iterator ait;
1715 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1716 GEOMUtils::ActionData adata = (*ait);
1719 if ( !adata.icon.empty() )
1720 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1722 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1723 QString actionName = smenus.last();
1724 actionName = actionName.toUpper().prepend( "MEN_" );
1725 smenus.removeLast();
1727 // path to action in toolbar
1728 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1729 QString actionTool = stools.last();
1730 actionTool = actionTool.toUpper().prepend( "TOP_" );
1731 stools.removeLast();
1733 QString actionStat = adata.statusText.c_str();
1734 actionStat = actionStat.toUpper().prepend( "STB_" );
1736 createAction( id, // ~ adata.label
1737 tr( actionTool.toLatin1().constData() ),
1739 tr( actionName.toLatin1().constData() ),
1740 tr( actionStat.toLatin1().constData() ),
1741 QKeySequence( tr( adata.accel.c_str() ) ),
1742 application()->desktop(),
1744 this, SLOT( OnGUIEvent() ),
1745 QString() /*shortcutAction*/ );
1748 foreach ( QString subMenu, smenus ) {
1749 QStringList subMenuList = subMenu.split( ":" );
1750 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1751 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1752 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1754 createMenu( id, menuId, -1 );
1756 if ( !stools.isEmpty() ) {
1757 QString subTool = stools[0];
1758 subTool = subTool.toUpper().prepend( "TOOL_" );
1759 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1760 createTool(id, toolId);
1763 // add action id to map
1764 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1765 myPluginActions[id] = anAction;
1772 //=======================================================================
1773 // function : GeometryGUI::activateModule()
1774 // purpose : Called when GEOM module is activated
1775 //=======================================================================
1776 bool GeometryGUI::activateModule( SUIT_Study* study )
1778 if ( CORBA::is_nil( myComponentGeom ) )
1781 bool res = SalomeApp_Module::activateModule( study );
1785 setMenuShown( true );
1786 setToolShown( true );
1788 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1789 PyGILState_STATE gstate = PyGILState_Ensure();
1790 PyObject* pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1791 if ( !pluginsmanager ) {
1796 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1797 tr("MEN_NEW_ENTITY").toUtf8().data(),
1798 tr("GEOM_PLUGINS_OTHER").toUtf8().data());
1803 PyGILState_Release(gstate);
1804 // end of GEOM plugins loading
1806 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1807 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1809 // Reset actions accelerator keys
1810 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1812 GUIMap::Iterator it;
1813 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1814 it.value()->activate( application()->desktop() );
1816 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1818 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1819 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1820 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1822 if ( !myCreationInfoWdg )
1823 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1824 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1825 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1827 if ( !myTextTreeWdg )
1828 myTextTreeWdg = new GEOMGUI_TextTreeWdg( getApp() );
1829 getApp()->insertDockWindow( myTextTreeWdg->getWinID(), myTextTreeWdg );
1830 getApp()->placeDockWindow( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
1833 SALOME_ListIO selected;
1834 sm->selectedObjects( selected );
1835 sm->clearSelected();
1837 SUIT_ViewManager* vm;
1838 ViewManagerList OCCViewManagers, VTKViewManagers;
1840 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1841 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1842 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1843 onViewManagerAdded(vm);
1845 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1846 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1847 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1848 onViewManagerAdded(vm);
1850 sm->setSelectedObjects( selected, true ); //NPAL 19674
1852 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1854 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1856 // 0020836 (Basic vectors and origin)
1857 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1858 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1859 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1861 _PTR(Study) studyDS = appStudy->studyDS();
1863 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1864 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1865 createOriginAndBaseVectors();
1870 Py_XDECREF(pluginsmanager);
1874 //=======================================================================
1875 // function : GeometryGUI::deactivateModule()
1876 // purpose : Called when GEOM module is deactivated
1877 //=======================================================================
1878 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1880 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1882 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1884 setMenuShown( false );
1885 setToolShown( false );
1887 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1888 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1890 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1892 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1893 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1894 if ( myCreationInfoWdg ) {
1895 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1896 myCreationInfoWdg = 0;
1898 if ( myTextTreeWdg ) {
1899 getApp()->removeDockWindow( myTextTreeWdg->getWinID() );
1900 disconnect( application(), 0, myTextTreeWdg, 0 );
1904 EmitSignalCloseAllDialogs();
1906 GUIMap::Iterator it;
1907 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1908 it.value()->deactivate();
1910 // Unset actions accelerator keys
1911 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1913 qDeleteAll(myOCCSelectors);
1914 myOCCSelectors.clear();
1915 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1917 qDeleteAll(myVTKSelectors);
1918 myVTKSelectors.clear();
1919 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1921 return SalomeApp_Module::deactivateModule( study );
1924 //=======================================================================
1925 // function : onWindowActivated()
1926 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1927 //=======================================================================
1928 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1933 const bool ViewOCC = ( win->getViewManager() ? win->getViewManager()->getType() == OCCViewer_Viewer::Type() : false );
1934 //const bool ViewVTK = ( win->getViewManager() ? win->getViewManager()->getType() == SVTK_Viewer::Type() : false );
1936 // disable non-OCC viewframe menu commands
1937 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1938 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1939 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1940 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1941 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1942 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1943 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1945 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1946 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1947 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1948 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1950 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1953 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1955 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1956 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
1957 #ifndef DISABLE_PYCONSOLE
1958 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1960 if ( myCreationInfoWdg )
1961 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1962 if ( myTextTreeWdg )
1963 mappa.insert( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
1966 void GeometryGUI::viewManagers( QStringList& lst ) const
1968 lst.append( OCCViewer_Viewer::Type() );
1971 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1973 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1975 qDebug( "connect" );
1976 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1977 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1978 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1979 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1980 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1981 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1982 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1983 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1985 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1986 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1988 // disable OCC selectors
1989 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1990 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1991 while ( itOCCSel.hasNext() )
1992 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1993 sr->setEnabled(true);
1995 else if ( vm->getType() == SVTK_Viewer::Type() )
1997 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1998 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
2000 // disable VTK selectors
2001 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
2002 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2003 while ( itVTKSel.hasNext() )
2004 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2005 sr->setEnabled(true);
2009 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
2011 SUIT_ViewModel* viewer = vm->getViewModel();
2012 if ( vm->getType() == OCCViewer_Viewer::Type() )
2014 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2015 while ( itOCCSel.hasNext() )
2016 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2017 if ( sr->viewer() == viewer )
2019 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
2023 if ( vm->getType() == SVTK_Viewer::Type() )
2025 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2026 while ( itVTKSel.hasNext() )
2027 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2028 if ( sr->viewer() == viewer )
2030 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2036 //================================================================================
2038 * \brief Slot called when selection changed. Shows creation info of a selected object
2040 //================================================================================
2042 void GeometryGUI::updateCreationInfo()
2044 if ( myCreationInfoWdg )
2045 myCreationInfoWdg->clear();
2047 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2048 // if ( !myCreationInfoWdg->isVisible() )
2051 // look for a sole selected GEOM_Object
2052 GEOM::GEOM_BaseObject_var geomObj;
2054 SALOME_ListIO selected;
2055 getApp()->selectionMgr()->selectedObjects( selected );
2057 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2058 SALOME_ListIteratorOfListIO selIt( selected );
2059 for ( ; selIt.More(); selIt.Next() )
2061 Handle(SALOME_InteractiveObject) io = selIt.Value();
2062 if ( !io->hasEntry() ) continue;
2063 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2064 if ( !sobj ) continue;
2065 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2066 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2067 if ( !gobj->_is_nil() )
2069 if ( !geomObj->_is_nil() )
2070 return; // several GEOM objects selected
2074 if ( geomObj->_is_nil() ) return;
2076 // pass creation info of geomObj to myCreationInfoWdg
2078 if ( myCreationInfoWdg ) {
2080 GEOM::CreationInformationSeq_var info;
2083 info = geomObj->GetCreationInformation();
2087 myCreationInfoWdg->setInfo( info );
2091 void GeometryGUI::onAutoBringToFront()
2093 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2094 if( !isAutoBringToFront )
2097 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2098 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2101 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2102 if (!appStudy) return;
2104 GEOM_Displayer displayer( appStudy );
2106 SALOME_View* window = displayer.GetActiveView();
2107 if ( !window ) return;
2109 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2111 SALOME_ListIO selected;
2112 getApp()->selectionMgr()->selectedObjects( selected );
2113 if (!myTopLevelIOList.IsEmpty())
2115 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2117 Handle( SALOME_InteractiveObject ) io = It.Value();
2118 bool isSelected = false;
2119 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2121 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2122 if( io->isSame( sel_io ) )
2125 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2127 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2128 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2133 myTopLevelIOList.Assign(selected);
2134 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2136 Handle( SALOME_InteractiveObject ) io = It.Value();
2137 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2138 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2141 displayer.UpdateViewer();
2142 GeometryGUI::Modified();
2145 void GeometryGUI::updateFieldColorScale()
2147 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2149 GEOM_Displayer aDisplayer( aStudy );
2150 aDisplayer.UpdateColorScale();
2154 QString GeometryGUI::engineIOR() const
2156 if ( !CORBA::is_nil( GetGeomGen() ) )
2157 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2161 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2162 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2164 theWidth = theHeight = 0;
2166 Handle(TColStd_HArray1OfByte) aTexture;
2169 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2170 aTexture = aTextureMap[ theId ];
2171 if ( aTexture.IsNull() ) {
2172 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2173 if ( !aInsOp->_is_nil() ) {
2174 CORBA::Long aWidth, aHeight;
2175 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2176 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2178 theHeight = aHeight;
2180 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2182 for (int i = 0; i < aStream->length(); i++)
2183 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2184 aTextureMap[ theId ] = aTexture;
2192 LightApp_Selection* GeometryGUI::createSelection() const
2194 return new GEOMGUI_Selection();
2197 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2199 SalomeApp_Module::contextMenuPopup( client, menu, title );
2201 getApp()->selectionMgr()->selectedObjects( lst );
2203 //Add submenu for predefined materials
2204 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2205 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2206 QtxPopupMgr* mgr = popupMgr();
2207 //get parrent for submenu
2208 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2210 QMenu* oldMenu = act->menu() ;
2215 QMenu* matMenu = new QMenu();
2216 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2218 //Get current material model for the object
2220 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2221 if ( anApp && anApp->activeViewManager() ) {
2222 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2224 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2227 QString curModel = "";
2228 if ( v.canConvert<QString>() ) curModel = v.toString();
2229 // get list of all predefined materials
2230 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2232 foreach ( QString material, materials )
2234 QAction* menAct = matMenu->addAction( material );
2235 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2236 signalMapper->setMapping( menAct, material );
2237 menAct->setCheckable( true );
2238 // Set checked if this material is current
2239 Material_Model aModel;
2240 aModel.fromResources( material );
2241 if ( !found && aModel.toProperties() == curModel ) {
2242 menAct->setChecked( true );
2246 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2247 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2248 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2249 this, SLOT( OnSetMaterial( const QString & ) ) );
2250 act->setMenu( matMenu );
2254 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2255 Handle(SALOME_InteractiveObject) io = lst.First();
2256 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2257 _PTR(Study) study = appStudy->studyDS();
2258 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2260 QString aName = QString( obj->GetName().c_str() );
2261 aName.remove( QRegExp("\\s+$") );
2267 void GeometryGUI::OnSetMaterial(const QString& theName)
2269 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2273 void GeometryGUI::createPreferences()
2275 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2277 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2279 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2280 setPreferenceProperty( genGroup, "columns", 2 );
2282 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2283 LightApp_Preferences::Selector,
2284 "Geometry", "display_mode" );
2286 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2287 LightApp_Preferences::Color, "Geometry", "shading_color" );
2289 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2290 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2292 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2293 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2295 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2296 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2298 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2299 LightApp_Preferences::Color, "Geometry", "line_color" );
2301 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2302 LightApp_Preferences::Color, "Geometry", "point_color" );
2304 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2305 LightApp_Preferences::Color, "Geometry", "isos_color" );
2307 addPreference( tr( "PREF_LABEL_COLOR" ), genGroup,
2308 LightApp_Preferences::Color, "Geometry", "label_color" );
2310 addPreference( "", genGroup, LightApp_Preferences::Space );
2312 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2313 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2315 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2316 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2318 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2319 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2321 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2322 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2324 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2325 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2327 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2328 LightApp_Preferences::Selector,
2329 "Geometry", "material" );
2331 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2332 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2338 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2339 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2341 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2342 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2344 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2345 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2347 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2348 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2350 for (int i = 0; i < nb; i++) {
2351 setPreferenceProperty( wd[i], "min", 1 );
2352 setPreferenceProperty( wd[i], "max", 5 );
2355 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2356 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2358 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2359 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2361 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2362 setPreferenceProperty( aDimGroupId, "columns", 2 );
2364 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2365 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2367 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2368 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2370 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2371 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2373 int aDimFontId = addPreference( tr( "PREF_DIMENSIONS_FONT" ), aDimGroupId, LightApp_Preferences::Font, "Geometry", "dimensions_font" );
2375 int f = QtxFontEdit::Family | QtxFontEdit::Size;
2376 setPreferenceProperty( aDimFontId, "features", f );
2377 setPreferenceProperty( aDimFontId, "mode", QtxFontEdit::Custom );
2379 Handle(Font_FontMgr) fmgr = Font_FontMgr::GetInstance();
2380 QString aFontFile = "";
2381 resMgr->value("resources", "GEOM", aFontFile);
2382 aFontFile = aFontFile + QDir::separator() + "Y14.5M-2009.ttf";
2383 // add enginier font into combobox
2384 int fontID = QFontDatabase::addApplicationFont( aFontFile );
2385 Handle(Font_SystemFont) sf = new Font_SystemFont(
2386 new TCollection_HAsciiString("Y14.5M-2009"),
2388 new TCollection_HAsciiString(aFontFile.toLatin1().data()) );
2389 // register font in OCC font manager
2390 fmgr->RegisterFont( sf, Standard_False );
2392 // get list of supported fonts by OCC
2393 QStringList anOCCFonts;
2394 TColStd_SequenceOfHAsciiString theFontsNames;
2395 fmgr->GetAvailableFontsNames( theFontsNames );
2396 for(Standard_Integer i=1; i<=theFontsNames.Length(); i++) {
2397 Handle(TCollection_HAsciiString) str = theFontsNames(i);
2398 anOCCFonts << str->ToCString();
2400 anOCCFonts.removeDuplicates();
2401 // set the supported fonts into combobox to use its only
2402 setPreferenceProperty( aDimFontId, "fonts", anOCCFonts );
2404 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2405 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2407 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2408 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2409 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2411 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2412 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2414 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2415 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2417 QStringList aListOfLengthUnits;
2418 aListOfLengthUnits << "m";
2419 aListOfLengthUnits << "cm";
2420 aListOfLengthUnits << "mm";
2421 aListOfLengthUnits << "in.";
2422 aListOfLengthUnits << "ft.";
2424 QStringList aListOfAngUnits;
2425 aListOfAngUnits << "rad";
2426 aListOfAngUnits << "deg";
2428 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2429 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2431 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2432 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2434 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2435 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2437 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2438 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2439 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2441 addPreference( tr( "PREF_DIMENSIONS_USE_TEXT3D" ), aDimGroupId,
2442 LightApp_Preferences::Bool, "Geometry", "dimensions_use_text3d" );
2444 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2445 setPreferenceProperty( isoGroup, "columns", 2 );
2446 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2447 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2448 setPreferenceProperty( isoU, "min", 0 );
2449 setPreferenceProperty( isoU, "max", 100000 );
2450 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2451 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2452 setPreferenceProperty( isoV, "min", 0 );
2453 setPreferenceProperty( isoV, "max", 100000 );
2455 // Quantities with individual precision settings
2456 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2457 setPreferenceProperty( precGroup, "columns", 2 );
2459 const int nbQuantities = 8;
2460 int prec[nbQuantities], ii = 0;
2461 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2462 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2463 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2464 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2465 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2466 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2467 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2468 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2469 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2470 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2471 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2472 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2473 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2474 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2475 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2476 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2478 // Set property for precision value for spinboxes
2479 for ( ii = 0; ii < nbQuantities; ii++ ){
2480 setPreferenceProperty( prec[ii], "min", -14 );
2481 setPreferenceProperty( prec[ii], "max", 14 );
2482 setPreferenceProperty( prec[ii], "precision", 2 );
2485 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2486 setPreferenceProperty( VertexGroup, "columns", 2 );
2488 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2489 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2491 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2492 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2494 // Set property for default display mode
2495 QStringList aModesList;
2496 aModesList.append( tr("MEN_WIREFRAME") );
2497 aModesList.append( tr("MEN_SHADING") );
2498 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2499 aModesList.append( tr("MEN_TEXTURE") );
2501 QList<QVariant> anIndexesList;
2502 anIndexesList.append(0);
2503 anIndexesList.append(1);
2504 anIndexesList.append(2);
2505 anIndexesList.append(3);
2507 setPreferenceProperty( dispmode, "strings", aModesList );
2508 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2510 // Set property for top level display mode
2511 QStringList aTopModesList;
2512 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2513 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2514 aTopModesList.append( tr("MEN_WIREFRAME") );
2515 aTopModesList.append( tr("MEN_SHADING") );
2516 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2518 QList<QVariant> aTopIndexesList;
2519 aTopIndexesList.append(0);
2520 aTopIndexesList.append(1);
2521 aTopIndexesList.append(2);
2522 aTopIndexesList.append(3);
2523 aTopIndexesList.append(4);
2525 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2526 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2528 // Set property for step value for spinboxes
2529 setPreferenceProperty( step, "min", 1 );
2530 setPreferenceProperty( step, "max", 10000 );
2531 setPreferenceProperty( step, "precision", 3 );
2533 // Set property for trandparency value for spinboxes
2534 setPreferenceProperty( transparency, "min", 0 );
2535 setPreferenceProperty( transparency, "max", 100 );
2537 // Set property for deflection value for spinboxes
2538 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2539 setPreferenceProperty( defl, "max", 1.0 );
2540 setPreferenceProperty( defl, "step", 1.0e-04 );
2541 setPreferenceProperty( defl, "precision", 6 );
2543 // Set property for default material
2544 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2546 // Set property vertex marker type
2547 QList<QVariant> aMarkerTypeIndicesList;
2548 QList<QVariant> aMarkerTypeIconsList;
2550 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2551 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2552 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2553 aMarkerTypeIndicesList << (i-1);
2554 aMarkerTypeIconsList << pixmap;
2557 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2558 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2560 // Set property for vertex marker scale
2561 QList<QVariant> aMarkerScaleIndicesList;
2562 QStringList aMarkerScaleValuesList;
2564 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2565 aMarkerScaleIndicesList << iii;
2566 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2569 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2570 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2572 // Scalar bar for field step presentation
2573 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2574 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2576 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2577 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2578 setPreferenceProperty( sbXPosition, "min", 0 );
2579 setPreferenceProperty( sbXPosition, "max", 1 );
2580 setPreferenceProperty( sbXPosition, "step", 0.05 );
2582 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2583 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2584 setPreferenceProperty( sbYPosition, "min", 0 );
2585 setPreferenceProperty( sbYPosition, "max", 1 );
2586 setPreferenceProperty( sbYPosition, "step", 0.05 );
2588 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2589 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2590 setPreferenceProperty( sbWidth, "min", 0 );
2591 setPreferenceProperty( sbWidth, "max", 1 );
2592 setPreferenceProperty( sbWidth, "step", 0.05 );
2594 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2595 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2596 setPreferenceProperty( sbHeight, "min", 0 );
2597 setPreferenceProperty( sbHeight, "max", 1 );
2598 setPreferenceProperty( sbHeight, "step", 0.05 );
2600 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2601 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2602 setPreferenceProperty( sbTextHeight, "min", 6 );
2603 setPreferenceProperty( sbTextHeight, "max", 24 );
2604 setPreferenceProperty( sbTextHeight, "step", 1 );
2606 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2607 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2608 setPreferenceProperty( sbNbIntervals, "min", 2 );
2609 setPreferenceProperty( sbNbIntervals, "max", 64 );
2610 setPreferenceProperty( sbNbIntervals, "step", 1 );
2612 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2613 setPreferenceProperty( originGroup, "columns", 2 );
2615 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2616 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2617 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2618 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2620 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2621 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2623 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2624 setPreferenceProperty( operationsGroup, "columns", 2 );
2626 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2627 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2629 addPreference( tr( "PREF_HIDE_INPUT_OBJECT" ), operationsGroup,
2630 LightApp_Preferences::Bool, "Geometry", "hide_input_object" );
2632 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2634 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2636 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2637 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2639 QStringList aHierarchyTypeList;
2640 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2641 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2642 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2644 QList<QVariant> aHierarchyTypeIndexesList;
2645 aHierarchyTypeIndexesList.append(0);
2646 aHierarchyTypeIndexesList.append(1);
2647 aHierarchyTypeIndexesList.append(2);
2649 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2650 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2652 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2653 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2655 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2657 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2658 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2660 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2661 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2662 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2663 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2664 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2665 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2666 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2667 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2669 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2670 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2671 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2672 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2673 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2674 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2681 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2683 if (section == "Geometry") {
2684 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2685 if (param == QString("SettingsGeomStep")) {
2686 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2687 EmitSignalDefaultStepValueChanged(spin_step);
2689 else if (param == QString("toplevel_color")) {
2690 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2691 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2693 else if (param == QString("toplevel_dm")) {
2694 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2696 else if (param == QString("scalar_bar_x_position") ||
2697 param == QString("scalar_bar_y_position") ||
2698 param == QString("scalar_bar_width") ||
2699 param == QString("scalar_bar_height") ||
2700 param == QString("scalar_bar_text_height") ||
2701 param == QString("scalar_bar_nb_intervals")) {
2702 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2704 GEOM_Displayer aDisplayer( aStudy );
2705 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2706 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2709 else if ( param == QString("dimensions_color") ||
2710 param == QString("dimensions_line_width") ||
2711 param == QString("dimensions_font") ||
2712 param == QString("dimensions_arrow_length") ||
2713 param == QString("dimensions_show_units") ||
2714 param == QString("dimensions_length_units") ||
2715 param == QString("dimensions_angle_units") ||
2716 param == QString("dimensions_use_text3d") ||
2717 param == QString("label_color") )
2719 SalomeApp_Application* anApp = getApp();
2725 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2731 GEOM_Displayer aDisplayer( aStudy );
2733 ViewManagerList aVMs;
2734 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2735 ViewManagerList::Iterator anIt = aVMs.begin();
2736 for ( ; anIt != aVMs.end(); ++anIt )
2738 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2744 SALOME_ListIO aVisible;
2745 aViewer->GetVisible( aVisible );
2746 aDisplayer.Redisplay( aVisible, false, aViewer );
2748 if ( param == QString( "label_color" ) ) {
2749 ViewManagerList aVMsVTK;
2750 anApp->viewManagers( SVTK_Viewer::Type(), aVMsVTK );
2751 ViewManagerList::Iterator anIt = aVMsVTK.begin();
2752 for ( ; anIt != aVMsVTK.end(); ++anIt )
2754 SVTK_Viewer* aViewer = dynamic_cast<SVTK_Viewer*>( (*anIt)->getViewModel() );
2759 SALOME_ListIO aVisible;
2760 aViewer->GetVisible( aVisible );
2761 aDisplayer.Redisplay( aVisible, false, aViewer );
2764 aDisplayer.UpdateViewer();
2766 else if ( param.startsWith( "dependency_tree") )
2767 emit SignalDependencyTreeParamChanged( section, param );
2771 LightApp_Displayer* GeometryGUI::displayer()
2774 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2778 void GeometryGUI::setLocalSelectionMode(const int mode)
2780 myLocalSelectionMode = mode;
2783 int GeometryGUI::getLocalSelectionMode() const
2785 return myLocalSelectionMode;
2788 const char gSeparator = '_'; // character used to separate parameter names
2789 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2792 * \brief Store visual parameters
2794 * This method is called just before the study document is saved.
2795 * Store visual parameters in AttributeParameter attribute(s)
2797 void GeometryGUI::storeVisualParameters (int savePoint)
2799 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2800 if ( !appStudy || !appStudy->studyDS() )
2802 _PTR(Study) studyDS = appStudy->studyDS();
2804 // componentName is used for encoding of entries when storing them in IParameters
2805 std::string componentName = myComponentGeom->ComponentDataType();
2806 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2807 //if (!aSComponent) return;
2810 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2811 componentName.c_str(),
2813 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2815 QSet<QString> anEntriesToStoreShared;
2816 QList<SUIT_ViewManager*> lst;
2817 QList<SUIT_ViewManager*>::Iterator it;
2819 // main cycle to store parameters of displayed objects
2821 getApp()->viewManagers(lst);
2822 for (it = lst.begin(); it != lst.end(); it++) {
2823 SUIT_ViewManager* vman = *it;
2824 QString vType = vman->getType();
2825 int aMgrId = vman->getGlobalId();
2826 // saving VTK actors properties
2827 QVector<SUIT_ViewWindow*> views = vman->getViews();
2828 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2829 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
2830 ObjMap::ConstIterator o_it = anObjects.begin();
2831 for (; o_it != anObjects.end(); o_it++) {
2832 const PropMap& aProps = o_it.value();
2834 //Check that object exists in the study
2835 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2836 if ( !obj || !(aProps.count() > 0))
2838 // entry is "encoded" = it does NOT contain component adress, since it is a
2839 // subject to change on next component loading
2841 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2843 _PTR(GenericAttribute) anAttr;
2844 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2847 // remember entry of object to store shared GEOM properties
2848 // (e.g. dimension properties).
2849 if ( vType == OCCViewer_Viewer::Type() )
2851 anEntriesToStoreShared.insert( o_it.key() );
2854 QString param, occParam = vType;
2855 occParam += GEOM::sectionSeparator();
2856 occParam += QString::number(aMgrId);
2857 occParam += GEOM::sectionSeparator();
2859 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2860 param = occParam + GEOM::propertyName( GEOM::Visibility );
2861 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2864 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2865 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2866 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2869 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2870 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2872 val << QString::number(c.redF());
2873 val << QString::number(c.greenF());
2874 val << QString::number(c.blueF());
2875 param = occParam + GEOM::propertyName( GEOM::Color );
2876 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2879 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2880 param = occParam + GEOM::propertyName( GEOM::Texture );
2881 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2884 if (vType == SVTK_Viewer::Type()) {
2885 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2886 param = occParam + GEOM::propertyName( GEOM::Opacity );
2887 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2889 } else if (vType == SOCC_Viewer::Type()) {
2890 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2891 param = occParam + GEOM::propertyName( GEOM::Transparency );
2892 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2895 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2896 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2897 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2901 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2902 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2903 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2906 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2907 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2908 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2911 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
2912 param = occParam + GEOM::propertyName( GEOM::Vertices );
2913 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
2916 if (aProps.contains(GEOM::propertyName( GEOM::ShowName ))) {
2917 param = occParam + GEOM::propertyName( GEOM::ShowName );
2918 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::ShowName )).toString().toStdString());
2921 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2922 param = occParam + GEOM::propertyName( GEOM::Deflection );
2923 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2926 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2927 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2928 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2929 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2932 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2933 param = occParam + GEOM::propertyName( GEOM::Material );
2934 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2937 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2938 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2939 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2942 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2943 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2944 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2946 } // object iterator
2948 } // for (viewManagers)
2950 // store dimension attributes of objects:
2951 // since the displayed object always persists in property map, we remember the object entries
2952 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
2953 QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
2954 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
2955 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
2957 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
2958 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName);
2960 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
2962 if ( aDimensions.GetNumber() == 0 )
2967 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
2972 * \brief Restore visual parameters
2974 * This method is called after the study document is opened.
2975 * Restore visual parameters from AttributeParameter attribute(s)
2977 void GeometryGUI::restoreVisualParameters (int savePoint)
2979 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2980 if (!appStudy || !appStudy->studyDS())
2982 _PTR(Study) studyDS = appStudy->studyDS();
2984 // componentName is used for encoding of entries when storing them in IParameters
2985 std::string componentName = myComponentGeom->ComponentDataType();
2986 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2987 //if (!aSComponent) return;
2990 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2991 componentName.c_str(),
2993 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2995 std::vector<std::string> entries = ip->getEntries();
2997 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2999 // entry is a normal entry - it should be "decoded" (setting base adress of component)
3000 QString entry (ip->decodeEntry(*entIt).c_str());
3002 // Check that the entry corresponds to a real object in the Study
3003 // as the object may be deleted or modified after the visual state is saved.
3004 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
3005 if (!so) continue; //Skip the not existent entry
3007 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
3008 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
3010 std::vector<std::string>::iterator namesIt = paramNames.begin();
3011 std::vector<std::string>::iterator valuesIt = paramValues.begin();
3013 // actors are stored in a map after displaying of them for
3014 // quicker access in the future: map < viewID to actor >
3015 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
3016 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
3018 QString viewerTypStr;
3019 QString viewIndexStr;
3021 QVector<PropMap> aListOfMap;
3023 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
3025 // visual parameters are stored in strings as follows:
3026 // 1) ViewerType_ViewIndex_ParamName
3027 // 2) ViewerType_ParamName (shared for GEOM module)
3028 // '_' is used as separator and should not be used in viewer type or parameter names.
3029 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
3031 bool isShared = lst.size() == 2;
3032 bool isViewer = lst.size() == 3;
3033 if ( !isShared && !isViewer )
3038 // shared visual parameters
3041 QString aParamNameStr( lst[1] );
3042 QString aValuesStr( (*valuesIt).c_str() );
3044 // shared dimension properties are stored as attribute
3045 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
3047 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
3048 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
3054 // per view visual parameters
3055 viewerTypStr = lst[0];
3056 viewIndexStr = lst[1];
3057 QString paramNameStr = lst[2];
3060 viewIndex = viewIndexStr.toUInt(&ok);
3061 if (!ok) // bad conversion of view index to integer
3064 if ((viewIndex + 1) > aListOfMap.count()) {
3065 aListOfMap.resize(viewIndex + 1);
3068 QString val((*valuesIt).c_str());
3069 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
3070 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
3071 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
3072 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
3073 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
3074 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
3075 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
3076 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
3077 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
3078 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
3079 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
3080 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
3081 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
3082 QStringList rgb = val.split(GEOM::subSectionSeparator());
3083 if (rgb.count() == 3) {
3084 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
3085 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
3087 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
3088 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
3089 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
3090 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
3091 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
3092 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
3093 } else if (paramNameStr == GEOM::propertyName( GEOM::ShowName )) {
3094 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::ShowName ), val == "true" || val == "1");
3095 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3096 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3097 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3098 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3099 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3100 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3101 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3102 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3103 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3104 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3106 } // for names/parameters iterator
3108 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3110 for (int index = 0; index < aListOfMap.count(); index++) {
3111 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
3113 //Get Visibility property of the current PropMap
3114 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3115 SUIT_ViewManager* vman = lst.at(index);
3116 SUIT_ViewModel* vmodel = vman->getViewModel();
3117 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
3120 } // for entries iterator
3122 // update all VTK and OCC views
3123 QList<SUIT_ViewManager*> lst;
3124 getApp()->viewManagers(lst);
3125 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3126 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3129 if (vmodel->getType() == SVTK_Viewer::Type()) {
3130 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3131 vtkView->getRenderer()->ResetCameraClippingRange();
3134 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3135 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3136 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3143 // Compute current name mode of the viewer
3144 void UpdateNameMode( SalomeApp_Application* app )
3146 bool isMode = false;
3147 SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() );
3148 SUIT_ViewWindow* viewWindow = app->desktop()->activeWindow();
3149 GEOM_Displayer displayer( aStudy );
3150 int aMgrId = viewWindow->getViewManager()->getGlobalId();
3152 SALOME_View* window = displayer.GetActiveView();
3153 if ( !window ) return;
3155 SALOME_ListIO anIOlst;
3156 window->GetVisible( anIOlst );
3158 for ( SALOME_ListIteratorOfListIO It( anIOlst ); It.More(); It.Next() ) {
3159 Handle( SALOME_InteractiveObject ) io = It.Value();
3160 QVariant v = aStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::ShowName ), QVariant() );
3161 bool isIONameMode = v.isValid() ? v.toBool() : false;
3165 viewWindow->setProperty( "NameMode", isMode );
3168 void GeometryGUI::onViewAboutToShow()
3170 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3171 QAction* a = action( GEOMOp::OpSwitchVectors );
3172 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3173 QAction* aNameAction = action( GEOMOp::OpSwitchName );
3175 a->setEnabled(true);
3176 bool vmode = window->property("VectorsMode").toBool();
3177 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3178 aVerticesAction->setEnabled(true);
3179 vmode = window->property("VerticesMode").toBool();
3180 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3181 UpdateNameMode( getApp() );
3182 aNameAction->setEnabled(true);
3183 vmode = window->property("NameMode").toBool();
3184 aNameAction->setText ( vmode == 1 ? tr( "MEN_NAME_MODE_OFF" ) : tr("MEN_NAME_MODE_ON") );
3186 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3187 a->setEnabled(false);
3188 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3189 aVerticesAction->setEnabled(false);
3190 aNameAction->setText ( tr("MEN_NAME_MODE_ON") );
3191 aNameAction->setEnabled(false);
3196 \brief Return action by id
3197 \param id identifier of the action
3200 QAction* GeometryGUI::getAction(const int id) {
3205 \brief GEOM module message handler
3207 This method can be re-implemented in the subclasses.
3208 This is a GEOM module message handler.
3210 \param msg the message received.
3212 void GeometryGUI::message(const QString& msg)
3215 QStringList data = msg.split("/");
3216 const int nbStrings = data.count();
3218 if (nbStrings > 0) {
3219 if (data[0] == "modified") {
3221 QString anIOR = nbStrings > 1 ? data[1] : QString();
3223 if ( anIOR.isEmpty() ) {
3227 // Get the geom object.
3228 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3230 // Clear the shape buffer
3231 GeometryGUI::ClearShapeBuffer (anObj);
3237 \brief Clears the shape buffer.
3239 This is a static method. It clears the shape buffer.
3241 \param theObj the object
3243 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3245 if ( CORBA::is_nil( theObj ) )
3248 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3249 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3250 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3252 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3257 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3262 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3266 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3267 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3268 _PTR(GenericAttribute) anAttr;
3269 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3270 _PTR(AttributeIOR) anIOR ( anAttr );
3271 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3272 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3278 \brief Returns the object from IOR.
3280 This is a static method. It returns the object from its IOR.
3282 \param IOR object IOR
3283 \return GEOM object.
3285 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3287 GEOM::GEOM_Object_var geomObj;
3288 if ( !IOR.isEmpty() ) {
3289 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3290 ( IOR.toLatin1().constData() );
3291 if ( !CORBA::is_nil( corbaObj ) )
3292 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3294 return geomObj._retn();
3298 \brief Returns IOR of the object.
3300 This is a static method. It returns the object's IOR.
3302 \param object the GEOM object.
3303 \return object's IOR.
3305 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3308 if ( !CORBA::is_nil( object ) ) {
3309 CORBA::String_var anIOR =
3310 SalomeApp_Application::orb()->object_to_string( object );
3317 \brief Check if this object is can't be renamed in place
3319 This method can be re-implemented in the subclasses.
3320 Return true in case if object isn't reference or component (module root).
3322 \param entry column id
3323 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3325 bool GeometryGUI::renameAllowed( const QString& entry) const {
3327 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3328 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3329 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3331 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3335 Rename object by entry.
3336 \param entry entry of the object
3337 \param name new name of the object
3338 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3340 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3342 bool result = false;
3344 SalomeApp_Application* app =
3345 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3346 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3351 _PTR(Study) aStudy = appStudy->studyDS();
3356 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3358 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3362 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3363 _PTR(GenericAttribute) anAttr;
3365 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3366 _PTR(AttributeName) aName (anAttr);
3368 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3369 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3370 if (!CORBA::is_nil(anObj)) {
3371 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3372 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3380 void GeometryGUI::updateMaterials()
3382 LightApp_Preferences* pref = preferences();
3384 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3385 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3386 if ( !materials.contains( currentMaterial ) )
3387 // user material set as default in the preferences, might be removed
3388 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3390 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3392 setPreferenceProperty( prefItem->id(),
3393 "strings", materials );
3394 prefItem->retrieve();
3400 \brief Check if the module allows "drag" operation of its objects.
3402 Overloaded from LightApp_Module class.
3404 This function is a part of the general drag-n-drop mechanism.
3405 The goal of this function is to check data object passed as a parameter
3406 and decide if it can be dragged or no.
3408 \param what data object being tested for drag operation
3409 \return \c true if module allows dragging of the specified object
3410 \sa isDropAccepted(), dropObjects()
3412 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3414 // we allow dragging object under root and object from folder
3415 int aLevel = what->level();
3416 bool anObjectInFolder = false;
3418 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3420 _PTR(SObject) aSO = dataObj->object();
3422 _PTR(GenericAttribute) anAttr;
3423 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3424 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3425 _PTR(AttributeLocalID) aLocalID( anAttr );
3426 anObjectInFolder = aLocalID->Value() == 999;
3431 return aLevel == 2 || anObjectInFolder;
3435 \brief Check if the module allows "drop" operation on the given object.
3437 Overloaded from LightApp_Module class.
3439 This function is a part of the general drag-n-drop mechanism.
3440 The goal of this function is to check data object passed as a parameter
3441 and decide if it can be used as a target for the "drop" operation.
3442 The processing of the drop operation itself is done in the dropObjects() function.
3444 \param where target data object
3445 \return \c true if module supports dropping on the \a where data object
3446 \sa isDraggable(), dropObjects()
3448 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3450 // we allow dropping into folder and top-level GEOM object
3451 int aLevel = where->level();
3452 bool isFolder = false;
3454 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3456 _PTR(SObject) aSO = dataObj->object();
3458 _PTR(GenericAttribute) anAttr;
3459 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3460 _PTR(AttributeLocalID) aLocalID( anAttr );
3461 isFolder = aLocalID->Value() == 999;
3466 return aLevel == 1 || isFolder;
3470 \brief Complete drag-n-drop operation.
3472 Overloaded from LightApp_Module class.
3474 This function is a part of the general drag-n-drop mechanism.
3475 Its goal is to handle dropping of the objects being dragged according
3476 to the chosen operation (move). The dropping is performed in the
3477 context of the parent data object \a where and the \a row (position in the
3478 children index) at which the data should be dropped. If \a row is equal to -1,
3479 this means that objects are added to the end of the children list.
3481 \param what objects being dropped
3482 \param where target data object
3483 \param row child index at which the drop operation is performed
3484 \param action drag-n-drop operation (Qt::DropAction) - move
3486 \sa isDraggable(), isDropAccepted()
3488 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3489 const int row, Qt::DropAction action )
3491 if (action != Qt::CopyAction && action != Qt::MoveAction)
3492 return; // unsupported action
3494 // get parent object
3495 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3496 if ( !dataObj ) return; // wrong parent
3497 _PTR(SObject) parentObj = dataObj->object();
3499 // Find the current Study and StudyBuilder
3500 _PTR(Study) aStudy = parentObj->GetStudy();
3501 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3502 // collect all parents of the target node
3503 QStringList parentIDs;
3504 _PTR(SObject) parent = parentObj;
3505 while( !parent->IsNull() ) {
3506 parentIDs << parent->GetID().c_str();
3507 parent = aUseCaseBuilder->GetFather(parent);
3510 // collect objects being dropped
3511 GEOM::object_list_var objects = new GEOM::object_list();
3512 objects->length( what.count() );
3514 for ( int i = 0; i < what.count(); i++ ) {
3515 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3516 if ( !dataObj ) continue; // skip wrong objects
3517 _PTR(SObject) sobj = dataObj->object();
3518 // check that dropped object is not a parent of target object
3519 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3520 return; // it's not allowed to move node into it's child
3522 objects[i] = _CAST(SObject, sobj)->GetSObject();
3525 objects->length( count );
3527 // call engine function
3528 GetGeomGen()->Move( objects.in(), // what
3529 _CAST(SObject, parentObj)->GetSObject(), // where
3532 // update Object browser
3533 getApp()->updateObjectBrowser( false );
3536 void GeometryGUI::emitDimensionsUpdated( QString entry )
3538 emit DimensionsUpdated( entry );