1 // Copyright (C) 2007-2019 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 <Basics_OCCTVersion.hxx>
52 #include <SUIT_Desktop.h>
53 #include <SUIT_MessageBox.h>
54 #include <SUIT_ResourceMgr.h>
55 #include <SUIT_Session.h>
56 #include <SUIT_ViewManager.h>
58 #include <OCCViewer_ViewWindow.h>
59 #include <OCCViewer_ViewPort3d.h>
60 #include <OCCViewer_ViewModel.h>
61 #include <OCCViewer_ViewManager.h>
63 #include <SOCC_ViewModel.h>
64 #include <SOCC_ViewWindow.h>
66 #include <SVTK_ViewWindow.h>
67 #include <SVTK_RenderWindowInteractor.h>
68 #include <SVTK_InteractorStyle.h>
69 #include <SVTK_ViewModel.h>
71 #ifndef DISABLE_GRAPHICSVIEW
72 #include <GraphicsView_Viewer.h>
75 #include <SalomeApp_Application.h>
76 #include <SalomeApp_DataObject.h>
77 #include <SalomeApp_Study.h>
78 #include <SalomeApp_Tools.h>
80 #include <LightApp_SelectionMgr.h>
81 #include <LightApp_VTKSelector.h>
82 #include <LightApp_DataObject.h>
83 #include <LightApp_Preferences.h>
85 #include <SALOME_LifeCycleCORBA.hxx>
86 #include <SALOME_ListIO.hxx>
88 #include <SALOMEDSClient_ClientFactory.hxx>
89 #include <SALOMEDSClient_IParameters.hxx>
91 #include <SALOMEDS_SObject.hxx>
93 #include <QtxFontEdit.h>
104 #include <QSignalMapper>
105 #include <QFontDatabase>
107 #include <AIS_ListOfInteractive.hxx>
108 #include <AIS_ListIteratorOfListOfInteractive.hxx>
109 #include <Prs3d_Drawer.hxx>
110 #include <Prs3d_IsoAspect.hxx>
111 #include <Aspect_TypeOfMarker.hxx>
112 #include <OSD_SharedLibrary.hxx>
113 #include <NCollection_DataMap.hxx>
115 #include <TColStd_HArray1OfByte.hxx>
116 #include <TColStd_SequenceOfHAsciiString.hxx>
118 #include <utilities.h>
120 #include <vtkCamera.h>
121 #include <vtkRenderer.h>
123 #include <Standard_Failure.hxx>
124 #include <Standard_ErrorHandler.hxx>
126 #include <Font_SystemFont.hxx>
127 #include <Font_FontMgr.hxx>
128 #include <TCollection_HAsciiString.hxx>
130 #include "GEOM_version.h"
131 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
134 Standard_EXPORT CAM_Module* createModule() {
135 return new GeometryGUI();
138 Standard_EXPORT char* getModuleVersion() {
139 return (char*)GEOM_VERSION_STR;
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 = Qtx::getenv( "PATH" );
262 #elif defined(__APPLE__)
263 QString dirs = Qtx::getenv( "DYLD_LIBRARY_PATH" );
265 QString dirs = Qtx::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 = Qtx::getenv( "PATH" );
313 #elif defined(__APPLE__)
314 QString dirs = Qtx::getenv( "DYLD_LIBRARY_PATH" );
316 QString dirs = Qtx::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::OpMaterialMenu: // POPUP MENU - MATERIAL PROPERTIES (sub-menu)
541 case GEOMOp::OpPredefMaterial: // POPUP MENU - MATERIAL PROPERTIES (sub-menu) - <SOME MATERIAL>
542 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES (sub-menu) - CUSTOM...
543 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
544 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
545 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
546 case GEOMOp::OpClsBringToFront: //
547 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
548 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
549 #ifndef DISABLE_GRAPHICSVIEW
550 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
552 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
553 libName = "GEOMToolsGUI";
555 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
556 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
557 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
558 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
559 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
560 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
561 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
562 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
563 case GEOMOp::OpHide: // MENU VIEW - ERASE
564 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
565 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
566 case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE
567 case GEOMOp::OpSwitchName: // MENU VIEW - VERTICES MODE
568 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
569 case GEOMOp::OpShading: // POPUP MENU - SHADING
570 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
571 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
572 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
573 case GEOMOp::OpVertices: // POPUP MENU - VERTICES
574 case GEOMOp::OpShowName: // POPUP MENU - SHOW NAME
575 libName = "DisplayGUI";
577 case GEOMOp::OpPoint: // MENU BASIC - POINT
578 case GEOMOp::OpLine: // MENU BASIC - LINE
579 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
580 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
581 case GEOMOp::OpArc: // MENU BASIC - ARC
582 case GEOMOp::OpVector: // MENU BASIC - VECTOR
583 case GEOMOp::OpPlane: // MENU BASIC - PLANE
584 case GEOMOp::OpCurve: // MENU BASIC - CURVE
585 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
586 libName = "BasicGUI";
588 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
589 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
590 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
591 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
592 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
593 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
594 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
595 libName = "PrimitiveGUI";
597 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
598 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
599 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
600 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
601 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
602 case GEOMOp::OpThickness: // MENU GENERATION - THICKNESS
603 libName = "GenerationGUI";
605 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
606 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
607 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
608 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
609 case GEOMOp::OpSurfaceFromFace: // MENU ENTITY - SURFACE FROM FACE
611 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
613 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
614 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
615 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
616 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
617 case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR
618 libName = "EntityGUI";
620 case GEOMOp::OpEdge: // MENU BUILD - EDGE
621 case GEOMOp::OpWire: // MENU BUILD - WIRE
622 case GEOMOp::OpFace: // MENU BUILD - FACE
623 case GEOMOp::OpShell: // MENU BUILD - SHELL
624 case GEOMOp::OpSolid: // MENU BUILD - SOLID
625 case GEOMOp::OpCompound: // MENU BUILD - COMPOUND
626 libName = "BuildGUI";
628 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
629 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
630 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
631 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
632 libName = "BooleanGUI";
634 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
635 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
636 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
637 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
638 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
639 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
640 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
641 case GEOMOp::OpProjOnCyl: // MENU TRANSFORMATION - PROJECTION ON CYLINDER
642 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
643 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
644 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
645 case GEOMOp::OpExtension: // MENU TRANSFORMATION - EXTENSION
646 libName = "TransformationGUI";
648 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
649 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
650 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
651 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
652 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
653 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
654 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
655 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
656 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
657 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
658 case GEOMOp::OpTransferData: // MENU OPERATION - TRANSFER DATA
659 case GEOMOp::OpExtraction: // MENU OPERATION - EXTRACT AND REBUILD
660 libName = "OperationGUI";
662 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
663 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
664 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
665 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
666 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
667 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
668 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
669 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
670 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
671 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
672 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
673 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
674 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
675 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
676 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
677 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
678 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
679 case GEOMOp::OpInspectObj: // MENU REPAIR - INSPECT OBJECT
680 libName = "RepairGUI";
682 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
683 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
684 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
685 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
686 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
687 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
688 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
689 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
690 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
691 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
692 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
693 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
694 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
695 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
696 case GEOMOp::OpFastCheckInters: // MENU MEASURE - FAST CHECK INTERSECTIONS
697 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
698 case GEOMOp::OpAnnotation: // MENU MEASURE - ANNOTATION
699 case GEOMOp::OpEditAnnotation: // POPUP MENU - EDIT ANNOTATION
700 case GEOMOp::OpDeleteAnnotation: // POPUP MENU - DELETE ANNOTATION
701 #ifndef DISABLE_PLOT2DVIEWER
702 case GEOMOp::OpShapeStatistics: // MENU MEASURE - SHAPE STATISTICS
704 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
705 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
706 case GEOMOp::OpShowAllAnnotations: // POPUP MENU - SHOW ALL ANNOTATIONS
707 case GEOMOp::OpHideAllAnnotations: // POPUP MENU - HIDE ALL ANNOTATIONS
708 libName = "MeasureGUI";
710 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
711 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
712 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
713 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
714 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
715 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
716 libName = "GroupGUI";
718 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
719 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
720 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
721 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
722 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
723 libName = "BlocksGUI";
725 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
726 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
727 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
728 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
729 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
730 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
731 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
732 //libName = "AdvancedGUI";
735 if (myPluginActions.contains(id)) {
736 libName = myPluginActions[id].first;
738 GEOMPluginGUI* library = 0;
739 if ( !libName.isEmpty() ) {
741 libName = libName + ".dll";
742 #elif defined(__APPLE__)
743 libName = QString( "lib" ) + libName + ".dylib";
745 libName = QString( "lib" ) + libName + ".so";
747 library = getPluginLibrary( libName );
750 // call method of corresponding GUI library
752 //QString action ("%1");
753 //action = action.arg(id);
755 //if( !theParam.isValid() )
756 library->OnGUIEvent( myPluginActions[id].second, desk );
758 // library->OnGUIEvent( id, desk, theParam);
761 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
763 updateCreationInfo();
769 GEOMGUI* library = 0;
770 if ( !libName.isEmpty() ) {
772 libName = libName + ".dll";
773 #elif defined(__APPLE__)
774 libName = QString( "lib" ) + libName + ".dylib";
776 libName = QString( "lib" ) + libName + ".so";
778 library = getLibrary( libName );
781 // call method of corresponding GUI library
783 if( !theParam.isValid() )
784 library->OnGUIEvent( id, desk );
786 library->OnGUIEvent( id, desk, theParam);
789 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
791 updateCreationInfo();
794 //=================================================================================
795 // function : GeometryGUI::activateOperation()
797 //=================================================================================
798 bool GeometryGUI::activateOperation( int actionId )
800 OnGUIEvent(actionId);
804 //=================================================================================
805 // function : GeometryGUI::activateOperation()
807 //=================================================================================
808 bool GeometryGUI::activateOperation( const QString& actionId )
812 int id = actionId.toInt(&isOk);
819 //=================================================================================
820 // function : GeometryGUI::activateOperation()
822 //=================================================================================
823 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
827 QString pluginLib = plugin;
828 // TODO: if <plugin> is a plugin name, find plugin library name
829 if (myPluginLibs.contains(plugin))
830 pluginLib = myPluginLibs[plugin];
832 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
833 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
834 const PluginAction& anAction = actionsIter.value();
835 if (anAction.first == pluginLib && anAction.second == actionId) {
836 // activate operation
837 OnGUIEvent(actionsIter.key());
845 //=================================================================================
846 // function : GeometryGUI::OnKeyPress()
847 // purpose : Called when any key is pressed by user [static]
848 //=================================================================================
849 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
851 if ( !application() )
853 foreach ( GEOMGUI* lib, myGUIMap )
854 lib->OnKeyPress( e, application()->desktop(), w );
857 //=================================================================================
858 // function : GeometryGUI::OnMouseMove()
859 // purpose : Manages mouse move events [static]
860 //=================================================================================
861 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
863 if ( !application() )
865 foreach ( GEOMGUI* lib, myGUIMap )
866 lib->OnMouseMove( e, application()->desktop(), w );
869 //=================================================================================
870 // function : GeometryGUI::OnMouseRelease()
871 // purpose : Manages mouse release events [static]
872 //=================================================================================
873 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
875 if ( !application() )
877 foreach ( GEOMGUI* lib, myGUIMap )
878 lib->OnMouseRelease( e, application()->desktop(), w );
881 //=================================================================================
882 // function : GeometryGUI::OnMousePress()
883 // purpose : Manage mouse press events [static]
884 //=================================================================================
885 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
887 if ( !application() )
889 foreach ( GEOMGUI* lib, myGUIMap )
890 lib->OnMousePress( e, application()->desktop(), w );
893 //=======================================================================
894 // function : createGeomAction
896 //=======================================================================
897 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
898 const int accel, const bool toggle, const QString& shortcutAction )
900 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
901 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
902 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
904 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
906 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
907 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
909 application()->desktop(),
911 this, SLOT( OnGUIEvent() ),
915 //=======================================================================
916 // function : createOriginAndBaseVectors
918 //=======================================================================
919 void GeometryGUI::createOriginAndBaseVectors()
921 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
922 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
924 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
928 if ( !CORBA::is_nil( GetGeomGen() ) ) {
929 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations();
930 if ( !aBasicOperations->_is_nil() ) {
931 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
932 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
933 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
934 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
935 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
936 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
938 GetGeomGen()->PublishInStudy( SALOMEDS::SObject::_nil(), anOrigin, "O" );
939 GetGeomGen()->PublishInStudy( SALOMEDS::SObject::_nil(), anOX, "OX" );
940 GetGeomGen()->PublishInStudy( SALOMEDS::SObject::_nil(), anOY, "OY" );
941 GetGeomGen()->PublishInStudy( SALOMEDS::SObject::_nil(), anOZ, "OZ" );
942 anOrigin->UnRegister();
946 aBasicOperations->UnRegister();
948 getApp()->updateObjectBrowser( true );
954 //=======================================================================
955 // function : GeometryGUI::initialize()
956 // purpose : Called when GEOM module is created
957 //=======================================================================
958 void GeometryGUI::initialize( CAM_Application* app )
960 SalomeApp_Module::initialize( app );
962 // ----- create actions --------------
964 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
966 createGeomAction( GEOMOp::OpPoint, "POINT" );
967 createGeomAction( GEOMOp::OpLine, "LINE" );
968 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
969 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
970 createGeomAction( GEOMOp::OpArc, "ARC" );
971 createGeomAction( GEOMOp::OpCurve, "CURVE" );
972 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
973 createGeomAction( GEOMOp::OpVector, "VECTOR" );
974 createGeomAction( GEOMOp::OpPlane, "PLANE" );
975 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
976 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
977 createGeomAction( GEOMOp::OpSurfaceFromFace, "SURFACE_FROM_FACE" );
979 createGeomAction( GEOMOp::OpBox, "BOX" );
980 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
981 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
982 createGeomAction( GEOMOp::OpTorus, "TORUS" );
983 createGeomAction( GEOMOp::OpCone, "CONE" );
984 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
985 createGeomAction( GEOMOp::OpDisk, "DISK" );
987 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
988 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
989 createGeomAction( GEOMOp::OpFilling, "FILLING" );
990 createGeomAction( GEOMOp::OpPipe, "PIPE" );
991 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
992 createGeomAction( GEOMOp::OpThickness, "THICKNESS" );
994 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
995 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
996 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
997 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
998 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
1000 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
1001 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
1003 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
1005 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
1006 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
1008 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
1009 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
1010 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
1012 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
1014 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
1015 createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" );
1017 createGeomAction( GEOMOp::OpEdge, "EDGE" );
1018 createGeomAction( GEOMOp::OpWire, "WIRE" );
1019 createGeomAction( GEOMOp::OpFace, "FACE" );
1020 createGeomAction( GEOMOp::OpShell, "SHELL" );
1021 createGeomAction( GEOMOp::OpSolid, "SOLID" );
1022 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
1024 createGeomAction( GEOMOp::OpFuse, "FUSE" );
1025 createGeomAction( GEOMOp::OpCommon, "COMMON" );
1026 createGeomAction( GEOMOp::OpCut, "CUT" );
1027 createGeomAction( GEOMOp::OpSection, "SECTION" );
1029 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
1030 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
1031 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
1032 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
1033 createGeomAction( GEOMOp::OpScale, "SCALE" );
1034 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
1035 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
1036 createGeomAction( GEOMOp::OpProjOnCyl, "PROJ_ON_CYL" );
1037 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
1038 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
1039 createGeomAction( GEOMOp::OpExtension, "EXTENSION" );
1041 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
1042 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
1043 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
1044 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
1045 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
1046 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
1047 createGeomAction( GEOMOp::OpTransferData, "TRANSFER_DATA" );
1048 createGeomAction( GEOMOp::OpExtraction, "EXTRACTION" );
1049 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
1050 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
1051 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
1052 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
1054 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
1055 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
1056 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
1058 createGeomAction( GEOMOp::OpSewing, "SEWING" );
1059 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
1060 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
1061 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
1062 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
1063 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
1064 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
1065 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
1066 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
1067 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
1068 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
1069 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
1070 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1071 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1072 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1073 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1074 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1075 createGeomAction( GEOMOp::OpInspectObj, "INSPECT_OBJECT" );
1077 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1078 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1079 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1080 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1081 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1082 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1083 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1084 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1085 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1086 createGeomAction( GEOMOp::OpAnnotation, "ANNOTATION" );
1087 createGeomAction( GEOMOp::OpEditAnnotation, "EDIT_ANNOTATION" );
1088 createGeomAction( GEOMOp::OpDeleteAnnotation, "DELETE_ANNOTATION" );
1090 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1091 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1092 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1093 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1094 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1095 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1096 createGeomAction( GEOMOp::OpFastCheckInters, "FAST_CHECK_INTERSECTIONS" );
1097 #ifndef DISABLE_PLOT2DVIEWER
1098 createGeomAction( GEOMOp::OpShapeStatistics, "SHAPE_STATISTICS" );
1101 #ifndef DISABLE_PYCONSOLE
1102 #ifdef _DEBUG_ // PAL16821
1103 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1107 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1108 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1109 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1110 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1111 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1112 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1113 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1114 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1115 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1116 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1117 createGeomAction( GEOMOp::OpSwitchName, "NAME_MODE");
1118 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1119 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1120 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1121 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1122 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1123 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1124 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1125 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1126 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1127 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1128 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1129 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1130 createGeomAction( GEOMOp::OpHide, "ERASE" );
1132 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1133 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1134 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1135 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1136 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1137 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1138 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1139 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1140 createGeomAction( GEOMOp::OpShowName, "POP_SHOW_NAME", "", 0, true );
1141 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1142 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1143 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1144 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1145 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1146 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1147 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1148 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1149 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1150 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1151 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1152 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1153 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1154 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1155 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1156 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1157 createGeomAction( GEOMOp::OpMaterialMenu, "POP_MATERIAL_PROPERTIES");
1158 action(GEOMOp::OpMaterialMenu)->setMenu( new QMenu() );
1159 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1160 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1161 #ifndef DISABLE_GRAPHICSVIEW
1162 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1164 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1165 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1166 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1167 createGeomAction( GEOMOp::OpShowAllAnnotations, "POP_SHOW_ALL_ANNOTATIONS" );
1168 createGeomAction( GEOMOp::OpHideAllAnnotations, "POP_HIDE_ALL_ANNOTATIONS" );
1170 // Create actions for increase/decrease transparency shortcuts
1171 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1172 "Geometry:Increase transparency");
1173 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1174 "Geometry:Decrease transparency");
1176 // Create actions for increase/decrease number of isolines
1177 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1178 "Geometry:Increase number of isolines");
1179 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1180 "Geometry:Decrease number of isolines");
1182 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1183 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1184 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1185 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1186 //@@ 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 @@//
1188 // ---- create menus --------------------------
1190 /*int fileId =*/ createMenu( tr( "MEN_FILE" ), -1, -1 );
1192 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1193 createMenu( GEOMOp::OpDelete, editId, -1 );
1195 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1197 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1198 createMenu( GEOMOp::OpPoint, basicId, -1 );
1199 createMenu( GEOMOp::OpLine, basicId, -1 );
1200 createMenu( GEOMOp::OpCircle, basicId, -1 );
1201 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1202 createMenu( GEOMOp::OpArc, basicId, -1 );
1203 createMenu( GEOMOp::OpCurve, basicId, -1 );
1204 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1205 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1206 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1207 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1208 createMenu( GEOMOp::OpSurfaceFromFace, basicId, -1 );
1209 createMenu( separator(), basicId, -1 );
1210 createMenu( GEOMOp::OpVector, basicId, -1 );
1211 createMenu( GEOMOp::OpPlane, basicId, -1 );
1212 createMenu( GEOMOp::OpLCS, basicId, -1 );
1213 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1215 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1216 createMenu( GEOMOp::OpBox, primId, -1 );
1217 createMenu( GEOMOp::OpCylinder, primId, -1 );
1218 createMenu( GEOMOp::OpSphere, primId, -1 );
1219 createMenu( GEOMOp::OpTorus, primId, -1 );
1220 createMenu( GEOMOp::OpCone, primId, -1 );
1221 createMenu( GEOMOp::OpRectangle, primId, -1 );
1222 createMenu( GEOMOp::OpDisk, primId, -1 );
1223 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1225 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1226 createMenu( GEOMOp::OpPrism, genId, -1 );
1227 createMenu( GEOMOp::OpRevolution, genId, -1 );
1228 createMenu( GEOMOp::OpFilling, genId, -1 );
1229 createMenu( GEOMOp::OpPipe, genId, -1 );
1230 createMenu( GEOMOp::OpPipePath, genId, -1 );
1231 createMenu( GEOMOp::OpThickness, genId, -1 );
1233 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1234 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1235 //@@ 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 @@//
1237 createMenu( separator(), newEntId, -1 );
1239 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1240 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1241 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1242 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1243 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1244 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1246 createMenu( separator(), newEntId, -1 );
1248 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1249 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1250 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1252 createMenu( separator(), newEntId, -1 );
1254 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1255 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1256 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1257 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1258 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1260 createMenu( separator(), newEntId, -1 );
1262 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1264 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1265 createMenu( GEOMOp::OpEdge, buildId, -1 );
1266 createMenu( GEOMOp::OpWire, buildId, -1 );
1267 createMenu( GEOMOp::OpFace, buildId, -1 );
1268 createMenu( GEOMOp::OpShell, buildId, -1 );
1269 createMenu( GEOMOp::OpSolid, buildId, -1 );
1270 createMenu( GEOMOp::OpCompound, buildId, -1 );
1272 createMenu( separator(), newEntId, -1 );
1274 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1276 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1279 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1281 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1282 createMenu( GEOMOp::OpFuse, boolId, -1 );
1283 createMenu( GEOMOp::OpCommon, boolId, -1 );
1284 createMenu( GEOMOp::OpCut, boolId, -1 );
1285 createMenu( GEOMOp::OpSection, boolId, -1 );
1287 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1288 createMenu( GEOMOp::OpTranslate, transId, -1 );
1289 createMenu( GEOMOp::OpRotate, transId, -1 );
1290 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1291 createMenu( GEOMOp::OpMirror, transId, -1 );
1292 createMenu( GEOMOp::OpScale, transId, -1 );
1293 createMenu( GEOMOp::OpOffset, transId, -1 );
1294 createMenu( GEOMOp::OpProjection, transId, -1 );
1295 createMenu( GEOMOp::OpExtension, transId, -1 );
1296 createMenu( GEOMOp::OpProjOnCyl, transId, -1 );
1297 createMenu( separator(), transId, -1 );
1298 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1299 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1301 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1302 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1303 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1304 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1306 createMenu( separator(), operId, -1 );
1308 createMenu( GEOMOp::OpPartition, operId, -1 );
1309 createMenu( GEOMOp::OpArchimede, operId, -1 );
1310 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1311 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1312 createMenu( GEOMOp::OpTransferData, operId, -1 );
1313 createMenu( GEOMOp::OpExtraction, operId, -1 );
1315 createMenu( separator(), operId, -1 );
1317 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1318 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1319 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1320 createMenu( GEOMOp::OpChamfer, operId, -1 );
1321 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1322 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1324 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1325 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1326 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1327 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1328 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1329 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1330 createMenu( GEOMOp::OpSewing, repairId, -1 );
1331 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1332 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1333 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1334 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1335 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1336 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1337 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1338 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1339 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1340 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1341 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1343 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1344 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1345 createMenu( GEOMOp::OpProperties, measurId, -1 );
1346 createMenu( separator(), measurId, -1 );
1347 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1348 createMenu( GEOMOp::OpInertia, measurId, -1 );
1349 createMenu( GEOMOp::OpNormale, measurId, -1 );
1350 createMenu( separator(), measurId, -1 );
1351 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1352 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1353 createMenu( separator(), measurId, -1 );
1355 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1356 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1357 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1358 createMenu( GEOMOp::OpAngle, dimId, -1 );
1359 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1361 createMenu( GEOMOp::OpAnnotation, measurId, -1 );
1363 createMenu( separator(), measurId, -1 );
1364 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1365 createMenu( separator(), measurId, -1 );
1366 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1367 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1368 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1369 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1370 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1371 createMenu( GEOMOp::OpFastCheckInters, measurId, -1 );
1372 createMenu( GEOMOp::OpInspectObj, measurId, -1 );
1373 #ifndef DISABLE_PLOT2DVIEWER
1374 createMenu( GEOMOp::OpShapeStatistics, measurId, -1 );
1377 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1378 #ifndef DISABLE_PYCONSOLE
1379 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1380 createMenu( separator(), toolsId, -1 );
1381 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1385 createMenu( separator(), toolsId, -1 );
1386 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1387 createMenu( separator(), toolsId, -1 );
1389 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1390 createMenu( separator(), viewId, -1 );
1392 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1393 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1394 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1395 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1396 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1397 createMenu( separator(), dispmodeId, -1 );
1398 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1399 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1400 createMenu( GEOMOp::OpSwitchName, dispmodeId, -1 );
1402 createMenu( separator(), viewId, -1 );
1403 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1404 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1405 createMenu( separator(), viewId, -1 );
1406 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1407 createMenu( separator(), viewId, -1 );
1411 because of these items are accessible through object browser and viewers
1412 we have removed they from main menu
1414 createMenu( GEOMOp::OpShow, viewId, -1 );
1415 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1416 createMenu( GEOMOp::OpHide, viewId, -1 );
1419 // ---- create toolbars --------------------------
1421 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1422 createTool( GEOMOp::OpPoint, basicTbId );
1423 createTool( GEOMOp::OpLine, basicTbId );
1424 createTool( GEOMOp::OpCircle, basicTbId );
1425 createTool( GEOMOp::OpEllipse, basicTbId );
1426 createTool( GEOMOp::OpArc, basicTbId );
1427 createTool( GEOMOp::OpCurve, basicTbId );
1428 createTool( GEOMOp::OpVector, basicTbId );
1429 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1430 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1431 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1432 createTool( GEOMOp::OpIsoline, basicTbId );
1433 createTool( GEOMOp::OpSurfaceFromFace, basicTbId );
1434 createTool( GEOMOp::OpPlane, basicTbId );
1435 createTool( GEOMOp::OpLCS, basicTbId );
1436 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1438 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1439 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1440 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1442 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1443 createTool( GEOMOp::OpBox, primTbId );
1444 createTool( GEOMOp::OpCylinder, primTbId );
1445 createTool( GEOMOp::OpSphere, primTbId );
1446 createTool( GEOMOp::OpTorus, primTbId );
1447 createTool( GEOMOp::OpCone, primTbId );
1448 createTool( GEOMOp::OpRectangle, primTbId );
1449 createTool( GEOMOp::OpDisk, primTbId );
1450 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1452 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1453 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1454 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1456 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1457 createTool( GEOMOp::OpFuse, boolTbId );
1458 createTool( GEOMOp::OpCommon, boolTbId );
1459 createTool( GEOMOp::OpCut, boolTbId );
1460 createTool( GEOMOp::OpSection, boolTbId );
1462 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1463 createTool( GEOMOp::OpPrism, genTbId );
1464 createTool( GEOMOp::OpRevolution, genTbId );
1465 createTool( GEOMOp::OpFilling, genTbId );
1466 createTool( GEOMOp::OpPipe, genTbId );
1467 createTool( GEOMOp::OpPipePath, genTbId );
1468 createTool( GEOMOp::OpThickness, genTbId );
1470 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1471 createTool( GEOMOp::OpTranslate, transTbId );
1472 createTool( GEOMOp::OpRotate, transTbId );
1473 createTool( GEOMOp::OpChangeLoc, transTbId );
1474 createTool( GEOMOp::OpMirror, transTbId );
1475 createTool( GEOMOp::OpScale, transTbId );
1476 createTool( GEOMOp::OpOffset, transTbId );
1477 createTool( GEOMOp::OpProjection, transTbId );
1478 createTool( GEOMOp::OpExtension, transTbId );
1479 createTool( GEOMOp::OpProjOnCyl, transTbId );
1480 createTool( separator(), transTbId );
1481 createTool( GEOMOp::OpMultiTranslate, transTbId );
1482 createTool( GEOMOp::OpMultiRotate, transTbId );
1484 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1485 createTool( GEOMOp::OpExplode, operTbId );
1486 createTool( GEOMOp::OpPartition, operTbId );
1487 createTool( GEOMOp::OpArchimede, operTbId );
1488 createTool( GEOMOp::OpShapesOnShape, operTbId );
1489 createTool( GEOMOp::OpSharedShapes, operTbId );
1490 createTool( GEOMOp::OpTransferData, operTbId );
1491 createTool( GEOMOp::OpExtraction, operTbId );
1493 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1494 createTool( GEOMOp::OpFillet1d, featTbId );
1495 createTool( GEOMOp::OpFillet2d, featTbId );
1496 createTool( GEOMOp::OpFillet3d, featTbId );
1497 createTool( GEOMOp::OpChamfer, featTbId );
1498 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1499 createTool( GEOMOp::OpExtrudedCut, featTbId );
1501 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1502 createTool( GEOMOp::OpEdge, buildTbId );
1503 createTool( GEOMOp::OpWire, buildTbId );
1504 createTool( GEOMOp::OpFace, buildTbId );
1505 createTool( GEOMOp::OpShell, buildTbId );
1506 createTool( GEOMOp::OpSolid, buildTbId );
1507 createTool( GEOMOp::OpCompound, buildTbId );
1509 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1510 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1511 createTool( GEOMOp::OpProperties, measureTbId );
1512 createTool( GEOMOp::OpCenterMass, measureTbId );
1513 createTool( GEOMOp::OpInertia, measureTbId );
1514 createTool( GEOMOp::OpNormale, measureTbId );
1515 createTool( separator(), measureTbId );
1516 createTool( GEOMOp::OpBoundingBox, measureTbId );
1517 createTool( GEOMOp::OpMinDistance, measureTbId );
1518 createTool( GEOMOp::OpAngle, measureTbId );
1519 createTool( GEOMOp::OpAnnotation, measureTbId );
1520 createTool( GEOMOp::OpTolerance , measureTbId );
1521 createTool( separator(), measureTbId );
1522 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1523 createTool( GEOMOp::OpFreeFaces, measureTbId );
1524 createTool( separator(), measureTbId );
1525 createTool( GEOMOp::OpWhatIs, measureTbId );
1526 createTool( GEOMOp::OpCheckShape, measureTbId );
1527 createTool( GEOMOp::OpCheckCompound, measureTbId );
1528 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1529 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1530 createTool( GEOMOp::OpFastCheckInters, measureTbId );
1532 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1533 createTool( GEOMOp::OpPictureImport, picturesTbId );
1535 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1538 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1539 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1540 //@@ 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 @@//
1542 // ---- create popup menus --------------------------
1544 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1545 QString clientOCC = "(client='OCCViewer')";
1546 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1547 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1549 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1550 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1551 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1552 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1554 QString autoColorPrefix =
1555 "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') and type='Shape' and selcount=1";
1557 QtxPopupMgr* mgr = popupMgr();
1559 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1560 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1561 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1562 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1563 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1564 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1565 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1566 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1568 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1569 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1570 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1571 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1572 mgr->insert( separator(), -1, -1 ); // -----------
1574 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1575 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1576 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1577 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1578 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1579 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1580 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1581 mgr->insert( separator(), -1, -1 ); // -----------
1582 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1583 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1584 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1585 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1586 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1587 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1588 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1589 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1590 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1591 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1592 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1593 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1594 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1595 mgr->insert( separator(), dispmodeId, -1 );
1596 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1597 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1598 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1599 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1600 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1601 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1602 mgr->insert( action( GEOMOp::OpShowName ), dispmodeId, -1 ); // show name
1603 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1604 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK + " and isNameMode", QtxPopupMgr::ToggleRule );
1605 mgr->insert( separator(), -1, -1 ); // -----------
1607 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1608 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1609 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1610 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1611 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1612 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1613 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1614 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1615 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1616 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1618 // material properties
1619 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1620 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'}) and matMenu=false", QtxPopupMgr::VisibleRule );
1621 mgr->insert( action( GEOMOp::OpMaterialMenu ), -1, -1 );
1622 mgr->setRule( action( GEOMOp::OpMaterialMenu ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'}) and matMenu=true", QtxPopupMgr::VisibleRule );
1625 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1626 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1628 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1629 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1630 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1632 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1633 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1635 mgr->insert( separator(), -1, -1 ); // -----------
1636 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1637 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1638 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1639 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1640 mgr->insert( separator(), -1, -1 ); // -----------
1642 mgr->insert( action( GEOMOp::OpEditAnnotation ), -1, -1 ); // edit annotation
1643 mgr->setRule( action( GEOMOp::OpEditAnnotation ), clientOCC + " and annotationsCount=1", QtxPopupMgr::VisibleRule );
1644 mgr->insert( action( GEOMOp::OpDeleteAnnotation ), -1, -1 ); // delete annotation
1645 mgr->setRule( action( GEOMOp::OpDeleteAnnotation ), clientOCC + " and annotationsCount>0", QtxPopupMgr::VisibleRule );
1646 mgr->insert( separator(), -1, -1 ); // -----------
1648 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1649 onlyComponent = "((type='Component') and selcount=1)",
1650 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1651 types = "'Shape' 'Group' 'FieldStep'";
1653 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1654 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1656 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1657 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1659 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1660 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1662 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1664 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1665 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1666 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1667 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1668 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1669 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1670 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1671 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1672 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1673 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1674 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1675 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1676 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1677 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1678 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1679 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1680 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1681 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1682 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1683 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1684 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1685 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1686 mgr->insert( separator(), selectonlyId, -1);
1687 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1688 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1689 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1690 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1691 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1692 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1693 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1695 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1697 mgr->insert( separator(), -1, -1 ); // -----------
1698 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1699 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1700 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1701 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1702 mgr->insert( action( GEOMOp::OpShowAllAnnotations ), -1, -1 ); // show all annotations
1703 mgr->setRule( action( GEOMOp::OpShowAllAnnotations ), aDimensionRule.arg( "hasHiddenAnnotations" ), QtxPopupMgr::VisibleRule );
1704 mgr->insert( action( GEOMOp::OpHideAllAnnotations ), -1, -1 ); // hide all annotations
1705 mgr->setRule( action( GEOMOp::OpHideAllAnnotations ), aDimensionRule.arg( "hasVisibleAnnotations" ), QtxPopupMgr::VisibleRule );
1707 mgr->insert( separator(), -1, -1 ); // -----------
1708 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1709 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1711 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1712 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1714 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1715 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1717 mgr->insert( separator(), -1, -1 ); // -----------
1718 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1719 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1721 mgr->insert( separator(), -1, -1 ); // -----------
1722 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1723 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1725 #ifndef DISABLE_GRAPHICSVIEW
1726 mgr->insert( separator(), -1, -1 ); // -----------
1727 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1728 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1731 mgr->insert( separator(), -1, -1 ); // -----------
1732 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1733 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1735 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1737 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1739 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1740 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1741 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1744 // create plugin actions and menus
1748 //=======================================================================
1749 // function : GeometryGUI::addPluginActions()
1751 //=======================================================================
1752 void GeometryGUI::addPluginActions()
1755 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1756 if (!resMgr) return;
1758 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1759 if (!appStudy) return;
1761 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1763 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1765 int id = GEOMOp::OpLastOperationID; // TODO?
1768 GEOMUtils::PluginInfo::const_iterator it;
1769 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1770 // bind action lib and label to its ID for activateOperation() method proper work
1771 GEOMUtils::PluginData pdata = (*it);
1772 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1773 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1774 std::list<GEOMUtils::ActionData>::const_iterator ait;
1775 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1776 GEOMUtils::ActionData adata = (*ait);
1779 if ( !adata.icon.empty() )
1780 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1782 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1783 QString actionName = smenus.last();
1784 actionName = actionName.toUpper().prepend( "MEN_" );
1785 smenus.removeLast();
1787 // path to action in toolbar
1788 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1789 QString actionTool = stools.last();
1790 actionTool = actionTool.toUpper().prepend( "TOP_" );
1791 stools.removeLast();
1793 QString actionStat = adata.statusText.c_str();
1794 actionStat = actionStat.toUpper().prepend( "STB_" );
1796 createAction( id, // ~ adata.label
1797 tr( actionTool.toLatin1().constData() ),
1799 tr( actionName.toLatin1().constData() ),
1800 tr( actionStat.toLatin1().constData() ),
1801 QKeySequence( tr( adata.accel.c_str() ) ),
1802 application()->desktop(),
1804 this, SLOT( OnGUIEvent() ),
1805 QString() /*shortcutAction*/ );
1808 foreach ( QString subMenu, smenus ) {
1809 QStringList subMenuList = subMenu.split( ":" );
1810 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1811 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1812 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1814 createMenu( id, menuId, -1 );
1816 if ( !stools.isEmpty() ) {
1817 QString subTool = stools[0];
1818 subTool = subTool.toUpper().prepend( "TOOL_" );
1819 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1820 createTool(id, toolId);
1823 // add action id to map
1824 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1825 myPluginActions[id] = anAction;
1832 //=======================================================================
1833 // function : GeometryGUI::activateModule()
1834 // purpose : Called when GEOM module is activated
1835 //=======================================================================
1836 bool GeometryGUI::activateModule( SUIT_Study* study )
1838 if ( CORBA::is_nil( myComponentGeom ) )
1841 bool res = SalomeApp_Module::activateModule( study );
1845 setMenuShown( true );
1846 setToolShown( true );
1848 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1849 PyGILState_STATE gstate = PyGILState_Ensure();
1850 PyObject* pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1851 if ( !pluginsmanager ) {
1856 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1857 tr("MEN_NEW_ENTITY").toUtf8().data(),
1858 tr("GEOM_PLUGINS_OTHER").toUtf8().data());
1863 PyGILState_Release(gstate);
1864 // end of GEOM plugins loading
1866 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1867 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ), Qt::UniqueConnection );
1869 // Reset actions accelerator keys
1870 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1872 GUIMap::Iterator it;
1873 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1874 it.value()->activate( application()->desktop() );
1876 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1878 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ), Qt::UniqueConnection );
1879 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ), Qt::UniqueConnection );
1880 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ), Qt::UniqueConnection );
1882 if ( !myCreationInfoWdg )
1883 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1884 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1885 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1887 if ( !myTextTreeWdg ) {
1888 myTextTreeWdg = new GEOMGUI_TextTreeWdg( getApp() );
1889 new GEOMGUI_TextTreeSelector( myTextTreeWdg, GetAnnotationMgr(), getApp()->selectionMgr() );
1892 getApp()->insertDockWindow( myTextTreeWdg->getWinID(), myTextTreeWdg );
1893 getApp()->placeDockWindow( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
1896 SALOME_ListIO selected;
1897 sm->selectedObjects( selected );
1898 sm->clearSelected();
1900 SUIT_ViewManager* vm;
1901 ViewManagerList OCCViewManagers, VTKViewManagers;
1903 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1904 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1905 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1906 onViewManagerAdded(vm);
1908 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1909 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1910 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1911 onViewManagerAdded(vm);
1913 sm->setSelectedObjects( selected, true ); //NPAL 19674
1915 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1917 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ), Qt::UniqueConnection );
1919 // 0020836 (Basic vectors and origin)
1920 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1921 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1922 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1924 _PTR(Study) studyDS = appStudy->studyDS();
1926 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1927 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1928 createOriginAndBaseVectors();
1933 Py_XDECREF(pluginsmanager);
1937 //=======================================================================
1938 // function : GeometryGUI::deactivateModule()
1939 // purpose : Called when GEOM module is deactivated
1940 //=======================================================================
1941 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1943 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1945 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1947 setMenuShown( false );
1948 setToolShown( false );
1950 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1951 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1953 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1955 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1956 //disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1957 if ( myCreationInfoWdg ) {
1958 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1959 myCreationInfoWdg = 0;
1961 if ( myTextTreeWdg ) {
1962 getApp()->removeDockWindow( myTextTreeWdg->getWinID() );
1963 disconnect( application(), 0, myTextTreeWdg, 0 );
1967 EmitSignalCloseAllDialogs();
1969 GUIMap::Iterator it;
1970 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1971 it.value()->deactivate();
1973 // Unset actions accelerator keys
1974 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1976 qDeleteAll(myOCCSelectors);
1977 myOCCSelectors.clear();
1978 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1980 qDeleteAll(myVTKSelectors);
1981 myVTKSelectors.clear();
1982 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1984 return SalomeApp_Module::deactivateModule( study );
1987 //=======================================================================
1988 // function : onWindowActivated()
1989 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1990 //=======================================================================
1991 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1996 const bool ViewOCC = ( win->getViewManager() ? win->getViewManager()->getType() == OCCViewer_Viewer::Type() : false );
1997 //const bool ViewVTK = ( win->getViewManager() ? win->getViewManager()->getType() == SVTK_Viewer::Type() : false );
1999 // disable non-OCC viewframe menu commands
2000 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
2001 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
2002 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
2003 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
2004 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
2005 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
2006 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
2008 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
2009 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
2010 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
2011 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
2013 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
2016 void GeometryGUI::windows( QMap<int, int>& mappa ) const
2018 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
2019 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
2020 #ifndef DISABLE_PYCONSOLE
2021 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
2023 if ( myCreationInfoWdg )
2024 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
2025 if ( myTextTreeWdg )
2026 mappa.insert( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
2029 void GeometryGUI::viewManagers( QStringList& lst ) const
2031 lst.append( OCCViewer_Viewer::Type() );
2034 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
2036 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
2038 qDebug( "connect" );
2039 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
2040 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
2041 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
2042 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
2043 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
2044 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
2045 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
2046 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
2048 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2049 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
2051 // disable OCC selectors
2052 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
2053 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2054 while ( itOCCSel.hasNext() )
2055 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2056 sr->setEnabled(true);
2058 else if ( vm->getType() == SVTK_Viewer::Type() )
2060 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2061 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
2063 // disable VTK selectors
2064 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
2065 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2066 while ( itVTKSel.hasNext() )
2067 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2068 sr->setEnabled(true);
2072 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
2074 SUIT_ViewModel* viewer = vm->getViewModel();
2075 if ( vm->getType() == OCCViewer_Viewer::Type() )
2077 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2078 while ( itOCCSel.hasNext() )
2079 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2080 if ( sr->viewer() == viewer )
2082 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
2086 if ( vm->getType() == SVTK_Viewer::Type() )
2088 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2089 while ( itVTKSel.hasNext() )
2090 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2091 if ( sr->viewer() == viewer )
2093 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2097 SOCC_Viewer* aSOCCView = dynamic_cast<SOCC_Viewer*>(viewer);
2099 GetAnnotationMgr()->RemoveView( aSOCCView );
2103 //================================================================================
2105 * \brief Slot called when selection changed. Shows creation info of a selected object
2107 //================================================================================
2109 void GeometryGUI::updateCreationInfo()
2111 if ( myCreationInfoWdg )
2112 myCreationInfoWdg->clear();
2114 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2115 // if ( !myCreationInfoWdg->isVisible() )
2118 // look for a sole selected GEOM_Object
2119 GEOM::GEOM_BaseObject_var geomObj;
2121 SALOME_ListIO selected;
2122 getApp()->selectionMgr()->selectedObjects( selected );
2124 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2125 SALOME_ListIteratorOfListIO selIt( selected );
2126 for ( ; selIt.More(); selIt.Next() )
2128 Handle(SALOME_InteractiveObject) io = selIt.Value();
2129 if ( !io->hasEntry() ) continue;
2130 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2131 if ( !sobj ) continue;
2132 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2133 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2134 if ( !gobj->_is_nil() )
2136 if ( !geomObj->_is_nil() )
2137 return; // several GEOM objects selected
2141 if ( geomObj->_is_nil() ) return;
2143 // pass creation info of geomObj to myCreationInfoWdg
2145 if ( myCreationInfoWdg ) {
2147 GEOM::CreationInformationSeq_var info;
2150 info = geomObj->GetCreationInformation();
2154 myCreationInfoWdg->setInfo( info );
2158 void GeometryGUI::onAutoBringToFront()
2160 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2161 if( !isAutoBringToFront )
2164 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2165 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2168 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2169 if (!appStudy) return;
2171 GEOM_Displayer displayer;
2173 SALOME_View* window = displayer.GetActiveView();
2174 if ( !window ) return;
2176 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2178 SALOME_ListIO selected;
2179 getApp()->selectionMgr()->selectedObjects( selected );
2180 if (!myTopLevelIOList.IsEmpty())
2182 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2184 Handle( SALOME_InteractiveObject ) io = It.Value();
2185 bool isSelected = false;
2186 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2188 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2189 if( io->isSame( sel_io ) )
2192 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2194 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2195 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2200 myTopLevelIOList.Assign(selected);
2201 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2203 Handle( SALOME_InteractiveObject ) io = It.Value();
2204 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2205 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2208 displayer.UpdateViewer();
2209 GeometryGUI::Modified();
2212 void GeometryGUI::updateFieldColorScale()
2214 GEOM_Displayer aDisplayer;
2215 aDisplayer.UpdateColorScale();
2218 QString GeometryGUI::engineIOR() const
2220 if ( !CORBA::is_nil( GetGeomGen() ) )
2221 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2225 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture (int theId, int& theWidth, int& theHeight)
2227 theWidth = theHeight = 0;
2228 Handle(TColStd_HArray1OfByte) aTexture;
2230 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations();
2231 if ( !aInsOp->_is_nil() ) {
2232 CORBA::Long aWidth, aHeight;
2233 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2234 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2236 theHeight = aHeight;
2238 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2240 for ( CORBA::ULong i = 0; i < aStream->length(); i++)
2241 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
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 // Update submenu for predefined materials
2259 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2260 QMenu* matMenu = action( GEOMOp::OpMaterialMenu )->menu();
2262 QSignalMapper* signalMapper = new QSignalMapper( menu );
2265 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2266 if ( anApp && anApp->activeViewManager() ) {
2267 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2269 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2272 QString curModel = "";
2273 if ( v.canConvert<QString>() ) curModel = v.toString();
2275 // get list of all predefined materials
2276 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2278 foreach ( QString material, materials )
2280 QAction* a = matMenu->addAction( material );
2281 connect( a, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2282 signalMapper->setMapping( a, material );
2283 a->setCheckable( true );
2285 Material_Model aModel;
2286 aModel.fromResources( material );
2287 if ( !found && aModel.toProperties() == curModel ) {
2288 a->setChecked( true );
2292 matMenu->addSeparator();
2293 matMenu->addAction( action( GEOMOp::OpPredefMaterCustom ) );
2294 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2295 this, SLOT( OnSetMaterial( const QString & ) ) );
2298 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2299 Handle(SALOME_InteractiveObject) io = lst.First();
2300 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2301 _PTR(Study) study = appStudy->studyDS();
2302 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2304 QString aName = QString( obj->GetName().c_str() );
2305 aName.remove( QRegExp("\\s+$") );
2311 void GeometryGUI::OnSetMaterial(const QString& theName)
2313 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2317 void GeometryGUI::createPreferences()
2319 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2321 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2323 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2324 setPreferenceProperty( genGroup, "columns", 2 );
2326 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2327 LightApp_Preferences::Selector,
2328 "Geometry", "display_mode" );
2330 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2331 LightApp_Preferences::Color, "Geometry", "shading_color" );
2333 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2334 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2336 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2337 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2339 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2340 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2342 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2343 LightApp_Preferences::Color, "Geometry", "line_color" );
2345 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2346 LightApp_Preferences::Color, "Geometry", "point_color" );
2348 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2349 LightApp_Preferences::Color, "Geometry", "isos_color" );
2351 addPreference( tr( "PREF_LABEL_COLOR" ), genGroup,
2352 LightApp_Preferences::Color, "Geometry", "label_color" );
2354 addPreference( "", genGroup, LightApp_Preferences::Space );
2356 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2357 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2359 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2360 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2362 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2363 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2365 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2366 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2368 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2369 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2371 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2372 LightApp_Preferences::Selector,
2373 "Geometry", "material" );
2375 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2376 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2382 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2383 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2385 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2386 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2388 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2389 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2391 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2392 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2394 for (int i = 0; i < nb; i++) {
2395 setPreferenceProperty( wd[i], "min", 1 );
2396 setPreferenceProperty( wd[i], "max", 5 );
2399 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2400 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2402 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2403 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2405 // --------------------------------------------------------------------------
2406 // Dimensions (Measurements) preferences
2407 // --------------------------------------------------------------------------
2409 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2410 setPreferenceProperty( aDimGroupId, "columns", 2 );
2412 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2413 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2415 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2416 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2418 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2419 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2421 int aDimFontId = addPreference( tr( "PREF_DIMENSIONS_FONT" ), aDimGroupId, LightApp_Preferences::Font, "Geometry", "dimensions_font" );
2423 int f = QtxFontEdit::Family | QtxFontEdit::Size;
2424 setPreferenceProperty( aDimFontId, "features", f );
2425 setPreferenceProperty( aDimFontId, "mode", QtxFontEdit::Custom );
2427 Handle(Font_FontMgr) fmgr = Font_FontMgr::GetInstance();
2428 QString aFontFile = "";
2429 resMgr->value("resources", "GEOM", aFontFile);
2430 aFontFile = aFontFile + QDir::separator() + "Y14.5M-2009.ttf";
2431 // add enginier font into combobox
2432 /*int fontID =*/ QFontDatabase::addApplicationFont( aFontFile );
2433 #if OCC_VERSION_LARGE <= 0x07030000
2434 Handle(Font_SystemFont) sf = new Font_SystemFont(
2435 new TCollection_HAsciiString("Y14.5M-2009"),
2437 new TCollection_HAsciiString(aFontFile.toLatin1().data()) );
2439 Handle(Font_SystemFont) sf = new Font_SystemFont( TCollection_AsciiString("Y14.5M-2009") );
2440 sf->SetFontPath( Font_FA_Regular,
2441 TCollection_AsciiString( aFontFile.toLatin1().data() ) );
2443 // register font in OCC font manager
2444 fmgr->RegisterFont( sf, Standard_False );
2446 // get list of supported fonts by OCC
2447 QStringList anOCCFonts;
2448 TColStd_SequenceOfHAsciiString theFontsNames;
2449 fmgr->GetAvailableFontsNames( theFontsNames );
2450 for(Standard_Integer i=1; i<=theFontsNames.Length(); i++) {
2451 Handle(TCollection_HAsciiString) str = theFontsNames(i);
2452 anOCCFonts << str->ToCString();
2454 anOCCFonts.removeDuplicates();
2455 // set the supported fonts into combobox to use its only
2456 setPreferenceProperty( aDimFontId, "fonts", anOCCFonts );
2458 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2459 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2461 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2462 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2463 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2465 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2466 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2468 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2469 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2471 QStringList aListOfLengthUnits;
2472 aListOfLengthUnits << "m";
2473 aListOfLengthUnits << "cm";
2474 aListOfLengthUnits << "mm";
2475 aListOfLengthUnits << "in.";
2476 aListOfLengthUnits << "ft.";
2478 QStringList aListOfAngUnits;
2479 aListOfAngUnits << "rad";
2480 aListOfAngUnits << "deg";
2482 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2483 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2485 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2486 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2488 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2489 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2491 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2492 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2493 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2495 addPreference( tr( "PREF_DIMENSIONS_USE_TEXT3D" ), aDimGroupId,
2496 LightApp_Preferences::Bool, "Geometry", "dimensions_use_text3d" );
2498 // --------------------------------------------------------------------------
2499 // Shape annotation preferences
2500 // --------------------------------------------------------------------------
2502 const int aShapeAnnGroupId = addPreference( tr( "PREF_SHAPE_ANNOTATIONS" ), tabId );
2503 setPreferenceProperty( aShapeAnnGroupId, "columns", 2 );
2505 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_FONT_COLOR" ), aShapeAnnGroupId, LightApp_Preferences::Color, "Geometry", "shape_annotation_font_color" );
2506 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_COLOR" ), aShapeAnnGroupId, LightApp_Preferences::Color, "Geometry", "shape_annotation_line_color" );
2507 const int aShapeAnnFont =
2508 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_FONT" ), aShapeAnnGroupId, LightApp_Preferences::Font, "Geometry", "shape_annotation_font" );
2510 int aShapeAnnFontFeatures = QtxFontEdit::Family | QtxFontEdit::Size | QtxFontEdit::Bold | QtxFontEdit::Italic;
2511 setPreferenceProperty( aShapeAnnFont, "features", aShapeAnnFontFeatures );
2512 setPreferenceProperty( aShapeAnnFont, "mode", QtxFontEdit::Custom );
2513 setPreferenceProperty( aShapeAnnFont, "fonts", anOCCFonts );
2515 const int aShapeAnnLineWidth =
2516 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_WIDTH" ), aShapeAnnGroupId, LightApp_Preferences::IntSpin, "Geometry", "shape_annotation_line_width" );
2518 setPreferenceProperty( aShapeAnnLineWidth, "min", 1 );
2519 setPreferenceProperty( aShapeAnnLineWidth, "max", 5 );
2521 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_AUTOHIDE" ), aShapeAnnGroupId, LightApp_Preferences::Bool, "Geometry", "shape_annotation_autohide" );
2523 const int aShapeAnnLineStyle =
2524 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_STYLE" ), aShapeAnnGroupId, LightApp_Preferences::Selector, "Geometry", "shape_annotation_line_style" );
2526 QStringList aLineStyleList;
2527 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_SOLID") );
2528 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DASH") );
2529 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DOT") );
2530 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DOTDASH") );
2532 QList<QVariant> aLineStyleIds;
2533 aLineStyleIds.append(0);
2534 aLineStyleIds.append(1);
2535 aLineStyleIds.append(2);
2536 aLineStyleIds.append(3);
2538 setPreferenceProperty( aShapeAnnLineStyle, "strings", aLineStyleList );
2539 setPreferenceProperty( aShapeAnnLineStyle, "indexes", aLineStyleIds );
2541 // --------------------------------------------------------------------------
2542 // Isoline drawing preferences
2543 // --------------------------------------------------------------------------
2545 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2546 setPreferenceProperty( isoGroup, "columns", 2 );
2547 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2548 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2549 setPreferenceProperty( isoU, "min", 0 );
2550 setPreferenceProperty( isoU, "max", 100000 );
2551 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2552 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2553 setPreferenceProperty( isoV, "min", 0 );
2554 setPreferenceProperty( isoV, "max", 100000 );
2556 // Quantities with individual precision settings
2557 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2558 setPreferenceProperty( precGroup, "columns", 2 );
2560 const int nbQuantities = 8;
2561 int prec[nbQuantities], ii = 0;
2562 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2563 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2564 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2565 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2566 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2567 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2568 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2569 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2570 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2571 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2572 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2573 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2574 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2575 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2576 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2577 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2579 // Set property for precision value for spinboxes
2580 for ( ii = 0; ii < nbQuantities; ii++ ){
2581 setPreferenceProperty( prec[ii], "min", -14 );
2582 setPreferenceProperty( prec[ii], "max", 14 );
2583 setPreferenceProperty( prec[ii], "precision", 2 );
2586 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2587 setPreferenceProperty( VertexGroup, "columns", 2 );
2589 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2590 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2592 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2593 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2595 // Set property for default display mode
2596 QStringList aModesList;
2597 aModesList.append( tr("MEN_WIREFRAME") );
2598 aModesList.append( tr("MEN_SHADING") );
2599 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2600 aModesList.append( tr("MEN_TEXTURE") );
2602 QList<QVariant> anIndexesList;
2603 anIndexesList.append(0);
2604 anIndexesList.append(1);
2605 anIndexesList.append(2);
2606 anIndexesList.append(3);
2608 setPreferenceProperty( dispmode, "strings", aModesList );
2609 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2611 // Set property for top level display mode
2612 QStringList aTopModesList;
2613 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2614 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2615 aTopModesList.append( tr("MEN_WIREFRAME") );
2616 aTopModesList.append( tr("MEN_SHADING") );
2617 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2619 QList<QVariant> aTopIndexesList;
2620 aTopIndexesList.append(0);
2621 aTopIndexesList.append(1);
2622 aTopIndexesList.append(2);
2623 aTopIndexesList.append(3);
2624 aTopIndexesList.append(4);
2626 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2627 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2629 // Set property for step value for spinboxes
2630 setPreferenceProperty( step, "min", 1 );
2631 setPreferenceProperty( step, "max", 10000 );
2632 setPreferenceProperty( step, "precision", 3 );
2634 // Set property for trandparency value for spinboxes
2635 setPreferenceProperty( transparency, "min", 0 );
2636 setPreferenceProperty( transparency, "max", 100 );
2638 // Set property for deflection value for spinboxes
2639 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2640 setPreferenceProperty( defl, "max", 1.0 );
2641 setPreferenceProperty( defl, "step", 1.0e-04 );
2642 setPreferenceProperty( defl, "precision", 6 );
2644 // Set property for default material
2645 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2647 // Set property vertex marker type
2648 QList<QVariant> aMarkerTypeIndicesList;
2649 QList<QVariant> aMarkerTypeIconsList;
2651 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2652 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2653 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2654 aMarkerTypeIndicesList << (i-1);
2655 aMarkerTypeIconsList << pixmap;
2658 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2659 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2661 // Set property for vertex marker scale
2662 QList<QVariant> aMarkerScaleIndicesList;
2663 QStringList aMarkerScaleValuesList;
2665 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2666 aMarkerScaleIndicesList << iii;
2667 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2670 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2671 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2673 // Scalar bar for field step presentation
2674 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2675 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2677 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2678 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2679 setPreferenceProperty( sbXPosition, "min", 0 );
2680 setPreferenceProperty( sbXPosition, "max", 1 );
2681 setPreferenceProperty( sbXPosition, "step", 0.05 );
2683 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2684 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2685 setPreferenceProperty( sbYPosition, "min", 0 );
2686 setPreferenceProperty( sbYPosition, "max", 1 );
2687 setPreferenceProperty( sbYPosition, "step", 0.05 );
2689 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2690 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2691 setPreferenceProperty( sbWidth, "min", 0 );
2692 setPreferenceProperty( sbWidth, "max", 1 );
2693 setPreferenceProperty( sbWidth, "step", 0.05 );
2695 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2696 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2697 setPreferenceProperty( sbHeight, "min", 0 );
2698 setPreferenceProperty( sbHeight, "max", 1 );
2699 setPreferenceProperty( sbHeight, "step", 0.05 );
2701 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2702 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2703 setPreferenceProperty( sbTextHeight, "min", 6 );
2704 setPreferenceProperty( sbTextHeight, "max", 24 );
2705 setPreferenceProperty( sbTextHeight, "step", 1 );
2707 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2708 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2709 setPreferenceProperty( sbNbIntervals, "min", 2 );
2710 setPreferenceProperty( sbNbIntervals, "max", 64 );
2711 setPreferenceProperty( sbNbIntervals, "step", 1 );
2713 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2714 setPreferenceProperty( originGroup, "columns", 2 );
2716 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2717 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2718 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2719 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2721 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2722 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2724 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2725 setPreferenceProperty( operationsGroup, "columns", 2 );
2727 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2728 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2730 addPreference( tr( "PREF_HIDE_INPUT_OBJECT" ), operationsGroup,
2731 LightApp_Preferences::Bool, "Geometry", "hide_input_object" );
2733 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2735 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2737 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2738 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2740 QStringList aHierarchyTypeList;
2741 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2742 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2743 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2745 QList<QVariant> aHierarchyTypeIndexesList;
2746 aHierarchyTypeIndexesList.append(0);
2747 aHierarchyTypeIndexesList.append(1);
2748 aHierarchyTypeIndexesList.append(2);
2750 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2751 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2753 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2754 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2756 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2758 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2759 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2761 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2762 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2763 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2764 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2765 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2766 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2767 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2768 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2770 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2771 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2772 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2773 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2774 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2775 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2782 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2784 if (section == "Geometry") {
2785 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2786 if (param == QString("SettingsGeomStep")) {
2787 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2788 EmitSignalDefaultStepValueChanged(spin_step);
2790 else if (param == QString("toplevel_color")) {
2791 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2792 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2794 else if (param == QString("toplevel_dm")) {
2795 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2797 else if (param == QString("scalar_bar_x_position") ||
2798 param == QString("scalar_bar_y_position") ||
2799 param == QString("scalar_bar_width") ||
2800 param == QString("scalar_bar_height") ||
2801 param == QString("scalar_bar_text_height") ||
2802 param == QString("scalar_bar_nb_intervals")) {
2803 updateFieldColorScale();
2805 else if ( param == QString("dimensions_color") ||
2806 param == QString("dimensions_line_width") ||
2807 param == QString("dimensions_font") ||
2808 param == QString("dimensions_arrow_length") ||
2809 param == QString("dimensions_show_units") ||
2810 param == QString("dimensions_length_units") ||
2811 param == QString("dimensions_angle_units") ||
2812 param == QString("dimensions_use_text3d") ||
2813 param == QString("shape_annotation_font_color") ||
2814 param == QString("shape_annotation_line_color") ||
2815 param == QString("shape_annotation_font") ||
2816 param == QString("shape_annotation_line_width") ||
2817 param == QString("shape_annotation_autohide") ||
2818 param == QString("shape_annotation_line_style") ||
2819 param == QString("shape_annotation_line_style") ||
2820 param == QString("label_color") )
2822 SalomeApp_Application* anApp = getApp();
2828 GEOM_Displayer aDisplayer;
2830 ViewManagerList aVMs;
2831 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2832 ViewManagerList::Iterator anIt = aVMs.begin();
2833 for ( ; anIt != aVMs.end(); ++anIt )
2835 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2841 SALOME_ListIO aVisible;
2842 aViewer->GetVisible( aVisible );
2844 GEOMGUI_AnnotationMgr* anAnnotationMgr = GetAnnotationMgr();
2845 if ( anAnnotationMgr ) {
2846 SALOME_ListIteratorOfListIO anIter( aVisible );
2847 while ( anIter.More() ) {
2848 if ( anAnnotationMgr->isAnnotationEntry( anIter.Value()->getEntry() ) ) {
2849 aVisible.Remove( anIter );
2857 aDisplayer.Redisplay( aVisible, false, aViewer );
2859 if ( param == QString( "label_color" ) ) {
2860 ViewManagerList aVMsVTK;
2861 anApp->viewManagers( SVTK_Viewer::Type(), aVMsVTK );
2862 ViewManagerList::Iterator anIt = aVMsVTK.begin();
2863 for ( ; anIt != aVMsVTK.end(); ++anIt )
2865 SVTK_Viewer* aViewer = dynamic_cast<SVTK_Viewer*>( (*anIt)->getViewModel() );
2870 SALOME_ListIO aVisible;
2871 aViewer->GetVisible( aVisible );
2872 aDisplayer.Redisplay( aVisible, false, aViewer );
2875 aDisplayer.UpdateViewer();
2877 else if ( param.startsWith( "dependency_tree") )
2878 emit SignalDependencyTreeParamChanged( section, param );
2882 LightApp_Displayer* GeometryGUI::displayer()
2885 myDisplayer = new GEOM_Displayer();
2889 void GeometryGUI::setLocalSelectionMode(const int mode)
2891 myLocalSelectionMode = mode;
2894 int GeometryGUI::getLocalSelectionMode() const
2896 return myLocalSelectionMode;
2899 const char gSeparator = '_'; // character used to separate parameter names
2900 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2903 * \brief Store visual parameters
2905 * This method is called just before the study document is saved.
2906 * Store visual parameters in AttributeParameter attribute(s)
2908 void GeometryGUI::storeVisualParameters (int savePoint)
2910 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2911 if ( !appStudy || !appStudy->studyDS() )
2914 _PTR(Study) studyDS = appStudy->studyDS();
2916 // componentName is used for encoding of entries when storing them in IParameters
2917 std::string componentName = myComponentGeom->ComponentDataType();
2918 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2919 //if (!aSComponent) return;
2922 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2923 componentName.c_str(),
2925 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2927 QSet<QString> anEntriesToStoreShared;
2928 QList<SUIT_ViewManager*> lst;
2929 QList<SUIT_ViewManager*>::Iterator it;
2931 GEOMGUI_AnnotationMgr* aAnnotationMgr = GetAnnotationMgr();
2933 // main cycle to store parameters of displayed objects
2935 getApp()->viewManagers(lst);
2936 for (it = lst.begin(); it != lst.end(); it++) {
2937 SUIT_ViewManager* vman = *it;
2938 QString vType = vman->getType();
2939 SUIT_ViewModel* vmodel = vman->getViewModel();
2940 SALOME_View* aView = dynamic_cast<SALOME_View*>(vmodel);
2942 int aMgrId = vman->getGlobalId();
2943 // saving VTK actors properties
2944 QVector<SUIT_ViewWindow*> views = vman->getViews();
2945 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2946 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
2947 ObjMap::ConstIterator o_it = anObjects.begin();
2948 for (; o_it != anObjects.end(); o_it++) {
2949 const PropMap& aProps = o_it.value();
2951 //Check that object exists in the study
2952 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toUtf8().data() ) );
2953 if ( !obj || !(aProps.count() > 0))
2955 // entry is "encoded" = it does NOT contain component address, since it is a
2956 // subject to change on next component loading
2958 std::string entry = ip->encodeEntry(o_it.key().toUtf8().data(), componentName);
2960 _PTR(GenericAttribute) anAttr;
2961 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2964 // remember entry of object to store shared GEOM properties
2965 // (e.g. dimension properties).
2966 if ( vType == OCCViewer_Viewer::Type() )
2968 anEntriesToStoreShared.insert( o_it.key() );
2971 QString param, occParam = vType;
2972 occParam += GEOM::sectionSeparator();
2973 occParam += QString::number(aMgrId);
2974 occParam += GEOM::sectionSeparator();
2976 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2977 param = occParam + GEOM::propertyName( GEOM::Visibility );
2978 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2981 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2982 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2983 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2986 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2987 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2989 val << QString::number(c.redF());
2990 val << QString::number(c.greenF());
2991 val << QString::number(c.blueF());
2992 param = occParam + GEOM::propertyName( GEOM::Color );
2993 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2996 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2997 param = occParam + GEOM::propertyName( GEOM::Texture );
2998 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
3001 if (vType == SVTK_Viewer::Type()) {
3002 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
3003 param = occParam + GEOM::propertyName( GEOM::Opacity );
3004 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
3006 } else if (vType == SOCC_Viewer::Type()) {
3007 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
3008 param = occParam + GEOM::propertyName( GEOM::Transparency );
3009 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
3012 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
3013 param = occParam + GEOM::propertyName( GEOM::TopLevel );
3014 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
3018 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
3019 param = occParam + GEOM::propertyName( GEOM::NbIsos );
3020 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
3023 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
3024 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
3025 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
3028 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
3029 param = occParam + GEOM::propertyName( GEOM::Vertices );
3030 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
3033 if (aProps.contains(GEOM::propertyName( GEOM::ShowName ))) {
3034 param = occParam + GEOM::propertyName( GEOM::ShowName );
3035 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::ShowName )).toString().toStdString());
3038 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
3039 param = occParam + GEOM::propertyName( GEOM::Deflection );
3040 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
3043 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
3044 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
3045 param = occParam + GEOM::propertyName( GEOM::PointMarker );
3046 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
3049 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
3050 param = occParam + GEOM::propertyName( GEOM::Material );
3051 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
3054 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
3055 param = occParam + GEOM::propertyName( GEOM::LineWidth );
3056 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
3059 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
3060 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
3061 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
3064 if ( vType == SOCC_Viewer::Type() && aAnnotationMgr ) {
3065 std::string anAnnotationInfo = GetAnnotationMgr()->getDisplayedIndicesInfo(
3066 o_it.key().toUtf8().data(), dynamic_cast<SOCC_Viewer*>(aView) ).toStdString();
3067 if (!anAnnotationInfo.empty()) {
3068 param = occParam + "ShapeAnnotationVisibleItems";
3069 ip->setParameter(entry, param.toStdString(), anAnnotationInfo);
3072 } // object iterator
3074 } // for (viewManagers)
3076 // store shape annotation and dimension attributes of objects:
3077 // since the displayed object always persists in property map, we remember the object entries
3078 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
3079 const QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
3080 const QString aAnnotationParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::ShapeAnnotations );
3081 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
3082 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
3084 std::string aStudyEntry = (*aEntryIt).toUtf8().data();
3085 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName );
3087 // store dimension parameters
3088 GEOMGUI_DimensionProperty aDimensions( aStudyEntry );
3089 if ( aDimensions.GetNumber() != 0 ) {
3090 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toUtf8().data() );
3093 _PTR(SObject) aObj( studyDS->FindObjectID( aStudyEntry ) );
3094 const Handle(GEOMGUI_AnnotationAttrs) aShapeAnnAttr = GEOMGUI_AnnotationAttrs::FindAttributes( aObj );
3095 if ( !aShapeAnnAttr.IsNull() ) {
3096 ip->setParameter( aStoreEntry, aAnnotationParam.toStdString(), aShapeAnnAttr->ExportAsPropertyString().toUtf8().data() );
3102 * \brief Restore visual parameters
3104 * This method is called after the study document is opened.
3105 * Restore visual parameters from AttributeParameter attribute(s)
3107 void GeometryGUI::restoreVisualParameters (int savePoint)
3109 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
3110 if (!appStudy || !appStudy->studyDS())
3112 _PTR(Study) studyDS = appStudy->studyDS();
3114 // componentName is used for encoding of entries when storing them in IParameters
3115 std::string componentName = myComponentGeom->ComponentDataType();
3116 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
3117 //if (!aSComponent) return;
3120 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
3121 componentName.c_str(),
3123 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
3125 std::vector<std::string> entries = ip->getEntries();
3127 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
3129 // entry is a normal entry - it should be "decoded" (setting base address of component)
3130 QString entry (ip->decodeEntry(*entIt).c_str());
3132 // Check that the entry corresponds to a real object in the Study
3133 // as the object may be deleted or modified after the visual state is saved.
3134 _PTR(SObject) so = studyDS->FindObjectID(entry.toUtf8().data());
3135 if (!so) continue; //Skip the not existent entry
3137 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
3138 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
3140 std::vector<std::string>::iterator namesIt = paramNames.begin();
3141 std::vector<std::string>::iterator valuesIt = paramValues.begin();
3143 // actors are stored in a map after displaying of them for
3144 // quicker access in the future: map < viewID to actor >
3145 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
3146 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
3148 QString viewerTypStr;
3149 QString viewIndexStr;
3151 QVector<PropMap> aListOfMap;
3153 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
3155 // visual parameters are stored in strings as follows:
3156 // 1) ViewerType_ViewIndex_ParamName
3157 // 2) ViewerType_ParamName (shared for GEOM module)
3158 // '_' is used as separator and should not be used in viewer type or parameter names.
3159 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
3161 bool isShared = lst.size() == 2;
3162 bool isViewer = lst.size() == 3;
3163 if ( !isShared && !isViewer )
3168 // shared visual parameters
3171 QString aParamNameStr( lst[1] );
3172 QString aValuesStr( (*valuesIt).c_str() );
3174 // shared dimension properties are stored as attribute
3175 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
3177 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
3178 aDimensionProp.SaveToAttribute( entry.toUtf8().data() );
3180 else if ( aParamNameStr == GEOM::propertyName( GEOM::ShapeAnnotations ) )
3182 Handle(GEOMGUI_AnnotationAttrs) anAttr =
3183 GEOMGUI_AnnotationAttrs::FindOrCreateAttributes( so, appStudy );
3185 anAttr->ImportFromPropertyString( aValuesStr );
3191 // per view visual parameters
3192 viewerTypStr = lst[0];
3193 viewIndexStr = lst[1];
3194 QString paramNameStr = lst[2];
3197 viewIndex = viewIndexStr.toUInt(&ok);
3198 if (!ok) // bad conversion of view index to integer
3201 if ((viewIndex + 1) > aListOfMap.count()) {
3202 aListOfMap.resize(viewIndex + 1);
3205 QString val((*valuesIt).c_str());
3206 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
3207 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
3208 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
3209 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
3210 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
3211 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
3212 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
3213 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
3214 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
3215 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
3216 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
3217 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
3218 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
3219 QStringList rgb = val.split(GEOM::subSectionSeparator());
3220 if (rgb.count() == 3) {
3221 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
3222 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
3224 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
3225 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
3226 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
3227 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
3228 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
3229 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
3230 } else if (paramNameStr == GEOM::propertyName( GEOM::ShowName )) {
3231 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::ShowName ), val == "true" || val == "1");
3232 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3233 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3234 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3235 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3236 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3237 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3238 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3239 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3240 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3241 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3242 } else if (paramNameStr == "ShapeAnnotationVisibleItems") {
3243 aListOfMap[viewIndex].insert( "ShapeAnnotationVisibleItems", val);
3246 } // for names/parameters iterator
3248 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3250 for (int index = 0; index < aListOfMap.count(); index++) {
3251 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
3253 //Get Visibility property of the current PropMap
3254 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3255 SUIT_ViewManager* vman = lst.at(index);
3256 SUIT_ViewModel* vmodel = vman->getViewModel();
3257 SALOME_View* aView = dynamic_cast<SALOME_View*>(vmodel);
3258 displayer()->Display(entry, true, aView);
3260 if ( vmodel->getType() == SOCC_Viewer::Type() ) {
3261 PropMap& aProps = aListOfMap[index];
3262 if ( aProps.contains( "ShapeAnnotationVisibleItems" ) ) {
3263 SOCC_Viewer* aSOCCView = dynamic_cast<SOCC_Viewer*>( aView );
3264 GetAnnotationMgr()->setDisplayedIndicesInfo( entry, aSOCCView, aProps["ShapeAnnotationVisibleItems"].toString() );
3269 } // for entries iterator
3271 // update all VTK and OCC views
3272 QList<SUIT_ViewManager*> lst;
3273 getApp()->viewManagers(lst);
3274 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3275 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3278 if (vmodel->getType() == SVTK_Viewer::Type()) {
3279 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3280 vtkView->getRenderer()->ResetCameraClippingRange();
3283 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3284 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3285 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3291 if ( myTextTreeWdg ) {
3292 myTextTreeWdg->updateTree();
3296 // Compute current name mode of the viewer
3297 void UpdateNameMode( SalomeApp_Application* app )
3299 bool isMode = false;
3300 SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() );
3301 SUIT_ViewWindow* viewWindow = app->desktop()->activeWindow();
3302 GEOM_Displayer displayer;
3303 int aMgrId = viewWindow->getViewManager()->getGlobalId();
3305 SALOME_View* window = displayer.GetActiveView();
3306 if ( !window ) return;
3308 SALOME_ListIO anIOlst;
3309 window->GetVisible( anIOlst );
3311 for ( SALOME_ListIteratorOfListIO It( anIOlst ); It.More(); It.Next() ) {
3312 Handle( SALOME_InteractiveObject ) io = It.Value();
3313 QVariant v = aStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::ShowName ), QVariant() );
3314 bool isIONameMode = v.isValid() ? v.toBool() : false;
3318 viewWindow->setProperty( "NameMode", isMode );
3321 void GeometryGUI::onViewAboutToShow()
3323 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3324 QAction* a = action( GEOMOp::OpSwitchVectors );
3325 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3326 QAction* aNameAction = action( GEOMOp::OpSwitchName );
3328 a->setEnabled(true);
3329 bool vmode = window->property("VectorsMode").toBool();
3330 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3331 aVerticesAction->setEnabled(true);
3332 vmode = window->property("VerticesMode").toBool();
3333 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3334 UpdateNameMode( getApp() );
3335 aNameAction->setEnabled(true);
3336 vmode = window->property("NameMode").toBool();
3337 aNameAction->setText ( vmode == 1 ? tr( "MEN_NAME_MODE_OFF" ) : tr("MEN_NAME_MODE_ON") );
3339 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3340 a->setEnabled(false);
3341 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3342 aVerticesAction->setEnabled(false);
3343 aNameAction->setText ( tr("MEN_NAME_MODE_ON") );
3344 aNameAction->setEnabled(false);
3349 \brief Return action by id
3350 \param id identifier of the action
3353 QAction* GeometryGUI::getAction(const int id) {
3358 \brief GEOM module message handler
3360 This method can be re-implemented in the subclasses.
3361 This is a GEOM module message handler.
3363 \param msg the message received.
3365 void GeometryGUI::message(const QString& msg)
3368 QStringList data = msg.split("/");
3369 const int nbStrings = data.count();
3371 if (nbStrings > 0) {
3372 if (data[0] == "modified") {
3374 QString anIOR = nbStrings > 1 ? data[1] : QString();
3376 if ( anIOR.isEmpty() ) {
3380 // Get the geom object.
3381 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3383 // Clear the shape buffer
3384 GeometryGUI::ClearShapeBuffer (anObj);
3390 \brief Clears the shape buffer.
3392 This is a static method. It clears the shape buffer.
3394 \param theObj the object
3396 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3398 if ( CORBA::is_nil( theObj ) )
3401 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3402 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3403 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3405 SalomeApp_Application* app =
3406 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3407 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3412 _PTR(Study) aStudy = appStudy->studyDS();
3417 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3421 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3422 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3423 _PTR(GenericAttribute) anAttr;
3424 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3425 _PTR(AttributeIOR) anIOR ( anAttr );
3426 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3427 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3433 \brief Returns the object from IOR.
3435 This is a static method. It returns the object from its IOR.
3437 \param IOR object IOR
3438 \return GEOM object.
3440 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3442 GEOM::GEOM_Object_var geomObj;
3443 if ( !IOR.isEmpty() ) {
3444 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3445 ( IOR.toLatin1().constData() );
3446 if ( !CORBA::is_nil( corbaObj ) )
3447 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3449 return geomObj._retn();
3453 \brief Returns IOR of the object.
3455 This is a static method. It returns the object's IOR.
3457 \param object the GEOM object.
3458 \return object's IOR.
3460 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3463 if ( !CORBA::is_nil( object ) ) {
3464 CORBA::String_var anIOR =
3465 SalomeApp_Application::orb()->object_to_string( object );
3472 \brief Check if this object is can't be renamed in place
3474 This method can be re-implemented in the subclasses.
3475 Return true in case if object isn't reference or component (module root).
3477 \param entry column id
3478 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3480 bool GeometryGUI::renameAllowed( const QString& entry) const {
3482 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3483 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3484 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3486 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3490 Rename object by entry.
3491 \param entry entry of the object
3492 \param name new name of the object
3493 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3495 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3497 bool result = false;
3499 SalomeApp_Application* app =
3500 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3501 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3506 _PTR(Study) aStudy = appStudy->studyDS();
3511 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3513 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3517 _PTR(SObject) obj ( aStudy->FindObjectID(qUtf8Printable(entry)) );
3518 _PTR(GenericAttribute) anAttr;
3520 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3521 _PTR(AttributeName) aName (anAttr);
3523 aName->SetValue( name.toUtf8().data() ); // rename the SObject
3524 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3525 if (!CORBA::is_nil(anObj)) {
3526 anObj->SetName( name.toUtf8().data() ); // Rename the corresponding GEOM_Object
3527 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3528 emit SignalTextTreeRenameObject( entry );
3536 void GeometryGUI::updateMaterials()
3538 LightApp_Preferences* pref = preferences();
3540 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3541 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3542 if ( !materials.contains( currentMaterial ) )
3543 // user material set as default in the preferences, might be removed
3544 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3546 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3548 setPreferenceProperty( prefItem->id(),
3549 "strings", materials );
3550 prefItem->retrieve();
3556 \brief Check if the module allows "drag" operation of its objects.
3558 Overloaded from LightApp_Module class.
3560 This function is a part of the general drag-n-drop mechanism.
3561 The goal of this function is to check data object passed as a parameter
3562 and decide if it can be dragged or no.
3564 \param what data object being tested for drag operation
3565 \return \c true if module allows dragging of the specified object
3566 \sa isDropAccepted(), dropObjects()
3568 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3570 // we allow dragging object under root and object from folder
3571 int aLevel = what->level();
3572 bool anObjectInFolder = false;
3574 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3576 _PTR(SObject) aSO = dataObj->object();
3578 _PTR(GenericAttribute) anAttr;
3579 _PTR(SObject) aFatherSO = SalomeApp_Application::getStudy()->GetUseCaseBuilder()->GetFather( aSO );
3580 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3581 _PTR(AttributeLocalID) aLocalID( anAttr );
3582 anObjectInFolder = aLocalID->Value() == 999;
3587 return aLevel == 2 || anObjectInFolder;
3591 \brief Check if the module allows "drop" operation on the given object.
3593 Overloaded from LightApp_Module class.
3595 This function is a part of the general drag-n-drop mechanism.
3596 The goal of this function is to check data object passed as a parameter
3597 and decide if it can be used as a target for the "drop" operation.
3598 The processing of the drop operation itself is done in the dropObjects() function.
3600 \param where target data object
3601 \return \c true if module supports dropping on the \a where data object
3602 \sa isDraggable(), dropObjects()
3604 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3606 // we allow dropping into folder and top-level GEOM object
3607 int aLevel = where->level();
3608 bool isFolder = false;
3610 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3612 _PTR(SObject) aSO = dataObj->object();
3614 _PTR(GenericAttribute) anAttr;
3615 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3616 _PTR(AttributeLocalID) aLocalID( anAttr );
3617 isFolder = aLocalID->Value() == 999;
3622 return aLevel == 1 || isFolder;
3626 \brief Complete drag-n-drop operation.
3628 Overloaded from LightApp_Module class.
3630 This function is a part of the general drag-n-drop mechanism.
3631 Its goal is to handle dropping of the objects being dragged according
3632 to the chosen operation (move). The dropping is performed in the
3633 context of the parent data object \a where and the \a row (position in the
3634 children index) at which the data should be dropped. If \a row is equal to -1,
3635 this means that objects are added to the end of the children list.
3637 \param what objects being dropped
3638 \param where target data object
3639 \param row child index at which the drop operation is performed
3640 \param action drag-n-drop operation (Qt::DropAction) - move
3642 \sa isDraggable(), isDropAccepted()
3644 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3645 const int row, Qt::DropAction action )
3647 if (action != Qt::CopyAction && action != Qt::MoveAction)
3648 return; // unsupported action
3650 // get parent object
3651 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3652 if ( !dataObj ) return; // wrong parent
3653 _PTR(SObject) parentObj = dataObj->object();
3655 // Find the current Study and StudyBuilder
3656 _PTR(Study) aStudy = SalomeApp_Application::getStudy();
3657 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3658 // collect all parents of the target node
3659 QStringList parentIDs;
3660 _PTR(SObject) parent = parentObj;
3661 while( !parent->IsNull() ) {
3662 parentIDs << parent->GetID().c_str();
3663 parent = aUseCaseBuilder->GetFather(parent);
3666 // collect objects being dropped
3667 GEOM::object_list_var objects = new GEOM::object_list();
3668 objects->length( what.count() );
3670 for ( int i = 0; i < what.count(); i++ ) {
3671 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3672 if ( !dataObj ) continue; // skip wrong objects
3673 _PTR(SObject) sobj = dataObj->object();
3674 // check that dropped object is not a parent of target object
3675 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3676 return; // it's not allowed to move node into it's child
3678 objects[i] = _CAST(SObject, sobj)->GetSObject();
3681 objects->length( count );
3683 // call engine function
3684 GetGeomGen()->Move( objects.in(), // what
3685 _CAST(SObject, parentObj)->GetSObject(), // where
3688 // update Object browser
3689 getApp()->updateObjectBrowser( false );
3692 void GeometryGUI::emitDimensionsUpdated( QString entry )
3694 emit DimensionsUpdated( entry );
3697 void GeometryGUI::emitAnnotationsUpdated( QString entry )
3699 emit SignalAnnotationsUpdated( entry );