1 // Copyright (C) 2007-2023 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : GeometryGUI.cxx
23 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
25 #include <Standard_math.hxx> // E.A. must be included before Python.h to fix compilation on windows
27 #undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
30 #include "GeometryGUI.h"
31 #include "GeometryGUI_Operations.h"
32 #include "GEOMPluginGUI.h"
33 #include "GEOMGUI_OCCSelector.h"
34 #include "GEOMGUI_Selection.h"
35 #include "GEOMGUI_CreationInfoWdg.h"
36 #include "GEOMGUI_TextTreeWdg.h"
37 #include "GEOMGUI_DimensionProperty.h"
38 #include "GEOM_Constants.h"
39 #include "GEOM_Displayer.h"
40 #include "GEOM_AISShape.hxx"
41 #include "GEOMUtils_XmlHandler.hxx"
42 #include "GEOMGUI_AnnotationMgr.h"
43 #include "GEOMGUI_TextTreeSelector.h"
45 #include "GEOM_Actor.h"
47 #include <Material_ResourceMgr.h>
48 #include <Material_Model.h>
50 #include <Basics_OCCTVersion.hxx>
52 #include <SUIT_Desktop.h>
53 #include <SUIT_MessageBox.h>
54 #include <SUIT_ResourceMgr.h>
55 #include <SUIT_Session.h>
56 #include <SUIT_ViewManager.h>
58 #include <OCCViewer_ViewWindow.h>
59 #include <OCCViewer_ViewPort3d.h>
60 #include <OCCViewer_ViewModel.h>
61 #include <OCCViewer_ViewManager.h>
63 #include <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 // ----- create actions --------------
985 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
987 createGeomAction( GEOMOp::OpPoint, "POINT" );
988 createGeomAction( GEOMOp::OpLine, "LINE" );
989 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
990 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
991 createGeomAction( GEOMOp::OpArc, "ARC" );
992 createGeomAction( GEOMOp::OpCurve, "CURVE" );
993 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
994 createGeomAction( GEOMOp::OpVector, "VECTOR" );
995 createGeomAction( GEOMOp::OpPlane, "PLANE" );
996 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
997 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
998 createGeomAction( GEOMOp::OpSurfaceFromFace, "SURFACE_FROM_FACE" );
1000 createGeomAction( GEOMOp::OpBox, "BOX" );
1001 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
1002 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
1003 createGeomAction( GEOMOp::OpTorus, "TORUS" );
1004 createGeomAction( GEOMOp::OpCone, "CONE" );
1005 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
1006 createGeomAction( GEOMOp::OpDisk, "DISK" );
1008 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
1009 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
1010 createGeomAction( GEOMOp::OpFilling, "FILLING" );
1011 createGeomAction( GEOMOp::OpPipe, "PIPE" );
1012 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
1013 createGeomAction( GEOMOp::OpThickness, "THICKNESS" );
1015 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
1016 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
1017 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
1018 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
1019 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
1021 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
1022 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
1024 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
1026 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
1027 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
1029 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
1030 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
1031 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
1033 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
1035 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
1036 createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" );
1038 createGeomAction( GEOMOp::OpEdge, "EDGE" );
1039 createGeomAction( GEOMOp::OpWire, "WIRE" );
1040 createGeomAction( GEOMOp::OpFace, "FACE" );
1041 createGeomAction( GEOMOp::OpShell, "SHELL" );
1042 createGeomAction( GEOMOp::OpSolid, "SOLID" );
1043 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
1045 createGeomAction( GEOMOp::OpFuse, "FUSE" );
1046 createGeomAction( GEOMOp::OpCommon, "COMMON" );
1047 createGeomAction( GEOMOp::OpCut, "CUT" );
1048 createGeomAction( GEOMOp::OpSection, "SECTION" );
1050 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
1051 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
1052 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
1053 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
1054 createGeomAction( GEOMOp::OpScale, "SCALE" );
1055 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
1056 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
1057 createGeomAction( GEOMOp::OpProjOnCyl, "PROJ_ON_CYL" );
1058 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
1059 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
1060 createGeomAction( GEOMOp::OpExtension, "EXTENSION" );
1062 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
1063 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
1064 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
1065 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
1066 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
1067 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
1068 createGeomAction( GEOMOp::OpTransferData, "TRANSFER_DATA" );
1069 createGeomAction( GEOMOp::OpExtraction, "EXTRACTION" );
1070 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
1071 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
1072 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
1073 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
1075 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
1076 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
1077 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
1079 createGeomAction( GEOMOp::OpSewing, "SEWING" );
1080 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
1081 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
1082 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
1083 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
1084 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
1085 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
1086 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
1087 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
1088 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
1089 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
1090 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
1091 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1092 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1093 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1094 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1095 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1096 createGeomAction( GEOMOp::OpInspectObj, "INSPECT_OBJECT" );
1098 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1099 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1100 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1101 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1102 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1103 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1104 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1105 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1106 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1107 createGeomAction( GEOMOp::OpAnnotation, "ANNOTATION" );
1108 createGeomAction( GEOMOp::OpEditAnnotation, "EDIT_ANNOTATION" );
1109 createGeomAction( GEOMOp::OpDeleteAnnotation, "DELETE_ANNOTATION" );
1111 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1112 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1113 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1114 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1115 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1116 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1117 createGeomAction( GEOMOp::OpFastCheckInters, "FAST_CHECK_INTERSECTIONS" );
1118 #ifndef DISABLE_PLOT2DVIEWER
1119 createGeomAction( GEOMOp::OpShapeStatistics, "SHAPE_STATISTICS" );
1122 #ifndef DISABLE_PYCONSOLE
1123 #ifdef _DEBUG_ // PAL16821
1124 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1128 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1129 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1130 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1131 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1132 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1133 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1134 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1135 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1136 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1137 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1138 createGeomAction( GEOMOp::OpSwitchName, "NAME_MODE");
1139 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1140 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1141 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1142 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1143 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1144 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1145 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1146 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1147 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1148 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1149 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1150 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1151 createGeomAction( GEOMOp::OpHide, "ERASE" );
1153 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1154 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1155 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1156 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1157 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1158 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1159 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1160 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1161 createGeomAction( GEOMOp::OpShowName, "POP_SHOW_NAME", "", 0, true );
1162 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1163 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1164 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1165 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1166 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1167 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1168 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1169 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1170 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1171 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1172 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1173 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1174 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1175 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1176 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1177 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1178 createGeomAction( GEOMOp::OpMaterialMenu, "POP_MATERIAL_PROPERTIES");
1179 action(GEOMOp::OpMaterialMenu)->setMenu( new QMenu() );
1180 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1181 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1182 #ifndef DISABLE_GRAPHICSVIEW
1183 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1185 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1186 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1187 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1188 createGeomAction( GEOMOp::OpShowAllAnnotations, "POP_SHOW_ALL_ANNOTATIONS" );
1189 createGeomAction( GEOMOp::OpHideAllAnnotations, "POP_HIDE_ALL_ANNOTATIONS" );
1191 // Create actions for increase/decrease transparency shortcuts
1192 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1193 "Geometry:Increase transparency");
1194 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1195 "Geometry:Decrease transparency");
1197 // Create actions for increase/decrease number of isolines
1198 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1199 "Geometry:Increase number of isolines");
1200 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1201 "Geometry:Decrease number of isolines");
1203 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1204 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1205 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1206 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1207 //@@ 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 @@//
1209 // ---- create menus --------------------------
1211 /*int fileId =*/ createMenu( tr( "MEN_FILE" ), -1, -1 );
1213 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1214 createMenu( GEOMOp::OpDelete, editId, -1 );
1216 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1218 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1219 createMenu( GEOMOp::OpPoint, basicId, -1 );
1220 createMenu( GEOMOp::OpLine, basicId, -1 );
1221 createMenu( GEOMOp::OpCircle, basicId, -1 );
1222 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1223 createMenu( GEOMOp::OpArc, basicId, -1 );
1224 createMenu( GEOMOp::OpCurve, basicId, -1 );
1225 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1226 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1227 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1228 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1229 createMenu( GEOMOp::OpSurfaceFromFace, basicId, -1 );
1230 createMenu( separator(), basicId, -1 );
1231 createMenu( GEOMOp::OpVector, basicId, -1 );
1232 createMenu( GEOMOp::OpPlane, basicId, -1 );
1233 createMenu( GEOMOp::OpLCS, basicId, -1 );
1234 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1236 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1237 createMenu( GEOMOp::OpBox, primId, -1 );
1238 createMenu( GEOMOp::OpCylinder, primId, -1 );
1239 createMenu( GEOMOp::OpSphere, primId, -1 );
1240 createMenu( GEOMOp::OpTorus, primId, -1 );
1241 createMenu( GEOMOp::OpCone, primId, -1 );
1242 createMenu( GEOMOp::OpRectangle, primId, -1 );
1243 createMenu( GEOMOp::OpDisk, primId, -1 );
1244 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1246 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1247 createMenu( GEOMOp::OpPrism, genId, -1 );
1248 createMenu( GEOMOp::OpRevolution, genId, -1 );
1249 createMenu( GEOMOp::OpFilling, genId, -1 );
1250 createMenu( GEOMOp::OpPipe, genId, -1 );
1251 createMenu( GEOMOp::OpPipePath, genId, -1 );
1252 createMenu( GEOMOp::OpThickness, genId, -1 );
1254 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1255 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1256 //@@ 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 @@//
1258 createMenu( separator(), newEntId, -1 );
1260 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1261 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1262 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1263 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1264 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1265 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1267 createMenu( separator(), newEntId, -1 );
1269 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1270 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1271 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1273 createMenu( separator(), newEntId, -1 );
1275 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1276 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1277 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1278 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1279 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1281 createMenu( separator(), newEntId, -1 );
1283 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1285 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1286 createMenu( GEOMOp::OpEdge, buildId, -1 );
1287 createMenu( GEOMOp::OpWire, buildId, -1 );
1288 createMenu( GEOMOp::OpFace, buildId, -1 );
1289 createMenu( GEOMOp::OpShell, buildId, -1 );
1290 createMenu( GEOMOp::OpSolid, buildId, -1 );
1291 createMenu( GEOMOp::OpCompound, buildId, -1 );
1293 createMenu( separator(), newEntId, -1 );
1295 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1297 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1300 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1302 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1303 createMenu( GEOMOp::OpFuse, boolId, -1 );
1304 createMenu( GEOMOp::OpCommon, boolId, -1 );
1305 createMenu( GEOMOp::OpCut, boolId, -1 );
1306 createMenu( GEOMOp::OpSection, boolId, -1 );
1308 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1309 createMenu( GEOMOp::OpTranslate, transId, -1 );
1310 createMenu( GEOMOp::OpRotate, transId, -1 );
1311 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1312 createMenu( GEOMOp::OpMirror, transId, -1 );
1313 createMenu( GEOMOp::OpScale, transId, -1 );
1314 createMenu( GEOMOp::OpOffset, transId, -1 );
1315 createMenu( GEOMOp::OpProjection, transId, -1 );
1316 createMenu( GEOMOp::OpExtension, transId, -1 );
1317 createMenu( GEOMOp::OpProjOnCyl, transId, -1 );
1318 createMenu( separator(), transId, -1 );
1319 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1320 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1322 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1323 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1324 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1325 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1327 createMenu( separator(), operId, -1 );
1329 createMenu( GEOMOp::OpPartition, operId, -1 );
1330 createMenu( GEOMOp::OpArchimede, operId, -1 );
1331 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1332 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1333 createMenu( GEOMOp::OpTransferData, operId, -1 );
1334 createMenu( GEOMOp::OpExtraction, operId, -1 );
1336 createMenu( separator(), operId, -1 );
1338 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1339 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1340 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1341 createMenu( GEOMOp::OpChamfer, operId, -1 );
1342 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1343 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1345 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1346 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1347 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1348 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1349 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1350 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1351 createMenu( GEOMOp::OpSewing, repairId, -1 );
1352 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1353 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1354 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1355 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1356 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1357 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1358 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1359 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1360 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1361 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1362 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1364 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1365 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1366 createMenu( GEOMOp::OpProperties, measurId, -1 );
1367 createMenu( separator(), measurId, -1 );
1368 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1369 createMenu( GEOMOp::OpInertia, measurId, -1 );
1370 createMenu( GEOMOp::OpNormale, measurId, -1 );
1371 createMenu( separator(), measurId, -1 );
1372 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1373 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1374 createMenu( separator(), measurId, -1 );
1376 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1377 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1378 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1379 createMenu( GEOMOp::OpAngle, dimId, -1 );
1380 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1382 createMenu( GEOMOp::OpAnnotation, measurId, -1 );
1384 createMenu( separator(), measurId, -1 );
1385 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1386 createMenu( separator(), measurId, -1 );
1387 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1388 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1389 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1390 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1391 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1392 createMenu( GEOMOp::OpFastCheckInters, measurId, -1 );
1393 createMenu( GEOMOp::OpInspectObj, measurId, -1 );
1394 #ifndef DISABLE_PLOT2DVIEWER
1395 createMenu( GEOMOp::OpShapeStatistics, measurId, -1 );
1398 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1399 #ifndef DISABLE_PYCONSOLE
1400 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1401 createMenu( separator(), toolsId, -1 );
1402 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1406 createMenu( separator(), toolsId, -1 );
1407 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1408 createMenu( separator(), toolsId, -1 );
1410 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1411 createMenu( separator(), viewId, -1 );
1413 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1414 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1415 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1416 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1417 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1418 createMenu( separator(), dispmodeId, -1 );
1419 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1420 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1421 createMenu( GEOMOp::OpSwitchName, dispmodeId, -1 );
1423 createMenu( separator(), viewId, -1 );
1424 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1425 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1426 createMenu( separator(), viewId, -1 );
1427 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1428 createMenu( separator(), viewId, -1 );
1432 because of these items are accessible through object browser and viewers
1433 we have removed they from main menu
1435 createMenu( GEOMOp::OpShow, viewId, -1 );
1436 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1437 createMenu( GEOMOp::OpHide, viewId, -1 );
1440 // ---- create toolbars --------------------------
1442 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1443 createTool( GEOMOp::OpPoint, basicTbId );
1444 createTool( GEOMOp::OpLine, basicTbId );
1445 createTool( GEOMOp::OpCircle, basicTbId );
1446 createTool( GEOMOp::OpEllipse, basicTbId );
1447 createTool( GEOMOp::OpArc, basicTbId );
1448 createTool( GEOMOp::OpCurve, basicTbId );
1449 createTool( GEOMOp::OpVector, basicTbId );
1450 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1451 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1452 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1453 createTool( GEOMOp::OpIsoline, basicTbId );
1454 createTool( GEOMOp::OpSurfaceFromFace, basicTbId );
1455 createTool( GEOMOp::OpPlane, basicTbId );
1456 createTool( GEOMOp::OpLCS, basicTbId );
1457 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1459 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1460 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1461 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1463 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1464 createTool( GEOMOp::OpBox, primTbId );
1465 createTool( GEOMOp::OpCylinder, primTbId );
1466 createTool( GEOMOp::OpSphere, primTbId );
1467 createTool( GEOMOp::OpTorus, primTbId );
1468 createTool( GEOMOp::OpCone, primTbId );
1469 createTool( GEOMOp::OpRectangle, primTbId );
1470 createTool( GEOMOp::OpDisk, primTbId );
1471 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1473 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1474 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1475 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1477 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1478 createTool( GEOMOp::OpFuse, boolTbId );
1479 createTool( GEOMOp::OpCommon, boolTbId );
1480 createTool( GEOMOp::OpCut, boolTbId );
1481 createTool( GEOMOp::OpSection, boolTbId );
1483 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1484 createTool( GEOMOp::OpPrism, genTbId );
1485 createTool( GEOMOp::OpRevolution, genTbId );
1486 createTool( GEOMOp::OpFilling, genTbId );
1487 createTool( GEOMOp::OpPipe, genTbId );
1488 createTool( GEOMOp::OpPipePath, genTbId );
1489 createTool( GEOMOp::OpThickness, genTbId );
1491 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1492 createTool( GEOMOp::OpTranslate, transTbId );
1493 createTool( GEOMOp::OpRotate, transTbId );
1494 createTool( GEOMOp::OpChangeLoc, transTbId );
1495 createTool( GEOMOp::OpMirror, transTbId );
1496 createTool( GEOMOp::OpScale, transTbId );
1497 createTool( GEOMOp::OpOffset, transTbId );
1498 createTool( GEOMOp::OpProjection, transTbId );
1499 createTool( GEOMOp::OpExtension, transTbId );
1500 createTool( GEOMOp::OpProjOnCyl, transTbId );
1501 createTool( separator(), transTbId );
1502 createTool( GEOMOp::OpMultiTranslate, transTbId );
1503 createTool( GEOMOp::OpMultiRotate, transTbId );
1505 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1506 createTool( GEOMOp::OpExplode, operTbId );
1507 createTool( GEOMOp::OpPartition, operTbId );
1508 createTool( GEOMOp::OpArchimede, operTbId );
1509 createTool( GEOMOp::OpShapesOnShape, operTbId );
1510 createTool( GEOMOp::OpSharedShapes, operTbId );
1511 createTool( GEOMOp::OpTransferData, operTbId );
1512 createTool( GEOMOp::OpExtraction, operTbId );
1514 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1515 createTool( GEOMOp::OpFillet1d, featTbId );
1516 createTool( GEOMOp::OpFillet2d, featTbId );
1517 createTool( GEOMOp::OpFillet3d, featTbId );
1518 createTool( GEOMOp::OpChamfer, featTbId );
1519 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1520 createTool( GEOMOp::OpExtrudedCut, featTbId );
1522 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1523 createTool( GEOMOp::OpEdge, buildTbId );
1524 createTool( GEOMOp::OpWire, buildTbId );
1525 createTool( GEOMOp::OpFace, buildTbId );
1526 createTool( GEOMOp::OpShell, buildTbId );
1527 createTool( GEOMOp::OpSolid, buildTbId );
1528 createTool( GEOMOp::OpCompound, buildTbId );
1530 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1531 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1532 createTool( GEOMOp::OpProperties, measureTbId );
1533 createTool( GEOMOp::OpCenterMass, measureTbId );
1534 createTool( GEOMOp::OpInertia, measureTbId );
1535 createTool( GEOMOp::OpNormale, measureTbId );
1536 createTool( separator(), measureTbId );
1537 createTool( GEOMOp::OpBoundingBox, measureTbId );
1538 createTool( GEOMOp::OpMinDistance, measureTbId );
1539 createTool( GEOMOp::OpAngle, measureTbId );
1540 createTool( GEOMOp::OpAnnotation, measureTbId );
1541 createTool( GEOMOp::OpTolerance , measureTbId );
1542 createTool( separator(), measureTbId );
1543 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1544 createTool( GEOMOp::OpFreeFaces, measureTbId );
1545 createTool( separator(), measureTbId );
1546 createTool( GEOMOp::OpWhatIs, measureTbId );
1547 createTool( GEOMOp::OpCheckShape, measureTbId );
1548 createTool( GEOMOp::OpCheckCompound, measureTbId );
1549 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1550 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1551 createTool( GEOMOp::OpFastCheckInters, measureTbId );
1553 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1554 createTool( GEOMOp::OpPictureImport, picturesTbId );
1556 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1559 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1560 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1561 //@@ 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 @@//
1563 // ---- create popup menus --------------------------
1565 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1566 QString clientOCC = "(client='OCCViewer')";
1567 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1568 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1570 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1571 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1572 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1573 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1575 QString notGEOMShape = "(not ($component={'GEOM'}) and ($displayer={'Geometry'}))";
1577 QString autoColorPrefix =
1578 "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') and type='Shape' and selcount=1";
1580 QtxPopupMgr* mgr = popupMgr();
1582 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1583 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1584 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1585 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1586 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1587 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1588 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1589 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1591 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1592 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1593 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1594 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1595 mgr->insert( separator(), -1, -1 ); // -----------
1597 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1598 QString bringRule = clientOCCorOB + " and ($displayer={'Geometry'}) and isFolder=false and (selcount>0) and isOCC=true";
1599 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1600 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1601 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1602 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1603 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1604 mgr->insert( separator(), -1, -1 ); // -----------
1605 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1606 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1607 //mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1608 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1609 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1610 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1611 // mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1612 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1613 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1614 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1615 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1616 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1617 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1618 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1619 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1620 mgr->insert( separator(), dispmodeId, -1 );
1621 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1622 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1623 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1624 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1625 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1626 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1627 mgr->insert( action( GEOMOp::OpShowName ), dispmodeId, -1 ); // show name
1628 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1629 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK + " and isNameMode", QtxPopupMgr::ToggleRule );
1630 mgr->insert( separator(), -1, -1 ); // -----------
1632 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1633 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($displayer={'Geometry'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1634 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1635 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1636 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1637 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1638 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1639 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1640 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1641 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and ($type in {'Shape' 'Group' 'Field' 'FieldStep'} or " + notGEOMShape + ") and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1643 // material properties
1644 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1645 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'}) and matMenu=false", QtxPopupMgr::VisibleRule );
1646 mgr->insert( action( GEOMOp::OpMaterialMenu ), -1, -1 );
1647 mgr->setRule( action( GEOMOp::OpMaterialMenu ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'}) and matMenu=true", QtxPopupMgr::VisibleRule );
1650 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1651 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1653 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1654 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1655 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1657 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1658 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1660 mgr->insert( separator(), -1, -1 ); // -----------
1661 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1662 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1663 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1664 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1665 mgr->insert( separator(), -1, -1 ); // -----------
1667 mgr->insert( action( GEOMOp::OpEditAnnotation ), -1, -1 ); // edit annotation
1668 mgr->setRule( action( GEOMOp::OpEditAnnotation ), clientOCC + " and annotationsCount=1", QtxPopupMgr::VisibleRule );
1669 mgr->insert( action( GEOMOp::OpDeleteAnnotation ), -1, -1 ); // delete annotation
1670 mgr->setRule( action( GEOMOp::OpDeleteAnnotation ), clientOCC + " and annotationsCount>0", QtxPopupMgr::VisibleRule );
1671 mgr->insert( separator(), -1, -1 ); // -----------
1673 //QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1674 // onlyComponent = "((type='Component') and selcount=1)",
1675 // rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1676 // types = "'Shape' 'Group' 'FieldStep'";
1678 QString canDisplay = "($displayer={'Geometry'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1679 onlyComponent = "((type='Component') and ($component={'GEOM'}) and selcount=1)",
1680 rule = canDisplay + "and ((($type in {%1} or " + notGEOMShape + ") and( %2 )) or " + onlyComponent + ")",
1681 types = "'Shape' 'Group' 'FieldStep'";
1683 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1684 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1686 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1687 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1689 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1690 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1692 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1694 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1695 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1696 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1697 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1698 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1699 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1700 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1701 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1702 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1703 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1704 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1705 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1706 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1707 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1708 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1709 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1710 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1711 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1712 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1713 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1714 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1715 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1716 mgr->insert( separator(), selectonlyId, -1);
1717 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1718 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1719 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1720 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1721 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1722 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1723 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1725 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1727 mgr->insert( separator(), -1, -1 ); // -----------
1728 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1729 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1730 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1731 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1732 mgr->insert( action( GEOMOp::OpShowAllAnnotations ), -1, -1 ); // show all annotations
1733 mgr->setRule( action( GEOMOp::OpShowAllAnnotations ), aDimensionRule.arg( "hasHiddenAnnotations" ), QtxPopupMgr::VisibleRule );
1734 mgr->insert( action( GEOMOp::OpHideAllAnnotations ), -1, -1 ); // hide all annotations
1735 mgr->setRule( action( GEOMOp::OpHideAllAnnotations ), aDimensionRule.arg( "hasVisibleAnnotations" ), QtxPopupMgr::VisibleRule );
1737 mgr->insert( separator(), -1, -1 ); // -----------
1738 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1739 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1741 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1742 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1744 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1745 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1747 mgr->insert( separator(), -1, -1 ); // -----------
1748 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1749 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1751 mgr->insert( separator(), -1, -1 ); // -----------
1752 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1753 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1755 #ifndef DISABLE_GRAPHICSVIEW
1756 mgr->insert( separator(), -1, -1 ); // -----------
1757 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1758 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1761 mgr->insert( separator(), -1, -1 ); // -----------
1762 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1763 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1765 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1767 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1769 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1770 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1771 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1774 // create plugin actions and menus
1778 //=======================================================================
1779 // function : GeometryGUI::addPluginActions()
1781 //=======================================================================
1782 void GeometryGUI::addPluginActions()
1785 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1786 if (!resMgr) return;
1788 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1789 if (!appStudy) return;
1791 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1793 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1795 int id = GEOMOp::OpLastOperationID; // TODO?
1798 GEOMUtils::PluginInfo::const_iterator it;
1799 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1800 // bind action lib and label to its ID for activateOperation() method proper work
1801 GEOMUtils::PluginData pdata = (*it);
1802 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1803 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1804 std::list<GEOMUtils::ActionData>::const_iterator ait;
1805 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1806 GEOMUtils::ActionData adata = (*ait);
1809 if ( !adata.icon.empty() )
1810 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1812 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1813 QString actionName = smenus.last();
1814 actionName = actionName.toUpper().prepend( "MEN_" );
1815 smenus.removeLast();
1817 // path to action in toolbar
1818 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1819 QString actionTool = stools.last();
1820 actionTool = actionTool.toUpper().prepend( "TOP_" );
1821 stools.removeLast();
1823 QString actionStat = adata.statusText.c_str();
1824 actionStat = actionStat.toUpper().prepend( "STB_" );
1826 createAction( id, // ~ adata.label
1827 tr( actionTool.toLatin1().constData() ),
1829 tr( actionName.toLatin1().constData() ),
1830 tr( actionStat.toLatin1().constData() ),
1831 QKeySequence( tr( adata.accel.c_str() ) ),
1832 application()->desktop(),
1834 this, SLOT( OnGUIEvent() ),
1835 QString() /*shortcutAction*/ );
1838 foreach ( QString subMenu, smenus ) {
1839 QStringList subMenuList = subMenu.split( ":" );
1840 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1841 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1842 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1844 createMenu( id, menuId, -1 );
1846 if ( !stools.isEmpty() ) {
1847 QString subTool = stools[0];
1848 subTool = subTool.toUpper().prepend( "TOOL_" );
1849 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1850 createTool(id, toolId);
1853 // add action id to map
1854 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1855 myPluginActions[id] = anAction;
1864 QString wrap(const QString& text, const QString& tag)
1865 { return QString("<%1>%2</%3>").arg(tag).arg(text).arg(tag);}
1868 //=======================================================================
1869 // function : GeometryGUI::activateModule()
1870 // purpose : Called when GEOM module is activated
1871 //=======================================================================
1872 bool GeometryGUI::activateModule( SUIT_Study* study )
1874 // Fill in: Help Panel
1875 SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( application() );
1876 app->infoPanel()->setTitle(tr("INFO_WELCOME_TO_GEOM"));
1878 int gb = app->infoPanel()->addGroup(tr("INFO_GRP_CREATE_MODEL"));
1881 items << wrap(tr("INFO_VERTICES"), "li")
1882 << wrap(tr("INFO_EDGES"), "li")
1883 << wrap(tr("INFO_WIRES"), "li")
1884 << wrap(tr("INFO_FACES"), "li")
1885 << wrap(tr("INFO_SHELLS"), "li")
1886 << wrap(tr("INFO_SOLIDS"), "li");
1887 lab = tr("INFO_BOTTOM_UP_CONSTRUCTION") + ":" + wrap(items.join(""), "ul");
1890 items << wrap(tr("INFO_BOX"), "li")
1891 << wrap(tr("INFO_CYLINDER"), "li")
1892 << wrap(tr("INFO_CONE"), "li")
1893 << wrap("...", "li");
1894 lab = lab + tr("INFO_PRIMITIVES") + ":" + wrap(items.join(""), "ul");
1897 lab = lab + tr("INFO_BOOLEANS") + "<br/>";
1898 lab = lab + tr("INFO_TRANSFORMATIONS");
1900 app->infoPanel()->addLabel(lab, gb);
1902 gb = app->infoPanel()->addGroup(tr("INFO_GRP_IMPORT_MODEL"));
1903 items << wrap("BREP", "li")
1904 << wrap("STEP", "li")
1905 << wrap("IGES", "li")
1906 << wrap("STL", "li")
1907 << wrap("XAO", "li");
1908 lab = tr("INFO_AVAILABLE_FORMATS") + ":" + wrap(items.join(""), "ul");
1911 app->infoPanel()->addLabel(lab, gb);
1914 if ( CORBA::is_nil( myComponentGeom ) )
1917 bool res = SalomeApp_Module::activateModule( study );
1921 setMenuShown( true );
1922 setToolShown( true );
1924 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1925 PyGILState_STATE gstate = PyGILState_Ensure();
1926 PyObject* pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1927 if ( !pluginsmanager ) {
1932 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1933 tr("MEN_NEW_ENTITY").toUtf8().data(),
1934 tr("GEOM_PLUGINS_OTHER").toUtf8().data());
1939 PyGILState_Release(gstate);
1940 // end of GEOM plugins loading
1942 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1943 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ), Qt::UniqueConnection );
1945 // Reset actions accelerator keys
1946 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1948 GUIMap::Iterator it;
1949 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1950 it.value()->activate( application()->desktop() );
1952 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1954 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ), Qt::UniqueConnection );
1955 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ), Qt::UniqueConnection );
1956 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ), Qt::UniqueConnection );
1958 if ( !myCreationInfoWdg )
1959 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1960 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1961 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1963 if ( !myTextTreeWdg ) {
1964 myTextTreeWdg = new GEOMGUI_TextTreeWdg( getApp() );
1965 new GEOMGUI_TextTreeSelector( myTextTreeWdg, GetAnnotationMgr(), getApp()->selectionMgr() );
1968 getApp()->insertDockWindow( myTextTreeWdg->getWinID(), myTextTreeWdg );
1969 getApp()->placeDockWindow( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
1972 SALOME_ListIO selected;
1973 sm->selectedObjects( selected );
1974 sm->clearSelected();
1976 SUIT_ViewManager* vm;
1977 ViewManagerList OCCViewManagers, VTKViewManagers;
1979 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1980 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1981 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1982 onViewManagerAdded(vm);
1984 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1985 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1986 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1987 onViewManagerAdded(vm);
1989 sm->setSelectedObjects( selected, true ); //NPAL 19674
1991 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1993 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ), Qt::UniqueConnection );
1995 // 0020836 (Basic vectors and origin)
1996 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1997 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1998 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2000 _PTR(Study) studyDS = appStudy->studyDS();
2002 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2003 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
2004 createOriginAndBaseVectors();
2009 Py_XDECREF(pluginsmanager);
2014 //=======================================================================
2015 // function : GeometryGUI::deactivateModule()
2016 // purpose : Called when GEOM module is deactivated
2017 //=======================================================================
2018 bool GeometryGUI::deactivateModule( SUIT_Study* study )
2020 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
2022 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
2024 setMenuShown( false );
2025 setToolShown( false );
2027 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
2028 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
2030 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
2032 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
2033 //disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
2034 if ( myCreationInfoWdg ) {
2035 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
2036 myCreationInfoWdg = 0;
2038 if ( myTextTreeWdg ) {
2039 getApp()->removeDockWindow( myTextTreeWdg->getWinID() );
2040 disconnect( application(), 0, myTextTreeWdg, 0 );
2044 EmitSignalCloseAllDialogs();
2046 GUIMap::Iterator it;
2047 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
2048 it.value()->deactivate();
2050 // Unset actions accelerator keys
2051 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
2053 qDeleteAll(myOCCSelectors);
2054 myOCCSelectors.clear();
2055 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
2057 qDeleteAll(myVTKSelectors);
2058 myVTKSelectors.clear();
2059 selMrg->setEnabled( true, SVTK_Viewer::Type() );
2061 return SalomeApp_Module::deactivateModule( study );
2064 //=======================================================================
2065 // function : onWindowActivated()
2066 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
2067 //=======================================================================
2068 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
2073 const bool ViewOCC = ( win->getViewManager() ? win->getViewManager()->getType() == OCCViewer_Viewer::Type() : false );
2074 //const bool ViewVTK = ( win->getViewManager() ? win->getViewManager()->getType() == SVTK_Viewer::Type() : false );
2076 // disable non-OCC viewframe menu commands
2077 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
2078 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
2079 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
2080 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
2081 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
2082 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
2083 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
2085 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
2086 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
2087 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
2088 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
2090 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
2093 void GeometryGUI::windows( QMap<int, int>& mappa ) const
2095 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
2096 mappa.insert( SalomeApp_Application::WT_InfoPanel, Qt::RightDockWidgetArea );
2097 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
2098 #ifndef DISABLE_PYCONSOLE
2099 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
2101 if ( myCreationInfoWdg )
2102 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
2103 if ( myTextTreeWdg )
2104 mappa.insert( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
2107 void GeometryGUI::viewManagers( QStringList& lst ) const
2109 lst.append( OCCViewer_Viewer::Type() );
2110 //lst.append( PV3DViewer_ViewModel::Type() );
2113 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
2115 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
2117 qDebug( "connect" );
2118 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
2119 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
2120 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
2121 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
2122 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
2123 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
2124 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
2125 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
2127 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2128 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
2130 // disable OCC selectors
2131 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
2132 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2133 while ( itOCCSel.hasNext() )
2134 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2135 sr->setEnabled(true);
2137 else if ( vm->getType() == SVTK_Viewer::Type() )
2139 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2140 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
2142 // disable VTK selectors
2143 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
2144 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2145 while ( itVTKSel.hasNext() )
2146 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2147 sr->setEnabled(true);
2151 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
2153 SUIT_ViewModel* viewer = vm->getViewModel();
2154 if ( vm->getType() == OCCViewer_Viewer::Type() )
2156 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2157 while ( itOCCSel.hasNext() )
2158 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2159 if ( sr->viewer() == viewer )
2161 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
2165 if ( vm->getType() == SVTK_Viewer::Type() )
2167 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2168 while ( itVTKSel.hasNext() )
2169 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2170 if ( sr->viewer() == viewer )
2172 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2176 SOCC_Viewer* aSOCCView = dynamic_cast<SOCC_Viewer*>(viewer);
2178 GetAnnotationMgr()->RemoveView( aSOCCView );
2182 //================================================================================
2184 * \brief Slot called when selection changed. Shows creation info of a selected object
2186 //================================================================================
2188 void GeometryGUI::updateCreationInfo()
2190 if ( myCreationInfoWdg )
2191 myCreationInfoWdg->clear();
2193 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2194 // if ( !myCreationInfoWdg->isVisible() )
2197 // look for a sole selected GEOM_Object
2198 GEOM::GEOM_BaseObject_var geomObj;
2200 SALOME_ListIO selected;
2201 getApp()->selectionMgr()->selectedObjects( selected );
2203 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2204 SALOME_ListIteratorOfListIO selIt( selected );
2205 for ( ; selIt.More(); selIt.Next() )
2207 Handle(SALOME_InteractiveObject) io = selIt.Value();
2208 if ( !io->hasEntry() ) continue;
2209 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2210 if ( !GeometryGUI::IsInGeomComponent( sobj )) continue;
2211 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2212 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2213 if ( !gobj->_is_nil() )
2215 if ( !geomObj->_is_nil() )
2216 return; // several GEOM objects selected
2220 if ( geomObj->_is_nil() ) return;
2222 // pass creation info of geomObj to myCreationInfoWdg
2224 if ( myCreationInfoWdg ) {
2226 GEOM::CreationInformationSeq_var info;
2229 info = geomObj->GetCreationInformation();
2233 myCreationInfoWdg->setInfo( info );
2237 void GeometryGUI::onAutoBringToFront()
2239 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2240 if( !isAutoBringToFront )
2243 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2244 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2247 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2248 if (!appStudy) return;
2250 GEOM_Displayer displayer;
2252 SALOME_View* window = displayer.GetActiveView();
2253 if ( !window ) return;
2255 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2257 SALOME_ListIO selected;
2258 getApp()->selectionMgr()->selectedObjects( selected );
2259 if (!myTopLevelIOList.IsEmpty())
2261 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2263 Handle( SALOME_InteractiveObject ) io = It.Value();
2264 bool isSelected = false;
2265 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2267 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2268 if( io->isSame( sel_io ) )
2271 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2273 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2274 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2279 myTopLevelIOList.Assign(selected);
2280 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2282 Handle( SALOME_InteractiveObject ) io = It.Value();
2283 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2284 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2287 displayer.UpdateViewer();
2288 GeometryGUI::Modified();
2291 void GeometryGUI::updateFieldColorScale()
2293 GEOM_Displayer aDisplayer;
2294 aDisplayer.UpdateColorScale();
2297 QString GeometryGUI::engineIOR() const
2299 if ( !CORBA::is_nil( GetGeomGen() ) )
2300 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2304 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture (int theId, int& theWidth, int& theHeight)
2306 theWidth = theHeight = 0;
2307 Handle(TColStd_HArray1OfByte) aTexture;
2309 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations();
2310 if ( !aInsOp->_is_nil() ) {
2311 CORBA::Long aWidth, aHeight;
2312 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2313 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2315 theHeight = aHeight;
2317 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2319 for ( CORBA::ULong i = 0; i < aStream->length(); i++)
2320 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2326 LightApp_Selection* GeometryGUI::createSelection() const
2328 return new GEOMGUI_Selection();
2331 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2333 SalomeApp_Module::contextMenuPopup( client, menu, title );
2335 getApp()->selectionMgr()->selectedObjects( lst );
2337 // Update submenu for predefined materials
2338 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2339 QMenu* matMenu = action( GEOMOp::OpMaterialMenu )->menu();
2341 QSignalMapper* signalMapper = new QSignalMapper( menu );
2344 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2345 if ( anApp && anApp->activeViewManager() ) {
2346 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2348 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2351 QString curModel = "";
2352 if ( v.canConvert<QString>() ) curModel = v.toString();
2354 // get list of all predefined materials
2355 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2357 foreach ( QString material, materials )
2359 QAction* a = matMenu->addAction( material );
2360 connect( a, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2361 signalMapper->setMapping( a, material );
2362 a->setCheckable( true );
2364 Material_Model aModel;
2365 aModel.fromResources( material );
2366 if ( !found && aModel.toProperties() == curModel ) {
2367 a->setChecked( true );
2371 matMenu->addSeparator();
2372 matMenu->addAction( action( GEOMOp::OpPredefMaterCustom ) );
2373 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2374 this, SLOT( OnSetMaterial( const QString & ) ) );
2377 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2378 Handle(SALOME_InteractiveObject) io = lst.First();
2379 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2380 _PTR(Study) study = appStudy->studyDS();
2381 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2383 QString aName = QString( obj->GetName().c_str() );
2384 aName.remove( QRegExp("\\s+$") );
2390 void GeometryGUI::OnSetMaterial(const QString& theName)
2392 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2396 void GeometryGUI::createPreferences()
2398 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2400 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2402 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2403 setPreferenceProperty( genGroup, "columns", 2 );
2405 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2406 LightApp_Preferences::Selector,
2407 "Geometry", "display_mode" );
2409 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2410 LightApp_Preferences::Color, "Geometry", "shading_color" );
2412 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2413 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2415 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2416 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2418 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2419 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2421 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2422 LightApp_Preferences::Color, "Geometry", "line_color" );
2424 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2425 LightApp_Preferences::Color, "Geometry", "point_color" );
2427 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2428 LightApp_Preferences::Color, "Geometry", "isos_color" );
2430 addPreference( tr( "PREF_LABEL_COLOR" ), genGroup,
2431 LightApp_Preferences::Color, "Geometry", "label_color" );
2433 addPreference( "", genGroup, LightApp_Preferences::Space );
2435 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2436 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2438 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2439 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2441 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2442 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2444 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2445 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2447 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2448 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2450 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2451 LightApp_Preferences::Selector,
2452 "Geometry", "material" );
2454 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2455 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2461 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2462 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2464 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2465 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2467 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2468 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2470 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2471 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2473 for (int i = 0; i < nb; i++) {
2474 setPreferenceProperty( wd[i], "min", 1 );
2475 setPreferenceProperty( wd[i], "max", 5 );
2478 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2479 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2481 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2482 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2484 // --------------------------------------------------------------------------
2485 // Dimensions (Measurements) preferences
2486 // --------------------------------------------------------------------------
2488 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2489 setPreferenceProperty( aDimGroupId, "columns", 2 );
2491 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2492 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2494 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2495 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2497 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2498 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2500 int aDimFontId = addPreference( tr( "PREF_DIMENSIONS_FONT" ), aDimGroupId, LightApp_Preferences::Font, "Geometry", "dimensions_font" );
2502 int f = QtxFontEdit::Family | QtxFontEdit::Size;
2503 setPreferenceProperty( aDimFontId, "features", f );
2504 setPreferenceProperty( aDimFontId, "mode", QtxFontEdit::Custom );
2506 Handle(Font_FontMgr) fmgr = Font_FontMgr::GetInstance();
2507 QString aFontFile = "";
2508 resMgr->value("resources", "GEOM", aFontFile);
2509 aFontFile = aFontFile + QDir::separator() + "Y14.5M-2009.ttf";
2510 // add enginier font into combobox
2511 /*int fontID =*/ QFontDatabase::addApplicationFont( aFontFile );
2512 Handle(Font_SystemFont) sf = new Font_SystemFont( TCollection_AsciiString("Y14.5M-2009") );
2513 sf->SetFontPath( Font_FA_Regular,
2514 TCollection_AsciiString( aFontFile.toLatin1().data() ) );
2515 // register font in OCC font manager
2516 fmgr->RegisterFont( sf, Standard_False );
2518 // get list of supported fonts by OCC
2519 QStringList anOCCFonts;
2520 TColStd_SequenceOfHAsciiString theFontsNames;
2521 fmgr->GetAvailableFontsNames( theFontsNames );
2522 for(Standard_Integer i=1; i<=theFontsNames.Length(); i++) {
2523 Handle(TCollection_HAsciiString) str = theFontsNames(i);
2524 anOCCFonts << str->ToCString();
2526 anOCCFonts.removeDuplicates();
2527 // set the supported fonts into combobox to use its only
2528 setPreferenceProperty( aDimFontId, "fonts", anOCCFonts );
2530 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2531 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2533 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2534 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2535 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2537 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2538 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2540 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2541 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2543 QStringList aListOfLengthUnits;
2544 aListOfLengthUnits << "m";
2545 aListOfLengthUnits << "cm";
2546 aListOfLengthUnits << "mm";
2547 aListOfLengthUnits << "in.";
2548 aListOfLengthUnits << "ft.";
2550 QStringList aListOfAngUnits;
2551 aListOfAngUnits << "rad";
2552 aListOfAngUnits << "deg";
2554 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2555 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2557 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2558 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2560 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2561 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2563 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2564 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2565 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2567 addPreference( tr( "PREF_DIMENSIONS_USE_TEXT3D" ), aDimGroupId,
2568 LightApp_Preferences::Bool, "Geometry", "dimensions_use_text3d" );
2570 // --------------------------------------------------------------------------
2571 // Shape annotation preferences
2572 // --------------------------------------------------------------------------
2574 const int aShapeAnnGroupId = addPreference( tr( "PREF_SHAPE_ANNOTATIONS" ), tabId );
2575 setPreferenceProperty( aShapeAnnGroupId, "columns", 2 );
2577 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_FONT_COLOR" ), aShapeAnnGroupId, LightApp_Preferences::Color, "Geometry", "shape_annotation_font_color" );
2578 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_COLOR" ), aShapeAnnGroupId, LightApp_Preferences::Color, "Geometry", "shape_annotation_line_color" );
2579 const int aShapeAnnFont =
2580 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_FONT" ), aShapeAnnGroupId, LightApp_Preferences::Font, "Geometry", "shape_annotation_font" );
2582 int aShapeAnnFontFeatures = QtxFontEdit::Family | QtxFontEdit::Size | QtxFontEdit::Bold | QtxFontEdit::Italic;
2583 setPreferenceProperty( aShapeAnnFont, "features", aShapeAnnFontFeatures );
2584 setPreferenceProperty( aShapeAnnFont, "mode", QtxFontEdit::Custom );
2585 setPreferenceProperty( aShapeAnnFont, "fonts", anOCCFonts );
2587 const int aShapeAnnLineWidth =
2588 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_WIDTH" ), aShapeAnnGroupId, LightApp_Preferences::IntSpin, "Geometry", "shape_annotation_line_width" );
2590 setPreferenceProperty( aShapeAnnLineWidth, "min", 1 );
2591 setPreferenceProperty( aShapeAnnLineWidth, "max", 5 );
2593 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_AUTOHIDE" ), aShapeAnnGroupId, LightApp_Preferences::Bool, "Geometry", "shape_annotation_autohide" );
2595 const int aShapeAnnLineStyle =
2596 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_STYLE" ), aShapeAnnGroupId, LightApp_Preferences::Selector, "Geometry", "shape_annotation_line_style" );
2598 QStringList aLineStyleList;
2599 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_SOLID") );
2600 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DASH") );
2601 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DOT") );
2602 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DOTDASH") );
2604 QList<QVariant> aLineStyleIds;
2605 aLineStyleIds.append(0);
2606 aLineStyleIds.append(1);
2607 aLineStyleIds.append(2);
2608 aLineStyleIds.append(3);
2610 setPreferenceProperty( aShapeAnnLineStyle, "strings", aLineStyleList );
2611 setPreferenceProperty( aShapeAnnLineStyle, "indexes", aLineStyleIds );
2613 // --------------------------------------------------------------------------
2614 // Isoline drawing preferences
2615 // --------------------------------------------------------------------------
2617 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2618 setPreferenceProperty( isoGroup, "columns", 2 );
2619 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2620 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2621 setPreferenceProperty( isoU, "min", 0 );
2622 setPreferenceProperty( isoU, "max", 100000 );
2623 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2624 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2625 setPreferenceProperty( isoV, "min", 0 );
2626 setPreferenceProperty( isoV, "max", 100000 );
2628 // Quantities with individual precision settings
2629 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2630 setPreferenceProperty( precGroup, "columns", 2 );
2632 const int nbQuantities = 8;
2633 int prec[nbQuantities], ii = 0;
2634 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2635 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2636 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2637 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2638 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2639 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2640 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2641 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2642 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2643 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2644 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2645 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2646 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2647 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2648 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2649 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2651 // Set property for precision value for spinboxes
2652 for ( ii = 0; ii < nbQuantities; ii++ ){
2653 setPreferenceProperty( prec[ii], "min", -14 );
2654 setPreferenceProperty( prec[ii], "max", 14 );
2655 setPreferenceProperty( prec[ii], "precision", 2 );
2658 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2659 setPreferenceProperty( VertexGroup, "columns", 2 );
2661 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2662 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2664 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2665 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2667 // Set property for default display mode
2668 QStringList aModesList;
2669 aModesList.append( tr("MEN_WIREFRAME") );
2670 aModesList.append( tr("MEN_SHADING") );
2671 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2672 aModesList.append( tr("MEN_TEXTURE") );
2674 QList<QVariant> anIndexesList;
2675 anIndexesList.append(0);
2676 anIndexesList.append(1);
2677 anIndexesList.append(2);
2678 anIndexesList.append(3);
2680 setPreferenceProperty( dispmode, "strings", aModesList );
2681 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2683 // Set property for top level display mode
2684 QStringList aTopModesList;
2685 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2686 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2687 aTopModesList.append( tr("MEN_WIREFRAME") );
2688 aTopModesList.append( tr("MEN_SHADING") );
2689 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2691 QList<QVariant> aTopIndexesList;
2692 aTopIndexesList.append(0);
2693 aTopIndexesList.append(1);
2694 aTopIndexesList.append(2);
2695 aTopIndexesList.append(3);
2696 aTopIndexesList.append(4);
2698 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2699 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2701 // Set property for step value for spinboxes
2702 setPreferenceProperty( step, "min", 1 );
2703 setPreferenceProperty( step, "max", 10000 );
2704 setPreferenceProperty( step, "precision", 3 );
2706 // Set property for trandparency value for spinboxes
2707 setPreferenceProperty( transparency, "min", 0 );
2708 setPreferenceProperty( transparency, "max", 100 );
2710 // Set property for deflection value for spinboxes
2711 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2712 setPreferenceProperty( defl, "max", 1.0 );
2713 setPreferenceProperty( defl, "step", 1.0e-04 );
2714 setPreferenceProperty( defl, "precision", 6 );
2716 // Set property for default material
2717 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2719 // Set property vertex marker type
2720 QList<QVariant> aMarkerTypeIndicesList;
2721 QList<QVariant> aMarkerTypeIconsList;
2723 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2724 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2725 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2726 aMarkerTypeIndicesList << (i-1);
2727 aMarkerTypeIconsList << pixmap;
2730 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2731 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2733 // Set property for vertex marker scale
2734 QList<QVariant> aMarkerScaleIndicesList;
2735 QStringList aMarkerScaleValuesList;
2737 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2738 aMarkerScaleIndicesList << iii;
2739 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2742 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2743 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2745 // Scalar bar for field step presentation
2746 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2747 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2749 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2750 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2751 setPreferenceProperty( sbXPosition, "min", 0 );
2752 setPreferenceProperty( sbXPosition, "max", 1 );
2753 setPreferenceProperty( sbXPosition, "step", 0.05 );
2755 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2756 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2757 setPreferenceProperty( sbYPosition, "min", 0 );
2758 setPreferenceProperty( sbYPosition, "max", 1 );
2759 setPreferenceProperty( sbYPosition, "step", 0.05 );
2761 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2762 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2763 setPreferenceProperty( sbWidth, "min", 0 );
2764 setPreferenceProperty( sbWidth, "max", 1 );
2765 setPreferenceProperty( sbWidth, "step", 0.05 );
2767 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2768 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2769 setPreferenceProperty( sbHeight, "min", 0 );
2770 setPreferenceProperty( sbHeight, "max", 1 );
2771 setPreferenceProperty( sbHeight, "step", 0.05 );
2773 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2774 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2775 setPreferenceProperty( sbTextHeight, "min", 6 );
2776 setPreferenceProperty( sbTextHeight, "max", 24 );
2777 setPreferenceProperty( sbTextHeight, "step", 1 );
2779 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2780 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2781 setPreferenceProperty( sbNbIntervals, "min", 2 );
2782 setPreferenceProperty( sbNbIntervals, "max", 64 );
2783 setPreferenceProperty( sbNbIntervals, "step", 1 );
2785 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2786 setPreferenceProperty( originGroup, "columns", 2 );
2788 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2789 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2790 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2791 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2793 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2794 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2796 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2797 setPreferenceProperty( operationsGroup, "columns", 2 );
2799 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2800 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2802 addPreference( tr( "PREF_HIDE_INPUT_OBJECT" ), operationsGroup,
2803 LightApp_Preferences::Bool, "Geometry", "hide_input_object" );
2805 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2807 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2809 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2810 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2812 QStringList aHierarchyTypeList;
2813 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2814 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2815 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2817 QList<QVariant> aHierarchyTypeIndexesList;
2818 aHierarchyTypeIndexesList.append(0);
2819 aHierarchyTypeIndexesList.append(1);
2820 aHierarchyTypeIndexesList.append(2);
2822 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2823 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2825 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2826 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2828 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2830 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2831 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2833 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2834 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2835 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2836 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2837 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2838 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2839 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2840 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2842 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2843 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2844 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2845 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2846 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2847 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2854 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2856 if (section == "Geometry") {
2857 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2858 if (param == QString("SettingsGeomStep")) {
2859 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2860 EmitSignalDefaultStepValueChanged(spin_step);
2862 else if (param == QString("toplevel_color")) {
2863 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2864 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2866 else if (param == QString("toplevel_dm")) {
2867 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2869 else if (param == QString("scalar_bar_x_position") ||
2870 param == QString("scalar_bar_y_position") ||
2871 param == QString("scalar_bar_width") ||
2872 param == QString("scalar_bar_height") ||
2873 param == QString("scalar_bar_text_height") ||
2874 param == QString("scalar_bar_nb_intervals")) {
2875 updateFieldColorScale();
2877 else if ( param == QString("dimensions_color") ||
2878 param == QString("dimensions_line_width") ||
2879 param == QString("dimensions_font") ||
2880 param == QString("dimensions_arrow_length") ||
2881 param == QString("dimensions_show_units") ||
2882 param == QString("dimensions_length_units") ||
2883 param == QString("dimensions_angle_units") ||
2884 param == QString("dimensions_use_text3d") ||
2885 param == QString("shape_annotation_font_color") ||
2886 param == QString("shape_annotation_line_color") ||
2887 param == QString("shape_annotation_font") ||
2888 param == QString("shape_annotation_line_width") ||
2889 param == QString("shape_annotation_autohide") ||
2890 param == QString("shape_annotation_line_style") ||
2891 param == QString("shape_annotation_line_style") ||
2892 param == QString("label_color") )
2894 SalomeApp_Application* anApp = getApp();
2900 GEOM_Displayer aDisplayer;
2902 ViewManagerList aVMs;
2903 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2904 ViewManagerList::Iterator anIt = aVMs.begin();
2905 for ( ; anIt != aVMs.end(); ++anIt )
2907 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2913 SALOME_ListIO aVisible;
2914 aViewer->GetVisible( aVisible );
2916 GEOMGUI_AnnotationMgr* anAnnotationMgr = GetAnnotationMgr();
2917 if ( anAnnotationMgr ) {
2918 SALOME_ListIteratorOfListIO anIter( aVisible );
2919 while ( anIter.More() ) {
2920 if ( anAnnotationMgr->isAnnotationEntry( anIter.Value()->getEntry() ) ) {
2921 aVisible.Remove( anIter );
2929 aDisplayer.Redisplay( aVisible, false, aViewer );
2931 if ( param == QString( "label_color" ) ) {
2932 ViewManagerList aVMsVTK;
2933 anApp->viewManagers( SVTK_Viewer::Type(), aVMsVTK );
2934 ViewManagerList::Iterator anIt = aVMsVTK.begin();
2935 for ( ; anIt != aVMsVTK.end(); ++anIt )
2937 SVTK_Viewer* aViewer = dynamic_cast<SVTK_Viewer*>( (*anIt)->getViewModel() );
2942 SALOME_ListIO aVisible;
2943 aViewer->GetVisible( aVisible );
2944 aDisplayer.Redisplay( aVisible, false, aViewer );
2947 aDisplayer.UpdateViewer();
2949 else if ( param.startsWith( "dependency_tree") )
2950 emit SignalDependencyTreeParamChanged( section, param );
2954 LightApp_Displayer* GeometryGUI::displayer()
2957 myDisplayer = new GEOM_Displayer();
2961 void GeometryGUI::setLocalSelectionMode(const int mode)
2963 myLocalSelectionMode = mode;
2966 int GeometryGUI::getLocalSelectionMode() const
2968 return myLocalSelectionMode;
2971 const char gSeparator = '_'; // character used to separate parameter names
2972 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2975 * \brief Store visual parameters
2977 * This method is called just before the study document is saved.
2978 * Store visual parameters in AttributeParameter attribute(s)
2980 void GeometryGUI::storeVisualParameters (int savePoint)
2982 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2983 if ( !appStudy || !appStudy->studyDS() )
2986 _PTR(Study) studyDS = appStudy->studyDS();
2988 // componentName is used for encoding of entries when storing them in IParameters
2989 std::string componentName = myComponentGeom->ComponentDataType();
2990 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2991 //if (!aSComponent) return;
2994 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2995 componentName.c_str(),
2997 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2999 QSet<QString> anEntriesToStoreShared;
3000 QList<SUIT_ViewManager*> lst;
3001 QList<SUIT_ViewManager*>::Iterator it;
3003 GEOMGUI_AnnotationMgr* aAnnotationMgr = GetAnnotationMgr();
3005 // main cycle to store parameters of displayed objects
3007 getApp()->viewManagers(lst);
3008 for (it = lst.begin(); it != lst.end(); it++) {
3009 SUIT_ViewManager* vman = *it;
3010 QString vType = vman->getType();
3011 SUIT_ViewModel* vmodel = vman->getViewModel();
3012 SALOME_View* aView = dynamic_cast<SALOME_View*>(vmodel);
3014 int aMgrId = vman->getGlobalId();
3015 // saving VTK actors properties
3016 QVector<SUIT_ViewWindow*> views = vman->getViews();
3017 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
3018 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
3019 ObjMap::ConstIterator o_it = anObjects.begin();
3020 for (; o_it != anObjects.end(); o_it++) {
3021 const PropMap& aProps = o_it.value();
3023 //Check that object exists in the study
3024 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toUtf8().data() ) );
3025 if ( !obj || !(aProps.count() > 0))
3027 // entry is "encoded" = it does NOT contain component address, since it is a
3028 // subject to change on next component loading
3030 std::string entry = ip->encodeEntry(o_it.key().toUtf8().data(), componentName);
3032 _PTR(GenericAttribute) anAttr;
3033 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
3036 // remember entry of object to store shared GEOM properties
3037 // (e.g. dimension properties).
3038 if ( vType == OCCViewer_Viewer::Type() )
3040 anEntriesToStoreShared.insert( o_it.key() );
3043 QString param, occParam = vType;
3044 occParam += GEOM::sectionSeparator();
3045 occParam += QString::number(aMgrId);
3046 occParam += GEOM::sectionSeparator();
3048 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
3049 param = occParam + GEOM::propertyName( GEOM::Visibility );
3050 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
3053 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
3054 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
3055 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
3058 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
3059 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
3061 val << QString::number(c.redF());
3062 val << QString::number(c.greenF());
3063 val << QString::number(c.blueF());
3064 param = occParam + GEOM::propertyName( GEOM::Color );
3065 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
3068 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
3069 param = occParam + GEOM::propertyName( GEOM::Texture );
3070 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
3073 if (vType == SVTK_Viewer::Type()) {
3074 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
3075 param = occParam + GEOM::propertyName( GEOM::Opacity );
3076 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
3078 } else if (vType == SOCC_Viewer::Type()) {
3079 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
3080 param = occParam + GEOM::propertyName( GEOM::Transparency );
3081 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
3084 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
3085 param = occParam + GEOM::propertyName( GEOM::TopLevel );
3086 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
3090 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
3091 param = occParam + GEOM::propertyName( GEOM::NbIsos );
3092 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
3095 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
3096 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
3097 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
3100 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
3101 param = occParam + GEOM::propertyName( GEOM::Vertices );
3102 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
3105 if (aProps.contains(GEOM::propertyName( GEOM::ShowName ))) {
3106 param = occParam + GEOM::propertyName( GEOM::ShowName );
3107 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::ShowName )).toString().toStdString());
3110 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
3111 param = occParam + GEOM::propertyName( GEOM::Deflection );
3112 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
3115 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
3116 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
3117 param = occParam + GEOM::propertyName( GEOM::PointMarker );
3118 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
3121 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
3122 param = occParam + GEOM::propertyName( GEOM::Material );
3123 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
3126 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
3127 param = occParam + GEOM::propertyName( GEOM::LineWidth );
3128 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
3131 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
3132 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
3133 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
3136 if ( vType == SOCC_Viewer::Type() && aAnnotationMgr ) {
3137 std::string anAnnotationInfo = GetAnnotationMgr()->getDisplayedIndicesInfo(
3138 o_it.key().toUtf8().data(), dynamic_cast<SOCC_Viewer*>(aView) ).toStdString();
3139 if (!anAnnotationInfo.empty()) {
3140 param = occParam + "ShapeAnnotationVisibleItems";
3141 ip->setParameter(entry, param.toStdString(), anAnnotationInfo);
3144 } // object iterator
3146 } // for (viewManagers)
3148 // store shape annotation and dimension attributes of objects:
3149 // since the displayed object always persists in property map, we remember the object entries
3150 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
3151 const QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
3152 const QString aAnnotationParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::ShapeAnnotations );
3153 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
3154 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
3156 std::string aStudyEntry = (*aEntryIt).toUtf8().data();
3157 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName );
3159 // store dimension parameters
3160 GEOMGUI_DimensionProperty aDimensions( aStudyEntry );
3161 if ( aDimensions.GetNumber() != 0 ) {
3162 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toUtf8().data() );
3165 _PTR(SObject) aObj( studyDS->FindObjectID( aStudyEntry ) );
3166 const Handle(GEOMGUI_AnnotationAttrs) aShapeAnnAttr = GEOMGUI_AnnotationAttrs::FindAttributes( aObj );
3167 if ( !aShapeAnnAttr.IsNull() ) {
3168 ip->setParameter( aStoreEntry, aAnnotationParam.toStdString(), aShapeAnnAttr->ExportAsPropertyString().toUtf8().data() );
3174 * \brief Restore visual parameters
3176 * This method is called after the study document is opened.
3177 * Restore visual parameters from AttributeParameter attribute(s)
3179 void GeometryGUI::restoreVisualParameters (int savePoint)
3181 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
3182 if (!appStudy || !appStudy->studyDS())
3184 _PTR(Study) studyDS = appStudy->studyDS();
3186 // componentName is used for encoding of entries when storing them in IParameters
3187 std::string componentName = myComponentGeom->ComponentDataType();
3188 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
3189 //if (!aSComponent) return;
3192 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
3193 componentName.c_str(),
3195 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
3197 std::vector<std::string> entries = ip->getEntries();
3199 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
3201 // entry is a normal entry - it should be "decoded" (setting base address of component)
3202 QString entry (ip->decodeEntry(*entIt).c_str());
3204 // Check that the entry corresponds to a real object in the Study
3205 // as the object may be deleted or modified after the visual state is saved.
3206 _PTR(SObject) so = studyDS->FindObjectID(entry.toUtf8().data());
3207 if (!so) continue; //Skip the not existent entry
3209 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
3210 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
3212 std::vector<std::string>::iterator namesIt = paramNames.begin();
3213 std::vector<std::string>::iterator valuesIt = paramValues.begin();
3215 // actors are stored in a map after displaying of them for
3216 // quicker access in the future: map < viewID to actor >
3217 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
3218 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
3220 QString viewerTypStr;
3221 QString viewIndexStr;
3223 QVector<PropMap> aListOfMap;
3225 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
3227 // visual parameters are stored in strings as follows:
3228 // 1) ViewerType_ViewIndex_ParamName
3229 // 2) ViewerType_ParamName (shared for GEOM module)
3230 // '_' is used as separator and should not be used in viewer type or parameter names.
3231 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
3233 bool isShared = lst.size() == 2;
3234 bool isViewer = lst.size() == 3;
3235 if ( !isShared && !isViewer )
3240 // shared visual parameters
3243 QString aParamNameStr( lst[1] );
3244 QString aValuesStr( (*valuesIt).c_str() );
3246 // shared dimension properties are stored as attribute
3247 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
3249 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
3250 aDimensionProp.SaveToAttribute( entry.toUtf8().data() );
3252 else if ( aParamNameStr == GEOM::propertyName( GEOM::ShapeAnnotations ) )
3254 Handle(GEOMGUI_AnnotationAttrs) anAttr =
3255 GEOMGUI_AnnotationAttrs::FindOrCreateAttributes( so, appStudy );
3257 anAttr->ImportFromPropertyString( aValuesStr );
3263 // per view visual parameters
3264 viewerTypStr = lst[0];
3265 viewIndexStr = lst[1];
3266 QString paramNameStr = lst[2];
3269 viewIndex = viewIndexStr.toUInt(&ok);
3270 if (!ok) // bad conversion of view index to integer
3273 if ((viewIndex + 1) > aListOfMap.count()) {
3274 aListOfMap.resize(viewIndex + 1);
3277 QString val((*valuesIt).c_str());
3278 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
3279 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
3280 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
3281 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
3282 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
3283 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
3284 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
3285 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
3286 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
3287 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
3288 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
3289 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
3290 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
3291 QStringList rgb = val.split(GEOM::subSectionSeparator());
3292 if (rgb.count() == 3) {
3293 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
3294 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
3296 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
3297 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
3298 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
3299 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
3300 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
3301 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
3302 } else if (paramNameStr == GEOM::propertyName( GEOM::ShowName )) {
3303 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::ShowName ), val == "true" || val == "1");
3304 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3305 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3306 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3307 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3308 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3309 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3310 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3311 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3312 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3313 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3314 } else if (paramNameStr == "ShapeAnnotationVisibleItems") {
3315 aListOfMap[viewIndex].insert( "ShapeAnnotationVisibleItems", val);
3318 } // for names/parameters iterator
3320 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3322 for (int index = 0; index < aListOfMap.count(); index++) {
3323 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
3325 //Get Visibility property of the current PropMap
3326 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3327 SUIT_ViewManager* vman = lst.at(index);
3328 SUIT_ViewModel* vmodel = vman->getViewModel();
3329 SALOME_View* aView = dynamic_cast<SALOME_View*>(vmodel);
3330 displayer()->Display(entry, true, aView);
3332 if ( vmodel->getType() == SOCC_Viewer::Type() ) {
3333 PropMap& aProps = aListOfMap[index];
3334 if ( aProps.contains( "ShapeAnnotationVisibleItems" ) ) {
3335 SOCC_Viewer* aSOCCView = dynamic_cast<SOCC_Viewer*>( aView );
3336 GetAnnotationMgr()->setDisplayedIndicesInfo( entry, aSOCCView, aProps["ShapeAnnotationVisibleItems"].toString() );
3341 } // for entries iterator
3343 // update all VTK and OCC views
3344 QList<SUIT_ViewManager*> lst;
3345 getApp()->viewManagers(lst);
3346 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3347 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3350 if (vmodel->getType() == SVTK_Viewer::Type()) {
3351 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3352 vtkView->getRenderer()->ResetCameraClippingRange();
3355 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3356 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3357 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3363 if ( myTextTreeWdg ) {
3364 myTextTreeWdg->updateTree();
3368 // Compute current name mode of the viewer
3369 void UpdateNameMode( SalomeApp_Application* app )
3371 bool isMode = false;
3372 SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() );
3373 SUIT_ViewWindow* viewWindow = app->desktop()->activeWindow();
3374 GEOM_Displayer displayer;
3375 int aMgrId = viewWindow->getViewManager()->getGlobalId();
3377 SALOME_View* window = displayer.GetActiveView();
3378 if ( !window ) return;
3380 SALOME_ListIO anIOlst;
3381 window->GetVisible( anIOlst );
3383 for ( SALOME_ListIteratorOfListIO It( anIOlst ); It.More(); It.Next() ) {
3384 Handle( SALOME_InteractiveObject ) io = It.Value();
3385 QVariant v = aStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::ShowName ), QVariant() );
3386 bool isIONameMode = v.isValid() ? v.toBool() : false;
3390 viewWindow->setProperty( "NameMode", isMode );
3393 void GeometryGUI::onViewAboutToShow()
3395 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3396 QAction* a = action( GEOMOp::OpSwitchVectors );
3397 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3398 QAction* aNameAction = action( GEOMOp::OpSwitchName );
3400 a->setEnabled(true);
3401 bool vmode = window->property("VectorsMode").toBool();
3402 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3403 aVerticesAction->setEnabled(true);
3404 vmode = window->property("VerticesMode").toBool();
3405 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3406 UpdateNameMode( getApp() );
3407 aNameAction->setEnabled(true);
3408 vmode = window->property("NameMode").toBool();
3409 aNameAction->setText ( vmode == 1 ? tr( "MEN_NAME_MODE_OFF" ) : tr("MEN_NAME_MODE_ON") );
3411 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3412 a->setEnabled(false);
3413 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3414 aVerticesAction->setEnabled(false);
3415 aNameAction->setText ( tr("MEN_NAME_MODE_ON") );
3416 aNameAction->setEnabled(false);
3421 \brief Return action by id
3422 \param id identifier of the action
3425 QAction* GeometryGUI::getAction(const int id) {
3430 \brief GEOM module message handler
3432 This method can be re-implemented in the subclasses.
3433 This is a GEOM module message handler.
3435 \param msg the message received.
3437 void GeometryGUI::message(const QString& msg)
3440 QStringList data = msg.split("/");
3441 const int nbStrings = data.count();
3443 if (nbStrings > 0) {
3444 if (data[0] == "modified") {
3446 QString anIOR = nbStrings > 1 ? data[1] : QString();
3448 if ( anIOR.isEmpty() ) {
3452 // Get the geom object.
3453 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3455 // Clear the shape buffer
3456 GeometryGUI::ClearShapeBuffer (anObj);
3462 \brief Clears the shape buffer.
3464 This is a static method. It clears the shape buffer.
3466 \param theObj the object
3468 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3470 if ( CORBA::is_nil( theObj ) )
3473 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3474 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3475 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3477 SalomeApp_Application* app =
3478 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3479 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3484 _PTR(Study) aStudy = appStudy->studyDS();
3489 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3493 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3494 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3495 _PTR(GenericAttribute) anAttr;
3496 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3497 _PTR(AttributeIOR) anIOR ( anAttr );
3498 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3499 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3505 \brief Returns the object from IOR.
3507 This is a static method. It returns the object from its IOR.
3509 \param IOR object IOR
3510 \return GEOM object.
3512 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3514 GEOM::GEOM_Object_var geomObj;
3515 if ( !IOR.isEmpty() ) {
3516 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3517 ( IOR.toLatin1().constData() );
3518 if ( !CORBA::is_nil( corbaObj ) )
3519 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3521 return geomObj._retn();
3525 \brief Returns IOR of the object.
3527 This is a static method. It returns the object's IOR.
3529 \param object the GEOM object.
3530 \return object's IOR.
3532 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3535 if ( !CORBA::is_nil( object ) ) {
3536 CORBA::String_var anIOR =
3537 SalomeApp_Application::orb()->object_to_string( object );
3544 \brief Check if this object is can't be renamed in place
3546 This method can be re-implemented in the subclasses.
3547 Return true in case if object isn't reference or component (module root).
3549 \param entry column id
3550 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3552 bool GeometryGUI::renameAllowed( const QString& entry) const {
3554 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3555 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3556 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3558 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3562 Rename object by entry.
3563 \param entry entry of the object
3564 \param name new name of the object
3565 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3567 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3569 bool result = false;
3571 SalomeApp_Application* app =
3572 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3573 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3578 _PTR(Study) aStudy = appStudy->studyDS();
3583 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3585 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3589 _PTR(SObject) obj ( aStudy->FindObjectID(qUtf8Printable(entry)) );
3590 _PTR(GenericAttribute) anAttr;
3592 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3593 _PTR(AttributeName) aName (anAttr);
3595 aName->SetValue( name.toUtf8().data() ); // rename the SObject
3596 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3597 if (!CORBA::is_nil(anObj)) {
3598 anObj->SetName( name.toUtf8().data() ); // Rename the corresponding GEOM_Object
3599 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3600 emit SignalTextTreeRenameObject( entry );
3608 void GeometryGUI::updateMaterials()
3610 LightApp_Preferences* pref = preferences();
3612 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3613 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3614 if ( !materials.contains( currentMaterial ) )
3615 // user material set as default in the preferences, might be removed
3616 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3618 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3620 setPreferenceProperty( prefItem->id(),
3621 "strings", materials );
3622 prefItem->retrieve();
3628 \brief Check if the module allows "drag" operation of its objects.
3630 Overloaded from LightApp_Module class.
3632 This function is a part of the general drag-n-drop mechanism.
3633 The goal of this function is to check data object passed as a parameter
3634 and decide if it can be dragged or no.
3636 \param what data object being tested for drag operation
3637 \return \c true if module allows dragging of the specified object
3638 \sa isDropAccepted(), dropObjects()
3640 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3642 // we allow dragging object under root and object from folder
3643 int aLevel = what->level();
3644 bool anObjectInFolder = false;
3646 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3648 _PTR(SObject) aSO = dataObj->object();
3650 _PTR(GenericAttribute) anAttr;
3651 _PTR(SObject) aFatherSO = SalomeApp_Application::getStudy()->GetUseCaseBuilder()->GetFather( aSO );
3652 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3653 _PTR(AttributeLocalID) aLocalID( anAttr );
3654 anObjectInFolder = aLocalID->Value() == 999;
3659 return aLevel == 2 || anObjectInFolder;
3663 \brief Check if the module allows "drop" operation on the given object.
3665 Overloaded from LightApp_Module class.
3667 This function is a part of the general drag-n-drop mechanism.
3668 The goal of this function is to check data object passed as a parameter
3669 and decide if it can be used as a target for the "drop" operation.
3670 The processing of the drop operation itself is done in the dropObjects() function.
3672 \param where target data object
3673 \return \c true if module supports dropping on the \a where data object
3674 \sa isDraggable(), dropObjects()
3676 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3678 // we allow dropping into folder and top-level GEOM object
3679 int aLevel = where->level();
3680 bool isFolder = false;
3682 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3684 _PTR(SObject) aSO = dataObj->object();
3686 _PTR(GenericAttribute) anAttr;
3687 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3688 _PTR(AttributeLocalID) aLocalID( anAttr );
3689 isFolder = aLocalID->Value() == 999;
3694 return aLevel == 1 || isFolder;
3698 \brief Complete drag-n-drop operation.
3700 Overloaded from LightApp_Module class.
3702 This function is a part of the general drag-n-drop mechanism.
3703 Its goal is to handle dropping of the objects being dragged according
3704 to the chosen operation (move). The dropping is performed in the
3705 context of the parent data object \a where and the \a row (position in the
3706 children index) at which the data should be dropped. If \a row is equal to -1,
3707 this means that objects are added to the end of the children list.
3709 \param what objects being dropped
3710 \param where target data object
3711 \param row child index at which the drop operation is performed
3712 \param action drag-n-drop operation (Qt::DropAction) - move
3714 \sa isDraggable(), isDropAccepted()
3716 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3717 const int row, Qt::DropAction action )
3719 if (action != Qt::CopyAction && action != Qt::MoveAction)
3720 return; // unsupported action
3722 // get parent object
3723 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3724 if ( !dataObj ) return; // wrong parent
3725 _PTR(SObject) parentObj = dataObj->object();
3727 // Find the current Study and StudyBuilder
3728 _PTR(Study) aStudy = SalomeApp_Application::getStudy();
3729 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3730 // collect all parents of the target node
3731 QStringList parentIDs;
3732 _PTR(SObject) parent = parentObj;
3733 while( !parent->IsNull() ) {
3734 parentIDs << parent->GetID().c_str();
3735 parent = aUseCaseBuilder->GetFather(parent);
3738 // collect objects being dropped
3739 GEOM::object_list_var objects = new GEOM::object_list();
3740 objects->length( what.count() );
3742 for ( int i = 0; i < what.count(); i++ ) {
3743 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3744 if ( !dataObj ) continue; // skip wrong objects
3745 _PTR(SObject) sobj = dataObj->object();
3746 // check that dropped object is not a parent of target object
3747 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3748 return; // it's not allowed to move node into it's child
3750 objects[i] = _CAST(SObject, sobj)->GetSObject();
3753 objects->length( count );
3755 // call engine function
3756 GetGeomGen()->Move( objects.in(), // what
3757 _CAST(SObject, parentObj)->GetSObject(), // where
3760 // update Object browser
3761 getApp()->updateObjectBrowser( false );
3764 void GeometryGUI::emitDimensionsUpdated( QString entry )
3766 emit DimensionsUpdated( entry );
3769 void GeometryGUI::emitAnnotationsUpdated( QString entry )
3771 emit SignalAnnotationsUpdated( entry );