1 // Copyright (C) 2007-2021 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>
90 #include "SALOME_KernelServices.hxx"
92 #include <SALOMEDS_SObject.hxx>
94 #include <QtxFontEdit.h>
95 #include <QtxInfoPanel.h>
106 #include <QSignalMapper>
107 #include <QFontDatabase>
109 #include <AIS_ListOfInteractive.hxx>
110 #include <AIS_ListIteratorOfListOfInteractive.hxx>
111 #include <Prs3d_Drawer.hxx>
112 #include <Prs3d_IsoAspect.hxx>
113 #include <Aspect_TypeOfMarker.hxx>
114 #include <OSD_SharedLibrary.hxx>
115 #include <NCollection_DataMap.hxx>
117 #include <TColStd_HArray1OfByte.hxx>
118 #include <TColStd_SequenceOfHAsciiString.hxx>
120 #include <utilities.h>
122 #include <vtkCamera.h>
123 #include <vtkRenderer.h>
125 #include <Standard_Failure.hxx>
126 #include <Standard_ErrorHandler.hxx>
128 #include <Font_SystemFont.hxx>
129 #include <Font_FontMgr.hxx>
130 #include <TCollection_HAsciiString.hxx>
132 #include "GEOM_version.h"
133 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
136 Standard_EXPORT CAM_Module* createModule() {
137 return new GeometryGUI();
140 Standard_EXPORT char* getModuleVersion() {
141 return (char*)GEOM_VERSION_STR;
145 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
147 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
149 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
150 if (CORBA::is_nil(myComponentGeom))
152 return GeometryGUI::myComponentGeom;
155 bool GeometryGUI::InitGeomGen()
158 if ( CORBA::is_nil( myComponentGeom ) ) return false;
162 //=======================================================================
163 // function : ClientSObjectToObject
165 //=======================================================================
166 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
168 _PTR(GenericAttribute) anAttr;
169 CORBA::Object_var anObj;
171 std::string aValue = theSObject->GetIOR();
172 if (strcmp(aValue.c_str(), "") != 0) {
173 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
174 anObj = anORB->string_to_object(aValue.c_str());
177 INFOS("ClientSObjectToObject - Unknown exception has occurred!!!");
179 return anObj._retn();
181 //=================================================================================
182 // function : IsInGeomComponent
183 // purpose : Check if an SObject is under GEOM component
184 //=================================================================================
185 bool GeometryGUI::IsInGeomComponent( _PTR(SObject) sobject )
188 if ( _PTR(SComponent) aComp = sobject->GetFatherComponent() )
189 return aComp->ComponentDataType() == "GEOM";
193 //=======================================================================
194 // function : GetStudy
196 //=======================================================================
197 SALOMEDS::Study_var GeometryGUI::getStudyServant()
199 SALOME_NamingService_Abstract *aNamingService = SalomeApp_Application::namingService();
200 CORBA::Object_var aStudyObject = aNamingService->Resolve("/Study");
201 SALOMEDS::Study_var aStudy = SALOMEDS::Study::_narrow(aStudyObject);
202 return aStudy._retn();
205 void GeometryGUI::Modified (bool theIsUpdateActions)
207 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
208 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
209 appStudy->Modified();
210 if ( theIsUpdateActions )
211 app->updateActions();
216 //=======================================================================
217 // function : GeometryGUI::GeometryGUI()
218 // purpose : Constructor
219 //=======================================================================
220 GeometryGUI::GeometryGUI() : SalomeApp_Module( "GEOM" )
222 if ( CORBA::is_nil( myComponentGeom ) )
224 SALOME_NamingService_Abstract *ns = SalomeApp_Application::namingService();
225 Engines::EngineComponent_var comp = SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
226 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
229 myActiveDialogBox = 0;
231 gp_Pnt origin = gp_Pnt(0., 0., 0.);
232 gp_Dir direction = gp_Dir(0., 0., 1.);
233 myWorkingPlane = gp_Ax3(origin, direction);
236 myLocalSelectionMode = GEOM_ALLOBJECTS;
238 myCreationInfoWdg = 0;
242 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ), Qt::UniqueConnection );
244 Q_INIT_RESOURCE( GEOMGUI );
247 //=======================================================================
248 // function : GeometryGUI::~GeometryGUI()
249 // purpose : Destructor
250 //=======================================================================
251 GeometryGUI::~GeometryGUI()
253 while (!myOCCSelectors.isEmpty())
254 delete myOCCSelectors.takeFirst();
256 while (!myVTKSelectors.isEmpty())
257 delete myVTKSelectors.takeFirst();
259 qDeleteAll(myGUIMap);
262 //=======================================================================
263 // function : GeometryGUI::getLibrary()
264 // purpose : get or load GUI library by name [ internal ]
265 //=======================================================================
266 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
267 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
269 if ( !myGUIMap.contains( libraryName ) ) {
270 // try to load library if it is not loaded yet
272 QString dirs = Qtx::getenv( "PATH" );
273 #elif defined(__APPLE__)
274 QString dirs = Qtx::getenv( "DYLD_LIBRARY_PATH" );
276 QString dirs = Qtx::getenv( "LD_LIBRARY_PATH" );
284 if ( !dirs.isEmpty() ) {
285 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
286 QListIterator<QString> it( dirList ); it.toBack();
287 while ( it.hasPrevious() ) {
288 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
290 OSD_SharedLibrary aSharedLibrary( fi.fileName().toUtf8().constData() );
291 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
293 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
294 continue; // continue search further
296 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
297 if ( osdF != NULL ) {
298 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
299 GEOMGUI* libGUI = (*func)( this );
301 myGUIMap[ libraryName ] = libGUI;
302 break; // found and loaded!
309 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
312 //=======================================================================
313 // function : GeometryGUI::getPluginLibrary()
314 // purpose : get or load GUI Plugin library by name [ internal ]
315 //=======================================================================
316 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
317 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
319 if ( !myGUIMap.contains( libraryName ) ) {
320 // try to load library if it is not loaded yet
323 QString dirs = Qtx::getenv( "PATH" );
324 #elif defined(__APPLE__)
325 QString dirs = Qtx::getenv( "DYLD_LIBRARY_PATH" );
327 QString dirs = Qtx::getenv( "LD_LIBRARY_PATH" );
335 if ( !dirs.isEmpty() ) {
336 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
337 QListIterator<QString> it( dirList ); it.toBack();
338 while ( it.hasPrevious() ) {
339 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
341 OSD_SharedLibrary aSharedLibrary( fi.fileName().toUtf8().constData() );
342 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
344 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
345 continue; // continue search further
347 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
348 if ( osdF != NULL ) {
349 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
350 GEOMPluginGUI* libGUI = (*func)( this );
352 myGUIMap[ libraryName ] = libGUI;
353 break; // found and loaded!
360 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
363 //=======================================================================
364 // function : GeometryGUI::ActiveWorkingPlane()
365 // purpose : Activate Working Plane View
366 //=======================================================================
367 void GeometryGUI::ActiveWorkingPlane()
369 gp_Dir DZ = myWorkingPlane.Direction();
370 gp_Dir DY = myWorkingPlane.YDirection();
372 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
373 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
374 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
377 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
379 Handle(V3d_View) view3d = vw->getViewPort()->getView();
381 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
382 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
386 else if ( ViewVTK ) {
387 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
389 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
391 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
392 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
393 camera->SetFocalPoint(0,0,0);
400 //=======================================================================
401 // function : GeometryGUI::SetActiveDialogBox()
402 // purpose : Set active dialog box
403 //=======================================================================
404 GEOMGUI_AnnotationMgr* GeometryGUI::GetAnnotationMgr()
406 if ( !myAnnotationMgr )
407 myAnnotationMgr = new GEOMGUI_AnnotationMgr( getApp() );
408 return myAnnotationMgr;
411 //=======================================================================
412 // function : GeometryGUI::SetActiveDialogBox()
413 // purpose : Set active dialog box
414 //=======================================================================
415 GEOMGUI_TextTreeWdg* GeometryGUI::GetTextTreeWdg() const
417 return myTextTreeWdg;
420 //=======================================================================
421 // function : GeometryGUI::SetActiveDialogBox()
422 // purpose : Set active dialog box
423 //=======================================================================
424 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
426 myActiveDialogBox = (QDialog*)aDlg;
429 //=======================================================================
430 // function : GeometryGUI::EmitSignalDeactivateDialog()
431 // purpose : Emit a signal to deactivate the active dialog Box
432 //=======================================================================
433 void GeometryGUI::EmitSignalDeactivateDialog()
435 emit SignalDeactivateActiveDialog();
438 //=======================================================================
439 // function : GeometryGUI::EmitSignalCloseAllDialogs()
440 // purpose : Emit a signal to close all non modal dialogs box
441 //=======================================================================
442 void GeometryGUI::EmitSignalCloseAllDialogs()
444 emit SignalCloseAllDialogs();
447 //=======================================================================
448 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
449 // purpose : Emit a signal to inform that default real spin box step has
451 //=======================================================================
452 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
454 emit SignalDefaultStepValueChanged(newVal);
457 //=======================================================================
458 // function : GeometryGUI::OnGUIEvent()
459 // purpose : common slot for all menu/toolbar actions
460 //=======================================================================
461 void GeometryGUI::OnGUIEvent()
463 const QObject* obj = sender();
464 if ( !obj || !obj->inherits( "QAction" ) )
466 int id = actionId((QAction*)obj);
471 //=======================================================================
472 // function : GeometryGUI::OnGUIEvent()
473 // purpose : manage all events on GUI [static]
474 //=======================================================================
475 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
477 SUIT_Application* anApp = application();
479 SUIT_Desktop* desk = anApp->desktop();
481 // check type of the active viewframe
482 SUIT_ViewWindow* window = desk->activeWindow();
483 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
484 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
485 #ifndef DISABLE_GRAPHICSVIEW
486 bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() );
490 // if current viewframe is not of OCC and not of VTK type - return immediately
491 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
492 QList<int> NotViewerDependentCommands;
493 NotViewerDependentCommands << GEOMOp::OpDelete
495 << GEOMOp::OpShowOnly
496 << GEOMOp::OpShowOnlyChildren
497 << GEOMOp::OpDiscloseChildren
498 << GEOMOp::OpConcealChildren
499 << GEOMOp::OpUnpublishObject
500 << GEOMOp::OpPublishObject
501 << GEOMOp::OpPointMarker
502 << GEOMOp::OpCreateFolder
503 << GEOMOp::OpSortChildren;
504 if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) {
505 // activate OCC viewer
506 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
509 // fix for IPAL9103, point 2
510 if ( CORBA::is_nil( GetGeomGen() ) ) {
511 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
516 // find corresponding GUI library
518 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
519 createOriginAndBaseVectors(); // internal operation
521 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
522 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
523 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
524 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
525 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
526 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
527 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
528 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
529 case GEOMOp::OpDelete: // MENU EDIT - DELETE
530 #ifndef DISABLE_PYCONSOLE
531 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
533 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
534 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
535 case GEOMOp::OpColor: // POPUP MENU - COLOR
536 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
537 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
538 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
539 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
540 case GEOMOp::OpIsos: // POPUP MENU - ISOS
541 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
542 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
543 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
544 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
545 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
546 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
547 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
548 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
549 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
550 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
551 case GEOMOp::OpMaterialMenu: // POPUP MENU - MATERIAL PROPERTIES (sub-menu)
552 case GEOMOp::OpPredefMaterial: // POPUP MENU - MATERIAL PROPERTIES (sub-menu) - <SOME MATERIAL>
553 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES (sub-menu) - CUSTOM...
554 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
555 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
556 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
557 case GEOMOp::OpClsBringToFront: //
558 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
559 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
560 #ifndef DISABLE_GRAPHICSVIEW
561 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
563 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
564 libName = "GEOMToolsGUI";
566 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
567 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
568 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
569 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
570 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
571 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
572 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
573 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
574 case GEOMOp::OpHide: // MENU VIEW - ERASE
575 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
576 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
577 case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE
578 case GEOMOp::OpSwitchName: // MENU VIEW - VERTICES MODE
579 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
580 case GEOMOp::OpShading: // POPUP MENU - SHADING
581 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
582 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
583 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
584 case GEOMOp::OpVertices: // POPUP MENU - VERTICES
585 case GEOMOp::OpShowName: // POPUP MENU - SHOW NAME
586 libName = "DisplayGUI";
588 case GEOMOp::OpPoint: // MENU BASIC - POINT
589 case GEOMOp::OpLine: // MENU BASIC - LINE
590 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
591 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
592 case GEOMOp::OpArc: // MENU BASIC - ARC
593 case GEOMOp::OpVector: // MENU BASIC - VECTOR
594 case GEOMOp::OpPlane: // MENU BASIC - PLANE
595 case GEOMOp::OpCurve: // MENU BASIC - CURVE
596 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
597 libName = "BasicGUI";
599 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
600 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
601 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
602 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
603 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
604 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
605 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
606 libName = "PrimitiveGUI";
608 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
609 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
610 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
611 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
612 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
613 case GEOMOp::OpThickness: // MENU GENERATION - THICKNESS
614 libName = "GenerationGUI";
616 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
617 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
618 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
619 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
620 case GEOMOp::OpSurfaceFromFace: // MENU ENTITY - SURFACE FROM FACE
622 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
624 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
625 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
626 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
627 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
628 case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR
629 libName = "EntityGUI";
631 case GEOMOp::OpEdge: // MENU BUILD - EDGE
632 case GEOMOp::OpWire: // MENU BUILD - WIRE
633 case GEOMOp::OpFace: // MENU BUILD - FACE
634 case GEOMOp::OpShell: // MENU BUILD - SHELL
635 case GEOMOp::OpSolid: // MENU BUILD - SOLID
636 case GEOMOp::OpCompound: // MENU BUILD - COMPOUND
637 libName = "BuildGUI";
639 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
640 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
641 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
642 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
643 libName = "BooleanGUI";
645 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
646 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
647 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
648 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
649 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
650 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
651 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
652 case GEOMOp::OpProjOnCyl: // MENU TRANSFORMATION - PROJECTION ON CYLINDER
653 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
654 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
655 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
656 case GEOMOp::OpExtension: // MENU TRANSFORMATION - EXTENSION
657 libName = "TransformationGUI";
659 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
660 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
661 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
662 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
663 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
664 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
665 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
666 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
667 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
668 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
669 case GEOMOp::OpTransferData: // MENU OPERATION - TRANSFER DATA
670 case GEOMOp::OpExtraction: // MENU OPERATION - EXTRACT AND REBUILD
671 libName = "OperationGUI";
673 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
674 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
675 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
676 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
677 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
678 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
679 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
680 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
681 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
682 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
683 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
684 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
685 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
686 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
687 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
688 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
689 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
690 case GEOMOp::OpInspectObj: // MENU REPAIR - INSPECT OBJECT
691 libName = "RepairGUI";
693 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
694 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
695 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
696 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
697 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
698 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
699 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
700 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
701 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
702 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
703 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
704 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
705 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
706 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
707 case GEOMOp::OpFastCheckInters: // MENU MEASURE - FAST CHECK INTERSECTIONS
708 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
709 case GEOMOp::OpAnnotation: // MENU MEASURE - ANNOTATION
710 case GEOMOp::OpEditAnnotation: // POPUP MENU - EDIT ANNOTATION
711 case GEOMOp::OpDeleteAnnotation: // POPUP MENU - DELETE ANNOTATION
712 #ifndef DISABLE_PLOT2DVIEWER
713 case GEOMOp::OpShapeStatistics: // MENU MEASURE - SHAPE STATISTICS
715 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
716 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
717 case GEOMOp::OpShowAllAnnotations: // POPUP MENU - SHOW ALL ANNOTATIONS
718 case GEOMOp::OpHideAllAnnotations: // POPUP MENU - HIDE ALL ANNOTATIONS
719 libName = "MeasureGUI";
721 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
722 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
723 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
724 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
725 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
726 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
727 libName = "GroupGUI";
729 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
730 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
731 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
732 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
733 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
734 libName = "BlocksGUI";
736 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
737 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
738 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
739 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
740 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
741 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
742 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
743 //libName = "AdvancedGUI";
746 if (myPluginActions.contains(id)) {
747 libName = myPluginActions[id].first;
749 GEOMPluginGUI* library = 0;
750 if ( !libName.isEmpty() ) {
752 libName = libName + ".dll";
753 #elif defined(__APPLE__)
754 libName = QString( "lib" ) + libName + ".dylib";
756 libName = QString( "lib" ) + libName + ".so";
758 library = getPluginLibrary( libName );
761 // call method of corresponding GUI library
763 //QString action ("%1");
764 //action = action.arg(id);
766 //if( !theParam.isValid() )
767 library->OnGUIEvent( myPluginActions[id].second, desk );
769 // library->OnGUIEvent( id, desk, theParam);
772 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
774 updateCreationInfo();
780 GEOMGUI* library = 0;
781 if ( !libName.isEmpty() ) {
783 libName = libName + ".dll";
784 #elif defined(__APPLE__)
785 libName = QString( "lib" ) + libName + ".dylib";
787 libName = QString( "lib" ) + libName + ".so";
789 library = getLibrary( libName );
792 // call method of corresponding GUI library
794 if( !theParam.isValid() )
795 library->OnGUIEvent( id, desk );
797 library->OnGUIEvent( id, desk, theParam);
800 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
802 updateCreationInfo();
805 //=================================================================================
806 // function : GeometryGUI::activateOperation()
808 //=================================================================================
809 bool GeometryGUI::activateOperation( int actionId )
811 OnGUIEvent(actionId);
815 //=================================================================================
816 // function : GeometryGUI::activateOperation()
818 //=================================================================================
819 bool GeometryGUI::activateOperation( const QString& actionId )
823 int id = actionId.toInt(&isOk);
830 //=================================================================================
831 // function : GeometryGUI::activateOperation()
833 //=================================================================================
834 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
838 QString pluginLib = plugin;
839 // TODO: if <plugin> is a plugin name, find plugin library name
840 if (myPluginLibs.contains(plugin))
841 pluginLib = myPluginLibs[plugin];
843 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
844 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
845 const PluginAction& anAction = actionsIter.value();
846 if (anAction.first == pluginLib && anAction.second == actionId) {
847 // activate operation
848 OnGUIEvent(actionsIter.key());
856 //=================================================================================
857 // function : GeometryGUI::OnKeyPress()
858 // purpose : Called when any key is pressed by user [static]
859 //=================================================================================
860 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
862 if ( !application() )
864 foreach ( GEOMGUI* lib, myGUIMap )
865 lib->OnKeyPress( e, application()->desktop(), w );
868 //=================================================================================
869 // function : GeometryGUI::OnMouseMove()
870 // purpose : Manages mouse move events [static]
871 //=================================================================================
872 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
874 if ( !application() )
876 foreach ( GEOMGUI* lib, myGUIMap )
877 lib->OnMouseMove( e, application()->desktop(), w );
880 //=================================================================================
881 // function : GeometryGUI::OnMouseRelease()
882 // purpose : Manages mouse release events [static]
883 //=================================================================================
884 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
886 if ( !application() )
888 foreach ( GEOMGUI* lib, myGUIMap )
889 lib->OnMouseRelease( e, application()->desktop(), w );
892 //=================================================================================
893 // function : GeometryGUI::OnMousePress()
894 // purpose : Manage mouse press events [static]
895 //=================================================================================
896 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
898 if ( !application() )
900 foreach ( GEOMGUI* lib, myGUIMap )
901 lib->OnMousePress( e, application()->desktop(), w );
904 //=======================================================================
905 // function : createGeomAction
907 //=======================================================================
908 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
909 const int accel, const bool toggle, const QString& shortcutAction )
911 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
912 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
913 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
915 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
917 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
918 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
920 application()->desktop(),
922 this, SLOT( OnGUIEvent() ),
926 //=======================================================================
927 // function : createOriginAndBaseVectors
929 //=======================================================================
930 void GeometryGUI::createOriginAndBaseVectors()
932 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
933 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
935 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
939 if ( !CORBA::is_nil( GetGeomGen() ) ) {
940 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations();
941 if ( !aBasicOperations->_is_nil() ) {
942 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
943 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
944 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
945 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
946 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
947 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
949 GetGeomGen()->PublishInStudy( SALOMEDS::SObject::_nil(), anOrigin, "O" );
950 GetGeomGen()->PublishInStudy( SALOMEDS::SObject::_nil(), anOX, "OX" );
951 GetGeomGen()->PublishInStudy( SALOMEDS::SObject::_nil(), anOY, "OY" );
952 GetGeomGen()->PublishInStudy( SALOMEDS::SObject::_nil(), anOZ, "OZ" );
953 anOrigin->UnRegister();
957 aBasicOperations->UnRegister();
959 getApp()->updateObjectBrowser( true );
965 //=======================================================================
966 // function : GeometryGUI::initialize()
967 // purpose : Called when GEOM module is created
968 //=======================================================================
969 void GeometryGUI::initialize( CAM_Application* app )
971 SalomeApp_Module::initialize( app );
973 // ----- create actions --------------
975 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
977 createGeomAction( GEOMOp::OpPoint, "POINT" );
978 createGeomAction( GEOMOp::OpLine, "LINE" );
979 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
980 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
981 createGeomAction( GEOMOp::OpArc, "ARC" );
982 createGeomAction( GEOMOp::OpCurve, "CURVE" );
983 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
984 createGeomAction( GEOMOp::OpVector, "VECTOR" );
985 createGeomAction( GEOMOp::OpPlane, "PLANE" );
986 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
987 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
988 createGeomAction( GEOMOp::OpSurfaceFromFace, "SURFACE_FROM_FACE" );
990 createGeomAction( GEOMOp::OpBox, "BOX" );
991 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
992 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
993 createGeomAction( GEOMOp::OpTorus, "TORUS" );
994 createGeomAction( GEOMOp::OpCone, "CONE" );
995 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
996 createGeomAction( GEOMOp::OpDisk, "DISK" );
998 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
999 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
1000 createGeomAction( GEOMOp::OpFilling, "FILLING" );
1001 createGeomAction( GEOMOp::OpPipe, "PIPE" );
1002 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
1003 createGeomAction( GEOMOp::OpThickness, "THICKNESS" );
1005 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
1006 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
1007 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
1008 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
1009 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
1011 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
1012 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
1014 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
1016 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
1017 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
1019 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
1020 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
1021 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
1023 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
1025 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
1026 createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" );
1028 createGeomAction( GEOMOp::OpEdge, "EDGE" );
1029 createGeomAction( GEOMOp::OpWire, "WIRE" );
1030 createGeomAction( GEOMOp::OpFace, "FACE" );
1031 createGeomAction( GEOMOp::OpShell, "SHELL" );
1032 createGeomAction( GEOMOp::OpSolid, "SOLID" );
1033 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
1035 createGeomAction( GEOMOp::OpFuse, "FUSE" );
1036 createGeomAction( GEOMOp::OpCommon, "COMMON" );
1037 createGeomAction( GEOMOp::OpCut, "CUT" );
1038 createGeomAction( GEOMOp::OpSection, "SECTION" );
1040 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
1041 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
1042 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
1043 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
1044 createGeomAction( GEOMOp::OpScale, "SCALE" );
1045 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
1046 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
1047 createGeomAction( GEOMOp::OpProjOnCyl, "PROJ_ON_CYL" );
1048 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
1049 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
1050 createGeomAction( GEOMOp::OpExtension, "EXTENSION" );
1052 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
1053 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
1054 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
1055 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
1056 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
1057 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
1058 createGeomAction( GEOMOp::OpTransferData, "TRANSFER_DATA" );
1059 createGeomAction( GEOMOp::OpExtraction, "EXTRACTION" );
1060 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
1061 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
1062 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
1063 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
1065 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
1066 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
1067 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
1069 createGeomAction( GEOMOp::OpSewing, "SEWING" );
1070 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
1071 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
1072 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
1073 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
1074 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
1075 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
1076 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
1077 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
1078 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
1079 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
1080 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
1081 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1082 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1083 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1084 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1085 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1086 createGeomAction( GEOMOp::OpInspectObj, "INSPECT_OBJECT" );
1088 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1089 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1090 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1091 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1092 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1093 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1094 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1095 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1096 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1097 createGeomAction( GEOMOp::OpAnnotation, "ANNOTATION" );
1098 createGeomAction( GEOMOp::OpEditAnnotation, "EDIT_ANNOTATION" );
1099 createGeomAction( GEOMOp::OpDeleteAnnotation, "DELETE_ANNOTATION" );
1101 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1102 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1103 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1104 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1105 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1106 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1107 createGeomAction( GEOMOp::OpFastCheckInters, "FAST_CHECK_INTERSECTIONS" );
1108 #ifndef DISABLE_PLOT2DVIEWER
1109 createGeomAction( GEOMOp::OpShapeStatistics, "SHAPE_STATISTICS" );
1112 #ifndef DISABLE_PYCONSOLE
1113 #ifdef _DEBUG_ // PAL16821
1114 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1118 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1119 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1120 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1121 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1122 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1123 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1124 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1125 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1126 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1127 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1128 createGeomAction( GEOMOp::OpSwitchName, "NAME_MODE");
1129 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1130 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1131 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1132 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1133 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1134 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1135 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1136 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1137 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1138 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1139 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1140 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1141 createGeomAction( GEOMOp::OpHide, "ERASE" );
1143 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1144 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1145 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1146 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1147 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1148 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1149 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1150 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1151 createGeomAction( GEOMOp::OpShowName, "POP_SHOW_NAME", "", 0, true );
1152 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1153 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1154 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1155 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1156 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1157 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1158 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1159 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1160 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1161 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1162 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1163 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1164 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1165 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1166 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1167 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1168 createGeomAction( GEOMOp::OpMaterialMenu, "POP_MATERIAL_PROPERTIES");
1169 action(GEOMOp::OpMaterialMenu)->setMenu( new QMenu() );
1170 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1171 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1172 #ifndef DISABLE_GRAPHICSVIEW
1173 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1175 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1176 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1177 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1178 createGeomAction( GEOMOp::OpShowAllAnnotations, "POP_SHOW_ALL_ANNOTATIONS" );
1179 createGeomAction( GEOMOp::OpHideAllAnnotations, "POP_HIDE_ALL_ANNOTATIONS" );
1181 // Create actions for increase/decrease transparency shortcuts
1182 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1183 "Geometry:Increase transparency");
1184 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1185 "Geometry:Decrease transparency");
1187 // Create actions for increase/decrease number of isolines
1188 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1189 "Geometry:Increase number of isolines");
1190 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1191 "Geometry:Decrease number of isolines");
1193 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1194 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1195 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1196 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1197 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@//
1199 // ---- create menus --------------------------
1201 /*int fileId =*/ createMenu( tr( "MEN_FILE" ), -1, -1 );
1203 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1204 createMenu( GEOMOp::OpDelete, editId, -1 );
1206 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1208 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1209 createMenu( GEOMOp::OpPoint, basicId, -1 );
1210 createMenu( GEOMOp::OpLine, basicId, -1 );
1211 createMenu( GEOMOp::OpCircle, basicId, -1 );
1212 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1213 createMenu( GEOMOp::OpArc, basicId, -1 );
1214 createMenu( GEOMOp::OpCurve, basicId, -1 );
1215 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1216 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1217 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1218 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1219 createMenu( GEOMOp::OpSurfaceFromFace, basicId, -1 );
1220 createMenu( separator(), basicId, -1 );
1221 createMenu( GEOMOp::OpVector, basicId, -1 );
1222 createMenu( GEOMOp::OpPlane, basicId, -1 );
1223 createMenu( GEOMOp::OpLCS, basicId, -1 );
1224 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1226 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1227 createMenu( GEOMOp::OpBox, primId, -1 );
1228 createMenu( GEOMOp::OpCylinder, primId, -1 );
1229 createMenu( GEOMOp::OpSphere, primId, -1 );
1230 createMenu( GEOMOp::OpTorus, primId, -1 );
1231 createMenu( GEOMOp::OpCone, primId, -1 );
1232 createMenu( GEOMOp::OpRectangle, primId, -1 );
1233 createMenu( GEOMOp::OpDisk, primId, -1 );
1234 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1236 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1237 createMenu( GEOMOp::OpPrism, genId, -1 );
1238 createMenu( GEOMOp::OpRevolution, genId, -1 );
1239 createMenu( GEOMOp::OpFilling, genId, -1 );
1240 createMenu( GEOMOp::OpPipe, genId, -1 );
1241 createMenu( GEOMOp::OpPipePath, genId, -1 );
1242 createMenu( GEOMOp::OpThickness, genId, -1 );
1244 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1245 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1246 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@//
1248 createMenu( separator(), newEntId, -1 );
1250 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1251 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1252 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1253 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1254 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1255 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1257 createMenu( separator(), newEntId, -1 );
1259 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1260 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1261 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1263 createMenu( separator(), newEntId, -1 );
1265 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1266 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1267 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1268 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1269 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1271 createMenu( separator(), newEntId, -1 );
1273 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1275 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1276 createMenu( GEOMOp::OpEdge, buildId, -1 );
1277 createMenu( GEOMOp::OpWire, buildId, -1 );
1278 createMenu( GEOMOp::OpFace, buildId, -1 );
1279 createMenu( GEOMOp::OpShell, buildId, -1 );
1280 createMenu( GEOMOp::OpSolid, buildId, -1 );
1281 createMenu( GEOMOp::OpCompound, buildId, -1 );
1283 createMenu( separator(), newEntId, -1 );
1285 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1287 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1290 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1292 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1293 createMenu( GEOMOp::OpFuse, boolId, -1 );
1294 createMenu( GEOMOp::OpCommon, boolId, -1 );
1295 createMenu( GEOMOp::OpCut, boolId, -1 );
1296 createMenu( GEOMOp::OpSection, boolId, -1 );
1298 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1299 createMenu( GEOMOp::OpTranslate, transId, -1 );
1300 createMenu( GEOMOp::OpRotate, transId, -1 );
1301 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1302 createMenu( GEOMOp::OpMirror, transId, -1 );
1303 createMenu( GEOMOp::OpScale, transId, -1 );
1304 createMenu( GEOMOp::OpOffset, transId, -1 );
1305 createMenu( GEOMOp::OpProjection, transId, -1 );
1306 createMenu( GEOMOp::OpExtension, transId, -1 );
1307 createMenu( GEOMOp::OpProjOnCyl, transId, -1 );
1308 createMenu( separator(), transId, -1 );
1309 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1310 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1312 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1313 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1314 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1315 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1317 createMenu( separator(), operId, -1 );
1319 createMenu( GEOMOp::OpPartition, operId, -1 );
1320 createMenu( GEOMOp::OpArchimede, operId, -1 );
1321 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1322 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1323 createMenu( GEOMOp::OpTransferData, operId, -1 );
1324 createMenu( GEOMOp::OpExtraction, operId, -1 );
1326 createMenu( separator(), operId, -1 );
1328 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1329 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1330 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1331 createMenu( GEOMOp::OpChamfer, operId, -1 );
1332 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1333 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1335 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1336 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1337 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1338 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1339 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1340 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1341 createMenu( GEOMOp::OpSewing, repairId, -1 );
1342 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1343 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1344 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1345 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1346 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1347 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1348 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1349 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1350 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1351 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1352 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1354 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1355 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1356 createMenu( GEOMOp::OpProperties, measurId, -1 );
1357 createMenu( separator(), measurId, -1 );
1358 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1359 createMenu( GEOMOp::OpInertia, measurId, -1 );
1360 createMenu( GEOMOp::OpNormale, measurId, -1 );
1361 createMenu( separator(), measurId, -1 );
1362 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1363 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1364 createMenu( separator(), measurId, -1 );
1366 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1367 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1368 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1369 createMenu( GEOMOp::OpAngle, dimId, -1 );
1370 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1372 createMenu( GEOMOp::OpAnnotation, measurId, -1 );
1374 createMenu( separator(), measurId, -1 );
1375 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1376 createMenu( separator(), measurId, -1 );
1377 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1378 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1379 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1380 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1381 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1382 createMenu( GEOMOp::OpFastCheckInters, measurId, -1 );
1383 createMenu( GEOMOp::OpInspectObj, measurId, -1 );
1384 #ifndef DISABLE_PLOT2DVIEWER
1385 createMenu( GEOMOp::OpShapeStatistics, measurId, -1 );
1388 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1389 #ifndef DISABLE_PYCONSOLE
1390 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1391 createMenu( separator(), toolsId, -1 );
1392 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1396 createMenu( separator(), toolsId, -1 );
1397 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1398 createMenu( separator(), toolsId, -1 );
1400 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1401 createMenu( separator(), viewId, -1 );
1403 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1404 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1405 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1406 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1407 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1408 createMenu( separator(), dispmodeId, -1 );
1409 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1410 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1411 createMenu( GEOMOp::OpSwitchName, dispmodeId, -1 );
1413 createMenu( separator(), viewId, -1 );
1414 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1415 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1416 createMenu( separator(), viewId, -1 );
1417 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1418 createMenu( separator(), viewId, -1 );
1422 because of these items are accessible through object browser and viewers
1423 we have removed they from main menu
1425 createMenu( GEOMOp::OpShow, viewId, -1 );
1426 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1427 createMenu( GEOMOp::OpHide, viewId, -1 );
1430 // ---- create toolbars --------------------------
1432 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1433 createTool( GEOMOp::OpPoint, basicTbId );
1434 createTool( GEOMOp::OpLine, basicTbId );
1435 createTool( GEOMOp::OpCircle, basicTbId );
1436 createTool( GEOMOp::OpEllipse, basicTbId );
1437 createTool( GEOMOp::OpArc, basicTbId );
1438 createTool( GEOMOp::OpCurve, basicTbId );
1439 createTool( GEOMOp::OpVector, basicTbId );
1440 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1441 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1442 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1443 createTool( GEOMOp::OpIsoline, basicTbId );
1444 createTool( GEOMOp::OpSurfaceFromFace, basicTbId );
1445 createTool( GEOMOp::OpPlane, basicTbId );
1446 createTool( GEOMOp::OpLCS, basicTbId );
1447 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1449 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1450 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1451 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1453 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1454 createTool( GEOMOp::OpBox, primTbId );
1455 createTool( GEOMOp::OpCylinder, primTbId );
1456 createTool( GEOMOp::OpSphere, primTbId );
1457 createTool( GEOMOp::OpTorus, primTbId );
1458 createTool( GEOMOp::OpCone, primTbId );
1459 createTool( GEOMOp::OpRectangle, primTbId );
1460 createTool( GEOMOp::OpDisk, primTbId );
1461 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1463 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1464 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1465 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1467 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1468 createTool( GEOMOp::OpFuse, boolTbId );
1469 createTool( GEOMOp::OpCommon, boolTbId );
1470 createTool( GEOMOp::OpCut, boolTbId );
1471 createTool( GEOMOp::OpSection, boolTbId );
1473 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1474 createTool( GEOMOp::OpPrism, genTbId );
1475 createTool( GEOMOp::OpRevolution, genTbId );
1476 createTool( GEOMOp::OpFilling, genTbId );
1477 createTool( GEOMOp::OpPipe, genTbId );
1478 createTool( GEOMOp::OpPipePath, genTbId );
1479 createTool( GEOMOp::OpThickness, genTbId );
1481 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1482 createTool( GEOMOp::OpTranslate, transTbId );
1483 createTool( GEOMOp::OpRotate, transTbId );
1484 createTool( GEOMOp::OpChangeLoc, transTbId );
1485 createTool( GEOMOp::OpMirror, transTbId );
1486 createTool( GEOMOp::OpScale, transTbId );
1487 createTool( GEOMOp::OpOffset, transTbId );
1488 createTool( GEOMOp::OpProjection, transTbId );
1489 createTool( GEOMOp::OpExtension, transTbId );
1490 createTool( GEOMOp::OpProjOnCyl, transTbId );
1491 createTool( separator(), transTbId );
1492 createTool( GEOMOp::OpMultiTranslate, transTbId );
1493 createTool( GEOMOp::OpMultiRotate, transTbId );
1495 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1496 createTool( GEOMOp::OpExplode, operTbId );
1497 createTool( GEOMOp::OpPartition, operTbId );
1498 createTool( GEOMOp::OpArchimede, operTbId );
1499 createTool( GEOMOp::OpShapesOnShape, operTbId );
1500 createTool( GEOMOp::OpSharedShapes, operTbId );
1501 createTool( GEOMOp::OpTransferData, operTbId );
1502 createTool( GEOMOp::OpExtraction, operTbId );
1504 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1505 createTool( GEOMOp::OpFillet1d, featTbId );
1506 createTool( GEOMOp::OpFillet2d, featTbId );
1507 createTool( GEOMOp::OpFillet3d, featTbId );
1508 createTool( GEOMOp::OpChamfer, featTbId );
1509 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1510 createTool( GEOMOp::OpExtrudedCut, featTbId );
1512 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1513 createTool( GEOMOp::OpEdge, buildTbId );
1514 createTool( GEOMOp::OpWire, buildTbId );
1515 createTool( GEOMOp::OpFace, buildTbId );
1516 createTool( GEOMOp::OpShell, buildTbId );
1517 createTool( GEOMOp::OpSolid, buildTbId );
1518 createTool( GEOMOp::OpCompound, buildTbId );
1520 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1521 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1522 createTool( GEOMOp::OpProperties, measureTbId );
1523 createTool( GEOMOp::OpCenterMass, measureTbId );
1524 createTool( GEOMOp::OpInertia, measureTbId );
1525 createTool( GEOMOp::OpNormale, measureTbId );
1526 createTool( separator(), measureTbId );
1527 createTool( GEOMOp::OpBoundingBox, measureTbId );
1528 createTool( GEOMOp::OpMinDistance, measureTbId );
1529 createTool( GEOMOp::OpAngle, measureTbId );
1530 createTool( GEOMOp::OpAnnotation, measureTbId );
1531 createTool( GEOMOp::OpTolerance , measureTbId );
1532 createTool( separator(), measureTbId );
1533 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1534 createTool( GEOMOp::OpFreeFaces, measureTbId );
1535 createTool( separator(), measureTbId );
1536 createTool( GEOMOp::OpWhatIs, measureTbId );
1537 createTool( GEOMOp::OpCheckShape, measureTbId );
1538 createTool( GEOMOp::OpCheckCompound, measureTbId );
1539 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1540 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1541 createTool( GEOMOp::OpFastCheckInters, measureTbId );
1543 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1544 createTool( GEOMOp::OpPictureImport, picturesTbId );
1546 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1549 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1550 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1551 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@//
1553 // ---- create popup menus --------------------------
1555 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1556 QString clientOCC = "(client='OCCViewer')";
1557 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1558 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1560 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1561 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1562 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1563 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1565 QString notGEOMShape = "(not ($component={'GEOM'}) and ($displayer={'Geometry'}))";
1567 QString autoColorPrefix =
1568 "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') and type='Shape' and selcount=1";
1570 QtxPopupMgr* mgr = popupMgr();
1572 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1573 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1574 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1575 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1576 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1577 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1578 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1579 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1581 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1582 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1583 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1584 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1585 mgr->insert( separator(), -1, -1 ); // -----------
1587 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1588 QString bringRule = clientOCCorOB + " and ($displayer={'Geometry'}) and isFolder=false and (selcount>0) and isOCC=true";
1589 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1590 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1591 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1592 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1593 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1594 mgr->insert( separator(), -1, -1 ); // -----------
1595 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1596 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1597 //mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1598 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1599 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1600 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1601 // mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1602 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1603 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1604 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1605 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1606 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1607 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1608 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1609 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1610 mgr->insert( separator(), dispmodeId, -1 );
1611 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1612 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1613 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1614 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1615 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1616 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1617 mgr->insert( action( GEOMOp::OpShowName ), dispmodeId, -1 ); // show name
1618 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1619 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK + " and isNameMode", QtxPopupMgr::ToggleRule );
1620 mgr->insert( separator(), -1, -1 ); // -----------
1622 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1623 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($displayer={'Geometry'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1624 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1625 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1626 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1627 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1628 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1629 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1630 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1631 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and ($type in {'Shape' 'Group' 'Field' 'FieldStep'} or " + notGEOMShape + ") and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1633 // material properties
1634 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1635 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'}) and matMenu=false", QtxPopupMgr::VisibleRule );
1636 mgr->insert( action( GEOMOp::OpMaterialMenu ), -1, -1 );
1637 mgr->setRule( action( GEOMOp::OpMaterialMenu ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'}) and matMenu=true", QtxPopupMgr::VisibleRule );
1640 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1641 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1643 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1644 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1645 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1647 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1648 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule );
1650 mgr->insert( separator(), -1, -1 ); // -----------
1651 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1652 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1653 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1654 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1655 mgr->insert( separator(), -1, -1 ); // -----------
1657 mgr->insert( action( GEOMOp::OpEditAnnotation ), -1, -1 ); // edit annotation
1658 mgr->setRule( action( GEOMOp::OpEditAnnotation ), clientOCC + " and annotationsCount=1", QtxPopupMgr::VisibleRule );
1659 mgr->insert( action( GEOMOp::OpDeleteAnnotation ), -1, -1 ); // delete annotation
1660 mgr->setRule( action( GEOMOp::OpDeleteAnnotation ), clientOCC + " and annotationsCount>0", QtxPopupMgr::VisibleRule );
1661 mgr->insert( separator(), -1, -1 ); // -----------
1663 //QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1664 // onlyComponent = "((type='Component') and selcount=1)",
1665 // rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1666 // types = "'Shape' 'Group' 'FieldStep'";
1668 QString canDisplay = "($displayer={'Geometry'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1669 onlyComponent = "((type='Component') and ($component={'GEOM'}) and selcount=1)",
1670 rule = canDisplay + "and ((($type in {%1} or " + notGEOMShape + ") and( %2 )) or " + onlyComponent + ")",
1671 types = "'Shape' 'Group' 'FieldStep'";
1673 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1674 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1676 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1677 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1679 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1680 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1682 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1684 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1685 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1686 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1687 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1688 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1689 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1690 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1691 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1692 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1693 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1694 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1695 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1696 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1697 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1698 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1699 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1700 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1701 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1702 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1703 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1704 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1705 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1706 mgr->insert( separator(), selectonlyId, -1);
1707 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1708 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1709 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1710 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1711 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1712 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1713 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1715 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1717 mgr->insert( separator(), -1, -1 ); // -----------
1718 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1719 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1720 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1721 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1722 mgr->insert( action( GEOMOp::OpShowAllAnnotations ), -1, -1 ); // show all annotations
1723 mgr->setRule( action( GEOMOp::OpShowAllAnnotations ), aDimensionRule.arg( "hasHiddenAnnotations" ), QtxPopupMgr::VisibleRule );
1724 mgr->insert( action( GEOMOp::OpHideAllAnnotations ), -1, -1 ); // hide all annotations
1725 mgr->setRule( action( GEOMOp::OpHideAllAnnotations ), aDimensionRule.arg( "hasVisibleAnnotations" ), QtxPopupMgr::VisibleRule );
1727 mgr->insert( separator(), -1, -1 ); // -----------
1728 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1729 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1731 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1732 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1734 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1735 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1737 mgr->insert( separator(), -1, -1 ); // -----------
1738 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1739 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1741 mgr->insert( separator(), -1, -1 ); // -----------
1742 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1743 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1745 #ifndef DISABLE_GRAPHICSVIEW
1746 mgr->insert( separator(), -1, -1 ); // -----------
1747 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1748 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1751 mgr->insert( separator(), -1, -1 ); // -----------
1752 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1753 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1755 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1757 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1759 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1760 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1761 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1764 // create plugin actions and menus
1768 //=======================================================================
1769 // function : GeometryGUI::addPluginActions()
1771 //=======================================================================
1772 void GeometryGUI::addPluginActions()
1775 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1776 if (!resMgr) return;
1778 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1779 if (!appStudy) return;
1781 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1783 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1785 int id = GEOMOp::OpLastOperationID; // TODO?
1788 GEOMUtils::PluginInfo::const_iterator it;
1789 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1790 // bind action lib and label to its ID for activateOperation() method proper work
1791 GEOMUtils::PluginData pdata = (*it);
1792 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1793 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1794 std::list<GEOMUtils::ActionData>::const_iterator ait;
1795 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1796 GEOMUtils::ActionData adata = (*ait);
1799 if ( !adata.icon.empty() )
1800 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1802 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1803 QString actionName = smenus.last();
1804 actionName = actionName.toUpper().prepend( "MEN_" );
1805 smenus.removeLast();
1807 // path to action in toolbar
1808 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1809 QString actionTool = stools.last();
1810 actionTool = actionTool.toUpper().prepend( "TOP_" );
1811 stools.removeLast();
1813 QString actionStat = adata.statusText.c_str();
1814 actionStat = actionStat.toUpper().prepend( "STB_" );
1816 createAction( id, // ~ adata.label
1817 tr( actionTool.toLatin1().constData() ),
1819 tr( actionName.toLatin1().constData() ),
1820 tr( actionStat.toLatin1().constData() ),
1821 QKeySequence( tr( adata.accel.c_str() ) ),
1822 application()->desktop(),
1824 this, SLOT( OnGUIEvent() ),
1825 QString() /*shortcutAction*/ );
1828 foreach ( QString subMenu, smenus ) {
1829 QStringList subMenuList = subMenu.split( ":" );
1830 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1831 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1832 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1834 createMenu( id, menuId, -1 );
1836 if ( !stools.isEmpty() ) {
1837 QString subTool = stools[0];
1838 subTool = subTool.toUpper().prepend( "TOOL_" );
1839 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1840 createTool(id, toolId);
1843 // add action id to map
1844 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1845 myPluginActions[id] = anAction;
1854 QString wrap(const QString& text, const QString& tag)
1855 { return QString("<%1>%2</%3>").arg(tag).arg(text).arg(tag);}
1858 //=======================================================================
1859 // function : GeometryGUI::activateModule()
1860 // purpose : Called when GEOM module is activated
1861 //=======================================================================
1862 bool GeometryGUI::activateModule( SUIT_Study* study )
1864 // Fill in: Help Panel
1865 SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( application() );
1866 app->infoPanel()->setTitle(tr("INFO_WELCOME_TO_GEOM"));
1868 int gb = app->infoPanel()->addGroup(tr("INFO_GRP_CREATE_MODEL"));
1871 items << wrap(tr("INFO_VERTICES"), "li")
1872 << wrap(tr("INFO_EDGES"), "li")
1873 << wrap(tr("INFO_WIRES"), "li")
1874 << wrap(tr("INFO_FACES"), "li")
1875 << wrap(tr("INFO_SHELLS"), "li")
1876 << wrap(tr("INFO_SOLIDS"), "li");
1877 lab = tr("INFO_BOTTOM_UP_CONSTRUCTION") + ":" + wrap(items.join(""), "ul");
1880 items << wrap(tr("INFO_BOX"), "li")
1881 << wrap(tr("INFO_CYLINDER"), "li")
1882 << wrap(tr("INFO_CONE"), "li")
1883 << wrap("...", "li");
1884 lab = lab + tr("INFO_PRIMITIVES") + ":" + wrap(items.join(""), "ul");
1887 lab = lab + tr("INFO_BOOLEANS") + "<br/>";
1888 lab = lab + tr("INFO_TRANSFORMATIONS");
1890 app->infoPanel()->addLabel(lab, gb);
1892 gb = app->infoPanel()->addGroup(tr("INFO_GRP_IMPORT_MODEL"));
1893 items << wrap("BREP", "li")
1894 << wrap("STEP", "li")
1895 << wrap("IGES", "li")
1896 << wrap("STL", "li")
1897 << wrap("XAO", "li");
1898 lab = tr("INFO_AVAILABLE_FORMATS") + ":" + wrap(items.join(""), "ul");
1901 app->infoPanel()->addLabel(lab, gb);
1904 if ( CORBA::is_nil( myComponentGeom ) )
1907 bool res = SalomeApp_Module::activateModule( study );
1911 setMenuShown( true );
1912 setToolShown( true );
1914 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1915 PyGILState_STATE gstate = PyGILState_Ensure();
1916 PyObject* pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1917 if ( !pluginsmanager ) {
1922 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1923 tr("MEN_NEW_ENTITY").toUtf8().data(),
1924 tr("GEOM_PLUGINS_OTHER").toUtf8().data());
1929 PyGILState_Release(gstate);
1930 // end of GEOM plugins loading
1932 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1933 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ), Qt::UniqueConnection );
1935 // Reset actions accelerator keys
1936 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1938 GUIMap::Iterator it;
1939 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1940 it.value()->activate( application()->desktop() );
1942 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1944 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ), Qt::UniqueConnection );
1945 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ), Qt::UniqueConnection );
1946 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ), Qt::UniqueConnection );
1948 if ( !myCreationInfoWdg )
1949 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1950 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1951 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1953 if ( !myTextTreeWdg ) {
1954 myTextTreeWdg = new GEOMGUI_TextTreeWdg( getApp() );
1955 new GEOMGUI_TextTreeSelector( myTextTreeWdg, GetAnnotationMgr(), getApp()->selectionMgr() );
1958 getApp()->insertDockWindow( myTextTreeWdg->getWinID(), myTextTreeWdg );
1959 getApp()->placeDockWindow( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
1962 SALOME_ListIO selected;
1963 sm->selectedObjects( selected );
1964 sm->clearSelected();
1966 SUIT_ViewManager* vm;
1967 ViewManagerList OCCViewManagers, VTKViewManagers;
1969 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1970 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1971 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1972 onViewManagerAdded(vm);
1974 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1975 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1976 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1977 onViewManagerAdded(vm);
1979 sm->setSelectedObjects( selected, true ); //NPAL 19674
1981 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1983 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ), Qt::UniqueConnection );
1985 // 0020836 (Basic vectors and origin)
1986 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1987 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1988 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1990 _PTR(Study) studyDS = appStudy->studyDS();
1992 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1993 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1994 createOriginAndBaseVectors();
1999 Py_XDECREF(pluginsmanager);
2004 //=======================================================================
2005 // function : GeometryGUI::deactivateModule()
2006 // purpose : Called when GEOM module is deactivated
2007 //=======================================================================
2008 bool GeometryGUI::deactivateModule( SUIT_Study* study )
2010 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
2012 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
2014 setMenuShown( false );
2015 setToolShown( false );
2017 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
2018 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
2020 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
2022 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
2023 //disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
2024 if ( myCreationInfoWdg ) {
2025 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
2026 myCreationInfoWdg = 0;
2028 if ( myTextTreeWdg ) {
2029 getApp()->removeDockWindow( myTextTreeWdg->getWinID() );
2030 disconnect( application(), 0, myTextTreeWdg, 0 );
2034 EmitSignalCloseAllDialogs();
2036 GUIMap::Iterator it;
2037 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
2038 it.value()->deactivate();
2040 // Unset actions accelerator keys
2041 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
2043 qDeleteAll(myOCCSelectors);
2044 myOCCSelectors.clear();
2045 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
2047 qDeleteAll(myVTKSelectors);
2048 myVTKSelectors.clear();
2049 selMrg->setEnabled( true, SVTK_Viewer::Type() );
2051 return SalomeApp_Module::deactivateModule( study );
2054 //=======================================================================
2055 // function : onWindowActivated()
2056 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
2057 //=======================================================================
2058 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
2063 const bool ViewOCC = ( win->getViewManager() ? win->getViewManager()->getType() == OCCViewer_Viewer::Type() : false );
2064 //const bool ViewVTK = ( win->getViewManager() ? win->getViewManager()->getType() == SVTK_Viewer::Type() : false );
2066 // disable non-OCC viewframe menu commands
2067 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
2068 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
2069 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
2070 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
2071 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
2072 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
2073 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
2075 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
2076 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
2077 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
2078 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
2080 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
2083 void GeometryGUI::windows( QMap<int, int>& mappa ) const
2085 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
2086 mappa.insert( SalomeApp_Application::WT_InfoPanel, Qt::RightDockWidgetArea );
2087 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
2088 #ifndef DISABLE_PYCONSOLE
2089 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
2091 if ( myCreationInfoWdg )
2092 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
2093 if ( myTextTreeWdg )
2094 mappa.insert( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
2097 void GeometryGUI::viewManagers( QStringList& lst ) const
2099 lst.append( OCCViewer_Viewer::Type() );
2102 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
2104 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
2106 qDebug( "connect" );
2107 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
2108 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
2109 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
2110 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
2111 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
2112 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
2113 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
2114 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
2116 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2117 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
2119 // disable OCC selectors
2120 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
2121 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2122 while ( itOCCSel.hasNext() )
2123 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2124 sr->setEnabled(true);
2126 else if ( vm->getType() == SVTK_Viewer::Type() )
2128 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2129 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
2131 // disable VTK selectors
2132 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
2133 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2134 while ( itVTKSel.hasNext() )
2135 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2136 sr->setEnabled(true);
2140 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
2142 SUIT_ViewModel* viewer = vm->getViewModel();
2143 if ( vm->getType() == OCCViewer_Viewer::Type() )
2145 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2146 while ( itOCCSel.hasNext() )
2147 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2148 if ( sr->viewer() == viewer )
2150 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
2154 if ( vm->getType() == SVTK_Viewer::Type() )
2156 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2157 while ( itVTKSel.hasNext() )
2158 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2159 if ( sr->viewer() == viewer )
2161 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2165 SOCC_Viewer* aSOCCView = dynamic_cast<SOCC_Viewer*>(viewer);
2167 GetAnnotationMgr()->RemoveView( aSOCCView );
2171 //================================================================================
2173 * \brief Slot called when selection changed. Shows creation info of a selected object
2175 //================================================================================
2177 void GeometryGUI::updateCreationInfo()
2179 if ( myCreationInfoWdg )
2180 myCreationInfoWdg->clear();
2182 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2183 // if ( !myCreationInfoWdg->isVisible() )
2186 // look for a sole selected GEOM_Object
2187 GEOM::GEOM_BaseObject_var geomObj;
2189 SALOME_ListIO selected;
2190 getApp()->selectionMgr()->selectedObjects( selected );
2192 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2193 SALOME_ListIteratorOfListIO selIt( selected );
2194 for ( ; selIt.More(); selIt.Next() )
2196 Handle(SALOME_InteractiveObject) io = selIt.Value();
2197 if ( !io->hasEntry() ) continue;
2198 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2199 if ( !GeometryGUI::IsInGeomComponent( sobj )) continue;
2200 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2201 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2202 if ( !gobj->_is_nil() )
2204 if ( !geomObj->_is_nil() )
2205 return; // several GEOM objects selected
2209 if ( geomObj->_is_nil() ) return;
2211 // pass creation info of geomObj to myCreationInfoWdg
2213 if ( myCreationInfoWdg ) {
2215 GEOM::CreationInformationSeq_var info;
2218 info = geomObj->GetCreationInformation();
2222 myCreationInfoWdg->setInfo( info );
2226 void GeometryGUI::onAutoBringToFront()
2228 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2229 if( !isAutoBringToFront )
2232 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2233 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2236 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2237 if (!appStudy) return;
2239 GEOM_Displayer displayer;
2241 SALOME_View* window = displayer.GetActiveView();
2242 if ( !window ) return;
2244 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2246 SALOME_ListIO selected;
2247 getApp()->selectionMgr()->selectedObjects( selected );
2248 if (!myTopLevelIOList.IsEmpty())
2250 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2252 Handle( SALOME_InteractiveObject ) io = It.Value();
2253 bool isSelected = false;
2254 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2256 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2257 if( io->isSame( sel_io ) )
2260 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2262 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2263 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2268 myTopLevelIOList.Assign(selected);
2269 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2271 Handle( SALOME_InteractiveObject ) io = It.Value();
2272 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2273 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2276 displayer.UpdateViewer();
2277 GeometryGUI::Modified();
2280 void GeometryGUI::updateFieldColorScale()
2282 GEOM_Displayer aDisplayer;
2283 aDisplayer.UpdateColorScale();
2286 QString GeometryGUI::engineIOR() const
2288 if ( !CORBA::is_nil( GetGeomGen() ) )
2289 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2293 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture (int theId, int& theWidth, int& theHeight)
2295 theWidth = theHeight = 0;
2296 Handle(TColStd_HArray1OfByte) aTexture;
2298 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations();
2299 if ( !aInsOp->_is_nil() ) {
2300 CORBA::Long aWidth, aHeight;
2301 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2302 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2304 theHeight = aHeight;
2306 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2308 for ( CORBA::ULong i = 0; i < aStream->length(); i++)
2309 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2315 LightApp_Selection* GeometryGUI::createSelection() const
2317 return new GEOMGUI_Selection();
2320 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2322 SalomeApp_Module::contextMenuPopup( client, menu, title );
2324 getApp()->selectionMgr()->selectedObjects( lst );
2326 // Update submenu for predefined materials
2327 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2328 QMenu* matMenu = action( GEOMOp::OpMaterialMenu )->menu();
2330 QSignalMapper* signalMapper = new QSignalMapper( menu );
2333 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2334 if ( anApp && anApp->activeViewManager() ) {
2335 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2337 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2340 QString curModel = "";
2341 if ( v.canConvert<QString>() ) curModel = v.toString();
2343 // get list of all predefined materials
2344 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2346 foreach ( QString material, materials )
2348 QAction* a = matMenu->addAction( material );
2349 connect( a, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2350 signalMapper->setMapping( a, material );
2351 a->setCheckable( true );
2353 Material_Model aModel;
2354 aModel.fromResources( material );
2355 if ( !found && aModel.toProperties() == curModel ) {
2356 a->setChecked( true );
2360 matMenu->addSeparator();
2361 matMenu->addAction( action( GEOMOp::OpPredefMaterCustom ) );
2362 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2363 this, SLOT( OnSetMaterial( const QString & ) ) );
2366 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2367 Handle(SALOME_InteractiveObject) io = lst.First();
2368 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2369 _PTR(Study) study = appStudy->studyDS();
2370 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2372 QString aName = QString( obj->GetName().c_str() );
2373 aName.remove( QRegExp("\\s+$") );
2379 void GeometryGUI::OnSetMaterial(const QString& theName)
2381 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2385 void GeometryGUI::createPreferences()
2387 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2389 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2391 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2392 setPreferenceProperty( genGroup, "columns", 2 );
2394 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2395 LightApp_Preferences::Selector,
2396 "Geometry", "display_mode" );
2398 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2399 LightApp_Preferences::Color, "Geometry", "shading_color" );
2401 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2402 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2404 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2405 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2407 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2408 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2410 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2411 LightApp_Preferences::Color, "Geometry", "line_color" );
2413 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2414 LightApp_Preferences::Color, "Geometry", "point_color" );
2416 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2417 LightApp_Preferences::Color, "Geometry", "isos_color" );
2419 addPreference( tr( "PREF_LABEL_COLOR" ), genGroup,
2420 LightApp_Preferences::Color, "Geometry", "label_color" );
2422 addPreference( "", genGroup, LightApp_Preferences::Space );
2424 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2425 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2427 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2428 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2430 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2431 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2433 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2434 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2436 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2437 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2439 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2440 LightApp_Preferences::Selector,
2441 "Geometry", "material" );
2443 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2444 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2450 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2451 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2453 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2454 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2456 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2457 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2459 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2460 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2462 for (int i = 0; i < nb; i++) {
2463 setPreferenceProperty( wd[i], "min", 1 );
2464 setPreferenceProperty( wd[i], "max", 5 );
2467 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2468 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2470 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2471 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2473 // --------------------------------------------------------------------------
2474 // Dimensions (Measurements) preferences
2475 // --------------------------------------------------------------------------
2477 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2478 setPreferenceProperty( aDimGroupId, "columns", 2 );
2480 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2481 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2483 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2484 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2486 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2487 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2489 int aDimFontId = addPreference( tr( "PREF_DIMENSIONS_FONT" ), aDimGroupId, LightApp_Preferences::Font, "Geometry", "dimensions_font" );
2491 int f = QtxFontEdit::Family | QtxFontEdit::Size;
2492 setPreferenceProperty( aDimFontId, "features", f );
2493 setPreferenceProperty( aDimFontId, "mode", QtxFontEdit::Custom );
2495 Handle(Font_FontMgr) fmgr = Font_FontMgr::GetInstance();
2496 QString aFontFile = "";
2497 resMgr->value("resources", "GEOM", aFontFile);
2498 aFontFile = aFontFile + QDir::separator() + "Y14.5M-2009.ttf";
2499 // add enginier font into combobox
2500 /*int fontID =*/ QFontDatabase::addApplicationFont( aFontFile );
2501 Handle(Font_SystemFont) sf = new Font_SystemFont( TCollection_AsciiString("Y14.5M-2009") );
2502 sf->SetFontPath( Font_FA_Regular,
2503 TCollection_AsciiString( aFontFile.toLatin1().data() ) );
2504 // register font in OCC font manager
2505 fmgr->RegisterFont( sf, Standard_False );
2507 // get list of supported fonts by OCC
2508 QStringList anOCCFonts;
2509 TColStd_SequenceOfHAsciiString theFontsNames;
2510 fmgr->GetAvailableFontsNames( theFontsNames );
2511 for(Standard_Integer i=1; i<=theFontsNames.Length(); i++) {
2512 Handle(TCollection_HAsciiString) str = theFontsNames(i);
2513 anOCCFonts << str->ToCString();
2515 anOCCFonts.removeDuplicates();
2516 // set the supported fonts into combobox to use its only
2517 setPreferenceProperty( aDimFontId, "fonts", anOCCFonts );
2519 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2520 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2522 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2523 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2524 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2526 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2527 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2529 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2530 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2532 QStringList aListOfLengthUnits;
2533 aListOfLengthUnits << "m";
2534 aListOfLengthUnits << "cm";
2535 aListOfLengthUnits << "mm";
2536 aListOfLengthUnits << "in.";
2537 aListOfLengthUnits << "ft.";
2539 QStringList aListOfAngUnits;
2540 aListOfAngUnits << "rad";
2541 aListOfAngUnits << "deg";
2543 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2544 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2546 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2547 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2549 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2550 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2552 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2553 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2554 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2556 addPreference( tr( "PREF_DIMENSIONS_USE_TEXT3D" ), aDimGroupId,
2557 LightApp_Preferences::Bool, "Geometry", "dimensions_use_text3d" );
2559 // --------------------------------------------------------------------------
2560 // Shape annotation preferences
2561 // --------------------------------------------------------------------------
2563 const int aShapeAnnGroupId = addPreference( tr( "PREF_SHAPE_ANNOTATIONS" ), tabId );
2564 setPreferenceProperty( aShapeAnnGroupId, "columns", 2 );
2566 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_FONT_COLOR" ), aShapeAnnGroupId, LightApp_Preferences::Color, "Geometry", "shape_annotation_font_color" );
2567 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_COLOR" ), aShapeAnnGroupId, LightApp_Preferences::Color, "Geometry", "shape_annotation_line_color" );
2568 const int aShapeAnnFont =
2569 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_FONT" ), aShapeAnnGroupId, LightApp_Preferences::Font, "Geometry", "shape_annotation_font" );
2571 int aShapeAnnFontFeatures = QtxFontEdit::Family | QtxFontEdit::Size | QtxFontEdit::Bold | QtxFontEdit::Italic;
2572 setPreferenceProperty( aShapeAnnFont, "features", aShapeAnnFontFeatures );
2573 setPreferenceProperty( aShapeAnnFont, "mode", QtxFontEdit::Custom );
2574 setPreferenceProperty( aShapeAnnFont, "fonts", anOCCFonts );
2576 const int aShapeAnnLineWidth =
2577 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_WIDTH" ), aShapeAnnGroupId, LightApp_Preferences::IntSpin, "Geometry", "shape_annotation_line_width" );
2579 setPreferenceProperty( aShapeAnnLineWidth, "min", 1 );
2580 setPreferenceProperty( aShapeAnnLineWidth, "max", 5 );
2582 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_AUTOHIDE" ), aShapeAnnGroupId, LightApp_Preferences::Bool, "Geometry", "shape_annotation_autohide" );
2584 const int aShapeAnnLineStyle =
2585 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_STYLE" ), aShapeAnnGroupId, LightApp_Preferences::Selector, "Geometry", "shape_annotation_line_style" );
2587 QStringList aLineStyleList;
2588 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_SOLID") );
2589 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DASH") );
2590 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DOT") );
2591 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DOTDASH") );
2593 QList<QVariant> aLineStyleIds;
2594 aLineStyleIds.append(0);
2595 aLineStyleIds.append(1);
2596 aLineStyleIds.append(2);
2597 aLineStyleIds.append(3);
2599 setPreferenceProperty( aShapeAnnLineStyle, "strings", aLineStyleList );
2600 setPreferenceProperty( aShapeAnnLineStyle, "indexes", aLineStyleIds );
2602 // --------------------------------------------------------------------------
2603 // Isoline drawing preferences
2604 // --------------------------------------------------------------------------
2606 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2607 setPreferenceProperty( isoGroup, "columns", 2 );
2608 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2609 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2610 setPreferenceProperty( isoU, "min", 0 );
2611 setPreferenceProperty( isoU, "max", 100000 );
2612 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2613 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2614 setPreferenceProperty( isoV, "min", 0 );
2615 setPreferenceProperty( isoV, "max", 100000 );
2617 // Quantities with individual precision settings
2618 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2619 setPreferenceProperty( precGroup, "columns", 2 );
2621 const int nbQuantities = 8;
2622 int prec[nbQuantities], ii = 0;
2623 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2624 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2625 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2626 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2627 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2628 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2629 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2630 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2631 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2632 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2633 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2634 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2635 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2636 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2637 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2638 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2640 // Set property for precision value for spinboxes
2641 for ( ii = 0; ii < nbQuantities; ii++ ){
2642 setPreferenceProperty( prec[ii], "min", -14 );
2643 setPreferenceProperty( prec[ii], "max", 14 );
2644 setPreferenceProperty( prec[ii], "precision", 2 );
2647 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2648 setPreferenceProperty( VertexGroup, "columns", 2 );
2650 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2651 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2653 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2654 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2656 // Set property for default display mode
2657 QStringList aModesList;
2658 aModesList.append( tr("MEN_WIREFRAME") );
2659 aModesList.append( tr("MEN_SHADING") );
2660 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2661 aModesList.append( tr("MEN_TEXTURE") );
2663 QList<QVariant> anIndexesList;
2664 anIndexesList.append(0);
2665 anIndexesList.append(1);
2666 anIndexesList.append(2);
2667 anIndexesList.append(3);
2669 setPreferenceProperty( dispmode, "strings", aModesList );
2670 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2672 // Set property for top level display mode
2673 QStringList aTopModesList;
2674 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2675 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2676 aTopModesList.append( tr("MEN_WIREFRAME") );
2677 aTopModesList.append( tr("MEN_SHADING") );
2678 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2680 QList<QVariant> aTopIndexesList;
2681 aTopIndexesList.append(0);
2682 aTopIndexesList.append(1);
2683 aTopIndexesList.append(2);
2684 aTopIndexesList.append(3);
2685 aTopIndexesList.append(4);
2687 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2688 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2690 // Set property for step value for spinboxes
2691 setPreferenceProperty( step, "min", 1 );
2692 setPreferenceProperty( step, "max", 10000 );
2693 setPreferenceProperty( step, "precision", 3 );
2695 // Set property for trandparency value for spinboxes
2696 setPreferenceProperty( transparency, "min", 0 );
2697 setPreferenceProperty( transparency, "max", 100 );
2699 // Set property for deflection value for spinboxes
2700 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2701 setPreferenceProperty( defl, "max", 1.0 );
2702 setPreferenceProperty( defl, "step", 1.0e-04 );
2703 setPreferenceProperty( defl, "precision", 6 );
2705 // Set property for default material
2706 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2708 // Set property vertex marker type
2709 QList<QVariant> aMarkerTypeIndicesList;
2710 QList<QVariant> aMarkerTypeIconsList;
2712 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2713 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2714 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2715 aMarkerTypeIndicesList << (i-1);
2716 aMarkerTypeIconsList << pixmap;
2719 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2720 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2722 // Set property for vertex marker scale
2723 QList<QVariant> aMarkerScaleIndicesList;
2724 QStringList aMarkerScaleValuesList;
2726 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2727 aMarkerScaleIndicesList << iii;
2728 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2731 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2732 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2734 // Scalar bar for field step presentation
2735 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2736 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2738 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2739 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2740 setPreferenceProperty( sbXPosition, "min", 0 );
2741 setPreferenceProperty( sbXPosition, "max", 1 );
2742 setPreferenceProperty( sbXPosition, "step", 0.05 );
2744 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2745 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2746 setPreferenceProperty( sbYPosition, "min", 0 );
2747 setPreferenceProperty( sbYPosition, "max", 1 );
2748 setPreferenceProperty( sbYPosition, "step", 0.05 );
2750 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2751 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2752 setPreferenceProperty( sbWidth, "min", 0 );
2753 setPreferenceProperty( sbWidth, "max", 1 );
2754 setPreferenceProperty( sbWidth, "step", 0.05 );
2756 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2757 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2758 setPreferenceProperty( sbHeight, "min", 0 );
2759 setPreferenceProperty( sbHeight, "max", 1 );
2760 setPreferenceProperty( sbHeight, "step", 0.05 );
2762 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2763 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2764 setPreferenceProperty( sbTextHeight, "min", 6 );
2765 setPreferenceProperty( sbTextHeight, "max", 24 );
2766 setPreferenceProperty( sbTextHeight, "step", 1 );
2768 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2769 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2770 setPreferenceProperty( sbNbIntervals, "min", 2 );
2771 setPreferenceProperty( sbNbIntervals, "max", 64 );
2772 setPreferenceProperty( sbNbIntervals, "step", 1 );
2774 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2775 setPreferenceProperty( originGroup, "columns", 2 );
2777 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2778 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2779 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2780 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2782 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2783 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2785 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2786 setPreferenceProperty( operationsGroup, "columns", 2 );
2788 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2789 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2791 addPreference( tr( "PREF_HIDE_INPUT_OBJECT" ), operationsGroup,
2792 LightApp_Preferences::Bool, "Geometry", "hide_input_object" );
2794 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2796 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2798 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2799 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2801 QStringList aHierarchyTypeList;
2802 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2803 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2804 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2806 QList<QVariant> aHierarchyTypeIndexesList;
2807 aHierarchyTypeIndexesList.append(0);
2808 aHierarchyTypeIndexesList.append(1);
2809 aHierarchyTypeIndexesList.append(2);
2811 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2812 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2814 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2815 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2817 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2819 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2820 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2822 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2823 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2824 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2825 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2826 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2827 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2828 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2829 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2831 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2832 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2833 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2834 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2835 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2836 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2843 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2845 if (section == "Geometry") {
2846 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2847 if (param == QString("SettingsGeomStep")) {
2848 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2849 EmitSignalDefaultStepValueChanged(spin_step);
2851 else if (param == QString("toplevel_color")) {
2852 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2853 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2855 else if (param == QString("toplevel_dm")) {
2856 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2858 else if (param == QString("scalar_bar_x_position") ||
2859 param == QString("scalar_bar_y_position") ||
2860 param == QString("scalar_bar_width") ||
2861 param == QString("scalar_bar_height") ||
2862 param == QString("scalar_bar_text_height") ||
2863 param == QString("scalar_bar_nb_intervals")) {
2864 updateFieldColorScale();
2866 else if ( param == QString("dimensions_color") ||
2867 param == QString("dimensions_line_width") ||
2868 param == QString("dimensions_font") ||
2869 param == QString("dimensions_arrow_length") ||
2870 param == QString("dimensions_show_units") ||
2871 param == QString("dimensions_length_units") ||
2872 param == QString("dimensions_angle_units") ||
2873 param == QString("dimensions_use_text3d") ||
2874 param == QString("shape_annotation_font_color") ||
2875 param == QString("shape_annotation_line_color") ||
2876 param == QString("shape_annotation_font") ||
2877 param == QString("shape_annotation_line_width") ||
2878 param == QString("shape_annotation_autohide") ||
2879 param == QString("shape_annotation_line_style") ||
2880 param == QString("shape_annotation_line_style") ||
2881 param == QString("label_color") )
2883 SalomeApp_Application* anApp = getApp();
2889 GEOM_Displayer aDisplayer;
2891 ViewManagerList aVMs;
2892 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2893 ViewManagerList::Iterator anIt = aVMs.begin();
2894 for ( ; anIt != aVMs.end(); ++anIt )
2896 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2902 SALOME_ListIO aVisible;
2903 aViewer->GetVisible( aVisible );
2905 GEOMGUI_AnnotationMgr* anAnnotationMgr = GetAnnotationMgr();
2906 if ( anAnnotationMgr ) {
2907 SALOME_ListIteratorOfListIO anIter( aVisible );
2908 while ( anIter.More() ) {
2909 if ( anAnnotationMgr->isAnnotationEntry( anIter.Value()->getEntry() ) ) {
2910 aVisible.Remove( anIter );
2918 aDisplayer.Redisplay( aVisible, false, aViewer );
2920 if ( param == QString( "label_color" ) ) {
2921 ViewManagerList aVMsVTK;
2922 anApp->viewManagers( SVTK_Viewer::Type(), aVMsVTK );
2923 ViewManagerList::Iterator anIt = aVMsVTK.begin();
2924 for ( ; anIt != aVMsVTK.end(); ++anIt )
2926 SVTK_Viewer* aViewer = dynamic_cast<SVTK_Viewer*>( (*anIt)->getViewModel() );
2931 SALOME_ListIO aVisible;
2932 aViewer->GetVisible( aVisible );
2933 aDisplayer.Redisplay( aVisible, false, aViewer );
2936 aDisplayer.UpdateViewer();
2938 else if ( param.startsWith( "dependency_tree") )
2939 emit SignalDependencyTreeParamChanged( section, param );
2943 LightApp_Displayer* GeometryGUI::displayer()
2946 myDisplayer = new GEOM_Displayer();
2950 void GeometryGUI::setLocalSelectionMode(const int mode)
2952 myLocalSelectionMode = mode;
2955 int GeometryGUI::getLocalSelectionMode() const
2957 return myLocalSelectionMode;
2960 const char gSeparator = '_'; // character used to separate parameter names
2961 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2964 * \brief Store visual parameters
2966 * This method is called just before the study document is saved.
2967 * Store visual parameters in AttributeParameter attribute(s)
2969 void GeometryGUI::storeVisualParameters (int savePoint)
2971 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2972 if ( !appStudy || !appStudy->studyDS() )
2975 _PTR(Study) studyDS = appStudy->studyDS();
2977 // componentName is used for encoding of entries when storing them in IParameters
2978 std::string componentName = myComponentGeom->ComponentDataType();
2979 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2980 //if (!aSComponent) return;
2983 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2984 componentName.c_str(),
2986 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2988 QSet<QString> anEntriesToStoreShared;
2989 QList<SUIT_ViewManager*> lst;
2990 QList<SUIT_ViewManager*>::Iterator it;
2992 GEOMGUI_AnnotationMgr* aAnnotationMgr = GetAnnotationMgr();
2994 // main cycle to store parameters of displayed objects
2996 getApp()->viewManagers(lst);
2997 for (it = lst.begin(); it != lst.end(); it++) {
2998 SUIT_ViewManager* vman = *it;
2999 QString vType = vman->getType();
3000 SUIT_ViewModel* vmodel = vman->getViewModel();
3001 SALOME_View* aView = dynamic_cast<SALOME_View*>(vmodel);
3003 int aMgrId = vman->getGlobalId();
3004 // saving VTK actors properties
3005 QVector<SUIT_ViewWindow*> views = vman->getViews();
3006 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
3007 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
3008 ObjMap::ConstIterator o_it = anObjects.begin();
3009 for (; o_it != anObjects.end(); o_it++) {
3010 const PropMap& aProps = o_it.value();
3012 //Check that object exists in the study
3013 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toUtf8().data() ) );
3014 if ( !obj || !(aProps.count() > 0))
3016 // entry is "encoded" = it does NOT contain component address, since it is a
3017 // subject to change on next component loading
3019 std::string entry = ip->encodeEntry(o_it.key().toUtf8().data(), componentName);
3021 _PTR(GenericAttribute) anAttr;
3022 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
3025 // remember entry of object to store shared GEOM properties
3026 // (e.g. dimension properties).
3027 if ( vType == OCCViewer_Viewer::Type() )
3029 anEntriesToStoreShared.insert( o_it.key() );
3032 QString param, occParam = vType;
3033 occParam += GEOM::sectionSeparator();
3034 occParam += QString::number(aMgrId);
3035 occParam += GEOM::sectionSeparator();
3037 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
3038 param = occParam + GEOM::propertyName( GEOM::Visibility );
3039 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
3042 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
3043 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
3044 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
3047 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
3048 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
3050 val << QString::number(c.redF());
3051 val << QString::number(c.greenF());
3052 val << QString::number(c.blueF());
3053 param = occParam + GEOM::propertyName( GEOM::Color );
3054 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
3057 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
3058 param = occParam + GEOM::propertyName( GEOM::Texture );
3059 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
3062 if (vType == SVTK_Viewer::Type()) {
3063 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
3064 param = occParam + GEOM::propertyName( GEOM::Opacity );
3065 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
3067 } else if (vType == SOCC_Viewer::Type()) {
3068 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
3069 param = occParam + GEOM::propertyName( GEOM::Transparency );
3070 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
3073 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
3074 param = occParam + GEOM::propertyName( GEOM::TopLevel );
3075 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
3079 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
3080 param = occParam + GEOM::propertyName( GEOM::NbIsos );
3081 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
3084 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
3085 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
3086 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
3089 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
3090 param = occParam + GEOM::propertyName( GEOM::Vertices );
3091 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
3094 if (aProps.contains(GEOM::propertyName( GEOM::ShowName ))) {
3095 param = occParam + GEOM::propertyName( GEOM::ShowName );
3096 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::ShowName )).toString().toStdString());
3099 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
3100 param = occParam + GEOM::propertyName( GEOM::Deflection );
3101 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
3104 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
3105 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
3106 param = occParam + GEOM::propertyName( GEOM::PointMarker );
3107 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
3110 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
3111 param = occParam + GEOM::propertyName( GEOM::Material );
3112 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
3115 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
3116 param = occParam + GEOM::propertyName( GEOM::LineWidth );
3117 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
3120 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
3121 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
3122 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
3125 if ( vType == SOCC_Viewer::Type() && aAnnotationMgr ) {
3126 std::string anAnnotationInfo = GetAnnotationMgr()->getDisplayedIndicesInfo(
3127 o_it.key().toUtf8().data(), dynamic_cast<SOCC_Viewer*>(aView) ).toStdString();
3128 if (!anAnnotationInfo.empty()) {
3129 param = occParam + "ShapeAnnotationVisibleItems";
3130 ip->setParameter(entry, param.toStdString(), anAnnotationInfo);
3133 } // object iterator
3135 } // for (viewManagers)
3137 // store shape annotation and dimension attributes of objects:
3138 // since the displayed object always persists in property map, we remember the object entries
3139 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
3140 const QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
3141 const QString aAnnotationParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::ShapeAnnotations );
3142 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
3143 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
3145 std::string aStudyEntry = (*aEntryIt).toUtf8().data();
3146 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName );
3148 // store dimension parameters
3149 GEOMGUI_DimensionProperty aDimensions( aStudyEntry );
3150 if ( aDimensions.GetNumber() != 0 ) {
3151 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toUtf8().data() );
3154 _PTR(SObject) aObj( studyDS->FindObjectID( aStudyEntry ) );
3155 const Handle(GEOMGUI_AnnotationAttrs) aShapeAnnAttr = GEOMGUI_AnnotationAttrs::FindAttributes( aObj );
3156 if ( !aShapeAnnAttr.IsNull() ) {
3157 ip->setParameter( aStoreEntry, aAnnotationParam.toStdString(), aShapeAnnAttr->ExportAsPropertyString().toUtf8().data() );
3163 * \brief Restore visual parameters
3165 * This method is called after the study document is opened.
3166 * Restore visual parameters from AttributeParameter attribute(s)
3168 void GeometryGUI::restoreVisualParameters (int savePoint)
3170 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
3171 if (!appStudy || !appStudy->studyDS())
3173 _PTR(Study) studyDS = appStudy->studyDS();
3175 // componentName is used for encoding of entries when storing them in IParameters
3176 std::string componentName = myComponentGeom->ComponentDataType();
3177 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
3178 //if (!aSComponent) return;
3181 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
3182 componentName.c_str(),
3184 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
3186 std::vector<std::string> entries = ip->getEntries();
3188 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
3190 // entry is a normal entry - it should be "decoded" (setting base address of component)
3191 QString entry (ip->decodeEntry(*entIt).c_str());
3193 // Check that the entry corresponds to a real object in the Study
3194 // as the object may be deleted or modified after the visual state is saved.
3195 _PTR(SObject) so = studyDS->FindObjectID(entry.toUtf8().data());
3196 if (!so) continue; //Skip the not existent entry
3198 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
3199 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
3201 std::vector<std::string>::iterator namesIt = paramNames.begin();
3202 std::vector<std::string>::iterator valuesIt = paramValues.begin();
3204 // actors are stored in a map after displaying of them for
3205 // quicker access in the future: map < viewID to actor >
3206 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
3207 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
3209 QString viewerTypStr;
3210 QString viewIndexStr;
3212 QVector<PropMap> aListOfMap;
3214 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
3216 // visual parameters are stored in strings as follows:
3217 // 1) ViewerType_ViewIndex_ParamName
3218 // 2) ViewerType_ParamName (shared for GEOM module)
3219 // '_' is used as separator and should not be used in viewer type or parameter names.
3220 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
3222 bool isShared = lst.size() == 2;
3223 bool isViewer = lst.size() == 3;
3224 if ( !isShared && !isViewer )
3229 // shared visual parameters
3232 QString aParamNameStr( lst[1] );
3233 QString aValuesStr( (*valuesIt).c_str() );
3235 // shared dimension properties are stored as attribute
3236 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
3238 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
3239 aDimensionProp.SaveToAttribute( entry.toUtf8().data() );
3241 else if ( aParamNameStr == GEOM::propertyName( GEOM::ShapeAnnotations ) )
3243 Handle(GEOMGUI_AnnotationAttrs) anAttr =
3244 GEOMGUI_AnnotationAttrs::FindOrCreateAttributes( so, appStudy );
3246 anAttr->ImportFromPropertyString( aValuesStr );
3252 // per view visual parameters
3253 viewerTypStr = lst[0];
3254 viewIndexStr = lst[1];
3255 QString paramNameStr = lst[2];
3258 viewIndex = viewIndexStr.toUInt(&ok);
3259 if (!ok) // bad conversion of view index to integer
3262 if ((viewIndex + 1) > aListOfMap.count()) {
3263 aListOfMap.resize(viewIndex + 1);
3266 QString val((*valuesIt).c_str());
3267 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
3268 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
3269 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
3270 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
3271 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
3272 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
3273 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
3274 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
3275 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
3276 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
3277 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
3278 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
3279 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
3280 QStringList rgb = val.split(GEOM::subSectionSeparator());
3281 if (rgb.count() == 3) {
3282 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
3283 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
3285 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
3286 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
3287 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
3288 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
3289 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
3290 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
3291 } else if (paramNameStr == GEOM::propertyName( GEOM::ShowName )) {
3292 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::ShowName ), val == "true" || val == "1");
3293 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3294 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3295 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3296 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3297 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3298 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3299 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3300 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3301 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3302 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3303 } else if (paramNameStr == "ShapeAnnotationVisibleItems") {
3304 aListOfMap[viewIndex].insert( "ShapeAnnotationVisibleItems", val);
3307 } // for names/parameters iterator
3309 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3311 for (int index = 0; index < aListOfMap.count(); index++) {
3312 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
3314 //Get Visibility property of the current PropMap
3315 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3316 SUIT_ViewManager* vman = lst.at(index);
3317 SUIT_ViewModel* vmodel = vman->getViewModel();
3318 SALOME_View* aView = dynamic_cast<SALOME_View*>(vmodel);
3319 displayer()->Display(entry, true, aView);
3321 if ( vmodel->getType() == SOCC_Viewer::Type() ) {
3322 PropMap& aProps = aListOfMap[index];
3323 if ( aProps.contains( "ShapeAnnotationVisibleItems" ) ) {
3324 SOCC_Viewer* aSOCCView = dynamic_cast<SOCC_Viewer*>( aView );
3325 GetAnnotationMgr()->setDisplayedIndicesInfo( entry, aSOCCView, aProps["ShapeAnnotationVisibleItems"].toString() );
3330 } // for entries iterator
3332 // update all VTK and OCC views
3333 QList<SUIT_ViewManager*> lst;
3334 getApp()->viewManagers(lst);
3335 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3336 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3339 if (vmodel->getType() == SVTK_Viewer::Type()) {
3340 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3341 vtkView->getRenderer()->ResetCameraClippingRange();
3344 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3345 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3346 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3352 if ( myTextTreeWdg ) {
3353 myTextTreeWdg->updateTree();
3357 // Compute current name mode of the viewer
3358 void UpdateNameMode( SalomeApp_Application* app )
3360 bool isMode = false;
3361 SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() );
3362 SUIT_ViewWindow* viewWindow = app->desktop()->activeWindow();
3363 GEOM_Displayer displayer;
3364 int aMgrId = viewWindow->getViewManager()->getGlobalId();
3366 SALOME_View* window = displayer.GetActiveView();
3367 if ( !window ) return;
3369 SALOME_ListIO anIOlst;
3370 window->GetVisible( anIOlst );
3372 for ( SALOME_ListIteratorOfListIO It( anIOlst ); It.More(); It.Next() ) {
3373 Handle( SALOME_InteractiveObject ) io = It.Value();
3374 QVariant v = aStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::ShowName ), QVariant() );
3375 bool isIONameMode = v.isValid() ? v.toBool() : false;
3379 viewWindow->setProperty( "NameMode", isMode );
3382 void GeometryGUI::onViewAboutToShow()
3384 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3385 QAction* a = action( GEOMOp::OpSwitchVectors );
3386 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3387 QAction* aNameAction = action( GEOMOp::OpSwitchName );
3389 a->setEnabled(true);
3390 bool vmode = window->property("VectorsMode").toBool();
3391 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3392 aVerticesAction->setEnabled(true);
3393 vmode = window->property("VerticesMode").toBool();
3394 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3395 UpdateNameMode( getApp() );
3396 aNameAction->setEnabled(true);
3397 vmode = window->property("NameMode").toBool();
3398 aNameAction->setText ( vmode == 1 ? tr( "MEN_NAME_MODE_OFF" ) : tr("MEN_NAME_MODE_ON") );
3400 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3401 a->setEnabled(false);
3402 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3403 aVerticesAction->setEnabled(false);
3404 aNameAction->setText ( tr("MEN_NAME_MODE_ON") );
3405 aNameAction->setEnabled(false);
3410 \brief Return action by id
3411 \param id identifier of the action
3414 QAction* GeometryGUI::getAction(const int id) {
3419 \brief GEOM module message handler
3421 This method can be re-implemented in the subclasses.
3422 This is a GEOM module message handler.
3424 \param msg the message received.
3426 void GeometryGUI::message(const QString& msg)
3429 QStringList data = msg.split("/");
3430 const int nbStrings = data.count();
3432 if (nbStrings > 0) {
3433 if (data[0] == "modified") {
3435 QString anIOR = nbStrings > 1 ? data[1] : QString();
3437 if ( anIOR.isEmpty() ) {
3441 // Get the geom object.
3442 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3444 // Clear the shape buffer
3445 GeometryGUI::ClearShapeBuffer (anObj);
3451 \brief Clears the shape buffer.
3453 This is a static method. It clears the shape buffer.
3455 \param theObj the object
3457 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3459 if ( CORBA::is_nil( theObj ) )
3462 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3463 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3464 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3466 SalomeApp_Application* app =
3467 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3468 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3473 _PTR(Study) aStudy = appStudy->studyDS();
3478 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3482 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3483 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3484 _PTR(GenericAttribute) anAttr;
3485 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3486 _PTR(AttributeIOR) anIOR ( anAttr );
3487 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3488 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3494 \brief Returns the object from IOR.
3496 This is a static method. It returns the object from its IOR.
3498 \param IOR object IOR
3499 \return GEOM object.
3501 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3503 GEOM::GEOM_Object_var geomObj;
3504 if ( !IOR.isEmpty() ) {
3505 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3506 ( IOR.toLatin1().constData() );
3507 if ( !CORBA::is_nil( corbaObj ) )
3508 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3510 return geomObj._retn();
3514 \brief Returns IOR of the object.
3516 This is a static method. It returns the object's IOR.
3518 \param object the GEOM object.
3519 \return object's IOR.
3521 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3524 if ( !CORBA::is_nil( object ) ) {
3525 CORBA::String_var anIOR =
3526 SalomeApp_Application::orb()->object_to_string( object );
3533 \brief Check if this object is can't be renamed in place
3535 This method can be re-implemented in the subclasses.
3536 Return true in case if object isn't reference or component (module root).
3538 \param entry column id
3539 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3541 bool GeometryGUI::renameAllowed( const QString& entry) const {
3543 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3544 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3545 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3547 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3551 Rename object by entry.
3552 \param entry entry of the object
3553 \param name new name of the object
3554 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3556 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3558 bool result = false;
3560 SalomeApp_Application* app =
3561 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3562 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3567 _PTR(Study) aStudy = appStudy->studyDS();
3572 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3574 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3578 _PTR(SObject) obj ( aStudy->FindObjectID(qUtf8Printable(entry)) );
3579 _PTR(GenericAttribute) anAttr;
3581 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3582 _PTR(AttributeName) aName (anAttr);
3584 aName->SetValue( name.toUtf8().data() ); // rename the SObject
3585 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3586 if (!CORBA::is_nil(anObj)) {
3587 anObj->SetName( name.toUtf8().data() ); // Rename the corresponding GEOM_Object
3588 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3589 emit SignalTextTreeRenameObject( entry );
3597 void GeometryGUI::updateMaterials()
3599 LightApp_Preferences* pref = preferences();
3601 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3602 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3603 if ( !materials.contains( currentMaterial ) )
3604 // user material set as default in the preferences, might be removed
3605 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3607 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3609 setPreferenceProperty( prefItem->id(),
3610 "strings", materials );
3611 prefItem->retrieve();
3617 \brief Check if the module allows "drag" operation of its objects.
3619 Overloaded from LightApp_Module class.
3621 This function is a part of the general drag-n-drop mechanism.
3622 The goal of this function is to check data object passed as a parameter
3623 and decide if it can be dragged or no.
3625 \param what data object being tested for drag operation
3626 \return \c true if module allows dragging of the specified object
3627 \sa isDropAccepted(), dropObjects()
3629 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3631 // we allow dragging object under root and object from folder
3632 int aLevel = what->level();
3633 bool anObjectInFolder = false;
3635 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3637 _PTR(SObject) aSO = dataObj->object();
3639 _PTR(GenericAttribute) anAttr;
3640 _PTR(SObject) aFatherSO = SalomeApp_Application::getStudy()->GetUseCaseBuilder()->GetFather( aSO );
3641 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3642 _PTR(AttributeLocalID) aLocalID( anAttr );
3643 anObjectInFolder = aLocalID->Value() == 999;
3648 return aLevel == 2 || anObjectInFolder;
3652 \brief Check if the module allows "drop" operation on the given object.
3654 Overloaded from LightApp_Module class.
3656 This function is a part of the general drag-n-drop mechanism.
3657 The goal of this function is to check data object passed as a parameter
3658 and decide if it can be used as a target for the "drop" operation.
3659 The processing of the drop operation itself is done in the dropObjects() function.
3661 \param where target data object
3662 \return \c true if module supports dropping on the \a where data object
3663 \sa isDraggable(), dropObjects()
3665 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3667 // we allow dropping into folder and top-level GEOM object
3668 int aLevel = where->level();
3669 bool isFolder = false;
3671 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3673 _PTR(SObject) aSO = dataObj->object();
3675 _PTR(GenericAttribute) anAttr;
3676 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3677 _PTR(AttributeLocalID) aLocalID( anAttr );
3678 isFolder = aLocalID->Value() == 999;
3683 return aLevel == 1 || isFolder;
3687 \brief Complete drag-n-drop operation.
3689 Overloaded from LightApp_Module class.
3691 This function is a part of the general drag-n-drop mechanism.
3692 Its goal is to handle dropping of the objects being dragged according
3693 to the chosen operation (move). The dropping is performed in the
3694 context of the parent data object \a where and the \a row (position in the
3695 children index) at which the data should be dropped. If \a row is equal to -1,
3696 this means that objects are added to the end of the children list.
3698 \param what objects being dropped
3699 \param where target data object
3700 \param row child index at which the drop operation is performed
3701 \param action drag-n-drop operation (Qt::DropAction) - move
3703 \sa isDraggable(), isDropAccepted()
3705 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3706 const int row, Qt::DropAction action )
3708 if (action != Qt::CopyAction && action != Qt::MoveAction)
3709 return; // unsupported action
3711 // get parent object
3712 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3713 if ( !dataObj ) return; // wrong parent
3714 _PTR(SObject) parentObj = dataObj->object();
3716 // Find the current Study and StudyBuilder
3717 _PTR(Study) aStudy = SalomeApp_Application::getStudy();
3718 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3719 // collect all parents of the target node
3720 QStringList parentIDs;
3721 _PTR(SObject) parent = parentObj;
3722 while( !parent->IsNull() ) {
3723 parentIDs << parent->GetID().c_str();
3724 parent = aUseCaseBuilder->GetFather(parent);
3727 // collect objects being dropped
3728 GEOM::object_list_var objects = new GEOM::object_list();
3729 objects->length( what.count() );
3731 for ( int i = 0; i < what.count(); i++ ) {
3732 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3733 if ( !dataObj ) continue; // skip wrong objects
3734 _PTR(SObject) sobj = dataObj->object();
3735 // check that dropped object is not a parent of target object
3736 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3737 return; // it's not allowed to move node into it's child
3739 objects[i] = _CAST(SObject, sobj)->GetSObject();
3742 objects->length( count );
3744 // call engine function
3745 GetGeomGen()->Move( objects.in(), // what
3746 _CAST(SObject, parentObj)->GetSObject(), // where
3749 // update Object browser
3750 getApp()->updateObjectBrowser( false );
3753 void GeometryGUI::emitDimensionsUpdated( QString entry )
3755 emit DimensionsUpdated( entry );
3758 void GeometryGUI::emitAnnotationsUpdated( QString entry )
3760 emit SignalAnnotationsUpdated( entry );