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