1 // Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : GeometryGUI.cxx
23 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
25 #include <Standard_math.hxx> // E.A. must be included before Python.h to fix compilation on windows
27 #undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
30 #include "GeometryGUI.h"
31 #include "GeometryGUI_Operations.h"
32 #include "GEOMPluginGUI.h"
33 #include "GEOMGUI_OCCSelector.h"
34 #include "GEOMGUI_Selection.h"
35 #include "GEOMGUI_CreationInfoWdg.h"
36 #include "GEOMGUI_TextTreeWdg.h"
37 #include "GEOMGUI_DimensionProperty.h"
38 #include "GEOM_Constants.h"
39 #include "GEOM_Displayer.h"
40 #include "GEOM_AISShape.hxx"
41 #include "GEOMUtils_XmlHandler.hxx"
43 #include "GEOM_Actor.h"
45 #include <Material_ResourceMgr.h>
46 #include <Material_Model.h>
48 #include <SUIT_Desktop.h>
49 #include <SUIT_MessageBox.h>
50 #include <SUIT_ResourceMgr.h>
51 #include <SUIT_Session.h>
52 #include <SUIT_ViewManager.h>
54 #include <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 libName = "OperationGUI";
628 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
629 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
630 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
631 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
632 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
633 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
634 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
635 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
636 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
637 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
638 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
639 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
640 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
641 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
642 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
643 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
644 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
645 case GEOMOp::OpInspectObj: // MENU REPAIR - INSPECT OBJECT
646 libName = "RepairGUI";
648 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
649 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
650 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
651 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
652 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
653 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
654 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
655 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
656 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
657 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
658 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
659 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
660 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
661 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
662 case GEOMOp::OpFastCheckInters: // MENU MEASURE - FAST CHECK INTERSECTIONS
663 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
664 #ifndef DISABLE_PLOT2DVIEWER
665 case GEOMOp::OpShapeStatistics: // MENU MEASURE - SHAPE STATISTICS
667 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
668 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
669 libName = "MeasureGUI";
671 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
672 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
673 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
674 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
675 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
676 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
677 libName = "GroupGUI";
679 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
680 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
681 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
682 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
683 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
684 libName = "BlocksGUI";
686 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
687 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
688 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
689 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
690 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
691 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
692 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
693 //libName = "AdvancedGUI";
696 if (myPluginActions.contains(id)) {
697 libName = myPluginActions[id].first;
699 GEOMPluginGUI* library = 0;
700 if ( !libName.isEmpty() ) {
702 libName = QString( "lib" ) + libName + ".so";
704 libName = libName + ".dll";
706 library = getPluginLibrary( libName );
709 // call method of corresponding GUI library
711 //QString action ("%1");
712 //action = action.arg(id);
714 //if( !theParam.isValid() )
715 library->OnGUIEvent( myPluginActions[id].second, desk );
717 // library->OnGUIEvent( id, desk, theParam);
720 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
722 updateCreationInfo();
728 GEOMGUI* library = 0;
729 if ( !libName.isEmpty() ) {
731 libName = QString( "lib" ) + libName + ".so";
733 libName = libName + ".dll";
735 library = getLibrary( libName );
738 // call method of corresponding GUI library
740 if( !theParam.isValid() )
741 library->OnGUIEvent( id, desk );
743 library->OnGUIEvent( id, desk, theParam);
746 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
748 updateCreationInfo();
751 //=================================================================================
752 // function : GeometryGUI::activateOperation()
754 //=================================================================================
755 bool GeometryGUI::activateOperation( int actionId )
757 OnGUIEvent(actionId);
761 //=================================================================================
762 // function : GeometryGUI::activateOperation()
764 //=================================================================================
765 bool GeometryGUI::activateOperation( const QString& actionId )
769 int id = actionId.toInt(&isOk);
776 //=================================================================================
777 // function : GeometryGUI::activateOperation()
779 //=================================================================================
780 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
784 QString pluginLib = plugin;
785 // TODO: if <plugin> is a plugin name, find plugin library name
786 if (myPluginLibs.contains(plugin))
787 pluginLib = myPluginLibs[plugin];
789 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
790 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
791 const PluginAction& anAction = actionsIter.value();
792 if (anAction.first == pluginLib && anAction.second == actionId) {
793 // activate operation
794 OnGUIEvent(actionsIter.key());
802 //=================================================================================
803 // function : GeometryGUI::OnKeyPress()
804 // purpose : Called when any key is pressed by user [static]
805 //=================================================================================
806 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
808 if ( !application() )
810 foreach ( GEOMGUI* lib, myGUIMap )
811 lib->OnKeyPress( e, application()->desktop(), w );
814 //=================================================================================
815 // function : GeometryGUI::OnMouseMove()
816 // purpose : Manages mouse move events [static]
817 //=================================================================================
818 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
820 if ( !application() )
822 foreach ( GEOMGUI* lib, myGUIMap )
823 lib->OnMouseMove( e, application()->desktop(), w );
826 //=================================================================================
827 // function : GeometryGUI::OnMouseRelease()
828 // purpose : Manages mouse release events [static]
829 //=================================================================================
830 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
832 if ( !application() )
834 foreach ( GEOMGUI* lib, myGUIMap )
835 lib->OnMouseRelease( e, application()->desktop(), w );
838 //=================================================================================
839 // function : GeometryGUI::OnMousePress()
840 // purpose : Manage mouse press events [static]
841 //=================================================================================
842 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
844 if ( !application() )
846 foreach ( GEOMGUI* lib, myGUIMap )
847 lib->OnMousePress( e, application()->desktop(), w );
850 //=======================================================================
851 // function : createGeomAction
853 //=======================================================================
854 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
855 const int accel, const bool toggle, const QString& shortcutAction )
857 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
858 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
859 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
861 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
863 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
864 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
866 application()->desktop(),
868 this, SLOT( OnGUIEvent() ),
872 //=======================================================================
873 // function : createOriginAndBaseVectors
875 //=======================================================================
876 void GeometryGUI::createOriginAndBaseVectors()
878 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
879 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
881 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
885 _PTR(Study) studyDS = appStudy->studyDS();
886 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
887 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
888 if ( !aBasicOperations->_is_nil() ) {
889 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
890 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
891 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
892 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
893 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
894 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
896 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
897 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
898 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
899 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
900 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
901 anOrigin->UnRegister();
905 aBasicOperations->UnRegister();
907 getApp()->updateObjectBrowser( true );
913 //=======================================================================
914 // function : GeometryGUI::initialize()
915 // purpose : Called when GEOM module is created
916 //=======================================================================
917 void GeometryGUI::initialize( CAM_Application* app )
919 SalomeApp_Module::initialize( app );
921 // ----- create actions --------------
923 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
925 createGeomAction( GEOMOp::OpPoint, "POINT" );
926 createGeomAction( GEOMOp::OpLine, "LINE" );
927 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
928 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
929 createGeomAction( GEOMOp::OpArc, "ARC" );
930 createGeomAction( GEOMOp::OpCurve, "CURVE" );
931 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
932 createGeomAction( GEOMOp::OpVector, "VECTOR" );
933 createGeomAction( GEOMOp::OpPlane, "PLANE" );
934 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
935 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
936 createGeomAction( GEOMOp::OpSurfaceFromFace, "SURFACE_FROM_FACE" );
938 createGeomAction( GEOMOp::OpBox, "BOX" );
939 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
940 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
941 createGeomAction( GEOMOp::OpTorus, "TORUS" );
942 createGeomAction( GEOMOp::OpCone, "CONE" );
943 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
944 createGeomAction( GEOMOp::OpDisk, "DISK" );
946 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
947 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
948 createGeomAction( GEOMOp::OpFilling, "FILLING" );
949 createGeomAction( GEOMOp::OpPipe, "PIPE" );
950 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
951 createGeomAction( GEOMOp::OpThickness, "THICKNESS" );
953 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
954 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
955 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
956 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
957 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
959 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
960 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
962 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
964 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
965 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
967 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
968 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
969 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
971 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
973 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
974 createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" );
976 createGeomAction( GEOMOp::OpEdge, "EDGE" );
977 createGeomAction( GEOMOp::OpWire, "WIRE" );
978 createGeomAction( GEOMOp::OpFace, "FACE" );
979 createGeomAction( GEOMOp::OpShell, "SHELL" );
980 createGeomAction( GEOMOp::OpSolid, "SOLID" );
981 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
983 createGeomAction( GEOMOp::OpFuse, "FUSE" );
984 createGeomAction( GEOMOp::OpCommon, "COMMON" );
985 createGeomAction( GEOMOp::OpCut, "CUT" );
986 createGeomAction( GEOMOp::OpSection, "SECTION" );
988 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
989 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
990 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
991 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
992 createGeomAction( GEOMOp::OpScale, "SCALE" );
993 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
994 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
995 createGeomAction( GEOMOp::OpProjOnCyl, "PROJ_ON_CYL" );
996 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
997 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
998 createGeomAction( GEOMOp::OpExtension, "EXTENSION" );
1000 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
1001 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
1002 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
1003 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
1004 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
1005 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
1006 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
1007 createGeomAction( GEOMOp::OpTransferData, "TRANSFER_DATA" );
1008 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
1009 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
1010 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
1011 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
1013 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
1014 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
1015 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
1017 createGeomAction( GEOMOp::OpSewing, "SEWING" );
1018 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
1019 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
1020 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
1021 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
1022 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
1023 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
1024 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
1025 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
1026 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
1027 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
1028 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
1029 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1030 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1031 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1032 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1033 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1034 createGeomAction( GEOMOp::OpInspectObj, "INSPECT_OBJECT" );
1036 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1037 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1038 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1039 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1040 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1041 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1042 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1043 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1044 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1046 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1047 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1048 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1049 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1050 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1051 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1052 createGeomAction( GEOMOp::OpFastCheckInters, "FAST_CHECK_INTERSECTIONS" );
1053 #ifndef DISABLE_PLOT2DVIEWER
1054 createGeomAction( GEOMOp::OpShapeStatistics, "SHAPE_STATISTICS" );
1057 #ifndef DISABLE_PYCONSOLE
1058 #ifdef _DEBUG_ // PAL16821
1059 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1063 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1064 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1065 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1066 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1067 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1068 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1069 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1070 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1071 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1072 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1073 createGeomAction( GEOMOp::OpSwitchName, "NAME_MODE");
1074 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1075 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1076 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1077 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1078 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1079 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1080 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1081 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1082 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1083 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1084 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1085 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1086 createGeomAction( GEOMOp::OpHide, "ERASE" );
1088 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1089 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1090 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1091 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1092 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1093 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1094 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1095 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1096 createGeomAction( GEOMOp::OpShowName, "POP_SHOW_NAME", "", 0, true );
1097 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1098 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1099 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1100 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1101 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1102 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1103 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1104 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1105 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1106 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1107 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1108 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1109 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1110 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1111 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1112 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1113 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1114 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1115 #ifndef DISABLE_GRAPHICSVIEW
1116 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1118 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1119 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1120 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1122 // Create actions for increase/decrease transparency shortcuts
1123 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1124 "Geometry:Increase transparency");
1125 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1126 "Geometry:Decrease transparency");
1128 // Create actions for increase/decrease number of isolines
1129 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1130 "Geometry:Increase number of isolines");
1131 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1132 "Geometry:Decrease number of isolines");
1134 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1135 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1136 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1137 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1138 //@@ 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 @@//
1140 // ---- create menus --------------------------
1142 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1144 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1145 createMenu( GEOMOp::OpDelete, editId, -1 );
1147 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1149 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1150 createMenu( GEOMOp::OpPoint, basicId, -1 );
1151 createMenu( GEOMOp::OpLine, basicId, -1 );
1152 createMenu( GEOMOp::OpCircle, basicId, -1 );
1153 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1154 createMenu( GEOMOp::OpArc, basicId, -1 );
1155 createMenu( GEOMOp::OpCurve, basicId, -1 );
1156 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1157 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1158 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1159 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1160 createMenu( GEOMOp::OpSurfaceFromFace, basicId, -1 );
1161 createMenu( separator(), basicId, -1 );
1162 createMenu( GEOMOp::OpVector, basicId, -1 );
1163 createMenu( GEOMOp::OpPlane, basicId, -1 );
1164 createMenu( GEOMOp::OpLCS, basicId, -1 );
1165 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1167 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1168 createMenu( GEOMOp::OpBox, primId, -1 );
1169 createMenu( GEOMOp::OpCylinder, primId, -1 );
1170 createMenu( GEOMOp::OpSphere, primId, -1 );
1171 createMenu( GEOMOp::OpTorus, primId, -1 );
1172 createMenu( GEOMOp::OpCone, primId, -1 );
1173 createMenu( GEOMOp::OpRectangle, primId, -1 );
1174 createMenu( GEOMOp::OpDisk, primId, -1 );
1175 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1177 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1178 createMenu( GEOMOp::OpPrism, genId, -1 );
1179 createMenu( GEOMOp::OpRevolution, genId, -1 );
1180 createMenu( GEOMOp::OpFilling, genId, -1 );
1181 createMenu( GEOMOp::OpPipe, genId, -1 );
1182 createMenu( GEOMOp::OpPipePath, genId, -1 );
1183 createMenu( GEOMOp::OpThickness, genId, -1 );
1185 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1186 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1187 //@@ 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 @@//
1189 createMenu( separator(), newEntId, -1 );
1191 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1192 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1193 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1194 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1195 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1196 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1198 createMenu( separator(), newEntId, -1 );
1200 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1201 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1202 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1204 createMenu( separator(), newEntId, -1 );
1206 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1207 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1208 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1209 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1210 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1212 createMenu( separator(), newEntId, -1 );
1214 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1216 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1217 createMenu( GEOMOp::OpEdge, buildId, -1 );
1218 createMenu( GEOMOp::OpWire, buildId, -1 );
1219 createMenu( GEOMOp::OpFace, buildId, -1 );
1220 createMenu( GEOMOp::OpShell, buildId, -1 );
1221 createMenu( GEOMOp::OpSolid, buildId, -1 );
1222 createMenu( GEOMOp::OpCompound, buildId, -1 );
1224 createMenu( separator(), newEntId, -1 );
1226 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1228 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1231 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1233 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1234 createMenu( GEOMOp::OpFuse, boolId, -1 );
1235 createMenu( GEOMOp::OpCommon, boolId, -1 );
1236 createMenu( GEOMOp::OpCut, boolId, -1 );
1237 createMenu( GEOMOp::OpSection, boolId, -1 );
1239 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1240 createMenu( GEOMOp::OpTranslate, transId, -1 );
1241 createMenu( GEOMOp::OpRotate, transId, -1 );
1242 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1243 createMenu( GEOMOp::OpMirror, transId, -1 );
1244 createMenu( GEOMOp::OpScale, transId, -1 );
1245 createMenu( GEOMOp::OpOffset, transId, -1 );
1246 createMenu( GEOMOp::OpProjection, transId, -1 );
1247 createMenu( GEOMOp::OpExtension, transId, -1 );
1248 createMenu( GEOMOp::OpProjOnCyl, transId, -1 );
1249 createMenu( separator(), transId, -1 );
1250 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1251 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1253 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1254 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1255 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1256 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1258 createMenu( separator(), operId, -1 );
1260 createMenu( GEOMOp::OpPartition, operId, -1 );
1261 createMenu( GEOMOp::OpArchimede, operId, -1 );
1262 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1263 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1264 createMenu( GEOMOp::OpTransferData, operId, -1 );
1266 createMenu( separator(), operId, -1 );
1268 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1269 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1270 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1271 createMenu( GEOMOp::OpChamfer, operId, -1 );
1272 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1273 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1274 //createMenu( GEOMOp::OpClipping, operId, -1 );
1276 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1277 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1278 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1279 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1280 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1281 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1282 createMenu( GEOMOp::OpSewing, repairId, -1 );
1283 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1284 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1285 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1286 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1287 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1288 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1289 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1290 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1291 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1292 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1293 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1295 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1296 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1297 createMenu( GEOMOp::OpProperties, measurId, -1 );
1298 createMenu( separator(), measurId, -1 );
1299 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1300 createMenu( GEOMOp::OpInertia, measurId, -1 );
1301 createMenu( GEOMOp::OpNormale, measurId, -1 );
1302 createMenu( separator(), measurId, -1 );
1303 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1304 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1305 createMenu( separator(), measurId, -1 );
1307 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1308 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1309 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1310 createMenu( GEOMOp::OpAngle, dimId, -1 );
1311 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1313 createMenu( separator(), measurId, -1 );
1314 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1315 createMenu( separator(), measurId, -1 );
1316 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1317 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1318 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1319 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1320 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1321 createMenu( GEOMOp::OpFastCheckInters, measurId, -1 );
1322 createMenu( GEOMOp::OpInspectObj, measurId, -1 );
1323 #ifndef DISABLE_PLOT2DVIEWER
1324 createMenu( GEOMOp::OpShapeStatistics, measurId, -1 );
1327 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1328 #ifndef DISABLE_PYCONSOLE
1329 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1330 createMenu( separator(), toolsId, -1 );
1331 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1335 createMenu( separator(), toolsId, -1 );
1336 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1337 createMenu( separator(), toolsId, -1 );
1339 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1340 createMenu( separator(), viewId, -1 );
1342 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1343 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1344 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1345 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1346 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1347 createMenu( separator(), dispmodeId, -1 );
1348 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1349 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1350 createMenu( GEOMOp::OpSwitchName, dispmodeId, -1 );
1352 createMenu( separator(), viewId, -1 );
1353 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1354 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1355 createMenu( separator(), viewId, -1 );
1356 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1357 createMenu( separator(), viewId, -1 );
1361 because of these items are accessible through object browser and viewers
1362 we have removed they from main menu
1364 createMenu( GEOMOp::OpShow, viewId, -1 );
1365 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1366 createMenu( GEOMOp::OpHide, viewId, -1 );
1369 // ---- create toolbars --------------------------
1371 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1372 createTool( GEOMOp::OpPoint, basicTbId );
1373 createTool( GEOMOp::OpLine, basicTbId );
1374 createTool( GEOMOp::OpCircle, basicTbId );
1375 createTool( GEOMOp::OpEllipse, basicTbId );
1376 createTool( GEOMOp::OpArc, basicTbId );
1377 createTool( GEOMOp::OpCurve, basicTbId );
1378 createTool( GEOMOp::OpVector, basicTbId );
1379 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1380 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1381 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1382 createTool( GEOMOp::OpIsoline, basicTbId );
1383 createTool( GEOMOp::OpSurfaceFromFace, basicTbId );
1384 createTool( GEOMOp::OpPlane, basicTbId );
1385 createTool( GEOMOp::OpLCS, basicTbId );
1386 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1388 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1389 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1390 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1392 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1393 createTool( GEOMOp::OpBox, primTbId );
1394 createTool( GEOMOp::OpCylinder, primTbId );
1395 createTool( GEOMOp::OpSphere, primTbId );
1396 createTool( GEOMOp::OpTorus, primTbId );
1397 createTool( GEOMOp::OpCone, primTbId );
1398 createTool( GEOMOp::OpRectangle, primTbId );
1399 createTool( GEOMOp::OpDisk, primTbId );
1400 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1402 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1403 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1404 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1406 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1407 createTool( GEOMOp::OpFuse, boolTbId );
1408 createTool( GEOMOp::OpCommon, boolTbId );
1409 createTool( GEOMOp::OpCut, boolTbId );
1410 createTool( GEOMOp::OpSection, boolTbId );
1412 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1413 createTool( GEOMOp::OpPrism, genTbId );
1414 createTool( GEOMOp::OpRevolution, genTbId );
1415 createTool( GEOMOp::OpFilling, genTbId );
1416 createTool( GEOMOp::OpPipe, genTbId );
1417 createTool( GEOMOp::OpPipePath, genTbId );
1418 createTool( GEOMOp::OpThickness, genTbId );
1420 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1421 createTool( GEOMOp::OpTranslate, transTbId );
1422 createTool( GEOMOp::OpRotate, transTbId );
1423 createTool( GEOMOp::OpChangeLoc, transTbId );
1424 createTool( GEOMOp::OpMirror, transTbId );
1425 createTool( GEOMOp::OpScale, transTbId );
1426 createTool( GEOMOp::OpOffset, transTbId );
1427 createTool( GEOMOp::OpProjection, transTbId );
1428 createTool( GEOMOp::OpExtension, transTbId );
1429 createTool( GEOMOp::OpProjOnCyl, transTbId );
1430 createTool( separator(), transTbId );
1431 createTool( GEOMOp::OpMultiTranslate, transTbId );
1432 createTool( GEOMOp::OpMultiRotate, transTbId );
1434 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1435 createTool( GEOMOp::OpExplode, operTbId );
1436 createTool( GEOMOp::OpPartition, operTbId );
1437 createTool( GEOMOp::OpArchimede, operTbId );
1438 createTool( GEOMOp::OpShapesOnShape, operTbId );
1439 createTool( GEOMOp::OpSharedShapes, operTbId );
1440 createTool( GEOMOp::OpTransferData, operTbId );
1442 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1443 createTool( GEOMOp::OpFillet1d, featTbId );
1444 createTool( GEOMOp::OpFillet2d, featTbId );
1445 createTool( GEOMOp::OpFillet3d, featTbId );
1446 createTool( GEOMOp::OpChamfer, featTbId );
1447 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1448 createTool( GEOMOp::OpExtrudedCut, featTbId );
1450 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1451 createTool( GEOMOp::OpEdge, buildTbId );
1452 createTool( GEOMOp::OpWire, buildTbId );
1453 createTool( GEOMOp::OpFace, buildTbId );
1454 createTool( GEOMOp::OpShell, buildTbId );
1455 createTool( GEOMOp::OpSolid, buildTbId );
1456 createTool( GEOMOp::OpCompound, buildTbId );
1458 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1459 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1460 createTool( GEOMOp::OpProperties, measureTbId );
1461 createTool( GEOMOp::OpCenterMass, measureTbId );
1462 createTool( GEOMOp::OpInertia, measureTbId );
1463 createTool( GEOMOp::OpNormale, measureTbId );
1464 createTool( separator(), measureTbId );
1465 createTool( GEOMOp::OpBoundingBox, measureTbId );
1466 createTool( GEOMOp::OpMinDistance, measureTbId );
1467 createTool( GEOMOp::OpAngle, measureTbId );
1468 createTool( GEOMOp::OpTolerance , measureTbId );
1469 createTool( separator(), measureTbId );
1470 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1471 createTool( GEOMOp::OpFreeFaces, measureTbId );
1472 createTool( separator(), measureTbId );
1473 createTool( GEOMOp::OpWhatIs, measureTbId );
1474 createTool( GEOMOp::OpCheckShape, measureTbId );
1475 createTool( GEOMOp::OpCheckCompound, measureTbId );
1476 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1477 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1478 createTool( GEOMOp::OpFastCheckInters, measureTbId );
1480 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1481 createTool( GEOMOp::OpPictureImport, picturesTbId );
1483 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1486 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1487 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1488 //@@ 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 @@//
1490 // ---- create popup menus --------------------------
1492 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1493 QString clientOCC = "(client='OCCViewer')";
1494 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1495 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1497 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1498 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1499 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1500 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1502 QString autoColorPrefix =
1503 "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') and type='Shape' and selcount=1";
1505 QtxPopupMgr* mgr = popupMgr();
1507 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1508 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1509 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1510 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1511 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1512 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1513 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1514 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1516 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1517 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1518 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1519 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1520 mgr->insert( separator(), -1, -1 ); // -----------
1522 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1523 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1524 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1525 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1526 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1527 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1528 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1529 mgr->insert( separator(), -1, -1 ); // -----------
1530 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1531 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1532 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1533 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1534 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1535 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1536 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1537 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1538 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1539 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1540 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1541 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1542 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1543 mgr->insert( separator(), dispmodeId, -1 );
1544 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1545 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1546 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1547 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1548 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1549 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1550 mgr->insert( action( GEOMOp::OpShowName ), dispmodeId, -1 ); // show name
1551 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1552 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK + " and isNameMode", QtxPopupMgr::ToggleRule );
1553 mgr->insert( separator(), -1, -1 ); // -----------
1555 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1556 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1557 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1558 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1559 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1560 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1561 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1562 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1563 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1564 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1566 // material properties
1567 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1568 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1571 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1572 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1574 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1575 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1576 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1578 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1579 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1581 mgr->insert( separator(), -1, -1 ); // -----------
1582 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1583 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1584 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1585 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1586 mgr->insert( separator(), -1, -1 ); // -----------
1588 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1589 onlyComponent = "((type='Component') and selcount=1)",
1590 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1591 types = "'Shape' 'Group' 'FieldStep'";
1593 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1594 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1596 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1597 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1599 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1600 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1602 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1604 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1605 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1606 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1607 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1608 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1609 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1610 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1611 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1612 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1613 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1614 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1615 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1616 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1617 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1618 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1619 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1620 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1621 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1622 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1623 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1624 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1625 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1626 mgr->insert( separator(), selectonlyId, -1);
1627 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1628 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1629 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1630 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1631 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1632 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1633 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1635 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1637 mgr->insert( separator(), -1, -1 ); // -----------
1638 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1639 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1640 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1641 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1643 mgr->insert( separator(), -1, -1 ); // -----------
1644 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1645 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1647 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1648 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1650 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1651 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1653 mgr->insert( separator(), -1, -1 ); // -----------
1654 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1655 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1657 mgr->insert( separator(), -1, -1 ); // -----------
1658 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1659 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1661 #ifndef DISABLE_GRAPHICSVIEW
1662 mgr->insert( separator(), -1, -1 ); // -----------
1663 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1664 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1667 mgr->insert( separator(), -1, -1 ); // -----------
1668 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1669 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1671 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1673 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1675 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1676 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1677 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1680 // create plugin actions and menus
1684 //=======================================================================
1685 // function : GeometryGUI::addPluginActions()
1687 //=======================================================================
1688 void GeometryGUI::addPluginActions()
1691 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1692 if (!resMgr) return;
1694 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1695 if (!appStudy) return;
1697 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1699 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1701 int id = GEOMOp::OpLastOperationID; // TODO?
1704 GEOMUtils::PluginInfo::const_iterator it;
1705 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1706 // bind action lib and label to its ID for activateOperation() method proper work
1707 GEOMUtils::PluginData pdata = (*it);
1708 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1709 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1710 std::list<GEOMUtils::ActionData>::const_iterator ait;
1711 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1712 GEOMUtils::ActionData adata = (*ait);
1715 if ( !adata.icon.empty() )
1716 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1718 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1719 QString actionName = smenus.last();
1720 actionName = actionName.toUpper().prepend( "MEN_" );
1721 smenus.removeLast();
1723 // path to action in toolbar
1724 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1725 QString actionTool = stools.last();
1726 actionTool = actionTool.toUpper().prepend( "TOP_" );
1727 stools.removeLast();
1729 QString actionStat = adata.statusText.c_str();
1730 actionStat = actionStat.toUpper().prepend( "STB_" );
1732 createAction( id, // ~ adata.label
1733 tr( actionTool.toLatin1().constData() ),
1735 tr( actionName.toLatin1().constData() ),
1736 tr( actionStat.toLatin1().constData() ),
1737 QKeySequence( tr( adata.accel.c_str() ) ),
1738 application()->desktop(),
1740 this, SLOT( OnGUIEvent() ),
1741 QString() /*shortcutAction*/ );
1744 foreach ( QString subMenu, smenus ) {
1745 QStringList subMenuList = subMenu.split( ":" );
1746 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1747 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1748 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1750 createMenu( id, menuId, -1 );
1752 if ( !stools.isEmpty() ) {
1753 QString subTool = stools[0];
1754 subTool = subTool.toUpper().prepend( "TOOL_" );
1755 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1756 createTool(id, toolId);
1759 // add action id to map
1760 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1761 myPluginActions[id] = anAction;
1768 //=======================================================================
1769 // function : GeometryGUI::activateModule()
1770 // purpose : Called when GEOM module is activated
1771 //=======================================================================
1772 bool GeometryGUI::activateModule( SUIT_Study* study )
1774 if ( CORBA::is_nil( myComponentGeom ) )
1777 bool res = SalomeApp_Module::activateModule( study );
1781 setMenuShown( true );
1782 setToolShown( true );
1784 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1785 PyGILState_STATE gstate = PyGILState_Ensure();
1786 PyObject* pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1787 if ( !pluginsmanager ) {
1792 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1793 tr("MEN_NEW_ENTITY").toUtf8().data(),
1794 tr("GEOM_PLUGINS_OTHER").toUtf8().data());
1799 PyGILState_Release(gstate);
1800 // end of GEOM plugins loading
1802 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1803 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1805 // Reset actions accelerator keys
1806 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1808 GUIMap::Iterator it;
1809 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1810 it.value()->activate( application()->desktop() );
1812 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1814 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1815 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1816 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1818 if ( !myCreationInfoWdg )
1819 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1820 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1821 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1823 if ( !myTextTreeWdg )
1824 myTextTreeWdg = new GEOMGUI_TextTreeWdg( getApp() );
1825 getApp()->insertDockWindow( myTextTreeWdg->getWinID(), myTextTreeWdg );
1826 getApp()->placeDockWindow( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
1829 SALOME_ListIO selected;
1830 sm->selectedObjects( selected );
1831 sm->clearSelected();
1833 SUIT_ViewManager* vm;
1834 ViewManagerList OCCViewManagers, VTKViewManagers;
1836 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1837 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1838 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1839 onViewManagerAdded(vm);
1841 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1842 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1843 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1844 onViewManagerAdded(vm);
1846 sm->setSelectedObjects( selected, true ); //NPAL 19674
1848 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1850 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1852 // 0020836 (Basic vectors and origin)
1853 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1854 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1855 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1857 _PTR(Study) studyDS = appStudy->studyDS();
1859 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1860 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1861 createOriginAndBaseVectors();
1866 Py_XDECREF(pluginsmanager);
1870 //=======================================================================
1871 // function : GeometryGUI::deactivateModule()
1872 // purpose : Called when GEOM module is deactivated
1873 //=======================================================================
1874 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1876 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1878 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1880 setMenuShown( false );
1881 setToolShown( false );
1883 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1884 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1886 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1888 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1889 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1890 if ( myCreationInfoWdg ) {
1891 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1892 myCreationInfoWdg = 0;
1894 if ( myTextTreeWdg ) {
1895 getApp()->removeDockWindow( myTextTreeWdg->getWinID() );
1896 disconnect( application(), 0, myTextTreeWdg, 0 );
1900 EmitSignalCloseAllDialogs();
1902 GUIMap::Iterator it;
1903 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1904 it.value()->deactivate();
1906 // Unset actions accelerator keys
1907 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1909 qDeleteAll(myOCCSelectors);
1910 myOCCSelectors.clear();
1911 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1913 qDeleteAll(myVTKSelectors);
1914 myVTKSelectors.clear();
1915 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1917 return SalomeApp_Module::deactivateModule( study );
1920 //=======================================================================
1921 // function : onWindowActivated()
1922 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1923 //=======================================================================
1924 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1929 const bool ViewOCC = ( win->getViewManager() ? win->getViewManager()->getType() == OCCViewer_Viewer::Type() : false );
1930 //const bool ViewVTK = ( win->getViewManager() ? win->getViewManager()->getType() == SVTK_Viewer::Type() : false );
1932 // disable non-OCC viewframe menu commands
1933 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1934 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1935 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1936 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1937 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1938 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1939 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1941 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1942 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1943 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1944 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1946 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1949 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1951 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1952 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
1953 #ifndef DISABLE_PYCONSOLE
1954 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1956 if ( myCreationInfoWdg )
1957 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1958 if ( myTextTreeWdg )
1959 mappa.insert( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
1962 void GeometryGUI::viewManagers( QStringList& lst ) const
1964 lst.append( OCCViewer_Viewer::Type() );
1967 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1969 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1971 qDebug( "connect" );
1972 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1973 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1974 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1975 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1976 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1977 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1978 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1979 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1981 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1982 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1984 // disable OCC selectors
1985 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1986 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1987 while ( itOCCSel.hasNext() )
1988 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1989 sr->setEnabled(true);
1991 else if ( vm->getType() == SVTK_Viewer::Type() )
1993 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1994 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1996 // disable VTK selectors
1997 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1998 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1999 while ( itVTKSel.hasNext() )
2000 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2001 sr->setEnabled(true);
2005 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
2007 SUIT_ViewModel* viewer = vm->getViewModel();
2008 if ( vm->getType() == OCCViewer_Viewer::Type() )
2010 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2011 while ( itOCCSel.hasNext() )
2012 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2013 if ( sr->viewer() == viewer )
2015 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
2019 if ( vm->getType() == SVTK_Viewer::Type() )
2021 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2022 while ( itVTKSel.hasNext() )
2023 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2024 if ( sr->viewer() == viewer )
2026 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2032 //================================================================================
2034 * \brief Slot called when selection changed. Shows creation info of a selected object
2036 //================================================================================
2038 void GeometryGUI::updateCreationInfo()
2040 if ( myCreationInfoWdg )
2041 myCreationInfoWdg->clear();
2043 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2044 // if ( !myCreationInfoWdg->isVisible() )
2047 // look for a sole selected GEOM_Object
2048 GEOM::GEOM_BaseObject_var geomObj;
2050 SALOME_ListIO selected;
2051 getApp()->selectionMgr()->selectedObjects( selected );
2053 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2054 SALOME_ListIteratorOfListIO selIt( selected );
2055 for ( ; selIt.More(); selIt.Next() )
2057 Handle(SALOME_InteractiveObject) io = selIt.Value();
2058 if ( !io->hasEntry() ) continue;
2059 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2060 if ( !sobj ) continue;
2061 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2062 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2063 if ( !gobj->_is_nil() )
2065 if ( !geomObj->_is_nil() )
2066 return; // several GEOM objects selected
2070 if ( geomObj->_is_nil() ) return;
2072 // pass creation info of geomObj to myCreationInfoWdg
2074 if ( myCreationInfoWdg ) {
2076 GEOM::CreationInformationSeq_var info;
2079 info = geomObj->GetCreationInformation();
2083 myCreationInfoWdg->setInfo( info );
2087 void GeometryGUI::onAutoBringToFront()
2089 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2090 if( !isAutoBringToFront )
2093 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2094 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2097 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2098 if (!appStudy) return;
2100 GEOM_Displayer displayer( appStudy );
2102 SALOME_View* window = displayer.GetActiveView();
2103 if ( !window ) return;
2105 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2107 SALOME_ListIO selected;
2108 getApp()->selectionMgr()->selectedObjects( selected );
2109 if (!myTopLevelIOList.IsEmpty())
2111 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2113 Handle( SALOME_InteractiveObject ) io = It.Value();
2114 bool isSelected = false;
2115 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2117 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2118 if( io->isSame( sel_io ) )
2121 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2123 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2124 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2129 myTopLevelIOList.Assign(selected);
2130 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2132 Handle( SALOME_InteractiveObject ) io = It.Value();
2133 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2134 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2137 displayer.UpdateViewer();
2138 GeometryGUI::Modified();
2141 void GeometryGUI::updateFieldColorScale()
2143 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2145 GEOM_Displayer aDisplayer( aStudy );
2146 aDisplayer.UpdateColorScale();
2150 QString GeometryGUI::engineIOR() const
2152 if ( !CORBA::is_nil( GetGeomGen() ) )
2153 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2157 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2158 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2160 theWidth = theHeight = 0;
2162 Handle(TColStd_HArray1OfByte) aTexture;
2165 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2166 aTexture = aTextureMap[ theId ];
2167 if ( aTexture.IsNull() ) {
2168 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2169 if ( !aInsOp->_is_nil() ) {
2170 CORBA::Long aWidth, aHeight;
2171 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2172 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2174 theHeight = aHeight;
2176 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2178 for (int i = 0; i < aStream->length(); i++)
2179 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2180 aTextureMap[ theId ] = aTexture;
2188 LightApp_Selection* GeometryGUI::createSelection() const
2190 return new GEOMGUI_Selection();
2193 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2195 SalomeApp_Module::contextMenuPopup( client, menu, title );
2197 getApp()->selectionMgr()->selectedObjects( lst );
2199 //Add submenu for predefined materials
2200 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2201 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2202 QtxPopupMgr* mgr = popupMgr();
2203 //get parrent for submenu
2204 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2206 QMenu* oldMenu = act->menu() ;
2211 QMenu* matMenu = new QMenu();
2212 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2214 //Get current material model for the object
2216 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2217 if ( anApp && anApp->activeViewManager() ) {
2218 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2220 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2223 QString curModel = "";
2224 if ( v.canConvert<QString>() ) curModel = v.toString();
2225 // get list of all predefined materials
2226 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2228 foreach ( QString material, materials )
2230 QAction* menAct = matMenu->addAction( material );
2231 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2232 signalMapper->setMapping( menAct, material );
2233 menAct->setCheckable( true );
2234 // Set checked if this material is current
2235 Material_Model aModel;
2236 aModel.fromResources( material );
2237 if ( !found && aModel.toProperties() == curModel ) {
2238 menAct->setChecked( true );
2242 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2243 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2244 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2245 this, SLOT( OnSetMaterial( const QString & ) ) );
2246 act->setMenu( matMenu );
2250 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2251 Handle(SALOME_InteractiveObject) io = lst.First();
2252 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2253 _PTR(Study) study = appStudy->studyDS();
2254 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2256 QString aName = QString( obj->GetName().c_str() );
2257 aName.remove( QRegExp("\\s+$") );
2263 void GeometryGUI::OnSetMaterial(const QString& theName)
2265 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2269 void GeometryGUI::createPreferences()
2271 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2273 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2275 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2276 setPreferenceProperty( genGroup, "columns", 2 );
2278 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2279 LightApp_Preferences::Selector,
2280 "Geometry", "display_mode" );
2282 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2283 LightApp_Preferences::Color, "Geometry", "shading_color" );
2285 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2286 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2288 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2289 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2291 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2292 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2294 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2295 LightApp_Preferences::Color, "Geometry", "line_color" );
2297 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2298 LightApp_Preferences::Color, "Geometry", "point_color" );
2300 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2301 LightApp_Preferences::Color, "Geometry", "isos_color" );
2303 addPreference( tr( "PREF_LABEL_COLOR" ), genGroup,
2304 LightApp_Preferences::Color, "Geometry", "label_color" );
2306 addPreference( "", genGroup, LightApp_Preferences::Space );
2308 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2309 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2311 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2312 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2314 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2315 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2317 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2318 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2320 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2321 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2323 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2324 LightApp_Preferences::Selector,
2325 "Geometry", "material" );
2327 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2328 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2334 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2335 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2337 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2338 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2340 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2341 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2343 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2344 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2346 for (int i = 0; i < nb; i++) {
2347 setPreferenceProperty( wd[i], "min", 1 );
2348 setPreferenceProperty( wd[i], "max", 5 );
2351 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2352 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2354 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2355 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2357 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2358 setPreferenceProperty( aDimGroupId, "columns", 2 );
2360 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2361 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2363 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2364 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2366 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2367 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2369 int aDimFontId = addPreference( tr( "PREF_DIMENSIONS_FONT" ), aDimGroupId, LightApp_Preferences::Font, "Geometry", "dimensions_font" );
2371 int f = QtxFontEdit::Family | QtxFontEdit::Size;
2372 setPreferenceProperty( aDimFontId, "features", f );
2373 setPreferenceProperty( aDimFontId, "mode", QtxFontEdit::Custom );
2375 Handle(Font_FontMgr) fmgr = Font_FontMgr::GetInstance();
2376 QString aFontFile = "";
2377 resMgr->value("resources", "GEOM", aFontFile);
2378 aFontFile = aFontFile + QDir::separator() + "Y14.5M-2009.ttf";
2379 // add enginier font into combobox
2380 int fontID = QFontDatabase::addApplicationFont( aFontFile );
2381 Handle(Font_SystemFont) sf = new Font_SystemFont(
2382 new TCollection_HAsciiString("Y14.5M-2009"),
2384 new TCollection_HAsciiString(aFontFile.toLatin1().data()) );
2385 // register font in OCC font manager
2386 fmgr->RegisterFont( sf, Standard_False );
2388 // get list of supported fonts by OCC
2389 QStringList anOCCFonts;
2390 TColStd_SequenceOfHAsciiString theFontsNames;
2391 fmgr->GetAvailableFontsNames( theFontsNames );
2392 for(Standard_Integer i=1; i<=theFontsNames.Length(); i++) {
2393 Handle(TCollection_HAsciiString) str = theFontsNames(i);
2394 anOCCFonts << str->ToCString();
2396 anOCCFonts.removeDuplicates();
2397 // set the supported fonts into combobox to use its only
2398 setPreferenceProperty( aDimFontId, "fonts", anOCCFonts );
2400 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2401 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2403 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2404 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2405 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2407 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2408 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2410 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2411 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2413 QStringList aListOfLengthUnits;
2414 aListOfLengthUnits << "m";
2415 aListOfLengthUnits << "cm";
2416 aListOfLengthUnits << "mm";
2417 aListOfLengthUnits << "in.";
2418 aListOfLengthUnits << "ft.";
2420 QStringList aListOfAngUnits;
2421 aListOfAngUnits << "rad";
2422 aListOfAngUnits << "deg";
2424 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2425 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2427 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2428 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2430 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2431 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2433 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2434 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2435 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2437 addPreference( tr( "PREF_DIMENSIONS_USE_TEXT3D" ), aDimGroupId,
2438 LightApp_Preferences::Bool, "Geometry", "dimensions_use_text3d" );
2440 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2441 setPreferenceProperty( isoGroup, "columns", 2 );
2442 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2443 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2444 setPreferenceProperty( isoU, "min", 0 );
2445 setPreferenceProperty( isoU, "max", 100000 );
2446 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2447 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2448 setPreferenceProperty( isoV, "min", 0 );
2449 setPreferenceProperty( isoV, "max", 100000 );
2451 // Quantities with individual precision settings
2452 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2453 setPreferenceProperty( precGroup, "columns", 2 );
2455 const int nbQuantities = 8;
2456 int prec[nbQuantities], ii = 0;
2457 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2458 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2459 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2460 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2461 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2462 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2463 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2464 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2465 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2466 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2467 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2468 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2469 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2470 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2471 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2472 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2474 // Set property for precision value for spinboxes
2475 for ( ii = 0; ii < nbQuantities; ii++ ){
2476 setPreferenceProperty( prec[ii], "min", -14 );
2477 setPreferenceProperty( prec[ii], "max", 14 );
2478 setPreferenceProperty( prec[ii], "precision", 2 );
2481 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2482 setPreferenceProperty( VertexGroup, "columns", 2 );
2484 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2485 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2487 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2488 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2490 // Set property for default display mode
2491 QStringList aModesList;
2492 aModesList.append( tr("MEN_WIREFRAME") );
2493 aModesList.append( tr("MEN_SHADING") );
2494 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2495 aModesList.append( tr("MEN_TEXTURE") );
2497 QList<QVariant> anIndexesList;
2498 anIndexesList.append(0);
2499 anIndexesList.append(1);
2500 anIndexesList.append(2);
2501 anIndexesList.append(3);
2503 setPreferenceProperty( dispmode, "strings", aModesList );
2504 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2506 // Set property for top level display mode
2507 QStringList aTopModesList;
2508 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2509 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2510 aTopModesList.append( tr("MEN_WIREFRAME") );
2511 aTopModesList.append( tr("MEN_SHADING") );
2512 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2514 QList<QVariant> aTopIndexesList;
2515 aTopIndexesList.append(0);
2516 aTopIndexesList.append(1);
2517 aTopIndexesList.append(2);
2518 aTopIndexesList.append(3);
2519 aTopIndexesList.append(4);
2521 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2522 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2524 // Set property for step value for spinboxes
2525 setPreferenceProperty( step, "min", 1 );
2526 setPreferenceProperty( step, "max", 10000 );
2527 setPreferenceProperty( step, "precision", 3 );
2529 // Set property for trandparency value for spinboxes
2530 setPreferenceProperty( transparency, "min", 0 );
2531 setPreferenceProperty( transparency, "max", 100 );
2533 // Set property for deflection value for spinboxes
2534 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2535 setPreferenceProperty( defl, "max", 1.0 );
2536 setPreferenceProperty( defl, "step", 1.0e-04 );
2537 setPreferenceProperty( defl, "precision", 6 );
2539 // Set property for default material
2540 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2542 // Set property vertex marker type
2543 QList<QVariant> aMarkerTypeIndicesList;
2544 QList<QVariant> aMarkerTypeIconsList;
2546 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2547 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2548 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2549 aMarkerTypeIndicesList << (i-1);
2550 aMarkerTypeIconsList << pixmap;
2553 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2554 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2556 // Set property for vertex marker scale
2557 QList<QVariant> aMarkerScaleIndicesList;
2558 QStringList aMarkerScaleValuesList;
2560 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2561 aMarkerScaleIndicesList << iii;
2562 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2565 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2566 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2568 // Scalar bar for field step presentation
2569 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2570 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2572 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2573 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2574 setPreferenceProperty( sbXPosition, "min", 0 );
2575 setPreferenceProperty( sbXPosition, "max", 1 );
2576 setPreferenceProperty( sbXPosition, "step", 0.05 );
2578 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2579 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2580 setPreferenceProperty( sbYPosition, "min", 0 );
2581 setPreferenceProperty( sbYPosition, "max", 1 );
2582 setPreferenceProperty( sbYPosition, "step", 0.05 );
2584 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2585 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2586 setPreferenceProperty( sbWidth, "min", 0 );
2587 setPreferenceProperty( sbWidth, "max", 1 );
2588 setPreferenceProperty( sbWidth, "step", 0.05 );
2590 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2591 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2592 setPreferenceProperty( sbHeight, "min", 0 );
2593 setPreferenceProperty( sbHeight, "max", 1 );
2594 setPreferenceProperty( sbHeight, "step", 0.05 );
2596 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2597 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2598 setPreferenceProperty( sbTextHeight, "min", 6 );
2599 setPreferenceProperty( sbTextHeight, "max", 24 );
2600 setPreferenceProperty( sbTextHeight, "step", 1 );
2602 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2603 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2604 setPreferenceProperty( sbNbIntervals, "min", 2 );
2605 setPreferenceProperty( sbNbIntervals, "max", 64 );
2606 setPreferenceProperty( sbNbIntervals, "step", 1 );
2608 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2609 setPreferenceProperty( originGroup, "columns", 2 );
2611 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2612 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2613 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2614 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2616 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2617 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2619 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2620 setPreferenceProperty( operationsGroup, "columns", 2 );
2622 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2623 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2625 addPreference( tr( "PREF_HIDE_INPUT_OBJECT" ), operationsGroup,
2626 LightApp_Preferences::Bool, "Geometry", "hide_input_object" );
2628 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2630 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2632 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2633 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2635 QStringList aHierarchyTypeList;
2636 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2637 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2638 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2640 QList<QVariant> aHierarchyTypeIndexesList;
2641 aHierarchyTypeIndexesList.append(0);
2642 aHierarchyTypeIndexesList.append(1);
2643 aHierarchyTypeIndexesList.append(2);
2645 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2646 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2648 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2649 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2651 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2653 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2654 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2656 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2657 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2658 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2659 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2660 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2661 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2662 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2663 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2665 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2666 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2667 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2668 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2669 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2670 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2677 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2679 if (section == "Geometry") {
2680 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2681 if (param == QString("SettingsGeomStep")) {
2682 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2683 EmitSignalDefaultStepValueChanged(spin_step);
2685 else if (param == QString("toplevel_color")) {
2686 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2687 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2689 else if (param == QString("toplevel_dm")) {
2690 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2692 else if (param == QString("scalar_bar_x_position") ||
2693 param == QString("scalar_bar_y_position") ||
2694 param == QString("scalar_bar_width") ||
2695 param == QString("scalar_bar_height") ||
2696 param == QString("scalar_bar_text_height") ||
2697 param == QString("scalar_bar_nb_intervals")) {
2698 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2700 GEOM_Displayer aDisplayer( aStudy );
2701 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2702 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2705 else if ( param == QString("dimensions_color") ||
2706 param == QString("dimensions_line_width") ||
2707 param == QString("dimensions_font") ||
2708 param == QString("dimensions_arrow_length") ||
2709 param == QString("dimensions_show_units") ||
2710 param == QString("dimensions_length_units") ||
2711 param == QString("dimensions_angle_units") ||
2712 param == QString("dimensions_use_text3d") ||
2713 param == QString("label_color") )
2715 SalomeApp_Application* anApp = getApp();
2721 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2727 GEOM_Displayer aDisplayer( aStudy );
2729 ViewManagerList aVMs;
2730 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2731 ViewManagerList::Iterator anIt = aVMs.begin();
2732 for ( ; anIt != aVMs.end(); ++anIt )
2734 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2740 SALOME_ListIO aVisible;
2741 aViewer->GetVisible( aVisible );
2742 aDisplayer.Redisplay( aVisible, false, aViewer );
2744 if ( param == QString( "label_color" ) ) {
2745 ViewManagerList aVMsVTK;
2746 anApp->viewManagers( SVTK_Viewer::Type(), aVMsVTK );
2747 ViewManagerList::Iterator anIt = aVMsVTK.begin();
2748 for ( ; anIt != aVMsVTK.end(); ++anIt )
2750 SVTK_Viewer* aViewer = dynamic_cast<SVTK_Viewer*>( (*anIt)->getViewModel() );
2755 SALOME_ListIO aVisible;
2756 aViewer->GetVisible( aVisible );
2757 aDisplayer.Redisplay( aVisible, false, aViewer );
2760 aDisplayer.UpdateViewer();
2762 else if ( param.startsWith( "dependency_tree") )
2763 emit SignalDependencyTreeParamChanged( section, param );
2767 LightApp_Displayer* GeometryGUI::displayer()
2770 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2774 void GeometryGUI::setLocalSelectionMode(const int mode)
2776 myLocalSelectionMode = mode;
2779 int GeometryGUI::getLocalSelectionMode() const
2781 return myLocalSelectionMode;
2784 const char gSeparator = '_'; // character used to separate parameter names
2785 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2788 * \brief Store visual parameters
2790 * This method is called just before the study document is saved.
2791 * Store visual parameters in AttributeParameter attribute(s)
2793 void GeometryGUI::storeVisualParameters (int savePoint)
2795 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2796 if ( !appStudy || !appStudy->studyDS() )
2798 _PTR(Study) studyDS = appStudy->studyDS();
2800 // componentName is used for encoding of entries when storing them in IParameters
2801 std::string componentName = myComponentGeom->ComponentDataType();
2802 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2803 //if (!aSComponent) return;
2806 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2807 componentName.c_str(),
2809 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2811 QSet<QString> anEntriesToStoreShared;
2812 QList<SUIT_ViewManager*> lst;
2813 QList<SUIT_ViewManager*>::Iterator it;
2815 // main cycle to store parameters of displayed objects
2817 getApp()->viewManagers(lst);
2818 for (it = lst.begin(); it != lst.end(); it++) {
2819 SUIT_ViewManager* vman = *it;
2820 QString vType = vman->getType();
2821 int aMgrId = vman->getGlobalId();
2822 // saving VTK actors properties
2823 QVector<SUIT_ViewWindow*> views = vman->getViews();
2824 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2825 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
2826 ObjMap::ConstIterator o_it = anObjects.begin();
2827 for (; o_it != anObjects.end(); o_it++) {
2828 const PropMap& aProps = o_it.value();
2830 //Check that object exists in the study
2831 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2832 if ( !obj || !(aProps.count() > 0))
2834 // entry is "encoded" = it does NOT contain component adress, since it is a
2835 // subject to change on next component loading
2837 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2839 _PTR(GenericAttribute) anAttr;
2840 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2843 // remember entry of object to store shared GEOM properties
2844 // (e.g. dimension properties).
2845 if ( vType == OCCViewer_Viewer::Type() )
2847 anEntriesToStoreShared.insert( o_it.key() );
2850 QString param, occParam = vType;
2851 occParam += GEOM::sectionSeparator();
2852 occParam += QString::number(aMgrId);
2853 occParam += GEOM::sectionSeparator();
2855 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2856 param = occParam + GEOM::propertyName( GEOM::Visibility );
2857 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2860 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2861 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2862 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2865 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2866 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2868 val << QString::number(c.redF());
2869 val << QString::number(c.greenF());
2870 val << QString::number(c.blueF());
2871 param = occParam + GEOM::propertyName( GEOM::Color );
2872 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2875 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2876 param = occParam + GEOM::propertyName( GEOM::Texture );
2877 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2880 if (vType == SVTK_Viewer::Type()) {
2881 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2882 param = occParam + GEOM::propertyName( GEOM::Opacity );
2883 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2885 } else if (vType == SOCC_Viewer::Type()) {
2886 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2887 param = occParam + GEOM::propertyName( GEOM::Transparency );
2888 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2891 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2892 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2893 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2897 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2898 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2899 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2902 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2903 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2904 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2907 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
2908 param = occParam + GEOM::propertyName( GEOM::Vertices );
2909 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
2912 if (aProps.contains(GEOM::propertyName( GEOM::ShowName ))) {
2913 param = occParam + GEOM::propertyName( GEOM::ShowName );
2914 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::ShowName )).toString().toStdString());
2917 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2918 param = occParam + GEOM::propertyName( GEOM::Deflection );
2919 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2922 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2923 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2924 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2925 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2928 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2929 param = occParam + GEOM::propertyName( GEOM::Material );
2930 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2933 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2934 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2935 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2938 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2939 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2940 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2942 } // object iterator
2944 } // for (viewManagers)
2946 // store dimension attributes of objects:
2947 // since the displayed object always persists in property map, we remember the object entries
2948 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
2949 QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
2950 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
2951 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
2953 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
2954 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName);
2956 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
2958 if ( aDimensions.GetNumber() == 0 )
2963 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
2968 * \brief Restore visual parameters
2970 * This method is called after the study document is opened.
2971 * Restore visual parameters from AttributeParameter attribute(s)
2973 void GeometryGUI::restoreVisualParameters (int savePoint)
2975 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2976 if (!appStudy || !appStudy->studyDS())
2978 _PTR(Study) studyDS = appStudy->studyDS();
2980 // componentName is used for encoding of entries when storing them in IParameters
2981 std::string componentName = myComponentGeom->ComponentDataType();
2982 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2983 //if (!aSComponent) return;
2986 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2987 componentName.c_str(),
2989 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2991 std::vector<std::string> entries = ip->getEntries();
2993 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2995 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2996 QString entry (ip->decodeEntry(*entIt).c_str());
2998 // Check that the entry corresponds to a real object in the Study
2999 // as the object may be deleted or modified after the visual state is saved.
3000 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
3001 if (!so) continue; //Skip the not existent entry
3003 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
3004 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
3006 std::vector<std::string>::iterator namesIt = paramNames.begin();
3007 std::vector<std::string>::iterator valuesIt = paramValues.begin();
3009 // actors are stored in a map after displaying of them for
3010 // quicker access in the future: map < viewID to actor >
3011 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
3012 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
3014 QString viewerTypStr;
3015 QString viewIndexStr;
3017 QVector<PropMap> aListOfMap;
3019 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
3021 // visual parameters are stored in strings as follows:
3022 // 1) ViewerType_ViewIndex_ParamName
3023 // 2) ViewerType_ParamName (shared for GEOM module)
3024 // '_' is used as separator and should not be used in viewer type or parameter names.
3025 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
3027 bool isShared = lst.size() == 2;
3028 bool isViewer = lst.size() == 3;
3029 if ( !isShared && !isViewer )
3034 // shared visual parameters
3037 QString aParamNameStr( lst[1] );
3038 QString aValuesStr( (*valuesIt).c_str() );
3040 // shared dimension properties are stored as attribute
3041 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
3043 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
3044 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
3050 // per view visual parameters
3051 viewerTypStr = lst[0];
3052 viewIndexStr = lst[1];
3053 QString paramNameStr = lst[2];
3056 viewIndex = viewIndexStr.toUInt(&ok);
3057 if (!ok) // bad conversion of view index to integer
3060 if ((viewIndex + 1) > aListOfMap.count()) {
3061 aListOfMap.resize(viewIndex + 1);
3064 QString val((*valuesIt).c_str());
3065 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
3066 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
3067 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
3068 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
3069 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
3070 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
3071 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
3072 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
3073 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
3074 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
3075 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
3076 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
3077 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
3078 QStringList rgb = val.split(GEOM::subSectionSeparator());
3079 if (rgb.count() == 3) {
3080 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
3081 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
3083 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
3084 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
3085 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
3086 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
3087 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
3088 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
3089 } else if (paramNameStr == GEOM::propertyName( GEOM::ShowName )) {
3090 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::ShowName ), val == "true" || val == "1");
3091 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3092 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3093 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3094 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3095 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3096 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3097 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3098 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3099 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3100 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3102 } // for names/parameters iterator
3104 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3106 for (int index = 0; index < aListOfMap.count(); index++) {
3107 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
3109 //Get Visibility property of the current PropMap
3110 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3111 SUIT_ViewManager* vman = lst.at(index);
3112 SUIT_ViewModel* vmodel = vman->getViewModel();
3113 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
3116 } // for entries iterator
3118 // update all VTK and OCC views
3119 QList<SUIT_ViewManager*> lst;
3120 getApp()->viewManagers(lst);
3121 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3122 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3125 if (vmodel->getType() == SVTK_Viewer::Type()) {
3126 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3127 vtkView->getRenderer()->ResetCameraClippingRange();
3130 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3131 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3132 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3139 // Compute current name mode of the viewer
3140 void UpdateNameMode( SalomeApp_Application* app )
3142 bool isMode = false;
3143 SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() );
3144 SUIT_ViewWindow* viewWindow = app->desktop()->activeWindow();
3145 GEOM_Displayer displayer( aStudy );
3146 int aMgrId = viewWindow->getViewManager()->getGlobalId();
3148 SALOME_View* window = displayer.GetActiveView();
3149 if ( !window ) return;
3151 SALOME_ListIO anIOlst;
3152 window->GetVisible( anIOlst );
3154 for ( SALOME_ListIteratorOfListIO It( anIOlst ); It.More(); It.Next() ) {
3155 Handle( SALOME_InteractiveObject ) io = It.Value();
3156 QVariant v = aStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::ShowName ), QVariant() );
3157 bool isIONameMode = v.isValid() ? v.toBool() : false;
3161 viewWindow->setProperty( "NameMode", isMode );
3164 void GeometryGUI::onViewAboutToShow()
3166 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3167 QAction* a = action( GEOMOp::OpSwitchVectors );
3168 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3169 QAction* aNameAction = action( GEOMOp::OpSwitchName );
3171 a->setEnabled(true);
3172 bool vmode = window->property("VectorsMode").toBool();
3173 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3174 aVerticesAction->setEnabled(true);
3175 vmode = window->property("VerticesMode").toBool();
3176 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3177 UpdateNameMode( getApp() );
3178 aNameAction->setEnabled(true);
3179 vmode = window->property("NameMode").toBool();
3180 aNameAction->setText ( vmode == 1 ? tr( "MEN_NAME_MODE_OFF" ) : tr("MEN_NAME_MODE_ON") );
3182 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3183 a->setEnabled(false);
3184 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3185 aVerticesAction->setEnabled(false);
3186 aNameAction->setText ( tr("MEN_NAME_MODE_ON") );
3187 aNameAction->setEnabled(false);
3192 \brief Return action by id
3193 \param id identifier of the action
3196 QAction* GeometryGUI::getAction(const int id) {
3201 \brief GEOM module message handler
3203 This method can be re-implemented in the subclasses.
3204 This is a GEOM module message handler.
3206 \param msg the message received.
3208 void GeometryGUI::message(const QString& msg)
3211 QStringList data = msg.split("/");
3212 const int nbStrings = data.count();
3214 if (nbStrings > 0) {
3215 if (data[0] == "modified") {
3217 QString anIOR = nbStrings > 1 ? data[1] : QString();
3219 if ( anIOR.isEmpty() ) {
3223 // Get the geom object.
3224 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3226 // Clear the shape buffer
3227 GeometryGUI::ClearShapeBuffer (anObj);
3233 \brief Clears the shape buffer.
3235 This is a static method. It clears the shape buffer.
3237 \param theObj the object
3239 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3241 if ( CORBA::is_nil( theObj ) )
3244 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3245 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3246 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3248 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3253 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3258 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3262 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3263 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3264 _PTR(GenericAttribute) anAttr;
3265 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3266 _PTR(AttributeIOR) anIOR ( anAttr );
3267 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3268 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3274 \brief Returns the object from IOR.
3276 This is a static method. It returns the object from its IOR.
3278 \param IOR object IOR
3279 \return GEOM object.
3281 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3283 GEOM::GEOM_Object_var geomObj;
3284 if ( !IOR.isEmpty() ) {
3285 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3286 ( IOR.toLatin1().constData() );
3287 if ( !CORBA::is_nil( corbaObj ) )
3288 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3290 return geomObj._retn();
3294 \brief Returns IOR of the object.
3296 This is a static method. It returns the object's IOR.
3298 \param object the GEOM object.
3299 \return object's IOR.
3301 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3304 if ( !CORBA::is_nil( object ) ) {
3305 CORBA::String_var anIOR =
3306 SalomeApp_Application::orb()->object_to_string( object );
3313 \brief Check if this object is can't be renamed in place
3315 This method can be re-implemented in the subclasses.
3316 Return true in case if object isn't reference or component (module root).
3318 \param entry column id
3319 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3321 bool GeometryGUI::renameAllowed( const QString& entry) const {
3323 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3324 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3325 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3327 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3331 Rename object by entry.
3332 \param entry entry of the object
3333 \param name new name of the object
3334 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3336 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3338 bool result = false;
3340 SalomeApp_Application* app =
3341 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3342 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3347 _PTR(Study) aStudy = appStudy->studyDS();
3352 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3354 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3358 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3359 _PTR(GenericAttribute) anAttr;
3361 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3362 _PTR(AttributeName) aName (anAttr);
3364 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3365 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3366 if (!CORBA::is_nil(anObj)) {
3367 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3368 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3376 void GeometryGUI::updateMaterials()
3378 LightApp_Preferences* pref = preferences();
3380 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3381 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3382 if ( !materials.contains( currentMaterial ) )
3383 // user material set as default in the preferences, might be removed
3384 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3386 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3388 setPreferenceProperty( prefItem->id(),
3389 "strings", materials );
3390 prefItem->retrieve();
3396 \brief Check if the module allows "drag" operation of its objects.
3398 Overloaded from LightApp_Module class.
3400 This function is a part of the general drag-n-drop mechanism.
3401 The goal of this function is to check data object passed as a parameter
3402 and decide if it can be dragged or no.
3404 \param what data object being tested for drag operation
3405 \return \c true if module allows dragging of the specified object
3406 \sa isDropAccepted(), dropObjects()
3408 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3410 // we allow dragging object under root and object from folder
3411 int aLevel = what->level();
3412 bool anObjectInFolder = false;
3414 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3416 _PTR(SObject) aSO = dataObj->object();
3418 _PTR(GenericAttribute) anAttr;
3419 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3420 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3421 _PTR(AttributeLocalID) aLocalID( anAttr );
3422 anObjectInFolder = aLocalID->Value() == 999;
3427 return aLevel == 2 || anObjectInFolder;
3431 \brief Check if the module allows "drop" operation on the given object.
3433 Overloaded from LightApp_Module class.
3435 This function is a part of the general drag-n-drop mechanism.
3436 The goal of this function is to check data object passed as a parameter
3437 and decide if it can be used as a target for the "drop" operation.
3438 The processing of the drop operation itself is done in the dropObjects() function.
3440 \param where target data object
3441 \return \c true if module supports dropping on the \a where data object
3442 \sa isDraggable(), dropObjects()
3444 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3446 // we allow dropping into folder and top-level GEOM object
3447 int aLevel = where->level();
3448 bool isFolder = false;
3450 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3452 _PTR(SObject) aSO = dataObj->object();
3454 _PTR(GenericAttribute) anAttr;
3455 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3456 _PTR(AttributeLocalID) aLocalID( anAttr );
3457 isFolder = aLocalID->Value() == 999;
3462 return aLevel == 1 || isFolder;
3466 \brief Complete drag-n-drop operation.
3468 Overloaded from LightApp_Module class.
3470 This function is a part of the general drag-n-drop mechanism.
3471 Its goal is to handle dropping of the objects being dragged according
3472 to the chosen operation (move). The dropping is performed in the
3473 context of the parent data object \a where and the \a row (position in the
3474 children index) at which the data should be dropped. If \a row is equal to -1,
3475 this means that objects are added to the end of the children list.
3477 \param what objects being dropped
3478 \param where target data object
3479 \param row child index at which the drop operation is performed
3480 \param action drag-n-drop operation (Qt::DropAction) - move
3482 \sa isDraggable(), isDropAccepted()
3484 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3485 const int row, Qt::DropAction action )
3487 if (action != Qt::CopyAction && action != Qt::MoveAction)
3488 return; // unsupported action
3490 // get parent object
3491 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3492 if ( !dataObj ) return; // wrong parent
3493 _PTR(SObject) parentObj = dataObj->object();
3495 // Find the current Study and StudyBuilder
3496 _PTR(Study) aStudy = parentObj->GetStudy();
3497 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3498 // collect all parents of the target node
3499 QStringList parentIDs;
3500 _PTR(SObject) parent = parentObj;
3501 while( !parent->IsNull() ) {
3502 parentIDs << parent->GetID().c_str();
3503 parent = aUseCaseBuilder->GetFather(parent);
3506 // collect objects being dropped
3507 GEOM::object_list_var objects = new GEOM::object_list();
3508 objects->length( what.count() );
3510 for ( int i = 0; i < what.count(); i++ ) {
3511 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3512 if ( !dataObj ) continue; // skip wrong objects
3513 _PTR(SObject) sobj = dataObj->object();
3514 // check that dropped object is not a parent of target object
3515 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3516 return; // it's not allowed to move node into it's child
3518 objects[i] = _CAST(SObject, sobj)->GetSObject();
3521 objects->length( count );
3523 // call engine function
3524 GetGeomGen()->Move( objects.in(), // what
3525 _CAST(SObject, parentObj)->GetSObject(), // where
3528 // update Object browser
3529 getApp()->updateObjectBrowser( false );
3532 void GeometryGUI::emitDimensionsUpdated( QString entry )
3534 emit DimensionsUpdated( entry );