1 // Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : GeometryGUI.cxx
23 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
25 #include <Standard_math.hxx> // E.A. must be included before Python.h to fix compilation on windows
27 #undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
30 #include "GeometryGUI.h"
31 #include "GeometryGUI_Operations.h"
32 #include "GEOMPluginGUI.h"
33 #include "GEOMGUI_OCCSelector.h"
34 #include "GEOMGUI_Selection.h"
35 #include "GEOMGUI_CreationInfoWdg.h"
36 #include "GEOMGUI_TextTreeWdg.h"
37 #include "GEOMGUI_DimensionProperty.h"
38 #include "GEOM_Constants.h"
39 #include "GEOM_Displayer.h"
40 #include "GEOM_AISShape.hxx"
41 #include "GEOMUtils_XmlHandler.hxx"
42 #include "GEOMGUI_AnnotationMgr.h"
43 #include "GEOMGUI_TextTreeSelector.h"
45 #include "GEOM_Actor.h"
47 #include <Material_ResourceMgr.h>
48 #include <Material_Model.h>
50 #include <SUIT_Desktop.h>
51 #include <SUIT_MessageBox.h>
52 #include <SUIT_ResourceMgr.h>
53 #include <SUIT_Session.h>
54 #include <SUIT_ViewManager.h>
56 #include <OCCViewer_ViewWindow.h>
57 #include <OCCViewer_ViewPort3d.h>
58 #include <OCCViewer_ViewModel.h>
59 #include <OCCViewer_ViewManager.h>
61 #include <SOCC_ViewModel.h>
62 #include <SOCC_ViewWindow.h>
64 #include <SVTK_ViewWindow.h>
65 #include <SVTK_RenderWindowInteractor.h>
66 #include <SVTK_InteractorStyle.h>
67 #include <SVTK_ViewModel.h>
69 #ifndef DISABLE_GRAPHICSVIEW
70 #include <GraphicsView_Viewer.h>
73 #include <SalomeApp_Application.h>
74 #include <SalomeApp_DataObject.h>
75 #include <SalomeApp_Study.h>
76 #include <SalomeApp_Tools.h>
78 #include <LightApp_SelectionMgr.h>
79 #include <LightApp_VTKSelector.h>
80 #include <LightApp_DataObject.h>
81 #include <LightApp_Preferences.h>
83 #include <SALOME_LifeCycleCORBA.hxx>
84 #include <SALOME_ListIO.hxx>
86 #include <SALOMEDSClient_ClientFactory.hxx>
87 #include <SALOMEDSClient_IParameters.hxx>
89 #include <SALOMEDS_SObject.hxx>
91 #include <Basics_OCCTVersion.hxx>
92 #include <QtxFontEdit.h>
103 #include <QSignalMapper>
104 #include <QFontDatabase>
106 #include <AIS_ListOfInteractive.hxx>
107 #include <AIS_ListIteratorOfListOfInteractive.hxx>
108 #include <Prs3d_Drawer.hxx>
109 #include <Prs3d_IsoAspect.hxx>
110 #include <Aspect_TypeOfMarker.hxx>
111 #include <OSD_SharedLibrary.hxx>
112 #include <NCollection_DataMap.hxx>
114 #include <TColStd_HArray1OfByte.hxx>
115 #include <TColStd_SequenceOfHAsciiString.hxx>
117 #include <utilities.h>
119 #include <vtkCamera.h>
120 #include <vtkRenderer.h>
122 #include <Standard_Failure.hxx>
123 #include <Standard_ErrorHandler.hxx>
125 #include <Font_SystemFont.hxx>
126 #include <Font_FontMgr.hxx>
127 #include <TCollection_HAsciiString.hxx>
129 #include "GEOM_version.h"
130 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
133 Standard_EXPORT CAM_Module* createModule() {
134 return new GeometryGUI();
137 Standard_EXPORT char* getModuleVersion() {
138 return (char*)GEOM_VERSION_STR;
142 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
144 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
146 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
148 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
149 if (CORBA::is_nil(myComponentGeom))
151 return GeometryGUI::myComponentGeom;
154 bool GeometryGUI::InitGeomGen()
157 if ( CORBA::is_nil( myComponentGeom ) ) return false;
161 //=======================================================================
162 // function : ClientSObjectToObject
164 //=======================================================================
165 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
167 _PTR(GenericAttribute) anAttr;
168 CORBA::Object_var anObj;
170 std::string aValue = theSObject->GetIOR();
171 if (strcmp(aValue.c_str(), "") != 0) {
172 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
173 anObj = anORB->string_to_object(aValue.c_str());
176 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
178 return anObj._retn();
181 //=======================================================================
182 // function : ClientStudyToStudy
184 //=======================================================================
185 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
187 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
188 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
189 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
190 int aStudyID = theStudy->StudyId();
191 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
192 return aDSStudy._retn();
195 void GeometryGUI::Modified (bool theIsUpdateActions)
197 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
198 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
199 appStudy->Modified();
200 if ( theIsUpdateActions )
201 app->updateActions();
206 //=======================================================================
207 // function : GeometryGUI::GeometryGUI()
208 // purpose : Constructor
209 //=======================================================================
210 GeometryGUI::GeometryGUI() :
211 SalomeApp_Module( "GEOM" ),
214 if ( CORBA::is_nil( myComponentGeom ) )
216 Engines::EngineComponent_var comp =
217 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
218 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
221 myActiveDialogBox = 0;
223 gp_Pnt origin = gp_Pnt(0., 0., 0.);
224 gp_Dir direction = gp_Dir(0., 0., 1.);
225 myWorkingPlane = gp_Ax3(origin, direction);
228 myLocalSelectionMode = GEOM_ALLOBJECTS;
230 myCreationInfoWdg = 0;
234 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
236 Q_INIT_RESOURCE( GEOMGUI );
239 //=======================================================================
240 // function : GeometryGUI::~GeometryGUI()
241 // purpose : Destructor
242 //=======================================================================
243 GeometryGUI::~GeometryGUI()
245 while (!myOCCSelectors.isEmpty())
246 delete myOCCSelectors.takeFirst();
248 while (!myVTKSelectors.isEmpty())
249 delete myVTKSelectors.takeFirst();
251 qDeleteAll(myGUIMap);
254 //=======================================================================
255 // function : GeometryGUI::getLibrary()
256 // purpose : get or load GUI library by name [ internal ]
257 //=======================================================================
258 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
259 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
261 if ( !myGUIMap.contains( libraryName ) ) {
262 // try to load library if it is not loaded yet
264 QString dirs = getenv( "PATH" );
265 #elif defined(__APPLE__)
266 QString dirs = getenv( "DYLD_LIBRARY_PATH" );
268 QString dirs = getenv( "LD_LIBRARY_PATH" );
276 if ( !dirs.isEmpty() ) {
277 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
278 QListIterator<QString> it( dirList ); it.toBack();
279 while ( it.hasPrevious() ) {
280 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
282 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
283 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
285 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
286 continue; // continue search further
288 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
289 if ( osdF != NULL ) {
290 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
291 GEOMGUI* libGUI = (*func)( this );
293 myGUIMap[ libraryName ] = libGUI;
294 break; // found and loaded!
301 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
304 //=======================================================================
305 // function : GeometryGUI::getPluginLibrary()
306 // purpose : get or load GUI Plugin library by name [ internal ]
307 //=======================================================================
308 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
309 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
311 if ( !myGUIMap.contains( libraryName ) ) {
312 // try to load library if it is not loaded yet
315 QString dirs = getenv( "PATH" );
316 #elif defined(__APPLE__)
317 QString dirs = getenv( "DYLD_LIBRARY_PATH" );
319 QString dirs = getenv( "LD_LIBRARY_PATH" );
327 if ( !dirs.isEmpty() ) {
328 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
329 QListIterator<QString> it( dirList ); it.toBack();
330 while ( it.hasPrevious() ) {
331 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
333 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
334 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
336 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
337 continue; // continue search further
339 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
340 if ( osdF != NULL ) {
341 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
342 GEOMPluginGUI* libGUI = (*func)( this );
344 myGUIMap[ libraryName ] = libGUI;
345 break; // found and loaded!
352 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
355 //=======================================================================
356 // function : GeometryGUI::ActiveWorkingPlane()
357 // purpose : Activate Working Plane View
358 //=======================================================================
359 void GeometryGUI::ActiveWorkingPlane()
361 gp_Dir DZ = myWorkingPlane.Direction();
362 gp_Dir DY = myWorkingPlane.YDirection();
364 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
365 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
366 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
369 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
371 Handle(V3d_View) view3d = vw->getViewPort()->getView();
373 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
374 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
378 else if ( ViewVTK ) {
379 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
381 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
383 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
384 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
385 camera->SetFocalPoint(0,0,0);
392 //=======================================================================
393 // function : GeometryGUI::SetActiveDialogBox()
394 // purpose : Set active dialog box
395 //=======================================================================
396 GEOMGUI_AnnotationMgr* GeometryGUI::GetAnnotationMgr()
398 if ( !myAnnotationMgr )
399 myAnnotationMgr = new GEOMGUI_AnnotationMgr( getApp() );
400 return myAnnotationMgr;
403 //=======================================================================
404 // function : GeometryGUI::SetActiveDialogBox()
405 // purpose : Set active dialog box
406 //=======================================================================
407 GEOMGUI_TextTreeWdg* GeometryGUI::GetTextTreeWdg() const
409 return myTextTreeWdg;
412 //=======================================================================
413 // function : GeometryGUI::SetActiveDialogBox()
414 // purpose : Set active dialog box
415 //=======================================================================
416 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
418 myActiveDialogBox = (QDialog*)aDlg;
421 //=======================================================================
422 // function : GeometryGUI::EmitSignalDeactivateDialog()
423 // purpose : Emit a signal to deactivate the active dialog Box
424 //=======================================================================
425 void GeometryGUI::EmitSignalDeactivateDialog()
427 emit SignalDeactivateActiveDialog();
430 //=======================================================================
431 // function : GeometryGUI::EmitSignalCloseAllDialogs()
432 // purpose : Emit a signal to close all non modal dialogs box
433 //=======================================================================
434 void GeometryGUI::EmitSignalCloseAllDialogs()
436 emit SignalCloseAllDialogs();
439 //=======================================================================
440 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
441 // purpose : Emit a signal to inform that default real spin box step has
443 //=======================================================================
444 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
446 emit SignalDefaultStepValueChanged(newVal);
449 //=======================================================================
450 // function : GeometryGUI::OnGUIEvent()
451 // purpose : common slot for all menu/toolbar actions
452 //=======================================================================
453 void GeometryGUI::OnGUIEvent()
455 const QObject* obj = sender();
456 if ( !obj || !obj->inherits( "QAction" ) )
458 int id = actionId((QAction*)obj);
463 //=======================================================================
464 // function : GeometryGUI::OnGUIEvent()
465 // purpose : manage all events on GUI [static]
466 //=======================================================================
467 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
469 SUIT_Application* anApp = application();
471 SUIT_Desktop* desk = anApp->desktop();
473 // check type of the active viewframe
474 SUIT_ViewWindow* window = desk->activeWindow();
475 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
476 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
477 #ifndef DISABLE_GRAPHICSVIEW
478 bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() );
482 // if current viewframe is not of OCC and not of VTK type - return immediately
483 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
484 QList<int> NotViewerDependentCommands;
485 NotViewerDependentCommands << GEOMOp::OpDelete
487 << GEOMOp::OpShowOnly
488 << GEOMOp::OpShowOnlyChildren
489 << GEOMOp::OpDiscloseChildren
490 << GEOMOp::OpConcealChildren
491 << GEOMOp::OpUnpublishObject
492 << GEOMOp::OpPublishObject
493 << GEOMOp::OpPointMarker
494 << GEOMOp::OpCreateFolder
495 << GEOMOp::OpSortChildren;
496 if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) {
497 // activate OCC viewer
498 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
501 // fix for IPAL9103, point 2
502 if ( CORBA::is_nil( GetGeomGen() ) ) {
503 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
508 // find corresponding GUI library
510 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
511 createOriginAndBaseVectors(); // internal operation
513 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
514 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
515 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
516 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
517 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
518 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
519 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
520 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
521 case GEOMOp::OpDelete: // MENU EDIT - DELETE
522 #ifndef DISABLE_PYCONSOLE
523 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
525 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
526 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
527 case GEOMOp::OpColor: // POPUP MENU - COLOR
528 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
529 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
530 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
531 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
532 case GEOMOp::OpIsos: // POPUP MENU - ISOS
533 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
534 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
535 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
536 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
537 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
538 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
539 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
540 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
541 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
542 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
543 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
544 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
545 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
546 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
547 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
548 case GEOMOp::OpClsBringToFront: //
549 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
550 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
551 #ifndef DISABLE_GRAPHICSVIEW
552 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
554 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
555 libName = "GEOMToolsGUI";
557 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
558 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
559 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
560 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
561 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
562 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
563 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
564 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
565 case GEOMOp::OpHide: // MENU VIEW - ERASE
566 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
567 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
568 case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE
569 case GEOMOp::OpSwitchName: // MENU VIEW - VERTICES MODE
570 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
571 case GEOMOp::OpShading: // POPUP MENU - SHADING
572 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
573 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
574 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
575 case GEOMOp::OpVertices: // POPUP MENU - VERTICES
576 case GEOMOp::OpShowName: // POPUP MENU - SHOW NAME
577 libName = "DisplayGUI";
579 case GEOMOp::OpPoint: // MENU BASIC - POINT
580 case GEOMOp::OpLine: // MENU BASIC - LINE
581 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
582 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
583 case GEOMOp::OpArc: // MENU BASIC - ARC
584 case GEOMOp::OpVector: // MENU BASIC - VECTOR
585 case GEOMOp::OpPlane: // MENU BASIC - PLANE
586 case GEOMOp::OpCurve: // MENU BASIC - CURVE
587 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
588 libName = "BasicGUI";
590 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
591 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
592 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
593 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
594 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
595 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
596 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
597 libName = "PrimitiveGUI";
599 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
600 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
601 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
602 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
603 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
604 case GEOMOp::OpThickness: // MENU GENERATION - THICKNESS
605 libName = "GenerationGUI";
607 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
608 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
609 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
610 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
611 case GEOMOp::OpSurfaceFromFace: // MENU ENTITY - SURFACE FROM FACE
613 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
615 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
616 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
617 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
618 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
619 case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR
620 libName = "EntityGUI";
622 case GEOMOp::OpEdge: // MENU BUILD - EDGE
623 case GEOMOp::OpWire: // MENU BUILD - WIRE
624 case GEOMOp::OpFace: // MENU BUILD - FACE
625 case GEOMOp::OpShell: // MENU BUILD - SHELL
626 case GEOMOp::OpSolid: // MENU BUILD - SOLID
627 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
628 libName = "BuildGUI";
630 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
631 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
632 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
633 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
634 libName = "BooleanGUI";
636 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
637 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
638 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
639 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
640 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
641 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
642 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
643 case GEOMOp::OpProjOnCyl: // MENU TRANSFORMATION - PROJECTION ON CYLINDER
644 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
645 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
646 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
647 case GEOMOp::OpExtension: // MENU TRANSFORMATION - EXTENSION
648 libName = "TransformationGUI";
650 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
651 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
652 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
653 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
654 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
655 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
656 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
657 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
658 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
659 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
660 case GEOMOp::OpTransferData: // MENU OPERATION - TRANSFER DATA
661 case GEOMOp::OpExtraction: // MENU OPERATION - EXTRACT AND REBUILD
662 libName = "OperationGUI";
664 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
665 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
666 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
667 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
668 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
669 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
670 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
671 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
672 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
673 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
674 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
675 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
676 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
677 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
678 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
679 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
680 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
681 case GEOMOp::OpInspectObj: // MENU REPAIR - INSPECT OBJECT
682 libName = "RepairGUI";
684 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
685 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
686 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
687 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
688 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
689 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
690 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
691 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
692 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
693 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
694 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
695 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
696 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
697 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
698 case GEOMOp::OpFastCheckInters: // MENU MEASURE - FAST CHECK INTERSECTIONS
699 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
700 case GEOMOp::OpAnnotation: // MENU MEASURE - ANNOTATION
701 case GEOMOp::OpEditAnnotation: // POPUP MENU - EDIT ANNOTATION
702 case GEOMOp::OpDeleteAnnotation: // POPUP MENU - DELETE ANNOTATION
703 #ifndef DISABLE_PLOT2DVIEWER
704 case GEOMOp::OpShapeStatistics: // MENU MEASURE - SHAPE STATISTICS
706 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
707 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
708 case GEOMOp::OpShowAllAnnotations: // POPUP MENU - SHOW ALL ANNOTATIONS
709 case GEOMOp::OpHideAllAnnotations: // POPUP MENU - HIDE ALL ANNOTATIONS
710 libName = "MeasureGUI";
712 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
713 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
714 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
715 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
716 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
717 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
718 libName = "GroupGUI";
720 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
721 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
722 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
723 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
724 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
725 libName = "BlocksGUI";
727 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
728 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
729 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
730 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
731 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
732 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
733 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
734 //libName = "AdvancedGUI";
737 if (myPluginActions.contains(id)) {
738 libName = myPluginActions[id].first;
740 GEOMPluginGUI* library = 0;
741 if ( !libName.isEmpty() ) {
743 libName = libName + ".dll";
744 #elif defined(__APPLE__)
745 libName = QString( "lib" ) + libName + ".dylib";
747 libName = QString( "lib" ) + libName + ".so";
749 library = getPluginLibrary( libName );
752 // call method of corresponding GUI library
754 //QString action ("%1");
755 //action = action.arg(id);
757 //if( !theParam.isValid() )
758 library->OnGUIEvent( myPluginActions[id].second, desk );
760 // library->OnGUIEvent( id, desk, theParam);
763 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
765 updateCreationInfo();
771 GEOMGUI* library = 0;
772 if ( !libName.isEmpty() ) {
774 libName = libName + ".dll";
775 #elif defined(__APPLE__)
776 libName = QString( "lib" ) + libName + ".dylib";
778 libName = QString( "lib" ) + libName + ".so";
780 library = getLibrary( libName );
783 // call method of corresponding GUI library
785 if( !theParam.isValid() )
786 library->OnGUIEvent( id, desk );
788 library->OnGUIEvent( id, desk, theParam);
791 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
793 updateCreationInfo();
796 //=================================================================================
797 // function : GeometryGUI::activateOperation()
799 //=================================================================================
800 bool GeometryGUI::activateOperation( int actionId )
802 OnGUIEvent(actionId);
806 //=================================================================================
807 // function : GeometryGUI::activateOperation()
809 //=================================================================================
810 bool GeometryGUI::activateOperation( const QString& actionId )
814 int id = actionId.toInt(&isOk);
821 //=================================================================================
822 // function : GeometryGUI::activateOperation()
824 //=================================================================================
825 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
829 QString pluginLib = plugin;
830 // TODO: if <plugin> is a plugin name, find plugin library name
831 if (myPluginLibs.contains(plugin))
832 pluginLib = myPluginLibs[plugin];
834 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
835 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
836 const PluginAction& anAction = actionsIter.value();
837 if (anAction.first == pluginLib && anAction.second == actionId) {
838 // activate operation
839 OnGUIEvent(actionsIter.key());
847 //=================================================================================
848 // function : GeometryGUI::OnKeyPress()
849 // purpose : Called when any key is pressed by user [static]
850 //=================================================================================
851 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
853 if ( !application() )
855 foreach ( GEOMGUI* lib, myGUIMap )
856 lib->OnKeyPress( e, application()->desktop(), w );
859 //=================================================================================
860 // function : GeometryGUI::OnMouseMove()
861 // purpose : Manages mouse move events [static]
862 //=================================================================================
863 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
865 if ( !application() )
867 foreach ( GEOMGUI* lib, myGUIMap )
868 lib->OnMouseMove( e, application()->desktop(), w );
871 //=================================================================================
872 // function : GeometryGUI::OnMouseRelease()
873 // purpose : Manages mouse release events [static]
874 //=================================================================================
875 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
877 if ( !application() )
879 foreach ( GEOMGUI* lib, myGUIMap )
880 lib->OnMouseRelease( e, application()->desktop(), w );
883 //=================================================================================
884 // function : GeometryGUI::OnMousePress()
885 // purpose : Manage mouse press events [static]
886 //=================================================================================
887 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
889 if ( !application() )
891 foreach ( GEOMGUI* lib, myGUIMap )
892 lib->OnMousePress( e, application()->desktop(), w );
895 //=======================================================================
896 // function : createGeomAction
898 //=======================================================================
899 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
900 const int accel, const bool toggle, const QString& shortcutAction )
902 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
903 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
904 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
906 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
908 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
909 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
911 application()->desktop(),
913 this, SLOT( OnGUIEvent() ),
917 //=======================================================================
918 // function : createOriginAndBaseVectors
920 //=======================================================================
921 void GeometryGUI::createOriginAndBaseVectors()
923 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
924 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
926 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
930 _PTR(Study) studyDS = appStudy->studyDS();
931 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
932 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
933 if ( !aBasicOperations->_is_nil() ) {
934 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
935 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
936 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
937 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
938 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
939 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
941 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
942 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
943 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
944 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
945 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
946 anOrigin->UnRegister();
950 aBasicOperations->UnRegister();
952 getApp()->updateObjectBrowser( true );
958 //=======================================================================
959 // function : GeometryGUI::initialize()
960 // purpose : Called when GEOM module is created
961 //=======================================================================
962 void GeometryGUI::initialize( CAM_Application* app )
964 SalomeApp_Module::initialize( app );
966 // ----- create actions --------------
968 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
970 createGeomAction( GEOMOp::OpPoint, "POINT" );
971 createGeomAction( GEOMOp::OpLine, "LINE" );
972 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
973 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
974 createGeomAction( GEOMOp::OpArc, "ARC" );
975 createGeomAction( GEOMOp::OpCurve, "CURVE" );
976 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
977 createGeomAction( GEOMOp::OpVector, "VECTOR" );
978 createGeomAction( GEOMOp::OpPlane, "PLANE" );
979 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
980 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
981 createGeomAction( GEOMOp::OpSurfaceFromFace, "SURFACE_FROM_FACE" );
983 createGeomAction( GEOMOp::OpBox, "BOX" );
984 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
985 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
986 createGeomAction( GEOMOp::OpTorus, "TORUS" );
987 createGeomAction( GEOMOp::OpCone, "CONE" );
988 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
989 createGeomAction( GEOMOp::OpDisk, "DISK" );
991 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
992 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
993 createGeomAction( GEOMOp::OpFilling, "FILLING" );
994 createGeomAction( GEOMOp::OpPipe, "PIPE" );
995 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
996 createGeomAction( GEOMOp::OpThickness, "THICKNESS" );
998 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
999 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
1000 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
1001 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
1002 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
1004 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
1005 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
1007 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
1009 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
1010 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
1012 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
1013 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
1014 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
1016 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
1018 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
1019 createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" );
1021 createGeomAction( GEOMOp::OpEdge, "EDGE" );
1022 createGeomAction( GEOMOp::OpWire, "WIRE" );
1023 createGeomAction( GEOMOp::OpFace, "FACE" );
1024 createGeomAction( GEOMOp::OpShell, "SHELL" );
1025 createGeomAction( GEOMOp::OpSolid, "SOLID" );
1026 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
1028 createGeomAction( GEOMOp::OpFuse, "FUSE" );
1029 createGeomAction( GEOMOp::OpCommon, "COMMON" );
1030 createGeomAction( GEOMOp::OpCut, "CUT" );
1031 createGeomAction( GEOMOp::OpSection, "SECTION" );
1033 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
1034 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
1035 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
1036 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
1037 createGeomAction( GEOMOp::OpScale, "SCALE" );
1038 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
1039 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
1040 createGeomAction( GEOMOp::OpProjOnCyl, "PROJ_ON_CYL" );
1041 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
1042 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
1043 createGeomAction( GEOMOp::OpExtension, "EXTENSION" );
1045 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
1046 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
1047 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
1048 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
1049 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
1050 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
1051 createGeomAction( GEOMOp::OpTransferData, "TRANSFER_DATA" );
1052 createGeomAction( GEOMOp::OpExtraction, "EXTRACTION" );
1053 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
1054 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
1055 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
1056 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
1058 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
1059 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
1060 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
1062 createGeomAction( GEOMOp::OpSewing, "SEWING" );
1063 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
1064 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
1065 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
1066 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
1067 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
1068 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
1069 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
1070 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
1071 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
1072 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
1073 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
1074 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1075 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1076 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1077 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1078 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1079 createGeomAction( GEOMOp::OpInspectObj, "INSPECT_OBJECT" );
1081 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1082 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1083 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1084 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1085 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1086 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1087 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1088 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1089 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1090 createGeomAction( GEOMOp::OpAnnotation, "ANNOTATION" );
1091 createGeomAction( GEOMOp::OpEditAnnotation, "EDIT_ANNOTATION" );
1092 createGeomAction( GEOMOp::OpDeleteAnnotation, "DELETE_ANNOTATION" );
1094 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1095 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1096 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1097 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1098 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1099 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1100 createGeomAction( GEOMOp::OpFastCheckInters, "FAST_CHECK_INTERSECTIONS" );
1101 #ifndef DISABLE_PLOT2DVIEWER
1102 createGeomAction( GEOMOp::OpShapeStatistics, "SHAPE_STATISTICS" );
1105 #ifndef DISABLE_PYCONSOLE
1106 #ifdef _DEBUG_ // PAL16821
1107 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1111 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1112 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1113 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1114 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1115 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1116 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1117 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1118 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1119 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1120 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1121 createGeomAction( GEOMOp::OpSwitchName, "NAME_MODE");
1122 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1123 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1124 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1125 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1126 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1127 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1128 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1129 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1130 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1131 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1132 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1133 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1134 createGeomAction( GEOMOp::OpHide, "ERASE" );
1136 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1137 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1138 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1139 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1140 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1141 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1142 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1143 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1144 createGeomAction( GEOMOp::OpShowName, "POP_SHOW_NAME", "", 0, true );
1145 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1146 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1147 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1148 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1149 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1150 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1151 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1152 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1153 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1154 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1155 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1156 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1157 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1158 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1159 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1160 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1161 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1162 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1163 #ifndef DISABLE_GRAPHICSVIEW
1164 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1166 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1167 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1168 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1169 createGeomAction( GEOMOp::OpShowAllAnnotations, "POP_SHOW_ALL_ANNOTATIONS" );
1170 createGeomAction( GEOMOp::OpHideAllAnnotations, "POP_HIDE_ALL_ANNOTATIONS" );
1172 // Create actions for increase/decrease transparency shortcuts
1173 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1174 "Geometry:Increase transparency");
1175 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1176 "Geometry:Decrease transparency");
1178 // Create actions for increase/decrease number of isolines
1179 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1180 "Geometry:Increase number of isolines");
1181 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1182 "Geometry:Decrease number of isolines");
1184 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1185 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1186 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1187 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1188 //@@ 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 @@//
1190 // ---- create menus --------------------------
1192 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1194 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1195 createMenu( GEOMOp::OpDelete, editId, -1 );
1197 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1199 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1200 createMenu( GEOMOp::OpPoint, basicId, -1 );
1201 createMenu( GEOMOp::OpLine, basicId, -1 );
1202 createMenu( GEOMOp::OpCircle, basicId, -1 );
1203 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1204 createMenu( GEOMOp::OpArc, basicId, -1 );
1205 createMenu( GEOMOp::OpCurve, basicId, -1 );
1206 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1207 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1208 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1209 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1210 createMenu( GEOMOp::OpSurfaceFromFace, basicId, -1 );
1211 createMenu( separator(), basicId, -1 );
1212 createMenu( GEOMOp::OpVector, basicId, -1 );
1213 createMenu( GEOMOp::OpPlane, basicId, -1 );
1214 createMenu( GEOMOp::OpLCS, basicId, -1 );
1215 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1217 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1218 createMenu( GEOMOp::OpBox, primId, -1 );
1219 createMenu( GEOMOp::OpCylinder, primId, -1 );
1220 createMenu( GEOMOp::OpSphere, primId, -1 );
1221 createMenu( GEOMOp::OpTorus, primId, -1 );
1222 createMenu( GEOMOp::OpCone, primId, -1 );
1223 createMenu( GEOMOp::OpRectangle, primId, -1 );
1224 createMenu( GEOMOp::OpDisk, primId, -1 );
1225 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1227 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1228 createMenu( GEOMOp::OpPrism, genId, -1 );
1229 createMenu( GEOMOp::OpRevolution, genId, -1 );
1230 createMenu( GEOMOp::OpFilling, genId, -1 );
1231 createMenu( GEOMOp::OpPipe, genId, -1 );
1232 createMenu( GEOMOp::OpPipePath, genId, -1 );
1233 createMenu( GEOMOp::OpThickness, genId, -1 );
1235 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1236 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1237 //@@ 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 @@//
1239 createMenu( separator(), newEntId, -1 );
1241 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1242 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1243 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1244 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1245 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1246 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1248 createMenu( separator(), newEntId, -1 );
1250 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1251 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1252 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1254 createMenu( separator(), newEntId, -1 );
1256 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1257 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1258 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1259 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1260 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1262 createMenu( separator(), newEntId, -1 );
1264 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1266 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1267 createMenu( GEOMOp::OpEdge, buildId, -1 );
1268 createMenu( GEOMOp::OpWire, buildId, -1 );
1269 createMenu( GEOMOp::OpFace, buildId, -1 );
1270 createMenu( GEOMOp::OpShell, buildId, -1 );
1271 createMenu( GEOMOp::OpSolid, buildId, -1 );
1272 createMenu( GEOMOp::OpCompound, buildId, -1 );
1274 createMenu( separator(), newEntId, -1 );
1276 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1278 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1281 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1283 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1284 createMenu( GEOMOp::OpFuse, boolId, -1 );
1285 createMenu( GEOMOp::OpCommon, boolId, -1 );
1286 createMenu( GEOMOp::OpCut, boolId, -1 );
1287 createMenu( GEOMOp::OpSection, boolId, -1 );
1289 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1290 createMenu( GEOMOp::OpTranslate, transId, -1 );
1291 createMenu( GEOMOp::OpRotate, transId, -1 );
1292 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1293 createMenu( GEOMOp::OpMirror, transId, -1 );
1294 createMenu( GEOMOp::OpScale, transId, -1 );
1295 createMenu( GEOMOp::OpOffset, transId, -1 );
1296 createMenu( GEOMOp::OpProjection, transId, -1 );
1297 createMenu( GEOMOp::OpExtension, transId, -1 );
1298 createMenu( GEOMOp::OpProjOnCyl, transId, -1 );
1299 createMenu( separator(), transId, -1 );
1300 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1301 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1303 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1304 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1305 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1306 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1308 createMenu( separator(), operId, -1 );
1310 createMenu( GEOMOp::OpPartition, operId, -1 );
1311 createMenu( GEOMOp::OpArchimede, operId, -1 );
1312 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1313 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1314 createMenu( GEOMOp::OpTransferData, operId, -1 );
1315 createMenu( GEOMOp::OpExtraction, operId, -1 );
1317 createMenu( separator(), operId, -1 );
1319 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1320 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1321 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1322 createMenu( GEOMOp::OpChamfer, operId, -1 );
1323 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1324 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1326 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1327 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1328 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1329 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1330 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1331 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1332 createMenu( GEOMOp::OpSewing, repairId, -1 );
1333 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1334 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1335 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1336 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1337 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1338 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1339 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1340 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1341 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1342 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1343 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1345 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1346 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1347 createMenu( GEOMOp::OpProperties, measurId, -1 );
1348 createMenu( separator(), measurId, -1 );
1349 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1350 createMenu( GEOMOp::OpInertia, measurId, -1 );
1351 createMenu( GEOMOp::OpNormale, measurId, -1 );
1352 createMenu( separator(), measurId, -1 );
1353 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1354 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1355 createMenu( separator(), measurId, -1 );
1357 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1358 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1359 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1360 createMenu( GEOMOp::OpAngle, dimId, -1 );
1361 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1363 createMenu( GEOMOp::OpAnnotation, measurId, -1 );
1365 createMenu( separator(), measurId, -1 );
1366 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1367 createMenu( separator(), measurId, -1 );
1368 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1369 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1370 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1371 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1372 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1373 createMenu( GEOMOp::OpFastCheckInters, measurId, -1 );
1374 createMenu( GEOMOp::OpInspectObj, measurId, -1 );
1375 #ifndef DISABLE_PLOT2DVIEWER
1376 createMenu( GEOMOp::OpShapeStatistics, measurId, -1 );
1379 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1380 #ifndef DISABLE_PYCONSOLE
1381 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1382 createMenu( separator(), toolsId, -1 );
1383 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1387 createMenu( separator(), toolsId, -1 );
1388 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1389 createMenu( separator(), toolsId, -1 );
1391 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1392 createMenu( separator(), viewId, -1 );
1394 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1395 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1396 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1397 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1398 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1399 createMenu( separator(), dispmodeId, -1 );
1400 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1401 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1402 createMenu( GEOMOp::OpSwitchName, dispmodeId, -1 );
1404 createMenu( separator(), viewId, -1 );
1405 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1406 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1407 createMenu( separator(), viewId, -1 );
1408 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1409 createMenu( separator(), viewId, -1 );
1413 because of these items are accessible through object browser and viewers
1414 we have removed they from main menu
1416 createMenu( GEOMOp::OpShow, viewId, -1 );
1417 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1418 createMenu( GEOMOp::OpHide, viewId, -1 );
1421 // ---- create toolbars --------------------------
1423 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1424 createTool( GEOMOp::OpPoint, basicTbId );
1425 createTool( GEOMOp::OpLine, basicTbId );
1426 createTool( GEOMOp::OpCircle, basicTbId );
1427 createTool( GEOMOp::OpEllipse, basicTbId );
1428 createTool( GEOMOp::OpArc, basicTbId );
1429 createTool( GEOMOp::OpCurve, basicTbId );
1430 createTool( GEOMOp::OpVector, basicTbId );
1431 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1432 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1433 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1434 createTool( GEOMOp::OpIsoline, basicTbId );
1435 createTool( GEOMOp::OpSurfaceFromFace, basicTbId );
1436 createTool( GEOMOp::OpPlane, basicTbId );
1437 createTool( GEOMOp::OpLCS, basicTbId );
1438 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1440 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1441 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1442 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1444 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1445 createTool( GEOMOp::OpBox, primTbId );
1446 createTool( GEOMOp::OpCylinder, primTbId );
1447 createTool( GEOMOp::OpSphere, primTbId );
1448 createTool( GEOMOp::OpTorus, primTbId );
1449 createTool( GEOMOp::OpCone, primTbId );
1450 createTool( GEOMOp::OpRectangle, primTbId );
1451 createTool( GEOMOp::OpDisk, primTbId );
1452 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1454 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1455 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1456 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1458 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1459 createTool( GEOMOp::OpFuse, boolTbId );
1460 createTool( GEOMOp::OpCommon, boolTbId );
1461 createTool( GEOMOp::OpCut, boolTbId );
1462 createTool( GEOMOp::OpSection, boolTbId );
1464 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1465 createTool( GEOMOp::OpPrism, genTbId );
1466 createTool( GEOMOp::OpRevolution, genTbId );
1467 createTool( GEOMOp::OpFilling, genTbId );
1468 createTool( GEOMOp::OpPipe, genTbId );
1469 createTool( GEOMOp::OpPipePath, genTbId );
1470 createTool( GEOMOp::OpThickness, genTbId );
1472 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1473 createTool( GEOMOp::OpTranslate, transTbId );
1474 createTool( GEOMOp::OpRotate, transTbId );
1475 createTool( GEOMOp::OpChangeLoc, transTbId );
1476 createTool( GEOMOp::OpMirror, transTbId );
1477 createTool( GEOMOp::OpScale, transTbId );
1478 createTool( GEOMOp::OpOffset, transTbId );
1479 createTool( GEOMOp::OpProjection, transTbId );
1480 createTool( GEOMOp::OpExtension, transTbId );
1481 createTool( GEOMOp::OpProjOnCyl, transTbId );
1482 createTool( separator(), transTbId );
1483 createTool( GEOMOp::OpMultiTranslate, transTbId );
1484 createTool( GEOMOp::OpMultiRotate, transTbId );
1486 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1487 createTool( GEOMOp::OpExplode, operTbId );
1488 createTool( GEOMOp::OpPartition, operTbId );
1489 createTool( GEOMOp::OpArchimede, operTbId );
1490 createTool( GEOMOp::OpShapesOnShape, operTbId );
1491 createTool( GEOMOp::OpSharedShapes, operTbId );
1492 createTool( GEOMOp::OpTransferData, operTbId );
1493 createTool( GEOMOp::OpExtraction, operTbId );
1495 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1496 createTool( GEOMOp::OpFillet1d, featTbId );
1497 createTool( GEOMOp::OpFillet2d, featTbId );
1498 createTool( GEOMOp::OpFillet3d, featTbId );
1499 createTool( GEOMOp::OpChamfer, featTbId );
1500 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1501 createTool( GEOMOp::OpExtrudedCut, featTbId );
1503 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1504 createTool( GEOMOp::OpEdge, buildTbId );
1505 createTool( GEOMOp::OpWire, buildTbId );
1506 createTool( GEOMOp::OpFace, buildTbId );
1507 createTool( GEOMOp::OpShell, buildTbId );
1508 createTool( GEOMOp::OpSolid, buildTbId );
1509 createTool( GEOMOp::OpCompound, buildTbId );
1511 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1512 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1513 createTool( GEOMOp::OpProperties, measureTbId );
1514 createTool( GEOMOp::OpCenterMass, measureTbId );
1515 createTool( GEOMOp::OpInertia, measureTbId );
1516 createTool( GEOMOp::OpNormale, measureTbId );
1517 createTool( separator(), measureTbId );
1518 createTool( GEOMOp::OpBoundingBox, measureTbId );
1519 createTool( GEOMOp::OpMinDistance, measureTbId );
1520 createTool( GEOMOp::OpAngle, measureTbId );
1521 createTool( GEOMOp::OpAnnotation, measureTbId );
1522 createTool( GEOMOp::OpTolerance , measureTbId );
1523 createTool( separator(), measureTbId );
1524 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1525 createTool( GEOMOp::OpFreeFaces, measureTbId );
1526 createTool( separator(), measureTbId );
1527 createTool( GEOMOp::OpWhatIs, measureTbId );
1528 createTool( GEOMOp::OpCheckShape, measureTbId );
1529 createTool( GEOMOp::OpCheckCompound, measureTbId );
1530 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1531 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1532 createTool( GEOMOp::OpFastCheckInters, measureTbId );
1534 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1535 createTool( GEOMOp::OpPictureImport, picturesTbId );
1537 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1540 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1541 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1542 //@@ 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 @@//
1544 // ---- create popup menus --------------------------
1546 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1547 QString clientOCC = "(client='OCCViewer')";
1548 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1549 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1551 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1552 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1553 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1554 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1556 QString autoColorPrefix =
1557 "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') and type='Shape' and selcount=1";
1559 QtxPopupMgr* mgr = popupMgr();
1561 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1562 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1563 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1564 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1565 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1566 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1567 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1568 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1570 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1571 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1572 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1573 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1574 mgr->insert( separator(), -1, -1 ); // -----------
1576 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1577 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1578 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1579 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1580 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1581 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1582 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1583 mgr->insert( separator(), -1, -1 ); // -----------
1584 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1585 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1586 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1587 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1588 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1589 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1590 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1591 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1592 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1593 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1594 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1595 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1596 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1597 mgr->insert( separator(), dispmodeId, -1 );
1598 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1599 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1600 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1601 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1602 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1603 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1604 mgr->insert( action( GEOMOp::OpShowName ), dispmodeId, -1 ); // show name
1605 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1606 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK + " and isNameMode", QtxPopupMgr::ToggleRule );
1607 mgr->insert( separator(), -1, -1 ); // -----------
1609 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1610 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1611 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1612 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1613 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1614 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1615 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1616 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1617 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1618 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1620 // material properties
1621 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1622 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1625 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1626 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1628 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1629 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1630 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1632 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1633 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1635 mgr->insert( separator(), -1, -1 ); // -----------
1636 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1637 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1638 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1639 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1640 mgr->insert( separator(), -1, -1 ); // -----------
1642 mgr->insert( action( GEOMOp::OpEditAnnotation ), -1, -1 ); // edit annotation
1643 mgr->setRule( action( GEOMOp::OpEditAnnotation ), clientOCC + " and annotationsCount=1", QtxPopupMgr::VisibleRule );
1644 mgr->insert( action( GEOMOp::OpDeleteAnnotation ), -1, -1 ); // delete annotation
1645 mgr->setRule( action( GEOMOp::OpDeleteAnnotation ), clientOCC + " and annotationsCount>0", QtxPopupMgr::VisibleRule );
1646 mgr->insert( separator(), -1, -1 ); // -----------
1648 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1649 onlyComponent = "((type='Component') and selcount=1)",
1650 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1651 types = "'Shape' 'Group' 'FieldStep'";
1653 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1654 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1656 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1657 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1659 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1660 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1662 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1664 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1665 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1666 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1667 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1668 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1669 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1670 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1671 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1672 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1673 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1674 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1675 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1676 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1677 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1678 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1679 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1680 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1681 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1682 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1683 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1684 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1685 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1686 mgr->insert( separator(), selectonlyId, -1);
1687 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1688 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1689 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1690 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1691 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1692 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1693 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1695 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1697 mgr->insert( separator(), -1, -1 ); // -----------
1698 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1699 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1700 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1701 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1702 mgr->insert( action( GEOMOp::OpShowAllAnnotations ), -1, -1 ); // show all annotations
1703 mgr->setRule( action( GEOMOp::OpShowAllAnnotations ), aDimensionRule.arg( "hasHiddenAnnotations" ), QtxPopupMgr::VisibleRule );
1704 mgr->insert( action( GEOMOp::OpHideAllAnnotations ), -1, -1 ); // hide all annotations
1705 mgr->setRule( action( GEOMOp::OpHideAllAnnotations ), aDimensionRule.arg( "hasVisibleAnnotations" ), QtxPopupMgr::VisibleRule );
1707 mgr->insert( separator(), -1, -1 ); // -----------
1708 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1709 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1711 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1712 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1714 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1715 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1717 mgr->insert( separator(), -1, -1 ); // -----------
1718 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1719 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1721 mgr->insert( separator(), -1, -1 ); // -----------
1722 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1723 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1725 #ifndef DISABLE_GRAPHICSVIEW
1726 mgr->insert( separator(), -1, -1 ); // -----------
1727 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1728 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1731 mgr->insert( separator(), -1, -1 ); // -----------
1732 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1733 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1735 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1737 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1739 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1740 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1741 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1744 // create plugin actions and menus
1748 //=======================================================================
1749 // function : GeometryGUI::addPluginActions()
1751 //=======================================================================
1752 void GeometryGUI::addPluginActions()
1755 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1756 if (!resMgr) return;
1758 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1759 if (!appStudy) return;
1761 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1763 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1765 int id = GEOMOp::OpLastOperationID; // TODO?
1768 GEOMUtils::PluginInfo::const_iterator it;
1769 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1770 // bind action lib and label to its ID for activateOperation() method proper work
1771 GEOMUtils::PluginData pdata = (*it);
1772 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1773 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1774 std::list<GEOMUtils::ActionData>::const_iterator ait;
1775 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1776 GEOMUtils::ActionData adata = (*ait);
1779 if ( !adata.icon.empty() )
1780 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1782 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1783 QString actionName = smenus.last();
1784 actionName = actionName.toUpper().prepend( "MEN_" );
1785 smenus.removeLast();
1787 // path to action in toolbar
1788 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1789 QString actionTool = stools.last();
1790 actionTool = actionTool.toUpper().prepend( "TOP_" );
1791 stools.removeLast();
1793 QString actionStat = adata.statusText.c_str();
1794 actionStat = actionStat.toUpper().prepend( "STB_" );
1796 createAction( id, // ~ adata.label
1797 tr( actionTool.toLatin1().constData() ),
1799 tr( actionName.toLatin1().constData() ),
1800 tr( actionStat.toLatin1().constData() ),
1801 QKeySequence( tr( adata.accel.c_str() ) ),
1802 application()->desktop(),
1804 this, SLOT( OnGUIEvent() ),
1805 QString() /*shortcutAction*/ );
1808 foreach ( QString subMenu, smenus ) {
1809 QStringList subMenuList = subMenu.split( ":" );
1810 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1811 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1812 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1814 createMenu( id, menuId, -1 );
1816 if ( !stools.isEmpty() ) {
1817 QString subTool = stools[0];
1818 subTool = subTool.toUpper().prepend( "TOOL_" );
1819 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1820 createTool(id, toolId);
1823 // add action id to map
1824 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1825 myPluginActions[id] = anAction;
1832 //=======================================================================
1833 // function : GeometryGUI::activateModule()
1834 // purpose : Called when GEOM module is activated
1835 //=======================================================================
1836 bool GeometryGUI::activateModule( SUIT_Study* study )
1838 if ( CORBA::is_nil( myComponentGeom ) )
1841 bool res = SalomeApp_Module::activateModule( study );
1845 setMenuShown( true );
1846 setToolShown( true );
1848 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1849 PyGILState_STATE gstate = PyGILState_Ensure();
1850 PyObject* pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1851 if ( !pluginsmanager ) {
1856 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1857 tr("MEN_NEW_ENTITY").toUtf8().data(),
1858 tr("GEOM_PLUGINS_OTHER").toUtf8().data());
1863 PyGILState_Release(gstate);
1864 // end of GEOM plugins loading
1866 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1867 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1869 // Reset actions accelerator keys
1870 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1872 GUIMap::Iterator it;
1873 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1874 it.value()->activate( application()->desktop() );
1876 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1878 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1879 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1880 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1882 if ( !myCreationInfoWdg )
1883 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1884 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1885 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1887 if ( !myTextTreeWdg ) {
1888 myTextTreeWdg = new GEOMGUI_TextTreeWdg( getApp() );
1889 new GEOMGUI_TextTreeSelector( myTextTreeWdg, GetAnnotationMgr(), getApp()->selectionMgr() );
1892 getApp()->insertDockWindow( myTextTreeWdg->getWinID(), myTextTreeWdg );
1893 getApp()->placeDockWindow( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
1896 SALOME_ListIO selected;
1897 sm->selectedObjects( selected );
1898 sm->clearSelected();
1900 SUIT_ViewManager* vm;
1901 ViewManagerList OCCViewManagers, VTKViewManagers;
1903 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1904 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1905 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1906 onViewManagerAdded(vm);
1908 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1909 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1910 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1911 onViewManagerAdded(vm);
1913 sm->setSelectedObjects( selected, true ); //NPAL 19674
1915 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1917 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1919 // 0020836 (Basic vectors and origin)
1920 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1921 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1922 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1924 _PTR(Study) studyDS = appStudy->studyDS();
1926 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1927 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1928 createOriginAndBaseVectors();
1933 Py_XDECREF(pluginsmanager);
1937 //=======================================================================
1938 // function : GeometryGUI::deactivateModule()
1939 // purpose : Called when GEOM module is deactivated
1940 //=======================================================================
1941 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1943 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1945 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1947 setMenuShown( false );
1948 setToolShown( false );
1950 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1951 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1953 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1955 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1956 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1957 if ( myCreationInfoWdg ) {
1958 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1959 myCreationInfoWdg = 0;
1961 if ( myTextTreeWdg ) {
1962 getApp()->removeDockWindow( myTextTreeWdg->getWinID() );
1963 disconnect( application(), 0, myTextTreeWdg, 0 );
1967 EmitSignalCloseAllDialogs();
1969 GUIMap::Iterator it;
1970 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1971 it.value()->deactivate();
1973 // Unset actions accelerator keys
1974 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1976 qDeleteAll(myOCCSelectors);
1977 myOCCSelectors.clear();
1978 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1980 qDeleteAll(myVTKSelectors);
1981 myVTKSelectors.clear();
1982 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1984 return SalomeApp_Module::deactivateModule( study );
1987 //=======================================================================
1988 // function : onWindowActivated()
1989 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1990 //=======================================================================
1991 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1996 const bool ViewOCC = ( win->getViewManager() ? win->getViewManager()->getType() == OCCViewer_Viewer::Type() : false );
1997 //const bool ViewVTK = ( win->getViewManager() ? win->getViewManager()->getType() == SVTK_Viewer::Type() : false );
1999 // disable non-OCC viewframe menu commands
2000 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
2001 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
2002 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
2003 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
2004 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
2005 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
2006 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
2008 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
2009 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
2010 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
2011 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
2013 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
2016 void GeometryGUI::windows( QMap<int, int>& mappa ) const
2018 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
2019 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
2020 #ifndef DISABLE_PYCONSOLE
2021 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
2023 if ( myCreationInfoWdg )
2024 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
2025 if ( myTextTreeWdg )
2026 mappa.insert( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
2029 void GeometryGUI::viewManagers( QStringList& lst ) const
2031 lst.append( OCCViewer_Viewer::Type() );
2034 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
2036 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
2038 qDebug( "connect" );
2039 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
2040 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
2041 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
2042 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
2043 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
2044 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
2045 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
2046 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
2048 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2049 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
2051 // disable OCC selectors
2052 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
2053 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2054 while ( itOCCSel.hasNext() )
2055 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2056 sr->setEnabled(true);
2058 else if ( vm->getType() == SVTK_Viewer::Type() )
2060 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2061 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
2063 // disable VTK selectors
2064 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
2065 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2066 while ( itVTKSel.hasNext() )
2067 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2068 sr->setEnabled(true);
2072 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
2074 SUIT_ViewModel* viewer = vm->getViewModel();
2075 if ( vm->getType() == OCCViewer_Viewer::Type() )
2077 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2078 while ( itOCCSel.hasNext() )
2079 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2080 if ( sr->viewer() == viewer )
2082 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
2086 if ( vm->getType() == SVTK_Viewer::Type() )
2088 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2089 while ( itVTKSel.hasNext() )
2090 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2091 if ( sr->viewer() == viewer )
2093 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2097 SOCC_Viewer* aSOCCView = dynamic_cast<SOCC_Viewer*>(viewer);
2099 GetAnnotationMgr()->RemoveView( aSOCCView );
2103 //================================================================================
2105 * \brief Slot called when selection changed. Shows creation info of a selected object
2107 //================================================================================
2109 void GeometryGUI::updateCreationInfo()
2111 if ( myCreationInfoWdg )
2112 myCreationInfoWdg->clear();
2114 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2115 // if ( !myCreationInfoWdg->isVisible() )
2118 // look for a sole selected GEOM_Object
2119 GEOM::GEOM_BaseObject_var geomObj;
2121 SALOME_ListIO selected;
2122 getApp()->selectionMgr()->selectedObjects( selected );
2124 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2125 SALOME_ListIteratorOfListIO selIt( selected );
2126 for ( ; selIt.More(); selIt.Next() )
2128 Handle(SALOME_InteractiveObject) io = selIt.Value();
2129 if ( !io->hasEntry() ) continue;
2130 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2131 if ( !sobj ) continue;
2132 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2133 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2134 if ( !gobj->_is_nil() )
2136 if ( !geomObj->_is_nil() )
2137 return; // several GEOM objects selected
2141 if ( geomObj->_is_nil() ) return;
2143 // pass creation info of geomObj to myCreationInfoWdg
2145 if ( myCreationInfoWdg ) {
2147 GEOM::CreationInformationSeq_var info;
2150 info = geomObj->GetCreationInformation();
2154 myCreationInfoWdg->setInfo( info );
2158 void GeometryGUI::onAutoBringToFront()
2160 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2161 if( !isAutoBringToFront )
2164 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2165 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2168 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2169 if (!appStudy) return;
2171 GEOM_Displayer displayer( appStudy );
2173 SALOME_View* window = displayer.GetActiveView();
2174 if ( !window ) return;
2176 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2178 SALOME_ListIO selected;
2179 getApp()->selectionMgr()->selectedObjects( selected );
2180 if (!myTopLevelIOList.IsEmpty())
2182 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2184 Handle( SALOME_InteractiveObject ) io = It.Value();
2185 bool isSelected = false;
2186 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2188 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2189 if( io->isSame( sel_io ) )
2192 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2194 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2195 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2200 myTopLevelIOList.Assign(selected);
2201 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2203 Handle( SALOME_InteractiveObject ) io = It.Value();
2204 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2205 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2208 displayer.UpdateViewer();
2209 GeometryGUI::Modified();
2212 void GeometryGUI::updateFieldColorScale()
2214 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2216 GEOM_Displayer aDisplayer( aStudy );
2217 aDisplayer.UpdateColorScale();
2221 QString GeometryGUI::engineIOR() const
2223 if ( !CORBA::is_nil( GetGeomGen() ) )
2224 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2228 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2229 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2231 theWidth = theHeight = 0;
2233 Handle(TColStd_HArray1OfByte) aTexture;
2236 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2237 aTexture = aTextureMap[ theId ];
2238 if ( aTexture.IsNull() ) {
2239 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2240 if ( !aInsOp->_is_nil() ) {
2241 CORBA::Long aWidth, aHeight;
2242 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2243 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2245 theHeight = aHeight;
2247 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2249 for (int i = 0; i < aStream->length(); i++)
2250 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2251 aTextureMap[ theId ] = aTexture;
2259 LightApp_Selection* GeometryGUI::createSelection() const
2261 return new GEOMGUI_Selection();
2264 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2266 SalomeApp_Module::contextMenuPopup( client, menu, title );
2268 getApp()->selectionMgr()->selectedObjects( lst );
2270 //Add submenu for predefined materials
2271 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2272 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2273 QtxPopupMgr* mgr = popupMgr();
2274 //get parrent for submenu
2275 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2277 QMenu* oldMenu = act->menu() ;
2282 QMenu* matMenu = new QMenu();
2283 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2285 //Get current material model for the object
2287 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2288 if ( anApp && anApp->activeViewManager() ) {
2289 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2291 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2294 QString curModel = "";
2295 if ( v.canConvert<QString>() ) curModel = v.toString();
2296 // get list of all predefined materials
2297 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2299 foreach ( QString material, materials )
2301 QAction* menAct = matMenu->addAction( material );
2302 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2303 signalMapper->setMapping( menAct, material );
2304 menAct->setCheckable( true );
2305 // Set checked if this material is current
2306 Material_Model aModel;
2307 aModel.fromResources( material );
2308 if ( !found && aModel.toProperties() == curModel ) {
2309 menAct->setChecked( true );
2313 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2314 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2315 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2316 this, SLOT( OnSetMaterial( const QString & ) ) );
2317 act->setMenu( matMenu );
2321 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2322 Handle(SALOME_InteractiveObject) io = lst.First();
2323 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2324 _PTR(Study) study = appStudy->studyDS();
2325 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2327 QString aName = QString( obj->GetName().c_str() );
2328 aName.remove( QRegExp("\\s+$") );
2334 void GeometryGUI::OnSetMaterial(const QString& theName)
2336 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2340 void GeometryGUI::createPreferences()
2342 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2344 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2346 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2347 setPreferenceProperty( genGroup, "columns", 2 );
2349 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2350 LightApp_Preferences::Selector,
2351 "Geometry", "display_mode" );
2353 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2354 LightApp_Preferences::Color, "Geometry", "shading_color" );
2356 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2357 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2359 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2360 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2362 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2363 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2365 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2366 LightApp_Preferences::Color, "Geometry", "line_color" );
2368 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2369 LightApp_Preferences::Color, "Geometry", "point_color" );
2371 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2372 LightApp_Preferences::Color, "Geometry", "isos_color" );
2374 addPreference( tr( "PREF_LABEL_COLOR" ), genGroup,
2375 LightApp_Preferences::Color, "Geometry", "label_color" );
2377 addPreference( "", genGroup, LightApp_Preferences::Space );
2379 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2380 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2382 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2383 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2385 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2386 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2388 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2389 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2391 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2392 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2394 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2395 LightApp_Preferences::Selector,
2396 "Geometry", "material" );
2398 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2399 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2405 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2406 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2408 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2409 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2411 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2412 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2414 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2415 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2417 for (int i = 0; i < nb; i++) {
2418 setPreferenceProperty( wd[i], "min", 1 );
2419 setPreferenceProperty( wd[i], "max", 5 );
2422 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2423 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2425 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2426 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2428 // --------------------------------------------------------------------------
2429 // Dimensions (Measurements) preferences
2430 // --------------------------------------------------------------------------
2432 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2433 setPreferenceProperty( aDimGroupId, "columns", 2 );
2435 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2436 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2438 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2439 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2441 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2442 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2444 int aDimFontId = addPreference( tr( "PREF_DIMENSIONS_FONT" ), aDimGroupId, LightApp_Preferences::Font, "Geometry", "dimensions_font" );
2446 int f = QtxFontEdit::Family | QtxFontEdit::Size;
2447 setPreferenceProperty( aDimFontId, "features", f );
2448 setPreferenceProperty( aDimFontId, "mode", QtxFontEdit::Custom );
2450 Handle(Font_FontMgr) fmgr = Font_FontMgr::GetInstance();
2451 QString aFontFile = "";
2452 resMgr->value("resources", "GEOM", aFontFile);
2453 aFontFile = aFontFile + QDir::separator() + "Y14.5M-2009.ttf";
2454 // add enginier font into combobox
2455 int fontID = QFontDatabase::addApplicationFont( aFontFile );
2456 Handle(Font_SystemFont) sf = new Font_SystemFont(
2457 new TCollection_HAsciiString("Y14.5M-2009"),
2459 new TCollection_HAsciiString(aFontFile.toLatin1().data()) );
2460 // register font in OCC font manager
2461 fmgr->RegisterFont( sf, Standard_False );
2463 // get list of supported fonts by OCC
2464 QStringList anOCCFonts;
2465 TColStd_SequenceOfHAsciiString theFontsNames;
2466 fmgr->GetAvailableFontsNames( theFontsNames );
2467 for(Standard_Integer i=1; i<=theFontsNames.Length(); i++) {
2468 Handle(TCollection_HAsciiString) str = theFontsNames(i);
2469 anOCCFonts << str->ToCString();
2471 anOCCFonts.removeDuplicates();
2472 // set the supported fonts into combobox to use its only
2473 setPreferenceProperty( aDimFontId, "fonts", anOCCFonts );
2475 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2476 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2478 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2479 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2480 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2482 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2483 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2485 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2486 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2488 QStringList aListOfLengthUnits;
2489 aListOfLengthUnits << "m";
2490 aListOfLengthUnits << "cm";
2491 aListOfLengthUnits << "mm";
2492 aListOfLengthUnits << "in.";
2493 aListOfLengthUnits << "ft.";
2495 QStringList aListOfAngUnits;
2496 aListOfAngUnits << "rad";
2497 aListOfAngUnits << "deg";
2499 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2500 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2502 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2503 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2505 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2506 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2508 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2509 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2510 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2512 addPreference( tr( "PREF_DIMENSIONS_USE_TEXT3D" ), aDimGroupId,
2513 LightApp_Preferences::Bool, "Geometry", "dimensions_use_text3d" );
2515 // --------------------------------------------------------------------------
2516 // Shape annotation preferences
2517 // --------------------------------------------------------------------------
2519 const int aShapeAnnGroupId = addPreference( tr( "PREF_SHAPE_ANNOTATIONS" ), tabId );
2520 setPreferenceProperty( aShapeAnnGroupId, "columns", 2 );
2522 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_FONT_COLOR" ), aShapeAnnGroupId, LightApp_Preferences::Color, "Geometry", "shape_annotation_font_color" );
2523 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_COLOR" ), aShapeAnnGroupId, LightApp_Preferences::Color, "Geometry", "shape_annotation_line_color" );
2524 const int aShapeAnnFont =
2525 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_FONT" ), aShapeAnnGroupId, LightApp_Preferences::Font, "Geometry", "shape_annotation_font" );
2527 int aShapeAnnFontFeatures = QtxFontEdit::Family | QtxFontEdit::Size | QtxFontEdit::Bold | QtxFontEdit::Italic;
2528 setPreferenceProperty( aShapeAnnFont, "features", aShapeAnnFontFeatures );
2529 setPreferenceProperty( aShapeAnnFont, "mode", QtxFontEdit::Custom );
2530 setPreferenceProperty( aShapeAnnFont, "fonts", anOCCFonts );
2532 const int aShapeAnnLineWidth =
2533 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_WIDTH" ), aShapeAnnGroupId, LightApp_Preferences::IntSpin, "Geometry", "shape_annotation_line_width" );
2535 setPreferenceProperty( aShapeAnnLineWidth, "min", 1 );
2536 setPreferenceProperty( aShapeAnnLineWidth, "max", 5 );
2538 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_AUTOHIDE" ), aShapeAnnGroupId, LightApp_Preferences::Bool, "Geometry", "shape_annotation_autohide" );
2540 const int aShapeAnnLineStyle =
2541 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_STYLE" ), aShapeAnnGroupId, LightApp_Preferences::Selector, "Geometry", "shape_annotation_line_style" );
2543 QStringList aLineStyleList;
2544 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_SOLID") );
2545 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DASH") );
2546 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DOT") );
2547 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DOTDASH") );
2549 QList<QVariant> aLineStyleIds;
2550 aLineStyleIds.append(0);
2551 aLineStyleIds.append(1);
2552 aLineStyleIds.append(2);
2553 aLineStyleIds.append(3);
2555 setPreferenceProperty( aShapeAnnLineStyle, "strings", aLineStyleList );
2556 setPreferenceProperty( aShapeAnnLineStyle, "indexes", aLineStyleIds );
2558 // --------------------------------------------------------------------------
2559 // Isoline drawing preferences
2560 // --------------------------------------------------------------------------
2562 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2563 setPreferenceProperty( isoGroup, "columns", 2 );
2564 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2565 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2566 setPreferenceProperty( isoU, "min", 0 );
2567 setPreferenceProperty( isoU, "max", 100000 );
2568 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2569 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2570 setPreferenceProperty( isoV, "min", 0 );
2571 setPreferenceProperty( isoV, "max", 100000 );
2573 // Quantities with individual precision settings
2574 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2575 setPreferenceProperty( precGroup, "columns", 2 );
2577 const int nbQuantities = 8;
2578 int prec[nbQuantities], ii = 0;
2579 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2580 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2581 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2582 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2583 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2584 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2585 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2586 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2587 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2588 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2589 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2590 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2591 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2592 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2593 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2594 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2596 // Set property for precision value for spinboxes
2597 for ( ii = 0; ii < nbQuantities; ii++ ){
2598 setPreferenceProperty( prec[ii], "min", -14 );
2599 setPreferenceProperty( prec[ii], "max", 14 );
2600 setPreferenceProperty( prec[ii], "precision", 2 );
2603 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2604 setPreferenceProperty( VertexGroup, "columns", 2 );
2606 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2607 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2609 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2610 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2612 // Set property for default display mode
2613 QStringList aModesList;
2614 aModesList.append( tr("MEN_WIREFRAME") );
2615 aModesList.append( tr("MEN_SHADING") );
2616 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2617 aModesList.append( tr("MEN_TEXTURE") );
2619 QList<QVariant> anIndexesList;
2620 anIndexesList.append(0);
2621 anIndexesList.append(1);
2622 anIndexesList.append(2);
2623 anIndexesList.append(3);
2625 setPreferenceProperty( dispmode, "strings", aModesList );
2626 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2628 // Set property for top level display mode
2629 QStringList aTopModesList;
2630 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2631 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2632 aTopModesList.append( tr("MEN_WIREFRAME") );
2633 aTopModesList.append( tr("MEN_SHADING") );
2634 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2636 QList<QVariant> aTopIndexesList;
2637 aTopIndexesList.append(0);
2638 aTopIndexesList.append(1);
2639 aTopIndexesList.append(2);
2640 aTopIndexesList.append(3);
2641 aTopIndexesList.append(4);
2643 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2644 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2646 // Set property for step value for spinboxes
2647 setPreferenceProperty( step, "min", 1 );
2648 setPreferenceProperty( step, "max", 10000 );
2649 setPreferenceProperty( step, "precision", 3 );
2651 // Set property for trandparency value for spinboxes
2652 setPreferenceProperty( transparency, "min", 0 );
2653 setPreferenceProperty( transparency, "max", 100 );
2655 // Set property for deflection value for spinboxes
2656 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2657 setPreferenceProperty( defl, "max", 1.0 );
2658 setPreferenceProperty( defl, "step", 1.0e-04 );
2659 setPreferenceProperty( defl, "precision", 6 );
2661 // Set property for default material
2662 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2664 // Set property vertex marker type
2665 QList<QVariant> aMarkerTypeIndicesList;
2666 QList<QVariant> aMarkerTypeIconsList;
2668 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2669 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2670 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2671 aMarkerTypeIndicesList << (i-1);
2672 aMarkerTypeIconsList << pixmap;
2675 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2676 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2678 // Set property for vertex marker scale
2679 QList<QVariant> aMarkerScaleIndicesList;
2680 QStringList aMarkerScaleValuesList;
2682 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2683 aMarkerScaleIndicesList << iii;
2684 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2687 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2688 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2690 // Scalar bar for field step presentation
2691 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2692 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2694 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2695 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2696 setPreferenceProperty( sbXPosition, "min", 0 );
2697 setPreferenceProperty( sbXPosition, "max", 1 );
2698 setPreferenceProperty( sbXPosition, "step", 0.05 );
2700 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2701 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2702 setPreferenceProperty( sbYPosition, "min", 0 );
2703 setPreferenceProperty( sbYPosition, "max", 1 );
2704 setPreferenceProperty( sbYPosition, "step", 0.05 );
2706 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2707 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2708 setPreferenceProperty( sbWidth, "min", 0 );
2709 setPreferenceProperty( sbWidth, "max", 1 );
2710 setPreferenceProperty( sbWidth, "step", 0.05 );
2712 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2713 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2714 setPreferenceProperty( sbHeight, "min", 0 );
2715 setPreferenceProperty( sbHeight, "max", 1 );
2716 setPreferenceProperty( sbHeight, "step", 0.05 );
2718 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2719 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2720 setPreferenceProperty( sbTextHeight, "min", 6 );
2721 setPreferenceProperty( sbTextHeight, "max", 24 );
2722 setPreferenceProperty( sbTextHeight, "step", 1 );
2724 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2725 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2726 setPreferenceProperty( sbNbIntervals, "min", 2 );
2727 setPreferenceProperty( sbNbIntervals, "max", 64 );
2728 setPreferenceProperty( sbNbIntervals, "step", 1 );
2730 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2731 setPreferenceProperty( originGroup, "columns", 2 );
2733 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2734 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2735 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2736 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2738 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2739 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2741 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2742 setPreferenceProperty( operationsGroup, "columns", 2 );
2744 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2745 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2747 addPreference( tr( "PREF_HIDE_INPUT_OBJECT" ), operationsGroup,
2748 LightApp_Preferences::Bool, "Geometry", "hide_input_object" );
2750 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2752 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2754 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2755 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2757 QStringList aHierarchyTypeList;
2758 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2759 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2760 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2762 QList<QVariant> aHierarchyTypeIndexesList;
2763 aHierarchyTypeIndexesList.append(0);
2764 aHierarchyTypeIndexesList.append(1);
2765 aHierarchyTypeIndexesList.append(2);
2767 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2768 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2770 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2771 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2773 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2775 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2776 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2778 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2779 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2780 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2781 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2782 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2783 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2784 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2785 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2787 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2788 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2789 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2790 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2791 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2792 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2799 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2801 if (section == "Geometry") {
2802 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2803 if (param == QString("SettingsGeomStep")) {
2804 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2805 EmitSignalDefaultStepValueChanged(spin_step);
2807 else if (param == QString("toplevel_color")) {
2808 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2809 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2811 else if (param == QString("toplevel_dm")) {
2812 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2814 else if (param == QString("scalar_bar_x_position") ||
2815 param == QString("scalar_bar_y_position") ||
2816 param == QString("scalar_bar_width") ||
2817 param == QString("scalar_bar_height") ||
2818 param == QString("scalar_bar_text_height") ||
2819 param == QString("scalar_bar_nb_intervals")) {
2820 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2822 GEOM_Displayer aDisplayer( aStudy );
2823 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2824 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2827 else if ( param == QString("dimensions_color") ||
2828 param == QString("dimensions_line_width") ||
2829 param == QString("dimensions_font") ||
2830 param == QString("dimensions_arrow_length") ||
2831 param == QString("dimensions_show_units") ||
2832 param == QString("dimensions_length_units") ||
2833 param == QString("dimensions_angle_units") ||
2834 param == QString("dimensions_use_text3d") ||
2835 param == QString("shape_annotation_font_color") ||
2836 param == QString("shape_annotation_line_color") ||
2837 param == QString("shape_annotation_font") ||
2838 param == QString("shape_annotation_line_width") ||
2839 param == QString("shape_annotation_autohide") ||
2840 param == QString("shape_annotation_line_style") ||
2841 param == QString("shape_annotation_line_style") ||
2842 param == QString("label_color") )
2844 SalomeApp_Application* anApp = getApp();
2850 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2856 GEOM_Displayer aDisplayer( aStudy );
2858 ViewManagerList aVMs;
2859 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2860 ViewManagerList::Iterator anIt = aVMs.begin();
2861 for ( ; anIt != aVMs.end(); ++anIt )
2863 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2869 SALOME_ListIO aVisible;
2870 aViewer->GetVisible( aVisible );
2872 GEOMGUI_AnnotationMgr* anAnnotationMgr = GetAnnotationMgr();
2873 if ( anAnnotationMgr ) {
2874 SALOME_ListIteratorOfListIO anIter( aVisible );
2875 while ( anIter.More() ) {
2876 if ( anAnnotationMgr->isAnnotationEntry( anIter.Value()->getEntry() ) ) {
2877 aVisible.Remove( anIter );
2885 aDisplayer.Redisplay( aVisible, false, aViewer );
2887 if ( param == QString( "label_color" ) ) {
2888 ViewManagerList aVMsVTK;
2889 anApp->viewManagers( SVTK_Viewer::Type(), aVMsVTK );
2890 ViewManagerList::Iterator anIt = aVMsVTK.begin();
2891 for ( ; anIt != aVMsVTK.end(); ++anIt )
2893 SVTK_Viewer* aViewer = dynamic_cast<SVTK_Viewer*>( (*anIt)->getViewModel() );
2898 SALOME_ListIO aVisible;
2899 aViewer->GetVisible( aVisible );
2900 aDisplayer.Redisplay( aVisible, false, aViewer );
2903 aDisplayer.UpdateViewer();
2905 else if ( param.startsWith( "dependency_tree") )
2906 emit SignalDependencyTreeParamChanged( section, param );
2910 LightApp_Displayer* GeometryGUI::displayer()
2913 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2917 void GeometryGUI::setLocalSelectionMode(const int mode)
2919 myLocalSelectionMode = mode;
2922 int GeometryGUI::getLocalSelectionMode() const
2924 return myLocalSelectionMode;
2927 const char gSeparator = '_'; // character used to separate parameter names
2928 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2931 * \brief Store visual parameters
2933 * This method is called just before the study document is saved.
2934 * Store visual parameters in AttributeParameter attribute(s)
2936 void GeometryGUI::storeVisualParameters (int savePoint)
2938 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2939 if ( !appStudy || !appStudy->studyDS() )
2942 _PTR(Study) studyDS = appStudy->studyDS();
2944 // componentName is used for encoding of entries when storing them in IParameters
2945 std::string componentName = myComponentGeom->ComponentDataType();
2946 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2947 //if (!aSComponent) return;
2950 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2951 componentName.c_str(),
2953 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2955 QSet<QString> anEntriesToStoreShared;
2956 QList<SUIT_ViewManager*> lst;
2957 QList<SUIT_ViewManager*>::Iterator it;
2959 GEOMGUI_AnnotationMgr* aAnnotationMgr = GetAnnotationMgr();
2961 // main cycle to store parameters of displayed objects
2963 getApp()->viewManagers(lst);
2964 for (it = lst.begin(); it != lst.end(); it++) {
2965 SUIT_ViewManager* vman = *it;
2966 QString vType = vman->getType();
2967 SUIT_ViewModel* vmodel = vman->getViewModel();
2968 SALOME_View* aView = dynamic_cast<SALOME_View*>(vmodel);
2970 int aMgrId = vman->getGlobalId();
2971 // saving VTK actors properties
2972 QVector<SUIT_ViewWindow*> views = vman->getViews();
2973 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2974 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
2975 ObjMap::ConstIterator o_it = anObjects.begin();
2976 for (; o_it != anObjects.end(); o_it++) {
2977 const PropMap& aProps = o_it.value();
2979 //Check that object exists in the study
2980 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2981 if ( !obj || !(aProps.count() > 0))
2983 // entry is "encoded" = it does NOT contain component adress, since it is a
2984 // subject to change on next component loading
2986 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2988 _PTR(GenericAttribute) anAttr;
2989 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2992 // remember entry of object to store shared GEOM properties
2993 // (e.g. dimension properties).
2994 if ( vType == OCCViewer_Viewer::Type() )
2996 anEntriesToStoreShared.insert( o_it.key() );
2999 QString param, occParam = vType;
3000 occParam += GEOM::sectionSeparator();
3001 occParam += QString::number(aMgrId);
3002 occParam += GEOM::sectionSeparator();
3004 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
3005 param = occParam + GEOM::propertyName( GEOM::Visibility );
3006 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
3009 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
3010 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
3011 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
3014 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
3015 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
3017 val << QString::number(c.redF());
3018 val << QString::number(c.greenF());
3019 val << QString::number(c.blueF());
3020 param = occParam + GEOM::propertyName( GEOM::Color );
3021 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
3024 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
3025 param = occParam + GEOM::propertyName( GEOM::Texture );
3026 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
3029 if (vType == SVTK_Viewer::Type()) {
3030 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
3031 param = occParam + GEOM::propertyName( GEOM::Opacity );
3032 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
3034 } else if (vType == SOCC_Viewer::Type()) {
3035 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
3036 param = occParam + GEOM::propertyName( GEOM::Transparency );
3037 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
3040 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
3041 param = occParam + GEOM::propertyName( GEOM::TopLevel );
3042 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
3046 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
3047 param = occParam + GEOM::propertyName( GEOM::NbIsos );
3048 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
3051 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
3052 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
3053 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
3056 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
3057 param = occParam + GEOM::propertyName( GEOM::Vertices );
3058 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
3061 if (aProps.contains(GEOM::propertyName( GEOM::ShowName ))) {
3062 param = occParam + GEOM::propertyName( GEOM::ShowName );
3063 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::ShowName )).toString().toStdString());
3066 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
3067 param = occParam + GEOM::propertyName( GEOM::Deflection );
3068 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
3071 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
3072 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
3073 param = occParam + GEOM::propertyName( GEOM::PointMarker );
3074 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
3077 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
3078 param = occParam + GEOM::propertyName( GEOM::Material );
3079 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
3082 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
3083 param = occParam + GEOM::propertyName( GEOM::LineWidth );
3084 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
3087 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
3088 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
3089 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
3092 if ( vType == SOCC_Viewer::Type() && aAnnotationMgr ) {
3093 std::string anAnnotationInfo = GetAnnotationMgr()->getDisplayedIndicesInfo(
3094 o_it.key().toLatin1().data(), dynamic_cast<SOCC_Viewer*>(aView) ).toStdString();
3095 if (!anAnnotationInfo.empty()) {
3096 param = occParam + "ShapeAnnotationVisibleItems";
3097 ip->setParameter(entry, param.toStdString(), anAnnotationInfo);
3100 } // object iterator
3102 } // for (viewManagers)
3104 // store shape annotation and dimension attributes of objects:
3105 // since the displayed object always persists in property map, we remember the object entries
3106 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
3107 const QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
3108 const QString aAnnotationParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::ShapeAnnotations );
3109 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
3110 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
3112 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
3113 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName );
3115 // store dimension parameters
3116 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
3117 if ( aDimensions.GetNumber() != 0 ) {
3118 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
3121 _PTR(SObject) aObj( studyDS->FindObjectID( aStudyEntry ) );
3122 const Handle(GEOMGUI_AnnotationAttrs) aShapeAnnAttr = GEOMGUI_AnnotationAttrs::FindAttributes( aObj );
3123 if ( !aShapeAnnAttr.IsNull() ) {
3124 ip->setParameter( aStoreEntry, aAnnotationParam.toStdString(), aShapeAnnAttr->ExportAsPropertyString().toLatin1().data() );
3130 * \brief Restore visual parameters
3132 * This method is called after the study document is opened.
3133 * Restore visual parameters from AttributeParameter attribute(s)
3135 void GeometryGUI::restoreVisualParameters (int savePoint)
3137 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
3138 if (!appStudy || !appStudy->studyDS())
3140 _PTR(Study) studyDS = appStudy->studyDS();
3142 // componentName is used for encoding of entries when storing them in IParameters
3143 std::string componentName = myComponentGeom->ComponentDataType();
3144 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
3145 //if (!aSComponent) return;
3148 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
3149 componentName.c_str(),
3151 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
3153 std::vector<std::string> entries = ip->getEntries();
3155 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
3157 // entry is a normal entry - it should be "decoded" (setting base adress of component)
3158 QString entry (ip->decodeEntry(*entIt).c_str());
3160 // Check that the entry corresponds to a real object in the Study
3161 // as the object may be deleted or modified after the visual state is saved.
3162 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
3163 if (!so) continue; //Skip the not existent entry
3165 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
3166 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
3168 std::vector<std::string>::iterator namesIt = paramNames.begin();
3169 std::vector<std::string>::iterator valuesIt = paramValues.begin();
3171 // actors are stored in a map after displaying of them for
3172 // quicker access in the future: map < viewID to actor >
3173 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
3174 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
3176 QString viewerTypStr;
3177 QString viewIndexStr;
3179 QVector<PropMap> aListOfMap;
3181 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
3183 // visual parameters are stored in strings as follows:
3184 // 1) ViewerType_ViewIndex_ParamName
3185 // 2) ViewerType_ParamName (shared for GEOM module)
3186 // '_' is used as separator and should not be used in viewer type or parameter names.
3187 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
3189 bool isShared = lst.size() == 2;
3190 bool isViewer = lst.size() == 3;
3191 if ( !isShared && !isViewer )
3196 // shared visual parameters
3199 QString aParamNameStr( lst[1] );
3200 QString aValuesStr( (*valuesIt).c_str() );
3202 // shared dimension properties are stored as attribute
3203 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
3205 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
3206 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
3208 else if ( aParamNameStr == GEOM::propertyName( GEOM::ShapeAnnotations ) )
3210 Handle(GEOMGUI_AnnotationAttrs) anAttr =
3211 GEOMGUI_AnnotationAttrs::FindOrCreateAttributes( so, appStudy );
3213 anAttr->ImportFromPropertyString( aValuesStr );
3219 // per view visual parameters
3220 viewerTypStr = lst[0];
3221 viewIndexStr = lst[1];
3222 QString paramNameStr = lst[2];
3225 viewIndex = viewIndexStr.toUInt(&ok);
3226 if (!ok) // bad conversion of view index to integer
3229 if ((viewIndex + 1) > aListOfMap.count()) {
3230 aListOfMap.resize(viewIndex + 1);
3233 QString val((*valuesIt).c_str());
3234 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
3235 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
3236 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
3237 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
3238 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
3239 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
3240 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
3241 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
3242 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
3243 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
3244 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
3245 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
3246 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
3247 QStringList rgb = val.split(GEOM::subSectionSeparator());
3248 if (rgb.count() == 3) {
3249 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
3250 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
3252 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
3253 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
3254 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
3255 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
3256 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
3257 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
3258 } else if (paramNameStr == GEOM::propertyName( GEOM::ShowName )) {
3259 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::ShowName ), val == "true" || val == "1");
3260 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3261 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3262 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3263 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3264 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3265 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3266 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3267 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3268 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3269 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3270 } else if (paramNameStr == "ShapeAnnotationVisibleItems") {
3271 aListOfMap[viewIndex].insert( "ShapeAnnotationVisibleItems", val);
3274 } // for names/parameters iterator
3276 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3278 for (int index = 0; index < aListOfMap.count(); index++) {
3279 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
3281 //Get Visibility property of the current PropMap
3282 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3283 SUIT_ViewManager* vman = lst.at(index);
3284 SUIT_ViewModel* vmodel = vman->getViewModel();
3285 SALOME_View* aView = dynamic_cast<SALOME_View*>(vmodel);
3286 displayer()->Display(entry, true, aView);
3288 if ( vmodel->getType() == SOCC_Viewer::Type() ) {
3289 PropMap& aProps = aListOfMap[index];
3290 if ( aProps.contains( "ShapeAnnotationVisibleItems" ) ) {
3291 SOCC_Viewer* aSOCCView = dynamic_cast<SOCC_Viewer*>( aView );
3292 GetAnnotationMgr()->setDisplayedIndicesInfo( entry, aSOCCView, aProps["ShapeAnnotationVisibleItems"].toString() );
3297 } // for entries iterator
3299 // update all VTK and OCC views
3300 QList<SUIT_ViewManager*> lst;
3301 getApp()->viewManagers(lst);
3302 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3303 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3306 if (vmodel->getType() == SVTK_Viewer::Type()) {
3307 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3308 vtkView->getRenderer()->ResetCameraClippingRange();
3311 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3312 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3313 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3319 if ( myTextTreeWdg ) {
3320 myTextTreeWdg->updateTree();
3324 // Compute current name mode of the viewer
3325 void UpdateNameMode( SalomeApp_Application* app )
3327 bool isMode = false;
3328 SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() );
3329 SUIT_ViewWindow* viewWindow = app->desktop()->activeWindow();
3330 GEOM_Displayer displayer( aStudy );
3331 int aMgrId = viewWindow->getViewManager()->getGlobalId();
3333 SALOME_View* window = displayer.GetActiveView();
3334 if ( !window ) return;
3336 SALOME_ListIO anIOlst;
3337 window->GetVisible( anIOlst );
3339 for ( SALOME_ListIteratorOfListIO It( anIOlst ); It.More(); It.Next() ) {
3340 Handle( SALOME_InteractiveObject ) io = It.Value();
3341 QVariant v = aStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::ShowName ), QVariant() );
3342 bool isIONameMode = v.isValid() ? v.toBool() : false;
3346 viewWindow->setProperty( "NameMode", isMode );
3349 void GeometryGUI::onViewAboutToShow()
3351 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3352 QAction* a = action( GEOMOp::OpSwitchVectors );
3353 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3354 QAction* aNameAction = action( GEOMOp::OpSwitchName );
3356 a->setEnabled(true);
3357 bool vmode = window->property("VectorsMode").toBool();
3358 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3359 aVerticesAction->setEnabled(true);
3360 vmode = window->property("VerticesMode").toBool();
3361 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3362 UpdateNameMode( getApp() );
3363 aNameAction->setEnabled(true);
3364 vmode = window->property("NameMode").toBool();
3365 aNameAction->setText ( vmode == 1 ? tr( "MEN_NAME_MODE_OFF" ) : tr("MEN_NAME_MODE_ON") );
3367 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3368 a->setEnabled(false);
3369 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3370 aVerticesAction->setEnabled(false);
3371 aNameAction->setText ( tr("MEN_NAME_MODE_ON") );
3372 aNameAction->setEnabled(false);
3377 \brief Return action by id
3378 \param id identifier of the action
3381 QAction* GeometryGUI::getAction(const int id) {
3386 \brief GEOM module message handler
3388 This method can be re-implemented in the subclasses.
3389 This is a GEOM module message handler.
3391 \param msg the message received.
3393 void GeometryGUI::message(const QString& msg)
3396 QStringList data = msg.split("/");
3397 const int nbStrings = data.count();
3399 if (nbStrings > 0) {
3400 if (data[0] == "modified") {
3402 QString anIOR = nbStrings > 1 ? data[1] : QString();
3404 if ( anIOR.isEmpty() ) {
3408 // Get the geom object.
3409 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3411 // Clear the shape buffer
3412 GeometryGUI::ClearShapeBuffer (anObj);
3418 \brief Clears the shape buffer.
3420 This is a static method. It clears the shape buffer.
3422 \param theObj the object
3424 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3426 if ( CORBA::is_nil( theObj ) )
3429 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3430 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3431 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3433 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3438 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3443 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3447 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3448 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3449 _PTR(GenericAttribute) anAttr;
3450 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3451 _PTR(AttributeIOR) anIOR ( anAttr );
3452 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3453 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3459 \brief Returns the object from IOR.
3461 This is a static method. It returns the object from its IOR.
3463 \param IOR object IOR
3464 \return GEOM object.
3466 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3468 GEOM::GEOM_Object_var geomObj;
3469 if ( !IOR.isEmpty() ) {
3470 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3471 ( IOR.toLatin1().constData() );
3472 if ( !CORBA::is_nil( corbaObj ) )
3473 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3475 return geomObj._retn();
3479 \brief Returns IOR of the object.
3481 This is a static method. It returns the object's IOR.
3483 \param object the GEOM object.
3484 \return object's IOR.
3486 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3489 if ( !CORBA::is_nil( object ) ) {
3490 CORBA::String_var anIOR =
3491 SalomeApp_Application::orb()->object_to_string( object );
3498 \brief Check if this object is can't be renamed in place
3500 This method can be re-implemented in the subclasses.
3501 Return true in case if object isn't reference or component (module root).
3503 \param entry column id
3504 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3506 bool GeometryGUI::renameAllowed( const QString& entry) const {
3508 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3509 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3510 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3512 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3516 Rename object by entry.
3517 \param entry entry of the object
3518 \param name new name of the object
3519 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3521 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3523 bool result = false;
3525 SalomeApp_Application* app =
3526 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3527 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3532 _PTR(Study) aStudy = appStudy->studyDS();
3537 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3539 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3543 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3544 _PTR(GenericAttribute) anAttr;
3546 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3547 _PTR(AttributeName) aName (anAttr);
3549 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3550 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3551 if (!CORBA::is_nil(anObj)) {
3552 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3553 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3554 emit SignalTextTreeRenameObject( entry );
3562 void GeometryGUI::updateMaterials()
3564 LightApp_Preferences* pref = preferences();
3566 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3567 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3568 if ( !materials.contains( currentMaterial ) )
3569 // user material set as default in the preferences, might be removed
3570 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3572 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3574 setPreferenceProperty( prefItem->id(),
3575 "strings", materials );
3576 prefItem->retrieve();
3582 \brief Check if the module allows "drag" operation of its objects.
3584 Overloaded from LightApp_Module class.
3586 This function is a part of the general drag-n-drop mechanism.
3587 The goal of this function is to check data object passed as a parameter
3588 and decide if it can be dragged or no.
3590 \param what data object being tested for drag operation
3591 \return \c true if module allows dragging of the specified object
3592 \sa isDropAccepted(), dropObjects()
3594 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3596 // we allow dragging object under root and object from folder
3597 int aLevel = what->level();
3598 bool anObjectInFolder = false;
3600 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3602 _PTR(SObject) aSO = dataObj->object();
3604 _PTR(GenericAttribute) anAttr;
3605 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3606 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3607 _PTR(AttributeLocalID) aLocalID( anAttr );
3608 anObjectInFolder = aLocalID->Value() == 999;
3613 return aLevel == 2 || anObjectInFolder;
3617 \brief Check if the module allows "drop" operation on the given object.
3619 Overloaded from LightApp_Module class.
3621 This function is a part of the general drag-n-drop mechanism.
3622 The goal of this function is to check data object passed as a parameter
3623 and decide if it can be used as a target for the "drop" operation.
3624 The processing of the drop operation itself is done in the dropObjects() function.
3626 \param where target data object
3627 \return \c true if module supports dropping on the \a where data object
3628 \sa isDraggable(), dropObjects()
3630 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3632 // we allow dropping into folder and top-level GEOM object
3633 int aLevel = where->level();
3634 bool isFolder = false;
3636 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3638 _PTR(SObject) aSO = dataObj->object();
3640 _PTR(GenericAttribute) anAttr;
3641 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3642 _PTR(AttributeLocalID) aLocalID( anAttr );
3643 isFolder = aLocalID->Value() == 999;
3648 return aLevel == 1 || isFolder;
3652 \brief Complete drag-n-drop operation.
3654 Overloaded from LightApp_Module class.
3656 This function is a part of the general drag-n-drop mechanism.
3657 Its goal is to handle dropping of the objects being dragged according
3658 to the chosen operation (move). The dropping is performed in the
3659 context of the parent data object \a where and the \a row (position in the
3660 children index) at which the data should be dropped. If \a row is equal to -1,
3661 this means that objects are added to the end of the children list.
3663 \param what objects being dropped
3664 \param where target data object
3665 \param row child index at which the drop operation is performed
3666 \param action drag-n-drop operation (Qt::DropAction) - move
3668 \sa isDraggable(), isDropAccepted()
3670 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3671 const int row, Qt::DropAction action )
3673 if (action != Qt::CopyAction && action != Qt::MoveAction)
3674 return; // unsupported action
3676 // get parent object
3677 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3678 if ( !dataObj ) return; // wrong parent
3679 _PTR(SObject) parentObj = dataObj->object();
3681 // Find the current Study and StudyBuilder
3682 _PTR(Study) aStudy = parentObj->GetStudy();
3683 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3684 // collect all parents of the target node
3685 QStringList parentIDs;
3686 _PTR(SObject) parent = parentObj;
3687 while( !parent->IsNull() ) {
3688 parentIDs << parent->GetID().c_str();
3689 parent = aUseCaseBuilder->GetFather(parent);
3692 // collect objects being dropped
3693 GEOM::object_list_var objects = new GEOM::object_list();
3694 objects->length( what.count() );
3696 for ( int i = 0; i < what.count(); i++ ) {
3697 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3698 if ( !dataObj ) continue; // skip wrong objects
3699 _PTR(SObject) sobj = dataObj->object();
3700 // check that dropped object is not a parent of target object
3701 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3702 return; // it's not allowed to move node into it's child
3704 objects[i] = _CAST(SObject, sobj)->GetSObject();
3707 objects->length( count );
3709 // call engine function
3710 GetGeomGen()->Move( objects.in(), // what
3711 _CAST(SObject, parentObj)->GetSObject(), // where
3714 // update Object browser
3715 getApp()->updateObjectBrowser( false );
3718 void GeometryGUI::emitDimensionsUpdated( QString entry )
3720 emit DimensionsUpdated( entry );
3723 void GeometryGUI::emitAnnotationsUpdated( QString entry )
3725 emit SignalAnnotationsUpdated( entry );