1 // Copyright (C) 2007-2020 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : GeometryGUI.cxx
23 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
25 #include <Standard_math.hxx> // E.A. must be included before Python.h to fix compilation on windows
27 #undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
30 #include "GeometryGUI.h"
31 #include "GeometryGUI_Operations.h"
32 #include "GEOMPluginGUI.h"
33 #include "GEOMGUI_OCCSelector.h"
34 #include "GEOMGUI_Selection.h"
35 #include "GEOMGUI_CreationInfoWdg.h"
36 #include "GEOMGUI_TextTreeWdg.h"
37 #include "GEOMGUI_DimensionProperty.h"
38 #include "GEOM_Constants.h"
39 #include "GEOM_Displayer.h"
40 #include "GEOM_AISShape.hxx"
41 #include "GEOMUtils_XmlHandler.hxx"
42 #include "GEOMGUI_AnnotationMgr.h"
43 #include "GEOMGUI_TextTreeSelector.h"
45 #include "GEOM_Actor.h"
47 #include <Material_ResourceMgr.h>
48 #include <Material_Model.h>
50 #include <Basics_OCCTVersion.hxx>
52 #include <SUIT_Desktop.h>
53 #include <SUIT_MessageBox.h>
54 #include <SUIT_ResourceMgr.h>
55 #include <SUIT_Session.h>
56 #include <SUIT_ViewManager.h>
58 #include <OCCViewer_ViewWindow.h>
59 #include <OCCViewer_ViewPort3d.h>
60 #include <OCCViewer_ViewModel.h>
61 #include <OCCViewer_ViewManager.h>
63 #include <SOCC_ViewModel.h>
64 #include <SOCC_ViewWindow.h>
66 #include <SVTK_ViewWindow.h>
67 #include <SVTK_RenderWindowInteractor.h>
68 #include <SVTK_InteractorStyle.h>
69 #include <SVTK_ViewModel.h>
71 #ifndef DISABLE_GRAPHICSVIEW
72 #include <GraphicsView_Viewer.h>
75 #include <SalomeApp_Application.h>
76 #include <SalomeApp_DataObject.h>
77 #include <SalomeApp_Study.h>
78 #include <SalomeApp_Tools.h>
80 #include <LightApp_SelectionMgr.h>
81 #include <LightApp_VTKSelector.h>
82 #include <LightApp_DataObject.h>
83 #include <LightApp_Preferences.h>
85 #include <SALOME_LifeCycleCORBA.hxx>
86 #include <SALOME_ListIO.hxx>
88 #include <SALOMEDSClient_ClientFactory.hxx>
89 #include <SALOMEDSClient_IParameters.hxx>
91 #include <SALOMEDS_SObject.hxx>
93 #include <QtxFontEdit.h>
104 #include <QSignalMapper>
105 #include <QFontDatabase>
107 #include <AIS_ListOfInteractive.hxx>
108 #include <AIS_ListIteratorOfListOfInteractive.hxx>
109 #include <Prs3d_Drawer.hxx>
110 #include <Prs3d_IsoAspect.hxx>
111 #include <Aspect_TypeOfMarker.hxx>
112 #include <OSD_SharedLibrary.hxx>
113 #include <NCollection_DataMap.hxx>
115 #include <TColStd_HArray1OfByte.hxx>
116 #include <TColStd_SequenceOfHAsciiString.hxx>
118 #include <utilities.h>
120 #include <vtkCamera.h>
121 #include <vtkRenderer.h>
123 #include <Standard_Failure.hxx>
124 #include <Standard_ErrorHandler.hxx>
126 #include <Font_SystemFont.hxx>
127 #include <Font_FontMgr.hxx>
128 #include <TCollection_HAsciiString.hxx>
130 #include "GEOM_version.h"
131 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
134 Standard_EXPORT CAM_Module* createModule() {
135 return new GeometryGUI();
138 Standard_EXPORT char* getModuleVersion() {
139 return (char*)GEOM_VERSION_STR;
143 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
145 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
147 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
148 if (CORBA::is_nil(myComponentGeom))
150 return GeometryGUI::myComponentGeom;
153 bool GeometryGUI::InitGeomGen()
156 if ( CORBA::is_nil( myComponentGeom ) ) return false;
160 //=======================================================================
161 // function : ClientSObjectToObject
163 //=======================================================================
164 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
166 _PTR(GenericAttribute) anAttr;
167 CORBA::Object_var anObj;
169 std::string aValue = theSObject->GetIOR();
170 if (strcmp(aValue.c_str(), "") != 0) {
171 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
172 anObj = anORB->string_to_object(aValue.c_str());
175 INFOS("ClientSObjectToObject - Unknown exception has occurred!!!");
177 return anObj._retn();
179 //=================================================================================
180 // function : IsInGeomComponent
181 // purpose : Check if an SObject is under GEOM component
182 //=================================================================================
183 bool GeometryGUI::IsInGeomComponent( _PTR(SObject) sobject )
186 if ( _PTR(SComponent) aComp = sobject->GetFatherComponent() )
187 return aComp->ComponentDataType() == "GEOM";
191 //=======================================================================
192 // function : GetStudy
194 //=======================================================================
195 SALOMEDS::Study_var GeometryGUI::getStudyServant()
197 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
198 CORBA::Object_var aStudyObject = aNamingService->Resolve("/Study");
199 SALOMEDS::Study_var aStudy = SALOMEDS::Study::_narrow(aStudyObject);
200 return aStudy._retn();
203 void GeometryGUI::Modified (bool theIsUpdateActions)
205 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
206 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
207 appStudy->Modified();
208 if ( theIsUpdateActions )
209 app->updateActions();
214 //=======================================================================
215 // function : GeometryGUI::GeometryGUI()
216 // purpose : Constructor
217 //=======================================================================
218 GeometryGUI::GeometryGUI() :
219 SalomeApp_Module( "GEOM" ),
222 if ( CORBA::is_nil( myComponentGeom ) )
224 Engines::EngineComponent_var comp =
225 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 autoColorPrefix =
1566 "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') and type='Shape' and selcount=1";
1568 QtxPopupMgr* mgr = popupMgr();
1570 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1571 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1572 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1573 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1574 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1575 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1576 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1577 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1579 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1580 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1581 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1582 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1583 mgr->insert( separator(), -1, -1 ); // -----------
1585 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1586 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1587 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1588 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1589 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1590 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1591 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1592 mgr->insert( separator(), -1, -1 ); // -----------
1593 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1594 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1595 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1596 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1597 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1598 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1599 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1600 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1601 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1602 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1603 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1604 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1605 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1606 mgr->insert( separator(), dispmodeId, -1 );
1607 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1608 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1609 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1610 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1611 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1612 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1613 mgr->insert( action( GEOMOp::OpShowName ), dispmodeId, -1 ); // show name
1614 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1615 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK + " and isNameMode", QtxPopupMgr::ToggleRule );
1616 mgr->insert( separator(), -1, -1 ); // -----------
1618 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1619 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1620 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1621 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1622 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1623 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1624 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1625 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1626 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1627 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1629 // material properties
1630 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1631 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'}) and matMenu=false", QtxPopupMgr::VisibleRule );
1632 mgr->insert( action( GEOMOp::OpMaterialMenu ), -1, -1 );
1633 mgr->setRule( action( GEOMOp::OpMaterialMenu ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'}) and matMenu=true", QtxPopupMgr::VisibleRule );
1636 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1637 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1639 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1640 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1641 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1643 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1644 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1646 mgr->insert( separator(), -1, -1 ); // -----------
1647 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1648 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1649 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1650 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1651 mgr->insert( separator(), -1, -1 ); // -----------
1653 mgr->insert( action( GEOMOp::OpEditAnnotation ), -1, -1 ); // edit annotation
1654 mgr->setRule( action( GEOMOp::OpEditAnnotation ), clientOCC + " and annotationsCount=1", QtxPopupMgr::VisibleRule );
1655 mgr->insert( action( GEOMOp::OpDeleteAnnotation ), -1, -1 ); // delete annotation
1656 mgr->setRule( action( GEOMOp::OpDeleteAnnotation ), clientOCC + " and annotationsCount>0", QtxPopupMgr::VisibleRule );
1657 mgr->insert( separator(), -1, -1 ); // -----------
1659 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1660 onlyComponent = "((type='Component') and selcount=1)",
1661 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1662 types = "'Shape' 'Group' 'FieldStep'";
1664 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1665 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1667 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1668 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1670 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1671 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1673 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1675 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1676 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1677 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1678 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1679 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1680 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1681 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1682 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1683 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1684 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1685 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1686 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1687 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1688 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1689 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1690 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1691 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1692 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1693 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1694 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1695 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1696 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1697 mgr->insert( separator(), selectonlyId, -1);
1698 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1699 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1700 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1701 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1702 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1703 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1704 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1706 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1708 mgr->insert( separator(), -1, -1 ); // -----------
1709 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1710 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1711 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1712 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1713 mgr->insert( action( GEOMOp::OpShowAllAnnotations ), -1, -1 ); // show all annotations
1714 mgr->setRule( action( GEOMOp::OpShowAllAnnotations ), aDimensionRule.arg( "hasHiddenAnnotations" ), QtxPopupMgr::VisibleRule );
1715 mgr->insert( action( GEOMOp::OpHideAllAnnotations ), -1, -1 ); // hide all annotations
1716 mgr->setRule( action( GEOMOp::OpHideAllAnnotations ), aDimensionRule.arg( "hasVisibleAnnotations" ), QtxPopupMgr::VisibleRule );
1718 mgr->insert( separator(), -1, -1 ); // -----------
1719 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1720 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1722 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1723 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1725 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1726 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1728 mgr->insert( separator(), -1, -1 ); // -----------
1729 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1730 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1732 mgr->insert( separator(), -1, -1 ); // -----------
1733 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1734 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1736 #ifndef DISABLE_GRAPHICSVIEW
1737 mgr->insert( separator(), -1, -1 ); // -----------
1738 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1739 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1742 mgr->insert( separator(), -1, -1 ); // -----------
1743 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1744 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1746 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1748 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1750 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1751 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1752 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1755 // create plugin actions and menus
1759 //=======================================================================
1760 // function : GeometryGUI::addPluginActions()
1762 //=======================================================================
1763 void GeometryGUI::addPluginActions()
1766 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1767 if (!resMgr) return;
1769 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1770 if (!appStudy) return;
1772 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1774 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1776 int id = GEOMOp::OpLastOperationID; // TODO?
1779 GEOMUtils::PluginInfo::const_iterator it;
1780 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1781 // bind action lib and label to its ID for activateOperation() method proper work
1782 GEOMUtils::PluginData pdata = (*it);
1783 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1784 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1785 std::list<GEOMUtils::ActionData>::const_iterator ait;
1786 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1787 GEOMUtils::ActionData adata = (*ait);
1790 if ( !adata.icon.empty() )
1791 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1793 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1794 QString actionName = smenus.last();
1795 actionName = actionName.toUpper().prepend( "MEN_" );
1796 smenus.removeLast();
1798 // path to action in toolbar
1799 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1800 QString actionTool = stools.last();
1801 actionTool = actionTool.toUpper().prepend( "TOP_" );
1802 stools.removeLast();
1804 QString actionStat = adata.statusText.c_str();
1805 actionStat = actionStat.toUpper().prepend( "STB_" );
1807 createAction( id, // ~ adata.label
1808 tr( actionTool.toLatin1().constData() ),
1810 tr( actionName.toLatin1().constData() ),
1811 tr( actionStat.toLatin1().constData() ),
1812 QKeySequence( tr( adata.accel.c_str() ) ),
1813 application()->desktop(),
1815 this, SLOT( OnGUIEvent() ),
1816 QString() /*shortcutAction*/ );
1819 foreach ( QString subMenu, smenus ) {
1820 QStringList subMenuList = subMenu.split( ":" );
1821 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1822 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1823 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1825 createMenu( id, menuId, -1 );
1827 if ( !stools.isEmpty() ) {
1828 QString subTool = stools[0];
1829 subTool = subTool.toUpper().prepend( "TOOL_" );
1830 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1831 createTool(id, toolId);
1834 // add action id to map
1835 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1836 myPluginActions[id] = anAction;
1843 //=======================================================================
1844 // function : GeometryGUI::activateModule()
1845 // purpose : Called when GEOM module is activated
1846 //=======================================================================
1847 bool GeometryGUI::activateModule( SUIT_Study* study )
1849 if ( CORBA::is_nil( myComponentGeom ) )
1852 bool res = SalomeApp_Module::activateModule( study );
1856 setMenuShown( true );
1857 setToolShown( true );
1859 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1860 PyGILState_STATE gstate = PyGILState_Ensure();
1861 PyObject* pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1862 if ( !pluginsmanager ) {
1867 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1868 tr("MEN_NEW_ENTITY").toUtf8().data(),
1869 tr("GEOM_PLUGINS_OTHER").toUtf8().data());
1874 PyGILState_Release(gstate);
1875 // end of GEOM plugins loading
1877 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1878 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ), Qt::UniqueConnection );
1880 // Reset actions accelerator keys
1881 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1883 GUIMap::Iterator it;
1884 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1885 it.value()->activate( application()->desktop() );
1887 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1889 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ), Qt::UniqueConnection );
1890 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ), Qt::UniqueConnection );
1891 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ), Qt::UniqueConnection );
1893 if ( !myCreationInfoWdg )
1894 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1895 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1896 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1898 if ( !myTextTreeWdg ) {
1899 myTextTreeWdg = new GEOMGUI_TextTreeWdg( getApp() );
1900 new GEOMGUI_TextTreeSelector( myTextTreeWdg, GetAnnotationMgr(), getApp()->selectionMgr() );
1903 getApp()->insertDockWindow( myTextTreeWdg->getWinID(), myTextTreeWdg );
1904 getApp()->placeDockWindow( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
1907 SALOME_ListIO selected;
1908 sm->selectedObjects( selected );
1909 sm->clearSelected();
1911 SUIT_ViewManager* vm;
1912 ViewManagerList OCCViewManagers, VTKViewManagers;
1914 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1915 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1916 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1917 onViewManagerAdded(vm);
1919 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1920 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1921 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1922 onViewManagerAdded(vm);
1924 sm->setSelectedObjects( selected, true ); //NPAL 19674
1926 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1928 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ), Qt::UniqueConnection );
1930 // 0020836 (Basic vectors and origin)
1931 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1932 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1933 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1935 _PTR(Study) studyDS = appStudy->studyDS();
1937 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1938 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1939 createOriginAndBaseVectors();
1944 Py_XDECREF(pluginsmanager);
1948 //=======================================================================
1949 // function : GeometryGUI::deactivateModule()
1950 // purpose : Called when GEOM module is deactivated
1951 //=======================================================================
1952 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1954 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1956 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1958 setMenuShown( false );
1959 setToolShown( false );
1961 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1962 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1964 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1966 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1967 //disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1968 if ( myCreationInfoWdg ) {
1969 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1970 myCreationInfoWdg = 0;
1972 if ( myTextTreeWdg ) {
1973 getApp()->removeDockWindow( myTextTreeWdg->getWinID() );
1974 disconnect( application(), 0, myTextTreeWdg, 0 );
1978 EmitSignalCloseAllDialogs();
1980 GUIMap::Iterator it;
1981 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1982 it.value()->deactivate();
1984 // Unset actions accelerator keys
1985 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1987 qDeleteAll(myOCCSelectors);
1988 myOCCSelectors.clear();
1989 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1991 qDeleteAll(myVTKSelectors);
1992 myVTKSelectors.clear();
1993 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1995 return SalomeApp_Module::deactivateModule( study );
1998 //=======================================================================
1999 // function : onWindowActivated()
2000 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
2001 //=======================================================================
2002 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
2007 const bool ViewOCC = ( win->getViewManager() ? win->getViewManager()->getType() == OCCViewer_Viewer::Type() : false );
2008 //const bool ViewVTK = ( win->getViewManager() ? win->getViewManager()->getType() == SVTK_Viewer::Type() : false );
2010 // disable non-OCC viewframe menu commands
2011 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
2012 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
2013 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
2014 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
2015 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
2016 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
2017 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
2019 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
2020 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
2021 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
2022 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
2024 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
2027 void GeometryGUI::windows( QMap<int, int>& mappa ) const
2029 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
2030 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
2031 #ifndef DISABLE_PYCONSOLE
2032 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
2034 if ( myCreationInfoWdg )
2035 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
2036 if ( myTextTreeWdg )
2037 mappa.insert( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
2040 void GeometryGUI::viewManagers( QStringList& lst ) const
2042 lst.append( OCCViewer_Viewer::Type() );
2045 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
2047 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
2049 qDebug( "connect" );
2050 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
2051 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
2052 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
2053 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
2054 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
2055 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
2056 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
2057 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
2059 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2060 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
2062 // disable OCC selectors
2063 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
2064 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2065 while ( itOCCSel.hasNext() )
2066 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2067 sr->setEnabled(true);
2069 else if ( vm->getType() == SVTK_Viewer::Type() )
2071 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2072 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
2074 // disable VTK selectors
2075 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
2076 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2077 while ( itVTKSel.hasNext() )
2078 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2079 sr->setEnabled(true);
2083 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
2085 SUIT_ViewModel* viewer = vm->getViewModel();
2086 if ( vm->getType() == OCCViewer_Viewer::Type() )
2088 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2089 while ( itOCCSel.hasNext() )
2090 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2091 if ( sr->viewer() == viewer )
2093 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
2097 if ( vm->getType() == SVTK_Viewer::Type() )
2099 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2100 while ( itVTKSel.hasNext() )
2101 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2102 if ( sr->viewer() == viewer )
2104 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2108 SOCC_Viewer* aSOCCView = dynamic_cast<SOCC_Viewer*>(viewer);
2110 GetAnnotationMgr()->RemoveView( aSOCCView );
2114 //================================================================================
2116 * \brief Slot called when selection changed. Shows creation info of a selected object
2118 //================================================================================
2120 void GeometryGUI::updateCreationInfo()
2122 if ( myCreationInfoWdg )
2123 myCreationInfoWdg->clear();
2125 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2126 // if ( !myCreationInfoWdg->isVisible() )
2129 // look for a sole selected GEOM_Object
2130 GEOM::GEOM_BaseObject_var geomObj;
2132 SALOME_ListIO selected;
2133 getApp()->selectionMgr()->selectedObjects( selected );
2135 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2136 SALOME_ListIteratorOfListIO selIt( selected );
2137 for ( ; selIt.More(); selIt.Next() )
2139 Handle(SALOME_InteractiveObject) io = selIt.Value();
2140 if ( !io->hasEntry() ) continue;
2141 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2142 if ( !GeometryGUI::IsInGeomComponent( sobj )) continue;
2143 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2144 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2145 if ( !gobj->_is_nil() )
2147 if ( !geomObj->_is_nil() )
2148 return; // several GEOM objects selected
2152 if ( geomObj->_is_nil() ) return;
2154 // pass creation info of geomObj to myCreationInfoWdg
2156 if ( myCreationInfoWdg ) {
2158 GEOM::CreationInformationSeq_var info;
2161 info = geomObj->GetCreationInformation();
2165 myCreationInfoWdg->setInfo( info );
2169 void GeometryGUI::onAutoBringToFront()
2171 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2172 if( !isAutoBringToFront )
2175 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2176 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2179 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2180 if (!appStudy) return;
2182 GEOM_Displayer displayer;
2184 SALOME_View* window = displayer.GetActiveView();
2185 if ( !window ) return;
2187 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2189 SALOME_ListIO selected;
2190 getApp()->selectionMgr()->selectedObjects( selected );
2191 if (!myTopLevelIOList.IsEmpty())
2193 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2195 Handle( SALOME_InteractiveObject ) io = It.Value();
2196 bool isSelected = false;
2197 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2199 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2200 if( io->isSame( sel_io ) )
2203 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2205 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2206 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2211 myTopLevelIOList.Assign(selected);
2212 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2214 Handle( SALOME_InteractiveObject ) io = It.Value();
2215 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2216 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2219 displayer.UpdateViewer();
2220 GeometryGUI::Modified();
2223 void GeometryGUI::updateFieldColorScale()
2225 GEOM_Displayer aDisplayer;
2226 aDisplayer.UpdateColorScale();
2229 QString GeometryGUI::engineIOR() const
2231 if ( !CORBA::is_nil( GetGeomGen() ) )
2232 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2236 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture (int theId, int& theWidth, int& theHeight)
2238 theWidth = theHeight = 0;
2239 Handle(TColStd_HArray1OfByte) aTexture;
2241 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations();
2242 if ( !aInsOp->_is_nil() ) {
2243 CORBA::Long aWidth, aHeight;
2244 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2245 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2247 theHeight = aHeight;
2249 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2251 for ( CORBA::ULong i = 0; i < aStream->length(); i++)
2252 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2258 LightApp_Selection* GeometryGUI::createSelection() const
2260 return new GEOMGUI_Selection();
2263 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2265 SalomeApp_Module::contextMenuPopup( client, menu, title );
2267 getApp()->selectionMgr()->selectedObjects( lst );
2269 // Update submenu for predefined materials
2270 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2271 QMenu* matMenu = action( GEOMOp::OpMaterialMenu )->menu();
2273 QSignalMapper* signalMapper = new QSignalMapper( menu );
2276 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2277 if ( anApp && anApp->activeViewManager() ) {
2278 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2280 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2283 QString curModel = "";
2284 if ( v.canConvert<QString>() ) curModel = v.toString();
2286 // get list of all predefined materials
2287 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2289 foreach ( QString material, materials )
2291 QAction* a = matMenu->addAction( material );
2292 connect( a, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2293 signalMapper->setMapping( a, material );
2294 a->setCheckable( true );
2296 Material_Model aModel;
2297 aModel.fromResources( material );
2298 if ( !found && aModel.toProperties() == curModel ) {
2299 a->setChecked( true );
2303 matMenu->addSeparator();
2304 matMenu->addAction( action( GEOMOp::OpPredefMaterCustom ) );
2305 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2306 this, SLOT( OnSetMaterial( const QString & ) ) );
2309 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2310 Handle(SALOME_InteractiveObject) io = lst.First();
2311 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2312 _PTR(Study) study = appStudy->studyDS();
2313 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2315 QString aName = QString( obj->GetName().c_str() );
2316 aName.remove( QRegExp("\\s+$") );
2322 void GeometryGUI::OnSetMaterial(const QString& theName)
2324 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2328 void GeometryGUI::createPreferences()
2330 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2332 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2334 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2335 setPreferenceProperty( genGroup, "columns", 2 );
2337 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2338 LightApp_Preferences::Selector,
2339 "Geometry", "display_mode" );
2341 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2342 LightApp_Preferences::Color, "Geometry", "shading_color" );
2344 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2345 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2347 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2348 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2350 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2351 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2353 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2354 LightApp_Preferences::Color, "Geometry", "line_color" );
2356 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2357 LightApp_Preferences::Color, "Geometry", "point_color" );
2359 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2360 LightApp_Preferences::Color, "Geometry", "isos_color" );
2362 addPreference( tr( "PREF_LABEL_COLOR" ), genGroup,
2363 LightApp_Preferences::Color, "Geometry", "label_color" );
2365 addPreference( "", genGroup, LightApp_Preferences::Space );
2367 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2368 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2370 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2371 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2373 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2374 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2376 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2377 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2379 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2380 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2382 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2383 LightApp_Preferences::Selector,
2384 "Geometry", "material" );
2386 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2387 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2393 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2394 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2396 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2397 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2399 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2400 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2402 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2403 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2405 for (int i = 0; i < nb; i++) {
2406 setPreferenceProperty( wd[i], "min", 1 );
2407 setPreferenceProperty( wd[i], "max", 5 );
2410 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2411 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2413 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2414 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2416 // --------------------------------------------------------------------------
2417 // Dimensions (Measurements) preferences
2418 // --------------------------------------------------------------------------
2420 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2421 setPreferenceProperty( aDimGroupId, "columns", 2 );
2423 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2424 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2426 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2427 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2429 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2430 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2432 int aDimFontId = addPreference( tr( "PREF_DIMENSIONS_FONT" ), aDimGroupId, LightApp_Preferences::Font, "Geometry", "dimensions_font" );
2434 int f = QtxFontEdit::Family | QtxFontEdit::Size;
2435 setPreferenceProperty( aDimFontId, "features", f );
2436 setPreferenceProperty( aDimFontId, "mode", QtxFontEdit::Custom );
2438 Handle(Font_FontMgr) fmgr = Font_FontMgr::GetInstance();
2439 QString aFontFile = "";
2440 resMgr->value("resources", "GEOM", aFontFile);
2441 aFontFile = aFontFile + QDir::separator() + "Y14.5M-2009.ttf";
2442 // add enginier font into combobox
2443 /*int fontID =*/ QFontDatabase::addApplicationFont( aFontFile );
2444 Handle(Font_SystemFont) sf = new Font_SystemFont( TCollection_AsciiString("Y14.5M-2009") );
2445 sf->SetFontPath( Font_FA_Regular,
2446 TCollection_AsciiString( aFontFile.toLatin1().data() ) );
2447 // register font in OCC font manager
2448 fmgr->RegisterFont( sf, Standard_False );
2450 // get list of supported fonts by OCC
2451 QStringList anOCCFonts;
2452 TColStd_SequenceOfHAsciiString theFontsNames;
2453 fmgr->GetAvailableFontsNames( theFontsNames );
2454 for(Standard_Integer i=1; i<=theFontsNames.Length(); i++) {
2455 Handle(TCollection_HAsciiString) str = theFontsNames(i);
2456 anOCCFonts << str->ToCString();
2458 anOCCFonts.removeDuplicates();
2459 // set the supported fonts into combobox to use its only
2460 setPreferenceProperty( aDimFontId, "fonts", anOCCFonts );
2462 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2463 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2465 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2466 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2467 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2469 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2470 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2472 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2473 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2475 QStringList aListOfLengthUnits;
2476 aListOfLengthUnits << "m";
2477 aListOfLengthUnits << "cm";
2478 aListOfLengthUnits << "mm";
2479 aListOfLengthUnits << "in.";
2480 aListOfLengthUnits << "ft.";
2482 QStringList aListOfAngUnits;
2483 aListOfAngUnits << "rad";
2484 aListOfAngUnits << "deg";
2486 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2487 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2489 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2490 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2492 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2493 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2495 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2496 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2497 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2499 addPreference( tr( "PREF_DIMENSIONS_USE_TEXT3D" ), aDimGroupId,
2500 LightApp_Preferences::Bool, "Geometry", "dimensions_use_text3d" );
2502 // --------------------------------------------------------------------------
2503 // Shape annotation preferences
2504 // --------------------------------------------------------------------------
2506 const int aShapeAnnGroupId = addPreference( tr( "PREF_SHAPE_ANNOTATIONS" ), tabId );
2507 setPreferenceProperty( aShapeAnnGroupId, "columns", 2 );
2509 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_FONT_COLOR" ), aShapeAnnGroupId, LightApp_Preferences::Color, "Geometry", "shape_annotation_font_color" );
2510 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_COLOR" ), aShapeAnnGroupId, LightApp_Preferences::Color, "Geometry", "shape_annotation_line_color" );
2511 const int aShapeAnnFont =
2512 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_FONT" ), aShapeAnnGroupId, LightApp_Preferences::Font, "Geometry", "shape_annotation_font" );
2514 int aShapeAnnFontFeatures = QtxFontEdit::Family | QtxFontEdit::Size | QtxFontEdit::Bold | QtxFontEdit::Italic;
2515 setPreferenceProperty( aShapeAnnFont, "features", aShapeAnnFontFeatures );
2516 setPreferenceProperty( aShapeAnnFont, "mode", QtxFontEdit::Custom );
2517 setPreferenceProperty( aShapeAnnFont, "fonts", anOCCFonts );
2519 const int aShapeAnnLineWidth =
2520 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_WIDTH" ), aShapeAnnGroupId, LightApp_Preferences::IntSpin, "Geometry", "shape_annotation_line_width" );
2522 setPreferenceProperty( aShapeAnnLineWidth, "min", 1 );
2523 setPreferenceProperty( aShapeAnnLineWidth, "max", 5 );
2525 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_AUTOHIDE" ), aShapeAnnGroupId, LightApp_Preferences::Bool, "Geometry", "shape_annotation_autohide" );
2527 const int aShapeAnnLineStyle =
2528 addPreference( tr( "PREF_SHAPE_ANNOTATIONS_LINE_STYLE" ), aShapeAnnGroupId, LightApp_Preferences::Selector, "Geometry", "shape_annotation_line_style" );
2530 QStringList aLineStyleList;
2531 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_SOLID") );
2532 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DASH") );
2533 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DOT") );
2534 aLineStyleList.append( tr("PREF_SHAPE_ANNOTATIONS_LINESTYLE_DOTDASH") );
2536 QList<QVariant> aLineStyleIds;
2537 aLineStyleIds.append(0);
2538 aLineStyleIds.append(1);
2539 aLineStyleIds.append(2);
2540 aLineStyleIds.append(3);
2542 setPreferenceProperty( aShapeAnnLineStyle, "strings", aLineStyleList );
2543 setPreferenceProperty( aShapeAnnLineStyle, "indexes", aLineStyleIds );
2545 // --------------------------------------------------------------------------
2546 // Isoline drawing preferences
2547 // --------------------------------------------------------------------------
2549 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2550 setPreferenceProperty( isoGroup, "columns", 2 );
2551 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2552 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2553 setPreferenceProperty( isoU, "min", 0 );
2554 setPreferenceProperty( isoU, "max", 100000 );
2555 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2556 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2557 setPreferenceProperty( isoV, "min", 0 );
2558 setPreferenceProperty( isoV, "max", 100000 );
2560 // Quantities with individual precision settings
2561 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2562 setPreferenceProperty( precGroup, "columns", 2 );
2564 const int nbQuantities = 8;
2565 int prec[nbQuantities], ii = 0;
2566 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2567 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2568 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2569 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2570 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2571 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2572 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2573 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2574 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2575 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2576 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2577 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2578 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2579 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2580 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2581 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2583 // Set property for precision value for spinboxes
2584 for ( ii = 0; ii < nbQuantities; ii++ ){
2585 setPreferenceProperty( prec[ii], "min", -14 );
2586 setPreferenceProperty( prec[ii], "max", 14 );
2587 setPreferenceProperty( prec[ii], "precision", 2 );
2590 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2591 setPreferenceProperty( VertexGroup, "columns", 2 );
2593 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2594 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2596 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2597 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2599 // Set property for default display mode
2600 QStringList aModesList;
2601 aModesList.append( tr("MEN_WIREFRAME") );
2602 aModesList.append( tr("MEN_SHADING") );
2603 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2604 aModesList.append( tr("MEN_TEXTURE") );
2606 QList<QVariant> anIndexesList;
2607 anIndexesList.append(0);
2608 anIndexesList.append(1);
2609 anIndexesList.append(2);
2610 anIndexesList.append(3);
2612 setPreferenceProperty( dispmode, "strings", aModesList );
2613 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2615 // Set property for top level display mode
2616 QStringList aTopModesList;
2617 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2618 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2619 aTopModesList.append( tr("MEN_WIREFRAME") );
2620 aTopModesList.append( tr("MEN_SHADING") );
2621 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2623 QList<QVariant> aTopIndexesList;
2624 aTopIndexesList.append(0);
2625 aTopIndexesList.append(1);
2626 aTopIndexesList.append(2);
2627 aTopIndexesList.append(3);
2628 aTopIndexesList.append(4);
2630 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2631 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2633 // Set property for step value for spinboxes
2634 setPreferenceProperty( step, "min", 1 );
2635 setPreferenceProperty( step, "max", 10000 );
2636 setPreferenceProperty( step, "precision", 3 );
2638 // Set property for trandparency value for spinboxes
2639 setPreferenceProperty( transparency, "min", 0 );
2640 setPreferenceProperty( transparency, "max", 100 );
2642 // Set property for deflection value for spinboxes
2643 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2644 setPreferenceProperty( defl, "max", 1.0 );
2645 setPreferenceProperty( defl, "step", 1.0e-04 );
2646 setPreferenceProperty( defl, "precision", 6 );
2648 // Set property for default material
2649 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2651 // Set property vertex marker type
2652 QList<QVariant> aMarkerTypeIndicesList;
2653 QList<QVariant> aMarkerTypeIconsList;
2655 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2656 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2657 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2658 aMarkerTypeIndicesList << (i-1);
2659 aMarkerTypeIconsList << pixmap;
2662 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2663 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2665 // Set property for vertex marker scale
2666 QList<QVariant> aMarkerScaleIndicesList;
2667 QStringList aMarkerScaleValuesList;
2669 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2670 aMarkerScaleIndicesList << iii;
2671 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2674 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2675 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2677 // Scalar bar for field step presentation
2678 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2679 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2681 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2682 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2683 setPreferenceProperty( sbXPosition, "min", 0 );
2684 setPreferenceProperty( sbXPosition, "max", 1 );
2685 setPreferenceProperty( sbXPosition, "step", 0.05 );
2687 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2688 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2689 setPreferenceProperty( sbYPosition, "min", 0 );
2690 setPreferenceProperty( sbYPosition, "max", 1 );
2691 setPreferenceProperty( sbYPosition, "step", 0.05 );
2693 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2694 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2695 setPreferenceProperty( sbWidth, "min", 0 );
2696 setPreferenceProperty( sbWidth, "max", 1 );
2697 setPreferenceProperty( sbWidth, "step", 0.05 );
2699 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2700 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2701 setPreferenceProperty( sbHeight, "min", 0 );
2702 setPreferenceProperty( sbHeight, "max", 1 );
2703 setPreferenceProperty( sbHeight, "step", 0.05 );
2705 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2706 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2707 setPreferenceProperty( sbTextHeight, "min", 6 );
2708 setPreferenceProperty( sbTextHeight, "max", 24 );
2709 setPreferenceProperty( sbTextHeight, "step", 1 );
2711 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2712 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2713 setPreferenceProperty( sbNbIntervals, "min", 2 );
2714 setPreferenceProperty( sbNbIntervals, "max", 64 );
2715 setPreferenceProperty( sbNbIntervals, "step", 1 );
2717 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2718 setPreferenceProperty( originGroup, "columns", 2 );
2720 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2721 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2722 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2723 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2725 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2726 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2728 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2729 setPreferenceProperty( operationsGroup, "columns", 2 );
2731 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2732 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2734 addPreference( tr( "PREF_HIDE_INPUT_OBJECT" ), operationsGroup,
2735 LightApp_Preferences::Bool, "Geometry", "hide_input_object" );
2737 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2739 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2741 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2742 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2744 QStringList aHierarchyTypeList;
2745 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2746 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2747 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2749 QList<QVariant> aHierarchyTypeIndexesList;
2750 aHierarchyTypeIndexesList.append(0);
2751 aHierarchyTypeIndexesList.append(1);
2752 aHierarchyTypeIndexesList.append(2);
2754 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2755 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2757 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2758 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2760 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2762 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2763 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2765 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2766 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2767 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2768 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2769 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2770 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2771 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2772 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2774 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2775 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2776 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2777 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2778 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2779 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2786 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2788 if (section == "Geometry") {
2789 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2790 if (param == QString("SettingsGeomStep")) {
2791 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2792 EmitSignalDefaultStepValueChanged(spin_step);
2794 else if (param == QString("toplevel_color")) {
2795 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2796 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2798 else if (param == QString("toplevel_dm")) {
2799 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2801 else if (param == QString("scalar_bar_x_position") ||
2802 param == QString("scalar_bar_y_position") ||
2803 param == QString("scalar_bar_width") ||
2804 param == QString("scalar_bar_height") ||
2805 param == QString("scalar_bar_text_height") ||
2806 param == QString("scalar_bar_nb_intervals")) {
2807 updateFieldColorScale();
2809 else if ( param == QString("dimensions_color") ||
2810 param == QString("dimensions_line_width") ||
2811 param == QString("dimensions_font") ||
2812 param == QString("dimensions_arrow_length") ||
2813 param == QString("dimensions_show_units") ||
2814 param == QString("dimensions_length_units") ||
2815 param == QString("dimensions_angle_units") ||
2816 param == QString("dimensions_use_text3d") ||
2817 param == QString("shape_annotation_font_color") ||
2818 param == QString("shape_annotation_line_color") ||
2819 param == QString("shape_annotation_font") ||
2820 param == QString("shape_annotation_line_width") ||
2821 param == QString("shape_annotation_autohide") ||
2822 param == QString("shape_annotation_line_style") ||
2823 param == QString("shape_annotation_line_style") ||
2824 param == QString("label_color") )
2826 SalomeApp_Application* anApp = getApp();
2832 GEOM_Displayer aDisplayer;
2834 ViewManagerList aVMs;
2835 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2836 ViewManagerList::Iterator anIt = aVMs.begin();
2837 for ( ; anIt != aVMs.end(); ++anIt )
2839 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2845 SALOME_ListIO aVisible;
2846 aViewer->GetVisible( aVisible );
2848 GEOMGUI_AnnotationMgr* anAnnotationMgr = GetAnnotationMgr();
2849 if ( anAnnotationMgr ) {
2850 SALOME_ListIteratorOfListIO anIter( aVisible );
2851 while ( anIter.More() ) {
2852 if ( anAnnotationMgr->isAnnotationEntry( anIter.Value()->getEntry() ) ) {
2853 aVisible.Remove( anIter );
2861 aDisplayer.Redisplay( aVisible, false, aViewer );
2863 if ( param == QString( "label_color" ) ) {
2864 ViewManagerList aVMsVTK;
2865 anApp->viewManagers( SVTK_Viewer::Type(), aVMsVTK );
2866 ViewManagerList::Iterator anIt = aVMsVTK.begin();
2867 for ( ; anIt != aVMsVTK.end(); ++anIt )
2869 SVTK_Viewer* aViewer = dynamic_cast<SVTK_Viewer*>( (*anIt)->getViewModel() );
2874 SALOME_ListIO aVisible;
2875 aViewer->GetVisible( aVisible );
2876 aDisplayer.Redisplay( aVisible, false, aViewer );
2879 aDisplayer.UpdateViewer();
2881 else if ( param.startsWith( "dependency_tree") )
2882 emit SignalDependencyTreeParamChanged( section, param );
2886 LightApp_Displayer* GeometryGUI::displayer()
2889 myDisplayer = new GEOM_Displayer();
2893 void GeometryGUI::setLocalSelectionMode(const int mode)
2895 myLocalSelectionMode = mode;
2898 int GeometryGUI::getLocalSelectionMode() const
2900 return myLocalSelectionMode;
2903 const char gSeparator = '_'; // character used to separate parameter names
2904 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2907 * \brief Store visual parameters
2909 * This method is called just before the study document is saved.
2910 * Store visual parameters in AttributeParameter attribute(s)
2912 void GeometryGUI::storeVisualParameters (int savePoint)
2914 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2915 if ( !appStudy || !appStudy->studyDS() )
2918 _PTR(Study) studyDS = appStudy->studyDS();
2920 // componentName is used for encoding of entries when storing them in IParameters
2921 std::string componentName = myComponentGeom->ComponentDataType();
2922 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2923 //if (!aSComponent) return;
2926 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2927 componentName.c_str(),
2929 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2931 QSet<QString> anEntriesToStoreShared;
2932 QList<SUIT_ViewManager*> lst;
2933 QList<SUIT_ViewManager*>::Iterator it;
2935 GEOMGUI_AnnotationMgr* aAnnotationMgr = GetAnnotationMgr();
2937 // main cycle to store parameters of displayed objects
2939 getApp()->viewManagers(lst);
2940 for (it = lst.begin(); it != lst.end(); it++) {
2941 SUIT_ViewManager* vman = *it;
2942 QString vType = vman->getType();
2943 SUIT_ViewModel* vmodel = vman->getViewModel();
2944 SALOME_View* aView = dynamic_cast<SALOME_View*>(vmodel);
2946 int aMgrId = vman->getGlobalId();
2947 // saving VTK actors properties
2948 QVector<SUIT_ViewWindow*> views = vman->getViews();
2949 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2950 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
2951 ObjMap::ConstIterator o_it = anObjects.begin();
2952 for (; o_it != anObjects.end(); o_it++) {
2953 const PropMap& aProps = o_it.value();
2955 //Check that object exists in the study
2956 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toUtf8().data() ) );
2957 if ( !obj || !(aProps.count() > 0))
2959 // entry is "encoded" = it does NOT contain component address, since it is a
2960 // subject to change on next component loading
2962 std::string entry = ip->encodeEntry(o_it.key().toUtf8().data(), componentName);
2964 _PTR(GenericAttribute) anAttr;
2965 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2968 // remember entry of object to store shared GEOM properties
2969 // (e.g. dimension properties).
2970 if ( vType == OCCViewer_Viewer::Type() )
2972 anEntriesToStoreShared.insert( o_it.key() );
2975 QString param, occParam = vType;
2976 occParam += GEOM::sectionSeparator();
2977 occParam += QString::number(aMgrId);
2978 occParam += GEOM::sectionSeparator();
2980 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2981 param = occParam + GEOM::propertyName( GEOM::Visibility );
2982 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2985 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2986 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2987 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2990 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2991 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2993 val << QString::number(c.redF());
2994 val << QString::number(c.greenF());
2995 val << QString::number(c.blueF());
2996 param = occParam + GEOM::propertyName( GEOM::Color );
2997 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
3000 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
3001 param = occParam + GEOM::propertyName( GEOM::Texture );
3002 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
3005 if (vType == SVTK_Viewer::Type()) {
3006 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
3007 param = occParam + GEOM::propertyName( GEOM::Opacity );
3008 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
3010 } else if (vType == SOCC_Viewer::Type()) {
3011 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
3012 param = occParam + GEOM::propertyName( GEOM::Transparency );
3013 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
3016 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
3017 param = occParam + GEOM::propertyName( GEOM::TopLevel );
3018 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
3022 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
3023 param = occParam + GEOM::propertyName( GEOM::NbIsos );
3024 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
3027 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
3028 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
3029 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
3032 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
3033 param = occParam + GEOM::propertyName( GEOM::Vertices );
3034 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
3037 if (aProps.contains(GEOM::propertyName( GEOM::ShowName ))) {
3038 param = occParam + GEOM::propertyName( GEOM::ShowName );
3039 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::ShowName )).toString().toStdString());
3042 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
3043 param = occParam + GEOM::propertyName( GEOM::Deflection );
3044 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
3047 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
3048 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
3049 param = occParam + GEOM::propertyName( GEOM::PointMarker );
3050 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
3053 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
3054 param = occParam + GEOM::propertyName( GEOM::Material );
3055 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
3058 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
3059 param = occParam + GEOM::propertyName( GEOM::LineWidth );
3060 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
3063 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
3064 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
3065 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
3068 if ( vType == SOCC_Viewer::Type() && aAnnotationMgr ) {
3069 std::string anAnnotationInfo = GetAnnotationMgr()->getDisplayedIndicesInfo(
3070 o_it.key().toUtf8().data(), dynamic_cast<SOCC_Viewer*>(aView) ).toStdString();
3071 if (!anAnnotationInfo.empty()) {
3072 param = occParam + "ShapeAnnotationVisibleItems";
3073 ip->setParameter(entry, param.toStdString(), anAnnotationInfo);
3076 } // object iterator
3078 } // for (viewManagers)
3080 // store shape annotation and dimension attributes of objects:
3081 // since the displayed object always persists in property map, we remember the object entries
3082 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
3083 const QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
3084 const QString aAnnotationParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::ShapeAnnotations );
3085 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
3086 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
3088 std::string aStudyEntry = (*aEntryIt).toUtf8().data();
3089 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName );
3091 // store dimension parameters
3092 GEOMGUI_DimensionProperty aDimensions( aStudyEntry );
3093 if ( aDimensions.GetNumber() != 0 ) {
3094 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toUtf8().data() );
3097 _PTR(SObject) aObj( studyDS->FindObjectID( aStudyEntry ) );
3098 const Handle(GEOMGUI_AnnotationAttrs) aShapeAnnAttr = GEOMGUI_AnnotationAttrs::FindAttributes( aObj );
3099 if ( !aShapeAnnAttr.IsNull() ) {
3100 ip->setParameter( aStoreEntry, aAnnotationParam.toStdString(), aShapeAnnAttr->ExportAsPropertyString().toUtf8().data() );
3106 * \brief Restore visual parameters
3108 * This method is called after the study document is opened.
3109 * Restore visual parameters from AttributeParameter attribute(s)
3111 void GeometryGUI::restoreVisualParameters (int savePoint)
3113 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
3114 if (!appStudy || !appStudy->studyDS())
3116 _PTR(Study) studyDS = appStudy->studyDS();
3118 // componentName is used for encoding of entries when storing them in IParameters
3119 std::string componentName = myComponentGeom->ComponentDataType();
3120 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
3121 //if (!aSComponent) return;
3124 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
3125 componentName.c_str(),
3127 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
3129 std::vector<std::string> entries = ip->getEntries();
3131 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
3133 // entry is a normal entry - it should be "decoded" (setting base address of component)
3134 QString entry (ip->decodeEntry(*entIt).c_str());
3136 // Check that the entry corresponds to a real object in the Study
3137 // as the object may be deleted or modified after the visual state is saved.
3138 _PTR(SObject) so = studyDS->FindObjectID(entry.toUtf8().data());
3139 if (!so) continue; //Skip the not existent entry
3141 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
3142 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
3144 std::vector<std::string>::iterator namesIt = paramNames.begin();
3145 std::vector<std::string>::iterator valuesIt = paramValues.begin();
3147 // actors are stored in a map after displaying of them for
3148 // quicker access in the future: map < viewID to actor >
3149 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
3150 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
3152 QString viewerTypStr;
3153 QString viewIndexStr;
3155 QVector<PropMap> aListOfMap;
3157 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
3159 // visual parameters are stored in strings as follows:
3160 // 1) ViewerType_ViewIndex_ParamName
3161 // 2) ViewerType_ParamName (shared for GEOM module)
3162 // '_' is used as separator and should not be used in viewer type or parameter names.
3163 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
3165 bool isShared = lst.size() == 2;
3166 bool isViewer = lst.size() == 3;
3167 if ( !isShared && !isViewer )
3172 // shared visual parameters
3175 QString aParamNameStr( lst[1] );
3176 QString aValuesStr( (*valuesIt).c_str() );
3178 // shared dimension properties are stored as attribute
3179 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
3181 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
3182 aDimensionProp.SaveToAttribute( entry.toUtf8().data() );
3184 else if ( aParamNameStr == GEOM::propertyName( GEOM::ShapeAnnotations ) )
3186 Handle(GEOMGUI_AnnotationAttrs) anAttr =
3187 GEOMGUI_AnnotationAttrs::FindOrCreateAttributes( so, appStudy );
3189 anAttr->ImportFromPropertyString( aValuesStr );
3195 // per view visual parameters
3196 viewerTypStr = lst[0];
3197 viewIndexStr = lst[1];
3198 QString paramNameStr = lst[2];
3201 viewIndex = viewIndexStr.toUInt(&ok);
3202 if (!ok) // bad conversion of view index to integer
3205 if ((viewIndex + 1) > aListOfMap.count()) {
3206 aListOfMap.resize(viewIndex + 1);
3209 QString val((*valuesIt).c_str());
3210 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
3211 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
3212 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
3213 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
3214 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
3215 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
3216 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
3217 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
3218 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
3219 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
3220 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
3221 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
3222 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
3223 QStringList rgb = val.split(GEOM::subSectionSeparator());
3224 if (rgb.count() == 3) {
3225 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
3226 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
3228 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
3229 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
3230 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
3231 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
3232 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
3233 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
3234 } else if (paramNameStr == GEOM::propertyName( GEOM::ShowName )) {
3235 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::ShowName ), val == "true" || val == "1");
3236 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3237 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3238 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3239 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3240 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3241 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3242 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3243 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3244 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3245 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3246 } else if (paramNameStr == "ShapeAnnotationVisibleItems") {
3247 aListOfMap[viewIndex].insert( "ShapeAnnotationVisibleItems", val);
3250 } // for names/parameters iterator
3252 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3254 for (int index = 0; index < aListOfMap.count(); index++) {
3255 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
3257 //Get Visibility property of the current PropMap
3258 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3259 SUIT_ViewManager* vman = lst.at(index);
3260 SUIT_ViewModel* vmodel = vman->getViewModel();
3261 SALOME_View* aView = dynamic_cast<SALOME_View*>(vmodel);
3262 displayer()->Display(entry, true, aView);
3264 if ( vmodel->getType() == SOCC_Viewer::Type() ) {
3265 PropMap& aProps = aListOfMap[index];
3266 if ( aProps.contains( "ShapeAnnotationVisibleItems" ) ) {
3267 SOCC_Viewer* aSOCCView = dynamic_cast<SOCC_Viewer*>( aView );
3268 GetAnnotationMgr()->setDisplayedIndicesInfo( entry, aSOCCView, aProps["ShapeAnnotationVisibleItems"].toString() );
3273 } // for entries iterator
3275 // update all VTK and OCC views
3276 QList<SUIT_ViewManager*> lst;
3277 getApp()->viewManagers(lst);
3278 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3279 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3282 if (vmodel->getType() == SVTK_Viewer::Type()) {
3283 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3284 vtkView->getRenderer()->ResetCameraClippingRange();
3287 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3288 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3289 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3295 if ( myTextTreeWdg ) {
3296 myTextTreeWdg->updateTree();
3300 // Compute current name mode of the viewer
3301 void UpdateNameMode( SalomeApp_Application* app )
3303 bool isMode = false;
3304 SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() );
3305 SUIT_ViewWindow* viewWindow = app->desktop()->activeWindow();
3306 GEOM_Displayer displayer;
3307 int aMgrId = viewWindow->getViewManager()->getGlobalId();
3309 SALOME_View* window = displayer.GetActiveView();
3310 if ( !window ) return;
3312 SALOME_ListIO anIOlst;
3313 window->GetVisible( anIOlst );
3315 for ( SALOME_ListIteratorOfListIO It( anIOlst ); It.More(); It.Next() ) {
3316 Handle( SALOME_InteractiveObject ) io = It.Value();
3317 QVariant v = aStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::ShowName ), QVariant() );
3318 bool isIONameMode = v.isValid() ? v.toBool() : false;
3322 viewWindow->setProperty( "NameMode", isMode );
3325 void GeometryGUI::onViewAboutToShow()
3327 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3328 QAction* a = action( GEOMOp::OpSwitchVectors );
3329 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3330 QAction* aNameAction = action( GEOMOp::OpSwitchName );
3332 a->setEnabled(true);
3333 bool vmode = window->property("VectorsMode").toBool();
3334 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3335 aVerticesAction->setEnabled(true);
3336 vmode = window->property("VerticesMode").toBool();
3337 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3338 UpdateNameMode( getApp() );
3339 aNameAction->setEnabled(true);
3340 vmode = window->property("NameMode").toBool();
3341 aNameAction->setText ( vmode == 1 ? tr( "MEN_NAME_MODE_OFF" ) : tr("MEN_NAME_MODE_ON") );
3343 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3344 a->setEnabled(false);
3345 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3346 aVerticesAction->setEnabled(false);
3347 aNameAction->setText ( tr("MEN_NAME_MODE_ON") );
3348 aNameAction->setEnabled(false);
3353 \brief Return action by id
3354 \param id identifier of the action
3357 QAction* GeometryGUI::getAction(const int id) {
3362 \brief GEOM module message handler
3364 This method can be re-implemented in the subclasses.
3365 This is a GEOM module message handler.
3367 \param msg the message received.
3369 void GeometryGUI::message(const QString& msg)
3372 QStringList data = msg.split("/");
3373 const int nbStrings = data.count();
3375 if (nbStrings > 0) {
3376 if (data[0] == "modified") {
3378 QString anIOR = nbStrings > 1 ? data[1] : QString();
3380 if ( anIOR.isEmpty() ) {
3384 // Get the geom object.
3385 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3387 // Clear the shape buffer
3388 GeometryGUI::ClearShapeBuffer (anObj);
3394 \brief Clears the shape buffer.
3396 This is a static method. It clears the shape buffer.
3398 \param theObj the object
3400 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3402 if ( CORBA::is_nil( theObj ) )
3405 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3406 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3407 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3409 SalomeApp_Application* app =
3410 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3411 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3416 _PTR(Study) aStudy = appStudy->studyDS();
3421 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3425 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3426 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3427 _PTR(GenericAttribute) anAttr;
3428 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3429 _PTR(AttributeIOR) anIOR ( anAttr );
3430 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3431 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3437 \brief Returns the object from IOR.
3439 This is a static method. It returns the object from its IOR.
3441 \param IOR object IOR
3442 \return GEOM object.
3444 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3446 GEOM::GEOM_Object_var geomObj;
3447 if ( !IOR.isEmpty() ) {
3448 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3449 ( IOR.toLatin1().constData() );
3450 if ( !CORBA::is_nil( corbaObj ) )
3451 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3453 return geomObj._retn();
3457 \brief Returns IOR of the object.
3459 This is a static method. It returns the object's IOR.
3461 \param object the GEOM object.
3462 \return object's IOR.
3464 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3467 if ( !CORBA::is_nil( object ) ) {
3468 CORBA::String_var anIOR =
3469 SalomeApp_Application::orb()->object_to_string( object );
3476 \brief Check if this object is can't be renamed in place
3478 This method can be re-implemented in the subclasses.
3479 Return true in case if object isn't reference or component (module root).
3481 \param entry column id
3482 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3484 bool GeometryGUI::renameAllowed( const QString& entry) const {
3486 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3487 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3488 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3490 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3494 Rename object by entry.
3495 \param entry entry of the object
3496 \param name new name of the object
3497 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3499 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3501 bool result = false;
3503 SalomeApp_Application* app =
3504 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3505 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3510 _PTR(Study) aStudy = appStudy->studyDS();
3515 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3517 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3521 _PTR(SObject) obj ( aStudy->FindObjectID(qUtf8Printable(entry)) );
3522 _PTR(GenericAttribute) anAttr;
3524 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3525 _PTR(AttributeName) aName (anAttr);
3527 aName->SetValue( name.toUtf8().data() ); // rename the SObject
3528 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3529 if (!CORBA::is_nil(anObj)) {
3530 anObj->SetName( name.toUtf8().data() ); // Rename the corresponding GEOM_Object
3531 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3532 emit SignalTextTreeRenameObject( entry );
3540 void GeometryGUI::updateMaterials()
3542 LightApp_Preferences* pref = preferences();
3544 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3545 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3546 if ( !materials.contains( currentMaterial ) )
3547 // user material set as default in the preferences, might be removed
3548 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3550 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3552 setPreferenceProperty( prefItem->id(),
3553 "strings", materials );
3554 prefItem->retrieve();
3560 \brief Check if the module allows "drag" operation of its objects.
3562 Overloaded from LightApp_Module class.
3564 This function is a part of the general drag-n-drop mechanism.
3565 The goal of this function is to check data object passed as a parameter
3566 and decide if it can be dragged or no.
3568 \param what data object being tested for drag operation
3569 \return \c true if module allows dragging of the specified object
3570 \sa isDropAccepted(), dropObjects()
3572 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3574 // we allow dragging object under root and object from folder
3575 int aLevel = what->level();
3576 bool anObjectInFolder = false;
3578 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3580 _PTR(SObject) aSO = dataObj->object();
3582 _PTR(GenericAttribute) anAttr;
3583 _PTR(SObject) aFatherSO = SalomeApp_Application::getStudy()->GetUseCaseBuilder()->GetFather( aSO );
3584 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3585 _PTR(AttributeLocalID) aLocalID( anAttr );
3586 anObjectInFolder = aLocalID->Value() == 999;
3591 return aLevel == 2 || anObjectInFolder;
3595 \brief Check if the module allows "drop" operation on the given object.
3597 Overloaded from LightApp_Module class.
3599 This function is a part of the general drag-n-drop mechanism.
3600 The goal of this function is to check data object passed as a parameter
3601 and decide if it can be used as a target for the "drop" operation.
3602 The processing of the drop operation itself is done in the dropObjects() function.
3604 \param where target data object
3605 \return \c true if module supports dropping on the \a where data object
3606 \sa isDraggable(), dropObjects()
3608 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3610 // we allow dropping into folder and top-level GEOM object
3611 int aLevel = where->level();
3612 bool isFolder = false;
3614 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3616 _PTR(SObject) aSO = dataObj->object();
3618 _PTR(GenericAttribute) anAttr;
3619 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3620 _PTR(AttributeLocalID) aLocalID( anAttr );
3621 isFolder = aLocalID->Value() == 999;
3626 return aLevel == 1 || isFolder;
3630 \brief Complete drag-n-drop operation.
3632 Overloaded from LightApp_Module class.
3634 This function is a part of the general drag-n-drop mechanism.
3635 Its goal is to handle dropping of the objects being dragged according
3636 to the chosen operation (move). The dropping is performed in the
3637 context of the parent data object \a where and the \a row (position in the
3638 children index) at which the data should be dropped. If \a row is equal to -1,
3639 this means that objects are added to the end of the children list.
3641 \param what objects being dropped
3642 \param where target data object
3643 \param row child index at which the drop operation is performed
3644 \param action drag-n-drop operation (Qt::DropAction) - move
3646 \sa isDraggable(), isDropAccepted()
3648 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3649 const int row, Qt::DropAction action )
3651 if (action != Qt::CopyAction && action != Qt::MoveAction)
3652 return; // unsupported action
3654 // get parent object
3655 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3656 if ( !dataObj ) return; // wrong parent
3657 _PTR(SObject) parentObj = dataObj->object();
3659 // Find the current Study and StudyBuilder
3660 _PTR(Study) aStudy = SalomeApp_Application::getStudy();
3661 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3662 // collect all parents of the target node
3663 QStringList parentIDs;
3664 _PTR(SObject) parent = parentObj;
3665 while( !parent->IsNull() ) {
3666 parentIDs << parent->GetID().c_str();
3667 parent = aUseCaseBuilder->GetFather(parent);
3670 // collect objects being dropped
3671 GEOM::object_list_var objects = new GEOM::object_list();
3672 objects->length( what.count() );
3674 for ( int i = 0; i < what.count(); i++ ) {
3675 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3676 if ( !dataObj ) continue; // skip wrong objects
3677 _PTR(SObject) sobj = dataObj->object();
3678 // check that dropped object is not a parent of target object
3679 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3680 return; // it's not allowed to move node into it's child
3682 objects[i] = _CAST(SObject, sobj)->GetSObject();
3685 objects->length( count );
3687 // call engine function
3688 GetGeomGen()->Move( objects.in(), // what
3689 _CAST(SObject, parentObj)->GetSObject(), // where
3692 // update Object browser
3693 getApp()->updateObjectBrowser( false );
3696 void GeometryGUI::emitDimensionsUpdated( QString entry )
3698 emit DimensionsUpdated( entry );
3701 void GeometryGUI::emitAnnotationsUpdated( QString entry )
3703 emit SignalAnnotationsUpdated( entry );