1 // Copyright (C) 2007-2020 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : GeometryGUI.cxx
23 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
25 #include <Standard_math.hxx> // E.A. must be included before Python.h to fix compilation on windows
27 #undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
30 #include "GeometryGUI.h"
31 #include "GeometryGUI_Operations.h"
32 #include "GEOMPluginGUI.h"
33 #include "GEOMGUI_OCCSelector.h"
34 #include "GEOMGUI_Selection.h"
35 #include "GEOMGUI_CreationInfoWdg.h"
36 #include "GEOMGUI_TextTreeWdg.h"
37 #include "GEOMGUI_DimensionProperty.h"
38 #include "GEOM_Constants.h"
39 #include "GEOM_Displayer.h"
40 #include "GEOM_AISShape.hxx"
41 #include "GEOMUtils_XmlHandler.hxx"
42 #include "GEOMGUI_AnnotationMgr.h"
43 #include "GEOMGUI_TextTreeSelector.h"
45 #include "GEOM_Actor.h"
47 #include <Material_ResourceMgr.h>
48 #include <Material_Model.h>
50 #include <Basics_OCCTVersion.hxx>
52 #include <SUIT_Desktop.h>
53 #include <SUIT_MessageBox.h>
54 #include <SUIT_ResourceMgr.h>
55 #include <SUIT_Session.h>
56 #include <SUIT_ViewManager.h>
58 #include <OCCViewer_ViewWindow.h>
59 #include <OCCViewer_ViewPort3d.h>
60 #include <OCCViewer_ViewModel.h>
61 #include <OCCViewer_ViewManager.h>
63 #include <SOCC_ViewModel.h>
64 #include <SOCC_ViewWindow.h>
66 #include <SVTK_ViewWindow.h>
67 #include <SVTK_RenderWindowInteractor.h>
68 #include <SVTK_InteractorStyle.h>
69 #include <SVTK_ViewModel.h>
71 #ifndef DISABLE_GRAPHICSVIEW
72 #include <GraphicsView_Viewer.h>
75 #include <SalomeApp_Application.h>
76 #include <SalomeApp_DataObject.h>
77 #include <SalomeApp_Study.h>
78 #include <SalomeApp_Tools.h>
80 #include <LightApp_SelectionMgr.h>
81 #include <LightApp_VTKSelector.h>
82 #include <LightApp_DataObject.h>
83 #include <LightApp_Preferences.h>
85 #include <SALOME_LifeCycleCORBA.hxx>
86 #include <SALOME_ListIO.hxx>
88 #include <SALOMEDSClient_ClientFactory.hxx>
89 #include <SALOMEDSClient_IParameters.hxx>
91 #include <SALOMEDS_SObject.hxx>
93 #include <QtxFontEdit.h>
94 #include <QtxInfoPanel.h>
105 #include <QSignalMapper>
106 #include <QFontDatabase>
108 #include <AIS_ListOfInteractive.hxx>
109 #include <AIS_ListIteratorOfListOfInteractive.hxx>
110 #include <Prs3d_Drawer.hxx>
111 #include <Prs3d_IsoAspect.hxx>
112 #include <Aspect_TypeOfMarker.hxx>
113 #include <OSD_SharedLibrary.hxx>
114 #include <NCollection_DataMap.hxx>
116 #include <TColStd_HArray1OfByte.hxx>
117 #include <TColStd_SequenceOfHAsciiString.hxx>
119 #include <utilities.h>
121 #include <vtkCamera.h>
122 #include <vtkRenderer.h>
124 #include <Standard_Failure.hxx>
125 #include <Standard_ErrorHandler.hxx>
127 #include <Font_SystemFont.hxx>
128 #include <Font_FontMgr.hxx>
129 #include <TCollection_HAsciiString.hxx>
131 #include "GEOM_version.h"
132 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
135 Standard_EXPORT CAM_Module* createModule() {
136 return new GeometryGUI();
139 Standard_EXPORT char* getModuleVersion() {
140 return (char*)GEOM_VERSION_STR;
144 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
146 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
148 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
149 if (CORBA::is_nil(myComponentGeom))
151 return GeometryGUI::myComponentGeom;
154 bool GeometryGUI::InitGeomGen()
157 if ( CORBA::is_nil( myComponentGeom ) ) return false;
161 //=======================================================================
162 // function : ClientSObjectToObject
164 //=======================================================================
165 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
167 _PTR(GenericAttribute) anAttr;
168 CORBA::Object_var anObj;
170 std::string aValue = theSObject->GetIOR();
171 if (strcmp(aValue.c_str(), "") != 0) {
172 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
173 anObj = anORB->string_to_object(aValue.c_str());
176 INFOS("ClientSObjectToObject - Unknown exception has occurred!!!");
178 return anObj._retn();
180 //=================================================================================
181 // function : IsInGeomComponent
182 // purpose : Check if an SObject is under GEOM component
183 //=================================================================================
184 bool GeometryGUI::IsInGeomComponent( _PTR(SObject) sobject )
187 if ( _PTR(SComponent) aComp = sobject->GetFatherComponent() )
188 return aComp->ComponentDataType() == "GEOM";
192 //=======================================================================
193 // function : GetStudy
195 //=======================================================================
196 SALOMEDS::Study_var GeometryGUI::getStudyServant()
198 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
199 CORBA::Object_var aStudyObject = aNamingService->Resolve("/Study");
200 SALOMEDS::Study_var aStudy = SALOMEDS::Study::_narrow(aStudyObject);
201 return aStudy._retn();
204 void GeometryGUI::Modified (bool theIsUpdateActions)
206 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
207 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
208 appStudy->Modified();
209 if ( theIsUpdateActions )
210 app->updateActions();
215 //=======================================================================
216 // function : GeometryGUI::GeometryGUI()
217 // purpose : Constructor
218 //=======================================================================
219 GeometryGUI::GeometryGUI() :
220 SalomeApp_Module( "GEOM" ),
223 if ( CORBA::is_nil( myComponentGeom ) )
225 Engines::EngineComponent_var comp =
226 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
227 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
230 myActiveDialogBox = 0;
232 gp_Pnt origin = gp_Pnt(0., 0., 0.);
233 gp_Dir direction = gp_Dir(0., 0., 1.);
234 myWorkingPlane = gp_Ax3(origin, direction);
237 myLocalSelectionMode = GEOM_ALLOBJECTS;
239 myCreationInfoWdg = 0;
243 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ), Qt::UniqueConnection );
245 Q_INIT_RESOURCE( GEOMGUI );
248 //=======================================================================
249 // function : GeometryGUI::~GeometryGUI()
250 // purpose : Destructor
251 //=======================================================================
252 GeometryGUI::~GeometryGUI()
254 while (!myOCCSelectors.isEmpty())
255 delete myOCCSelectors.takeFirst();
257 while (!myVTKSelectors.isEmpty())
258 delete myVTKSelectors.takeFirst();
260 qDeleteAll(myGUIMap);
263 //=======================================================================
264 // function : GeometryGUI::getLibrary()
265 // purpose : get or load GUI library by name [ internal ]
266 //=======================================================================
267 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
268 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
270 if ( !myGUIMap.contains( libraryName ) ) {
271 // try to load library if it is not loaded yet
273 QString dirs = Qtx::getenv( "PATH" );
274 #elif defined(__APPLE__)
275 QString dirs = Qtx::getenv( "DYLD_LIBRARY_PATH" );
277 QString dirs = Qtx::getenv( "LD_LIBRARY_PATH" );
285 if ( !dirs.isEmpty() ) {
286 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
287 QListIterator<QString> it( dirList ); it.toBack();
288 while ( it.hasPrevious() ) {
289 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
291 OSD_SharedLibrary aSharedLibrary( fi.fileName().toUtf8().constData() );
292 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
294 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
295 continue; // continue search further
297 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
298 if ( osdF != NULL ) {
299 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
300 GEOMGUI* libGUI = (*func)( this );
302 myGUIMap[ libraryName ] = libGUI;
303 break; // found and loaded!
310 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
313 //=======================================================================
314 // function : GeometryGUI::getPluginLibrary()
315 // purpose : get or load GUI Plugin library by name [ internal ]
316 //=======================================================================
317 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
318 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
320 if ( !myGUIMap.contains( libraryName ) ) {
321 // try to load library if it is not loaded yet
324 QString dirs = Qtx::getenv( "PATH" );
325 #elif defined(__APPLE__)
326 QString dirs = Qtx::getenv( "DYLD_LIBRARY_PATH" );
328 QString dirs = Qtx::getenv( "LD_LIBRARY_PATH" );
336 if ( !dirs.isEmpty() ) {
337 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
338 QListIterator<QString> it( dirList ); it.toBack();
339 while ( it.hasPrevious() ) {
340 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
342 OSD_SharedLibrary aSharedLibrary( fi.fileName().toUtf8().constData() );
343 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
345 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
346 continue; // continue search further
348 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
349 if ( osdF != NULL ) {
350 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
351 GEOMPluginGUI* libGUI = (*func)( this );
353 myGUIMap[ libraryName ] = libGUI;
354 break; // found and loaded!
361 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
364 //=======================================================================
365 // function : GeometryGUI::ActiveWorkingPlane()
366 // purpose : Activate Working Plane View
367 //=======================================================================
368 void GeometryGUI::ActiveWorkingPlane()
370 gp_Dir DZ = myWorkingPlane.Direction();
371 gp_Dir DY = myWorkingPlane.YDirection();
373 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
374 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
375 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
378 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
380 Handle(V3d_View) view3d = vw->getViewPort()->getView();
382 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
383 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
387 else if ( ViewVTK ) {
388 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
390 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
392 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
393 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
394 camera->SetFocalPoint(0,0,0);
401 //=======================================================================
402 // function : GeometryGUI::SetActiveDialogBox()
403 // purpose : Set active dialog box
404 //=======================================================================
405 GEOMGUI_AnnotationMgr* GeometryGUI::GetAnnotationMgr()
407 if ( !myAnnotationMgr )
408 myAnnotationMgr = new GEOMGUI_AnnotationMgr( getApp() );
409 return myAnnotationMgr;
412 //=======================================================================
413 // function : GeometryGUI::SetActiveDialogBox()
414 // purpose : Set active dialog box
415 //=======================================================================
416 GEOMGUI_TextTreeWdg* GeometryGUI::GetTextTreeWdg() const
418 return myTextTreeWdg;
421 //=======================================================================
422 // function : GeometryGUI::SetActiveDialogBox()
423 // purpose : Set active dialog box
424 //=======================================================================
425 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
427 myActiveDialogBox = (QDialog*)aDlg;
430 //=======================================================================
431 // function : GeometryGUI::EmitSignalDeactivateDialog()
432 // purpose : Emit a signal to deactivate the active dialog Box
433 //=======================================================================
434 void GeometryGUI::EmitSignalDeactivateDialog()
436 emit SignalDeactivateActiveDialog();
439 //=======================================================================
440 // function : GeometryGUI::EmitSignalCloseAllDialogs()
441 // purpose : Emit a signal to close all non modal dialogs box
442 //=======================================================================
443 void GeometryGUI::EmitSignalCloseAllDialogs()
445 emit SignalCloseAllDialogs();
448 //=======================================================================
449 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
450 // purpose : Emit a signal to inform that default real spin box step has
452 //=======================================================================
453 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
455 emit SignalDefaultStepValueChanged(newVal);
458 //=======================================================================
459 // function : GeometryGUI::OnGUIEvent()
460 // purpose : common slot for all menu/toolbar actions
461 //=======================================================================
462 void GeometryGUI::OnGUIEvent()
464 const QObject* obj = sender();
465 if ( !obj || !obj->inherits( "QAction" ) )
467 int id = actionId((QAction*)obj);
472 //=======================================================================
473 // function : GeometryGUI::OnGUIEvent()
474 // purpose : manage all events on GUI [static]
475 //=======================================================================
476 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
478 SUIT_Application* anApp = application();
480 SUIT_Desktop* desk = anApp->desktop();
482 // check type of the active viewframe
483 SUIT_ViewWindow* window = desk->activeWindow();
484 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
485 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
486 #ifndef DISABLE_GRAPHICSVIEW
487 bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() );
491 // if current viewframe is not of OCC and not of VTK type - return immediately
492 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
493 QList<int> NotViewerDependentCommands;
494 NotViewerDependentCommands << GEOMOp::OpDelete
496 << GEOMOp::OpShowOnly
497 << GEOMOp::OpShowOnlyChildren
498 << GEOMOp::OpDiscloseChildren
499 << GEOMOp::OpConcealChildren
500 << GEOMOp::OpUnpublishObject
501 << GEOMOp::OpPublishObject
502 << GEOMOp::OpPointMarker
503 << GEOMOp::OpCreateFolder
504 << GEOMOp::OpSortChildren;
505 if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) {
506 // activate OCC viewer
507 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
510 // fix for IPAL9103, point 2
511 if ( CORBA::is_nil( GetGeomGen() ) ) {
512 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
517 // find corresponding GUI library
519 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
520 createOriginAndBaseVectors(); // internal operation
522 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
523 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
524 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
525 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
526 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
527 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
528 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
529 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
530 case GEOMOp::OpDelete: // MENU EDIT - DELETE
531 #ifndef DISABLE_PYCONSOLE
532 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
534 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
535 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
536 case GEOMOp::OpColor: // POPUP MENU - COLOR
537 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
538 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
539 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
540 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
541 case GEOMOp::OpIsos: // POPUP MENU - ISOS
542 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
543 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
544 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
545 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
546 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
547 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
548 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
549 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
550 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
551 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
552 case GEOMOp::OpMaterialMenu: // POPUP MENU - MATERIAL PROPERTIES (sub-menu)
553 case GEOMOp::OpPredefMaterial: // POPUP MENU - MATERIAL PROPERTIES (sub-menu) - <SOME MATERIAL>
554 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES (sub-menu) - CUSTOM...
555 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
556 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
557 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
558 case GEOMOp::OpClsBringToFront: //
559 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
560 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
561 #ifndef DISABLE_GRAPHICSVIEW
562 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
564 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
565 libName = "GEOMToolsGUI";
567 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
568 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
569 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
570 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
571 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
572 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
573 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
574 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
575 case GEOMOp::OpHide: // MENU VIEW - ERASE
576 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
577 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
578 case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE
579 case GEOMOp::OpSwitchName: // MENU VIEW - VERTICES MODE
580 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
581 case GEOMOp::OpShading: // POPUP MENU - SHADING
582 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
583 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
584 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
585 case GEOMOp::OpVertices: // POPUP MENU - VERTICES
586 case GEOMOp::OpShowName: // POPUP MENU - SHOW NAME
587 libName = "DisplayGUI";
589 case GEOMOp::OpPoint: // MENU BASIC - POINT
590 case GEOMOp::OpLine: // MENU BASIC - LINE
591 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
592 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
593 case GEOMOp::OpArc: // MENU BASIC - ARC
594 case GEOMOp::OpVector: // MENU BASIC - VECTOR
595 case GEOMOp::OpPlane: // MENU BASIC - PLANE
596 case GEOMOp::OpCurve: // MENU BASIC - CURVE
597 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
598 libName = "BasicGUI";
600 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
601 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
602 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
603 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
604 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
605 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
606 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
607 libName = "PrimitiveGUI";
609 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
610 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
611 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
612 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
613 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
614 case GEOMOp::OpThickness: // MENU GENERATION - THICKNESS
615 libName = "GenerationGUI";
617 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
618 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
619 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
620 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
621 case GEOMOp::OpSurfaceFromFace: // MENU ENTITY - SURFACE FROM FACE
623 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
625 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
626 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
627 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
628 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
629 case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR
630 libName = "EntityGUI";
632 case GEOMOp::OpEdge: // MENU BUILD - EDGE
633 case GEOMOp::OpWire: // MENU BUILD - WIRE
634 case GEOMOp::OpFace: // MENU BUILD - FACE
635 case GEOMOp::OpShell: // MENU BUILD - SHELL
636 case GEOMOp::OpSolid: // MENU BUILD - SOLID
637 case GEOMOp::OpCompound: // MENU BUILD - COMPOUND
638 libName = "BuildGUI";
640 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
641 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
642 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
643 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
644 libName = "BooleanGUI";
646 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
647 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
648 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
649 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
650 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
651 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
652 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
653 case GEOMOp::OpProjOnCyl: // MENU TRANSFORMATION - PROJECTION ON CYLINDER
654 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
655 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
656 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
657 case GEOMOp::OpExtension: // MENU TRANSFORMATION - EXTENSION
658 libName = "TransformationGUI";
660 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
661 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
662 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
663 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
664 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
665 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
666 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
667 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
668 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
669 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
670 case GEOMOp::OpTransferData: // MENU OPERATION - TRANSFER DATA
671 case GEOMOp::OpExtraction: // MENU OPERATION - EXTRACT AND REBUILD
672 libName = "OperationGUI";
674 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
675 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
676 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
677 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
678 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
679 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
680 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
681 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
682 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
683 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
684 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
685 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
686 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
687 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
688 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
689 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
690 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
691 case GEOMOp::OpInspectObj: // MENU REPAIR - INSPECT OBJECT
692 libName = "RepairGUI";
694 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
695 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
696 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
697 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
698 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
699 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
700 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
701 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
702 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
703 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
704 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
705 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
706 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
707 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
708 case GEOMOp::OpFastCheckInters: // MENU MEASURE - FAST CHECK INTERSECTIONS
709 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
710 case GEOMOp::OpAnnotation: // MENU MEASURE - ANNOTATION
711 case GEOMOp::OpEditAnnotation: // POPUP MENU - EDIT ANNOTATION
712 case GEOMOp::OpDeleteAnnotation: // POPUP MENU - DELETE ANNOTATION
713 #ifndef DISABLE_PLOT2DVIEWER
714 case GEOMOp::OpShapeStatistics: // MENU MEASURE - SHAPE STATISTICS
716 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
717 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
718 case GEOMOp::OpShowAllAnnotations: // POPUP MENU - SHOW ALL ANNOTATIONS
719 case GEOMOp::OpHideAllAnnotations: // POPUP MENU - HIDE ALL ANNOTATIONS
720 libName = "MeasureGUI";
722 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
723 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
724 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
725 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
726 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
727 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
728 libName = "GroupGUI";
730 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
731 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
732 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
733 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
734 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
735 libName = "BlocksGUI";
737 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
738 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
739 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
740 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
741 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
742 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
743 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
744 //libName = "AdvancedGUI";
747 if (myPluginActions.contains(id)) {
748 libName = myPluginActions[id].first;
750 GEOMPluginGUI* library = 0;
751 if ( !libName.isEmpty() ) {
753 libName = libName + ".dll";
754 #elif defined(__APPLE__)
755 libName = QString( "lib" ) + libName + ".dylib";
757 libName = QString( "lib" ) + libName + ".so";
759 library = getPluginLibrary( libName );
762 // call method of corresponding GUI library
764 //QString action ("%1");
765 //action = action.arg(id);
767 //if( !theParam.isValid() )
768 library->OnGUIEvent( myPluginActions[id].second, desk );
770 // library->OnGUIEvent( id, desk, theParam);
773 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
775 updateCreationInfo();
781 GEOMGUI* library = 0;
782 if ( !libName.isEmpty() ) {
784 libName = libName + ".dll";
785 #elif defined(__APPLE__)
786 libName = QString( "lib" ) + libName + ".dylib";
788 libName = QString( "lib" ) + libName + ".so";
790 library = getLibrary( libName );
793 // call method of corresponding GUI library
795 if( !theParam.isValid() )
796 library->OnGUIEvent( id, desk );
798 library->OnGUIEvent( id, desk, theParam);
801 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
803 updateCreationInfo();
806 //=================================================================================
807 // function : GeometryGUI::activateOperation()
809 //=================================================================================
810 bool GeometryGUI::activateOperation( int actionId )
812 OnGUIEvent(actionId);
816 //=================================================================================
817 // function : GeometryGUI::activateOperation()
819 //=================================================================================
820 bool GeometryGUI::activateOperation( const QString& actionId )
824 int id = actionId.toInt(&isOk);
831 //=================================================================================
832 // function : GeometryGUI::activateOperation()
834 //=================================================================================
835 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
839 QString pluginLib = plugin;
840 // TODO: if <plugin> is a plugin name, find plugin library name
841 if (myPluginLibs.contains(plugin))
842 pluginLib = myPluginLibs[plugin];
844 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
845 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
846 const PluginAction& anAction = actionsIter.value();
847 if (anAction.first == pluginLib && anAction.second == actionId) {
848 // activate operation
849 OnGUIEvent(actionsIter.key());
857 //=================================================================================
858 // function : GeometryGUI::OnKeyPress()
859 // purpose : Called when any key is pressed by user [static]
860 //=================================================================================
861 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
863 if ( !application() )
865 foreach ( GEOMGUI* lib, myGUIMap )
866 lib->OnKeyPress( e, application()->desktop(), w );
869 //=================================================================================
870 // function : GeometryGUI::OnMouseMove()
871 // purpose : Manages mouse move events [static]
872 //=================================================================================
873 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
875 if ( !application() )
877 foreach ( GEOMGUI* lib, myGUIMap )
878 lib->OnMouseMove( e, application()->desktop(), w );
881 //=================================================================================
882 // function : GeometryGUI::OnMouseRelease()
883 // purpose : Manages mouse release events [static]
884 //=================================================================================
885 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
887 if ( !application() )
889 foreach ( GEOMGUI* lib, myGUIMap )
890 lib->OnMouseRelease( e, application()->desktop(), w );
893 //=================================================================================
894 // function : GeometryGUI::OnMousePress()
895 // purpose : Manage mouse press events [static]
896 //=================================================================================
897 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
899 if ( !application() )
901 foreach ( GEOMGUI* lib, myGUIMap )
902 lib->OnMousePress( e, application()->desktop(), w );
905 //=======================================================================
906 // function : createGeomAction
908 //=======================================================================
909 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
910 const int accel, const bool toggle, const QString& shortcutAction )
912 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
913 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
914 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
916 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
918 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
919 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
921 application()->desktop(),
923 this, SLOT( OnGUIEvent() ),
927 //=======================================================================
928 // function : createOriginAndBaseVectors
930 //=======================================================================
931 void GeometryGUI::createOriginAndBaseVectors()
933 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
934 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
936 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
940 if ( !CORBA::is_nil( GetGeomGen() ) ) {
941 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations();
942 if ( !aBasicOperations->_is_nil() ) {
943 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
944 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
945 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
946 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
947 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
948 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
950 GetGeomGen()->PublishInStudy( SALOMEDS::SObject::_nil(), anOrigin, "O" );
951 GetGeomGen()->PublishInStudy( SALOMEDS::SObject::_nil(), anOX, "OX" );
952 GetGeomGen()->PublishInStudy( SALOMEDS::SObject::_nil(), anOY, "OY" );
953 GetGeomGen()->PublishInStudy( SALOMEDS::SObject::_nil(), anOZ, "OZ" );
954 anOrigin->UnRegister();
958 aBasicOperations->UnRegister();
960 getApp()->updateObjectBrowser( true );
966 //=======================================================================
967 // function : GeometryGUI::initialize()
968 // purpose : Called when GEOM module is created
969 //=======================================================================
970 void GeometryGUI::initialize( CAM_Application* app )
972 SalomeApp_Module::initialize( app );
974 // ----- create actions --------------
976 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
978 createGeomAction( GEOMOp::OpPoint, "POINT" );
979 createGeomAction( GEOMOp::OpLine, "LINE" );
980 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
981 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
982 createGeomAction( GEOMOp::OpArc, "ARC" );
983 createGeomAction( GEOMOp::OpCurve, "CURVE" );
984 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
985 createGeomAction( GEOMOp::OpVector, "VECTOR" );
986 createGeomAction( GEOMOp::OpPlane, "PLANE" );
987 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
988 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
989 createGeomAction( GEOMOp::OpSurfaceFromFace, "SURFACE_FROM_FACE" );
991 createGeomAction( GEOMOp::OpBox, "BOX" );
992 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
993 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
994 createGeomAction( GEOMOp::OpTorus, "TORUS" );
995 createGeomAction( GEOMOp::OpCone, "CONE" );
996 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
997 createGeomAction( GEOMOp::OpDisk, "DISK" );
999 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
1000 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
1001 createGeomAction( GEOMOp::OpFilling, "FILLING" );
1002 createGeomAction( GEOMOp::OpPipe, "PIPE" );
1003 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
1004 createGeomAction( GEOMOp::OpThickness, "THICKNESS" );
1006 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
1007 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
1008 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
1009 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
1010 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
1012 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
1013 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
1015 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
1017 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
1018 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
1020 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
1021 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
1022 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
1024 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
1026 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
1027 createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" );
1029 createGeomAction( GEOMOp::OpEdge, "EDGE" );
1030 createGeomAction( GEOMOp::OpWire, "WIRE" );
1031 createGeomAction( GEOMOp::OpFace, "FACE" );
1032 createGeomAction( GEOMOp::OpShell, "SHELL" );
1033 createGeomAction( GEOMOp::OpSolid, "SOLID" );
1034 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
1036 createGeomAction( GEOMOp::OpFuse, "FUSE" );
1037 createGeomAction( GEOMOp::OpCommon, "COMMON" );
1038 createGeomAction( GEOMOp::OpCut, "CUT" );
1039 createGeomAction( GEOMOp::OpSection, "SECTION" );
1041 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
1042 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
1043 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
1044 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
1045 createGeomAction( GEOMOp::OpScale, "SCALE" );
1046 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
1047 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
1048 createGeomAction( GEOMOp::OpProjOnCyl, "PROJ_ON_CYL" );
1049 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
1050 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
1051 createGeomAction( GEOMOp::OpExtension, "EXTENSION" );
1053 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
1054 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
1055 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
1056 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
1057 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
1058 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
1059 createGeomAction( GEOMOp::OpTransferData, "TRANSFER_DATA" );
1060 createGeomAction( GEOMOp::OpExtraction, "EXTRACTION" );
1061 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
1062 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
1063 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
1064 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
1066 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
1067 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
1068 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
1070 createGeomAction( GEOMOp::OpSewing, "SEWING" );
1071 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
1072 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
1073 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
1074 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
1075 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
1076 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
1077 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
1078 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
1079 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
1080 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
1081 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
1082 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1083 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1084 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1085 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1086 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1087 createGeomAction( GEOMOp::OpInspectObj, "INSPECT_OBJECT" );
1089 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1090 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1091 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1092 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1093 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1094 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1095 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1096 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1097 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1098 createGeomAction( GEOMOp::OpAnnotation, "ANNOTATION" );
1099 createGeomAction( GEOMOp::OpEditAnnotation, "EDIT_ANNOTATION" );
1100 createGeomAction( GEOMOp::OpDeleteAnnotation, "DELETE_ANNOTATION" );
1102 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1103 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1104 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1105 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1106 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1107 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1108 createGeomAction( GEOMOp::OpFastCheckInters, "FAST_CHECK_INTERSECTIONS" );
1109 #ifndef DISABLE_PLOT2DVIEWER
1110 createGeomAction( GEOMOp::OpShapeStatistics, "SHAPE_STATISTICS" );
1113 #ifndef DISABLE_PYCONSOLE
1114 #ifdef _DEBUG_ // PAL16821
1115 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1119 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1120 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1121 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1122 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1123 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1124 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1125 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1126 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1127 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1128 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1129 createGeomAction( GEOMOp::OpSwitchName, "NAME_MODE");
1130 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1131 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1132 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1133 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1134 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1135 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1136 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1137 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1138 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1139 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1140 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1141 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1142 createGeomAction( GEOMOp::OpHide, "ERASE" );
1144 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1145 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1146 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1147 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1148 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1149 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1150 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1151 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1152 createGeomAction( GEOMOp::OpShowName, "POP_SHOW_NAME", "", 0, true );
1153 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1154 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1155 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1156 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1157 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1158 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1159 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1160 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1161 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1162 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1163 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1164 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1165 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1166 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1167 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1168 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1169 createGeomAction( GEOMOp::OpMaterialMenu, "POP_MATERIAL_PROPERTIES");
1170 action(GEOMOp::OpMaterialMenu)->setMenu( new QMenu() );
1171 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1172 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1173 #ifndef DISABLE_GRAPHICSVIEW
1174 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1176 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1177 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1178 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1179 createGeomAction( GEOMOp::OpShowAllAnnotations, "POP_SHOW_ALL_ANNOTATIONS" );
1180 createGeomAction( GEOMOp::OpHideAllAnnotations, "POP_HIDE_ALL_ANNOTATIONS" );
1182 // Create actions for increase/decrease transparency shortcuts
1183 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1184 "Geometry:Increase transparency");
1185 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1186 "Geometry:Decrease transparency");
1188 // Create actions for increase/decrease number of isolines
1189 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1190 "Geometry:Increase number of isolines");
1191 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1192 "Geometry:Decrease number of isolines");
1194 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1195 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1196 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1197 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1198 //@@ 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 @@//
1200 // ---- create menus --------------------------
1202 /*int fileId =*/ createMenu( tr( "MEN_FILE" ), -1, -1 );
1204 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1205 createMenu( GEOMOp::OpDelete, editId, -1 );
1207 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1209 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1210 createMenu( GEOMOp::OpPoint, basicId, -1 );
1211 createMenu( GEOMOp::OpLine, basicId, -1 );
1212 createMenu( GEOMOp::OpCircle, basicId, -1 );
1213 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1214 createMenu( GEOMOp::OpArc, basicId, -1 );
1215 createMenu( GEOMOp::OpCurve, basicId, -1 );
1216 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1217 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1218 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1219 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1220 createMenu( GEOMOp::OpSurfaceFromFace, basicId, -1 );
1221 createMenu( separator(), basicId, -1 );
1222 createMenu( GEOMOp::OpVector, basicId, -1 );
1223 createMenu( GEOMOp::OpPlane, basicId, -1 );
1224 createMenu( GEOMOp::OpLCS, basicId, -1 );
1225 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1227 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1228 createMenu( GEOMOp::OpBox, primId, -1 );
1229 createMenu( GEOMOp::OpCylinder, primId, -1 );
1230 createMenu( GEOMOp::OpSphere, primId, -1 );
1231 createMenu( GEOMOp::OpTorus, primId, -1 );
1232 createMenu( GEOMOp::OpCone, primId, -1 );
1233 createMenu( GEOMOp::OpRectangle, primId, -1 );
1234 createMenu( GEOMOp::OpDisk, primId, -1 );
1235 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1237 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1238 createMenu( GEOMOp::OpPrism, genId, -1 );
1239 createMenu( GEOMOp::OpRevolution, genId, -1 );
1240 createMenu( GEOMOp::OpFilling, genId, -1 );
1241 createMenu( GEOMOp::OpPipe, genId, -1 );
1242 createMenu( GEOMOp::OpPipePath, genId, -1 );
1243 createMenu( GEOMOp::OpThickness, genId, -1 );
1245 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1246 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1247 //@@ 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 @@//
1249 createMenu( separator(), newEntId, -1 );
1251 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1252 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1253 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1254 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1255 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1256 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1258 createMenu( separator(), newEntId, -1 );
1260 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1261 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1262 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1264 createMenu( separator(), newEntId, -1 );
1266 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1267 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1268 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1269 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1270 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1272 createMenu( separator(), newEntId, -1 );
1274 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1276 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1277 createMenu( GEOMOp::OpEdge, buildId, -1 );
1278 createMenu( GEOMOp::OpWire, buildId, -1 );
1279 createMenu( GEOMOp::OpFace, buildId, -1 );
1280 createMenu( GEOMOp::OpShell, buildId, -1 );
1281 createMenu( GEOMOp::OpSolid, buildId, -1 );
1282 createMenu( GEOMOp::OpCompound, buildId, -1 );
1284 createMenu( separator(), newEntId, -1 );
1286 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1288 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1291 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1293 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1294 createMenu( GEOMOp::OpFuse, boolId, -1 );
1295 createMenu( GEOMOp::OpCommon, boolId, -1 );
1296 createMenu( GEOMOp::OpCut, boolId, -1 );
1297 createMenu( GEOMOp::OpSection, boolId, -1 );
1299 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1300 createMenu( GEOMOp::OpTranslate, transId, -1 );
1301 createMenu( GEOMOp::OpRotate, transId, -1 );
1302 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1303 createMenu( GEOMOp::OpMirror, transId, -1 );
1304 createMenu( GEOMOp::OpScale, transId, -1 );
1305 createMenu( GEOMOp::OpOffset, transId, -1 );
1306 createMenu( GEOMOp::OpProjection, transId, -1 );
1307 createMenu( GEOMOp::OpExtension, transId, -1 );
1308 createMenu( GEOMOp::OpProjOnCyl, transId, -1 );
1309 createMenu( separator(), transId, -1 );
1310 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1311 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1313 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1314 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1315 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1316 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1318 createMenu( separator(), operId, -1 );
1320 createMenu( GEOMOp::OpPartition, operId, -1 );
1321 createMenu( GEOMOp::OpArchimede, operId, -1 );
1322 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1323 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1324 createMenu( GEOMOp::OpTransferData, operId, -1 );
1325 createMenu( GEOMOp::OpExtraction, operId, -1 );
1327 createMenu( separator(), operId, -1 );
1329 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1330 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1331 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1332 createMenu( GEOMOp::OpChamfer, operId, -1 );
1333 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1334 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1336 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1337 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1338 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1339 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1340 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1341 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1342 createMenu( GEOMOp::OpSewing, repairId, -1 );
1343 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1344 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1345 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1346 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1347 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1348 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1349 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1350 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1351 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1352 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1353 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1355 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1356 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1357 createMenu( GEOMOp::OpProperties, measurId, -1 );
1358 createMenu( separator(), measurId, -1 );
1359 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1360 createMenu( GEOMOp::OpInertia, measurId, -1 );
1361 createMenu( GEOMOp::OpNormale, measurId, -1 );
1362 createMenu( separator(), measurId, -1 );
1363 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1364 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1365 createMenu( separator(), measurId, -1 );
1367 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1368 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1369 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1370 createMenu( GEOMOp::OpAngle, dimId, -1 );
1371 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1373 createMenu( GEOMOp::OpAnnotation, measurId, -1 );
1375 createMenu( separator(), measurId, -1 );
1376 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1377 createMenu( separator(), measurId, -1 );
1378 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1379 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1380 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1381 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1382 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1383 createMenu( GEOMOp::OpFastCheckInters, measurId, -1 );
1384 createMenu( GEOMOp::OpInspectObj, measurId, -1 );
1385 #ifndef DISABLE_PLOT2DVIEWER
1386 createMenu( GEOMOp::OpShapeStatistics, measurId, -1 );
1389 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1390 #ifndef DISABLE_PYCONSOLE
1391 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1392 createMenu( separator(), toolsId, -1 );
1393 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1397 createMenu( separator(), toolsId, -1 );
1398 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1399 createMenu( separator(), toolsId, -1 );
1401 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1402 createMenu( separator(), viewId, -1 );
1404 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1405 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1406 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1407 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1408 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1409 createMenu( separator(), dispmodeId, -1 );
1410 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1411 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1412 createMenu( GEOMOp::OpSwitchName, dispmodeId, -1 );
1414 createMenu( separator(), viewId, -1 );
1415 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1416 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1417 createMenu( separator(), viewId, -1 );
1418 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1419 createMenu( separator(), viewId, -1 );
1423 because of these items are accessible through object browser and viewers
1424 we have removed they from main menu
1426 createMenu( GEOMOp::OpShow, viewId, -1 );
1427 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1428 createMenu( GEOMOp::OpHide, viewId, -1 );
1431 // ---- create toolbars --------------------------
1433 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1434 createTool( GEOMOp::OpPoint, basicTbId );
1435 createTool( GEOMOp::OpLine, basicTbId );
1436 createTool( GEOMOp::OpCircle, basicTbId );
1437 createTool( GEOMOp::OpEllipse, basicTbId );
1438 createTool( GEOMOp::OpArc, basicTbId );
1439 createTool( GEOMOp::OpCurve, basicTbId );
1440 createTool( GEOMOp::OpVector, basicTbId );
1441 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1442 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1443 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1444 createTool( GEOMOp::OpIsoline, basicTbId );
1445 createTool( GEOMOp::OpSurfaceFromFace, basicTbId );
1446 createTool( GEOMOp::OpPlane, basicTbId );
1447 createTool( GEOMOp::OpLCS, basicTbId );
1448 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1450 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1451 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1452 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1454 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1455 createTool( GEOMOp::OpBox, primTbId );
1456 createTool( GEOMOp::OpCylinder, primTbId );
1457 createTool( GEOMOp::OpSphere, primTbId );
1458 createTool( GEOMOp::OpTorus, primTbId );
1459 createTool( GEOMOp::OpCone, primTbId );
1460 createTool( GEOMOp::OpRectangle, primTbId );
1461 createTool( GEOMOp::OpDisk, primTbId );
1462 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1464 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1465 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1466 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1468 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1469 createTool( GEOMOp::OpFuse, boolTbId );
1470 createTool( GEOMOp::OpCommon, boolTbId );
1471 createTool( GEOMOp::OpCut, boolTbId );
1472 createTool( GEOMOp::OpSection, boolTbId );
1474 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1475 createTool( GEOMOp::OpPrism, genTbId );
1476 createTool( GEOMOp::OpRevolution, genTbId );
1477 createTool( GEOMOp::OpFilling, genTbId );
1478 createTool( GEOMOp::OpPipe, genTbId );
1479 createTool( GEOMOp::OpPipePath, genTbId );
1480 createTool( GEOMOp::OpThickness, genTbId );
1482 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1483 createTool( GEOMOp::OpTranslate, transTbId );
1484 createTool( GEOMOp::OpRotate, transTbId );
1485 createTool( GEOMOp::OpChangeLoc, transTbId );
1486 createTool( GEOMOp::OpMirror, transTbId );
1487 createTool( GEOMOp::OpScale, transTbId );
1488 createTool( GEOMOp::OpOffset, transTbId );
1489 createTool( GEOMOp::OpProjection, transTbId );
1490 createTool( GEOMOp::OpExtension, transTbId );
1491 createTool( GEOMOp::OpProjOnCyl, transTbId );
1492 createTool( separator(), transTbId );
1493 createTool( GEOMOp::OpMultiTranslate, transTbId );
1494 createTool( GEOMOp::OpMultiRotate, transTbId );
1496 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1497 createTool( GEOMOp::OpExplode, operTbId );
1498 createTool( GEOMOp::OpPartition, operTbId );
1499 createTool( GEOMOp::OpArchimede, operTbId );
1500 createTool( GEOMOp::OpShapesOnShape, operTbId );
1501 createTool( GEOMOp::OpSharedShapes, operTbId );
1502 createTool( GEOMOp::OpTransferData, operTbId );
1503 createTool( GEOMOp::OpExtraction, operTbId );
1505 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1506 createTool( GEOMOp::OpFillet1d, featTbId );
1507 createTool( GEOMOp::OpFillet2d, featTbId );
1508 createTool( GEOMOp::OpFillet3d, featTbId );
1509 createTool( GEOMOp::OpChamfer, featTbId );
1510 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1511 createTool( GEOMOp::OpExtrudedCut, featTbId );
1513 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1514 createTool( GEOMOp::OpEdge, buildTbId );
1515 createTool( GEOMOp::OpWire, buildTbId );
1516 createTool( GEOMOp::OpFace, buildTbId );
1517 createTool( GEOMOp::OpShell, buildTbId );
1518 createTool( GEOMOp::OpSolid, buildTbId );
1519 createTool( GEOMOp::OpCompound, buildTbId );
1521 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1522 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1523 createTool( GEOMOp::OpProperties, measureTbId );
1524 createTool( GEOMOp::OpCenterMass, measureTbId );
1525 createTool( GEOMOp::OpInertia, measureTbId );
1526 createTool( GEOMOp::OpNormale, measureTbId );
1527 createTool( separator(), measureTbId );
1528 createTool( GEOMOp::OpBoundingBox, measureTbId );
1529 createTool( GEOMOp::OpMinDistance, measureTbId );
1530 createTool( GEOMOp::OpAngle, measureTbId );
1531 createTool( GEOMOp::OpAnnotation, measureTbId );
1532 createTool( GEOMOp::OpTolerance , measureTbId );
1533 createTool( separator(), measureTbId );
1534 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1535 createTool( GEOMOp::OpFreeFaces, measureTbId );
1536 createTool( separator(), measureTbId );
1537 createTool( GEOMOp::OpWhatIs, measureTbId );
1538 createTool( GEOMOp::OpCheckShape, measureTbId );
1539 createTool( GEOMOp::OpCheckCompound, measureTbId );
1540 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1541 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1542 createTool( GEOMOp::OpFastCheckInters, measureTbId );
1544 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1545 createTool( GEOMOp::OpPictureImport, picturesTbId );
1547 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1550 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1551 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1552 //@@ 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 @@//
1554 // ---- create popup menus --------------------------
1556 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1557 QString clientOCC = "(client='OCCViewer')";
1558 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1559 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1561 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1562 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1563 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1564 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1566 QString autoColorPrefix =
1567 "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') and type='Shape' and selcount=1";
1569 QtxPopupMgr* mgr = popupMgr();
1571 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1572 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1573 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1574 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1575 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1576 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1577 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1578 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1580 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1581 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1582 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1583 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1584 mgr->insert( separator(), -1, -1 ); // -----------
1586 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1587 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1588 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1589 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1590 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1591 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1592 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1593 mgr->insert( separator(), -1, -1 ); // -----------
1594 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1595 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1596 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1597 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1598 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1599 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1600 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1601 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1602 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1603 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1604 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1605 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1606 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1607 mgr->insert( separator(), dispmodeId, -1 );
1608 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1609 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1610 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1611 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1612 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1613 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1614 mgr->insert( action( GEOMOp::OpShowName ), dispmodeId, -1 ); // show name
1615 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1616 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK + " and isNameMode", QtxPopupMgr::ToggleRule );
1617 mgr->insert( separator(), -1, -1 ); // -----------
1619 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1620 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1621 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1622 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1623 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1624 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1625 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1626 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1627 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1628 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1630 // material properties
1631 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1632 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'}) and matMenu=false", QtxPopupMgr::VisibleRule );
1633 mgr->insert( action( GEOMOp::OpMaterialMenu ), -1, -1 );
1634 mgr->setRule( action( GEOMOp::OpMaterialMenu ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'}) and matMenu=true", QtxPopupMgr::VisibleRule );
1637 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1638 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1640 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1641 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1642 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1644 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1645 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1647 mgr->insert( separator(), -1, -1 ); // -----------
1648 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1649 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1650 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1651 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1652 mgr->insert( separator(), -1, -1 ); // -----------
1654 mgr->insert( action( GEOMOp::OpEditAnnotation ), -1, -1 ); // edit annotation
1655 mgr->setRule( action( GEOMOp::OpEditAnnotation ), clientOCC + " and annotationsCount=1", QtxPopupMgr::VisibleRule );
1656 mgr->insert( action( GEOMOp::OpDeleteAnnotation ), -1, -1 ); // delete annotation
1657 mgr->setRule( action( GEOMOp::OpDeleteAnnotation ), clientOCC + " and annotationsCount>0", QtxPopupMgr::VisibleRule );
1658 mgr->insert( separator(), -1, -1 ); // -----------
1660 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1661 onlyComponent = "((type='Component') and selcount=1)",
1662 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1663 types = "'Shape' 'Group' 'FieldStep'";
1665 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1666 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1668 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1669 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1671 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1672 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1674 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1676 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1677 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1678 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1679 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1680 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1681 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1682 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1683 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1684 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1685 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1686 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1687 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1688 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1689 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1690 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1691 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1692 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1693 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1694 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1695 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1696 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1697 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1698 mgr->insert( separator(), selectonlyId, -1);
1699 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1700 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1701 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1702 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1703 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1704 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1705 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1707 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1709 mgr->insert( separator(), -1, -1 ); // -----------
1710 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1711 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1712 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1713 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1714 mgr->insert( action( GEOMOp::OpShowAllAnnotations ), -1, -1 ); // show all annotations
1715 mgr->setRule( action( GEOMOp::OpShowAllAnnotations ), aDimensionRule.arg( "hasHiddenAnnotations" ), QtxPopupMgr::VisibleRule );
1716 mgr->insert( action( GEOMOp::OpHideAllAnnotations ), -1, -1 ); // hide all annotations
1717 mgr->setRule( action( GEOMOp::OpHideAllAnnotations ), aDimensionRule.arg( "hasVisibleAnnotations" ), QtxPopupMgr::VisibleRule );
1719 mgr->insert( separator(), -1, -1 ); // -----------
1720 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1721 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1723 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1724 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1726 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1727 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1729 mgr->insert( separator(), -1, -1 ); // -----------
1730 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1731 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1733 mgr->insert( separator(), -1, -1 ); // -----------
1734 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1735 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1737 #ifndef DISABLE_GRAPHICSVIEW
1738 mgr->insert( separator(), -1, -1 ); // -----------
1739 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1740 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1743 mgr->insert( separator(), -1, -1 ); // -----------
1744 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1745 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1747 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1749 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1751 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1752 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1753 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1756 // create plugin actions and menus
1760 //=======================================================================
1761 // function : GeometryGUI::addPluginActions()
1763 //=======================================================================
1764 void GeometryGUI::addPluginActions()
1767 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1768 if (!resMgr) return;
1770 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1771 if (!appStudy) return;
1773 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1775 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1777 int id = GEOMOp::OpLastOperationID; // TODO?
1780 GEOMUtils::PluginInfo::const_iterator it;
1781 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1782 // bind action lib and label to its ID for activateOperation() method proper work
1783 GEOMUtils::PluginData pdata = (*it);
1784 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1785 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1786 std::list<GEOMUtils::ActionData>::const_iterator ait;
1787 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1788 GEOMUtils::ActionData adata = (*ait);
1791 if ( !adata.icon.empty() )
1792 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1794 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1795 QString actionName = smenus.last();
1796 actionName = actionName.toUpper().prepend( "MEN_" );
1797 smenus.removeLast();
1799 // path to action in toolbar
1800 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1801 QString actionTool = stools.last();
1802 actionTool = actionTool.toUpper().prepend( "TOP_" );
1803 stools.removeLast();
1805 QString actionStat = adata.statusText.c_str();
1806 actionStat = actionStat.toUpper().prepend( "STB_" );
1808 createAction( id, // ~ adata.label
1809 tr( actionTool.toLatin1().constData() ),
1811 tr( actionName.toLatin1().constData() ),
1812 tr( actionStat.toLatin1().constData() ),
1813 QKeySequence( tr( adata.accel.c_str() ) ),
1814 application()->desktop(),
1816 this, SLOT( OnGUIEvent() ),
1817 QString() /*shortcutAction*/ );
1820 foreach ( QString subMenu, smenus ) {
1821 QStringList subMenuList = subMenu.split( ":" );
1822 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1823 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1824 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1826 createMenu( id, menuId, -1 );
1828 if ( !stools.isEmpty() ) {
1829 QString subTool = stools[0];
1830 subTool = subTool.toUpper().prepend( "TOOL_" );
1831 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1832 createTool(id, toolId);
1835 // add action id to map
1836 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1837 myPluginActions[id] = anAction;
1846 QString wrap(const QString& text, const QString& tag)
1847 { return QString("<%1>%2</%3>").arg(tag).arg(text).arg(tag);}
1850 //=======================================================================
1851 // function : GeometryGUI::activateModule()
1852 // purpose : Called when GEOM module is activated
1853 //=======================================================================
1854 bool GeometryGUI::activateModule( SUIT_Study* study )
1856 // Fill in: Help Panel
1857 SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( application() );
1858 app->infoPanel()->setTitle(tr("INFO_WELCOME_TO_GEOM"));
1860 int gb = app->infoPanel()->addGroup(tr("INFO_GRP_CREATE_MODEL"));
1863 items << wrap(tr("INFO_VERTICES"), "li")
1864 << wrap(tr("INFO_EDGES"), "li")
1865 << wrap(tr("INFO_WIRES"), "li")
1866 << wrap(tr("INFO_FACES"), "li")
1867 << wrap(tr("INFO_SHELLS"), "li")
1868 << wrap(tr("INFO_SOLIDS"), "li");
1869 lab = tr("INFO_BOTTOM_UP_CONSTRUCTION") + ":" + wrap(items.join(""), "ul");
1872 items << wrap(tr("INFO_BOX"), "li")
1873 << wrap(tr("INFO_CYLINDER"), "li")
1874 << wrap(tr("INFO_CONE"), "li")
1875 << wrap("...", "li");
1876 lab = lab + tr("INFO_PRIMITIVES") + ":" + wrap(items.join(""), "ul");
1879 lab = lab + tr("INFO_BOOLEANS") + "<br/>";
1880 lab = lab + tr("INFO_TRANSFORMATIONS");
1882 app->infoPanel()->addLabel(lab, gb);
1884 gb = app->infoPanel()->addGroup(tr("INFO_GRP_IMPORT_MODEL"));
1885 items << wrap("BREP", "li")
1886 << wrap("STEP", "li")
1887 << wrap("IGES", "li")
1888 << wrap("STL", "li")
1889 << wrap("XAO", "li");
1890 lab = tr("INFO_AVAILABLE_FORMATS") + ":" + wrap(items.join(""), "ul");
1893 app->infoPanel()->addLabel(lab, gb);
1896 if ( CORBA::is_nil( myComponentGeom ) )
1899 bool res = SalomeApp_Module::activateModule( study );
1903 setMenuShown( true );
1904 setToolShown( true );
1906 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1907 PyGILState_STATE gstate = PyGILState_Ensure();
1908 PyObject* pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1909 if ( !pluginsmanager ) {
1914 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1915 tr("MEN_NEW_ENTITY").toUtf8().data(),
1916 tr("GEOM_PLUGINS_OTHER").toUtf8().data());
1921 PyGILState_Release(gstate);
1922 // end of GEOM plugins loading
1924 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1925 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ), Qt::UniqueConnection );
1927 // Reset actions accelerator keys
1928 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1930 GUIMap::Iterator it;
1931 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1932 it.value()->activate( application()->desktop() );
1934 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1936 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ), Qt::UniqueConnection );
1937 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ), Qt::UniqueConnection );
1938 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ), Qt::UniqueConnection );
1940 if ( !myCreationInfoWdg )
1941 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1942 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1943 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1945 if ( !myTextTreeWdg ) {
1946 myTextTreeWdg = new GEOMGUI_TextTreeWdg( getApp() );
1947 new GEOMGUI_TextTreeSelector( myTextTreeWdg, GetAnnotationMgr(), getApp()->selectionMgr() );
1950 getApp()->insertDockWindow( myTextTreeWdg->getWinID(), myTextTreeWdg );
1951 getApp()->placeDockWindow( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
1954 SALOME_ListIO selected;
1955 sm->selectedObjects( selected );
1956 sm->clearSelected();
1958 SUIT_ViewManager* vm;
1959 ViewManagerList OCCViewManagers, VTKViewManagers;
1961 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1962 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1963 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1964 onViewManagerAdded(vm);
1966 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1967 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1968 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1969 onViewManagerAdded(vm);
1971 sm->setSelectedObjects( selected, true ); //NPAL 19674
1973 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1975 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ), Qt::UniqueConnection );
1977 // 0020836 (Basic vectors and origin)
1978 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1979 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1980 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1982 _PTR(Study) studyDS = appStudy->studyDS();
1984 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1985 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1986 createOriginAndBaseVectors();
1991 Py_XDECREF(pluginsmanager);
1996 //=======================================================================
1997 // function : GeometryGUI::deactivateModule()
1998 // purpose : Called when GEOM module is deactivated
1999 //=======================================================================
2000 bool GeometryGUI::deactivateModule( SUIT_Study* study )
2002 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
2004 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
2006 setMenuShown( false );
2007 setToolShown( false );
2009 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
2010 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
2012 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
2014 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
2015 //disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
2016 if ( myCreationInfoWdg ) {
2017 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
2018 myCreationInfoWdg = 0;
2020 if ( myTextTreeWdg ) {
2021 getApp()->removeDockWindow( myTextTreeWdg->getWinID() );
2022 disconnect( application(), 0, myTextTreeWdg, 0 );
2026 EmitSignalCloseAllDialogs();
2028 GUIMap::Iterator it;
2029 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
2030 it.value()->deactivate();
2032 // Unset actions accelerator keys
2033 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
2035 qDeleteAll(myOCCSelectors);
2036 myOCCSelectors.clear();
2037 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
2039 qDeleteAll(myVTKSelectors);
2040 myVTKSelectors.clear();
2041 selMrg->setEnabled( true, SVTK_Viewer::Type() );
2043 return SalomeApp_Module::deactivateModule( study );
2046 //=======================================================================
2047 // function : onWindowActivated()
2048 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
2049 //=======================================================================
2050 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
2055 const bool ViewOCC = ( win->getViewManager() ? win->getViewManager()->getType() == OCCViewer_Viewer::Type() : false );
2056 //const bool ViewVTK = ( win->getViewManager() ? win->getViewManager()->getType() == SVTK_Viewer::Type() : false );
2058 // disable non-OCC viewframe menu commands
2059 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
2060 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
2061 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
2062 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
2063 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
2064 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
2065 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
2067 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
2068 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
2069 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
2070 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
2072 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
2075 void GeometryGUI::windows( QMap<int, int>& mappa ) const
2077 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
2078 mappa.insert( SalomeApp_Application::WT_InfoPanel, Qt::RightDockWidgetArea );
2079 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
2080 #ifndef DISABLE_PYCONSOLE
2081 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
2083 if ( myCreationInfoWdg )
2084 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
2085 if ( myTextTreeWdg )
2086 mappa.insert( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
2089 void GeometryGUI::viewManagers( QStringList& lst ) const
2091 lst.append( OCCViewer_Viewer::Type() );
2094 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
2096 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
2098 qDebug( "connect" );
2099 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
2100 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
2101 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
2102 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
2103 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
2104 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
2105 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
2106 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
2108 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2109 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
2111 // disable OCC selectors
2112 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
2113 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2114 while ( itOCCSel.hasNext() )
2115 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2116 sr->setEnabled(true);
2118 else if ( vm->getType() == SVTK_Viewer::Type() )
2120 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2121 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
2123 // disable VTK selectors
2124 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
2125 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2126 while ( itVTKSel.hasNext() )
2127 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2128 sr->setEnabled(true);
2132 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
2134 SUIT_ViewModel* viewer = vm->getViewModel();
2135 if ( vm->getType() == OCCViewer_Viewer::Type() )
2137 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2138 while ( itOCCSel.hasNext() )
2139 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2140 if ( sr->viewer() == viewer )
2142 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
2146 if ( vm->getType() == SVTK_Viewer::Type() )
2148 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2149 while ( itVTKSel.hasNext() )
2150 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2151 if ( sr->viewer() == viewer )
2153 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2157 SOCC_Viewer* aSOCCView = dynamic_cast<SOCC_Viewer*>(viewer);
2159 GetAnnotationMgr()->RemoveView( aSOCCView );
2163 //================================================================================
2165 * \brief Slot called when selection changed. Shows creation info of a selected object
2167 //================================================================================
2169 void GeometryGUI::updateCreationInfo()
2171 if ( myCreationInfoWdg )
2172 myCreationInfoWdg->clear();
2174 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2175 // if ( !myCreationInfoWdg->isVisible() )
2178 // look for a sole selected GEOM_Object
2179 GEOM::GEOM_BaseObject_var geomObj;
2181 SALOME_ListIO selected;
2182 getApp()->selectionMgr()->selectedObjects( selected );
2184 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2185 SALOME_ListIteratorOfListIO selIt( selected );
2186 for ( ; selIt.More(); selIt.Next() )
2188 Handle(SALOME_InteractiveObject) io = selIt.Value();
2189 if ( !io->hasEntry() ) continue;
2190 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2191 if ( !GeometryGUI::IsInGeomComponent( sobj )) continue;
2192 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2193 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2194 if ( !gobj->_is_nil() )
2196 if ( !geomObj->_is_nil() )
2197 return; // several GEOM objects selected
2201 if ( geomObj->_is_nil() ) return;
2203 // pass creation info of geomObj to myCreationInfoWdg
2205 if ( myCreationInfoWdg ) {
2207 GEOM::CreationInformationSeq_var info;
2210 info = geomObj->GetCreationInformation();
2214 myCreationInfoWdg->setInfo( info );
2218 void GeometryGUI::onAutoBringToFront()
2220 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2221 if( !isAutoBringToFront )
2224 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2225 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2228 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2229 if (!appStudy) return;
2231 GEOM_Displayer displayer;
2233 SALOME_View* window = displayer.GetActiveView();
2234 if ( !window ) return;
2236 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2238 SALOME_ListIO selected;
2239 getApp()->selectionMgr()->selectedObjects( selected );
2240 if (!myTopLevelIOList.IsEmpty())
2242 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2244 Handle( SALOME_InteractiveObject ) io = It.Value();
2245 bool isSelected = false;
2246 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2248 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2249 if( io->isSame( sel_io ) )
2252 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2254 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2255 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2260 myTopLevelIOList.Assign(selected);
2261 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2263 Handle( SALOME_InteractiveObject ) io = It.Value();
2264 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2265 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2268 displayer.UpdateViewer();
2269 GeometryGUI::Modified();
2272 void GeometryGUI::updateFieldColorScale()
2274 GEOM_Displayer aDisplayer;
2275 aDisplayer.UpdateColorScale();
2278 QString GeometryGUI::engineIOR() const
2280 if ( !CORBA::is_nil( GetGeomGen() ) )
2281 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2285 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture (int theId, int& theWidth, int& theHeight)
2287 theWidth = theHeight = 0;
2288 Handle(TColStd_HArray1OfByte) aTexture;
2290 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations();
2291 if ( !aInsOp->_is_nil() ) {
2292 CORBA::Long aWidth, aHeight;
2293 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2294 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2296 theHeight = aHeight;
2298 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2300 for ( CORBA::ULong i = 0; i < aStream->length(); i++)
2301 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2307 LightApp_Selection* GeometryGUI::createSelection() const
2309 return new GEOMGUI_Selection();
2312 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2314 SalomeApp_Module::contextMenuPopup( client, menu, title );
2316 getApp()->selectionMgr()->selectedObjects( lst );
2318 // Update submenu for predefined materials
2319 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2320 QMenu* matMenu = action( GEOMOp::OpMaterialMenu )->menu();
2322 QSignalMapper* signalMapper = new QSignalMapper( menu );
2325 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2326 if ( anApp && anApp->activeViewManager() ) {
2327 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2329 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2332 QString curModel = "";
2333 if ( v.canConvert<QString>() ) curModel = v.toString();
2335 // get list of all predefined materials
2336 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2338 foreach ( QString material, materials )
2340 QAction* a = matMenu->addAction( material );
2341 connect( a, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2342 signalMapper->setMapping( a, material );
2343 a->setCheckable( true );
2345 Material_Model aModel;
2346 aModel.fromResources( material );
2347 if ( !found && aModel.toProperties() == curModel ) {
2348 a->setChecked( true );
2352 matMenu->addSeparator();
2353 matMenu->addAction( action( GEOMOp::OpPredefMaterCustom ) );
2354 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2355 this, SLOT( OnSetMaterial( const QString & ) ) );
2358 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2359 Handle(SALOME_InteractiveObject) io = lst.First();
2360 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2361 _PTR(Study) study = appStudy->studyDS();
2362 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2364 QString aName = QString( obj->GetName().c_str() );
2365 aName.remove( QRegExp("\\s+$") );
2371 void GeometryGUI::OnSetMaterial(const QString& theName)
2373 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2377 void GeometryGUI::createPreferences()
2379 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2381 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2383 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2384 setPreferenceProperty( genGroup, "columns", 2 );
2386 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2387 LightApp_Preferences::Selector,
2388 "Geometry", "display_mode" );
2390 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2391 LightApp_Preferences::Color, "Geometry", "shading_color" );
2393 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2394 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2396 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2397 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2399 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2400 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2402 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2403 LightApp_Preferences::Color, "Geometry", "line_color" );
2405 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2406 LightApp_Preferences::Color, "Geometry", "point_color" );
2408 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2409 LightApp_Preferences::Color, "Geometry", "isos_color" );
2411 addPreference( tr( "PREF_LABEL_COLOR" ), genGroup,
2412 LightApp_Preferences::Color, "Geometry", "label_color" );
2414 addPreference( "", genGroup, LightApp_Preferences::Space );
2416 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2417 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2419 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2420 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2422 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2423 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2425 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2426 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2428 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2429 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2431 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2432 LightApp_Preferences::Selector,
2433 "Geometry", "material" );
2435 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2436 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2442 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2443 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2445 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2446 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2448 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2449 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2451 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2452 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2454 for (int i = 0; i < nb; i++) {
2455 setPreferenceProperty( wd[i], "min", 1 );
2456 setPreferenceProperty( wd[i], "max", 5 );
2459 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2460 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2462 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2463 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2465 // --------------------------------------------------------------------------
2466 // Dimensions (Measurements) preferences
2467 // --------------------------------------------------------------------------
2469 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2470 setPreferenceProperty( aDimGroupId, "columns", 2 );
2472 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2473 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2475 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2476 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2478 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2479 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2481 int aDimFontId = addPreference( tr( "PREF_DIMENSIONS_FONT" ), aDimGroupId, LightApp_Preferences::Font, "Geometry", "dimensions_font" );
2483 int f = QtxFontEdit::Family | QtxFontEdit::Size;
2484 setPreferenceProperty( aDimFontId, "features", f );
2485 setPreferenceProperty( aDimFontId, "mode", QtxFontEdit::Custom );
2487 Handle(Font_FontMgr) fmgr = Font_FontMgr::GetInstance();
2488 QString aFontFile = "";
2489 resMgr->value("resources", "GEOM", aFontFile);
2490 aFontFile = aFontFile + QDir::separator() + "Y14.5M-2009.ttf";
2491 // add enginier font into combobox
2492 /*int fontID =*/ QFontDatabase::addApplicationFont( aFontFile );
2493 Handle(Font_SystemFont) sf = new Font_SystemFont( TCollection_AsciiString("Y14.5M-2009") );
2494 sf->SetFontPath( Font_FA_Regular,
2495 TCollection_AsciiString( aFontFile.toLatin1().data() ) );
2496 // register font in OCC font manager
2497 fmgr->RegisterFont( sf, Standard_False );
2499 // get list of supported fonts by OCC
2500 QStringList anOCCFonts;
2501 TColStd_SequenceOfHAsciiString theFontsNames;
2502 fmgr->GetAvailableFontsNames( theFontsNames );
2503 for(Standard_Integer i=1; i<=theFontsNames.Length(); i++) {
2504 Handle(TCollection_HAsciiString) str = theFontsNames(i);
2505 anOCCFonts << str->ToCString();
2507 anOCCFonts.removeDuplicates();
2508 // set the supported fonts into combobox to use its only
2509 setPreferenceProperty( aDimFontId, "fonts", anOCCFonts );
2511 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2512 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2514 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2515 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2516 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2518 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2519 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2521 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2522 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2524 QStringList aListOfLengthUnits;
2525 aListOfLengthUnits << "m";
2526 aListOfLengthUnits << "cm";
2527 aListOfLengthUnits << "mm";
2528 aListOfLengthUnits << "in.";
2529 aListOfLengthUnits << "ft.";
2531 QStringList aListOfAngUnits;
2532 aListOfAngUnits << "rad";
2533 aListOfAngUnits << "deg";
2535 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2536 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2538 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2539 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2541 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2542 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2544 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2545 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2546 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2548 addPreference( tr( "PREF_DIMENSIONS_USE_TEXT3D" ), aDimGroupId,
2549 LightApp_Preferences::Bool, "Geometry", "dimensions_use_text3d" );
2551 // --------------------------------------------------------------------------
2552 // Shape annotation preferences
2553 // --------------------------------------------------------------------------
2555 const int aShapeAnnGroupId = addPreference( tr( "PREF_SHAPE_ANNOTATIONS" ), tabId );
2556 setPreferenceProperty( aShapeAnnGroupId, "columns", 2 );
2558 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_FONT_COLOR" ), aShapeAnnGroupId, LightApp_Preferences::Color, "Geometry", "shape_annotation_font_color" );
2559 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_COLOR" ), aShapeAnnGroupId, LightApp_Preferences::Color, "Geometry", "shape_annotation_line_color" );
2560 const int aShapeAnnFont =
2561 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_FONT" ), aShapeAnnGroupId, LightApp_Preferences::Font, "Geometry", "shape_annotation_font" );
2563 int aShapeAnnFontFeatures = QtxFontEdit::Family | QtxFontEdit::Size | QtxFontEdit::Bold | QtxFontEdit::Italic;
2564 setPreferenceProperty( aShapeAnnFont, "features", aShapeAnnFontFeatures );
2565 setPreferenceProperty( aShapeAnnFont, "mode", QtxFontEdit::Custom );
2566 setPreferenceProperty( aShapeAnnFont, "fonts", anOCCFonts );
2568 const int aShapeAnnLineWidth =
2569 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_WIDTH" ), aShapeAnnGroupId, LightApp_Preferences::IntSpin, "Geometry", "shape_annotation_line_width" );
2571 setPreferenceProperty( aShapeAnnLineWidth, "min", 1 );
2572 setPreferenceProperty( aShapeAnnLineWidth, "max", 5 );
2574 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_AUTOHIDE" ), aShapeAnnGroupId, LightApp_Preferences::Bool, "Geometry", "shape_annotation_autohide" );
2576 const int aShapeAnnLineStyle =
2577 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_STYLE" ), aShapeAnnGroupId, LightApp_Preferences::Selector, "Geometry", "shape_annotation_line_style" );
2579 QStringList aLineStyleList;
2580 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_SOLID") );
2581 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DASH") );
2582 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DOT") );
2583 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DOTDASH") );
2585 QList<QVariant> aLineStyleIds;
2586 aLineStyleIds.append(0);
2587 aLineStyleIds.append(1);
2588 aLineStyleIds.append(2);
2589 aLineStyleIds.append(3);
2591 setPreferenceProperty( aShapeAnnLineStyle, "strings", aLineStyleList );
2592 setPreferenceProperty( aShapeAnnLineStyle, "indexes", aLineStyleIds );
2594 // --------------------------------------------------------------------------
2595 // Isoline drawing preferences
2596 // --------------------------------------------------------------------------
2598 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2599 setPreferenceProperty( isoGroup, "columns", 2 );
2600 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2601 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2602 setPreferenceProperty( isoU, "min", 0 );
2603 setPreferenceProperty( isoU, "max", 100000 );
2604 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2605 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2606 setPreferenceProperty( isoV, "min", 0 );
2607 setPreferenceProperty( isoV, "max", 100000 );
2609 // Quantities with individual precision settings
2610 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2611 setPreferenceProperty( precGroup, "columns", 2 );
2613 const int nbQuantities = 8;
2614 int prec[nbQuantities], ii = 0;
2615 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2616 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2617 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2618 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2619 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2620 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2621 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2622 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2623 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2624 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2625 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2626 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2627 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2628 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2629 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2630 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2632 // Set property for precision value for spinboxes
2633 for ( ii = 0; ii < nbQuantities; ii++ ){
2634 setPreferenceProperty( prec[ii], "min", -14 );
2635 setPreferenceProperty( prec[ii], "max", 14 );
2636 setPreferenceProperty( prec[ii], "precision", 2 );
2639 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2640 setPreferenceProperty( VertexGroup, "columns", 2 );
2642 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2643 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2645 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2646 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2648 // Set property for default display mode
2649 QStringList aModesList;
2650 aModesList.append( tr("MEN_WIREFRAME") );
2651 aModesList.append( tr("MEN_SHADING") );
2652 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2653 aModesList.append( tr("MEN_TEXTURE") );
2655 QList<QVariant> anIndexesList;
2656 anIndexesList.append(0);
2657 anIndexesList.append(1);
2658 anIndexesList.append(2);
2659 anIndexesList.append(3);
2661 setPreferenceProperty( dispmode, "strings", aModesList );
2662 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2664 // Set property for top level display mode
2665 QStringList aTopModesList;
2666 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2667 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2668 aTopModesList.append( tr("MEN_WIREFRAME") );
2669 aTopModesList.append( tr("MEN_SHADING") );
2670 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2672 QList<QVariant> aTopIndexesList;
2673 aTopIndexesList.append(0);
2674 aTopIndexesList.append(1);
2675 aTopIndexesList.append(2);
2676 aTopIndexesList.append(3);
2677 aTopIndexesList.append(4);
2679 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2680 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2682 // Set property for step value for spinboxes
2683 setPreferenceProperty( step, "min", 1 );
2684 setPreferenceProperty( step, "max", 10000 );
2685 setPreferenceProperty( step, "precision", 3 );
2687 // Set property for trandparency value for spinboxes
2688 setPreferenceProperty( transparency, "min", 0 );
2689 setPreferenceProperty( transparency, "max", 100 );
2691 // Set property for deflection value for spinboxes
2692 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2693 setPreferenceProperty( defl, "max", 1.0 );
2694 setPreferenceProperty( defl, "step", 1.0e-04 );
2695 setPreferenceProperty( defl, "precision", 6 );
2697 // Set property for default material
2698 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2700 // Set property vertex marker type
2701 QList<QVariant> aMarkerTypeIndicesList;
2702 QList<QVariant> aMarkerTypeIconsList;
2704 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2705 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2706 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2707 aMarkerTypeIndicesList << (i-1);
2708 aMarkerTypeIconsList << pixmap;
2711 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2712 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2714 // Set property for vertex marker scale
2715 QList<QVariant> aMarkerScaleIndicesList;
2716 QStringList aMarkerScaleValuesList;
2718 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2719 aMarkerScaleIndicesList << iii;
2720 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2723 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2724 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2726 // Scalar bar for field step presentation
2727 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2728 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2730 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2731 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2732 setPreferenceProperty( sbXPosition, "min", 0 );
2733 setPreferenceProperty( sbXPosition, "max", 1 );
2734 setPreferenceProperty( sbXPosition, "step", 0.05 );
2736 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2737 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2738 setPreferenceProperty( sbYPosition, "min", 0 );
2739 setPreferenceProperty( sbYPosition, "max", 1 );
2740 setPreferenceProperty( sbYPosition, "step", 0.05 );
2742 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2743 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2744 setPreferenceProperty( sbWidth, "min", 0 );
2745 setPreferenceProperty( sbWidth, "max", 1 );
2746 setPreferenceProperty( sbWidth, "step", 0.05 );
2748 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2749 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2750 setPreferenceProperty( sbHeight, "min", 0 );
2751 setPreferenceProperty( sbHeight, "max", 1 );
2752 setPreferenceProperty( sbHeight, "step", 0.05 );
2754 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2755 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2756 setPreferenceProperty( sbTextHeight, "min", 6 );
2757 setPreferenceProperty( sbTextHeight, "max", 24 );
2758 setPreferenceProperty( sbTextHeight, "step", 1 );
2760 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2761 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2762 setPreferenceProperty( sbNbIntervals, "min", 2 );
2763 setPreferenceProperty( sbNbIntervals, "max", 64 );
2764 setPreferenceProperty( sbNbIntervals, "step", 1 );
2766 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2767 setPreferenceProperty( originGroup, "columns", 2 );
2769 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2770 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2771 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2772 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2774 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2775 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2777 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2778 setPreferenceProperty( operationsGroup, "columns", 2 );
2780 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2781 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2783 addPreference( tr( "PREF_HIDE_INPUT_OBJECT" ), operationsGroup,
2784 LightApp_Preferences::Bool, "Geometry", "hide_input_object" );
2786 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2788 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2790 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2791 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2793 QStringList aHierarchyTypeList;
2794 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2795 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2796 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2798 QList<QVariant> aHierarchyTypeIndexesList;
2799 aHierarchyTypeIndexesList.append(0);
2800 aHierarchyTypeIndexesList.append(1);
2801 aHierarchyTypeIndexesList.append(2);
2803 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2804 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2806 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2807 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2809 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2811 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2812 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2814 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2815 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2816 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2817 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2818 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2819 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2820 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2821 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2823 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2824 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2825 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2826 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2827 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2828 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2835 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2837 if (section == "Geometry") {
2838 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2839 if (param == QString("SettingsGeomStep")) {
2840 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2841 EmitSignalDefaultStepValueChanged(spin_step);
2843 else if (param == QString("toplevel_color")) {
2844 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2845 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2847 else if (param == QString("toplevel_dm")) {
2848 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2850 else if (param == QString("scalar_bar_x_position") ||
2851 param == QString("scalar_bar_y_position") ||
2852 param == QString("scalar_bar_width") ||
2853 param == QString("scalar_bar_height") ||
2854 param == QString("scalar_bar_text_height") ||
2855 param == QString("scalar_bar_nb_intervals")) {
2856 updateFieldColorScale();
2858 else if ( param == QString("dimensions_color") ||
2859 param == QString("dimensions_line_width") ||
2860 param == QString("dimensions_font") ||
2861 param == QString("dimensions_arrow_length") ||
2862 param == QString("dimensions_show_units") ||
2863 param == QString("dimensions_length_units") ||
2864 param == QString("dimensions_angle_units") ||
2865 param == QString("dimensions_use_text3d") ||
2866 param == QString("shape_annotation_font_color") ||
2867 param == QString("shape_annotation_line_color") ||
2868 param == QString("shape_annotation_font") ||
2869 param == QString("shape_annotation_line_width") ||
2870 param == QString("shape_annotation_autohide") ||
2871 param == QString("shape_annotation_line_style") ||
2872 param == QString("shape_annotation_line_style") ||
2873 param == QString("label_color") )
2875 SalomeApp_Application* anApp = getApp();
2881 GEOM_Displayer aDisplayer;
2883 ViewManagerList aVMs;
2884 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2885 ViewManagerList::Iterator anIt = aVMs.begin();
2886 for ( ; anIt != aVMs.end(); ++anIt )
2888 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2894 SALOME_ListIO aVisible;
2895 aViewer->GetVisible( aVisible );
2897 GEOMGUI_AnnotationMgr* anAnnotationMgr = GetAnnotationMgr();
2898 if ( anAnnotationMgr ) {
2899 SALOME_ListIteratorOfListIO anIter( aVisible );
2900 while ( anIter.More() ) {
2901 if ( anAnnotationMgr->isAnnotationEntry( anIter.Value()->getEntry() ) ) {
2902 aVisible.Remove( anIter );
2910 aDisplayer.Redisplay( aVisible, false, aViewer );
2912 if ( param == QString( "label_color" ) ) {
2913 ViewManagerList aVMsVTK;
2914 anApp->viewManagers( SVTK_Viewer::Type(), aVMsVTK );
2915 ViewManagerList::Iterator anIt = aVMsVTK.begin();
2916 for ( ; anIt != aVMsVTK.end(); ++anIt )
2918 SVTK_Viewer* aViewer = dynamic_cast<SVTK_Viewer*>( (*anIt)->getViewModel() );
2923 SALOME_ListIO aVisible;
2924 aViewer->GetVisible( aVisible );
2925 aDisplayer.Redisplay( aVisible, false, aViewer );
2928 aDisplayer.UpdateViewer();
2930 else if ( param.startsWith( "dependency_tree") )
2931 emit SignalDependencyTreeParamChanged( section, param );
2935 LightApp_Displayer* GeometryGUI::displayer()
2938 myDisplayer = new GEOM_Displayer();
2942 void GeometryGUI::setLocalSelectionMode(const int mode)
2944 myLocalSelectionMode = mode;
2947 int GeometryGUI::getLocalSelectionMode() const
2949 return myLocalSelectionMode;
2952 const char gSeparator = '_'; // character used to separate parameter names
2953 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2956 * \brief Store visual parameters
2958 * This method is called just before the study document is saved.
2959 * Store visual parameters in AttributeParameter attribute(s)
2961 void GeometryGUI::storeVisualParameters (int savePoint)
2963 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2964 if ( !appStudy || !appStudy->studyDS() )
2967 _PTR(Study) studyDS = appStudy->studyDS();
2969 // componentName is used for encoding of entries when storing them in IParameters
2970 std::string componentName = myComponentGeom->ComponentDataType();
2971 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2972 //if (!aSComponent) return;
2975 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2976 componentName.c_str(),
2978 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2980 QSet<QString> anEntriesToStoreShared;
2981 QList<SUIT_ViewManager*> lst;
2982 QList<SUIT_ViewManager*>::Iterator it;
2984 GEOMGUI_AnnotationMgr* aAnnotationMgr = GetAnnotationMgr();
2986 // main cycle to store parameters of displayed objects
2988 getApp()->viewManagers(lst);
2989 for (it = lst.begin(); it != lst.end(); it++) {
2990 SUIT_ViewManager* vman = *it;
2991 QString vType = vman->getType();
2992 SUIT_ViewModel* vmodel = vman->getViewModel();
2993 SALOME_View* aView = dynamic_cast<SALOME_View*>(vmodel);
2995 int aMgrId = vman->getGlobalId();
2996 // saving VTK actors properties
2997 QVector<SUIT_ViewWindow*> views = vman->getViews();
2998 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2999 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
3000 ObjMap::ConstIterator o_it = anObjects.begin();
3001 for (; o_it != anObjects.end(); o_it++) {
3002 const PropMap& aProps = o_it.value();
3004 //Check that object exists in the study
3005 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toUtf8().data() ) );
3006 if ( !obj || !(aProps.count() > 0))
3008 // entry is "encoded" = it does NOT contain component address, since it is a
3009 // subject to change on next component loading
3011 std::string entry = ip->encodeEntry(o_it.key().toUtf8().data(), componentName);
3013 _PTR(GenericAttribute) anAttr;
3014 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
3017 // remember entry of object to store shared GEOM properties
3018 // (e.g. dimension properties).
3019 if ( vType == OCCViewer_Viewer::Type() )
3021 anEntriesToStoreShared.insert( o_it.key() );
3024 QString param, occParam = vType;
3025 occParam += GEOM::sectionSeparator();
3026 occParam += QString::number(aMgrId);
3027 occParam += GEOM::sectionSeparator();
3029 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
3030 param = occParam + GEOM::propertyName( GEOM::Visibility );
3031 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
3034 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
3035 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
3036 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
3039 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
3040 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
3042 val << QString::number(c.redF());
3043 val << QString::number(c.greenF());
3044 val << QString::number(c.blueF());
3045 param = occParam + GEOM::propertyName( GEOM::Color );
3046 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
3049 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
3050 param = occParam + GEOM::propertyName( GEOM::Texture );
3051 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
3054 if (vType == SVTK_Viewer::Type()) {
3055 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
3056 param = occParam + GEOM::propertyName( GEOM::Opacity );
3057 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
3059 } else if (vType == SOCC_Viewer::Type()) {
3060 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
3061 param = occParam + GEOM::propertyName( GEOM::Transparency );
3062 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
3065 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
3066 param = occParam + GEOM::propertyName( GEOM::TopLevel );
3067 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
3071 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
3072 param = occParam + GEOM::propertyName( GEOM::NbIsos );
3073 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
3076 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
3077 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
3078 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
3081 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
3082 param = occParam + GEOM::propertyName( GEOM::Vertices );
3083 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
3086 if (aProps.contains(GEOM::propertyName( GEOM::ShowName ))) {
3087 param = occParam + GEOM::propertyName( GEOM::ShowName );
3088 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::ShowName )).toString().toStdString());
3091 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
3092 param = occParam + GEOM::propertyName( GEOM::Deflection );
3093 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
3096 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
3097 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
3098 param = occParam + GEOM::propertyName( GEOM::PointMarker );
3099 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
3102 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
3103 param = occParam + GEOM::propertyName( GEOM::Material );
3104 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
3107 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
3108 param = occParam + GEOM::propertyName( GEOM::LineWidth );
3109 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
3112 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
3113 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
3114 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
3117 if ( vType == SOCC_Viewer::Type() && aAnnotationMgr ) {
3118 std::string anAnnotationInfo = GetAnnotationMgr()->getDisplayedIndicesInfo(
3119 o_it.key().toUtf8().data(), dynamic_cast<SOCC_Viewer*>(aView) ).toStdString();
3120 if (!anAnnotationInfo.empty()) {
3121 param = occParam + "ShapeAnnotationVisibleItems";
3122 ip->setParameter(entry, param.toStdString(), anAnnotationInfo);
3125 } // object iterator
3127 } // for (viewManagers)
3129 // store shape annotation and dimension attributes of objects:
3130 // since the displayed object always persists in property map, we remember the object entries
3131 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
3132 const QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
3133 const QString aAnnotationParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::ShapeAnnotations );
3134 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
3135 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
3137 std::string aStudyEntry = (*aEntryIt).toUtf8().data();
3138 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName );
3140 // store dimension parameters
3141 GEOMGUI_DimensionProperty aDimensions( aStudyEntry );
3142 if ( aDimensions.GetNumber() != 0 ) {
3143 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toUtf8().data() );
3146 _PTR(SObject) aObj( studyDS->FindObjectID( aStudyEntry ) );
3147 const Handle(GEOMGUI_AnnotationAttrs) aShapeAnnAttr = GEOMGUI_AnnotationAttrs::FindAttributes( aObj );
3148 if ( !aShapeAnnAttr.IsNull() ) {
3149 ip->setParameter( aStoreEntry, aAnnotationParam.toStdString(), aShapeAnnAttr->ExportAsPropertyString().toUtf8().data() );
3155 * \brief Restore visual parameters
3157 * This method is called after the study document is opened.
3158 * Restore visual parameters from AttributeParameter attribute(s)
3160 void GeometryGUI::restoreVisualParameters (int savePoint)
3162 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
3163 if (!appStudy || !appStudy->studyDS())
3165 _PTR(Study) studyDS = appStudy->studyDS();
3167 // componentName is used for encoding of entries when storing them in IParameters
3168 std::string componentName = myComponentGeom->ComponentDataType();
3169 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
3170 //if (!aSComponent) return;
3173 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
3174 componentName.c_str(),
3176 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
3178 std::vector<std::string> entries = ip->getEntries();
3180 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
3182 // entry is a normal entry - it should be "decoded" (setting base address of component)
3183 QString entry (ip->decodeEntry(*entIt).c_str());
3185 // Check that the entry corresponds to a real object in the Study
3186 // as the object may be deleted or modified after the visual state is saved.
3187 _PTR(SObject) so = studyDS->FindObjectID(entry.toUtf8().data());
3188 if (!so) continue; //Skip the not existent entry
3190 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
3191 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
3193 std::vector<std::string>::iterator namesIt = paramNames.begin();
3194 std::vector<std::string>::iterator valuesIt = paramValues.begin();
3196 // actors are stored in a map after displaying of them for
3197 // quicker access in the future: map < viewID to actor >
3198 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
3199 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
3201 QString viewerTypStr;
3202 QString viewIndexStr;
3204 QVector<PropMap> aListOfMap;
3206 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
3208 // visual parameters are stored in strings as follows:
3209 // 1) ViewerType_ViewIndex_ParamName
3210 // 2) ViewerType_ParamName (shared for GEOM module)
3211 // '_' is used as separator and should not be used in viewer type or parameter names.
3212 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
3214 bool isShared = lst.size() == 2;
3215 bool isViewer = lst.size() == 3;
3216 if ( !isShared && !isViewer )
3221 // shared visual parameters
3224 QString aParamNameStr( lst[1] );
3225 QString aValuesStr( (*valuesIt).c_str() );
3227 // shared dimension properties are stored as attribute
3228 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
3230 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
3231 aDimensionProp.SaveToAttribute( entry.toUtf8().data() );
3233 else if ( aParamNameStr == GEOM::propertyName( GEOM::ShapeAnnotations ) )
3235 Handle(GEOMGUI_AnnotationAttrs) anAttr =
3236 GEOMGUI_AnnotationAttrs::FindOrCreateAttributes( so, appStudy );
3238 anAttr->ImportFromPropertyString( aValuesStr );
3244 // per view visual parameters
3245 viewerTypStr = lst[0];
3246 viewIndexStr = lst[1];
3247 QString paramNameStr = lst[2];
3250 viewIndex = viewIndexStr.toUInt(&ok);
3251 if (!ok) // bad conversion of view index to integer
3254 if ((viewIndex + 1) > aListOfMap.count()) {
3255 aListOfMap.resize(viewIndex + 1);
3258 QString val((*valuesIt).c_str());
3259 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
3260 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
3261 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
3262 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
3263 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
3264 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
3265 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
3266 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
3267 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
3268 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
3269 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
3270 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
3271 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
3272 QStringList rgb = val.split(GEOM::subSectionSeparator());
3273 if (rgb.count() == 3) {
3274 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
3275 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
3277 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
3278 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
3279 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
3280 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
3281 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
3282 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
3283 } else if (paramNameStr == GEOM::propertyName( GEOM::ShowName )) {
3284 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::ShowName ), val == "true" || val == "1");
3285 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3286 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3287 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3288 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3289 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3290 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3291 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3292 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3293 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3294 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3295 } else if (paramNameStr == "ShapeAnnotationVisibleItems") {
3296 aListOfMap[viewIndex].insert( "ShapeAnnotationVisibleItems", val);
3299 } // for names/parameters iterator
3301 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3303 for (int index = 0; index < aListOfMap.count(); index++) {
3304 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
3306 //Get Visibility property of the current PropMap
3307 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3308 SUIT_ViewManager* vman = lst.at(index);
3309 SUIT_ViewModel* vmodel = vman->getViewModel();
3310 SALOME_View* aView = dynamic_cast<SALOME_View*>(vmodel);
3311 displayer()->Display(entry, true, aView);
3313 if ( vmodel->getType() == SOCC_Viewer::Type() ) {
3314 PropMap& aProps = aListOfMap[index];
3315 if ( aProps.contains( "ShapeAnnotationVisibleItems" ) ) {
3316 SOCC_Viewer* aSOCCView = dynamic_cast<SOCC_Viewer*>( aView );
3317 GetAnnotationMgr()->setDisplayedIndicesInfo( entry, aSOCCView, aProps["ShapeAnnotationVisibleItems"].toString() );
3322 } // for entries iterator
3324 // update all VTK and OCC views
3325 QList<SUIT_ViewManager*> lst;
3326 getApp()->viewManagers(lst);
3327 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3328 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3331 if (vmodel->getType() == SVTK_Viewer::Type()) {
3332 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3333 vtkView->getRenderer()->ResetCameraClippingRange();
3336 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3337 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3338 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3344 if ( myTextTreeWdg ) {
3345 myTextTreeWdg->updateTree();
3349 // Compute current name mode of the viewer
3350 void UpdateNameMode( SalomeApp_Application* app )
3352 bool isMode = false;
3353 SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() );
3354 SUIT_ViewWindow* viewWindow = app->desktop()->activeWindow();
3355 GEOM_Displayer displayer;
3356 int aMgrId = viewWindow->getViewManager()->getGlobalId();
3358 SALOME_View* window = displayer.GetActiveView();
3359 if ( !window ) return;
3361 SALOME_ListIO anIOlst;
3362 window->GetVisible( anIOlst );
3364 for ( SALOME_ListIteratorOfListIO It( anIOlst ); It.More(); It.Next() ) {
3365 Handle( SALOME_InteractiveObject ) io = It.Value();
3366 QVariant v = aStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::ShowName ), QVariant() );
3367 bool isIONameMode = v.isValid() ? v.toBool() : false;
3371 viewWindow->setProperty( "NameMode", isMode );
3374 void GeometryGUI::onViewAboutToShow()
3376 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3377 QAction* a = action( GEOMOp::OpSwitchVectors );
3378 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3379 QAction* aNameAction = action( GEOMOp::OpSwitchName );
3381 a->setEnabled(true);
3382 bool vmode = window->property("VectorsMode").toBool();
3383 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3384 aVerticesAction->setEnabled(true);
3385 vmode = window->property("VerticesMode").toBool();
3386 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3387 UpdateNameMode( getApp() );
3388 aNameAction->setEnabled(true);
3389 vmode = window->property("NameMode").toBool();
3390 aNameAction->setText ( vmode == 1 ? tr( "MEN_NAME_MODE_OFF" ) : tr("MEN_NAME_MODE_ON") );
3392 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3393 a->setEnabled(false);
3394 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3395 aVerticesAction->setEnabled(false);
3396 aNameAction->setText ( tr("MEN_NAME_MODE_ON") );
3397 aNameAction->setEnabled(false);
3402 \brief Return action by id
3403 \param id identifier of the action
3406 QAction* GeometryGUI::getAction(const int id) {
3411 \brief GEOM module message handler
3413 This method can be re-implemented in the subclasses.
3414 This is a GEOM module message handler.
3416 \param msg the message received.
3418 void GeometryGUI::message(const QString& msg)
3421 QStringList data = msg.split("/");
3422 const int nbStrings = data.count();
3424 if (nbStrings > 0) {
3425 if (data[0] == "modified") {
3427 QString anIOR = nbStrings > 1 ? data[1] : QString();
3429 if ( anIOR.isEmpty() ) {
3433 // Get the geom object.
3434 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3436 // Clear the shape buffer
3437 GeometryGUI::ClearShapeBuffer (anObj);
3443 \brief Clears the shape buffer.
3445 This is a static method. It clears the shape buffer.
3447 \param theObj the object
3449 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3451 if ( CORBA::is_nil( theObj ) )
3454 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3455 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3456 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3458 SalomeApp_Application* app =
3459 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3460 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3465 _PTR(Study) aStudy = appStudy->studyDS();
3470 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3474 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3475 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3476 _PTR(GenericAttribute) anAttr;
3477 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3478 _PTR(AttributeIOR) anIOR ( anAttr );
3479 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3480 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3486 \brief Returns the object from IOR.
3488 This is a static method. It returns the object from its IOR.
3490 \param IOR object IOR
3491 \return GEOM object.
3493 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3495 GEOM::GEOM_Object_var geomObj;
3496 if ( !IOR.isEmpty() ) {
3497 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3498 ( IOR.toLatin1().constData() );
3499 if ( !CORBA::is_nil( corbaObj ) )
3500 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3502 return geomObj._retn();
3506 \brief Returns IOR of the object.
3508 This is a static method. It returns the object's IOR.
3510 \param object the GEOM object.
3511 \return object's IOR.
3513 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3516 if ( !CORBA::is_nil( object ) ) {
3517 CORBA::String_var anIOR =
3518 SalomeApp_Application::orb()->object_to_string( object );
3525 \brief Check if this object is can't be renamed in place
3527 This method can be re-implemented in the subclasses.
3528 Return true in case if object isn't reference or component (module root).
3530 \param entry column id
3531 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3533 bool GeometryGUI::renameAllowed( const QString& entry) const {
3535 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3536 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3537 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3539 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3543 Rename object by entry.
3544 \param entry entry of the object
3545 \param name new name of the object
3546 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3548 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3550 bool result = false;
3552 SalomeApp_Application* app =
3553 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3554 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3559 _PTR(Study) aStudy = appStudy->studyDS();
3564 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3566 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3570 _PTR(SObject) obj ( aStudy->FindObjectID(qUtf8Printable(entry)) );
3571 _PTR(GenericAttribute) anAttr;
3573 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3574 _PTR(AttributeName) aName (anAttr);
3576 aName->SetValue( name.toUtf8().data() ); // rename the SObject
3577 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3578 if (!CORBA::is_nil(anObj)) {
3579 anObj->SetName( name.toUtf8().data() ); // Rename the corresponding GEOM_Object
3580 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3581 emit SignalTextTreeRenameObject( entry );
3589 void GeometryGUI::updateMaterials()
3591 LightApp_Preferences* pref = preferences();
3593 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3594 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3595 if ( !materials.contains( currentMaterial ) )
3596 // user material set as default in the preferences, might be removed
3597 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3599 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3601 setPreferenceProperty( prefItem->id(),
3602 "strings", materials );
3603 prefItem->retrieve();
3609 \brief Check if the module allows "drag" operation of its objects.
3611 Overloaded from LightApp_Module class.
3613 This function is a part of the general drag-n-drop mechanism.
3614 The goal of this function is to check data object passed as a parameter
3615 and decide if it can be dragged or no.
3617 \param what data object being tested for drag operation
3618 \return \c true if module allows dragging of the specified object
3619 \sa isDropAccepted(), dropObjects()
3621 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3623 // we allow dragging object under root and object from folder
3624 int aLevel = what->level();
3625 bool anObjectInFolder = false;
3627 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3629 _PTR(SObject) aSO = dataObj->object();
3631 _PTR(GenericAttribute) anAttr;
3632 _PTR(SObject) aFatherSO = SalomeApp_Application::getStudy()->GetUseCaseBuilder()->GetFather( aSO );
3633 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3634 _PTR(AttributeLocalID) aLocalID( anAttr );
3635 anObjectInFolder = aLocalID->Value() == 999;
3640 return aLevel == 2 || anObjectInFolder;
3644 \brief Check if the module allows "drop" operation on the given object.
3646 Overloaded from LightApp_Module class.
3648 This function is a part of the general drag-n-drop mechanism.
3649 The goal of this function is to check data object passed as a parameter
3650 and decide if it can be used as a target for the "drop" operation.
3651 The processing of the drop operation itself is done in the dropObjects() function.
3653 \param where target data object
3654 \return \c true if module supports dropping on the \a where data object
3655 \sa isDraggable(), dropObjects()
3657 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3659 // we allow dropping into folder and top-level GEOM object
3660 int aLevel = where->level();
3661 bool isFolder = false;
3663 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3665 _PTR(SObject) aSO = dataObj->object();
3667 _PTR(GenericAttribute) anAttr;
3668 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3669 _PTR(AttributeLocalID) aLocalID( anAttr );
3670 isFolder = aLocalID->Value() == 999;
3675 return aLevel == 1 || isFolder;
3679 \brief Complete drag-n-drop operation.
3681 Overloaded from LightApp_Module class.
3683 This function is a part of the general drag-n-drop mechanism.
3684 Its goal is to handle dropping of the objects being dragged according
3685 to the chosen operation (move). The dropping is performed in the
3686 context of the parent data object \a where and the \a row (position in the
3687 children index) at which the data should be dropped. If \a row is equal to -1,
3688 this means that objects are added to the end of the children list.
3690 \param what objects being dropped
3691 \param where target data object
3692 \param row child index at which the drop operation is performed
3693 \param action drag-n-drop operation (Qt::DropAction) - move
3695 \sa isDraggable(), isDropAccepted()
3697 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3698 const int row, Qt::DropAction action )
3700 if (action != Qt::CopyAction && action != Qt::MoveAction)
3701 return; // unsupported action
3703 // get parent object
3704 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3705 if ( !dataObj ) return; // wrong parent
3706 _PTR(SObject) parentObj = dataObj->object();
3708 // Find the current Study and StudyBuilder
3709 _PTR(Study) aStudy = SalomeApp_Application::getStudy();
3710 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3711 // collect all parents of the target node
3712 QStringList parentIDs;
3713 _PTR(SObject) parent = parentObj;
3714 while( !parent->IsNull() ) {
3715 parentIDs << parent->GetID().c_str();
3716 parent = aUseCaseBuilder->GetFather(parent);
3719 // collect objects being dropped
3720 GEOM::object_list_var objects = new GEOM::object_list();
3721 objects->length( what.count() );
3723 for ( int i = 0; i < what.count(); i++ ) {
3724 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3725 if ( !dataObj ) continue; // skip wrong objects
3726 _PTR(SObject) sobj = dataObj->object();
3727 // check that dropped object is not a parent of target object
3728 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3729 return; // it's not allowed to move node into it's child
3731 objects[i] = _CAST(SObject, sobj)->GetSObject();
3734 objects->length( count );
3736 // call engine function
3737 GetGeomGen()->Move( objects.in(), // what
3738 _CAST(SObject, parentObj)->GetSObject(), // where
3741 // update Object browser
3742 getApp()->updateObjectBrowser( false );
3745 void GeometryGUI::emitDimensionsUpdated( QString entry )
3747 emit DimensionsUpdated( entry );
3750 void GeometryGUI::emitAnnotationsUpdated( QString entry )
3752 emit SignalAnnotationsUpdated( entry );