1 // Copyright (C) 2007-2020 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : GeometryGUI.cxx
23 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
25 #include <Standard_math.hxx> // E.A. must be included before Python.h to fix compilation on windows
27 #undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
30 #include "GeometryGUI.h"
31 #include "GeometryGUI_Operations.h"
32 #include "GEOMPluginGUI.h"
33 #include "GEOMGUI_OCCSelector.h"
34 #include "GEOMGUI_Selection.h"
35 #include "GEOMGUI_CreationInfoWdg.h"
36 #include "GEOMGUI_TextTreeWdg.h"
37 #include "GEOMGUI_DimensionProperty.h"
38 #include "GEOM_Constants.h"
39 #include "GEOM_Displayer.h"
40 #include "GEOM_AISShape.hxx"
41 #include "GEOMUtils_XmlHandler.hxx"
42 #include "GEOMGUI_AnnotationMgr.h"
43 #include "GEOMGUI_TextTreeSelector.h"
45 #include "GEOM_Actor.h"
47 #include <Material_ResourceMgr.h>
48 #include <Material_Model.h>
50 #include <Basics_OCCTVersion.hxx>
52 #include <SUIT_Desktop.h>
53 #include <SUIT_MessageBox.h>
54 #include <SUIT_ResourceMgr.h>
55 #include <SUIT_Session.h>
56 #include <SUIT_ViewManager.h>
58 #include <OCCViewer_ViewWindow.h>
59 #include <OCCViewer_ViewPort3d.h>
60 #include <OCCViewer_ViewModel.h>
61 #include <OCCViewer_ViewManager.h>
63 #include <SOCC_ViewModel.h>
64 #include <SOCC_ViewWindow.h>
66 #include <SVTK_ViewWindow.h>
67 #include <SVTK_RenderWindowInteractor.h>
68 #include <SVTK_InteractorStyle.h>
69 #include <SVTK_ViewModel.h>
71 #ifndef DISABLE_GRAPHICSVIEW
72 #include <GraphicsView_Viewer.h>
75 #include <SalomeApp_Application.h>
76 #include <SalomeApp_DataObject.h>
77 #include <SalomeApp_Study.h>
78 #include <SalomeApp_Tools.h>
80 #include <LightApp_SelectionMgr.h>
81 #include <LightApp_VTKSelector.h>
82 #include <LightApp_DataObject.h>
83 #include <LightApp_Preferences.h>
85 #include <SALOME_LifeCycleCORBA.hxx>
86 #include <SALOME_ListIO.hxx>
88 #include <SALOMEDSClient_ClientFactory.hxx>
89 #include <SALOMEDSClient_IParameters.hxx>
91 #include <SALOMEDS_SObject.hxx>
93 #include <QtxFontEdit.h>
104 #include <QSignalMapper>
105 #include <QFontDatabase>
107 #include <AIS_ListOfInteractive.hxx>
108 #include <AIS_ListIteratorOfListOfInteractive.hxx>
109 #include <Prs3d_Drawer.hxx>
110 #include <Prs3d_IsoAspect.hxx>
111 #include <Aspect_TypeOfMarker.hxx>
112 #include <OSD_SharedLibrary.hxx>
113 #include <NCollection_DataMap.hxx>
115 #include <TColStd_HArray1OfByte.hxx>
116 #include <TColStd_SequenceOfHAsciiString.hxx>
118 #include <utilities.h>
120 #include <vtkCamera.h>
121 #include <vtkRenderer.h>
123 #include <Standard_Failure.hxx>
124 #include <Standard_ErrorHandler.hxx>
126 #include <Font_SystemFont.hxx>
127 #include <Font_FontMgr.hxx>
128 #include <TCollection_HAsciiString.hxx>
130 #include "GEOM_version.h"
131 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
134 Standard_EXPORT CAM_Module* createModule() {
135 return new GeometryGUI();
138 Standard_EXPORT char* getModuleVersion() {
139 return (char*)GEOM_VERSION_STR;
143 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
145 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
147 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
148 if (CORBA::is_nil(myComponentGeom))
150 return GeometryGUI::myComponentGeom;
153 bool GeometryGUI::InitGeomGen()
156 if ( CORBA::is_nil( myComponentGeom ) ) return false;
160 //=======================================================================
161 // function : ClientSObjectToObject
163 //=======================================================================
164 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
166 _PTR(GenericAttribute) anAttr;
167 CORBA::Object_var anObj;
169 std::string aValue = theSObject->GetIOR();
170 if (strcmp(aValue.c_str(), "") != 0) {
171 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
172 anObj = anORB->string_to_object(aValue.c_str());
175 INFOS("ClientSObjectToObject - Unknown exception has occurred!!!");
177 return anObj._retn();
179 //=================================================================================
180 // function : IsInGeomComponent
181 // purpose : Check if an SObject is under GEOM component
182 //=================================================================================
183 bool GeometryGUI::IsInGeomComponent( _PTR(SObject) sobject )
186 if ( _PTR(SComponent) aComp = sobject->GetFatherComponent() )
187 return aComp->ComponentDataType() == "GEOM";
191 //=======================================================================
192 // function : GetStudy
194 //=======================================================================
195 SALOMEDS::Study_var GeometryGUI::getStudyServant()
197 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
198 CORBA::Object_var aStudyObject = aNamingService->Resolve("/Study");
199 SALOMEDS::Study_var aStudy = SALOMEDS::Study::_narrow(aStudyObject);
200 return aStudy._retn();
203 void GeometryGUI::Modified (bool theIsUpdateActions)
205 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
206 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
207 appStudy->Modified();
208 if ( theIsUpdateActions )
209 app->updateActions();
214 //=======================================================================
215 // function : GeometryGUI::GeometryGUI()
216 // purpose : Constructor
217 //=======================================================================
218 GeometryGUI::GeometryGUI() :
219 SalomeApp_Module( "GEOM" ),
222 if ( CORBA::is_nil( myComponentGeom ) )
224 Engines::EngineComponent_var comp =
225 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
226 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
229 myActiveDialogBox = 0;
231 gp_Pnt origin = gp_Pnt(0., 0., 0.);
232 gp_Dir direction = gp_Dir(0., 0., 1.);
233 myWorkingPlane = gp_Ax3(origin, direction);
236 myLocalSelectionMode = GEOM_ALLOBJECTS;
238 myCreationInfoWdg = 0;
242 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ), Qt::UniqueConnection );
244 Q_INIT_RESOURCE( GEOMGUI );
247 //=======================================================================
248 // function : GeometryGUI::~GeometryGUI()
249 // purpose : Destructor
250 //=======================================================================
251 GeometryGUI::~GeometryGUI()
253 while (!myOCCSelectors.isEmpty())
254 delete myOCCSelectors.takeFirst();
256 while (!myVTKSelectors.isEmpty())
257 delete myVTKSelectors.takeFirst();
259 qDeleteAll(myGUIMap);
262 //=======================================================================
263 // function : GeometryGUI::getLibrary()
264 // purpose : get or load GUI library by name [ internal ]
265 //=======================================================================
266 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
267 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
269 if ( !myGUIMap.contains( libraryName ) ) {
270 // try to load library if it is not loaded yet
272 QString dirs = Qtx::getenv( "PATH" );
273 #elif defined(__APPLE__)
274 QString dirs = Qtx::getenv( "DYLD_LIBRARY_PATH" );
276 QString dirs = Qtx::getenv( "LD_LIBRARY_PATH" );
284 if ( !dirs.isEmpty() ) {
285 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
286 QListIterator<QString> it( dirList ); it.toBack();
287 while ( it.hasPrevious() ) {
288 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
290 OSD_SharedLibrary aSharedLibrary( fi.fileName().toUtf8().constData() );
291 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
293 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
294 continue; // continue search further
296 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
297 if ( osdF != NULL ) {
298 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
299 GEOMGUI* libGUI = (*func)( this );
301 myGUIMap[ libraryName ] = libGUI;
302 break; // found and loaded!
309 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
312 //=======================================================================
313 // function : GeometryGUI::getPluginLibrary()
314 // purpose : get or load GUI Plugin library by name [ internal ]
315 //=======================================================================
316 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
317 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
319 if ( !myGUIMap.contains( libraryName ) ) {
320 // try to load library if it is not loaded yet
323 QString dirs = Qtx::getenv( "PATH" );
324 #elif defined(__APPLE__)
325 QString dirs = Qtx::getenv( "DYLD_LIBRARY_PATH" );
327 QString dirs = Qtx::getenv( "LD_LIBRARY_PATH" );
335 if ( !dirs.isEmpty() ) {
336 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
337 QListIterator<QString> it( dirList ); it.toBack();
338 while ( it.hasPrevious() ) {
339 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
341 OSD_SharedLibrary aSharedLibrary( fi.fileName().toUtf8().constData() );
342 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
344 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
345 continue; // continue search further
347 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
348 if ( osdF != NULL ) {
349 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
350 GEOMPluginGUI* libGUI = (*func)( this );
352 myGUIMap[ libraryName ] = libGUI;
353 break; // found and loaded!
360 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
363 //=======================================================================
364 // function : GeometryGUI::ActiveWorkingPlane()
365 // purpose : Activate Working Plane View
366 //=======================================================================
367 void GeometryGUI::ActiveWorkingPlane()
369 gp_Dir DZ = myWorkingPlane.Direction();
370 gp_Dir DY = myWorkingPlane.YDirection();
372 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
373 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
374 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
377 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
379 Handle(V3d_View) view3d = vw->getViewPort()->getView();
381 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
382 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
386 else if ( ViewVTK ) {
387 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
389 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
391 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
392 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
393 camera->SetFocalPoint(0,0,0);
400 //=======================================================================
401 // function : GeometryGUI::SetActiveDialogBox()
402 // purpose : Set active dialog box
403 //=======================================================================
404 GEOMGUI_AnnotationMgr* GeometryGUI::GetAnnotationMgr()
406 if ( !myAnnotationMgr )
407 myAnnotationMgr = new GEOMGUI_AnnotationMgr( getApp() );
408 return myAnnotationMgr;
411 //=======================================================================
412 // function : GeometryGUI::SetActiveDialogBox()
413 // purpose : Set active dialog box
414 //=======================================================================
415 GEOMGUI_TextTreeWdg* GeometryGUI::GetTextTreeWdg() const
417 return myTextTreeWdg;
420 //=======================================================================
421 // function : GeometryGUI::SetActiveDialogBox()
422 // purpose : Set active dialog box
423 //=======================================================================
424 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
426 myActiveDialogBox = (QDialog*)aDlg;
429 //=======================================================================
430 // function : GeometryGUI::EmitSignalDeactivateDialog()
431 // purpose : Emit a signal to deactivate the active dialog Box
432 //=======================================================================
433 void GeometryGUI::EmitSignalDeactivateDialog()
435 emit SignalDeactivateActiveDialog();
438 //=======================================================================
439 // function : GeometryGUI::EmitSignalCloseAllDialogs()
440 // purpose : Emit a signal to close all non modal dialogs box
441 //=======================================================================
442 void GeometryGUI::EmitSignalCloseAllDialogs()
444 emit SignalCloseAllDialogs();
447 //=======================================================================
448 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
449 // purpose : Emit a signal to inform that default real spin box step has
451 //=======================================================================
452 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
454 emit SignalDefaultStepValueChanged(newVal);
457 //=======================================================================
458 // function : GeometryGUI::OnGUIEvent()
459 // purpose : common slot for all menu/toolbar actions
460 //=======================================================================
461 void GeometryGUI::OnGUIEvent()
463 const QObject* obj = sender();
464 if ( !obj || !obj->inherits( "QAction" ) )
466 int id = actionId((QAction*)obj);
471 //=======================================================================
472 // function : GeometryGUI::OnGUIEvent()
473 // purpose : manage all events on GUI [static]
474 //=======================================================================
475 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
477 SUIT_Application* anApp = application();
479 SUIT_Desktop* desk = anApp->desktop();
481 // check type of the active viewframe
482 SUIT_ViewWindow* window = desk->activeWindow();
483 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
484 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
485 #ifndef DISABLE_GRAPHICSVIEW
486 bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() );
490 // if current viewframe is not of OCC and not of VTK type - return immediately
491 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
492 QList<int> NotViewerDependentCommands;
493 NotViewerDependentCommands << GEOMOp::OpDelete
495 << GEOMOp::OpShowOnly
496 << GEOMOp::OpShowOnlyChildren
497 << GEOMOp::OpDiscloseChildren
498 << GEOMOp::OpConcealChildren
499 << GEOMOp::OpUnpublishObject
500 << GEOMOp::OpPublishObject
501 << GEOMOp::OpPointMarker
502 << GEOMOp::OpCreateFolder
503 << GEOMOp::OpSortChildren;
504 if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) {
505 // activate OCC viewer
506 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
509 // fix for IPAL9103, point 2
510 if ( CORBA::is_nil( GetGeomGen() ) ) {
511 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
516 // find corresponding GUI library
518 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
519 createOriginAndBaseVectors(); // internal operation
521 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
522 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
523 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
524 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
525 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
526 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
527 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
528 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
529 case GEOMOp::OpDelete: // MENU EDIT - DELETE
530 #ifndef DISABLE_PYCONSOLE
531 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
533 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
534 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
535 case GEOMOp::OpColor: // POPUP MENU - COLOR
536 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
537 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
538 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
539 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
540 case GEOMOp::OpIsos: // POPUP MENU - ISOS
541 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
542 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
543 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
544 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
545 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
546 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
547 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
548 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
549 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
550 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
551 case GEOMOp::OpMaterialMenu: // POPUP MENU - MATERIAL PROPERTIES (sub-menu)
552 case GEOMOp::OpPredefMaterial: // POPUP MENU - MATERIAL PROPERTIES (sub-menu) - <SOME MATERIAL>
553 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES (sub-menu) - CUSTOM...
554 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
555 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
556 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
557 case GEOMOp::OpClsBringToFront: //
558 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
559 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
560 #ifndef DISABLE_GRAPHICSVIEW
561 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
563 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
564 libName = "GEOMToolsGUI";
566 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
567 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
568 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
569 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
570 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
571 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
572 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
573 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
574 case GEOMOp::OpHide: // MENU VIEW - ERASE
575 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
576 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
577 case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE
578 case GEOMOp::OpSwitchName: // MENU VIEW - VERTICES MODE
579 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
580 case GEOMOp::OpShading: // POPUP MENU - SHADING
581 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
582 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
583 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
584 case GEOMOp::OpVertices: // POPUP MENU - VERTICES
585 case GEOMOp::OpShowName: // POPUP MENU - SHOW NAME
586 libName = "DisplayGUI";
588 case GEOMOp::OpPoint: // MENU BASIC - POINT
589 case GEOMOp::OpLine: // MENU BASIC - LINE
590 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
591 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
592 case GEOMOp::OpArc: // MENU BASIC - ARC
593 case GEOMOp::OpVector: // MENU BASIC - VECTOR
594 case GEOMOp::OpPlane: // MENU BASIC - PLANE
595 case GEOMOp::OpCurve: // MENU BASIC - CURVE
596 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
597 libName = "BasicGUI";
599 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
600 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
601 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
602 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
603 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
604 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
605 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
606 libName = "PrimitiveGUI";
608 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
609 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
610 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
611 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
612 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
613 case GEOMOp::OpThickness: // MENU GENERATION - THICKNESS
614 libName = "GenerationGUI";
616 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
617 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
618 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
619 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
620 case GEOMOp::OpSurfaceFromFace: // MENU ENTITY - SURFACE FROM FACE
622 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
624 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
625 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
626 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
627 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
628 case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR
629 libName = "EntityGUI";
631 case GEOMOp::OpEdge: // MENU BUILD - EDGE
632 case GEOMOp::OpWire: // MENU BUILD - WIRE
633 case GEOMOp::OpFace: // MENU BUILD - FACE
634 case GEOMOp::OpShell: // MENU BUILD - SHELL
635 case GEOMOp::OpSolid: // MENU BUILD - SOLID
636 case GEOMOp::OpCompound: // MENU BUILD - COMPOUND
637 libName = "BuildGUI";
639 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
640 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
641 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
642 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
643 libName = "BooleanGUI";
645 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
646 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
647 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
648 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
649 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
650 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
651 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
652 case GEOMOp::OpProjOnCyl: // MENU TRANSFORMATION - PROJECTION ON CYLINDER
653 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
654 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
655 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
656 case GEOMOp::OpExtension: // MENU TRANSFORMATION - EXTENSION
657 libName = "TransformationGUI";
659 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
660 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
661 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
662 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
663 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
664 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
665 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
666 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
667 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
668 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
669 case GEOMOp::OpTransferData: // MENU OPERATION - TRANSFER DATA
670 case GEOMOp::OpExtraction: // MENU OPERATION - EXTRACT AND REBUILD
671 libName = "OperationGUI";
673 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
674 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
675 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
676 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
677 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
678 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
679 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
680 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
681 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
682 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
683 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
684 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
685 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
686 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
687 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
688 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
689 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
690 case GEOMOp::OpInspectObj: // MENU REPAIR - INSPECT OBJECT
691 libName = "RepairGUI";
693 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
694 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
695 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
696 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
697 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
698 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
699 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
700 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
701 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
702 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
703 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
704 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
705 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
706 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
707 case GEOMOp::OpFastCheckInters: // MENU MEASURE - FAST CHECK INTERSECTIONS
708 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
709 case GEOMOp::OpAnnotation: // MENU MEASURE - ANNOTATION
710 case GEOMOp::OpEditAnnotation: // POPUP MENU - EDIT ANNOTATION
711 case GEOMOp::OpDeleteAnnotation: // POPUP MENU - DELETE ANNOTATION
712 #ifndef DISABLE_PLOT2DVIEWER
713 case GEOMOp::OpShapeStatistics: // MENU MEASURE - SHAPE STATISTICS
715 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
716 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
717 case GEOMOp::OpShowAllAnnotations: // POPUP MENU - SHOW ALL ANNOTATIONS
718 case GEOMOp::OpHideAllAnnotations: // POPUP MENU - HIDE ALL ANNOTATIONS
719 libName = "MeasureGUI";
721 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
722 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
723 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
724 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
725 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
726 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
727 libName = "GroupGUI";
729 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
730 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
731 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
732 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
733 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
734 libName = "BlocksGUI";
736 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
737 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
738 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
739 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
740 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
741 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
742 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
743 //libName = "AdvancedGUI";
746 if (myPluginActions.contains(id)) {
747 libName = myPluginActions[id].first;
749 GEOMPluginGUI* library = 0;
750 if ( !libName.isEmpty() ) {
752 libName = libName + ".dll";
753 #elif defined(__APPLE__)
754 libName = QString( "lib" ) + libName + ".dylib";
756 libName = QString( "lib" ) + libName + ".so";
758 library = getPluginLibrary( libName );
761 // call method of corresponding GUI library
763 //QString action ("%1");
764 //action = action.arg(id);
766 //if( !theParam.isValid() )
767 library->OnGUIEvent( myPluginActions[id].second, desk );
769 // library->OnGUIEvent( id, desk, theParam);
772 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
774 updateCreationInfo();
780 GEOMGUI* library = 0;
781 if ( !libName.isEmpty() ) {
783 libName = libName + ".dll";
784 #elif defined(__APPLE__)
785 libName = QString( "lib" ) + libName + ".dylib";
787 libName = QString( "lib" ) + libName + ".so";
789 library = getLibrary( libName );
792 // call method of corresponding GUI library
794 if( !theParam.isValid() )
795 library->OnGUIEvent( id, desk );
797 library->OnGUIEvent( id, desk, theParam);
800 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
802 updateCreationInfo();
805 //=================================================================================
806 // function : GeometryGUI::activateOperation()
808 //=================================================================================
809 bool GeometryGUI::activateOperation( int actionId )
811 OnGUIEvent(actionId);
815 //=================================================================================
816 // function : GeometryGUI::activateOperation()
818 //=================================================================================
819 bool GeometryGUI::activateOperation( const QString& actionId )
823 int id = actionId.toInt(&isOk);
830 //=================================================================================
831 // function : GeometryGUI::activateOperation()
833 //=================================================================================
834 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
838 QString pluginLib = plugin;
839 // TODO: if <plugin> is a plugin name, find plugin library name
840 if (myPluginLibs.contains(plugin))
841 pluginLib = myPluginLibs[plugin];
843 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
844 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
845 const PluginAction& anAction = actionsIter.value();
846 if (anAction.first == pluginLib && anAction.second == actionId) {
847 // activate operation
848 OnGUIEvent(actionsIter.key());
856 //=================================================================================
857 // function : GeometryGUI::OnKeyPress()
858 // purpose : Called when any key is pressed by user [static]
859 //=================================================================================
860 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
862 if ( !application() )
864 foreach ( GEOMGUI* lib, myGUIMap )
865 lib->OnKeyPress( e, application()->desktop(), w );
868 //=================================================================================
869 // function : GeometryGUI::OnMouseMove()
870 // purpose : Manages mouse move events [static]
871 //=================================================================================
872 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
874 if ( !application() )
876 foreach ( GEOMGUI* lib, myGUIMap )
877 lib->OnMouseMove( e, application()->desktop(), w );
880 //=================================================================================
881 // function : GeometryGUI::OnMouseRelease()
882 // purpose : Manages mouse release events [static]
883 //=================================================================================
884 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
886 if ( !application() )
888 foreach ( GEOMGUI* lib, myGUIMap )
889 lib->OnMouseRelease( e, application()->desktop(), w );
892 //=================================================================================
893 // function : GeometryGUI::OnMousePress()
894 // purpose : Manage mouse press events [static]
895 //=================================================================================
896 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
898 if ( !application() )
900 foreach ( GEOMGUI* lib, myGUIMap )
901 lib->OnMousePress( e, application()->desktop(), w );
904 //=======================================================================
905 // function : createGeomAction
907 //=======================================================================
908 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
909 const int accel, const bool toggle, const QString& shortcutAction )
911 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
912 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
913 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
915 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
917 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
918 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
920 application()->desktop(),
922 this, SLOT( OnGUIEvent() ),
926 //=======================================================================
927 // function : createOriginAndBaseVectors
929 //=======================================================================
930 void GeometryGUI::createOriginAndBaseVectors()
932 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
933 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
935 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
939 if ( !CORBA::is_nil( GetGeomGen() ) ) {
940 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations();
941 if ( !aBasicOperations->_is_nil() ) {
942 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
943 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
944 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
945 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
946 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
947 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
949 GetGeomGen()->PublishInStudy( SALOMEDS::SObject::_nil(), anOrigin, "O" );
950 GetGeomGen()->PublishInStudy( SALOMEDS::SObject::_nil(), anOX, "OX" );
951 GetGeomGen()->PublishInStudy( SALOMEDS::SObject::_nil(), anOY, "OY" );
952 GetGeomGen()->PublishInStudy( SALOMEDS::SObject::_nil(), anOZ, "OZ" );
953 anOrigin->UnRegister();
957 aBasicOperations->UnRegister();
959 getApp()->updateObjectBrowser( true );
965 //=======================================================================
966 // function : GeometryGUI::initialize()
967 // purpose : Called when GEOM module is created
968 //=======================================================================
969 void GeometryGUI::initialize( CAM_Application* app )
971 SalomeApp_Module::initialize( app );
973 // ----- create actions --------------
975 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
977 createGeomAction( GEOMOp::OpPoint, "POINT" );
978 createGeomAction( GEOMOp::OpLine, "LINE" );
979 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
980 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
981 createGeomAction( GEOMOp::OpArc, "ARC" );
982 createGeomAction( GEOMOp::OpCurve, "CURVE" );
983 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
984 createGeomAction( GEOMOp::OpVector, "VECTOR" );
985 createGeomAction( GEOMOp::OpPlane, "PLANE" );
986 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
987 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
988 createGeomAction( GEOMOp::OpSurfaceFromFace, "SURFACE_FROM_FACE" );
990 createGeomAction( GEOMOp::OpBox, "BOX" );
991 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
992 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
993 createGeomAction( GEOMOp::OpTorus, "TORUS" );
994 createGeomAction( GEOMOp::OpCone, "CONE" );
995 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
996 createGeomAction( GEOMOp::OpDisk, "DISK" );
998 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
999 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
1000 createGeomAction( GEOMOp::OpFilling, "FILLING" );
1001 createGeomAction( GEOMOp::OpPipe, "PIPE" );
1002 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
1003 createGeomAction( GEOMOp::OpThickness, "THICKNESS" );
1005 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
1006 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
1007 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
1008 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
1009 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
1011 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
1012 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
1014 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
1016 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
1017 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
1019 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
1020 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
1021 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
1023 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
1025 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
1026 createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" );
1028 createGeomAction( GEOMOp::OpEdge, "EDGE" );
1029 createGeomAction( GEOMOp::OpWire, "WIRE" );
1030 createGeomAction( GEOMOp::OpFace, "FACE" );
1031 createGeomAction( GEOMOp::OpShell, "SHELL" );
1032 createGeomAction( GEOMOp::OpSolid, "SOLID" );
1033 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
1035 createGeomAction( GEOMOp::OpFuse, "FUSE" );
1036 createGeomAction( GEOMOp::OpCommon, "COMMON" );
1037 createGeomAction( GEOMOp::OpCut, "CUT" );
1038 createGeomAction( GEOMOp::OpSection, "SECTION" );
1040 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
1041 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
1042 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
1043 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
1044 createGeomAction( GEOMOp::OpScale, "SCALE" );
1045 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
1046 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
1047 createGeomAction( GEOMOp::OpProjOnCyl, "PROJ_ON_CYL" );
1048 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
1049 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
1050 createGeomAction( GEOMOp::OpExtension, "EXTENSION" );
1052 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
1053 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
1054 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
1055 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
1056 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
1057 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
1058 createGeomAction( GEOMOp::OpTransferData, "TRANSFER_DATA" );
1059 createGeomAction( GEOMOp::OpExtraction, "EXTRACTION" );
1060 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
1061 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
1062 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
1063 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
1065 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
1066 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
1067 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
1069 createGeomAction( GEOMOp::OpSewing, "SEWING" );
1070 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
1071 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
1072 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
1073 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
1074 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
1075 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
1076 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
1077 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
1078 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
1079 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
1080 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
1081 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1082 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1083 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1084 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1085 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1086 createGeomAction( GEOMOp::OpInspectObj, "INSPECT_OBJECT" );
1088 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1089 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1090 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1091 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1092 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1093 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1094 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1095 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1096 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1097 createGeomAction( GEOMOp::OpAnnotation, "ANNOTATION" );
1098 createGeomAction( GEOMOp::OpEditAnnotation, "EDIT_ANNOTATION" );
1099 createGeomAction( GEOMOp::OpDeleteAnnotation, "DELETE_ANNOTATION" );
1101 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1102 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1103 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1104 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1105 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1106 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1107 createGeomAction( GEOMOp::OpFastCheckInters, "FAST_CHECK_INTERSECTIONS" );
1108 #ifndef DISABLE_PLOT2DVIEWER
1109 createGeomAction( GEOMOp::OpShapeStatistics, "SHAPE_STATISTICS" );
1112 #ifndef DISABLE_PYCONSOLE
1113 #ifdef _DEBUG_ // PAL16821
1114 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1118 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1119 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1120 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1121 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1122 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1123 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1124 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1125 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1126 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1127 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1128 createGeomAction( GEOMOp::OpSwitchName, "NAME_MODE");
1129 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1130 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1131 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1132 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1133 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1134 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1135 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1136 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1137 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1138 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1139 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1140 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1141 createGeomAction( GEOMOp::OpHide, "ERASE" );
1143 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1144 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1145 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1146 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1147 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1148 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1149 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1150 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1151 createGeomAction( GEOMOp::OpShowName, "POP_SHOW_NAME", "", 0, true );
1152 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1153 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1154 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1155 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1156 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1157 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1158 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1159 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1160 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1161 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1162 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1163 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1164 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1165 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1166 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1167 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1168 createGeomAction( GEOMOp::OpMaterialMenu, "POP_MATERIAL_PROPERTIES");
1169 action(GEOMOp::OpMaterialMenu)->setMenu( new QMenu() );
1170 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1171 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1172 #ifndef DISABLE_GRAPHICSVIEW
1173 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1175 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1176 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1177 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1178 createGeomAction( GEOMOp::OpShowAllAnnotations, "POP_SHOW_ALL_ANNOTATIONS" );
1179 createGeomAction( GEOMOp::OpHideAllAnnotations, "POP_HIDE_ALL_ANNOTATIONS" );
1181 // Create actions for increase/decrease transparency shortcuts
1182 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1183 "Geometry:Increase transparency");
1184 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1185 "Geometry:Decrease transparency");
1187 // Create actions for increase/decrease number of isolines
1188 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1189 "Geometry:Increase number of isolines");
1190 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1191 "Geometry:Decrease number of isolines");
1193 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1194 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1195 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1196 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1197 //@@ 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 @@//
1199 // ---- create menus --------------------------
1201 /*int fileId =*/ createMenu( tr( "MEN_FILE" ), -1, -1 );
1203 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1204 createMenu( GEOMOp::OpDelete, editId, -1 );
1206 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1208 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1209 createMenu( GEOMOp::OpPoint, basicId, -1 );
1210 createMenu( GEOMOp::OpLine, basicId, -1 );
1211 createMenu( GEOMOp::OpCircle, basicId, -1 );
1212 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1213 createMenu( GEOMOp::OpArc, basicId, -1 );
1214 createMenu( GEOMOp::OpCurve, basicId, -1 );
1215 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1216 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1217 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1218 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1219 createMenu( GEOMOp::OpSurfaceFromFace, basicId, -1 );
1220 createMenu( separator(), basicId, -1 );
1221 createMenu( GEOMOp::OpVector, basicId, -1 );
1222 createMenu( GEOMOp::OpPlane, basicId, -1 );
1223 createMenu( GEOMOp::OpLCS, basicId, -1 );
1224 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1226 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1227 createMenu( GEOMOp::OpBox, primId, -1 );
1228 createMenu( GEOMOp::OpCylinder, primId, -1 );
1229 createMenu( GEOMOp::OpSphere, primId, -1 );
1230 createMenu( GEOMOp::OpTorus, primId, -1 );
1231 createMenu( GEOMOp::OpCone, primId, -1 );
1232 createMenu( GEOMOp::OpRectangle, primId, -1 );
1233 createMenu( GEOMOp::OpDisk, primId, -1 );
1234 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1236 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1237 createMenu( GEOMOp::OpPrism, genId, -1 );
1238 createMenu( GEOMOp::OpRevolution, genId, -1 );
1239 createMenu( GEOMOp::OpFilling, genId, -1 );
1240 createMenu( GEOMOp::OpPipe, genId, -1 );
1241 createMenu( GEOMOp::OpPipePath, genId, -1 );
1242 createMenu( GEOMOp::OpThickness, genId, -1 );
1244 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1245 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1246 //@@ 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 @@//
1248 createMenu( separator(), newEntId, -1 );
1250 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1251 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1252 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1253 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1254 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1255 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1257 createMenu( separator(), newEntId, -1 );
1259 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1260 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1261 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1263 createMenu( separator(), newEntId, -1 );
1265 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1266 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1267 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1268 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1269 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1271 createMenu( separator(), newEntId, -1 );
1273 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1275 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1276 createMenu( GEOMOp::OpEdge, buildId, -1 );
1277 createMenu( GEOMOp::OpWire, buildId, -1 );
1278 createMenu( GEOMOp::OpFace, buildId, -1 );
1279 createMenu( GEOMOp::OpShell, buildId, -1 );
1280 createMenu( GEOMOp::OpSolid, buildId, -1 );
1281 createMenu( GEOMOp::OpCompound, buildId, -1 );
1283 createMenu( separator(), newEntId, -1 );
1285 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1287 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1290 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1292 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1293 createMenu( GEOMOp::OpFuse, boolId, -1 );
1294 createMenu( GEOMOp::OpCommon, boolId, -1 );
1295 createMenu( GEOMOp::OpCut, boolId, -1 );
1296 createMenu( GEOMOp::OpSection, boolId, -1 );
1298 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1299 createMenu( GEOMOp::OpTranslate, transId, -1 );
1300 createMenu( GEOMOp::OpRotate, transId, -1 );
1301 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1302 createMenu( GEOMOp::OpMirror, transId, -1 );
1303 createMenu( GEOMOp::OpScale, transId, -1 );
1304 createMenu( GEOMOp::OpOffset, transId, -1 );
1305 createMenu( GEOMOp::OpProjection, transId, -1 );
1306 createMenu( GEOMOp::OpExtension, transId, -1 );
1307 createMenu( GEOMOp::OpProjOnCyl, transId, -1 );
1308 createMenu( separator(), transId, -1 );
1309 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1310 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1312 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1313 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1314 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1315 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1317 createMenu( separator(), operId, -1 );
1319 createMenu( GEOMOp::OpPartition, operId, -1 );
1320 createMenu( GEOMOp::OpArchimede, operId, -1 );
1321 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1322 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1323 createMenu( GEOMOp::OpTransferData, operId, -1 );
1324 createMenu( GEOMOp::OpExtraction, operId, -1 );
1326 createMenu( separator(), operId, -1 );
1328 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1329 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1330 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1331 createMenu( GEOMOp::OpChamfer, operId, -1 );
1332 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1333 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1335 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1336 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1337 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1338 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1339 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1340 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1341 createMenu( GEOMOp::OpSewing, repairId, -1 );
1342 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1343 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1344 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1345 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1346 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1347 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1348 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1349 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1350 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1351 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1352 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1354 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1355 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1356 createMenu( GEOMOp::OpProperties, measurId, -1 );
1357 createMenu( separator(), measurId, -1 );
1358 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1359 createMenu( GEOMOp::OpInertia, measurId, -1 );
1360 createMenu( GEOMOp::OpNormale, measurId, -1 );
1361 createMenu( separator(), measurId, -1 );
1362 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1363 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1364 createMenu( separator(), measurId, -1 );
1366 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1367 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1368 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1369 createMenu( GEOMOp::OpAngle, dimId, -1 );
1370 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1372 createMenu( GEOMOp::OpAnnotation, measurId, -1 );
1374 createMenu( separator(), measurId, -1 );
1375 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1376 createMenu( separator(), measurId, -1 );
1377 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1378 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1379 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1380 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1381 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1382 createMenu( GEOMOp::OpFastCheckInters, measurId, -1 );
1383 createMenu( GEOMOp::OpInspectObj, measurId, -1 );
1384 #ifndef DISABLE_PLOT2DVIEWER
1385 createMenu( GEOMOp::OpShapeStatistics, measurId, -1 );
1388 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1389 #ifndef DISABLE_PYCONSOLE
1390 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1391 createMenu( separator(), toolsId, -1 );
1392 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1396 createMenu( separator(), toolsId, -1 );
1397 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1398 createMenu( separator(), toolsId, -1 );
1400 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1401 createMenu( separator(), viewId, -1 );
1403 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1404 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1405 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1406 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1407 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1408 createMenu( separator(), dispmodeId, -1 );
1409 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1410 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1411 createMenu( GEOMOp::OpSwitchName, dispmodeId, -1 );
1413 createMenu( separator(), viewId, -1 );
1414 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1415 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1416 createMenu( separator(), viewId, -1 );
1417 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1418 createMenu( separator(), viewId, -1 );
1422 because of these items are accessible through object browser and viewers
1423 we have removed they from main menu
1425 createMenu( GEOMOp::OpShow, viewId, -1 );
1426 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1427 createMenu( GEOMOp::OpHide, viewId, -1 );
1430 // ---- create toolbars --------------------------
1432 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1433 createTool( GEOMOp::OpPoint, basicTbId );
1434 createTool( GEOMOp::OpLine, basicTbId );
1435 createTool( GEOMOp::OpCircle, basicTbId );
1436 createTool( GEOMOp::OpEllipse, basicTbId );
1437 createTool( GEOMOp::OpArc, basicTbId );
1438 createTool( GEOMOp::OpCurve, basicTbId );
1439 createTool( GEOMOp::OpVector, basicTbId );
1440 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1441 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1442 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1443 createTool( GEOMOp::OpIsoline, basicTbId );
1444 createTool( GEOMOp::OpSurfaceFromFace, basicTbId );
1445 createTool( GEOMOp::OpPlane, basicTbId );
1446 createTool( GEOMOp::OpLCS, basicTbId );
1447 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1449 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1450 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1451 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1453 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1454 createTool( GEOMOp::OpBox, primTbId );
1455 createTool( GEOMOp::OpCylinder, primTbId );
1456 createTool( GEOMOp::OpSphere, primTbId );
1457 createTool( GEOMOp::OpTorus, primTbId );
1458 createTool( GEOMOp::OpCone, primTbId );
1459 createTool( GEOMOp::OpRectangle, primTbId );
1460 createTool( GEOMOp::OpDisk, primTbId );
1461 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1463 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1464 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1465 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1467 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1468 createTool( GEOMOp::OpFuse, boolTbId );
1469 createTool( GEOMOp::OpCommon, boolTbId );
1470 createTool( GEOMOp::OpCut, boolTbId );
1471 createTool( GEOMOp::OpSection, boolTbId );
1473 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1474 createTool( GEOMOp::OpPrism, genTbId );
1475 createTool( GEOMOp::OpRevolution, genTbId );
1476 createTool( GEOMOp::OpFilling, genTbId );
1477 createTool( GEOMOp::OpPipe, genTbId );
1478 createTool( GEOMOp::OpPipePath, genTbId );
1479 createTool( GEOMOp::OpThickness, genTbId );
1481 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1482 createTool( GEOMOp::OpTranslate, transTbId );
1483 createTool( GEOMOp::OpRotate, transTbId );
1484 createTool( GEOMOp::OpChangeLoc, transTbId );
1485 createTool( GEOMOp::OpMirror, transTbId );
1486 createTool( GEOMOp::OpScale, transTbId );
1487 createTool( GEOMOp::OpOffset, transTbId );
1488 createTool( GEOMOp::OpProjection, transTbId );
1489 createTool( GEOMOp::OpExtension, transTbId );
1490 createTool( GEOMOp::OpProjOnCyl, transTbId );
1491 createTool( separator(), transTbId );
1492 createTool( GEOMOp::OpMultiTranslate, transTbId );
1493 createTool( GEOMOp::OpMultiRotate, transTbId );
1495 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1496 createTool( GEOMOp::OpExplode, operTbId );
1497 createTool( GEOMOp::OpPartition, operTbId );
1498 createTool( GEOMOp::OpArchimede, operTbId );
1499 createTool( GEOMOp::OpShapesOnShape, operTbId );
1500 createTool( GEOMOp::OpSharedShapes, operTbId );
1501 createTool( GEOMOp::OpTransferData, operTbId );
1502 createTool( GEOMOp::OpExtraction, operTbId );
1504 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1505 createTool( GEOMOp::OpFillet1d, featTbId );
1506 createTool( GEOMOp::OpFillet2d, featTbId );
1507 createTool( GEOMOp::OpFillet3d, featTbId );
1508 createTool( GEOMOp::OpChamfer, featTbId );
1509 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1510 createTool( GEOMOp::OpExtrudedCut, featTbId );
1512 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1513 createTool( GEOMOp::OpEdge, buildTbId );
1514 createTool( GEOMOp::OpWire, buildTbId );
1515 createTool( GEOMOp::OpFace, buildTbId );
1516 createTool( GEOMOp::OpShell, buildTbId );
1517 createTool( GEOMOp::OpSolid, buildTbId );
1518 createTool( GEOMOp::OpCompound, buildTbId );
1520 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1521 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1522 createTool( GEOMOp::OpProperties, measureTbId );
1523 createTool( GEOMOp::OpCenterMass, measureTbId );
1524 createTool( GEOMOp::OpInertia, measureTbId );
1525 createTool( GEOMOp::OpNormale, measureTbId );
1526 createTool( separator(), measureTbId );
1527 createTool( GEOMOp::OpBoundingBox, measureTbId );
1528 createTool( GEOMOp::OpMinDistance, measureTbId );
1529 createTool( GEOMOp::OpAngle, measureTbId );
1530 createTool( GEOMOp::OpAnnotation, measureTbId );
1531 createTool( GEOMOp::OpTolerance , measureTbId );
1532 createTool( separator(), measureTbId );
1533 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1534 createTool( GEOMOp::OpFreeFaces, measureTbId );
1535 createTool( separator(), measureTbId );
1536 createTool( GEOMOp::OpWhatIs, measureTbId );
1537 createTool( GEOMOp::OpCheckShape, measureTbId );
1538 createTool( GEOMOp::OpCheckCompound, measureTbId );
1539 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1540 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1541 createTool( GEOMOp::OpFastCheckInters, measureTbId );
1543 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1544 createTool( GEOMOp::OpPictureImport, picturesTbId );
1546 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1549 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1550 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1551 //@@ 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 @@//
1553 // ---- create popup menus --------------------------
1555 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1556 QString clientOCC = "(client='OCCViewer')";
1557 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1558 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1560 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1561 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1562 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1563 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1565 QString autoColorPrefix =
1566 "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') and type='Shape' and selcount=1";
1568 QtxPopupMgr* mgr = popupMgr();
1570 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1571 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1572 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1573 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1574 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1575 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1576 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1577 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1579 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1580 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1581 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1582 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1583 mgr->insert( separator(), -1, -1 ); // -----------
1585 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1586 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1587 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1588 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1589 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1590 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1591 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1592 mgr->insert( separator(), -1, -1 ); // -----------
1593 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1594 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1595 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1596 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1597 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1598 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1599 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1600 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1601 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1602 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1603 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1604 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1605 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1606 mgr->insert( separator(), dispmodeId, -1 );
1607 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1608 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1609 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1610 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1611 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1612 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1613 mgr->insert( action( GEOMOp::OpShowName ), dispmodeId, -1 ); // show name
1614 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1615 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK + " and isNameMode", QtxPopupMgr::ToggleRule );
1616 mgr->insert( separator(), -1, -1 ); // -----------
1618 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1619 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1620 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1621 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1622 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1623 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1624 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1625 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1626 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1627 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1629 // material properties
1630 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1631 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'}) and matMenu=false", QtxPopupMgr::VisibleRule );
1632 mgr->insert( action( GEOMOp::OpMaterialMenu ), -1, -1 );
1633 mgr->setRule( action( GEOMOp::OpMaterialMenu ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'}) and matMenu=true", QtxPopupMgr::VisibleRule );
1636 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1637 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1639 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1640 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1641 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1643 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1644 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1646 mgr->insert( separator(), -1, -1 ); // -----------
1647 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1648 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1649 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1650 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1651 mgr->insert( separator(), -1, -1 ); // -----------
1653 mgr->insert( action( GEOMOp::OpEditAnnotation ), -1, -1 ); // edit annotation
1654 mgr->setRule( action( GEOMOp::OpEditAnnotation ), clientOCC + " and annotationsCount=1", QtxPopupMgr::VisibleRule );
1655 mgr->insert( action( GEOMOp::OpDeleteAnnotation ), -1, -1 ); // delete annotation
1656 mgr->setRule( action( GEOMOp::OpDeleteAnnotation ), clientOCC + " and annotationsCount>0", QtxPopupMgr::VisibleRule );
1657 mgr->insert( separator(), -1, -1 ); // -----------
1659 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1660 onlyComponent = "((type='Component') and selcount=1)",
1661 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1662 types = "'Shape' 'Group' 'FieldStep'";
1664 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1665 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1667 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1668 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1670 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1671 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1673 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1675 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1676 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1677 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1678 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1679 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1680 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1681 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1682 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1683 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1684 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1685 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1686 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1687 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1688 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1689 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1690 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1691 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1692 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1693 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1694 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1695 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1696 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1697 mgr->insert( separator(), selectonlyId, -1);
1698 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1699 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1700 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1701 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1702 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1703 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1704 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1706 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1708 mgr->insert( separator(), -1, -1 ); // -----------
1709 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1710 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1711 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1712 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1713 mgr->insert( action( GEOMOp::OpShowAllAnnotations ), -1, -1 ); // show all annotations
1714 mgr->setRule( action( GEOMOp::OpShowAllAnnotations ), aDimensionRule.arg( "hasHiddenAnnotations" ), QtxPopupMgr::VisibleRule );
1715 mgr->insert( action( GEOMOp::OpHideAllAnnotations ), -1, -1 ); // hide all annotations
1716 mgr->setRule( action( GEOMOp::OpHideAllAnnotations ), aDimensionRule.arg( "hasVisibleAnnotations" ), QtxPopupMgr::VisibleRule );
1718 mgr->insert( separator(), -1, -1 ); // -----------
1719 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1720 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1722 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1723 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1725 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1726 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1728 mgr->insert( separator(), -1, -1 ); // -----------
1729 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1730 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1732 mgr->insert( separator(), -1, -1 ); // -----------
1733 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1734 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1736 #ifndef DISABLE_GRAPHICSVIEW
1737 mgr->insert( separator(), -1, -1 ); // -----------
1738 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1739 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1742 mgr->insert( separator(), -1, -1 ); // -----------
1743 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1744 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1746 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1748 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1750 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1751 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1752 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1755 // create plugin actions and menus
1759 //=======================================================================
1760 // function : GeometryGUI::addPluginActions()
1762 //=======================================================================
1763 void GeometryGUI::addPluginActions()
1766 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1767 if (!resMgr) return;
1769 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1770 if (!appStudy) return;
1772 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1774 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1776 int id = GEOMOp::OpLastOperationID; // TODO?
1779 GEOMUtils::PluginInfo::const_iterator it;
1780 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1781 // bind action lib and label to its ID for activateOperation() method proper work
1782 GEOMUtils::PluginData pdata = (*it);
1783 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1784 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1785 std::list<GEOMUtils::ActionData>::const_iterator ait;
1786 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1787 GEOMUtils::ActionData adata = (*ait);
1790 if ( !adata.icon.empty() )
1791 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1793 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1794 QString actionName = smenus.last();
1795 actionName = actionName.toUpper().prepend( "MEN_" );
1796 smenus.removeLast();
1798 // path to action in toolbar
1799 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1800 QString actionTool = stools.last();
1801 actionTool = actionTool.toUpper().prepend( "TOP_" );
1802 stools.removeLast();
1804 QString actionStat = adata.statusText.c_str();
1805 actionStat = actionStat.toUpper().prepend( "STB_" );
1807 createAction( id, // ~ adata.label
1808 tr( actionTool.toLatin1().constData() ),
1810 tr( actionName.toLatin1().constData() ),
1811 tr( actionStat.toLatin1().constData() ),
1812 QKeySequence( tr( adata.accel.c_str() ) ),
1813 application()->desktop(),
1815 this, SLOT( OnGUIEvent() ),
1816 QString() /*shortcutAction*/ );
1819 foreach ( QString subMenu, smenus ) {
1820 QStringList subMenuList = subMenu.split( ":" );
1821 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1822 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1823 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1825 createMenu( id, menuId, -1 );
1827 if ( !stools.isEmpty() ) {
1828 QString subTool = stools[0];
1829 subTool = subTool.toUpper().prepend( "TOOL_" );
1830 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1831 createTool(id, toolId);
1834 // add action id to map
1835 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1836 myPluginActions[id] = anAction;
1843 //=======================================================================
1844 // function : GeometryGUI::activateModule()
1845 // purpose : Called when GEOM module is activated
1846 //=======================================================================
1847 bool GeometryGUI::activateModule( SUIT_Study* study )
1849 if ( CORBA::is_nil( myComponentGeom ) )
1852 bool res = SalomeApp_Module::activateModule( study );
1856 setMenuShown( true );
1857 setToolShown( true );
1859 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1860 PyGILState_STATE gstate = PyGILState_Ensure();
1861 PyObject* pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1862 if ( !pluginsmanager ) {
1867 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1868 tr("MEN_NEW_ENTITY").toUtf8().data(),
1869 tr("GEOM_PLUGINS_OTHER").toUtf8().data());
1874 PyGILState_Release(gstate);
1875 // end of GEOM plugins loading
1877 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1878 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ), Qt::UniqueConnection );
1880 // Reset actions accelerator keys
1881 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1883 GUIMap::Iterator it;
1884 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1885 it.value()->activate( application()->desktop() );
1887 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1889 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ), Qt::UniqueConnection );
1890 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ), Qt::UniqueConnection );
1891 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ), Qt::UniqueConnection );
1893 if ( !myCreationInfoWdg )
1894 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1895 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1896 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1898 if ( !myTextTreeWdg ) {
1899 myTextTreeWdg = new GEOMGUI_TextTreeWdg( getApp() );
1900 new GEOMGUI_TextTreeSelector( myTextTreeWdg, GetAnnotationMgr(), getApp()->selectionMgr() );
1903 getApp()->insertDockWindow( myTextTreeWdg->getWinID(), myTextTreeWdg );
1904 getApp()->placeDockWindow( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
1907 SALOME_ListIO selected;
1908 sm->selectedObjects( selected );
1909 sm->clearSelected();
1911 SUIT_ViewManager* vm;
1912 ViewManagerList OCCViewManagers, VTKViewManagers;
1914 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1915 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1916 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1917 onViewManagerAdded(vm);
1919 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1920 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1921 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1922 onViewManagerAdded(vm);
1924 sm->setSelectedObjects( selected, true ); //NPAL 19674
1926 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1928 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ), Qt::UniqueConnection );
1930 // 0020836 (Basic vectors and origin)
1931 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1932 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1933 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1935 _PTR(Study) studyDS = appStudy->studyDS();
1937 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1938 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1939 createOriginAndBaseVectors();
1944 Py_XDECREF(pluginsmanager);
1948 //=======================================================================
1949 // function : GeometryGUI::deactivateModule()
1950 // purpose : Called when GEOM module is deactivated
1951 //=======================================================================
1952 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1954 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1956 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1958 setMenuShown( false );
1959 setToolShown( false );
1961 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1962 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1964 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1966 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1967 //disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1968 if ( myCreationInfoWdg ) {
1969 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1970 myCreationInfoWdg = 0;
1972 if ( myTextTreeWdg ) {
1973 getApp()->removeDockWindow( myTextTreeWdg->getWinID() );
1974 disconnect( application(), 0, myTextTreeWdg, 0 );
1978 EmitSignalCloseAllDialogs();
1980 GUIMap::Iterator it;
1981 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1982 it.value()->deactivate();
1984 // Unset actions accelerator keys
1985 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1987 qDeleteAll(myOCCSelectors);
1988 myOCCSelectors.clear();
1989 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1991 qDeleteAll(myVTKSelectors);
1992 myVTKSelectors.clear();
1993 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1995 return SalomeApp_Module::deactivateModule( study );
1998 //=======================================================================
1999 // function : onWindowActivated()
2000 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
2001 //=======================================================================
2002 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
2007 const bool ViewOCC = ( win->getViewManager() ? win->getViewManager()->getType() == OCCViewer_Viewer::Type() : false );
2008 //const bool ViewVTK = ( win->getViewManager() ? win->getViewManager()->getType() == SVTK_Viewer::Type() : false );
2010 // disable non-OCC viewframe menu commands
2011 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
2012 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
2013 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
2014 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
2015 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
2016 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
2017 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
2019 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
2020 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
2021 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
2022 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
2024 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
2027 void GeometryGUI::windows( QMap<int, int>& mappa ) const
2029 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
2030 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
2031 #ifndef DISABLE_PYCONSOLE
2032 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
2034 if ( myCreationInfoWdg )
2035 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
2036 if ( myTextTreeWdg )
2037 mappa.insert( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
2040 void GeometryGUI::viewManagers( QStringList& lst ) const
2042 lst.append( OCCViewer_Viewer::Type() );
2045 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
2047 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
2049 qDebug( "connect" );
2050 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
2051 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
2052 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
2053 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
2054 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
2055 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
2056 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
2057 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
2059 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2060 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
2062 // disable OCC selectors
2063 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
2064 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2065 while ( itOCCSel.hasNext() )
2066 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2067 sr->setEnabled(true);
2069 else if ( vm->getType() == SVTK_Viewer::Type() )
2071 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2072 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
2074 // disable VTK selectors
2075 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
2076 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2077 while ( itVTKSel.hasNext() )
2078 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2079 sr->setEnabled(true);
2083 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
2085 SUIT_ViewModel* viewer = vm->getViewModel();
2086 if ( vm->getType() == OCCViewer_Viewer::Type() )
2088 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2089 while ( itOCCSel.hasNext() )
2090 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2091 if ( sr->viewer() == viewer )
2093 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
2097 if ( vm->getType() == SVTK_Viewer::Type() )
2099 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2100 while ( itVTKSel.hasNext() )
2101 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2102 if ( sr->viewer() == viewer )
2104 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2108 SOCC_Viewer* aSOCCView = dynamic_cast<SOCC_Viewer*>(viewer);
2110 GetAnnotationMgr()->RemoveView( aSOCCView );
2114 //================================================================================
2116 * \brief Slot called when selection changed. Shows creation info of a selected object
2118 //================================================================================
2120 void GeometryGUI::updateCreationInfo()
2122 if ( myCreationInfoWdg )
2123 myCreationInfoWdg->clear();
2125 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2126 // if ( !myCreationInfoWdg->isVisible() )
2129 // look for a sole selected GEOM_Object
2130 GEOM::GEOM_BaseObject_var geomObj;
2132 SALOME_ListIO selected;
2133 getApp()->selectionMgr()->selectedObjects( selected );
2135 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2136 SALOME_ListIteratorOfListIO selIt( selected );
2137 for ( ; selIt.More(); selIt.Next() )
2139 Handle(SALOME_InteractiveObject) io = selIt.Value();
2140 if ( !io->hasEntry() ) continue;
2141 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2142 if ( !GeometryGUI::IsInGeomComponent( sobj )) continue;
2143 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2144 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2145 if ( !gobj->_is_nil() )
2147 if ( !geomObj->_is_nil() )
2148 return; // several GEOM objects selected
2152 if ( geomObj->_is_nil() ) return;
2154 // pass creation info of geomObj to myCreationInfoWdg
2156 if ( myCreationInfoWdg ) {
2158 GEOM::CreationInformationSeq_var info;
2161 info = geomObj->GetCreationInformation();
2165 myCreationInfoWdg->setInfo( info );
2169 void GeometryGUI::onAutoBringToFront()
2171 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2172 if( !isAutoBringToFront )
2175 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2176 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2179 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2180 if (!appStudy) return;
2182 GEOM_Displayer displayer;
2184 SALOME_View* window = displayer.GetActiveView();
2185 if ( !window ) return;
2187 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2189 SALOME_ListIO selected;
2190 getApp()->selectionMgr()->selectedObjects( selected );
2191 if (!myTopLevelIOList.IsEmpty())
2193 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2195 Handle( SALOME_InteractiveObject ) io = It.Value();
2196 bool isSelected = false;
2197 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2199 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2200 if( io->isSame( sel_io ) )
2203 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2205 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2206 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2211 myTopLevelIOList.Assign(selected);
2212 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2214 Handle( SALOME_InteractiveObject ) io = It.Value();
2215 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2216 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2219 displayer.UpdateViewer();
2220 GeometryGUI::Modified();
2223 void GeometryGUI::updateFieldColorScale()
2225 GEOM_Displayer aDisplayer;
2226 aDisplayer.UpdateColorScale();
2229 QString GeometryGUI::engineIOR() const
2231 if ( !CORBA::is_nil( GetGeomGen() ) )
2232 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2236 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture (int theId, int& theWidth, int& theHeight)
2238 theWidth = theHeight = 0;
2239 Handle(TColStd_HArray1OfByte) aTexture;
2241 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations();
2242 if ( !aInsOp->_is_nil() ) {
2243 CORBA::Long aWidth, aHeight;
2244 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2245 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2247 theHeight = aHeight;
2249 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2251 for ( CORBA::ULong i = 0; i < aStream->length(); i++)
2252 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2258 LightApp_Selection* GeometryGUI::createSelection() const
2260 return new GEOMGUI_Selection();
2263 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2265 SalomeApp_Module::contextMenuPopup( client, menu, title );
2267 getApp()->selectionMgr()->selectedObjects( lst );
2269 // Update submenu for predefined materials
2270 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2271 QMenu* matMenu = action( GEOMOp::OpMaterialMenu )->menu();
2273 QSignalMapper* signalMapper = new QSignalMapper( menu );
2276 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2277 if ( anApp && anApp->activeViewManager() ) {
2278 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2280 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2283 QString curModel = "";
2284 if ( v.canConvert<QString>() ) curModel = v.toString();
2286 // get list of all predefined materials
2287 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2289 foreach ( QString material, materials )
2291 QAction* a = matMenu->addAction( material );
2292 connect( a, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2293 signalMapper->setMapping( a, material );
2294 a->setCheckable( true );
2296 Material_Model aModel;
2297 aModel.fromResources( material );
2298 if ( !found && aModel.toProperties() == curModel ) {
2299 a->setChecked( true );
2303 matMenu->addSeparator();
2304 matMenu->addAction( action( GEOMOp::OpPredefMaterCustom ) );
2305 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2306 this, SLOT( OnSetMaterial( const QString & ) ) );
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 #if OCC_VERSION_LARGE <= 0x07030000
2445 Handle(Font_SystemFont) sf = new Font_SystemFont(
2446 new TCollection_HAsciiString("Y14.5M-2009"),
2448 new TCollection_HAsciiString(aFontFile.toLatin1().data()) );
2450 Handle(Font_SystemFont) sf = new Font_SystemFont( TCollection_AsciiString("Y14.5M-2009") );
2451 sf->SetFontPath( Font_FA_Regular,
2452 TCollection_AsciiString( aFontFile.toLatin1().data() ) );
2454 // register font in OCC font manager
2455 fmgr->RegisterFont( sf, Standard_False );
2457 // get list of supported fonts by OCC
2458 QStringList anOCCFonts;
2459 TColStd_SequenceOfHAsciiString theFontsNames;
2460 fmgr->GetAvailableFontsNames( theFontsNames );
2461 for(Standard_Integer i=1; i<=theFontsNames.Length(); i++) {
2462 Handle(TCollection_HAsciiString) str = theFontsNames(i);
2463 anOCCFonts << str->ToCString();
2465 anOCCFonts.removeDuplicates();
2466 // set the supported fonts into combobox to use its only
2467 setPreferenceProperty( aDimFontId, "fonts", anOCCFonts );
2469 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2470 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2472 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2473 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2474 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2476 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2477 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2479 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2480 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2482 QStringList aListOfLengthUnits;
2483 aListOfLengthUnits << "m";
2484 aListOfLengthUnits << "cm";
2485 aListOfLengthUnits << "mm";
2486 aListOfLengthUnits << "in.";
2487 aListOfLengthUnits << "ft.";
2489 QStringList aListOfAngUnits;
2490 aListOfAngUnits << "rad";
2491 aListOfAngUnits << "deg";
2493 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2494 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2496 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2497 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2499 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2500 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2502 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2503 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2504 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2506 addPreference( tr( "PREF_DIMENSIONS_USE_TEXT3D" ), aDimGroupId,
2507 LightApp_Preferences::Bool, "Geometry", "dimensions_use_text3d" );
2509 // --------------------------------------------------------------------------
2510 // Shape annotation preferences
2511 // --------------------------------------------------------------------------
2513 const int aShapeAnnGroupId = addPreference( tr( "PREF_SHAPE_ANNOTATIONS" ), tabId );
2514 setPreferenceProperty( aShapeAnnGroupId, "columns", 2 );
2516 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_FONT_COLOR" ), aShapeAnnGroupId, LightApp_Preferences::Color, "Geometry", "shape_annotation_font_color" );
2517 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_COLOR" ), aShapeAnnGroupId, LightApp_Preferences::Color, "Geometry", "shape_annotation_line_color" );
2518 const int aShapeAnnFont =
2519 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_FONT" ), aShapeAnnGroupId, LightApp_Preferences::Font, "Geometry", "shape_annotation_font" );
2521 int aShapeAnnFontFeatures = QtxFontEdit::Family | QtxFontEdit::Size | QtxFontEdit::Bold | QtxFontEdit::Italic;
2522 setPreferenceProperty( aShapeAnnFont, "features", aShapeAnnFontFeatures );
2523 setPreferenceProperty( aShapeAnnFont, "mode", QtxFontEdit::Custom );
2524 setPreferenceProperty( aShapeAnnFont, "fonts", anOCCFonts );
2526 const int aShapeAnnLineWidth =
2527 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_WIDTH" ), aShapeAnnGroupId, LightApp_Preferences::IntSpin, "Geometry", "shape_annotation_line_width" );
2529 setPreferenceProperty( aShapeAnnLineWidth, "min", 1 );
2530 setPreferenceProperty( aShapeAnnLineWidth, "max", 5 );
2532 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_AUTOHIDE" ), aShapeAnnGroupId, LightApp_Preferences::Bool, "Geometry", "shape_annotation_autohide" );
2534 const int aShapeAnnLineStyle =
2535 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_STYLE" ), aShapeAnnGroupId, LightApp_Preferences::Selector, "Geometry", "shape_annotation_line_style" );
2537 QStringList aLineStyleList;
2538 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_SOLID") );
2539 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DASH") );
2540 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DOT") );
2541 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DOTDASH") );
2543 QList<QVariant> aLineStyleIds;
2544 aLineStyleIds.append(0);
2545 aLineStyleIds.append(1);
2546 aLineStyleIds.append(2);
2547 aLineStyleIds.append(3);
2549 setPreferenceProperty( aShapeAnnLineStyle, "strings", aLineStyleList );
2550 setPreferenceProperty( aShapeAnnLineStyle, "indexes", aLineStyleIds );
2552 // --------------------------------------------------------------------------
2553 // Isoline drawing preferences
2554 // --------------------------------------------------------------------------
2556 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2557 setPreferenceProperty( isoGroup, "columns", 2 );
2558 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2559 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2560 setPreferenceProperty( isoU, "min", 0 );
2561 setPreferenceProperty( isoU, "max", 100000 );
2562 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2563 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2564 setPreferenceProperty( isoV, "min", 0 );
2565 setPreferenceProperty( isoV, "max", 100000 );
2567 // Quantities with individual precision settings
2568 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2569 setPreferenceProperty( precGroup, "columns", 2 );
2571 const int nbQuantities = 8;
2572 int prec[nbQuantities], ii = 0;
2573 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2574 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2575 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2576 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2577 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2578 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2579 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2580 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2581 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2582 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2583 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2584 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2585 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2586 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2587 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2588 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2590 // Set property for precision value for spinboxes
2591 for ( ii = 0; ii < nbQuantities; ii++ ){
2592 setPreferenceProperty( prec[ii], "min", -14 );
2593 setPreferenceProperty( prec[ii], "max", 14 );
2594 setPreferenceProperty( prec[ii], "precision", 2 );
2597 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2598 setPreferenceProperty( VertexGroup, "columns", 2 );
2600 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2601 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2603 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2604 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2606 // Set property for default display mode
2607 QStringList aModesList;
2608 aModesList.append( tr("MEN_WIREFRAME") );
2609 aModesList.append( tr("MEN_SHADING") );
2610 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2611 aModesList.append( tr("MEN_TEXTURE") );
2613 QList<QVariant> anIndexesList;
2614 anIndexesList.append(0);
2615 anIndexesList.append(1);
2616 anIndexesList.append(2);
2617 anIndexesList.append(3);
2619 setPreferenceProperty( dispmode, "strings", aModesList );
2620 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2622 // Set property for top level display mode
2623 QStringList aTopModesList;
2624 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2625 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2626 aTopModesList.append( tr("MEN_WIREFRAME") );
2627 aTopModesList.append( tr("MEN_SHADING") );
2628 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2630 QList<QVariant> aTopIndexesList;
2631 aTopIndexesList.append(0);
2632 aTopIndexesList.append(1);
2633 aTopIndexesList.append(2);
2634 aTopIndexesList.append(3);
2635 aTopIndexesList.append(4);
2637 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2638 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2640 // Set property for step value for spinboxes
2641 setPreferenceProperty( step, "min", 1 );
2642 setPreferenceProperty( step, "max", 10000 );
2643 setPreferenceProperty( step, "precision", 3 );
2645 // Set property for trandparency value for spinboxes
2646 setPreferenceProperty( transparency, "min", 0 );
2647 setPreferenceProperty( transparency, "max", 100 );
2649 // Set property for deflection value for spinboxes
2650 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2651 setPreferenceProperty( defl, "max", 1.0 );
2652 setPreferenceProperty( defl, "step", 1.0e-04 );
2653 setPreferenceProperty( defl, "precision", 6 );
2655 // Set property for default material
2656 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2658 // Set property vertex marker type
2659 QList<QVariant> aMarkerTypeIndicesList;
2660 QList<QVariant> aMarkerTypeIconsList;
2662 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2663 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2664 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2665 aMarkerTypeIndicesList << (i-1);
2666 aMarkerTypeIconsList << pixmap;
2669 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2670 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2672 // Set property for vertex marker scale
2673 QList<QVariant> aMarkerScaleIndicesList;
2674 QStringList aMarkerScaleValuesList;
2676 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2677 aMarkerScaleIndicesList << iii;
2678 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2681 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2682 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2684 // Scalar bar for field step presentation
2685 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2686 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2688 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2689 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2690 setPreferenceProperty( sbXPosition, "min", 0 );
2691 setPreferenceProperty( sbXPosition, "max", 1 );
2692 setPreferenceProperty( sbXPosition, "step", 0.05 );
2694 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2695 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2696 setPreferenceProperty( sbYPosition, "min", 0 );
2697 setPreferenceProperty( sbYPosition, "max", 1 );
2698 setPreferenceProperty( sbYPosition, "step", 0.05 );
2700 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2701 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2702 setPreferenceProperty( sbWidth, "min", 0 );
2703 setPreferenceProperty( sbWidth, "max", 1 );
2704 setPreferenceProperty( sbWidth, "step", 0.05 );
2706 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2707 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2708 setPreferenceProperty( sbHeight, "min", 0 );
2709 setPreferenceProperty( sbHeight, "max", 1 );
2710 setPreferenceProperty( sbHeight, "step", 0.05 );
2712 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2713 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2714 setPreferenceProperty( sbTextHeight, "min", 6 );
2715 setPreferenceProperty( sbTextHeight, "max", 24 );
2716 setPreferenceProperty( sbTextHeight, "step", 1 );
2718 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2719 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2720 setPreferenceProperty( sbNbIntervals, "min", 2 );
2721 setPreferenceProperty( sbNbIntervals, "max", 64 );
2722 setPreferenceProperty( sbNbIntervals, "step", 1 );
2724 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2725 setPreferenceProperty( originGroup, "columns", 2 );
2727 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2728 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2729 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2730 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2732 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2733 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2735 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2736 setPreferenceProperty( operationsGroup, "columns", 2 );
2738 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2739 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2741 addPreference( tr( "PREF_HIDE_INPUT_OBJECT" ), operationsGroup,
2742 LightApp_Preferences::Bool, "Geometry", "hide_input_object" );
2744 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2746 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2748 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2749 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2751 QStringList aHierarchyTypeList;
2752 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2753 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2754 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2756 QList<QVariant> aHierarchyTypeIndexesList;
2757 aHierarchyTypeIndexesList.append(0);
2758 aHierarchyTypeIndexesList.append(1);
2759 aHierarchyTypeIndexesList.append(2);
2761 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2762 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2764 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2765 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2767 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2769 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2770 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2772 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2773 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2774 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2775 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2776 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2777 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2778 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2779 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2781 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2782 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2783 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2784 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2785 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2786 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2793 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2795 if (section == "Geometry") {
2796 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2797 if (param == QString("SettingsGeomStep")) {
2798 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2799 EmitSignalDefaultStepValueChanged(spin_step);
2801 else if (param == QString("toplevel_color")) {
2802 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2803 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2805 else if (param == QString("toplevel_dm")) {
2806 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2808 else if (param == QString("scalar_bar_x_position") ||
2809 param == QString("scalar_bar_y_position") ||
2810 param == QString("scalar_bar_width") ||
2811 param == QString("scalar_bar_height") ||
2812 param == QString("scalar_bar_text_height") ||
2813 param == QString("scalar_bar_nb_intervals")) {
2814 updateFieldColorScale();
2816 else if ( param == QString("dimensions_color") ||
2817 param == QString("dimensions_line_width") ||
2818 param == QString("dimensions_font") ||
2819 param == QString("dimensions_arrow_length") ||
2820 param == QString("dimensions_show_units") ||
2821 param == QString("dimensions_length_units") ||
2822 param == QString("dimensions_angle_units") ||
2823 param == QString("dimensions_use_text3d") ||
2824 param == QString("shape_annotation_font_color") ||
2825 param == QString("shape_annotation_line_color") ||
2826 param == QString("shape_annotation_font") ||
2827 param == QString("shape_annotation_line_width") ||
2828 param == QString("shape_annotation_autohide") ||
2829 param == QString("shape_annotation_line_style") ||
2830 param == QString("shape_annotation_line_style") ||
2831 param == QString("label_color") )
2833 SalomeApp_Application* anApp = getApp();
2839 GEOM_Displayer aDisplayer;
2841 ViewManagerList aVMs;
2842 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2843 ViewManagerList::Iterator anIt = aVMs.begin();
2844 for ( ; anIt != aVMs.end(); ++anIt )
2846 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2852 SALOME_ListIO aVisible;
2853 aViewer->GetVisible( aVisible );
2855 GEOMGUI_AnnotationMgr* anAnnotationMgr = GetAnnotationMgr();
2856 if ( anAnnotationMgr ) {
2857 SALOME_ListIteratorOfListIO anIter( aVisible );
2858 while ( anIter.More() ) {
2859 if ( anAnnotationMgr->isAnnotationEntry( anIter.Value()->getEntry() ) ) {
2860 aVisible.Remove( anIter );
2868 aDisplayer.Redisplay( aVisible, false, aViewer );
2870 if ( param == QString( "label_color" ) ) {
2871 ViewManagerList aVMsVTK;
2872 anApp->viewManagers( SVTK_Viewer::Type(), aVMsVTK );
2873 ViewManagerList::Iterator anIt = aVMsVTK.begin();
2874 for ( ; anIt != aVMsVTK.end(); ++anIt )
2876 SVTK_Viewer* aViewer = dynamic_cast<SVTK_Viewer*>( (*anIt)->getViewModel() );
2881 SALOME_ListIO aVisible;
2882 aViewer->GetVisible( aVisible );
2883 aDisplayer.Redisplay( aVisible, false, aViewer );
2886 aDisplayer.UpdateViewer();
2888 else if ( param.startsWith( "dependency_tree") )
2889 emit SignalDependencyTreeParamChanged( section, param );
2893 LightApp_Displayer* GeometryGUI::displayer()
2896 myDisplayer = new GEOM_Displayer();
2900 void GeometryGUI::setLocalSelectionMode(const int mode)
2902 myLocalSelectionMode = mode;
2905 int GeometryGUI::getLocalSelectionMode() const
2907 return myLocalSelectionMode;
2910 const char gSeparator = '_'; // character used to separate parameter names
2911 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2914 * \brief Store visual parameters
2916 * This method is called just before the study document is saved.
2917 * Store visual parameters in AttributeParameter attribute(s)
2919 void GeometryGUI::storeVisualParameters (int savePoint)
2921 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2922 if ( !appStudy || !appStudy->studyDS() )
2925 _PTR(Study) studyDS = appStudy->studyDS();
2927 // componentName is used for encoding of entries when storing them in IParameters
2928 std::string componentName = myComponentGeom->ComponentDataType();
2929 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2930 //if (!aSComponent) return;
2933 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2934 componentName.c_str(),
2936 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2938 QSet<QString> anEntriesToStoreShared;
2939 QList<SUIT_ViewManager*> lst;
2940 QList<SUIT_ViewManager*>::Iterator it;
2942 GEOMGUI_AnnotationMgr* aAnnotationMgr = GetAnnotationMgr();
2944 // main cycle to store parameters of displayed objects
2946 getApp()->viewManagers(lst);
2947 for (it = lst.begin(); it != lst.end(); it++) {
2948 SUIT_ViewManager* vman = *it;
2949 QString vType = vman->getType();
2950 SUIT_ViewModel* vmodel = vman->getViewModel();
2951 SALOME_View* aView = dynamic_cast<SALOME_View*>(vmodel);
2953 int aMgrId = vman->getGlobalId();
2954 // saving VTK actors properties
2955 QVector<SUIT_ViewWindow*> views = vman->getViews();
2956 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2957 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
2958 ObjMap::ConstIterator o_it = anObjects.begin();
2959 for (; o_it != anObjects.end(); o_it++) {
2960 const PropMap& aProps = o_it.value();
2962 //Check that object exists in the study
2963 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toUtf8().data() ) );
2964 if ( !obj || !(aProps.count() > 0))
2966 // entry is "encoded" = it does NOT contain component address, since it is a
2967 // subject to change on next component loading
2969 std::string entry = ip->encodeEntry(o_it.key().toUtf8().data(), componentName);
2971 _PTR(GenericAttribute) anAttr;
2972 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2975 // remember entry of object to store shared GEOM properties
2976 // (e.g. dimension properties).
2977 if ( vType == OCCViewer_Viewer::Type() )
2979 anEntriesToStoreShared.insert( o_it.key() );
2982 QString param, occParam = vType;
2983 occParam += GEOM::sectionSeparator();
2984 occParam += QString::number(aMgrId);
2985 occParam += GEOM::sectionSeparator();
2987 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2988 param = occParam + GEOM::propertyName( GEOM::Visibility );
2989 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2992 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2993 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2994 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2997 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2998 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
3000 val << QString::number(c.redF());
3001 val << QString::number(c.greenF());
3002 val << QString::number(c.blueF());
3003 param = occParam + GEOM::propertyName( GEOM::Color );
3004 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
3007 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
3008 param = occParam + GEOM::propertyName( GEOM::Texture );
3009 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
3012 if (vType == SVTK_Viewer::Type()) {
3013 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
3014 param = occParam + GEOM::propertyName( GEOM::Opacity );
3015 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
3017 } else if (vType == SOCC_Viewer::Type()) {
3018 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
3019 param = occParam + GEOM::propertyName( GEOM::Transparency );
3020 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
3023 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
3024 param = occParam + GEOM::propertyName( GEOM::TopLevel );
3025 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
3029 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
3030 param = occParam + GEOM::propertyName( GEOM::NbIsos );
3031 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
3034 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
3035 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
3036 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
3039 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
3040 param = occParam + GEOM::propertyName( GEOM::Vertices );
3041 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
3044 if (aProps.contains(GEOM::propertyName( GEOM::ShowName ))) {
3045 param = occParam + GEOM::propertyName( GEOM::ShowName );
3046 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::ShowName )).toString().toStdString());
3049 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
3050 param = occParam + GEOM::propertyName( GEOM::Deflection );
3051 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
3054 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
3055 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
3056 param = occParam + GEOM::propertyName( GEOM::PointMarker );
3057 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
3060 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
3061 param = occParam + GEOM::propertyName( GEOM::Material );
3062 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
3065 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
3066 param = occParam + GEOM::propertyName( GEOM::LineWidth );
3067 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
3070 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
3071 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
3072 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
3075 if ( vType == SOCC_Viewer::Type() && aAnnotationMgr ) {
3076 std::string anAnnotationInfo = GetAnnotationMgr()->getDisplayedIndicesInfo(
3077 o_it.key().toUtf8().data(), dynamic_cast<SOCC_Viewer*>(aView) ).toStdString();
3078 if (!anAnnotationInfo.empty()) {
3079 param = occParam + "ShapeAnnotationVisibleItems";
3080 ip->setParameter(entry, param.toStdString(), anAnnotationInfo);
3083 } // object iterator
3085 } // for (viewManagers)
3087 // store shape annotation and dimension attributes of objects:
3088 // since the displayed object always persists in property map, we remember the object entries
3089 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
3090 const QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
3091 const QString aAnnotationParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::ShapeAnnotations );
3092 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
3093 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
3095 std::string aStudyEntry = (*aEntryIt).toUtf8().data();
3096 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName );
3098 // store dimension parameters
3099 GEOMGUI_DimensionProperty aDimensions( aStudyEntry );
3100 if ( aDimensions.GetNumber() != 0 ) {
3101 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toUtf8().data() );
3104 _PTR(SObject) aObj( studyDS->FindObjectID( aStudyEntry ) );
3105 const Handle(GEOMGUI_AnnotationAttrs) aShapeAnnAttr = GEOMGUI_AnnotationAttrs::FindAttributes( aObj );
3106 if ( !aShapeAnnAttr.IsNull() ) {
3107 ip->setParameter( aStoreEntry, aAnnotationParam.toStdString(), aShapeAnnAttr->ExportAsPropertyString().toUtf8().data() );
3113 * \brief Restore visual parameters
3115 * This method is called after the study document is opened.
3116 * Restore visual parameters from AttributeParameter attribute(s)
3118 void GeometryGUI::restoreVisualParameters (int savePoint)
3120 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
3121 if (!appStudy || !appStudy->studyDS())
3123 _PTR(Study) studyDS = appStudy->studyDS();
3125 // componentName is used for encoding of entries when storing them in IParameters
3126 std::string componentName = myComponentGeom->ComponentDataType();
3127 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
3128 //if (!aSComponent) return;
3131 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
3132 componentName.c_str(),
3134 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
3136 std::vector<std::string> entries = ip->getEntries();
3138 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
3140 // entry is a normal entry - it should be "decoded" (setting base address of component)
3141 QString entry (ip->decodeEntry(*entIt).c_str());
3143 // Check that the entry corresponds to a real object in the Study
3144 // as the object may be deleted or modified after the visual state is saved.
3145 _PTR(SObject) so = studyDS->FindObjectID(entry.toUtf8().data());
3146 if (!so) continue; //Skip the not existent entry
3148 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
3149 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
3151 std::vector<std::string>::iterator namesIt = paramNames.begin();
3152 std::vector<std::string>::iterator valuesIt = paramValues.begin();
3154 // actors are stored in a map after displaying of them for
3155 // quicker access in the future: map < viewID to actor >
3156 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
3157 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
3159 QString viewerTypStr;
3160 QString viewIndexStr;
3162 QVector<PropMap> aListOfMap;
3164 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
3166 // visual parameters are stored in strings as follows:
3167 // 1) ViewerType_ViewIndex_ParamName
3168 // 2) ViewerType_ParamName (shared for GEOM module)
3169 // '_' is used as separator and should not be used in viewer type or parameter names.
3170 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
3172 bool isShared = lst.size() == 2;
3173 bool isViewer = lst.size() == 3;
3174 if ( !isShared && !isViewer )
3179 // shared visual parameters
3182 QString aParamNameStr( lst[1] );
3183 QString aValuesStr( (*valuesIt).c_str() );
3185 // shared dimension properties are stored as attribute
3186 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
3188 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
3189 aDimensionProp.SaveToAttribute( entry.toUtf8().data() );
3191 else if ( aParamNameStr == GEOM::propertyName( GEOM::ShapeAnnotations ) )
3193 Handle(GEOMGUI_AnnotationAttrs) anAttr =
3194 GEOMGUI_AnnotationAttrs::FindOrCreateAttributes( so, appStudy );
3196 anAttr->ImportFromPropertyString( aValuesStr );
3202 // per view visual parameters
3203 viewerTypStr = lst[0];
3204 viewIndexStr = lst[1];
3205 QString paramNameStr = lst[2];
3208 viewIndex = viewIndexStr.toUInt(&ok);
3209 if (!ok) // bad conversion of view index to integer
3212 if ((viewIndex + 1) > aListOfMap.count()) {
3213 aListOfMap.resize(viewIndex + 1);
3216 QString val((*valuesIt).c_str());
3217 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
3218 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
3219 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
3220 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
3221 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
3222 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
3223 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
3224 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
3225 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
3226 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
3227 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
3228 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
3229 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
3230 QStringList rgb = val.split(GEOM::subSectionSeparator());
3231 if (rgb.count() == 3) {
3232 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
3233 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
3235 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
3236 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
3237 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
3238 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
3239 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
3240 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
3241 } else if (paramNameStr == GEOM::propertyName( GEOM::ShowName )) {
3242 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::ShowName ), val == "true" || val == "1");
3243 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3244 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3245 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3246 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3247 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3248 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3249 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3250 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3251 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3252 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3253 } else if (paramNameStr == "ShapeAnnotationVisibleItems") {
3254 aListOfMap[viewIndex].insert( "ShapeAnnotationVisibleItems", val);
3257 } // for names/parameters iterator
3259 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3261 for (int index = 0; index < aListOfMap.count(); index++) {
3262 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
3264 //Get Visibility property of the current PropMap
3265 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3266 SUIT_ViewManager* vman = lst.at(index);
3267 SUIT_ViewModel* vmodel = vman->getViewModel();
3268 SALOME_View* aView = dynamic_cast<SALOME_View*>(vmodel);
3269 displayer()->Display(entry, true, aView);
3271 if ( vmodel->getType() == SOCC_Viewer::Type() ) {
3272 PropMap& aProps = aListOfMap[index];
3273 if ( aProps.contains( "ShapeAnnotationVisibleItems" ) ) {
3274 SOCC_Viewer* aSOCCView = dynamic_cast<SOCC_Viewer*>( aView );
3275 GetAnnotationMgr()->setDisplayedIndicesInfo( entry, aSOCCView, aProps["ShapeAnnotationVisibleItems"].toString() );
3280 } // for entries iterator
3282 // update all VTK and OCC views
3283 QList<SUIT_ViewManager*> lst;
3284 getApp()->viewManagers(lst);
3285 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3286 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3289 if (vmodel->getType() == SVTK_Viewer::Type()) {
3290 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3291 vtkView->getRenderer()->ResetCameraClippingRange();
3294 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3295 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3296 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3302 if ( myTextTreeWdg ) {
3303 myTextTreeWdg->updateTree();
3307 // Compute current name mode of the viewer
3308 void UpdateNameMode( SalomeApp_Application* app )
3310 bool isMode = false;
3311 SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() );
3312 SUIT_ViewWindow* viewWindow = app->desktop()->activeWindow();
3313 GEOM_Displayer displayer;
3314 int aMgrId = viewWindow->getViewManager()->getGlobalId();
3316 SALOME_View* window = displayer.GetActiveView();
3317 if ( !window ) return;
3319 SALOME_ListIO anIOlst;
3320 window->GetVisible( anIOlst );
3322 for ( SALOME_ListIteratorOfListIO It( anIOlst ); It.More(); It.Next() ) {
3323 Handle( SALOME_InteractiveObject ) io = It.Value();
3324 QVariant v = aStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::ShowName ), QVariant() );
3325 bool isIONameMode = v.isValid() ? v.toBool() : false;
3329 viewWindow->setProperty( "NameMode", isMode );
3332 void GeometryGUI::onViewAboutToShow()
3334 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3335 QAction* a = action( GEOMOp::OpSwitchVectors );
3336 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3337 QAction* aNameAction = action( GEOMOp::OpSwitchName );
3339 a->setEnabled(true);
3340 bool vmode = window->property("VectorsMode").toBool();
3341 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3342 aVerticesAction->setEnabled(true);
3343 vmode = window->property("VerticesMode").toBool();
3344 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3345 UpdateNameMode( getApp() );
3346 aNameAction->setEnabled(true);
3347 vmode = window->property("NameMode").toBool();
3348 aNameAction->setText ( vmode == 1 ? tr( "MEN_NAME_MODE_OFF" ) : tr("MEN_NAME_MODE_ON") );
3350 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3351 a->setEnabled(false);
3352 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3353 aVerticesAction->setEnabled(false);
3354 aNameAction->setText ( tr("MEN_NAME_MODE_ON") );
3355 aNameAction->setEnabled(false);
3360 \brief Return action by id
3361 \param id identifier of the action
3364 QAction* GeometryGUI::getAction(const int id) {
3369 \brief GEOM module message handler
3371 This method can be re-implemented in the subclasses.
3372 This is a GEOM module message handler.
3374 \param msg the message received.
3376 void GeometryGUI::message(const QString& msg)
3379 QStringList data = msg.split("/");
3380 const int nbStrings = data.count();
3382 if (nbStrings > 0) {
3383 if (data[0] == "modified") {
3385 QString anIOR = nbStrings > 1 ? data[1] : QString();
3387 if ( anIOR.isEmpty() ) {
3391 // Get the geom object.
3392 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3394 // Clear the shape buffer
3395 GeometryGUI::ClearShapeBuffer (anObj);
3401 \brief Clears the shape buffer.
3403 This is a static method. It clears the shape buffer.
3405 \param theObj the object
3407 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3409 if ( CORBA::is_nil( theObj ) )
3412 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3413 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3414 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3416 SalomeApp_Application* app =
3417 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3418 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3423 _PTR(Study) aStudy = appStudy->studyDS();
3428 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3432 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3433 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3434 _PTR(GenericAttribute) anAttr;
3435 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3436 _PTR(AttributeIOR) anIOR ( anAttr );
3437 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3438 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3444 \brief Returns the object from IOR.
3446 This is a static method. It returns the object from its IOR.
3448 \param IOR object IOR
3449 \return GEOM object.
3451 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3453 GEOM::GEOM_Object_var geomObj;
3454 if ( !IOR.isEmpty() ) {
3455 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3456 ( IOR.toLatin1().constData() );
3457 if ( !CORBA::is_nil( corbaObj ) )
3458 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3460 return geomObj._retn();
3464 \brief Returns IOR of the object.
3466 This is a static method. It returns the object's IOR.
3468 \param object the GEOM object.
3469 \return object's IOR.
3471 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3474 if ( !CORBA::is_nil( object ) ) {
3475 CORBA::String_var anIOR =
3476 SalomeApp_Application::orb()->object_to_string( object );
3483 \brief Check if this object is can't be renamed in place
3485 This method can be re-implemented in the subclasses.
3486 Return true in case if object isn't reference or component (module root).
3488 \param entry column id
3489 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3491 bool GeometryGUI::renameAllowed( const QString& entry) const {
3493 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3494 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3495 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3497 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3501 Rename object by entry.
3502 \param entry entry of the object
3503 \param name new name of the object
3504 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3506 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3508 bool result = false;
3510 SalomeApp_Application* app =
3511 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3512 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3517 _PTR(Study) aStudy = appStudy->studyDS();
3522 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3524 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3528 _PTR(SObject) obj ( aStudy->FindObjectID(qUtf8Printable(entry)) );
3529 _PTR(GenericAttribute) anAttr;
3531 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3532 _PTR(AttributeName) aName (anAttr);
3534 aName->SetValue( name.toUtf8().data() ); // rename the SObject
3535 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3536 if (!CORBA::is_nil(anObj)) {
3537 anObj->SetName( name.toUtf8().data() ); // Rename the corresponding GEOM_Object
3538 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3539 emit SignalTextTreeRenameObject( entry );
3547 void GeometryGUI::updateMaterials()
3549 LightApp_Preferences* pref = preferences();
3551 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3552 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3553 if ( !materials.contains( currentMaterial ) )
3554 // user material set as default in the preferences, might be removed
3555 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3557 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3559 setPreferenceProperty( prefItem->id(),
3560 "strings", materials );
3561 prefItem->retrieve();
3567 \brief Check if the module allows "drag" operation of its objects.
3569 Overloaded from LightApp_Module class.
3571 This function is a part of the general drag-n-drop mechanism.
3572 The goal of this function is to check data object passed as a parameter
3573 and decide if it can be dragged or no.
3575 \param what data object being tested for drag operation
3576 \return \c true if module allows dragging of the specified object
3577 \sa isDropAccepted(), dropObjects()
3579 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3581 // we allow dragging object under root and object from folder
3582 int aLevel = what->level();
3583 bool anObjectInFolder = false;
3585 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3587 _PTR(SObject) aSO = dataObj->object();
3589 _PTR(GenericAttribute) anAttr;
3590 _PTR(SObject) aFatherSO = SalomeApp_Application::getStudy()->GetUseCaseBuilder()->GetFather( aSO );
3591 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3592 _PTR(AttributeLocalID) aLocalID( anAttr );
3593 anObjectInFolder = aLocalID->Value() == 999;
3598 return aLevel == 2 || anObjectInFolder;
3602 \brief Check if the module allows "drop" operation on the given object.
3604 Overloaded from LightApp_Module class.
3606 This function is a part of the general drag-n-drop mechanism.
3607 The goal of this function is to check data object passed as a parameter
3608 and decide if it can be used as a target for the "drop" operation.
3609 The processing of the drop operation itself is done in the dropObjects() function.
3611 \param where target data object
3612 \return \c true if module supports dropping on the \a where data object
3613 \sa isDraggable(), dropObjects()
3615 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3617 // we allow dropping into folder and top-level GEOM object
3618 int aLevel = where->level();
3619 bool isFolder = false;
3621 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3623 _PTR(SObject) aSO = dataObj->object();
3625 _PTR(GenericAttribute) anAttr;
3626 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3627 _PTR(AttributeLocalID) aLocalID( anAttr );
3628 isFolder = aLocalID->Value() == 999;
3633 return aLevel == 1 || isFolder;
3637 \brief Complete drag-n-drop operation.
3639 Overloaded from LightApp_Module class.
3641 This function is a part of the general drag-n-drop mechanism.
3642 Its goal is to handle dropping of the objects being dragged according
3643 to the chosen operation (move). The dropping is performed in the
3644 context of the parent data object \a where and the \a row (position in the
3645 children index) at which the data should be dropped. If \a row is equal to -1,
3646 this means that objects are added to the end of the children list.
3648 \param what objects being dropped
3649 \param where target data object
3650 \param row child index at which the drop operation is performed
3651 \param action drag-n-drop operation (Qt::DropAction) - move
3653 \sa isDraggable(), isDropAccepted()
3655 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3656 const int row, Qt::DropAction action )
3658 if (action != Qt::CopyAction && action != Qt::MoveAction)
3659 return; // unsupported action
3661 // get parent object
3662 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3663 if ( !dataObj ) return; // wrong parent
3664 _PTR(SObject) parentObj = dataObj->object();
3666 // Find the current Study and StudyBuilder
3667 _PTR(Study) aStudy = SalomeApp_Application::getStudy();
3668 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3669 // collect all parents of the target node
3670 QStringList parentIDs;
3671 _PTR(SObject) parent = parentObj;
3672 while( !parent->IsNull() ) {
3673 parentIDs << parent->GetID().c_str();
3674 parent = aUseCaseBuilder->GetFather(parent);
3677 // collect objects being dropped
3678 GEOM::object_list_var objects = new GEOM::object_list();
3679 objects->length( what.count() );
3681 for ( int i = 0; i < what.count(); i++ ) {
3682 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3683 if ( !dataObj ) continue; // skip wrong objects
3684 _PTR(SObject) sobj = dataObj->object();
3685 // check that dropped object is not a parent of target object
3686 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3687 return; // it's not allowed to move node into it's child
3689 objects[i] = _CAST(SObject, sobj)->GetSObject();
3692 objects->length( count );
3694 // call engine function
3695 GetGeomGen()->Move( objects.in(), // what
3696 _CAST(SObject, parentObj)->GetSObject(), // where
3699 // update Object browser
3700 getApp()->updateObjectBrowser( false );
3703 void GeometryGUI::emitDimensionsUpdated( QString entry )
3705 emit DimensionsUpdated( entry );
3708 void GeometryGUI::emitAnnotationsUpdated( QString entry )
3710 emit SignalAnnotationsUpdated( entry );