1 // Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : GeometryGUI.cxx
23 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
25 #include <Standard_math.hxx> // E.A. must be included before Python.h to fix compilation on windows
27 #undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
30 #include "GeometryGUI.h"
31 #include "GeometryGUI_Operations.h"
32 #include "GEOMPluginGUI.h"
33 #include "GEOMGUI_OCCSelector.h"
34 #include "GEOMGUI_Selection.h"
35 #include "GEOMGUI_CreationInfoWdg.h"
36 #include "GEOMGUI_TextTreeWdg.h"
37 #include "GEOMGUI_DimensionProperty.h"
38 #include "GEOM_Constants.h"
39 #include "GEOM_Displayer.h"
40 #include "GEOM_AISShape.hxx"
41 #include "GEOMUtils_XmlHandler.hxx"
42 #include "GEOMGUI_AnnotationMgr.h"
43 #include "GEOMGUI_TextTreeSelector.h"
45 #include "GEOM_Actor.h"
47 #include <Material_ResourceMgr.h>
48 #include <Material_Model.h>
50 #include <SUIT_Desktop.h>
51 #include <SUIT_MessageBox.h>
52 #include <SUIT_ResourceMgr.h>
53 #include <SUIT_Session.h>
54 #include <SUIT_ViewManager.h>
56 #include <OCCViewer_ViewWindow.h>
57 #include <OCCViewer_ViewPort3d.h>
58 #include <OCCViewer_ViewModel.h>
59 #include <OCCViewer_ViewManager.h>
61 #include <SOCC_ViewModel.h>
62 #include <SOCC_ViewWindow.h>
64 #include <SVTK_ViewWindow.h>
65 #include <SVTK_RenderWindowInteractor.h>
66 #include <SVTK_InteractorStyle.h>
67 #include <SVTK_ViewModel.h>
69 #ifndef DISABLE_GRAPHICSVIEW
70 #include <GraphicsView_Viewer.h>
73 #include <SalomeApp_Application.h>
74 #include <SalomeApp_DataObject.h>
75 #include <SalomeApp_Study.h>
76 #include <SalomeApp_Tools.h>
78 #include <LightApp_SelectionMgr.h>
79 #include <LightApp_VTKSelector.h>
80 #include <LightApp_DataObject.h>
81 #include <LightApp_Preferences.h>
83 #include <SALOME_LifeCycleCORBA.hxx>
84 #include <SALOME_ListIO.hxx>
86 #include <SALOMEDSClient_ClientFactory.hxx>
87 #include <SALOMEDSClient_IParameters.hxx>
89 #include <SALOMEDS_SObject.hxx>
91 #include <QtxFontEdit.h>
102 #include <QSignalMapper>
103 #include <QFontDatabase>
105 #include <AIS_ListOfInteractive.hxx>
106 #include <AIS_ListIteratorOfListOfInteractive.hxx>
107 #include <Prs3d_Drawer.hxx>
108 #include <Prs3d_IsoAspect.hxx>
109 #include <Aspect_TypeOfMarker.hxx>
110 #include <OSD_SharedLibrary.hxx>
111 #include <NCollection_DataMap.hxx>
113 #include <TColStd_HArray1OfByte.hxx>
114 #include <TColStd_SequenceOfHAsciiString.hxx>
116 #include <utilities.h>
118 #include <vtkCamera.h>
119 #include <vtkRenderer.h>
121 #include <Standard_Failure.hxx>
122 #include <Standard_ErrorHandler.hxx>
124 #include <Font_SystemFont.hxx>
125 #include <Font_FontMgr.hxx>
126 #include <TCollection_HAsciiString.hxx>
128 #include "GEOM_version.h"
129 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
132 Standard_EXPORT CAM_Module* createModule() {
133 return new GeometryGUI();
136 Standard_EXPORT char* getModuleVersion() {
137 return (char*)GEOM_VERSION_STR;
141 GeometryGUI::TextureMap GeometryGUI::myTextureMap;
143 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
145 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
147 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
148 if (CORBA::is_nil(myComponentGeom))
150 return GeometryGUI::myComponentGeom;
153 bool GeometryGUI::InitGeomGen()
156 if ( CORBA::is_nil( myComponentGeom ) ) return false;
160 //=======================================================================
161 // function : ClientSObjectToObject
163 //=======================================================================
164 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
166 _PTR(GenericAttribute) anAttr;
167 CORBA::Object_var anObj;
169 std::string aValue = theSObject->GetIOR();
170 if (strcmp(aValue.c_str(), "") != 0) {
171 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
172 anObj = anORB->string_to_object(aValue.c_str());
175 INFOS("ClientSObjectToObject - Unknown exception has occurred!!!");
177 return anObj._retn();
180 //=======================================================================
181 // function : GetStudy
183 //=======================================================================
184 SALOMEDS::Study_var GeometryGUI::getStudyServant()
186 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
187 CORBA::Object_var aStudyObject = aNamingService->Resolve("/Study");
188 SALOMEDS::Study_var aStudy = SALOMEDS::Study::_narrow(aStudyObject);
189 return aStudy._retn();
192 void GeometryGUI::Modified (bool theIsUpdateActions)
194 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
195 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
196 appStudy->Modified();
197 if ( theIsUpdateActions )
198 app->updateActions();
203 //=======================================================================
204 // function : GeometryGUI::GeometryGUI()
205 // purpose : Constructor
206 //=======================================================================
207 GeometryGUI::GeometryGUI() :
208 SalomeApp_Module( "GEOM" ),
211 if ( CORBA::is_nil( myComponentGeom ) )
213 Engines::EngineComponent_var comp =
214 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
215 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
218 myActiveDialogBox = 0;
220 gp_Pnt origin = gp_Pnt(0., 0., 0.);
221 gp_Dir direction = gp_Dir(0., 0., 1.);
222 myWorkingPlane = gp_Ax3(origin, direction);
225 myLocalSelectionMode = GEOM_ALLOBJECTS;
227 myCreationInfoWdg = 0;
231 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ), Qt::UniqueConnection );
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( "PATH" );
262 #elif defined(__APPLE__)
263 QString dirs = getenv( "DYLD_LIBRARY_PATH" );
265 QString dirs = getenv( "LD_LIBRARY_PATH" );
273 if ( !dirs.isEmpty() ) {
274 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
275 QListIterator<QString> it( dirList ); it.toBack();
276 while ( it.hasPrevious() ) {
277 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
279 OSD_SharedLibrary aSharedLibrary( fi.fileName().toUtf8().constData() );
280 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
282 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
283 continue; // continue search further
285 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
286 if ( osdF != NULL ) {
287 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
288 GEOMGUI* libGUI = (*func)( this );
290 myGUIMap[ libraryName ] = libGUI;
291 break; // found and loaded!
298 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
301 //=======================================================================
302 // function : GeometryGUI::getPluginLibrary()
303 // purpose : get or load GUI Plugin library by name [ internal ]
304 //=======================================================================
305 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
306 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
308 if ( !myGUIMap.contains( libraryName ) ) {
309 // try to load library if it is not loaded yet
312 QString dirs = getenv( "PATH" );
313 #elif defined(__APPLE__)
314 QString dirs = getenv( "DYLD_LIBRARY_PATH" );
316 QString dirs = getenv( "LD_LIBRARY_PATH" );
324 if ( !dirs.isEmpty() ) {
325 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
326 QListIterator<QString> it( dirList ); it.toBack();
327 while ( it.hasPrevious() ) {
328 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
330 OSD_SharedLibrary aSharedLibrary( fi.fileName().toUtf8().constData() );
331 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
333 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
334 continue; // continue search further
336 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
337 if ( osdF != NULL ) {
338 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
339 GEOMPluginGUI* libGUI = (*func)( this );
341 myGUIMap[ libraryName ] = libGUI;
342 break; // found and loaded!
349 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
352 //=======================================================================
353 // function : GeometryGUI::ActiveWorkingPlane()
354 // purpose : Activate Working Plane View
355 //=======================================================================
356 void GeometryGUI::ActiveWorkingPlane()
358 gp_Dir DZ = myWorkingPlane.Direction();
359 gp_Dir DY = myWorkingPlane.YDirection();
361 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
362 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
363 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
366 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
368 Handle(V3d_View) view3d = vw->getViewPort()->getView();
370 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
371 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
375 else if ( ViewVTK ) {
376 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
378 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
380 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
381 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
382 camera->SetFocalPoint(0,0,0);
389 //=======================================================================
390 // function : GeometryGUI::SetActiveDialogBox()
391 // purpose : Set active dialog box
392 //=======================================================================
393 GEOMGUI_AnnotationMgr* GeometryGUI::GetAnnotationMgr()
395 if ( !myAnnotationMgr )
396 myAnnotationMgr = new GEOMGUI_AnnotationMgr( getApp() );
397 return myAnnotationMgr;
400 //=======================================================================
401 // function : GeometryGUI::SetActiveDialogBox()
402 // purpose : Set active dialog box
403 //=======================================================================
404 GEOMGUI_TextTreeWdg* GeometryGUI::GetTextTreeWdg() const
406 return myTextTreeWdg;
409 //=======================================================================
410 // function : GeometryGUI::SetActiveDialogBox()
411 // purpose : Set active dialog box
412 //=======================================================================
413 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
415 myActiveDialogBox = (QDialog*)aDlg;
418 //=======================================================================
419 // function : GeometryGUI::EmitSignalDeactivateDialog()
420 // purpose : Emit a signal to deactivate the active dialog Box
421 //=======================================================================
422 void GeometryGUI::EmitSignalDeactivateDialog()
424 emit SignalDeactivateActiveDialog();
427 //=======================================================================
428 // function : GeometryGUI::EmitSignalCloseAllDialogs()
429 // purpose : Emit a signal to close all non modal dialogs box
430 //=======================================================================
431 void GeometryGUI::EmitSignalCloseAllDialogs()
433 emit SignalCloseAllDialogs();
436 //=======================================================================
437 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
438 // purpose : Emit a signal to inform that default real spin box step has
440 //=======================================================================
441 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
443 emit SignalDefaultStepValueChanged(newVal);
446 //=======================================================================
447 // function : GeometryGUI::OnGUIEvent()
448 // purpose : common slot for all menu/toolbar actions
449 //=======================================================================
450 void GeometryGUI::OnGUIEvent()
452 const QObject* obj = sender();
453 if ( !obj || !obj->inherits( "QAction" ) )
455 int id = actionId((QAction*)obj);
460 //=======================================================================
461 // function : GeometryGUI::OnGUIEvent()
462 // purpose : manage all events on GUI [static]
463 //=======================================================================
464 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
466 SUIT_Application* anApp = application();
468 SUIT_Desktop* desk = anApp->desktop();
470 // check type of the active viewframe
471 SUIT_ViewWindow* window = desk->activeWindow();
472 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
473 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
474 #ifndef DISABLE_GRAPHICSVIEW
475 bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() );
479 // if current viewframe is not of OCC and not of VTK type - return immediately
480 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
481 QList<int> NotViewerDependentCommands;
482 NotViewerDependentCommands << GEOMOp::OpDelete
484 << GEOMOp::OpShowOnly
485 << GEOMOp::OpShowOnlyChildren
486 << GEOMOp::OpDiscloseChildren
487 << GEOMOp::OpConcealChildren
488 << GEOMOp::OpUnpublishObject
489 << GEOMOp::OpPublishObject
490 << GEOMOp::OpPointMarker
491 << GEOMOp::OpCreateFolder
492 << GEOMOp::OpSortChildren;
493 if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) {
494 // activate OCC viewer
495 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
498 // fix for IPAL9103, point 2
499 if ( CORBA::is_nil( GetGeomGen() ) ) {
500 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
505 // find corresponding GUI library
507 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
508 createOriginAndBaseVectors(); // internal operation
510 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
511 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
512 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
513 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
514 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
515 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
516 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
517 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
518 case GEOMOp::OpDelete: // MENU EDIT - DELETE
519 #ifndef DISABLE_PYCONSOLE
520 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
522 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
523 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
524 case GEOMOp::OpColor: // POPUP MENU - COLOR
525 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
526 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
527 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
528 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
529 case GEOMOp::OpIsos: // POPUP MENU - ISOS
530 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
531 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
532 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
533 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
534 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
535 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
536 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
537 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
538 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
539 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
540 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
541 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
542 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
543 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
544 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
545 case GEOMOp::OpClsBringToFront: //
546 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
547 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
548 #ifndef DISABLE_GRAPHICSVIEW
549 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
551 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
552 libName = "GEOMToolsGUI";
554 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
555 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
556 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
557 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
558 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
559 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
560 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
561 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
562 case GEOMOp::OpHide: // MENU VIEW - ERASE
563 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
564 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
565 case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE
566 case GEOMOp::OpSwitchName: // MENU VIEW - VERTICES MODE
567 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
568 case GEOMOp::OpShading: // POPUP MENU - SHADING
569 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
570 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
571 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
572 case GEOMOp::OpVertices: // POPUP MENU - VERTICES
573 case GEOMOp::OpShowName: // POPUP MENU - SHOW NAME
574 libName = "DisplayGUI";
576 case GEOMOp::OpPoint: // MENU BASIC - POINT
577 case GEOMOp::OpLine: // MENU BASIC - LINE
578 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
579 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
580 case GEOMOp::OpArc: // MENU BASIC - ARC
581 case GEOMOp::OpVector: // MENU BASIC - VECTOR
582 case GEOMOp::OpPlane: // MENU BASIC - PLANE
583 case GEOMOp::OpCurve: // MENU BASIC - CURVE
584 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
585 libName = "BasicGUI";
587 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
588 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
589 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
590 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
591 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
592 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
593 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
594 libName = "PrimitiveGUI";
596 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
597 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
598 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
599 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
600 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
601 case GEOMOp::OpThickness: // MENU GENERATION - THICKNESS
602 libName = "GenerationGUI";
604 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
605 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
606 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
607 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
608 case GEOMOp::OpSurfaceFromFace: // MENU ENTITY - SURFACE FROM FACE
610 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
612 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
613 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
614 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
615 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
616 case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR
617 libName = "EntityGUI";
619 case GEOMOp::OpEdge: // MENU BUILD - EDGE
620 case GEOMOp::OpWire: // MENU BUILD - WIRE
621 case GEOMOp::OpFace: // MENU BUILD - FACE
622 case GEOMOp::OpShell: // MENU BUILD - SHELL
623 case GEOMOp::OpSolid: // MENU BUILD - SOLID
624 case GEOMOp::OpCompound: // MENU BUILD - COMPOUND
625 libName = "BuildGUI";
627 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
628 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
629 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
630 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
631 libName = "BooleanGUI";
633 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
634 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
635 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
636 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
637 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
638 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
639 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
640 case GEOMOp::OpProjOnCyl: // MENU TRANSFORMATION - PROJECTION ON CYLINDER
641 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
642 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
643 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
644 case GEOMOp::OpExtension: // MENU TRANSFORMATION - EXTENSION
645 libName = "TransformationGUI";
647 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
648 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
649 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
650 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
651 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
652 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
653 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
654 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
655 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
656 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
657 case GEOMOp::OpTransferData: // MENU OPERATION - TRANSFER DATA
658 case GEOMOp::OpExtraction: // MENU OPERATION - EXTRACT AND REBUILD
659 libName = "OperationGUI";
661 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
662 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
663 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
664 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
665 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
666 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
667 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
668 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
669 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
670 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
671 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
672 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
673 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
674 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
675 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
676 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
677 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
678 case GEOMOp::OpInspectObj: // MENU REPAIR - INSPECT OBJECT
679 libName = "RepairGUI";
681 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
682 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
683 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
684 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
685 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
686 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
687 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
688 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
689 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
690 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
691 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
692 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
693 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
694 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
695 case GEOMOp::OpFastCheckInters: // MENU MEASURE - FAST CHECK INTERSECTIONS
696 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
697 case GEOMOp::OpAnnotation: // MENU MEASURE - ANNOTATION
698 case GEOMOp::OpEditAnnotation: // POPUP MENU - EDIT ANNOTATION
699 case GEOMOp::OpDeleteAnnotation: // POPUP MENU - DELETE ANNOTATION
700 #ifndef DISABLE_PLOT2DVIEWER
701 case GEOMOp::OpShapeStatistics: // MENU MEASURE - SHAPE STATISTICS
703 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
704 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
705 case GEOMOp::OpShowAllAnnotations: // POPUP MENU - SHOW ALL ANNOTATIONS
706 case GEOMOp::OpHideAllAnnotations: // POPUP MENU - HIDE ALL ANNOTATIONS
707 libName = "MeasureGUI";
709 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
710 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
711 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
712 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
713 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
714 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
715 libName = "GroupGUI";
717 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
718 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
719 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
720 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
721 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
722 libName = "BlocksGUI";
724 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
725 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
726 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
727 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
728 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
729 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
730 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
731 //libName = "AdvancedGUI";
734 if (myPluginActions.contains(id)) {
735 libName = myPluginActions[id].first;
737 GEOMPluginGUI* library = 0;
738 if ( !libName.isEmpty() ) {
740 libName = libName + ".dll";
741 #elif defined(__APPLE__)
742 libName = QString( "lib" ) + libName + ".dylib";
744 libName = QString( "lib" ) + libName + ".so";
746 library = getPluginLibrary( libName );
749 // call method of corresponding GUI library
751 //QString action ("%1");
752 //action = action.arg(id);
754 //if( !theParam.isValid() )
755 library->OnGUIEvent( myPluginActions[id].second, desk );
757 // library->OnGUIEvent( id, desk, theParam);
760 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
762 updateCreationInfo();
768 GEOMGUI* library = 0;
769 if ( !libName.isEmpty() ) {
771 libName = libName + ".dll";
772 #elif defined(__APPLE__)
773 libName = QString( "lib" ) + libName + ".dylib";
775 libName = QString( "lib" ) + libName + ".so";
777 library = getLibrary( libName );
780 // call method of corresponding GUI library
782 if( !theParam.isValid() )
783 library->OnGUIEvent( id, desk );
785 library->OnGUIEvent( id, desk, theParam);
788 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
790 updateCreationInfo();
793 //=================================================================================
794 // function : GeometryGUI::activateOperation()
796 //=================================================================================
797 bool GeometryGUI::activateOperation( int actionId )
799 OnGUIEvent(actionId);
803 //=================================================================================
804 // function : GeometryGUI::activateOperation()
806 //=================================================================================
807 bool GeometryGUI::activateOperation( const QString& actionId )
811 int id = actionId.toInt(&isOk);
818 //=================================================================================
819 // function : GeometryGUI::activateOperation()
821 //=================================================================================
822 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
826 QString pluginLib = plugin;
827 // TODO: if <plugin> is a plugin name, find plugin library name
828 if (myPluginLibs.contains(plugin))
829 pluginLib = myPluginLibs[plugin];
831 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
832 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
833 const PluginAction& anAction = actionsIter.value();
834 if (anAction.first == pluginLib && anAction.second == actionId) {
835 // activate operation
836 OnGUIEvent(actionsIter.key());
844 //=================================================================================
845 // function : GeometryGUI::OnKeyPress()
846 // purpose : Called when any key is pressed by user [static]
847 //=================================================================================
848 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
850 if ( !application() )
852 foreach ( GEOMGUI* lib, myGUIMap )
853 lib->OnKeyPress( e, application()->desktop(), w );
856 //=================================================================================
857 // function : GeometryGUI::OnMouseMove()
858 // purpose : Manages mouse move events [static]
859 //=================================================================================
860 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
862 if ( !application() )
864 foreach ( GEOMGUI* lib, myGUIMap )
865 lib->OnMouseMove( e, application()->desktop(), w );
868 //=================================================================================
869 // function : GeometryGUI::OnMouseRelease()
870 // purpose : Manages mouse release events [static]
871 //=================================================================================
872 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
874 if ( !application() )
876 foreach ( GEOMGUI* lib, myGUIMap )
877 lib->OnMouseRelease( e, application()->desktop(), w );
880 //=================================================================================
881 // function : GeometryGUI::OnMousePress()
882 // purpose : Manage mouse press events [static]
883 //=================================================================================
884 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
886 if ( !application() )
888 foreach ( GEOMGUI* lib, myGUIMap )
889 lib->OnMousePress( e, application()->desktop(), w );
892 //=======================================================================
893 // function : createGeomAction
895 //=======================================================================
896 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
897 const int accel, const bool toggle, const QString& shortcutAction )
899 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
900 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
901 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
903 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
905 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
906 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
908 application()->desktop(),
910 this, SLOT( OnGUIEvent() ),
914 //=======================================================================
915 // function : createOriginAndBaseVectors
917 //=======================================================================
918 void GeometryGUI::createOriginAndBaseVectors()
920 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
921 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
923 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
927 if ( !CORBA::is_nil( GetGeomGen() ) ) {
928 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations();
929 if ( !aBasicOperations->_is_nil() ) {
930 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
931 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
932 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
933 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
934 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
935 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
937 GetGeomGen()->PublishInStudy( SALOMEDS::SObject::_nil(), anOrigin, "O" );
938 GetGeomGen()->PublishInStudy( SALOMEDS::SObject::_nil(), anOX, "OX" );
939 GetGeomGen()->PublishInStudy( SALOMEDS::SObject::_nil(), anOY, "OY" );
940 GetGeomGen()->PublishInStudy( SALOMEDS::SObject::_nil(), anOZ, "OZ" );
941 anOrigin->UnRegister();
945 aBasicOperations->UnRegister();
947 getApp()->updateObjectBrowser( true );
953 //=======================================================================
954 // function : GeometryGUI::initialize()
955 // purpose : Called when GEOM module is created
956 //=======================================================================
957 void GeometryGUI::initialize( CAM_Application* app )
959 SalomeApp_Module::initialize( app );
961 // ----- create actions --------------
963 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
965 createGeomAction( GEOMOp::OpPoint, "POINT" );
966 createGeomAction( GEOMOp::OpLine, "LINE" );
967 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
968 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
969 createGeomAction( GEOMOp::OpArc, "ARC" );
970 createGeomAction( GEOMOp::OpCurve, "CURVE" );
971 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
972 createGeomAction( GEOMOp::OpVector, "VECTOR" );
973 createGeomAction( GEOMOp::OpPlane, "PLANE" );
974 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
975 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
976 createGeomAction( GEOMOp::OpSurfaceFromFace, "SURFACE_FROM_FACE" );
978 createGeomAction( GEOMOp::OpBox, "BOX" );
979 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
980 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
981 createGeomAction( GEOMOp::OpTorus, "TORUS" );
982 createGeomAction( GEOMOp::OpCone, "CONE" );
983 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
984 createGeomAction( GEOMOp::OpDisk, "DISK" );
986 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
987 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
988 createGeomAction( GEOMOp::OpFilling, "FILLING" );
989 createGeomAction( GEOMOp::OpPipe, "PIPE" );
990 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
991 createGeomAction( GEOMOp::OpThickness, "THICKNESS" );
993 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
994 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
995 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
996 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
997 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
999 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
1000 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
1002 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
1004 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
1005 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
1007 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
1008 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
1009 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
1011 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
1013 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
1014 createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" );
1016 createGeomAction( GEOMOp::OpEdge, "EDGE" );
1017 createGeomAction( GEOMOp::OpWire, "WIRE" );
1018 createGeomAction( GEOMOp::OpFace, "FACE" );
1019 createGeomAction( GEOMOp::OpShell, "SHELL" );
1020 createGeomAction( GEOMOp::OpSolid, "SOLID" );
1021 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
1023 createGeomAction( GEOMOp::OpFuse, "FUSE" );
1024 createGeomAction( GEOMOp::OpCommon, "COMMON" );
1025 createGeomAction( GEOMOp::OpCut, "CUT" );
1026 createGeomAction( GEOMOp::OpSection, "SECTION" );
1028 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
1029 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
1030 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
1031 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
1032 createGeomAction( GEOMOp::OpScale, "SCALE" );
1033 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
1034 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
1035 createGeomAction( GEOMOp::OpProjOnCyl, "PROJ_ON_CYL" );
1036 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
1037 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
1038 createGeomAction( GEOMOp::OpExtension, "EXTENSION" );
1040 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
1041 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
1042 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
1043 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
1044 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
1045 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
1046 createGeomAction( GEOMOp::OpTransferData, "TRANSFER_DATA" );
1047 createGeomAction( GEOMOp::OpExtraction, "EXTRACTION" );
1048 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
1049 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
1050 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
1051 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
1053 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
1054 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
1055 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
1057 createGeomAction( GEOMOp::OpSewing, "SEWING" );
1058 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
1059 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
1060 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
1061 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
1062 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
1063 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
1064 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
1065 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
1066 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
1067 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
1068 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
1069 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1070 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1071 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1072 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1073 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1074 createGeomAction( GEOMOp::OpInspectObj, "INSPECT_OBJECT" );
1076 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1077 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1078 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1079 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1080 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1081 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1082 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1083 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1084 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1085 createGeomAction( GEOMOp::OpAnnotation, "ANNOTATION" );
1086 createGeomAction( GEOMOp::OpEditAnnotation, "EDIT_ANNOTATION" );
1087 createGeomAction( GEOMOp::OpDeleteAnnotation, "DELETE_ANNOTATION" );
1089 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1090 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1091 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1092 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1093 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1094 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1095 createGeomAction( GEOMOp::OpFastCheckInters, "FAST_CHECK_INTERSECTIONS" );
1096 #ifndef DISABLE_PLOT2DVIEWER
1097 createGeomAction( GEOMOp::OpShapeStatistics, "SHAPE_STATISTICS" );
1100 #ifndef DISABLE_PYCONSOLE
1101 #ifdef _DEBUG_ // PAL16821
1102 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1106 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1107 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1108 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1109 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1110 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1111 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1112 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1113 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1114 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1115 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1116 createGeomAction( GEOMOp::OpSwitchName, "NAME_MODE");
1117 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1118 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1119 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1120 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1121 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1122 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1123 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1124 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1125 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1126 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1127 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1128 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1129 createGeomAction( GEOMOp::OpHide, "ERASE" );
1131 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1132 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1133 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1134 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1135 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1136 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1137 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1138 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1139 createGeomAction( GEOMOp::OpShowName, "POP_SHOW_NAME", "", 0, true );
1140 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1141 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1142 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1143 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1144 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1145 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1146 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1147 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1148 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1149 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1150 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1151 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1152 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1153 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1154 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1155 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1156 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1157 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1158 #ifndef DISABLE_GRAPHICSVIEW
1159 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1161 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1162 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1163 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1164 createGeomAction( GEOMOp::OpShowAllAnnotations, "POP_SHOW_ALL_ANNOTATIONS" );
1165 createGeomAction( GEOMOp::OpHideAllAnnotations, "POP_HIDE_ALL_ANNOTATIONS" );
1167 // Create actions for increase/decrease transparency shortcuts
1168 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1169 "Geometry:Increase transparency");
1170 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1171 "Geometry:Decrease transparency");
1173 // Create actions for increase/decrease number of isolines
1174 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1175 "Geometry:Increase number of isolines");
1176 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1177 "Geometry:Decrease number of isolines");
1179 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1180 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1181 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1182 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1183 //@@ 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 @@//
1185 // ---- create menus --------------------------
1187 /*int fileId =*/ createMenu( tr( "MEN_FILE" ), -1, -1 );
1189 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1190 createMenu( GEOMOp::OpDelete, editId, -1 );
1192 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1194 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1195 createMenu( GEOMOp::OpPoint, basicId, -1 );
1196 createMenu( GEOMOp::OpLine, basicId, -1 );
1197 createMenu( GEOMOp::OpCircle, basicId, -1 );
1198 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1199 createMenu( GEOMOp::OpArc, basicId, -1 );
1200 createMenu( GEOMOp::OpCurve, basicId, -1 );
1201 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1202 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1203 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1204 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1205 createMenu( GEOMOp::OpSurfaceFromFace, basicId, -1 );
1206 createMenu( separator(), basicId, -1 );
1207 createMenu( GEOMOp::OpVector, basicId, -1 );
1208 createMenu( GEOMOp::OpPlane, basicId, -1 );
1209 createMenu( GEOMOp::OpLCS, basicId, -1 );
1210 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1212 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1213 createMenu( GEOMOp::OpBox, primId, -1 );
1214 createMenu( GEOMOp::OpCylinder, primId, -1 );
1215 createMenu( GEOMOp::OpSphere, primId, -1 );
1216 createMenu( GEOMOp::OpTorus, primId, -1 );
1217 createMenu( GEOMOp::OpCone, primId, -1 );
1218 createMenu( GEOMOp::OpRectangle, primId, -1 );
1219 createMenu( GEOMOp::OpDisk, primId, -1 );
1220 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1222 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1223 createMenu( GEOMOp::OpPrism, genId, -1 );
1224 createMenu( GEOMOp::OpRevolution, genId, -1 );
1225 createMenu( GEOMOp::OpFilling, genId, -1 );
1226 createMenu( GEOMOp::OpPipe, genId, -1 );
1227 createMenu( GEOMOp::OpPipePath, genId, -1 );
1228 createMenu( GEOMOp::OpThickness, genId, -1 );
1230 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1231 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1232 //@@ 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 @@//
1234 createMenu( separator(), newEntId, -1 );
1236 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1237 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1238 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1239 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1240 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1241 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1243 createMenu( separator(), newEntId, -1 );
1245 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1246 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1247 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1249 createMenu( separator(), newEntId, -1 );
1251 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1252 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1253 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1254 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1255 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1257 createMenu( separator(), newEntId, -1 );
1259 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1261 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1262 createMenu( GEOMOp::OpEdge, buildId, -1 );
1263 createMenu( GEOMOp::OpWire, buildId, -1 );
1264 createMenu( GEOMOp::OpFace, buildId, -1 );
1265 createMenu( GEOMOp::OpShell, buildId, -1 );
1266 createMenu( GEOMOp::OpSolid, buildId, -1 );
1267 createMenu( GEOMOp::OpCompound, buildId, -1 );
1269 createMenu( separator(), newEntId, -1 );
1271 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1273 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1276 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1278 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1279 createMenu( GEOMOp::OpFuse, boolId, -1 );
1280 createMenu( GEOMOp::OpCommon, boolId, -1 );
1281 createMenu( GEOMOp::OpCut, boolId, -1 );
1282 createMenu( GEOMOp::OpSection, boolId, -1 );
1284 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1285 createMenu( GEOMOp::OpTranslate, transId, -1 );
1286 createMenu( GEOMOp::OpRotate, transId, -1 );
1287 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1288 createMenu( GEOMOp::OpMirror, transId, -1 );
1289 createMenu( GEOMOp::OpScale, transId, -1 );
1290 createMenu( GEOMOp::OpOffset, transId, -1 );
1291 createMenu( GEOMOp::OpProjection, transId, -1 );
1292 createMenu( GEOMOp::OpExtension, transId, -1 );
1293 createMenu( GEOMOp::OpProjOnCyl, transId, -1 );
1294 createMenu( separator(), transId, -1 );
1295 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1296 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1298 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1299 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1300 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1301 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1303 createMenu( separator(), operId, -1 );
1305 createMenu( GEOMOp::OpPartition, operId, -1 );
1306 createMenu( GEOMOp::OpArchimede, operId, -1 );
1307 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1308 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1309 createMenu( GEOMOp::OpTransferData, operId, -1 );
1310 createMenu( GEOMOp::OpExtraction, operId, -1 );
1312 createMenu( separator(), operId, -1 );
1314 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1315 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1316 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1317 createMenu( GEOMOp::OpChamfer, operId, -1 );
1318 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1319 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1321 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1322 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1323 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1324 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1325 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1326 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1327 createMenu( GEOMOp::OpSewing, repairId, -1 );
1328 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1329 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1330 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1331 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1332 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1333 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1334 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1335 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1336 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1337 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1338 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1340 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1341 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1342 createMenu( GEOMOp::OpProperties, measurId, -1 );
1343 createMenu( separator(), measurId, -1 );
1344 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1345 createMenu( GEOMOp::OpInertia, measurId, -1 );
1346 createMenu( GEOMOp::OpNormale, measurId, -1 );
1347 createMenu( separator(), measurId, -1 );
1348 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1349 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1350 createMenu( separator(), measurId, -1 );
1352 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1353 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1354 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1355 createMenu( GEOMOp::OpAngle, dimId, -1 );
1356 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1358 createMenu( GEOMOp::OpAnnotation, measurId, -1 );
1360 createMenu( separator(), measurId, -1 );
1361 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1362 createMenu( separator(), measurId, -1 );
1363 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1364 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1365 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1366 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1367 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1368 createMenu( GEOMOp::OpFastCheckInters, measurId, -1 );
1369 createMenu( GEOMOp::OpInspectObj, measurId, -1 );
1370 #ifndef DISABLE_PLOT2DVIEWER
1371 createMenu( GEOMOp::OpShapeStatistics, measurId, -1 );
1374 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1375 #ifndef DISABLE_PYCONSOLE
1376 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1377 createMenu( separator(), toolsId, -1 );
1378 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1382 createMenu( separator(), toolsId, -1 );
1383 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1384 createMenu( separator(), toolsId, -1 );
1386 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1387 createMenu( separator(), viewId, -1 );
1389 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1390 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1391 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1392 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1393 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1394 createMenu( separator(), dispmodeId, -1 );
1395 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1396 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1397 createMenu( GEOMOp::OpSwitchName, dispmodeId, -1 );
1399 createMenu( separator(), viewId, -1 );
1400 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1401 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1402 createMenu( separator(), viewId, -1 );
1403 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1404 createMenu( separator(), viewId, -1 );
1408 because of these items are accessible through object browser and viewers
1409 we have removed they from main menu
1411 createMenu( GEOMOp::OpShow, viewId, -1 );
1412 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1413 createMenu( GEOMOp::OpHide, viewId, -1 );
1416 // ---- create toolbars --------------------------
1418 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1419 createTool( GEOMOp::OpPoint, basicTbId );
1420 createTool( GEOMOp::OpLine, basicTbId );
1421 createTool( GEOMOp::OpCircle, basicTbId );
1422 createTool( GEOMOp::OpEllipse, basicTbId );
1423 createTool( GEOMOp::OpArc, basicTbId );
1424 createTool( GEOMOp::OpCurve, basicTbId );
1425 createTool( GEOMOp::OpVector, basicTbId );
1426 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1427 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1428 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1429 createTool( GEOMOp::OpIsoline, basicTbId );
1430 createTool( GEOMOp::OpSurfaceFromFace, basicTbId );
1431 createTool( GEOMOp::OpPlane, basicTbId );
1432 createTool( GEOMOp::OpLCS, basicTbId );
1433 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1435 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1436 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1437 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1439 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1440 createTool( GEOMOp::OpBox, primTbId );
1441 createTool( GEOMOp::OpCylinder, primTbId );
1442 createTool( GEOMOp::OpSphere, primTbId );
1443 createTool( GEOMOp::OpTorus, primTbId );
1444 createTool( GEOMOp::OpCone, primTbId );
1445 createTool( GEOMOp::OpRectangle, primTbId );
1446 createTool( GEOMOp::OpDisk, primTbId );
1447 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1449 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1450 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1451 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1453 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1454 createTool( GEOMOp::OpFuse, boolTbId );
1455 createTool( GEOMOp::OpCommon, boolTbId );
1456 createTool( GEOMOp::OpCut, boolTbId );
1457 createTool( GEOMOp::OpSection, boolTbId );
1459 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1460 createTool( GEOMOp::OpPrism, genTbId );
1461 createTool( GEOMOp::OpRevolution, genTbId );
1462 createTool( GEOMOp::OpFilling, genTbId );
1463 createTool( GEOMOp::OpPipe, genTbId );
1464 createTool( GEOMOp::OpPipePath, genTbId );
1465 createTool( GEOMOp::OpThickness, genTbId );
1467 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1468 createTool( GEOMOp::OpTranslate, transTbId );
1469 createTool( GEOMOp::OpRotate, transTbId );
1470 createTool( GEOMOp::OpChangeLoc, transTbId );
1471 createTool( GEOMOp::OpMirror, transTbId );
1472 createTool( GEOMOp::OpScale, transTbId );
1473 createTool( GEOMOp::OpOffset, transTbId );
1474 createTool( GEOMOp::OpProjection, transTbId );
1475 createTool( GEOMOp::OpExtension, transTbId );
1476 createTool( GEOMOp::OpProjOnCyl, transTbId );
1477 createTool( separator(), transTbId );
1478 createTool( GEOMOp::OpMultiTranslate, transTbId );
1479 createTool( GEOMOp::OpMultiRotate, transTbId );
1481 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1482 createTool( GEOMOp::OpExplode, operTbId );
1483 createTool( GEOMOp::OpPartition, operTbId );
1484 createTool( GEOMOp::OpArchimede, operTbId );
1485 createTool( GEOMOp::OpShapesOnShape, operTbId );
1486 createTool( GEOMOp::OpSharedShapes, operTbId );
1487 createTool( GEOMOp::OpTransferData, operTbId );
1488 createTool( GEOMOp::OpExtraction, operTbId );
1490 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1491 createTool( GEOMOp::OpFillet1d, featTbId );
1492 createTool( GEOMOp::OpFillet2d, featTbId );
1493 createTool( GEOMOp::OpFillet3d, featTbId );
1494 createTool( GEOMOp::OpChamfer, featTbId );
1495 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1496 createTool( GEOMOp::OpExtrudedCut, featTbId );
1498 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1499 createTool( GEOMOp::OpEdge, buildTbId );
1500 createTool( GEOMOp::OpWire, buildTbId );
1501 createTool( GEOMOp::OpFace, buildTbId );
1502 createTool( GEOMOp::OpShell, buildTbId );
1503 createTool( GEOMOp::OpSolid, buildTbId );
1504 createTool( GEOMOp::OpCompound, buildTbId );
1506 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1507 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1508 createTool( GEOMOp::OpProperties, measureTbId );
1509 createTool( GEOMOp::OpCenterMass, measureTbId );
1510 createTool( GEOMOp::OpInertia, measureTbId );
1511 createTool( GEOMOp::OpNormale, measureTbId );
1512 createTool( separator(), measureTbId );
1513 createTool( GEOMOp::OpBoundingBox, measureTbId );
1514 createTool( GEOMOp::OpMinDistance, measureTbId );
1515 createTool( GEOMOp::OpAngle, measureTbId );
1516 createTool( GEOMOp::OpAnnotation, measureTbId );
1517 createTool( GEOMOp::OpTolerance , measureTbId );
1518 createTool( separator(), measureTbId );
1519 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1520 createTool( GEOMOp::OpFreeFaces, measureTbId );
1521 createTool( separator(), measureTbId );
1522 createTool( GEOMOp::OpWhatIs, measureTbId );
1523 createTool( GEOMOp::OpCheckShape, measureTbId );
1524 createTool( GEOMOp::OpCheckCompound, measureTbId );
1525 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1526 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1527 createTool( GEOMOp::OpFastCheckInters, measureTbId );
1529 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1530 createTool( GEOMOp::OpPictureImport, picturesTbId );
1532 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1535 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1536 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1537 //@@ 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 @@//
1539 // ---- create popup menus --------------------------
1541 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1542 QString clientOCC = "(client='OCCViewer')";
1543 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1544 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1546 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1547 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1548 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1549 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1551 QString autoColorPrefix =
1552 "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') and type='Shape' and selcount=1";
1554 QtxPopupMgr* mgr = popupMgr();
1556 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1557 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1558 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1559 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1560 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1561 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1562 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1563 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1565 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1566 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1567 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1568 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1569 mgr->insert( separator(), -1, -1 ); // -----------
1571 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1572 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1573 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1574 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1575 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1576 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1577 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1578 mgr->insert( separator(), -1, -1 ); // -----------
1579 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1580 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1581 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1582 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1583 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1584 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1585 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1586 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1587 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1588 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1589 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1590 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1591 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1592 mgr->insert( separator(), dispmodeId, -1 );
1593 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1594 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1595 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1596 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1597 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1598 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1599 mgr->insert( action( GEOMOp::OpShowName ), dispmodeId, -1 ); // show name
1600 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1601 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK + " and isNameMode", QtxPopupMgr::ToggleRule );
1602 mgr->insert( separator(), -1, -1 ); // -----------
1604 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1605 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1606 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1607 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1608 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1609 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1610 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1611 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1612 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1613 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1615 // material properties
1616 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1617 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1620 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1621 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1623 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1624 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1625 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1627 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1628 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1630 mgr->insert( separator(), -1, -1 ); // -----------
1631 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1632 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1633 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1634 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1635 mgr->insert( separator(), -1, -1 ); // -----------
1637 mgr->insert( action( GEOMOp::OpEditAnnotation ), -1, -1 ); // edit annotation
1638 mgr->setRule( action( GEOMOp::OpEditAnnotation ), clientOCC + " and annotationsCount=1", QtxPopupMgr::VisibleRule );
1639 mgr->insert( action( GEOMOp::OpDeleteAnnotation ), -1, -1 ); // delete annotation
1640 mgr->setRule( action( GEOMOp::OpDeleteAnnotation ), clientOCC + " and annotationsCount>0", QtxPopupMgr::VisibleRule );
1641 mgr->insert( separator(), -1, -1 ); // -----------
1643 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1644 onlyComponent = "((type='Component') and selcount=1)",
1645 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1646 types = "'Shape' 'Group' 'FieldStep'";
1648 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1649 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1651 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1652 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1654 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1655 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1657 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1659 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1660 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1661 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1662 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1663 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1664 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1665 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1666 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1667 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1668 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1669 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1670 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1671 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1672 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1673 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1674 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1675 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1676 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1677 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1678 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1679 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1680 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1681 mgr->insert( separator(), selectonlyId, -1);
1682 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1683 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1684 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1685 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1686 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1687 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1688 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1690 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1692 mgr->insert( separator(), -1, -1 ); // -----------
1693 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1694 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1695 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1696 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1697 mgr->insert( action( GEOMOp::OpShowAllAnnotations ), -1, -1 ); // show all annotations
1698 mgr->setRule( action( GEOMOp::OpShowAllAnnotations ), aDimensionRule.arg( "hasHiddenAnnotations" ), QtxPopupMgr::VisibleRule );
1699 mgr->insert( action( GEOMOp::OpHideAllAnnotations ), -1, -1 ); // hide all annotations
1700 mgr->setRule( action( GEOMOp::OpHideAllAnnotations ), aDimensionRule.arg( "hasVisibleAnnotations" ), QtxPopupMgr::VisibleRule );
1702 mgr->insert( separator(), -1, -1 ); // -----------
1703 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1704 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1706 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1707 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1709 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1710 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1712 mgr->insert( separator(), -1, -1 ); // -----------
1713 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1714 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1716 mgr->insert( separator(), -1, -1 ); // -----------
1717 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1718 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1720 #ifndef DISABLE_GRAPHICSVIEW
1721 mgr->insert( separator(), -1, -1 ); // -----------
1722 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1723 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1726 mgr->insert( separator(), -1, -1 ); // -----------
1727 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1728 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1730 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1732 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1734 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1735 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1736 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1739 // create plugin actions and menus
1743 //=======================================================================
1744 // function : GeometryGUI::addPluginActions()
1746 //=======================================================================
1747 void GeometryGUI::addPluginActions()
1750 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1751 if (!resMgr) return;
1753 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1754 if (!appStudy) return;
1756 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1758 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1760 int id = GEOMOp::OpLastOperationID; // TODO?
1763 GEOMUtils::PluginInfo::const_iterator it;
1764 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1765 // bind action lib and label to its ID for activateOperation() method proper work
1766 GEOMUtils::PluginData pdata = (*it);
1767 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1768 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1769 std::list<GEOMUtils::ActionData>::const_iterator ait;
1770 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1771 GEOMUtils::ActionData adata = (*ait);
1774 if ( !adata.icon.empty() )
1775 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1777 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1778 QString actionName = smenus.last();
1779 actionName = actionName.toUpper().prepend( "MEN_" );
1780 smenus.removeLast();
1782 // path to action in toolbar
1783 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1784 QString actionTool = stools.last();
1785 actionTool = actionTool.toUpper().prepend( "TOP_" );
1786 stools.removeLast();
1788 QString actionStat = adata.statusText.c_str();
1789 actionStat = actionStat.toUpper().prepend( "STB_" );
1791 createAction( id, // ~ adata.label
1792 tr( actionTool.toLatin1().constData() ),
1794 tr( actionName.toLatin1().constData() ),
1795 tr( actionStat.toLatin1().constData() ),
1796 QKeySequence( tr( adata.accel.c_str() ) ),
1797 application()->desktop(),
1799 this, SLOT( OnGUIEvent() ),
1800 QString() /*shortcutAction*/ );
1803 foreach ( QString subMenu, smenus ) {
1804 QStringList subMenuList = subMenu.split( ":" );
1805 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1806 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1807 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1809 createMenu( id, menuId, -1 );
1811 if ( !stools.isEmpty() ) {
1812 QString subTool = stools[0];
1813 subTool = subTool.toUpper().prepend( "TOOL_" );
1814 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1815 createTool(id, toolId);
1818 // add action id to map
1819 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1820 myPluginActions[id] = anAction;
1827 //=======================================================================
1828 // function : GeometryGUI::activateModule()
1829 // purpose : Called when GEOM module is activated
1830 //=======================================================================
1831 bool GeometryGUI::activateModule( SUIT_Study* study )
1833 if ( CORBA::is_nil( myComponentGeom ) )
1836 bool res = SalomeApp_Module::activateModule( study );
1840 setMenuShown( true );
1841 setToolShown( true );
1843 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1844 PyGILState_STATE gstate = PyGILState_Ensure();
1845 PyObject* pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1846 if ( !pluginsmanager ) {
1851 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1852 tr("MEN_NEW_ENTITY").toUtf8().data(),
1853 tr("GEOM_PLUGINS_OTHER").toUtf8().data());
1858 PyGILState_Release(gstate);
1859 // end of GEOM plugins loading
1861 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1862 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ), Qt::UniqueConnection );
1864 // Reset actions accelerator keys
1865 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1867 GUIMap::Iterator it;
1868 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1869 it.value()->activate( application()->desktop() );
1871 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1873 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ), Qt::UniqueConnection );
1874 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ), Qt::UniqueConnection );
1875 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ), Qt::UniqueConnection );
1877 if ( !myCreationInfoWdg )
1878 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1879 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1880 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1882 if ( !myTextTreeWdg ) {
1883 myTextTreeWdg = new GEOMGUI_TextTreeWdg( getApp() );
1884 new GEOMGUI_TextTreeSelector( myTextTreeWdg, GetAnnotationMgr(), getApp()->selectionMgr() );
1887 getApp()->insertDockWindow( myTextTreeWdg->getWinID(), myTextTreeWdg );
1888 getApp()->placeDockWindow( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
1891 SALOME_ListIO selected;
1892 sm->selectedObjects( selected );
1893 sm->clearSelected();
1895 SUIT_ViewManager* vm;
1896 ViewManagerList OCCViewManagers, VTKViewManagers;
1898 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1899 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1900 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1901 onViewManagerAdded(vm);
1903 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1904 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1905 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1906 onViewManagerAdded(vm);
1908 sm->setSelectedObjects( selected, true ); //NPAL 19674
1910 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1912 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ), Qt::UniqueConnection );
1914 // 0020836 (Basic vectors and origin)
1915 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1916 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1917 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1919 _PTR(Study) studyDS = appStudy->studyDS();
1921 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1922 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1923 createOriginAndBaseVectors();
1928 Py_XDECREF(pluginsmanager);
1932 //=======================================================================
1933 // function : GeometryGUI::deactivateModule()
1934 // purpose : Called when GEOM module is deactivated
1935 //=======================================================================
1936 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1938 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1940 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1942 setMenuShown( false );
1943 setToolShown( false );
1945 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1946 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1948 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1950 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1951 //disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1952 if ( myCreationInfoWdg ) {
1953 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1954 myCreationInfoWdg = 0;
1956 if ( myTextTreeWdg ) {
1957 getApp()->removeDockWindow( myTextTreeWdg->getWinID() );
1958 disconnect( application(), 0, myTextTreeWdg, 0 );
1962 EmitSignalCloseAllDialogs();
1964 GUIMap::Iterator it;
1965 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1966 it.value()->deactivate();
1968 // Unset actions accelerator keys
1969 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1971 qDeleteAll(myOCCSelectors);
1972 myOCCSelectors.clear();
1973 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1975 qDeleteAll(myVTKSelectors);
1976 myVTKSelectors.clear();
1977 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1979 return SalomeApp_Module::deactivateModule( study );
1982 //=======================================================================
1983 // function : onWindowActivated()
1984 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1985 //=======================================================================
1986 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1991 const bool ViewOCC = ( win->getViewManager() ? win->getViewManager()->getType() == OCCViewer_Viewer::Type() : false );
1992 //const bool ViewVTK = ( win->getViewManager() ? win->getViewManager()->getType() == SVTK_Viewer::Type() : false );
1994 // disable non-OCC viewframe menu commands
1995 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1996 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1997 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1998 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1999 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
2000 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
2001 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
2003 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
2004 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
2005 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
2006 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
2008 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
2011 void GeometryGUI::windows( QMap<int, int>& mappa ) const
2013 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
2014 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
2015 #ifndef DISABLE_PYCONSOLE
2016 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
2018 if ( myCreationInfoWdg )
2019 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
2020 if ( myTextTreeWdg )
2021 mappa.insert( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
2024 void GeometryGUI::viewManagers( QStringList& lst ) const
2026 lst.append( OCCViewer_Viewer::Type() );
2029 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
2031 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
2033 qDebug( "connect" );
2034 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
2035 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
2036 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
2037 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
2038 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
2039 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
2040 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
2041 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
2043 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2044 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
2046 // disable OCC selectors
2047 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
2048 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2049 while ( itOCCSel.hasNext() )
2050 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2051 sr->setEnabled(true);
2053 else if ( vm->getType() == SVTK_Viewer::Type() )
2055 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2056 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
2058 // disable VTK selectors
2059 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
2060 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2061 while ( itVTKSel.hasNext() )
2062 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2063 sr->setEnabled(true);
2067 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
2069 SUIT_ViewModel* viewer = vm->getViewModel();
2070 if ( vm->getType() == OCCViewer_Viewer::Type() )
2072 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2073 while ( itOCCSel.hasNext() )
2074 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2075 if ( sr->viewer() == viewer )
2077 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
2081 if ( vm->getType() == SVTK_Viewer::Type() )
2083 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2084 while ( itVTKSel.hasNext() )
2085 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2086 if ( sr->viewer() == viewer )
2088 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2092 SOCC_Viewer* aSOCCView = dynamic_cast<SOCC_Viewer*>(viewer);
2094 GetAnnotationMgr()->RemoveView( aSOCCView );
2098 //================================================================================
2100 * \brief Slot called when selection changed. Shows creation info of a selected object
2102 //================================================================================
2104 void GeometryGUI::updateCreationInfo()
2106 if ( myCreationInfoWdg )
2107 myCreationInfoWdg->clear();
2109 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2110 // if ( !myCreationInfoWdg->isVisible() )
2113 // look for a sole selected GEOM_Object
2114 GEOM::GEOM_BaseObject_var geomObj;
2116 SALOME_ListIO selected;
2117 getApp()->selectionMgr()->selectedObjects( selected );
2119 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2120 SALOME_ListIteratorOfListIO selIt( selected );
2121 for ( ; selIt.More(); selIt.Next() )
2123 Handle(SALOME_InteractiveObject) io = selIt.Value();
2124 if ( !io->hasEntry() ) continue;
2125 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2126 if ( !sobj ) continue;
2127 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2128 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2129 if ( !gobj->_is_nil() )
2131 if ( !geomObj->_is_nil() )
2132 return; // several GEOM objects selected
2136 if ( geomObj->_is_nil() ) return;
2138 // pass creation info of geomObj to myCreationInfoWdg
2140 if ( myCreationInfoWdg ) {
2142 GEOM::CreationInformationSeq_var info;
2145 info = geomObj->GetCreationInformation();
2149 myCreationInfoWdg->setInfo( info );
2153 void GeometryGUI::onAutoBringToFront()
2155 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2156 if( !isAutoBringToFront )
2159 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2160 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2163 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2164 if (!appStudy) return;
2166 GEOM_Displayer displayer;
2168 SALOME_View* window = displayer.GetActiveView();
2169 if ( !window ) return;
2171 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2173 SALOME_ListIO selected;
2174 getApp()->selectionMgr()->selectedObjects( selected );
2175 if (!myTopLevelIOList.IsEmpty())
2177 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2179 Handle( SALOME_InteractiveObject ) io = It.Value();
2180 bool isSelected = false;
2181 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2183 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2184 if( io->isSame( sel_io ) )
2187 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2189 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2190 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2195 myTopLevelIOList.Assign(selected);
2196 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2198 Handle( SALOME_InteractiveObject ) io = It.Value();
2199 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2200 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2203 displayer.UpdateViewer();
2204 GeometryGUI::Modified();
2207 void GeometryGUI::updateFieldColorScale()
2209 GEOM_Displayer aDisplayer;
2210 aDisplayer.UpdateColorScale();
2213 QString GeometryGUI::engineIOR() const
2215 if ( !CORBA::is_nil( GetGeomGen() ) )
2216 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2220 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture (int theId, int& theWidth, int& theHeight)
2222 theWidth = theHeight = 0;
2224 Handle(TColStd_HArray1OfByte) aTexture;
2226 aTexture = myTextureMap[ theId ];
2227 if ( aTexture.IsNull() ) {
2228 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations();
2229 if ( !aInsOp->_is_nil() ) {
2230 CORBA::Long aWidth, aHeight;
2231 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2232 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2234 theHeight = aHeight;
2236 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2238 for ( CORBA::ULong i = 0; i < aStream->length(); i++)
2239 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2240 myTextureMap[ theId ] = aTexture;
2247 LightApp_Selection* GeometryGUI::createSelection() const
2249 return new GEOMGUI_Selection();
2252 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2254 SalomeApp_Module::contextMenuPopup( client, menu, title );
2256 getApp()->selectionMgr()->selectedObjects( lst );
2258 //Add submenu for predefined materials
2259 // RNV: '#23552: Unable to use the contextual menu of Object Browser window' issue:
2260 // Temporary solution: do not show 'Materials' submenu forcibly
2261 //bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2262 bool isPredefMat = false;
2264 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2265 QtxPopupMgr* mgr = popupMgr();
2266 //get parent for submenu
2267 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2269 QMenu* oldMenu = act->menu() ;
2274 QMenu* matMenu = new QMenu();
2275 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2277 //Get current material model for the object
2279 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2280 if ( anApp && anApp->activeViewManager() ) {
2281 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2283 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2286 QString curModel = "";
2287 if ( v.canConvert<QString>() ) curModel = v.toString();
2288 // get list of all predefined materials
2289 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2291 foreach ( QString material, materials )
2293 QAction* menAct = matMenu->addAction( material );
2294 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2295 signalMapper->setMapping( menAct, material );
2296 menAct->setCheckable( true );
2297 // Set checked if this material is current
2298 Material_Model aModel;
2299 aModel.fromResources( material );
2300 if ( !found && aModel.toProperties() == curModel ) {
2301 menAct->setChecked( true );
2305 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2306 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2307 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2308 this, SLOT( OnSetMaterial( const QString & ) ) );
2309 act->setMenu( matMenu );
2313 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2314 Handle(SALOME_InteractiveObject) io = lst.First();
2315 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2316 _PTR(Study) study = appStudy->studyDS();
2317 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2319 QString aName = QString( obj->GetName().c_str() );
2320 aName.remove( QRegExp("\\s+$") );
2326 void GeometryGUI::OnSetMaterial(const QString& theName)
2328 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2332 void GeometryGUI::createPreferences()
2334 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2336 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2338 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2339 setPreferenceProperty( genGroup, "columns", 2 );
2341 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2342 LightApp_Preferences::Selector,
2343 "Geometry", "display_mode" );
2345 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2346 LightApp_Preferences::Color, "Geometry", "shading_color" );
2348 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2349 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2351 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2352 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2354 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2355 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2357 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2358 LightApp_Preferences::Color, "Geometry", "line_color" );
2360 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2361 LightApp_Preferences::Color, "Geometry", "point_color" );
2363 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2364 LightApp_Preferences::Color, "Geometry", "isos_color" );
2366 addPreference( tr( "PREF_LABEL_COLOR" ), genGroup,
2367 LightApp_Preferences::Color, "Geometry", "label_color" );
2369 addPreference( "", genGroup, LightApp_Preferences::Space );
2371 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2372 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2374 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2375 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2377 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2378 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2380 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2381 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2383 // RNV: Temporary hide this preference, because of the '#23552: Unable to use the contextual menu of Object Browser window' issue
2384 //addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2385 // LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2387 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2388 LightApp_Preferences::Selector,
2389 "Geometry", "material" );
2391 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2392 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2398 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2399 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2401 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2402 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2404 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2405 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2407 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2408 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2410 for (int i = 0; i < nb; i++) {
2411 setPreferenceProperty( wd[i], "min", 1 );
2412 setPreferenceProperty( wd[i], "max", 5 );
2415 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2416 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2418 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2419 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2421 // --------------------------------------------------------------------------
2422 // Dimensions (Measurements) preferences
2423 // --------------------------------------------------------------------------
2425 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2426 setPreferenceProperty( aDimGroupId, "columns", 2 );
2428 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2429 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2431 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2432 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2434 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2435 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2437 int aDimFontId = addPreference( tr( "PREF_DIMENSIONS_FONT" ), aDimGroupId, LightApp_Preferences::Font, "Geometry", "dimensions_font" );
2439 int f = QtxFontEdit::Family | QtxFontEdit::Size;
2440 setPreferenceProperty( aDimFontId, "features", f );
2441 setPreferenceProperty( aDimFontId, "mode", QtxFontEdit::Custom );
2443 Handle(Font_FontMgr) fmgr = Font_FontMgr::GetInstance();
2444 QString aFontFile = "";
2445 resMgr->value("resources", "GEOM", aFontFile);
2446 aFontFile = aFontFile + QDir::separator() + "Y14.5M-2009.ttf";
2447 // add enginier font into combobox
2448 /*int fontID =*/ QFontDatabase::addApplicationFont( aFontFile );
2449 Handle(Font_SystemFont) sf = new Font_SystemFont(
2450 new TCollection_HAsciiString("Y14.5M-2009"),
2452 new TCollection_HAsciiString(aFontFile.toLatin1().data()) );
2453 // register font in OCC font manager
2454 fmgr->RegisterFont( sf, Standard_False );
2456 // get list of supported fonts by OCC
2457 QStringList anOCCFonts;
2458 TColStd_SequenceOfHAsciiString theFontsNames;
2459 fmgr->GetAvailableFontsNames( theFontsNames );
2460 for(Standard_Integer i=1; i<=theFontsNames.Length(); i++) {
2461 Handle(TCollection_HAsciiString) str = theFontsNames(i);
2462 anOCCFonts << str->ToCString();
2464 anOCCFonts.removeDuplicates();
2465 // set the supported fonts into combobox to use its only
2466 setPreferenceProperty( aDimFontId, "fonts", anOCCFonts );
2468 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2469 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2471 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2472 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2473 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2475 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2476 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2478 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2479 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2481 QStringList aListOfLengthUnits;
2482 aListOfLengthUnits << "m";
2483 aListOfLengthUnits << "cm";
2484 aListOfLengthUnits << "mm";
2485 aListOfLengthUnits << "in.";
2486 aListOfLengthUnits << "ft.";
2488 QStringList aListOfAngUnits;
2489 aListOfAngUnits << "rad";
2490 aListOfAngUnits << "deg";
2492 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2493 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2495 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2496 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2498 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2499 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2501 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2502 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2503 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2505 addPreference( tr( "PREF_DIMENSIONS_USE_TEXT3D" ), aDimGroupId,
2506 LightApp_Preferences::Bool, "Geometry", "dimensions_use_text3d" );
2508 // --------------------------------------------------------------------------
2509 // Shape annotation preferences
2510 // --------------------------------------------------------------------------
2512 const int aShapeAnnGroupId = addPreference( tr( "PREF_SHAPE_ANNOTATIONS" ), tabId );
2513 setPreferenceProperty( aShapeAnnGroupId, "columns", 2 );
2515 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_FONT_COLOR" ), aShapeAnnGroupId, LightApp_Preferences::Color, "Geometry", "shape_annotation_font_color" );
2516 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_COLOR" ), aShapeAnnGroupId, LightApp_Preferences::Color, "Geometry", "shape_annotation_line_color" );
2517 const int aShapeAnnFont =
2518 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_FONT" ), aShapeAnnGroupId, LightApp_Preferences::Font, "Geometry", "shape_annotation_font" );
2520 int aShapeAnnFontFeatures = QtxFontEdit::Family | QtxFontEdit::Size | QtxFontEdit::Bold | QtxFontEdit::Italic;
2521 setPreferenceProperty( aShapeAnnFont, "features", aShapeAnnFontFeatures );
2522 setPreferenceProperty( aShapeAnnFont, "mode", QtxFontEdit::Custom );
2523 setPreferenceProperty( aShapeAnnFont, "fonts", anOCCFonts );
2525 const int aShapeAnnLineWidth =
2526 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_WIDTH" ), aShapeAnnGroupId, LightApp_Preferences::IntSpin, "Geometry", "shape_annotation_line_width" );
2528 setPreferenceProperty( aShapeAnnLineWidth, "min", 1 );
2529 setPreferenceProperty( aShapeAnnLineWidth, "max", 5 );
2531 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_AUTOHIDE" ), aShapeAnnGroupId, LightApp_Preferences::Bool, "Geometry", "shape_annotation_autohide" );
2533 const int aShapeAnnLineStyle =
2534 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_STYLE" ), aShapeAnnGroupId, LightApp_Preferences::Selector, "Geometry", "shape_annotation_line_style" );
2536 QStringList aLineStyleList;
2537 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_SOLID") );
2538 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DASH") );
2539 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DOT") );
2540 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DOTDASH") );
2542 QList<QVariant> aLineStyleIds;
2543 aLineStyleIds.append(0);
2544 aLineStyleIds.append(1);
2545 aLineStyleIds.append(2);
2546 aLineStyleIds.append(3);
2548 setPreferenceProperty( aShapeAnnLineStyle, "strings", aLineStyleList );
2549 setPreferenceProperty( aShapeAnnLineStyle, "indexes", aLineStyleIds );
2551 // --------------------------------------------------------------------------
2552 // Isoline drawing preferences
2553 // --------------------------------------------------------------------------
2555 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2556 setPreferenceProperty( isoGroup, "columns", 2 );
2557 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2558 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2559 setPreferenceProperty( isoU, "min", 0 );
2560 setPreferenceProperty( isoU, "max", 100000 );
2561 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2562 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2563 setPreferenceProperty( isoV, "min", 0 );
2564 setPreferenceProperty( isoV, "max", 100000 );
2566 // Quantities with individual precision settings
2567 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2568 setPreferenceProperty( precGroup, "columns", 2 );
2570 const int nbQuantities = 8;
2571 int prec[nbQuantities], ii = 0;
2572 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2573 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2574 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2575 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2576 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2577 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2578 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2579 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2580 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2581 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2582 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2583 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2584 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2585 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2586 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2587 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2589 // Set property for precision value for spinboxes
2590 for ( ii = 0; ii < nbQuantities; ii++ ){
2591 setPreferenceProperty( prec[ii], "min", -14 );
2592 setPreferenceProperty( prec[ii], "max", 14 );
2593 setPreferenceProperty( prec[ii], "precision", 2 );
2596 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2597 setPreferenceProperty( VertexGroup, "columns", 2 );
2599 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2600 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2602 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2603 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2605 // Set property for default display mode
2606 QStringList aModesList;
2607 aModesList.append( tr("MEN_WIREFRAME") );
2608 aModesList.append( tr("MEN_SHADING") );
2609 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2610 aModesList.append( tr("MEN_TEXTURE") );
2612 QList<QVariant> anIndexesList;
2613 anIndexesList.append(0);
2614 anIndexesList.append(1);
2615 anIndexesList.append(2);
2616 anIndexesList.append(3);
2618 setPreferenceProperty( dispmode, "strings", aModesList );
2619 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2621 // Set property for top level display mode
2622 QStringList aTopModesList;
2623 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2624 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2625 aTopModesList.append( tr("MEN_WIREFRAME") );
2626 aTopModesList.append( tr("MEN_SHADING") );
2627 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2629 QList<QVariant> aTopIndexesList;
2630 aTopIndexesList.append(0);
2631 aTopIndexesList.append(1);
2632 aTopIndexesList.append(2);
2633 aTopIndexesList.append(3);
2634 aTopIndexesList.append(4);
2636 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2637 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2639 // Set property for step value for spinboxes
2640 setPreferenceProperty( step, "min", 1 );
2641 setPreferenceProperty( step, "max", 10000 );
2642 setPreferenceProperty( step, "precision", 3 );
2644 // Set property for trandparency value for spinboxes
2645 setPreferenceProperty( transparency, "min", 0 );
2646 setPreferenceProperty( transparency, "max", 100 );
2648 // Set property for deflection value for spinboxes
2649 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2650 setPreferenceProperty( defl, "max", 1.0 );
2651 setPreferenceProperty( defl, "step", 1.0e-04 );
2652 setPreferenceProperty( defl, "precision", 6 );
2654 // Set property for default material
2655 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2657 // Set property vertex marker type
2658 QList<QVariant> aMarkerTypeIndicesList;
2659 QList<QVariant> aMarkerTypeIconsList;
2661 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2662 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2663 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2664 aMarkerTypeIndicesList << (i-1);
2665 aMarkerTypeIconsList << pixmap;
2668 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2669 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2671 // Set property for vertex marker scale
2672 QList<QVariant> aMarkerScaleIndicesList;
2673 QStringList aMarkerScaleValuesList;
2675 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2676 aMarkerScaleIndicesList << iii;
2677 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2680 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2681 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2683 // Scalar bar for field step presentation
2684 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2685 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2687 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2688 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2689 setPreferenceProperty( sbXPosition, "min", 0 );
2690 setPreferenceProperty( sbXPosition, "max", 1 );
2691 setPreferenceProperty( sbXPosition, "step", 0.05 );
2693 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2694 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2695 setPreferenceProperty( sbYPosition, "min", 0 );
2696 setPreferenceProperty( sbYPosition, "max", 1 );
2697 setPreferenceProperty( sbYPosition, "step", 0.05 );
2699 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2700 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2701 setPreferenceProperty( sbWidth, "min", 0 );
2702 setPreferenceProperty( sbWidth, "max", 1 );
2703 setPreferenceProperty( sbWidth, "step", 0.05 );
2705 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2706 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2707 setPreferenceProperty( sbHeight, "min", 0 );
2708 setPreferenceProperty( sbHeight, "max", 1 );
2709 setPreferenceProperty( sbHeight, "step", 0.05 );
2711 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2712 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2713 setPreferenceProperty( sbTextHeight, "min", 6 );
2714 setPreferenceProperty( sbTextHeight, "max", 24 );
2715 setPreferenceProperty( sbTextHeight, "step", 1 );
2717 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2718 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2719 setPreferenceProperty( sbNbIntervals, "min", 2 );
2720 setPreferenceProperty( sbNbIntervals, "max", 64 );
2721 setPreferenceProperty( sbNbIntervals, "step", 1 );
2723 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2724 setPreferenceProperty( originGroup, "columns", 2 );
2726 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2727 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2728 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2729 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2731 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2732 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2734 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2735 setPreferenceProperty( operationsGroup, "columns", 2 );
2737 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2738 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2740 addPreference( tr( "PREF_HIDE_INPUT_OBJECT" ), operationsGroup,
2741 LightApp_Preferences::Bool, "Geometry", "hide_input_object" );
2743 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2745 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2747 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2748 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2750 QStringList aHierarchyTypeList;
2751 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2752 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2753 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2755 QList<QVariant> aHierarchyTypeIndexesList;
2756 aHierarchyTypeIndexesList.append(0);
2757 aHierarchyTypeIndexesList.append(1);
2758 aHierarchyTypeIndexesList.append(2);
2760 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2761 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2763 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2764 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2766 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2768 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2769 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2771 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2772 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2773 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2774 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2775 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2776 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2777 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2778 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2780 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2781 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2782 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2783 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2784 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2785 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2792 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2794 if (section == "Geometry") {
2795 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2796 if (param == QString("SettingsGeomStep")) {
2797 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2798 EmitSignalDefaultStepValueChanged(spin_step);
2800 else if (param == QString("toplevel_color")) {
2801 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2802 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2804 else if (param == QString("toplevel_dm")) {
2805 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2807 else if (param == QString("scalar_bar_x_position") ||
2808 param == QString("scalar_bar_y_position") ||
2809 param == QString("scalar_bar_width") ||
2810 param == QString("scalar_bar_height") ||
2811 param == QString("scalar_bar_text_height") ||
2812 param == QString("scalar_bar_nb_intervals")) {
2813 updateFieldColorScale();
2815 else if ( param == QString("dimensions_color") ||
2816 param == QString("dimensions_line_width") ||
2817 param == QString("dimensions_font") ||
2818 param == QString("dimensions_arrow_length") ||
2819 param == QString("dimensions_show_units") ||
2820 param == QString("dimensions_length_units") ||
2821 param == QString("dimensions_angle_units") ||
2822 param == QString("dimensions_use_text3d") ||
2823 param == QString("shape_annotation_font_color") ||
2824 param == QString("shape_annotation_line_color") ||
2825 param == QString("shape_annotation_font") ||
2826 param == QString("shape_annotation_line_width") ||
2827 param == QString("shape_annotation_autohide") ||
2828 param == QString("shape_annotation_line_style") ||
2829 param == QString("shape_annotation_line_style") ||
2830 param == QString("label_color") )
2832 SalomeApp_Application* anApp = getApp();
2838 GEOM_Displayer aDisplayer;
2840 ViewManagerList aVMs;
2841 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2842 ViewManagerList::Iterator anIt = aVMs.begin();
2843 for ( ; anIt != aVMs.end(); ++anIt )
2845 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2851 SALOME_ListIO aVisible;
2852 aViewer->GetVisible( aVisible );
2854 GEOMGUI_AnnotationMgr* anAnnotationMgr = GetAnnotationMgr();
2855 if ( anAnnotationMgr ) {
2856 SALOME_ListIteratorOfListIO anIter( aVisible );
2857 while ( anIter.More() ) {
2858 if ( anAnnotationMgr->isAnnotationEntry( anIter.Value()->getEntry() ) ) {
2859 aVisible.Remove( anIter );
2867 aDisplayer.Redisplay( aVisible, false, aViewer );
2869 if ( param == QString( "label_color" ) ) {
2870 ViewManagerList aVMsVTK;
2871 anApp->viewManagers( SVTK_Viewer::Type(), aVMsVTK );
2872 ViewManagerList::Iterator anIt = aVMsVTK.begin();
2873 for ( ; anIt != aVMsVTK.end(); ++anIt )
2875 SVTK_Viewer* aViewer = dynamic_cast<SVTK_Viewer*>( (*anIt)->getViewModel() );
2880 SALOME_ListIO aVisible;
2881 aViewer->GetVisible( aVisible );
2882 aDisplayer.Redisplay( aVisible, false, aViewer );
2885 aDisplayer.UpdateViewer();
2887 else if ( param.startsWith( "dependency_tree") )
2888 emit SignalDependencyTreeParamChanged( section, param );
2892 LightApp_Displayer* GeometryGUI::displayer()
2895 myDisplayer = new GEOM_Displayer();
2899 void GeometryGUI::setLocalSelectionMode(const int mode)
2901 myLocalSelectionMode = mode;
2904 int GeometryGUI::getLocalSelectionMode() const
2906 return myLocalSelectionMode;
2909 const char gSeparator = '_'; // character used to separate parameter names
2910 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2913 * \brief Store visual parameters
2915 * This method is called just before the study document is saved.
2916 * Store visual parameters in AttributeParameter attribute(s)
2918 void GeometryGUI::storeVisualParameters (int savePoint)
2920 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2921 if ( !appStudy || !appStudy->studyDS() )
2924 _PTR(Study) studyDS = appStudy->studyDS();
2926 // componentName is used for encoding of entries when storing them in IParameters
2927 std::string componentName = myComponentGeom->ComponentDataType();
2928 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2929 //if (!aSComponent) return;
2932 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2933 componentName.c_str(),
2935 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2937 QSet<QString> anEntriesToStoreShared;
2938 QList<SUIT_ViewManager*> lst;
2939 QList<SUIT_ViewManager*>::Iterator it;
2941 GEOMGUI_AnnotationMgr* aAnnotationMgr = GetAnnotationMgr();
2943 // main cycle to store parameters of displayed objects
2945 getApp()->viewManagers(lst);
2946 for (it = lst.begin(); it != lst.end(); it++) {
2947 SUIT_ViewManager* vman = *it;
2948 QString vType = vman->getType();
2949 SUIT_ViewModel* vmodel = vman->getViewModel();
2950 SALOME_View* aView = dynamic_cast<SALOME_View*>(vmodel);
2952 int aMgrId = vman->getGlobalId();
2953 // saving VTK actors properties
2954 QVector<SUIT_ViewWindow*> views = vman->getViews();
2955 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2956 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
2957 ObjMap::ConstIterator o_it = anObjects.begin();
2958 for (; o_it != anObjects.end(); o_it++) {
2959 const PropMap& aProps = o_it.value();
2961 //Check that object exists in the study
2962 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toUtf8().data() ) );
2963 if ( !obj || !(aProps.count() > 0))
2965 // entry is "encoded" = it does NOT contain component address, since it is a
2966 // subject to change on next component loading
2968 std::string entry = ip->encodeEntry(o_it.key().toUtf8().data(), componentName);
2970 _PTR(GenericAttribute) anAttr;
2971 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2974 // remember entry of object to store shared GEOM properties
2975 // (e.g. dimension properties).
2976 if ( vType == OCCViewer_Viewer::Type() )
2978 anEntriesToStoreShared.insert( o_it.key() );
2981 QString param, occParam = vType;
2982 occParam += GEOM::sectionSeparator();
2983 occParam += QString::number(aMgrId);
2984 occParam += GEOM::sectionSeparator();
2986 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2987 param = occParam + GEOM::propertyName( GEOM::Visibility );
2988 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2991 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2992 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2993 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2996 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2997 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2999 val << QString::number(c.redF());
3000 val << QString::number(c.greenF());
3001 val << QString::number(c.blueF());
3002 param = occParam + GEOM::propertyName( GEOM::Color );
3003 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
3006 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
3007 param = occParam + GEOM::propertyName( GEOM::Texture );
3008 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
3011 if (vType == SVTK_Viewer::Type()) {
3012 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
3013 param = occParam + GEOM::propertyName( GEOM::Opacity );
3014 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
3016 } else if (vType == SOCC_Viewer::Type()) {
3017 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
3018 param = occParam + GEOM::propertyName( GEOM::Transparency );
3019 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
3022 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
3023 param = occParam + GEOM::propertyName( GEOM::TopLevel );
3024 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
3028 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
3029 param = occParam + GEOM::propertyName( GEOM::NbIsos );
3030 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
3033 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
3034 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
3035 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
3038 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
3039 param = occParam + GEOM::propertyName( GEOM::Vertices );
3040 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
3043 if (aProps.contains(GEOM::propertyName( GEOM::ShowName ))) {
3044 param = occParam + GEOM::propertyName( GEOM::ShowName );
3045 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::ShowName )).toString().toStdString());
3048 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
3049 param = occParam + GEOM::propertyName( GEOM::Deflection );
3050 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
3053 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
3054 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
3055 param = occParam + GEOM::propertyName( GEOM::PointMarker );
3056 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
3059 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
3060 param = occParam + GEOM::propertyName( GEOM::Material );
3061 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
3064 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
3065 param = occParam + GEOM::propertyName( GEOM::LineWidth );
3066 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
3069 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
3070 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
3071 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
3074 if ( vType == SOCC_Viewer::Type() && aAnnotationMgr ) {
3075 std::string anAnnotationInfo = GetAnnotationMgr()->getDisplayedIndicesInfo(
3076 o_it.key().toUtf8().data(), dynamic_cast<SOCC_Viewer*>(aView) ).toStdString();
3077 if (!anAnnotationInfo.empty()) {
3078 param = occParam + "ShapeAnnotationVisibleItems";
3079 ip->setParameter(entry, param.toStdString(), anAnnotationInfo);
3082 } // object iterator
3084 } // for (viewManagers)
3086 // store shape annotation and dimension attributes of objects:
3087 // since the displayed object always persists in property map, we remember the object entries
3088 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
3089 const QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
3090 const QString aAnnotationParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::ShapeAnnotations );
3091 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
3092 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
3094 std::string aStudyEntry = (*aEntryIt).toUtf8().data();
3095 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName );
3097 // store dimension parameters
3098 GEOMGUI_DimensionProperty aDimensions( aStudyEntry );
3099 if ( aDimensions.GetNumber() != 0 ) {
3100 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toUtf8().data() );
3103 _PTR(SObject) aObj( studyDS->FindObjectID( aStudyEntry ) );
3104 const Handle(GEOMGUI_AnnotationAttrs) aShapeAnnAttr = GEOMGUI_AnnotationAttrs::FindAttributes( aObj );
3105 if ( !aShapeAnnAttr.IsNull() ) {
3106 ip->setParameter( aStoreEntry, aAnnotationParam.toStdString(), aShapeAnnAttr->ExportAsPropertyString().toUtf8().data() );
3112 * \brief Restore visual parameters
3114 * This method is called after the study document is opened.
3115 * Restore visual parameters from AttributeParameter attribute(s)
3117 void GeometryGUI::restoreVisualParameters (int savePoint)
3119 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
3120 if (!appStudy || !appStudy->studyDS())
3122 _PTR(Study) studyDS = appStudy->studyDS();
3124 // componentName is used for encoding of entries when storing them in IParameters
3125 std::string componentName = myComponentGeom->ComponentDataType();
3126 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
3127 //if (!aSComponent) return;
3130 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
3131 componentName.c_str(),
3133 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
3135 std::vector<std::string> entries = ip->getEntries();
3137 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
3139 // entry is a normal entry - it should be "decoded" (setting base address of component)
3140 QString entry (ip->decodeEntry(*entIt).c_str());
3142 // Check that the entry corresponds to a real object in the Study
3143 // as the object may be deleted or modified after the visual state is saved.
3144 _PTR(SObject) so = studyDS->FindObjectID(entry.toUtf8().data());
3145 if (!so) continue; //Skip the not existent entry
3147 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
3148 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
3150 std::vector<std::string>::iterator namesIt = paramNames.begin();
3151 std::vector<std::string>::iterator valuesIt = paramValues.begin();
3153 // actors are stored in a map after displaying of them for
3154 // quicker access in the future: map < viewID to actor >
3155 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
3156 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
3158 QString viewerTypStr;
3159 QString viewIndexStr;
3161 QVector<PropMap> aListOfMap;
3163 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
3165 // visual parameters are stored in strings as follows:
3166 // 1) ViewerType_ViewIndex_ParamName
3167 // 2) ViewerType_ParamName (shared for GEOM module)
3168 // '_' is used as separator and should not be used in viewer type or parameter names.
3169 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
3171 bool isShared = lst.size() == 2;
3172 bool isViewer = lst.size() == 3;
3173 if ( !isShared && !isViewer )
3178 // shared visual parameters
3181 QString aParamNameStr( lst[1] );
3182 QString aValuesStr( (*valuesIt).c_str() );
3184 // shared dimension properties are stored as attribute
3185 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
3187 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
3188 aDimensionProp.SaveToAttribute( entry.toUtf8().data() );
3190 else if ( aParamNameStr == GEOM::propertyName( GEOM::ShapeAnnotations ) )
3192 Handle(GEOMGUI_AnnotationAttrs) anAttr =
3193 GEOMGUI_AnnotationAttrs::FindOrCreateAttributes( so, appStudy );
3195 anAttr->ImportFromPropertyString( aValuesStr );
3201 // per view visual parameters
3202 viewerTypStr = lst[0];
3203 viewIndexStr = lst[1];
3204 QString paramNameStr = lst[2];
3207 viewIndex = viewIndexStr.toUInt(&ok);
3208 if (!ok) // bad conversion of view index to integer
3211 if ((viewIndex + 1) > aListOfMap.count()) {
3212 aListOfMap.resize(viewIndex + 1);
3215 QString val((*valuesIt).c_str());
3216 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
3217 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
3218 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
3219 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
3220 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
3221 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
3222 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
3223 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
3224 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
3225 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
3226 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
3227 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
3228 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
3229 QStringList rgb = val.split(GEOM::subSectionSeparator());
3230 if (rgb.count() == 3) {
3231 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
3232 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
3234 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
3235 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
3236 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
3237 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
3238 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
3239 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
3240 } else if (paramNameStr == GEOM::propertyName( GEOM::ShowName )) {
3241 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::ShowName ), val == "true" || val == "1");
3242 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3243 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3244 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3245 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3246 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3247 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3248 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3249 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3250 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3251 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3252 } else if (paramNameStr == "ShapeAnnotationVisibleItems") {
3253 aListOfMap[viewIndex].insert( "ShapeAnnotationVisibleItems", val);
3256 } // for names/parameters iterator
3258 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3260 for (int index = 0; index < aListOfMap.count(); index++) {
3261 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
3263 //Get Visibility property of the current PropMap
3264 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3265 SUIT_ViewManager* vman = lst.at(index);
3266 SUIT_ViewModel* vmodel = vman->getViewModel();
3267 SALOME_View* aView = dynamic_cast<SALOME_View*>(vmodel);
3268 displayer()->Display(entry, true, aView);
3270 if ( vmodel->getType() == SOCC_Viewer::Type() ) {
3271 PropMap& aProps = aListOfMap[index];
3272 if ( aProps.contains( "ShapeAnnotationVisibleItems" ) ) {
3273 SOCC_Viewer* aSOCCView = dynamic_cast<SOCC_Viewer*>( aView );
3274 GetAnnotationMgr()->setDisplayedIndicesInfo( entry, aSOCCView, aProps["ShapeAnnotationVisibleItems"].toString() );
3279 } // for entries iterator
3281 // update all VTK and OCC views
3282 QList<SUIT_ViewManager*> lst;
3283 getApp()->viewManagers(lst);
3284 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3285 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3288 if (vmodel->getType() == SVTK_Viewer::Type()) {
3289 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3290 vtkView->getRenderer()->ResetCameraClippingRange();
3293 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3294 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3295 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3301 if ( myTextTreeWdg ) {
3302 myTextTreeWdg->updateTree();
3306 // Compute current name mode of the viewer
3307 void UpdateNameMode( SalomeApp_Application* app )
3309 bool isMode = false;
3310 SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() );
3311 SUIT_ViewWindow* viewWindow = app->desktop()->activeWindow();
3312 GEOM_Displayer displayer;
3313 int aMgrId = viewWindow->getViewManager()->getGlobalId();
3315 SALOME_View* window = displayer.GetActiveView();
3316 if ( !window ) return;
3318 SALOME_ListIO anIOlst;
3319 window->GetVisible( anIOlst );
3321 for ( SALOME_ListIteratorOfListIO It( anIOlst ); It.More(); It.Next() ) {
3322 Handle( SALOME_InteractiveObject ) io = It.Value();
3323 QVariant v = aStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::ShowName ), QVariant() );
3324 bool isIONameMode = v.isValid() ? v.toBool() : false;
3328 viewWindow->setProperty( "NameMode", isMode );
3331 void GeometryGUI::onViewAboutToShow()
3333 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3334 QAction* a = action( GEOMOp::OpSwitchVectors );
3335 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3336 QAction* aNameAction = action( GEOMOp::OpSwitchName );
3338 a->setEnabled(true);
3339 bool vmode = window->property("VectorsMode").toBool();
3340 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3341 aVerticesAction->setEnabled(true);
3342 vmode = window->property("VerticesMode").toBool();
3343 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3344 UpdateNameMode( getApp() );
3345 aNameAction->setEnabled(true);
3346 vmode = window->property("NameMode").toBool();
3347 aNameAction->setText ( vmode == 1 ? tr( "MEN_NAME_MODE_OFF" ) : tr("MEN_NAME_MODE_ON") );
3349 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3350 a->setEnabled(false);
3351 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3352 aVerticesAction->setEnabled(false);
3353 aNameAction->setText ( tr("MEN_NAME_MODE_ON") );
3354 aNameAction->setEnabled(false);
3359 \brief Return action by id
3360 \param id identifier of the action
3363 QAction* GeometryGUI::getAction(const int id) {
3368 \brief GEOM module message handler
3370 This method can be re-implemented in the subclasses.
3371 This is a GEOM module message handler.
3373 \param msg the message received.
3375 void GeometryGUI::message(const QString& msg)
3378 QStringList data = msg.split("/");
3379 const int nbStrings = data.count();
3381 if (nbStrings > 0) {
3382 if (data[0] == "modified") {
3384 QString anIOR = nbStrings > 1 ? data[1] : QString();
3386 if ( anIOR.isEmpty() ) {
3390 // Get the geom object.
3391 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3393 // Clear the shape buffer
3394 GeometryGUI::ClearShapeBuffer (anObj);
3400 \brief Clears the shape buffer.
3402 This is a static method. It clears the shape buffer.
3404 \param theObj the object
3406 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3408 if ( CORBA::is_nil( theObj ) )
3411 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3412 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3413 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3415 SalomeApp_Application* app =
3416 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3417 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3422 _PTR(Study) aStudy = appStudy->studyDS();
3427 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3431 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3432 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3433 _PTR(GenericAttribute) anAttr;
3434 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3435 _PTR(AttributeIOR) anIOR ( anAttr );
3436 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3437 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3443 \brief Returns the object from IOR.
3445 This is a static method. It returns the object from its IOR.
3447 \param IOR object IOR
3448 \return GEOM object.
3450 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3452 GEOM::GEOM_Object_var geomObj;
3453 if ( !IOR.isEmpty() ) {
3454 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3455 ( IOR.toLatin1().constData() );
3456 if ( !CORBA::is_nil( corbaObj ) )
3457 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3459 return geomObj._retn();
3463 \brief Returns IOR of the object.
3465 This is a static method. It returns the object's IOR.
3467 \param object the GEOM object.
3468 \return object's IOR.
3470 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3473 if ( !CORBA::is_nil( object ) ) {
3474 CORBA::String_var anIOR =
3475 SalomeApp_Application::orb()->object_to_string( object );
3482 \brief Check if this object is can't be renamed in place
3484 This method can be re-implemented in the subclasses.
3485 Return true in case if object isn't reference or component (module root).
3487 \param entry column id
3488 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3490 bool GeometryGUI::renameAllowed( const QString& entry) const {
3492 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3493 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3494 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3496 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3500 Rename object by entry.
3501 \param entry entry of the object
3502 \param name new name of the object
3503 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3505 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3507 bool result = false;
3509 SalomeApp_Application* app =
3510 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3511 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3516 _PTR(Study) aStudy = appStudy->studyDS();
3521 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3523 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3527 _PTR(SObject) obj ( aStudy->FindObjectID(qUtf8Printable(entry)) );
3528 _PTR(GenericAttribute) anAttr;
3530 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3531 _PTR(AttributeName) aName (anAttr);
3533 aName->SetValue( name.toUtf8().data() ); // rename the SObject
3534 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3535 if (!CORBA::is_nil(anObj)) {
3536 anObj->SetName( name.toUtf8().data() ); // Rename the corresponding GEOM_Object
3537 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3538 emit SignalTextTreeRenameObject( entry );
3546 void GeometryGUI::updateMaterials()
3548 LightApp_Preferences* pref = preferences();
3550 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3551 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3552 if ( !materials.contains( currentMaterial ) )
3553 // user material set as default in the preferences, might be removed
3554 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3556 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3558 setPreferenceProperty( prefItem->id(),
3559 "strings", materials );
3560 prefItem->retrieve();
3566 \brief Check if the module allows "drag" operation of its objects.
3568 Overloaded from LightApp_Module class.
3570 This function is a part of the general drag-n-drop mechanism.
3571 The goal of this function is to check data object passed as a parameter
3572 and decide if it can be dragged or no.
3574 \param what data object being tested for drag operation
3575 \return \c true if module allows dragging of the specified object
3576 \sa isDropAccepted(), dropObjects()
3578 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3580 // we allow dragging object under root and object from folder
3581 int aLevel = what->level();
3582 bool anObjectInFolder = false;
3584 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3586 _PTR(SObject) aSO = dataObj->object();
3588 _PTR(GenericAttribute) anAttr;
3589 _PTR(SObject) aFatherSO = SalomeApp_Application::getStudy()->GetUseCaseBuilder()->GetFather( aSO );
3590 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3591 _PTR(AttributeLocalID) aLocalID( anAttr );
3592 anObjectInFolder = aLocalID->Value() == 999;
3597 return aLevel == 2 || anObjectInFolder;
3601 \brief Check if the module allows "drop" operation on the given object.
3603 Overloaded from LightApp_Module class.
3605 This function is a part of the general drag-n-drop mechanism.
3606 The goal of this function is to check data object passed as a parameter
3607 and decide if it can be used as a target for the "drop" operation.
3608 The processing of the drop operation itself is done in the dropObjects() function.
3610 \param where target data object
3611 \return \c true if module supports dropping on the \a where data object
3612 \sa isDraggable(), dropObjects()
3614 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3616 // we allow dropping into folder and top-level GEOM object
3617 int aLevel = where->level();
3618 bool isFolder = false;
3620 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3622 _PTR(SObject) aSO = dataObj->object();
3624 _PTR(GenericAttribute) anAttr;
3625 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3626 _PTR(AttributeLocalID) aLocalID( anAttr );
3627 isFolder = aLocalID->Value() == 999;
3632 return aLevel == 1 || isFolder;
3636 \brief Complete drag-n-drop operation.
3638 Overloaded from LightApp_Module class.
3640 This function is a part of the general drag-n-drop mechanism.
3641 Its goal is to handle dropping of the objects being dragged according
3642 to the chosen operation (move). The dropping is performed in the
3643 context of the parent data object \a where and the \a row (position in the
3644 children index) at which the data should be dropped. If \a row is equal to -1,
3645 this means that objects are added to the end of the children list.
3647 \param what objects being dropped
3648 \param where target data object
3649 \param row child index at which the drop operation is performed
3650 \param action drag-n-drop operation (Qt::DropAction) - move
3652 \sa isDraggable(), isDropAccepted()
3654 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3655 const int row, Qt::DropAction action )
3657 if (action != Qt::CopyAction && action != Qt::MoveAction)
3658 return; // unsupported action
3660 // get parent object
3661 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3662 if ( !dataObj ) return; // wrong parent
3663 _PTR(SObject) parentObj = dataObj->object();
3665 // Find the current Study and StudyBuilder
3666 _PTR(Study) aStudy = SalomeApp_Application::getStudy();
3667 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3668 // collect all parents of the target node
3669 QStringList parentIDs;
3670 _PTR(SObject) parent = parentObj;
3671 while( !parent->IsNull() ) {
3672 parentIDs << parent->GetID().c_str();
3673 parent = aUseCaseBuilder->GetFather(parent);
3676 // collect objects being dropped
3677 GEOM::object_list_var objects = new GEOM::object_list();
3678 objects->length( what.count() );
3680 for ( int i = 0; i < what.count(); i++ ) {
3681 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3682 if ( !dataObj ) continue; // skip wrong objects
3683 _PTR(SObject) sobj = dataObj->object();
3684 // check that dropped object is not a parent of target object
3685 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3686 return; // it's not allowed to move node into it's child
3688 objects[i] = _CAST(SObject, sobj)->GetSObject();
3691 objects->length( count );
3693 // call engine function
3694 GetGeomGen()->Move( objects.in(), // what
3695 _CAST(SObject, parentObj)->GetSObject(), // where
3698 // update Object browser
3699 getApp()->updateObjectBrowser( false );
3702 void GeometryGUI::emitDimensionsUpdated( QString entry )
3704 emit DimensionsUpdated( entry );
3707 void GeometryGUI::emitAnnotationsUpdated( QString entry )
3709 emit SignalAnnotationsUpdated( entry );