1 // Copyright (C) 2007-2023 CEA, EDF, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : GeometryGUI.cxx
23 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
25 #include <Standard_math.hxx> // E.A. must be included before Python.h to fix compilation on windows
27 #undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
30 #include "GeometryGUI.h"
31 #include "GeometryGUI_Operations.h"
32 #include "GEOMPluginGUI.h"
33 #include "GEOMGUI_OCCSelector.h"
34 #include "GEOMGUI_Selection.h"
35 #include "GEOMGUI_CreationInfoWdg.h"
36 #include "GEOMGUI_TextTreeWdg.h"
37 #include "GEOMGUI_DimensionProperty.h"
38 #include "GEOM_Constants.h"
39 #include "GEOM_Displayer.h"
40 #include "GEOM_AISShape.hxx"
41 #include "GEOMUtils_XmlHandler.hxx"
42 #include "GEOMGUI_AnnotationMgr.h"
43 #include "GEOMGUI_TextTreeSelector.h"
45 #include "GEOM_Actor.h"
47 #include <Material_ResourceMgr.h>
48 #include <Material_Model.h>
50 #include <Basics_OCCTVersion.hxx>
52 #include <SUIT_Desktop.h>
53 #include <SUIT_MessageBox.h>
54 #include <SUIT_ResourceMgr.h>
55 #include <SUIT_Session.h>
56 #include <SUIT_ViewManager.h>
58 #include <OCCViewer_ViewWindow.h>
59 #include <OCCViewer_ViewPort3d.h>
60 #include <OCCViewer_ViewModel.h>
61 #include <OCCViewer_ViewManager.h>
63 #include <PV3DViewer_ViewWindow.h>
64 #include <PV3DViewer_ViewModel.h>
65 #include <PV3DViewer_ViewManager.h>
67 #include <SOCC_ViewModel.h>
68 #include <SOCC_ViewWindow.h>
70 #include <SVTK_ViewWindow.h>
71 #include <SVTK_RenderWindowInteractor.h>
72 #include <SVTK_InteractorStyle.h>
73 #include <SVTK_ViewModel.h>
75 #ifndef DISABLE_GRAPHICSVIEW
76 #include <GraphicsView_Viewer.h>
79 #include <SalomeApp_Application.h>
80 #include <SalomeApp_DataObject.h>
81 #include <SalomeApp_Study.h>
82 #include <SalomeApp_Tools.h>
84 #include <LightApp_SelectionMgr.h>
85 #include <LightApp_VTKSelector.h>
86 #include <LightApp_DataObject.h>
87 #include <LightApp_Preferences.h>
89 #include <SALOME_LifeCycleCORBA.hxx>
90 #include <SALOME_ListIO.hxx>
92 #include <SALOMEDSClient_ClientFactory.hxx>
93 #include <SALOMEDSClient_IParameters.hxx>
94 #include "SALOME_KernelServices.hxx"
96 #include <SALOMEDS_SObject.hxx>
98 #include <QtxFontEdit.h>
99 #include <QtxInfoPanel.h>
110 #include <QSignalMapper>
111 #include <QFontDatabase>
113 #include <AIS_ListOfInteractive.hxx>
114 #include <AIS_ListIteratorOfListOfInteractive.hxx>
115 #include <Prs3d_Drawer.hxx>
116 #include <Prs3d_IsoAspect.hxx>
117 #include <Aspect_TypeOfMarker.hxx>
118 #include <OSD_SharedLibrary.hxx>
119 #include <NCollection_DataMap.hxx>
121 #include <TColStd_HArray1OfByte.hxx>
122 #include <TColStd_SequenceOfHAsciiString.hxx>
124 #include <utilities.h>
126 #include <vtkCamera.h>
127 #include <vtkRenderer.h>
129 #include <Standard_Failure.hxx>
130 #include <Standard_ErrorHandler.hxx>
132 #include <Font_SystemFont.hxx>
133 #include <Font_FontMgr.hxx>
134 #include <TCollection_HAsciiString.hxx>
136 #include "GEOM_version.h"
137 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
140 Standard_EXPORT CAM_Module* createModule() {
141 return new GeometryGUI();
144 Standard_EXPORT char* getModuleVersion() {
145 return (char*)GEOM_VERSION_STR;
149 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
151 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
153 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
154 if (CORBA::is_nil(myComponentGeom))
156 return GeometryGUI::myComponentGeom;
159 bool GeometryGUI::InitGeomGen()
162 if ( CORBA::is_nil( myComponentGeom ) ) return false;
166 //=======================================================================
167 // function : ClientSObjectToObject
169 //=======================================================================
170 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
172 _PTR(GenericAttribute) anAttr;
173 CORBA::Object_var anObj;
175 std::string aValue = theSObject->GetIOR();
176 if (strcmp(aValue.c_str(), "") != 0) {
177 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
178 anObj = anORB->string_to_object(aValue.c_str());
181 INFOS("ClientSObjectToObject - Unknown exception has occurred!!!");
183 return anObj._retn();
185 //=================================================================================
186 // function : IsInGeomComponent
187 // purpose : Check if an SObject is under GEOM component
188 //=================================================================================
189 bool GeometryGUI::IsInGeomComponent( _PTR(SObject) sobject )
192 if ( _PTR(SComponent) aComp = sobject->GetFatherComponent() )
193 return aComp->ComponentDataType() == "GEOM";
197 //=======================================================================
198 // function : GetStudy
200 //=======================================================================
201 SALOMEDS::Study_var GeometryGUI::getStudyServant()
203 SALOME_NamingService_Abstract *aNamingService = SalomeApp_Application::namingService();
204 CORBA::Object_var aStudyObject = aNamingService->Resolve("/Study");
205 SALOMEDS::Study_var aStudy = SALOMEDS::Study::_narrow(aStudyObject);
206 return aStudy._retn();
209 void GeometryGUI::Modified (bool theIsUpdateActions)
211 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
212 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
213 appStudy->Modified();
214 if ( theIsUpdateActions )
215 app->updateActions();
220 //=======================================================================
221 // function : GeometryGUI::GeometryGUI()
222 // purpose : Constructor
223 //=======================================================================
224 GeometryGUI::GeometryGUI() : SalomeApp_Module( "GEOM" )
226 if ( CORBA::is_nil( myComponentGeom ) )
228 SALOME_NamingService_Abstract *ns = SalomeApp_Application::namingService();
229 Engines::EngineComponent_var comp = SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
230 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
233 myActiveDialogBox = 0;
235 gp_Pnt origin = gp_Pnt(0., 0., 0.);
236 gp_Dir direction = gp_Dir(0., 0., 1.);
237 myWorkingPlane = gp_Ax3(origin, direction);
240 myLocalSelectionMode = GEOM_ALLOBJECTS;
242 myCreationInfoWdg = 0;
246 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ), Qt::UniqueConnection );
248 Q_INIT_RESOURCE( GEOMGUI );
251 //=======================================================================
252 // function : GeometryGUI::~GeometryGUI()
253 // purpose : Destructor
254 //=======================================================================
255 GeometryGUI::~GeometryGUI()
257 while (!myOCCSelectors.isEmpty())
258 delete myOCCSelectors.takeFirst();
260 while (!myVTKSelectors.isEmpty())
261 delete myVTKSelectors.takeFirst();
263 qDeleteAll(myGUIMap);
266 //=======================================================================
267 // function : GeometryGUI::getLibrary()
268 // purpose : get or load GUI library by name [ internal ]
269 //=======================================================================
270 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
271 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
273 if ( !myGUIMap.contains( libraryName ) ) {
274 // try to load library if it is not loaded yet
276 QString dirs = Qtx::getenv( "PATH" );
277 #elif defined(__APPLE__)
278 QString dirs = Qtx::getenv( "DYLD_LIBRARY_PATH" );
280 QString dirs = Qtx::getenv( "LD_LIBRARY_PATH" );
288 if ( !dirs.isEmpty() ) {
289 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
290 QListIterator<QString> it( dirList ); it.toBack();
291 while ( it.hasPrevious() ) {
292 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
294 OSD_SharedLibrary aSharedLibrary( fi.fileName().toUtf8().constData() );
295 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
297 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
298 continue; // continue search further
300 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
301 if ( osdF != NULL ) {
302 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
303 GEOMGUI* libGUI = (*func)( this );
305 myGUIMap[ libraryName ] = libGUI;
306 break; // found and loaded!
313 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
316 //=======================================================================
317 // function : GeometryGUI::getPluginLibrary()
318 // purpose : get or load GUI Plugin library by name [ internal ]
319 //=======================================================================
320 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
321 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
323 if ( !myGUIMap.contains( libraryName ) ) {
324 // try to load library if it is not loaded yet
327 QString dirs = Qtx::getenv( "PATH" );
328 #elif defined(__APPLE__)
329 QString dirs = Qtx::getenv( "DYLD_LIBRARY_PATH" );
331 QString dirs = Qtx::getenv( "LD_LIBRARY_PATH" );
339 if ( !dirs.isEmpty() ) {
340 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
341 QListIterator<QString> it( dirList ); it.toBack();
342 while ( it.hasPrevious() ) {
343 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
345 OSD_SharedLibrary aSharedLibrary( fi.fileName().toUtf8().constData() );
346 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
348 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
349 continue; // continue search further
351 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
352 if ( osdF != NULL ) {
353 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
354 GEOMPluginGUI* libGUI = (*func)( this );
356 myGUIMap[ libraryName ] = libGUI;
357 break; // found and loaded!
364 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
367 //=======================================================================
368 // function : GeometryGUI::ActiveWorkingPlane()
369 // purpose : Activate Working Plane View
370 //=======================================================================
371 void GeometryGUI::ActiveWorkingPlane()
373 gp_Dir DZ = myWorkingPlane.Direction();
374 gp_Dir DY = myWorkingPlane.YDirection();
376 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
377 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
378 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
379 bool ViewPV3D = ( window && window->getViewManager()->getType() == PV3DViewer_ViewModel::Type() );
382 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
384 Handle(V3d_View) view3d = vw->getViewPort()->getView();
386 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
387 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
391 else if ( ViewVTK ) {
392 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
394 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
396 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
397 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
398 camera->SetFocalPoint(0,0,0);
403 else if ( ViewPV3D ) {
404 PV3DViewer_ViewWindow* vw = dynamic_cast<PV3DViewer_ViewWindow*>( window );
410 //=======================================================================
411 // function : GeometryGUI::SetActiveDialogBox()
412 // purpose : Set active dialog box
413 //=======================================================================
414 GEOMGUI_AnnotationMgr* GeometryGUI::GetAnnotationMgr()
416 if ( !myAnnotationMgr )
417 myAnnotationMgr = new GEOMGUI_AnnotationMgr( getApp() );
418 return myAnnotationMgr;
421 //=======================================================================
422 // function : GeometryGUI::SetActiveDialogBox()
423 // purpose : Set active dialog box
424 //=======================================================================
425 GEOMGUI_TextTreeWdg* GeometryGUI::GetTextTreeWdg() const
427 return myTextTreeWdg;
430 //=======================================================================
431 // function : GeometryGUI::SetActiveDialogBox()
432 // purpose : Set active dialog box
433 //=======================================================================
434 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
436 myActiveDialogBox = (QDialog*)aDlg;
439 //=======================================================================
440 // function : GeometryGUI::EmitSignalDeactivateDialog()
441 // purpose : Emit a signal to deactivate the active dialog Box
442 //=======================================================================
443 void GeometryGUI::EmitSignalDeactivateDialog()
445 emit SignalDeactivateActiveDialog();
448 //=======================================================================
449 // function : GeometryGUI::EmitSignalCloseAllDialogs()
450 // purpose : Emit a signal to close all non modal dialogs box
451 //=======================================================================
452 void GeometryGUI::EmitSignalCloseAllDialogs()
454 emit SignalCloseAllDialogs();
457 //=======================================================================
458 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
459 // purpose : Emit a signal to inform that default real spin box step has
461 //=======================================================================
462 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
464 emit SignalDefaultStepValueChanged(newVal);
467 //=======================================================================
468 // function : GeometryGUI::OnGUIEvent()
469 // purpose : common slot for all menu/toolbar actions
470 //=======================================================================
471 void GeometryGUI::OnGUIEvent()
473 const QObject* obj = sender();
474 if ( !obj || !obj->inherits( "QAction" ) )
476 int id = actionId((QAction*)obj);
481 //=======================================================================
482 // function : GeometryGUI::OnGUIEvent()
483 // purpose : manage all events on GUI [static]
484 //=======================================================================
485 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
487 SUIT_Application* anApp = application();
489 SUIT_Desktop* desk = anApp->desktop();
491 // check type of the active viewframe
492 SUIT_ViewWindow* window = desk->activeWindow();
493 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
494 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
495 #ifndef DISABLE_GRAPHICSVIEW
496 bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() );
500 // if current viewframe is not of OCC and not of VTK type - return immediately
501 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
502 QList<int> NotViewerDependentCommands;
503 NotViewerDependentCommands << GEOMOp::OpDelete
505 << GEOMOp::OpShowOnly
506 << GEOMOp::OpShowOnlyChildren
507 << GEOMOp::OpDiscloseChildren
508 << GEOMOp::OpConcealChildren
509 << GEOMOp::OpUnpublishObject
510 << GEOMOp::OpPublishObject
511 << GEOMOp::OpPointMarker
512 << GEOMOp::OpCreateFolder
513 << GEOMOp::OpSortChildren;
514 if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) {
515 // activate OCC viewer
516 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
519 // fix for IPAL9103, point 2
520 if ( CORBA::is_nil( GetGeomGen() ) ) {
521 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
526 // find corresponding GUI library
528 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
529 createOriginAndBaseVectors(); // internal operation
531 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
532 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
533 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
534 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
535 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
536 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
537 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
538 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
539 case GEOMOp::OpDelete: // MENU EDIT - DELETE
540 #ifndef DISABLE_PYCONSOLE
541 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
543 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
544 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
545 case GEOMOp::OpColor: // POPUP MENU - COLOR
546 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
547 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
548 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
549 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
550 case GEOMOp::OpIsos: // POPUP MENU - ISOS
551 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
552 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
553 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
554 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
555 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
556 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
557 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
558 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
559 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
560 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
561 case GEOMOp::OpMaterialMenu: // POPUP MENU - MATERIAL PROPERTIES (sub-menu)
562 case GEOMOp::OpPredefMaterial: // POPUP MENU - MATERIAL PROPERTIES (sub-menu) - <SOME MATERIAL>
563 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES (sub-menu) - CUSTOM...
564 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
565 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
566 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
567 case GEOMOp::OpClsBringToFront: //
568 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
569 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
570 #ifndef DISABLE_GRAPHICSVIEW
571 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
573 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
574 libName = "GEOMToolsGUI";
576 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
577 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
578 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
579 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
580 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
581 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
582 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
583 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
584 case GEOMOp::OpHide: // MENU VIEW - ERASE
585 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
586 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
587 case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE
588 case GEOMOp::OpSwitchName: // MENU VIEW - VERTICES MODE
589 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
590 case GEOMOp::OpShading: // POPUP MENU - SHADING
591 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
592 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
593 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
594 case GEOMOp::OpVertices: // POPUP MENU - VERTICES
595 case GEOMOp::OpShowName: // POPUP MENU - SHOW NAME
596 libName = "DisplayGUI";
598 case GEOMOp::OpPoint: // MENU BASIC - POINT
599 case GEOMOp::OpLine: // MENU BASIC - LINE
600 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
601 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
602 case GEOMOp::OpArc: // MENU BASIC - ARC
603 case GEOMOp::OpVector: // MENU BASIC - VECTOR
604 case GEOMOp::OpPlane: // MENU BASIC - PLANE
605 case GEOMOp::OpCurve: // MENU BASIC - CURVE
606 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
607 libName = "BasicGUI";
609 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
610 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
611 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
612 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
613 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
614 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
615 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
616 libName = "PrimitiveGUI";
618 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
619 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
620 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
621 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
622 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
623 case GEOMOp::OpThickness: // MENU GENERATION - THICKNESS
624 libName = "GenerationGUI";
626 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
627 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
628 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
629 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
630 case GEOMOp::OpSurfaceFromFace: // MENU ENTITY - SURFACE FROM FACE
632 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
634 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
635 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
636 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
637 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
638 case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR
639 libName = "EntityGUI";
641 case GEOMOp::OpEdge: // MENU BUILD - EDGE
642 case GEOMOp::OpWire: // MENU BUILD - WIRE
643 case GEOMOp::OpFace: // MENU BUILD - FACE
644 case GEOMOp::OpShell: // MENU BUILD - SHELL
645 case GEOMOp::OpSolid: // MENU BUILD - SOLID
646 case GEOMOp::OpCompound: // MENU BUILD - COMPOUND
647 libName = "BuildGUI";
649 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
650 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
651 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
652 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
653 libName = "BooleanGUI";
655 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
656 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
657 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
658 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
659 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
660 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
661 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
662 case GEOMOp::OpProjOnCyl: // MENU TRANSFORMATION - PROJECTION ON CYLINDER
663 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
664 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
665 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
666 case GEOMOp::OpExtension: // MENU TRANSFORMATION - EXTENSION
667 libName = "TransformationGUI";
669 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
670 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
671 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
672 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
673 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
674 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
675 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
676 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
677 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
678 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
679 case GEOMOp::OpTransferData: // MENU OPERATION - TRANSFER DATA
680 case GEOMOp::OpExtraction: // MENU OPERATION - EXTRACT AND REBUILD
681 libName = "OperationGUI";
683 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
684 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
685 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
686 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
687 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
688 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
689 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
690 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
691 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
692 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
693 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
694 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
695 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
696 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
697 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
698 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
699 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
700 case GEOMOp::OpInspectObj: // MENU REPAIR - INSPECT OBJECT
701 libName = "RepairGUI";
703 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
704 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
705 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
706 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
707 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
708 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
709 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
710 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
711 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
712 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
713 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
714 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
715 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
716 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
717 case GEOMOp::OpFastCheckInters: // MENU MEASURE - FAST CHECK INTERSECTIONS
718 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
719 case GEOMOp::OpAnnotation: // MENU MEASURE - ANNOTATION
720 case GEOMOp::OpEditAnnotation: // POPUP MENU - EDIT ANNOTATION
721 case GEOMOp::OpDeleteAnnotation: // POPUP MENU - DELETE ANNOTATION
722 #ifndef DISABLE_PLOT2DVIEWER
723 case GEOMOp::OpShapeStatistics: // MENU MEASURE - SHAPE STATISTICS
725 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
726 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
727 case GEOMOp::OpShowAllAnnotations: // POPUP MENU - SHOW ALL ANNOTATIONS
728 case GEOMOp::OpHideAllAnnotations: // POPUP MENU - HIDE ALL ANNOTATIONS
729 libName = "MeasureGUI";
731 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
732 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
733 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
734 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
735 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
736 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
737 libName = "GroupGUI";
739 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
740 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
741 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
742 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
743 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
744 libName = "BlocksGUI";
746 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
747 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
748 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
749 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
750 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
751 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
752 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
753 //libName = "AdvancedGUI";
756 if (myPluginActions.contains(id)) {
757 libName = myPluginActions[id].first;
759 GEOMPluginGUI* library = 0;
760 if ( !libName.isEmpty() ) {
762 libName = libName + ".dll";
763 #elif defined(__APPLE__)
764 libName = QString( "lib" ) + libName + ".dylib";
766 libName = QString( "lib" ) + libName + ".so";
768 library = getPluginLibrary( libName );
771 // call method of corresponding GUI library
773 //QString action ("%1");
774 //action = action.arg(id);
776 //if( !theParam.isValid() )
777 library->OnGUIEvent( myPluginActions[id].second, desk );
779 // library->OnGUIEvent( id, desk, theParam);
782 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
784 updateCreationInfo();
790 GEOMGUI* library = 0;
791 if ( !libName.isEmpty() ) {
793 libName = libName + ".dll";
794 #elif defined(__APPLE__)
795 libName = QString( "lib" ) + libName + ".dylib";
797 libName = QString( "lib" ) + libName + ".so";
799 library = getLibrary( libName );
802 // call method of corresponding GUI library
804 if( !theParam.isValid() )
805 library->OnGUIEvent( id, desk );
807 library->OnGUIEvent( id, desk, theParam);
810 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
812 updateCreationInfo();
815 //=================================================================================
816 // function : GeometryGUI::activateOperation()
818 //=================================================================================
819 bool GeometryGUI::activateOperation( int actionId )
821 OnGUIEvent(actionId);
825 //=================================================================================
826 // function : GeometryGUI::activateOperation()
828 //=================================================================================
829 bool GeometryGUI::activateOperation( const QString& actionId )
833 int id = actionId.toInt(&isOk);
840 //=================================================================================
841 // function : GeometryGUI::activateOperation()
843 //=================================================================================
844 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
848 QString pluginLib = plugin;
849 // TODO: if <plugin> is a plugin name, find plugin library name
850 if (myPluginLibs.contains(plugin))
851 pluginLib = myPluginLibs[plugin];
853 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
854 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
855 const PluginAction& anAction = actionsIter.value();
856 if (anAction.first == pluginLib && anAction.second == actionId) {
857 // activate operation
858 OnGUIEvent(actionsIter.key());
866 //=================================================================================
867 // function : GeometryGUI::OnKeyPress()
868 // purpose : Called when any key is pressed by user [static]
869 //=================================================================================
870 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
872 if ( !application() )
874 foreach ( GEOMGUI* lib, myGUIMap )
875 lib->OnKeyPress( e, application()->desktop(), w );
878 //=================================================================================
879 // function : GeometryGUI::OnMouseMove()
880 // purpose : Manages mouse move events [static]
881 //=================================================================================
882 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
884 if ( !application() )
886 foreach ( GEOMGUI* lib, myGUIMap )
887 lib->OnMouseMove( e, application()->desktop(), w );
890 //=================================================================================
891 // function : GeometryGUI::OnMouseRelease()
892 // purpose : Manages mouse release events [static]
893 //=================================================================================
894 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
896 if ( !application() )
898 foreach ( GEOMGUI* lib, myGUIMap )
899 lib->OnMouseRelease( e, application()->desktop(), w );
902 //=================================================================================
903 // function : GeometryGUI::OnMousePress()
904 // purpose : Manage mouse press events [static]
905 //=================================================================================
906 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
908 if ( !application() )
910 foreach ( GEOMGUI* lib, myGUIMap )
911 lib->OnMousePress( e, application()->desktop(), w );
914 //=======================================================================
915 // function : createGeomAction
917 //=======================================================================
918 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
919 const int accel, const bool toggle, const QString& shortcutAction )
921 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
922 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
923 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
925 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
927 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
928 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
930 application()->desktop(),
932 this, SLOT( OnGUIEvent() ),
936 //=======================================================================
937 // function : createOriginAndBaseVectors
939 //=======================================================================
940 void GeometryGUI::createOriginAndBaseVectors()
942 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
943 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
945 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
949 if ( !CORBA::is_nil( GetGeomGen() ) ) {
950 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations();
951 if ( !aBasicOperations->_is_nil() ) {
952 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
953 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
954 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
955 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
956 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
957 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
959 GetGeomGen()->PublishInStudy( SALOMEDS::SObject::_nil(), anOrigin, "O" );
960 GetGeomGen()->PublishInStudy( SALOMEDS::SObject::_nil(), anOX, "OX" );
961 GetGeomGen()->PublishInStudy( SALOMEDS::SObject::_nil(), anOY, "OY" );
962 GetGeomGen()->PublishInStudy( SALOMEDS::SObject::_nil(), anOZ, "OZ" );
963 anOrigin->UnRegister();
967 aBasicOperations->UnRegister();
969 getApp()->updateObjectBrowser( true );
975 //=======================================================================
976 // function : GeometryGUI::initialize()
977 // purpose : Called when GEOM module is created
978 //=======================================================================
979 void GeometryGUI::initialize( CAM_Application* app )
981 SalomeApp_Module::initialize( app );
983 setActionLoggingEnabled( true ); // enable action logging
985 // ----- create actions --------------
987 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
989 createGeomAction( GEOMOp::OpPoint, "POINT" );
990 createGeomAction( GEOMOp::OpLine, "LINE" );
991 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
992 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
993 createGeomAction( GEOMOp::OpArc, "ARC" );
994 createGeomAction( GEOMOp::OpCurve, "CURVE" );
995 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
996 createGeomAction( GEOMOp::OpVector, "VECTOR" );
997 createGeomAction( GEOMOp::OpPlane, "PLANE" );
998 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
999 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
1000 createGeomAction( GEOMOp::OpSurfaceFromFace, "SURFACE_FROM_FACE" );
1002 createGeomAction( GEOMOp::OpBox, "BOX" );
1003 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
1004 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
1005 createGeomAction( GEOMOp::OpTorus, "TORUS" );
1006 createGeomAction( GEOMOp::OpCone, "CONE" );
1007 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
1008 createGeomAction( GEOMOp::OpDisk, "DISK" );
1010 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
1011 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
1012 createGeomAction( GEOMOp::OpFilling, "FILLING" );
1013 createGeomAction( GEOMOp::OpPipe, "PIPE" );
1014 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
1015 createGeomAction( GEOMOp::OpThickness, "THICKNESS" );
1017 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
1018 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
1019 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
1020 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
1021 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
1023 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
1024 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
1026 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
1028 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
1029 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
1031 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
1032 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
1033 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
1035 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
1037 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
1038 createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" );
1040 createGeomAction( GEOMOp::OpEdge, "EDGE" );
1041 createGeomAction( GEOMOp::OpWire, "WIRE" );
1042 createGeomAction( GEOMOp::OpFace, "FACE" );
1043 createGeomAction( GEOMOp::OpShell, "SHELL" );
1044 createGeomAction( GEOMOp::OpSolid, "SOLID" );
1045 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
1047 createGeomAction( GEOMOp::OpFuse, "FUSE" );
1048 createGeomAction( GEOMOp::OpCommon, "COMMON" );
1049 createGeomAction( GEOMOp::OpCut, "CUT" );
1050 createGeomAction( GEOMOp::OpSection, "SECTION" );
1052 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
1053 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
1054 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
1055 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
1056 createGeomAction( GEOMOp::OpScale, "SCALE" );
1057 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
1058 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
1059 createGeomAction( GEOMOp::OpProjOnCyl, "PROJ_ON_CYL" );
1060 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
1061 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
1062 createGeomAction( GEOMOp::OpExtension, "EXTENSION" );
1064 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
1065 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
1066 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
1067 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
1068 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
1069 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
1070 createGeomAction( GEOMOp::OpTransferData, "TRANSFER_DATA" );
1071 createGeomAction( GEOMOp::OpExtraction, "EXTRACTION" );
1072 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
1073 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
1074 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
1075 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
1077 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
1078 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
1079 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
1081 createGeomAction( GEOMOp::OpSewing, "SEWING" );
1082 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
1083 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
1084 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
1085 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
1086 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
1087 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
1088 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
1089 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
1090 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
1091 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
1092 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
1093 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1094 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1095 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1096 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1097 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1098 createGeomAction( GEOMOp::OpInspectObj, "INSPECT_OBJECT" );
1100 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1101 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1102 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1103 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1104 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1105 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1106 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1107 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1108 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1109 createGeomAction( GEOMOp::OpAnnotation, "ANNOTATION" );
1110 createGeomAction( GEOMOp::OpEditAnnotation, "EDIT_ANNOTATION" );
1111 createGeomAction( GEOMOp::OpDeleteAnnotation, "DELETE_ANNOTATION" );
1113 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1114 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1115 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1116 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1117 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1118 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1119 createGeomAction( GEOMOp::OpFastCheckInters, "FAST_CHECK_INTERSECTIONS" );
1120 #ifndef DISABLE_PLOT2DVIEWER
1121 createGeomAction( GEOMOp::OpShapeStatistics, "SHAPE_STATISTICS" );
1124 #ifndef DISABLE_PYCONSOLE
1125 #ifdef _DEBUG_ // PAL16821
1126 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1130 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1131 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1132 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1133 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1134 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1135 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1136 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1137 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1138 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1139 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1140 createGeomAction( GEOMOp::OpSwitchName, "NAME_MODE");
1141 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1142 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1143 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1144 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1145 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1146 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1147 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1148 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1149 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1150 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1151 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1152 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1153 createGeomAction( GEOMOp::OpHide, "ERASE" );
1155 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1156 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1157 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1158 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1159 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1160 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1161 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1162 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1163 createGeomAction( GEOMOp::OpShowName, "POP_SHOW_NAME", "", 0, true );
1164 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1165 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1166 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1167 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1168 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1169 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1170 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1171 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1172 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1173 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1174 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1175 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1176 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1177 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1178 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1179 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1180 createGeomAction( GEOMOp::OpMaterialMenu, "POP_MATERIAL_PROPERTIES");
1181 action(GEOMOp::OpMaterialMenu)->setMenu( new QMenu() );
1182 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1183 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1184 #ifndef DISABLE_GRAPHICSVIEW
1185 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1187 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1188 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1189 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1190 createGeomAction( GEOMOp::OpShowAllAnnotations, "POP_SHOW_ALL_ANNOTATIONS" );
1191 createGeomAction( GEOMOp::OpHideAllAnnotations, "POP_HIDE_ALL_ANNOTATIONS" );
1193 // Create actions for increase/decrease transparency shortcuts
1194 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1195 "Geometry:Increase transparency");
1196 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1197 "Geometry:Decrease transparency");
1199 // Create actions for increase/decrease number of isolines
1200 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1201 "Geometry:Increase number of isolines");
1202 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1203 "Geometry:Decrease number of isolines");
1205 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1206 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1207 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1208 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1209 //@@ 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 @@//
1211 // ---- create menus --------------------------
1213 /*int fileId =*/ createMenu( tr( "MEN_FILE" ), -1, -1 );
1215 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1216 createMenu( GEOMOp::OpDelete, editId, -1 );
1218 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1220 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1221 createMenu( GEOMOp::OpPoint, basicId, -1 );
1222 createMenu( GEOMOp::OpLine, basicId, -1 );
1223 createMenu( GEOMOp::OpCircle, basicId, -1 );
1224 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1225 createMenu( GEOMOp::OpArc, basicId, -1 );
1226 createMenu( GEOMOp::OpCurve, basicId, -1 );
1227 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1228 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1229 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1230 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1231 createMenu( GEOMOp::OpSurfaceFromFace, basicId, -1 );
1232 createMenu( separator(), basicId, -1 );
1233 createMenu( GEOMOp::OpVector, basicId, -1 );
1234 createMenu( GEOMOp::OpPlane, basicId, -1 );
1235 createMenu( GEOMOp::OpLCS, basicId, -1 );
1236 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1238 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1239 createMenu( GEOMOp::OpBox, primId, -1 );
1240 createMenu( GEOMOp::OpCylinder, primId, -1 );
1241 createMenu( GEOMOp::OpSphere, primId, -1 );
1242 createMenu( GEOMOp::OpTorus, primId, -1 );
1243 createMenu( GEOMOp::OpCone, primId, -1 );
1244 createMenu( GEOMOp::OpRectangle, primId, -1 );
1245 createMenu( GEOMOp::OpDisk, primId, -1 );
1246 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1248 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1249 createMenu( GEOMOp::OpPrism, genId, -1 );
1250 createMenu( GEOMOp::OpRevolution, genId, -1 );
1251 createMenu( GEOMOp::OpFilling, genId, -1 );
1252 createMenu( GEOMOp::OpPipe, genId, -1 );
1253 createMenu( GEOMOp::OpPipePath, genId, -1 );
1254 createMenu( GEOMOp::OpThickness, genId, -1 );
1256 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1257 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1258 //@@ 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 @@//
1260 createMenu( separator(), newEntId, -1 );
1262 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1263 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1264 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1265 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1266 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1267 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1269 createMenu( separator(), newEntId, -1 );
1271 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1272 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1273 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1275 createMenu( separator(), newEntId, -1 );
1277 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1278 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1279 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1280 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1281 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1283 createMenu( separator(), newEntId, -1 );
1285 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1287 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1288 createMenu( GEOMOp::OpEdge, buildId, -1 );
1289 createMenu( GEOMOp::OpWire, buildId, -1 );
1290 createMenu( GEOMOp::OpFace, buildId, -1 );
1291 createMenu( GEOMOp::OpShell, buildId, -1 );
1292 createMenu( GEOMOp::OpSolid, buildId, -1 );
1293 createMenu( GEOMOp::OpCompound, buildId, -1 );
1295 createMenu( separator(), newEntId, -1 );
1297 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1299 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1302 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1304 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1305 createMenu( GEOMOp::OpFuse, boolId, -1 );
1306 createMenu( GEOMOp::OpCommon, boolId, -1 );
1307 createMenu( GEOMOp::OpCut, boolId, -1 );
1308 createMenu( GEOMOp::OpSection, boolId, -1 );
1310 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1311 createMenu( GEOMOp::OpTranslate, transId, -1 );
1312 createMenu( GEOMOp::OpRotate, transId, -1 );
1313 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1314 createMenu( GEOMOp::OpMirror, transId, -1 );
1315 createMenu( GEOMOp::OpScale, transId, -1 );
1316 createMenu( GEOMOp::OpOffset, transId, -1 );
1317 createMenu( GEOMOp::OpProjection, transId, -1 );
1318 createMenu( GEOMOp::OpExtension, transId, -1 );
1319 createMenu( GEOMOp::OpProjOnCyl, transId, -1 );
1320 createMenu( separator(), transId, -1 );
1321 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1322 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1324 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1325 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1326 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1327 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1329 createMenu( separator(), operId, -1 );
1331 createMenu( GEOMOp::OpPartition, operId, -1 );
1332 createMenu( GEOMOp::OpArchimede, operId, -1 );
1333 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1334 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1335 createMenu( GEOMOp::OpTransferData, operId, -1 );
1336 createMenu( GEOMOp::OpExtraction, operId, -1 );
1338 createMenu( separator(), operId, -1 );
1340 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1341 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1342 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1343 createMenu( GEOMOp::OpChamfer, operId, -1 );
1344 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1345 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1347 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1348 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1349 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1350 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1351 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1352 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1353 createMenu( GEOMOp::OpSewing, repairId, -1 );
1354 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1355 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1356 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1357 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1358 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1359 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1360 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1361 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1362 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1363 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1364 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1366 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1367 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1368 createMenu( GEOMOp::OpProperties, measurId, -1 );
1369 createMenu( separator(), measurId, -1 );
1370 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1371 createMenu( GEOMOp::OpInertia, measurId, -1 );
1372 createMenu( GEOMOp::OpNormale, measurId, -1 );
1373 createMenu( separator(), measurId, -1 );
1374 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1375 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1376 createMenu( separator(), measurId, -1 );
1378 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1379 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1380 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1381 createMenu( GEOMOp::OpAngle, dimId, -1 );
1382 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1384 createMenu( GEOMOp::OpAnnotation, measurId, -1 );
1386 createMenu( separator(), measurId, -1 );
1387 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1388 createMenu( separator(), measurId, -1 );
1389 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1390 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1391 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1392 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1393 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1394 createMenu( GEOMOp::OpFastCheckInters, measurId, -1 );
1395 createMenu( GEOMOp::OpInspectObj, measurId, -1 );
1396 #ifndef DISABLE_PLOT2DVIEWER
1397 createMenu( GEOMOp::OpShapeStatistics, measurId, -1 );
1400 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1401 #ifndef DISABLE_PYCONSOLE
1402 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1403 createMenu( separator(), toolsId, -1 );
1404 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1408 createMenu( separator(), toolsId, -1 );
1409 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1410 createMenu( separator(), toolsId, -1 );
1412 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1413 createMenu( separator(), viewId, -1 );
1415 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1416 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1417 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1418 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1419 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1420 createMenu( separator(), dispmodeId, -1 );
1421 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1422 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1423 createMenu( GEOMOp::OpSwitchName, dispmodeId, -1 );
1425 createMenu( separator(), viewId, -1 );
1426 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1427 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1428 createMenu( separator(), viewId, -1 );
1429 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1430 createMenu( separator(), viewId, -1 );
1434 because of these items are accessible through object browser and viewers
1435 we have removed they from main menu
1437 createMenu( GEOMOp::OpShow, viewId, -1 );
1438 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1439 createMenu( GEOMOp::OpHide, viewId, -1 );
1442 // ---- create toolbars --------------------------
1444 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1445 createTool( GEOMOp::OpPoint, basicTbId );
1446 createTool( GEOMOp::OpLine, basicTbId );
1447 createTool( GEOMOp::OpCircle, basicTbId );
1448 createTool( GEOMOp::OpEllipse, basicTbId );
1449 createTool( GEOMOp::OpArc, basicTbId );
1450 createTool( GEOMOp::OpCurve, basicTbId );
1451 createTool( GEOMOp::OpVector, basicTbId );
1452 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1453 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1454 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1455 createTool( GEOMOp::OpIsoline, basicTbId );
1456 createTool( GEOMOp::OpSurfaceFromFace, basicTbId );
1457 createTool( GEOMOp::OpPlane, basicTbId );
1458 createTool( GEOMOp::OpLCS, basicTbId );
1459 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1461 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1462 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1463 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1465 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1466 createTool( GEOMOp::OpBox, primTbId );
1467 createTool( GEOMOp::OpCylinder, primTbId );
1468 createTool( GEOMOp::OpSphere, primTbId );
1469 createTool( GEOMOp::OpTorus, primTbId );
1470 createTool( GEOMOp::OpCone, primTbId );
1471 createTool( GEOMOp::OpRectangle, primTbId );
1472 createTool( GEOMOp::OpDisk, primTbId );
1473 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1475 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1476 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1477 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1479 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1480 createTool( GEOMOp::OpFuse, boolTbId );
1481 createTool( GEOMOp::OpCommon, boolTbId );
1482 createTool( GEOMOp::OpCut, boolTbId );
1483 createTool( GEOMOp::OpSection, boolTbId );
1485 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1486 createTool( GEOMOp::OpPrism, genTbId );
1487 createTool( GEOMOp::OpRevolution, genTbId );
1488 createTool( GEOMOp::OpFilling, genTbId );
1489 createTool( GEOMOp::OpPipe, genTbId );
1490 createTool( GEOMOp::OpPipePath, genTbId );
1491 createTool( GEOMOp::OpThickness, genTbId );
1493 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1494 createTool( GEOMOp::OpTranslate, transTbId );
1495 createTool( GEOMOp::OpRotate, transTbId );
1496 createTool( GEOMOp::OpChangeLoc, transTbId );
1497 createTool( GEOMOp::OpMirror, transTbId );
1498 createTool( GEOMOp::OpScale, transTbId );
1499 createTool( GEOMOp::OpOffset, transTbId );
1500 createTool( GEOMOp::OpProjection, transTbId );
1501 createTool( GEOMOp::OpExtension, transTbId );
1502 createTool( GEOMOp::OpProjOnCyl, transTbId );
1503 createTool( separator(), transTbId );
1504 createTool( GEOMOp::OpMultiTranslate, transTbId );
1505 createTool( GEOMOp::OpMultiRotate, transTbId );
1507 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1508 createTool( GEOMOp::OpExplode, operTbId );
1509 createTool( GEOMOp::OpPartition, operTbId );
1510 createTool( GEOMOp::OpArchimede, operTbId );
1511 createTool( GEOMOp::OpShapesOnShape, operTbId );
1512 createTool( GEOMOp::OpSharedShapes, operTbId );
1513 createTool( GEOMOp::OpTransferData, operTbId );
1514 createTool( GEOMOp::OpExtraction, operTbId );
1516 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1517 createTool( GEOMOp::OpFillet1d, featTbId );
1518 createTool( GEOMOp::OpFillet2d, featTbId );
1519 createTool( GEOMOp::OpFillet3d, featTbId );
1520 createTool( GEOMOp::OpChamfer, featTbId );
1521 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1522 createTool( GEOMOp::OpExtrudedCut, featTbId );
1524 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1525 createTool( GEOMOp::OpEdge, buildTbId );
1526 createTool( GEOMOp::OpWire, buildTbId );
1527 createTool( GEOMOp::OpFace, buildTbId );
1528 createTool( GEOMOp::OpShell, buildTbId );
1529 createTool( GEOMOp::OpSolid, buildTbId );
1530 createTool( GEOMOp::OpCompound, buildTbId );
1532 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1533 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1534 createTool( GEOMOp::OpProperties, measureTbId );
1535 createTool( GEOMOp::OpCenterMass, measureTbId );
1536 createTool( GEOMOp::OpInertia, measureTbId );
1537 createTool( GEOMOp::OpNormale, measureTbId );
1538 createTool( separator(), measureTbId );
1539 createTool( GEOMOp::OpBoundingBox, measureTbId );
1540 createTool( GEOMOp::OpMinDistance, measureTbId );
1541 createTool( GEOMOp::OpAngle, measureTbId );
1542 createTool( GEOMOp::OpAnnotation, measureTbId );
1543 createTool( GEOMOp::OpTolerance , measureTbId );
1544 createTool( separator(), measureTbId );
1545 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1546 createTool( GEOMOp::OpFreeFaces, measureTbId );
1547 createTool( separator(), measureTbId );
1548 createTool( GEOMOp::OpWhatIs, measureTbId );
1549 createTool( GEOMOp::OpCheckShape, measureTbId );
1550 createTool( GEOMOp::OpCheckCompound, measureTbId );
1551 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1552 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1553 createTool( GEOMOp::OpFastCheckInters, measureTbId );
1555 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1556 createTool( GEOMOp::OpPictureImport, picturesTbId );
1558 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1561 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1562 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1563 //@@ 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 @@//
1565 // ---- create popup menus --------------------------
1567 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1568 QString clientOCC = "(client='OCCViewer')";
1569 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1570 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1572 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1573 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1574 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1575 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1577 QString notGEOMShape = "(not ($component={'GEOM'}) and ($displayer={'Geometry'}))";
1579 QString autoColorPrefix =
1580 "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') and type='Shape' and selcount=1";
1582 QtxPopupMgr* mgr = popupMgr();
1584 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1585 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1586 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1587 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1588 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1589 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1590 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1591 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1593 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1594 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1595 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1596 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1597 mgr->insert( separator(), -1, -1 ); // -----------
1599 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1600 QString bringRule = clientOCCorOB + " and ($displayer={'Geometry'}) and isFolder=false and (selcount>0) and isOCC=true";
1601 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1602 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1603 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1604 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1605 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1606 mgr->insert( separator(), -1, -1 ); // -----------
1607 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1608 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1609 //mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1610 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1611 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1612 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1613 // mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1614 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1615 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1616 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1617 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1618 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1619 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1620 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1621 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1622 mgr->insert( separator(), dispmodeId, -1 );
1623 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1624 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1625 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1626 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1627 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1628 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1629 mgr->insert( action( GEOMOp::OpShowName ), dispmodeId, -1 ); // show name
1630 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1631 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK + " and isNameMode", QtxPopupMgr::ToggleRule );
1632 mgr->insert( separator(), -1, -1 ); // -----------
1634 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1635 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($displayer={'Geometry'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1636 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1637 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1638 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1639 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1640 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1641 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1642 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1643 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and ($type in {'Shape' 'Group' 'Field' 'FieldStep'} or " + notGEOMShape + ") and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1645 // material properties
1646 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1647 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'}) and matMenu=false", QtxPopupMgr::VisibleRule );
1648 mgr->insert( action( GEOMOp::OpMaterialMenu ), -1, -1 );
1649 mgr->setRule( action( GEOMOp::OpMaterialMenu ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'}) and matMenu=true", QtxPopupMgr::VisibleRule );
1652 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1653 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1655 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1656 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1657 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1659 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1660 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1662 mgr->insert( separator(), -1, -1 ); // -----------
1663 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1664 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1665 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1666 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1667 mgr->insert( separator(), -1, -1 ); // -----------
1669 mgr->insert( action( GEOMOp::OpEditAnnotation ), -1, -1 ); // edit annotation
1670 mgr->setRule( action( GEOMOp::OpEditAnnotation ), clientOCC + " and annotationsCount=1", QtxPopupMgr::VisibleRule );
1671 mgr->insert( action( GEOMOp::OpDeleteAnnotation ), -1, -1 ); // delete annotation
1672 mgr->setRule( action( GEOMOp::OpDeleteAnnotation ), clientOCC + " and annotationsCount>0", QtxPopupMgr::VisibleRule );
1673 mgr->insert( separator(), -1, -1 ); // -----------
1675 //QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1676 // onlyComponent = "((type='Component') and selcount=1)",
1677 // rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1678 // types = "'Shape' 'Group' 'FieldStep'";
1680 QString canDisplay = "($displayer={'Geometry'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1681 onlyComponent = "((type='Component') and ($component={'GEOM'}) and selcount=1)",
1682 rule = canDisplay + "and ((($type in {%1} or " + notGEOMShape + ") and( %2 )) or " + onlyComponent + ")",
1683 types = "'Shape' 'Group' 'FieldStep'";
1685 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1686 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1688 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1689 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1691 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1692 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1694 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1696 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1697 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1698 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1699 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1700 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1701 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1702 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1703 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1704 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1705 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1706 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1707 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1708 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1709 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1710 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1711 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1712 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1713 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1714 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1715 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1716 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1717 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1718 mgr->insert( separator(), selectonlyId, -1);
1719 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1720 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1721 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1722 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1723 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1724 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1725 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1727 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1729 mgr->insert( separator(), -1, -1 ); // -----------
1730 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1731 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1732 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1733 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1734 mgr->insert( action( GEOMOp::OpShowAllAnnotations ), -1, -1 ); // show all annotations
1735 mgr->setRule( action( GEOMOp::OpShowAllAnnotations ), aDimensionRule.arg( "hasHiddenAnnotations" ), QtxPopupMgr::VisibleRule );
1736 mgr->insert( action( GEOMOp::OpHideAllAnnotations ), -1, -1 ); // hide all annotations
1737 mgr->setRule( action( GEOMOp::OpHideAllAnnotations ), aDimensionRule.arg( "hasVisibleAnnotations" ), QtxPopupMgr::VisibleRule );
1739 mgr->insert( separator(), -1, -1 ); // -----------
1740 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1741 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1743 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1744 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1746 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1747 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1749 mgr->insert( separator(), -1, -1 ); // -----------
1750 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1751 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1753 mgr->insert( separator(), -1, -1 ); // -----------
1754 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1755 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1757 #ifndef DISABLE_GRAPHICSVIEW
1758 mgr->insert( separator(), -1, -1 ); // -----------
1759 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1760 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1763 mgr->insert( separator(), -1, -1 ); // -----------
1764 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1765 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1767 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1769 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1771 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1772 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1773 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1776 // create plugin actions and menus
1780 //=======================================================================
1781 // function : GeometryGUI::addPluginActions()
1783 //=======================================================================
1784 void GeometryGUI::addPluginActions()
1787 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1788 if (!resMgr) return;
1790 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1791 if (!appStudy) return;
1793 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1795 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1797 int id = GEOMOp::OpLastOperationID; // TODO?
1800 GEOMUtils::PluginInfo::const_iterator it;
1801 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1802 // bind action lib and label to its ID for activateOperation() method proper work
1803 GEOMUtils::PluginData pdata = (*it);
1804 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1805 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1806 std::list<GEOMUtils::ActionData>::const_iterator ait;
1807 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1808 GEOMUtils::ActionData adata = (*ait);
1811 if ( !adata.icon.empty() )
1812 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1814 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1815 QString actionName = smenus.last();
1816 actionName = actionName.toUpper().prepend( "MEN_" );
1817 smenus.removeLast();
1819 // path to action in toolbar
1820 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1821 QString actionTool = stools.last();
1822 actionTool = actionTool.toUpper().prepend( "TOP_" );
1823 stools.removeLast();
1825 QString actionStat = adata.statusText.c_str();
1826 actionStat = actionStat.toUpper().prepend( "STB_" );
1828 createAction( id, // ~ adata.label
1829 tr( actionTool.toLatin1().constData() ),
1831 tr( actionName.toLatin1().constData() ),
1832 tr( actionStat.toLatin1().constData() ),
1833 QKeySequence( tr( adata.accel.c_str() ) ),
1834 application()->desktop(),
1836 this, SLOT( OnGUIEvent() ),
1837 QString() /*shortcutAction*/ );
1840 foreach ( QString subMenu, smenus ) {
1841 QStringList subMenuList = subMenu.split( ":" );
1842 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1843 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1844 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1846 createMenu( id, menuId, -1 );
1848 if ( !stools.isEmpty() ) {
1849 QString subTool = stools[0];
1850 subTool = subTool.toUpper().prepend( "TOOL_" );
1851 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1852 createTool(id, toolId);
1855 // add action id to map
1856 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1857 myPluginActions[id] = anAction;
1866 QString wrap(const QString& text, const QString& tag)
1867 { return QString("<%1>%2</%3>").arg(tag).arg(text).arg(tag);}
1870 //=======================================================================
1871 // function : GeometryGUI::activateModule()
1872 // purpose : Called when GEOM module is activated
1873 //=======================================================================
1874 bool GeometryGUI::activateModule( SUIT_Study* study )
1876 // Fill in: Help Panel
1877 SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( application() );
1878 app->infoPanel()->setTitle(tr("INFO_WELCOME_TO_GEOM"));
1880 int gb = app->infoPanel()->addGroup(tr("INFO_GRP_CREATE_MODEL"));
1883 items << wrap(tr("INFO_VERTICES"), "li")
1884 << wrap(tr("INFO_EDGES"), "li")
1885 << wrap(tr("INFO_WIRES"), "li")
1886 << wrap(tr("INFO_FACES"), "li")
1887 << wrap(tr("INFO_SHELLS"), "li")
1888 << wrap(tr("INFO_SOLIDS"), "li");
1889 lab = tr("INFO_BOTTOM_UP_CONSTRUCTION") + ":" + wrap(items.join(""), "ul");
1892 items << wrap(tr("INFO_BOX"), "li")
1893 << wrap(tr("INFO_CYLINDER"), "li")
1894 << wrap(tr("INFO_CONE"), "li")
1895 << wrap("...", "li");
1896 lab = lab + tr("INFO_PRIMITIVES") + ":" + wrap(items.join(""), "ul");
1899 lab = lab + tr("INFO_BOOLEANS") + "<br/>";
1900 lab = lab + tr("INFO_TRANSFORMATIONS");
1902 app->infoPanel()->addLabel(lab, gb);
1904 gb = app->infoPanel()->addGroup(tr("INFO_GRP_IMPORT_MODEL"));
1905 items << wrap("BREP", "li")
1906 << wrap("STEP", "li")
1907 << wrap("IGES", "li")
1908 << wrap("STL", "li")
1909 << wrap("XAO", "li");
1910 lab = tr("INFO_AVAILABLE_FORMATS") + ":" + wrap(items.join(""), "ul");
1913 app->infoPanel()->addLabel(lab, gb);
1916 if ( CORBA::is_nil( myComponentGeom ) )
1919 bool res = SalomeApp_Module::activateModule( study );
1923 setMenuShown( true );
1924 setToolShown( true );
1926 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1927 PyGILState_STATE gstate = PyGILState_Ensure();
1928 PyObject* pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1929 if ( !pluginsmanager ) {
1934 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1935 tr("MEN_NEW_ENTITY").toUtf8().data(),
1936 tr("GEOM_PLUGINS_OTHER").toUtf8().data());
1941 PyGILState_Release(gstate);
1942 // end of GEOM plugins loading
1944 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1945 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ), Qt::UniqueConnection );
1947 // Reset actions accelerator keys
1948 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1950 GUIMap::Iterator it;
1951 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1952 it.value()->activate( application()->desktop() );
1954 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1956 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ), Qt::UniqueConnection );
1957 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ), Qt::UniqueConnection );
1958 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ), Qt::UniqueConnection );
1960 if ( !myCreationInfoWdg )
1961 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1962 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1963 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1965 if ( !myTextTreeWdg ) {
1966 myTextTreeWdg = new GEOMGUI_TextTreeWdg( getApp() );
1967 new GEOMGUI_TextTreeSelector( myTextTreeWdg, GetAnnotationMgr(), getApp()->selectionMgr() );
1970 getApp()->insertDockWindow( myTextTreeWdg->getWinID(), myTextTreeWdg );
1971 getApp()->placeDockWindow( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
1974 SALOME_ListIO selected;
1975 sm->selectedObjects( selected );
1976 sm->clearSelected();
1978 SUIT_ViewManager* vm;
1979 ViewManagerList OCCViewManagers, VTKViewManagers;
1981 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1982 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1983 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1984 onViewManagerAdded(vm);
1986 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1987 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1988 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1989 onViewManagerAdded(vm);
1991 sm->setSelectedObjects( selected, true ); //NPAL 19674
1993 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1995 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ), Qt::UniqueConnection );
1997 // 0020836 (Basic vectors and origin)
1998 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1999 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
2000 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2002 _PTR(Study) studyDS = appStudy->studyDS();
2004 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2005 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
2006 createOriginAndBaseVectors();
2011 Py_XDECREF(pluginsmanager);
2016 //=======================================================================
2017 // function : GeometryGUI::deactivateModule()
2018 // purpose : Called when GEOM module is deactivated
2019 //=======================================================================
2020 bool GeometryGUI::deactivateModule( SUIT_Study* study )
2022 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
2024 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
2026 setMenuShown( false );
2027 setToolShown( false );
2029 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
2030 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
2032 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
2034 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
2035 //disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
2036 if ( myCreationInfoWdg ) {
2037 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
2038 myCreationInfoWdg = 0;
2040 if ( myTextTreeWdg ) {
2041 getApp()->removeDockWindow( myTextTreeWdg->getWinID() );
2042 disconnect( application(), 0, myTextTreeWdg, 0 );
2046 EmitSignalCloseAllDialogs();
2048 GUIMap::Iterator it;
2049 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
2050 it.value()->deactivate();
2052 // Unset actions accelerator keys
2053 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
2055 qDeleteAll(myOCCSelectors);
2056 myOCCSelectors.clear();
2057 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
2059 qDeleteAll(myVTKSelectors);
2060 myVTKSelectors.clear();
2061 selMrg->setEnabled( true, SVTK_Viewer::Type() );
2063 return SalomeApp_Module::deactivateModule( study );
2066 //=======================================================================
2067 // function : onWindowActivated()
2068 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
2069 //=======================================================================
2070 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
2075 const bool ViewOCC = ( win->getViewManager() ? win->getViewManager()->getType() == OCCViewer_Viewer::Type() : false );
2076 //const bool ViewVTK = ( win->getViewManager() ? win->getViewManager()->getType() == SVTK_Viewer::Type() : false );
2078 // disable non-OCC viewframe menu commands
2079 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
2080 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
2081 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
2082 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
2083 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
2084 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
2085 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
2087 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
2088 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
2089 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
2090 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
2092 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
2095 void GeometryGUI::windows( QMap<int, int>& mappa ) const
2097 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
2098 mappa.insert( SalomeApp_Application::WT_InfoPanel, Qt::RightDockWidgetArea );
2099 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
2100 #ifndef DISABLE_PYCONSOLE
2101 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
2103 if ( myCreationInfoWdg )
2104 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
2105 if ( myTextTreeWdg )
2106 mappa.insert( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
2109 void GeometryGUI::viewManagers( QStringList& lst ) const
2111 lst.append( OCCViewer_Viewer::Type() );
2112 //lst.append( PV3DViewer_ViewModel::Type() );
2115 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
2117 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
2119 qDebug( "connect" );
2120 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
2121 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
2122 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
2123 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
2124 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
2125 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
2126 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
2127 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
2129 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2130 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
2132 // disable OCC selectors
2133 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
2134 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2135 while ( itOCCSel.hasNext() )
2136 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2137 sr->setEnabled(true);
2139 else if ( vm->getType() == SVTK_Viewer::Type() )
2141 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2142 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
2144 // disable VTK selectors
2145 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
2146 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2147 while ( itVTKSel.hasNext() )
2148 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2149 sr->setEnabled(true);
2153 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
2155 SUIT_ViewModel* viewer = vm->getViewModel();
2156 if ( vm->getType() == OCCViewer_Viewer::Type() )
2158 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2159 while ( itOCCSel.hasNext() )
2160 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2161 if ( sr->viewer() == viewer )
2163 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
2167 if ( vm->getType() == SVTK_Viewer::Type() )
2169 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2170 while ( itVTKSel.hasNext() )
2171 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2172 if ( sr->viewer() == viewer )
2174 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2178 SOCC_Viewer* aSOCCView = dynamic_cast<SOCC_Viewer*>(viewer);
2180 GetAnnotationMgr()->RemoveView( aSOCCView );
2184 //================================================================================
2186 * \brief Slot called when selection changed. Shows creation info of a selected object
2188 //================================================================================
2190 void GeometryGUI::updateCreationInfo()
2192 if ( myCreationInfoWdg )
2193 myCreationInfoWdg->clear();
2195 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2196 // if ( !myCreationInfoWdg->isVisible() )
2199 // look for a sole selected GEOM_Object
2200 GEOM::GEOM_BaseObject_var geomObj;
2202 SALOME_ListIO selected;
2203 getApp()->selectionMgr()->selectedObjects( selected );
2205 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2206 SALOME_ListIteratorOfListIO selIt( selected );
2207 for ( ; selIt.More(); selIt.Next() )
2209 Handle(SALOME_InteractiveObject) io = selIt.Value();
2210 if ( !io->hasEntry() ) continue;
2211 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2212 if ( !GeometryGUI::IsInGeomComponent( sobj )) continue;
2213 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2214 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2215 if ( !gobj->_is_nil() )
2217 if ( !geomObj->_is_nil() )
2218 return; // several GEOM objects selected
2222 if ( geomObj->_is_nil() ) return;
2224 // pass creation info of geomObj to myCreationInfoWdg
2226 if ( myCreationInfoWdg ) {
2228 GEOM::CreationInformationSeq_var info;
2231 info = geomObj->GetCreationInformation();
2235 myCreationInfoWdg->setInfo( info );
2239 void GeometryGUI::onAutoBringToFront()
2241 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2242 if( !isAutoBringToFront )
2245 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2246 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2249 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2250 if (!appStudy) return;
2252 GEOM_Displayer displayer;
2254 SALOME_View* window = displayer.GetActiveView();
2255 if ( !window ) return;
2257 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2259 SALOME_ListIO selected;
2260 getApp()->selectionMgr()->selectedObjects( selected );
2261 if (!myTopLevelIOList.IsEmpty())
2263 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2265 Handle( SALOME_InteractiveObject ) io = It.Value();
2266 bool isSelected = false;
2267 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2269 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2270 if( io->isSame( sel_io ) )
2273 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2275 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2276 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2281 myTopLevelIOList.Assign(selected);
2282 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2284 Handle( SALOME_InteractiveObject ) io = It.Value();
2285 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2286 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2289 displayer.UpdateViewer();
2290 GeometryGUI::Modified();
2293 void GeometryGUI::updateFieldColorScale()
2295 GEOM_Displayer aDisplayer;
2296 aDisplayer.UpdateColorScale();
2299 QString GeometryGUI::engineIOR() const
2301 if ( !CORBA::is_nil( GetGeomGen() ) )
2302 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2306 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture (int theId, int& theWidth, int& theHeight)
2308 theWidth = theHeight = 0;
2309 Handle(TColStd_HArray1OfByte) aTexture;
2311 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations();
2312 if ( !aInsOp->_is_nil() ) {
2313 CORBA::Long aWidth, aHeight;
2314 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2315 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2317 theHeight = aHeight;
2319 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2321 for ( CORBA::ULong i = 0; i < aStream->length(); i++)
2322 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2328 LightApp_Selection* GeometryGUI::createSelection() const
2330 return new GEOMGUI_Selection();
2333 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2335 SalomeApp_Module::contextMenuPopup( client, menu, title );
2337 getApp()->selectionMgr()->selectedObjects( lst );
2339 // Update submenu for predefined materials
2340 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2341 QMenu* matMenu = action( GEOMOp::OpMaterialMenu )->menu();
2343 QSignalMapper* signalMapper = new QSignalMapper( menu );
2346 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2347 if ( anApp && anApp->activeViewManager() ) {
2348 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2350 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2353 QString curModel = "";
2354 if ( v.canConvert<QString>() ) curModel = v.toString();
2356 // get list of all predefined materials
2357 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2359 foreach ( QString material, materials )
2361 QAction* a = matMenu->addAction( material );
2362 connect( a, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2363 signalMapper->setMapping( a, material );
2364 a->setCheckable( true );
2366 Material_Model aModel;
2367 aModel.fromResources( material );
2368 if ( !found && aModel.toProperties() == curModel ) {
2369 a->setChecked( true );
2373 matMenu->addSeparator();
2374 matMenu->addAction( action( GEOMOp::OpPredefMaterCustom ) );
2375 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2376 this, SLOT( OnSetMaterial( const QString & ) ) );
2379 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2380 Handle(SALOME_InteractiveObject) io = lst.First();
2381 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2382 _PTR(Study) study = appStudy->studyDS();
2383 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2385 QString aName = QString( obj->GetName().c_str() );
2386 aName.remove( QRegExp("\\s+$") );
2392 void GeometryGUI::OnSetMaterial(const QString& theName)
2394 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2398 void GeometryGUI::createPreferences()
2400 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2402 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2404 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2405 setPreferenceProperty( genGroup, "columns", 2 );
2407 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2408 LightApp_Preferences::Selector,
2409 "Geometry", "display_mode" );
2411 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2412 LightApp_Preferences::Color, "Geometry", "shading_color" );
2414 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2415 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2417 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2418 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2420 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2421 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2423 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2424 LightApp_Preferences::Color, "Geometry", "line_color" );
2426 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2427 LightApp_Preferences::Color, "Geometry", "point_color" );
2429 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2430 LightApp_Preferences::Color, "Geometry", "isos_color" );
2432 addPreference( tr( "PREF_LABEL_COLOR" ), genGroup,
2433 LightApp_Preferences::Color, "Geometry", "label_color" );
2435 addPreference( "", genGroup, LightApp_Preferences::Space );
2437 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2438 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2440 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2441 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2443 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2444 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2446 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2447 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2449 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2450 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2452 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2453 LightApp_Preferences::Selector,
2454 "Geometry", "material" );
2456 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2457 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2463 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2464 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2466 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2467 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2469 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2470 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2472 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2473 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2475 for (int i = 0; i < nb; i++) {
2476 setPreferenceProperty( wd[i], "min", 1 );
2477 setPreferenceProperty( wd[i], "max", 5 );
2480 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2481 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2483 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2484 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2486 // --------------------------------------------------------------------------
2487 // Dimensions (Measurements) preferences
2488 // --------------------------------------------------------------------------
2490 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2491 setPreferenceProperty( aDimGroupId, "columns", 2 );
2493 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2494 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2496 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2497 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2499 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2500 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2502 int aDimFontId = addPreference( tr( "PREF_DIMENSIONS_FONT" ), aDimGroupId, LightApp_Preferences::Font, "Geometry", "dimensions_font" );
2504 int f = QtxFontEdit::Family | QtxFontEdit::Size;
2505 setPreferenceProperty( aDimFontId, "features", f );
2506 setPreferenceProperty( aDimFontId, "mode", QtxFontEdit::Custom );
2508 Handle(Font_FontMgr) fmgr = Font_FontMgr::GetInstance();
2509 QString aFontFile = "";
2510 resMgr->value("resources", "GEOM", aFontFile);
2511 aFontFile = aFontFile + QDir::separator() + "Y14.5M-2009.ttf";
2512 // add enginier font into combobox
2513 /*int fontID =*/ QFontDatabase::addApplicationFont( aFontFile );
2514 Handle(Font_SystemFont) sf = new Font_SystemFont( TCollection_AsciiString("Y14.5M-2009") );
2515 sf->SetFontPath( Font_FA_Regular,
2516 TCollection_AsciiString( aFontFile.toLatin1().data() ) );
2517 // register font in OCC font manager
2518 fmgr->RegisterFont( sf, Standard_False );
2520 // get list of supported fonts by OCC
2521 QStringList anOCCFonts;
2522 TColStd_SequenceOfHAsciiString theFontsNames;
2523 fmgr->GetAvailableFontsNames( theFontsNames );
2524 for(Standard_Integer i=1; i<=theFontsNames.Length(); i++) {
2525 Handle(TCollection_HAsciiString) str = theFontsNames(i);
2526 anOCCFonts << str->ToCString();
2528 anOCCFonts.removeDuplicates();
2529 // set the supported fonts into combobox to use its only
2530 setPreferenceProperty( aDimFontId, "fonts", anOCCFonts );
2532 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2533 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2535 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2536 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2537 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2539 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2540 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2542 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2543 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2545 QStringList aListOfLengthUnits;
2546 aListOfLengthUnits << "m";
2547 aListOfLengthUnits << "cm";
2548 aListOfLengthUnits << "mm";
2549 aListOfLengthUnits << "in.";
2550 aListOfLengthUnits << "ft.";
2552 QStringList aListOfAngUnits;
2553 aListOfAngUnits << "rad";
2554 aListOfAngUnits << "deg";
2556 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2557 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2559 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2560 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2562 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2563 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2565 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2566 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2567 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2569 addPreference( tr( "PREF_DIMENSIONS_USE_TEXT3D" ), aDimGroupId,
2570 LightApp_Preferences::Bool, "Geometry", "dimensions_use_text3d" );
2572 // --------------------------------------------------------------------------
2573 // Shape annotation preferences
2574 // --------------------------------------------------------------------------
2576 const int aShapeAnnGroupId = addPreference( tr( "PREF_SHAPE_ANNOTATIONS" ), tabId );
2577 setPreferenceProperty( aShapeAnnGroupId, "columns", 2 );
2579 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_FONT_COLOR" ), aShapeAnnGroupId, LightApp_Preferences::Color, "Geometry", "shape_annotation_font_color" );
2580 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_COLOR" ), aShapeAnnGroupId, LightApp_Preferences::Color, "Geometry", "shape_annotation_line_color" );
2581 const int aShapeAnnFont =
2582 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_FONT" ), aShapeAnnGroupId, LightApp_Preferences::Font, "Geometry", "shape_annotation_font" );
2584 int aShapeAnnFontFeatures = QtxFontEdit::Family | QtxFontEdit::Size | QtxFontEdit::Bold | QtxFontEdit::Italic;
2585 setPreferenceProperty( aShapeAnnFont, "features", aShapeAnnFontFeatures );
2586 setPreferenceProperty( aShapeAnnFont, "mode", QtxFontEdit::Custom );
2587 setPreferenceProperty( aShapeAnnFont, "fonts", anOCCFonts );
2589 const int aShapeAnnLineWidth =
2590 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_WIDTH" ), aShapeAnnGroupId, LightApp_Preferences::IntSpin, "Geometry", "shape_annotation_line_width" );
2592 setPreferenceProperty( aShapeAnnLineWidth, "min", 1 );
2593 setPreferenceProperty( aShapeAnnLineWidth, "max", 5 );
2595 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_AUTOHIDE" ), aShapeAnnGroupId, LightApp_Preferences::Bool, "Geometry", "shape_annotation_autohide" );
2597 const int aShapeAnnLineStyle =
2598 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_STYLE" ), aShapeAnnGroupId, LightApp_Preferences::Selector, "Geometry", "shape_annotation_line_style" );
2600 QStringList aLineStyleList;
2601 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_SOLID") );
2602 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DASH") );
2603 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DOT") );
2604 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DOTDASH") );
2606 QList<QVariant> aLineStyleIds;
2607 aLineStyleIds.append(0);
2608 aLineStyleIds.append(1);
2609 aLineStyleIds.append(2);
2610 aLineStyleIds.append(3);
2612 setPreferenceProperty( aShapeAnnLineStyle, "strings", aLineStyleList );
2613 setPreferenceProperty( aShapeAnnLineStyle, "indexes", aLineStyleIds );
2615 // --------------------------------------------------------------------------
2616 // Isoline drawing preferences
2617 // --------------------------------------------------------------------------
2619 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2620 setPreferenceProperty( isoGroup, "columns", 2 );
2621 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2622 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2623 setPreferenceProperty( isoU, "min", 0 );
2624 setPreferenceProperty( isoU, "max", 100000 );
2625 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2626 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2627 setPreferenceProperty( isoV, "min", 0 );
2628 setPreferenceProperty( isoV, "max", 100000 );
2630 // Quantities with individual precision settings
2631 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2632 setPreferenceProperty( precGroup, "columns", 2 );
2634 const int nbQuantities = 8;
2635 int prec[nbQuantities], ii = 0;
2636 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2637 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2638 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2639 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2640 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2641 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2642 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2643 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2644 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2645 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2646 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2647 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2648 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2649 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2650 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2651 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2653 // Set property for precision value for spinboxes
2654 for ( ii = 0; ii < nbQuantities; ii++ ){
2655 setPreferenceProperty( prec[ii], "min", -14 );
2656 setPreferenceProperty( prec[ii], "max", 14 );
2657 setPreferenceProperty( prec[ii], "precision", 2 );
2660 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2661 setPreferenceProperty( VertexGroup, "columns", 2 );
2663 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2664 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2666 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2667 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2669 // Set property for default display mode
2670 QStringList aModesList;
2671 aModesList.append( tr("MEN_WIREFRAME") );
2672 aModesList.append( tr("MEN_SHADING") );
2673 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2674 aModesList.append( tr("MEN_TEXTURE") );
2676 QList<QVariant> anIndexesList;
2677 anIndexesList.append(0);
2678 anIndexesList.append(1);
2679 anIndexesList.append(2);
2680 anIndexesList.append(3);
2682 setPreferenceProperty( dispmode, "strings", aModesList );
2683 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2685 // Set property for top level display mode
2686 QStringList aTopModesList;
2687 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2688 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2689 aTopModesList.append( tr("MEN_WIREFRAME") );
2690 aTopModesList.append( tr("MEN_SHADING") );
2691 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2693 QList<QVariant> aTopIndexesList;
2694 aTopIndexesList.append(0);
2695 aTopIndexesList.append(1);
2696 aTopIndexesList.append(2);
2697 aTopIndexesList.append(3);
2698 aTopIndexesList.append(4);
2700 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2701 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2703 // Set property for step value for spinboxes
2704 setPreferenceProperty( step, "min", 1 );
2705 setPreferenceProperty( step, "max", 10000 );
2706 setPreferenceProperty( step, "precision", 3 );
2708 // Set property for trandparency value for spinboxes
2709 setPreferenceProperty( transparency, "min", 0 );
2710 setPreferenceProperty( transparency, "max", 100 );
2712 // Set property for deflection value for spinboxes
2713 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2714 setPreferenceProperty( defl, "max", 1.0 );
2715 setPreferenceProperty( defl, "step", 1.0e-04 );
2716 setPreferenceProperty( defl, "precision", 6 );
2718 // Set property for default material
2719 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2721 // Set property vertex marker type
2722 QList<QVariant> aMarkerTypeIndicesList;
2723 QList<QVariant> aMarkerTypeIconsList;
2725 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2726 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2727 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2728 aMarkerTypeIndicesList << (i-1);
2729 aMarkerTypeIconsList << pixmap;
2732 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2733 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2735 // Set property for vertex marker scale
2736 QList<QVariant> aMarkerScaleIndicesList;
2737 QStringList aMarkerScaleValuesList;
2739 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2740 aMarkerScaleIndicesList << iii;
2741 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2744 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2745 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2747 // Scalar bar for field step presentation
2748 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2749 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2751 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2752 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2753 setPreferenceProperty( sbXPosition, "min", 0 );
2754 setPreferenceProperty( sbXPosition, "max", 1 );
2755 setPreferenceProperty( sbXPosition, "step", 0.05 );
2757 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2758 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2759 setPreferenceProperty( sbYPosition, "min", 0 );
2760 setPreferenceProperty( sbYPosition, "max", 1 );
2761 setPreferenceProperty( sbYPosition, "step", 0.05 );
2763 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2764 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2765 setPreferenceProperty( sbWidth, "min", 0 );
2766 setPreferenceProperty( sbWidth, "max", 1 );
2767 setPreferenceProperty( sbWidth, "step", 0.05 );
2769 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2770 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2771 setPreferenceProperty( sbHeight, "min", 0 );
2772 setPreferenceProperty( sbHeight, "max", 1 );
2773 setPreferenceProperty( sbHeight, "step", 0.05 );
2775 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2776 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2777 setPreferenceProperty( sbTextHeight, "min", 6 );
2778 setPreferenceProperty( sbTextHeight, "max", 24 );
2779 setPreferenceProperty( sbTextHeight, "step", 1 );
2781 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2782 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2783 setPreferenceProperty( sbNbIntervals, "min", 2 );
2784 setPreferenceProperty( sbNbIntervals, "max", 64 );
2785 setPreferenceProperty( sbNbIntervals, "step", 1 );
2787 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2788 setPreferenceProperty( originGroup, "columns", 2 );
2790 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2791 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2792 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2793 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2795 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2796 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2798 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2799 setPreferenceProperty( operationsGroup, "columns", 2 );
2801 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2802 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2804 addPreference( tr( "PREF_HIDE_INPUT_OBJECT" ), operationsGroup,
2805 LightApp_Preferences::Bool, "Geometry", "hide_input_object" );
2807 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2809 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2811 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2812 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2814 QStringList aHierarchyTypeList;
2815 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2816 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2817 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2819 QList<QVariant> aHierarchyTypeIndexesList;
2820 aHierarchyTypeIndexesList.append(0);
2821 aHierarchyTypeIndexesList.append(1);
2822 aHierarchyTypeIndexesList.append(2);
2824 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2825 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2827 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2828 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2830 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2832 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2833 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2835 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2836 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2837 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2838 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2839 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2840 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2841 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2842 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2844 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2845 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2846 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2847 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2848 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2849 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2856 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2858 if (section == "Geometry") {
2859 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2860 if (param == QString("SettingsGeomStep")) {
2861 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2862 EmitSignalDefaultStepValueChanged(spin_step);
2864 else if (param == QString("toplevel_color")) {
2865 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2866 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2868 else if (param == QString("toplevel_dm")) {
2869 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2871 else if (param == QString("scalar_bar_x_position") ||
2872 param == QString("scalar_bar_y_position") ||
2873 param == QString("scalar_bar_width") ||
2874 param == QString("scalar_bar_height") ||
2875 param == QString("scalar_bar_text_height") ||
2876 param == QString("scalar_bar_nb_intervals")) {
2877 updateFieldColorScale();
2879 else if ( param == QString("dimensions_color") ||
2880 param == QString("dimensions_line_width") ||
2881 param == QString("dimensions_font") ||
2882 param == QString("dimensions_arrow_length") ||
2883 param == QString("dimensions_show_units") ||
2884 param == QString("dimensions_length_units") ||
2885 param == QString("dimensions_angle_units") ||
2886 param == QString("dimensions_use_text3d") ||
2887 param == QString("shape_annotation_font_color") ||
2888 param == QString("shape_annotation_line_color") ||
2889 param == QString("shape_annotation_font") ||
2890 param == QString("shape_annotation_line_width") ||
2891 param == QString("shape_annotation_autohide") ||
2892 param == QString("shape_annotation_line_style") ||
2893 param == QString("shape_annotation_line_style") ||
2894 param == QString("label_color") )
2896 SalomeApp_Application* anApp = getApp();
2902 GEOM_Displayer aDisplayer;
2904 ViewManagerList aVMs;
2905 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2906 ViewManagerList::Iterator anIt = aVMs.begin();
2907 for ( ; anIt != aVMs.end(); ++anIt )
2909 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2915 SALOME_ListIO aVisible;
2916 aViewer->GetVisible( aVisible );
2918 GEOMGUI_AnnotationMgr* anAnnotationMgr = GetAnnotationMgr();
2919 if ( anAnnotationMgr ) {
2920 SALOME_ListIteratorOfListIO anIter( aVisible );
2921 while ( anIter.More() ) {
2922 if ( anAnnotationMgr->isAnnotationEntry( anIter.Value()->getEntry() ) ) {
2923 aVisible.Remove( anIter );
2931 aDisplayer.Redisplay( aVisible, false, aViewer );
2933 if ( param == QString( "label_color" ) ) {
2934 ViewManagerList aVMsVTK;
2935 anApp->viewManagers( SVTK_Viewer::Type(), aVMsVTK );
2936 ViewManagerList::Iterator anIt = aVMsVTK.begin();
2937 for ( ; anIt != aVMsVTK.end(); ++anIt )
2939 SVTK_Viewer* aViewer = dynamic_cast<SVTK_Viewer*>( (*anIt)->getViewModel() );
2944 SALOME_ListIO aVisible;
2945 aViewer->GetVisible( aVisible );
2946 aDisplayer.Redisplay( aVisible, false, aViewer );
2949 aDisplayer.UpdateViewer();
2951 else if ( param.startsWith( "dependency_tree") )
2952 emit SignalDependencyTreeParamChanged( section, param );
2956 LightApp_Displayer* GeometryGUI::displayer()
2959 myDisplayer = new GEOM_Displayer();
2963 void GeometryGUI::setLocalSelectionMode(const int mode)
2965 myLocalSelectionMode = mode;
2968 int GeometryGUI::getLocalSelectionMode() const
2970 return myLocalSelectionMode;
2973 const char gSeparator = '_'; // character used to separate parameter names
2974 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2977 * \brief Store visual parameters
2979 * This method is called just before the study document is saved.
2980 * Store visual parameters in AttributeParameter attribute(s)
2982 void GeometryGUI::storeVisualParameters (int savePoint)
2984 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2985 if ( !appStudy || !appStudy->studyDS() )
2988 _PTR(Study) studyDS = appStudy->studyDS();
2990 // componentName is used for encoding of entries when storing them in IParameters
2991 std::string componentName = myComponentGeom->ComponentDataType();
2992 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2993 //if (!aSComponent) return;
2996 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2997 componentName.c_str(),
2999 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
3001 QSet<QString> anEntriesToStoreShared;
3002 QList<SUIT_ViewManager*> lst;
3003 QList<SUIT_ViewManager*>::Iterator it;
3005 GEOMGUI_AnnotationMgr* aAnnotationMgr = GetAnnotationMgr();
3007 // main cycle to store parameters of displayed objects
3009 getApp()->viewManagers(lst);
3010 for (it = lst.begin(); it != lst.end(); it++) {
3011 SUIT_ViewManager* vman = *it;
3012 QString vType = vman->getType();
3013 SUIT_ViewModel* vmodel = vman->getViewModel();
3014 SALOME_View* aView = dynamic_cast<SALOME_View*>(vmodel);
3016 int aMgrId = vman->getGlobalId();
3017 // saving VTK actors properties
3018 QVector<SUIT_ViewWindow*> views = vman->getViews();
3019 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
3020 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
3021 ObjMap::ConstIterator o_it = anObjects.begin();
3022 for (; o_it != anObjects.end(); o_it++) {
3023 const PropMap& aProps = o_it.value();
3025 //Check that object exists in the study
3026 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toUtf8().data() ) );
3027 if ( !obj || !(aProps.count() > 0))
3029 // entry is "encoded" = it does NOT contain component address, since it is a
3030 // subject to change on next component loading
3032 std::string entry = ip->encodeEntry(o_it.key().toUtf8().data(), componentName);
3034 _PTR(GenericAttribute) anAttr;
3035 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
3038 // remember entry of object to store shared GEOM properties
3039 // (e.g. dimension properties).
3040 if ( vType == OCCViewer_Viewer::Type() )
3042 anEntriesToStoreShared.insert( o_it.key() );
3045 QString param, occParam = vType;
3046 occParam += GEOM::sectionSeparator();
3047 occParam += QString::number(aMgrId);
3048 occParam += GEOM::sectionSeparator();
3050 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
3051 param = occParam + GEOM::propertyName( GEOM::Visibility );
3052 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
3055 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
3056 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
3057 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
3060 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
3061 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
3063 val << QString::number(c.redF());
3064 val << QString::number(c.greenF());
3065 val << QString::number(c.blueF());
3066 param = occParam + GEOM::propertyName( GEOM::Color );
3067 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
3070 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
3071 param = occParam + GEOM::propertyName( GEOM::Texture );
3072 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
3075 if (vType == SVTK_Viewer::Type()) {
3076 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
3077 param = occParam + GEOM::propertyName( GEOM::Opacity );
3078 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
3080 } else if (vType == SOCC_Viewer::Type()) {
3081 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
3082 param = occParam + GEOM::propertyName( GEOM::Transparency );
3083 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
3086 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
3087 param = occParam + GEOM::propertyName( GEOM::TopLevel );
3088 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
3092 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
3093 param = occParam + GEOM::propertyName( GEOM::NbIsos );
3094 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
3097 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
3098 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
3099 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
3102 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
3103 param = occParam + GEOM::propertyName( GEOM::Vertices );
3104 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
3107 if (aProps.contains(GEOM::propertyName( GEOM::ShowName ))) {
3108 param = occParam + GEOM::propertyName( GEOM::ShowName );
3109 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::ShowName )).toString().toStdString());
3112 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
3113 param = occParam + GEOM::propertyName( GEOM::Deflection );
3114 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
3117 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
3118 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
3119 param = occParam + GEOM::propertyName( GEOM::PointMarker );
3120 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
3123 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
3124 param = occParam + GEOM::propertyName( GEOM::Material );
3125 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
3128 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
3129 param = occParam + GEOM::propertyName( GEOM::LineWidth );
3130 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
3133 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
3134 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
3135 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
3138 if ( vType == SOCC_Viewer::Type() && aAnnotationMgr ) {
3139 std::string anAnnotationInfo = GetAnnotationMgr()->getDisplayedIndicesInfo(
3140 o_it.key().toUtf8().data(), dynamic_cast<SOCC_Viewer*>(aView) ).toStdString();
3141 if (!anAnnotationInfo.empty()) {
3142 param = occParam + "ShapeAnnotationVisibleItems";
3143 ip->setParameter(entry, param.toStdString(), anAnnotationInfo);
3146 } // object iterator
3148 } // for (viewManagers)
3150 // store shape annotation and dimension attributes of objects:
3151 // since the displayed object always persists in property map, we remember the object entries
3152 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
3153 const QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
3154 const QString aAnnotationParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::ShapeAnnotations );
3155 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
3156 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
3158 std::string aStudyEntry = (*aEntryIt).toUtf8().data();
3159 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName );
3161 // store dimension parameters
3162 GEOMGUI_DimensionProperty aDimensions( aStudyEntry );
3163 if ( aDimensions.GetNumber() != 0 ) {
3164 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toUtf8().data() );
3167 _PTR(SObject) aObj( studyDS->FindObjectID( aStudyEntry ) );
3168 const Handle(GEOMGUI_AnnotationAttrs) aShapeAnnAttr = GEOMGUI_AnnotationAttrs::FindAttributes( aObj );
3169 if ( !aShapeAnnAttr.IsNull() ) {
3170 ip->setParameter( aStoreEntry, aAnnotationParam.toStdString(), aShapeAnnAttr->ExportAsPropertyString().toUtf8().data() );
3176 * \brief Restore visual parameters
3178 * This method is called after the study document is opened.
3179 * Restore visual parameters from AttributeParameter attribute(s)
3181 void GeometryGUI::restoreVisualParameters (int savePoint)
3183 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
3184 if (!appStudy || !appStudy->studyDS())
3186 _PTR(Study) studyDS = appStudy->studyDS();
3188 // componentName is used for encoding of entries when storing them in IParameters
3189 std::string componentName = myComponentGeom->ComponentDataType();
3190 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
3191 //if (!aSComponent) return;
3194 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
3195 componentName.c_str(),
3197 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
3199 std::vector<std::string> entries = ip->getEntries();
3201 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
3203 // entry is a normal entry - it should be "decoded" (setting base address of component)
3204 QString entry (ip->decodeEntry(*entIt).c_str());
3206 // Check that the entry corresponds to a real object in the Study
3207 // as the object may be deleted or modified after the visual state is saved.
3208 _PTR(SObject) so = studyDS->FindObjectID(entry.toUtf8().data());
3209 if (!so) continue; //Skip the not existent entry
3211 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
3212 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
3214 std::vector<std::string>::iterator namesIt = paramNames.begin();
3215 std::vector<std::string>::iterator valuesIt = paramValues.begin();
3217 // actors are stored in a map after displaying of them for
3218 // quicker access in the future: map < viewID to actor >
3219 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
3220 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
3222 QString viewerTypStr;
3223 QString viewIndexStr;
3225 QVector<PropMap> aListOfMap;
3227 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
3229 // visual parameters are stored in strings as follows:
3230 // 1) ViewerType_ViewIndex_ParamName
3231 // 2) ViewerType_ParamName (shared for GEOM module)
3232 // '_' is used as separator and should not be used in viewer type or parameter names.
3233 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
3235 bool isShared = lst.size() == 2;
3236 bool isViewer = lst.size() == 3;
3237 if ( !isShared && !isViewer )
3242 // shared visual parameters
3245 QString aParamNameStr( lst[1] );
3246 QString aValuesStr( (*valuesIt).c_str() );
3248 // shared dimension properties are stored as attribute
3249 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
3251 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
3252 aDimensionProp.SaveToAttribute( entry.toUtf8().data() );
3254 else if ( aParamNameStr == GEOM::propertyName( GEOM::ShapeAnnotations ) )
3256 Handle(GEOMGUI_AnnotationAttrs) anAttr =
3257 GEOMGUI_AnnotationAttrs::FindOrCreateAttributes( so, appStudy );
3259 anAttr->ImportFromPropertyString( aValuesStr );
3265 // per view visual parameters
3266 viewerTypStr = lst[0];
3267 viewIndexStr = lst[1];
3268 QString paramNameStr = lst[2];
3271 viewIndex = viewIndexStr.toUInt(&ok);
3272 if (!ok) // bad conversion of view index to integer
3275 if ((viewIndex + 1) > aListOfMap.count()) {
3276 aListOfMap.resize(viewIndex + 1);
3279 QString val((*valuesIt).c_str());
3280 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
3281 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
3282 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
3283 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
3284 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
3285 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
3286 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
3287 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
3288 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
3289 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
3290 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
3291 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
3292 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
3293 QStringList rgb = val.split(GEOM::subSectionSeparator());
3294 if (rgb.count() == 3) {
3295 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
3296 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
3298 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
3299 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
3300 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
3301 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
3302 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
3303 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
3304 } else if (paramNameStr == GEOM::propertyName( GEOM::ShowName )) {
3305 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::ShowName ), val == "true" || val == "1");
3306 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3307 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3308 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3309 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3310 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3311 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3312 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3313 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3314 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3315 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3316 } else if (paramNameStr == "ShapeAnnotationVisibleItems") {
3317 aListOfMap[viewIndex].insert( "ShapeAnnotationVisibleItems", val);
3320 } // for names/parameters iterator
3322 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3324 for (int index = 0; index < aListOfMap.count(); index++) {
3325 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
3327 //Get Visibility property of the current PropMap
3328 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3329 SUIT_ViewManager* vman = lst.at(index);
3330 SUIT_ViewModel* vmodel = vman->getViewModel();
3331 SALOME_View* aView = dynamic_cast<SALOME_View*>(vmodel);
3332 displayer()->Display(entry, true, aView);
3334 if ( vmodel->getType() == SOCC_Viewer::Type() ) {
3335 PropMap& aProps = aListOfMap[index];
3336 if ( aProps.contains( "ShapeAnnotationVisibleItems" ) ) {
3337 SOCC_Viewer* aSOCCView = dynamic_cast<SOCC_Viewer*>( aView );
3338 GetAnnotationMgr()->setDisplayedIndicesInfo( entry, aSOCCView, aProps["ShapeAnnotationVisibleItems"].toString() );
3343 } // for entries iterator
3345 // update all VTK and OCC views
3346 QList<SUIT_ViewManager*> lst;
3347 getApp()->viewManagers(lst);
3348 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3349 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3352 if (vmodel->getType() == SVTK_Viewer::Type()) {
3353 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3354 vtkView->getRenderer()->ResetCameraClippingRange();
3357 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3358 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3359 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3365 if ( myTextTreeWdg ) {
3366 myTextTreeWdg->updateTree();
3370 // Compute current name mode of the viewer
3371 void UpdateNameMode( SalomeApp_Application* app )
3373 bool isMode = false;
3374 SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() );
3375 SUIT_ViewWindow* viewWindow = app->desktop()->activeWindow();
3376 GEOM_Displayer displayer;
3377 int aMgrId = viewWindow->getViewManager()->getGlobalId();
3379 SALOME_View* window = displayer.GetActiveView();
3380 if ( !window ) return;
3382 SALOME_ListIO anIOlst;
3383 window->GetVisible( anIOlst );
3385 for ( SALOME_ListIteratorOfListIO It( anIOlst ); It.More(); It.Next() ) {
3386 Handle( SALOME_InteractiveObject ) io = It.Value();
3387 QVariant v = aStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::ShowName ), QVariant() );
3388 bool isIONameMode = v.isValid() ? v.toBool() : false;
3392 viewWindow->setProperty( "NameMode", isMode );
3395 void GeometryGUI::onViewAboutToShow()
3397 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3398 QAction* a = action( GEOMOp::OpSwitchVectors );
3399 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3400 QAction* aNameAction = action( GEOMOp::OpSwitchName );
3402 a->setEnabled(true);
3403 bool vmode = window->property("VectorsMode").toBool();
3404 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3405 aVerticesAction->setEnabled(true);
3406 vmode = window->property("VerticesMode").toBool();
3407 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3408 UpdateNameMode( getApp() );
3409 aNameAction->setEnabled(true);
3410 vmode = window->property("NameMode").toBool();
3411 aNameAction->setText ( vmode == 1 ? tr( "MEN_NAME_MODE_OFF" ) : tr("MEN_NAME_MODE_ON") );
3413 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3414 a->setEnabled(false);
3415 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3416 aVerticesAction->setEnabled(false);
3417 aNameAction->setText ( tr("MEN_NAME_MODE_ON") );
3418 aNameAction->setEnabled(false);
3423 \brief Return action by id
3424 \param id identifier of the action
3427 QAction* GeometryGUI::getAction(const int id) {
3432 \brief GEOM module message handler
3434 This method can be re-implemented in the subclasses.
3435 This is a GEOM module message handler.
3437 \param msg the message received.
3439 void GeometryGUI::message(const QString& msg)
3442 QStringList data = msg.split("/");
3443 const int nbStrings = data.count();
3445 if (nbStrings > 0) {
3446 if (data[0] == "modified") {
3448 QString anIOR = nbStrings > 1 ? data[1] : QString();
3450 if ( anIOR.isEmpty() ) {
3454 // Get the geom object.
3455 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3457 // Clear the shape buffer
3458 GeometryGUI::ClearShapeBuffer (anObj);
3464 \brief Clears the shape buffer.
3466 This is a static method. It clears the shape buffer.
3468 \param theObj the object
3470 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3472 if ( CORBA::is_nil( theObj ) )
3475 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3476 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3477 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3479 SalomeApp_Application* app =
3480 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3481 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3486 _PTR(Study) aStudy = appStudy->studyDS();
3491 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3495 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3496 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3497 _PTR(GenericAttribute) anAttr;
3498 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3499 _PTR(AttributeIOR) anIOR ( anAttr );
3500 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3501 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3507 \brief Returns the object from IOR.
3509 This is a static method. It returns the object from its IOR.
3511 \param IOR object IOR
3512 \return GEOM object.
3514 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3516 GEOM::GEOM_Object_var geomObj;
3517 if ( !IOR.isEmpty() ) {
3518 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3519 ( IOR.toLatin1().constData() );
3520 if ( !CORBA::is_nil( corbaObj ) )
3521 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3523 return geomObj._retn();
3527 \brief Returns IOR of the object.
3529 This is a static method. It returns the object's IOR.
3531 \param object the GEOM object.
3532 \return object's IOR.
3534 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3537 if ( !CORBA::is_nil( object ) ) {
3538 CORBA::String_var anIOR =
3539 SalomeApp_Application::orb()->object_to_string( object );
3546 \brief Check if this object is can't be renamed in place
3548 This method can be re-implemented in the subclasses.
3549 Return true in case if object isn't reference or component (module root).
3551 \param entry column id
3552 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3554 bool GeometryGUI::renameAllowed( const QString& entry) const {
3556 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3557 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3558 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3560 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3564 Rename object by entry.
3565 \param entry entry of the object
3566 \param name new name of the object
3567 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3569 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3571 bool result = false;
3573 SalomeApp_Application* app =
3574 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3575 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3580 _PTR(Study) aStudy = appStudy->studyDS();
3585 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3587 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3591 _PTR(SObject) obj ( aStudy->FindObjectID(qUtf8Printable(entry)) );
3592 _PTR(GenericAttribute) anAttr;
3594 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3595 _PTR(AttributeName) aName (anAttr);
3597 aName->SetValue( name.toUtf8().data() ); // rename the SObject
3598 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3599 if (!CORBA::is_nil(anObj)) {
3600 anObj->SetName( name.toUtf8().data() ); // Rename the corresponding GEOM_Object
3601 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3602 emit SignalTextTreeRenameObject( entry );
3610 void GeometryGUI::updateMaterials()
3612 LightApp_Preferences* pref = preferences();
3614 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3615 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3616 if ( !materials.contains( currentMaterial ) )
3617 // user material set as default in the preferences, might be removed
3618 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3620 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3622 setPreferenceProperty( prefItem->id(),
3623 "strings", materials );
3624 prefItem->retrieve();
3630 \brief Check if the module allows "drag" operation of its objects.
3632 Overloaded from LightApp_Module class.
3634 This function is a part of the general drag-n-drop mechanism.
3635 The goal of this function is to check data object passed as a parameter
3636 and decide if it can be dragged or no.
3638 \param what data object being tested for drag operation
3639 \return \c true if module allows dragging of the specified object
3640 \sa isDropAccepted(), dropObjects()
3642 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3644 // we allow dragging object under root and object from folder
3645 int aLevel = what->level();
3646 bool anObjectInFolder = false;
3648 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3650 _PTR(SObject) aSO = dataObj->object();
3652 _PTR(GenericAttribute) anAttr;
3653 _PTR(SObject) aFatherSO = SalomeApp_Application::getStudy()->GetUseCaseBuilder()->GetFather( aSO );
3654 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3655 _PTR(AttributeLocalID) aLocalID( anAttr );
3656 anObjectInFolder = aLocalID->Value() == 999;
3661 return aLevel == 2 || anObjectInFolder;
3665 \brief Check if the module allows "drop" operation on the given object.
3667 Overloaded from LightApp_Module class.
3669 This function is a part of the general drag-n-drop mechanism.
3670 The goal of this function is to check data object passed as a parameter
3671 and decide if it can be used as a target for the "drop" operation.
3672 The processing of the drop operation itself is done in the dropObjects() function.
3674 \param where target data object
3675 \return \c true if module supports dropping on the \a where data object
3676 \sa isDraggable(), dropObjects()
3678 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3680 // we allow dropping into folder and top-level GEOM object
3681 int aLevel = where->level();
3682 bool isFolder = false;
3684 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3686 _PTR(SObject) aSO = dataObj->object();
3688 _PTR(GenericAttribute) anAttr;
3689 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3690 _PTR(AttributeLocalID) aLocalID( anAttr );
3691 isFolder = aLocalID->Value() == 999;
3696 return aLevel == 1 || isFolder;
3700 \brief Complete drag-n-drop operation.
3702 Overloaded from LightApp_Module class.
3704 This function is a part of the general drag-n-drop mechanism.
3705 Its goal is to handle dropping of the objects being dragged according
3706 to the chosen operation (move). The dropping is performed in the
3707 context of the parent data object \a where and the \a row (position in the
3708 children index) at which the data should be dropped. If \a row is equal to -1,
3709 this means that objects are added to the end of the children list.
3711 \param what objects being dropped
3712 \param where target data object
3713 \param row child index at which the drop operation is performed
3714 \param action drag-n-drop operation (Qt::DropAction) - move
3716 \sa isDraggable(), isDropAccepted()
3718 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3719 const int row, Qt::DropAction action )
3721 if (action != Qt::CopyAction && action != Qt::MoveAction)
3722 return; // unsupported action
3724 // get parent object
3725 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3726 if ( !dataObj ) return; // wrong parent
3727 _PTR(SObject) parentObj = dataObj->object();
3729 // Find the current Study and StudyBuilder
3730 _PTR(Study) aStudy = SalomeApp_Application::getStudy();
3731 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3732 // collect all parents of the target node
3733 QStringList parentIDs;
3734 _PTR(SObject) parent = parentObj;
3735 while( !parent->IsNull() ) {
3736 parentIDs << parent->GetID().c_str();
3737 parent = aUseCaseBuilder->GetFather(parent);
3740 // collect objects being dropped
3741 GEOM::object_list_var objects = new GEOM::object_list();
3742 objects->length( what.count() );
3744 for ( int i = 0; i < what.count(); i++ ) {
3745 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3746 if ( !dataObj ) continue; // skip wrong objects
3747 _PTR(SObject) sobj = dataObj->object();
3748 // check that dropped object is not a parent of target object
3749 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3750 return; // it's not allowed to move node into it's child
3752 objects[i] = _CAST(SObject, sobj)->GetSObject();
3755 objects->length( count );
3757 // call engine function
3758 GetGeomGen()->Move( objects.in(), // what
3759 _CAST(SObject, parentObj)->GetSObject(), // where
3762 // update Object browser
3763 getApp()->updateObjectBrowser( false );
3766 void GeometryGUI::emitDimensionsUpdated( QString entry )
3768 emit DimensionsUpdated( entry );
3771 void GeometryGUI::emitAnnotationsUpdated( QString entry )
3773 emit SignalAnnotationsUpdated( entry );