1 // Copyright (C) 2007-2016 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"
43 #include "GEOM_Actor.h"
45 #include <Material_ResourceMgr.h>
46 #include <Material_Model.h>
48 #include <SUIT_Desktop.h>
49 #include <SUIT_MessageBox.h>
50 #include <SUIT_ResourceMgr.h>
51 #include <SUIT_Session.h>
52 #include <SUIT_ViewManager.h>
54 #include <OCCViewer_ViewWindow.h>
55 #include <OCCViewer_ViewPort3d.h>
56 #include <OCCViewer_ViewModel.h>
57 #include <OCCViewer_ViewManager.h>
59 #include <SOCC_ViewModel.h>
60 #include <SOCC_ViewWindow.h>
62 #include <SVTK_ViewWindow.h>
63 #include <SVTK_RenderWindowInteractor.h>
64 #include <SVTK_InteractorStyle.h>
65 #include <SVTK_ViewModel.h>
67 #ifndef DISABLE_GRAPHICSVIEW
68 #include <GraphicsView_Viewer.h>
71 #include <SalomeApp_Application.h>
72 #include <SalomeApp_DataObject.h>
73 #include <SalomeApp_Study.h>
74 #include <SalomeApp_Tools.h>
76 #include <LightApp_SelectionMgr.h>
77 #include <LightApp_VTKSelector.h>
78 #include <LightApp_DataObject.h>
79 #include <LightApp_Preferences.h>
81 #include <SALOME_LifeCycleCORBA.hxx>
82 #include <SALOME_ListIO.hxx>
84 #include <SALOMEDSClient_ClientFactory.hxx>
85 #include <SALOMEDSClient_IParameters.hxx>
87 #include <SALOMEDS_SObject.hxx>
89 #include <Basics_OCCTVersion.hxx>
90 #include <QtxFontEdit.h>
101 #include <QSignalMapper>
102 #include <QFontDatabase>
104 #include <AIS_ListOfInteractive.hxx>
105 #include <AIS_ListIteratorOfListOfInteractive.hxx>
106 #include <Prs3d_Drawer.hxx>
107 #include <Prs3d_IsoAspect.hxx>
108 #include <Aspect_TypeOfMarker.hxx>
109 #include <OSD_SharedLibrary.hxx>
110 #include <NCollection_DataMap.hxx>
112 #include <TColStd_HArray1OfByte.hxx>
113 #include <TColStd_SequenceOfHAsciiString.hxx>
115 #include <utilities.h>
117 #include <vtkCamera.h>
118 #include <vtkRenderer.h>
120 #include <Standard_Failure.hxx>
121 #include <Standard_ErrorHandler.hxx>
123 #include <Font_SystemFont.hxx>
124 #include <Font_FontMgr.hxx>
125 #include <TCollection_HAsciiString.hxx>
127 #include "GEOM_version.h"
128 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
131 Standard_EXPORT CAM_Module* createModule() {
132 return new GeometryGUI();
135 Standard_EXPORT char* getModuleVersion() {
136 return (char*)GEOM_VERSION_STR;
140 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
142 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
144 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
146 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
147 if (CORBA::is_nil(myComponentGeom))
149 return GeometryGUI::myComponentGeom;
152 bool GeometryGUI::InitGeomGen()
155 if ( CORBA::is_nil( myComponentGeom ) ) return false;
159 //=======================================================================
160 // function : ClientSObjectToObject
162 //=======================================================================
163 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
165 _PTR(GenericAttribute) anAttr;
166 CORBA::Object_var anObj;
168 std::string aValue = theSObject->GetIOR();
169 if (strcmp(aValue.c_str(), "") != 0) {
170 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
171 anObj = anORB->string_to_object(aValue.c_str());
174 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
176 return anObj._retn();
179 //=======================================================================
180 // function : ClientStudyToStudy
182 //=======================================================================
183 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
185 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
186 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
187 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
188 int aStudyID = theStudy->StudyId();
189 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
190 return aDSStudy._retn();
193 void GeometryGUI::Modified (bool theIsUpdateActions)
195 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
196 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
197 appStudy->Modified();
198 if ( theIsUpdateActions )
199 app->updateActions();
204 //=======================================================================
205 // function : GeometryGUI::GeometryGUI()
206 // purpose : Constructor
207 //=======================================================================
208 GeometryGUI::GeometryGUI() :
209 SalomeApp_Module( "GEOM" ),
212 if ( CORBA::is_nil( myComponentGeom ) )
214 Engines::EngineComponent_var comp =
215 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
216 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
219 myActiveDialogBox = 0;
221 gp_Pnt origin = gp_Pnt(0., 0., 0.);
222 gp_Dir direction = gp_Dir(0., 0., 1.);
223 myWorkingPlane = gp_Ax3(origin, direction);
226 myLocalSelectionMode = GEOM_ALLOBJECTS;
228 myCreationInfoWdg = 0;
231 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
233 Q_INIT_RESOURCE( GEOMGUI );
236 //=======================================================================
237 // function : GeometryGUI::~GeometryGUI()
238 // purpose : Destructor
239 //=======================================================================
240 GeometryGUI::~GeometryGUI()
242 while (!myOCCSelectors.isEmpty())
243 delete myOCCSelectors.takeFirst();
245 while (!myVTKSelectors.isEmpty())
246 delete myVTKSelectors.takeFirst();
248 qDeleteAll(myGUIMap);
251 //=======================================================================
252 // function : GeometryGUI::getLibrary()
253 // purpose : get or load GUI library by name [ internal ]
254 //=======================================================================
255 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
256 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
258 if ( !myGUIMap.contains( libraryName ) ) {
259 // try to load library if it is not loaded yet
261 QString dirs = getenv( "PATH" );
262 #elif defined(__APPLE__)
263 QString dirs = getenv( "DYLD_LIBRARY_PATH" );
265 QString dirs = getenv( "LD_LIBRARY_PATH" );
273 if ( !dirs.isEmpty() ) {
274 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
275 QListIterator<QString> it( dirList ); it.toBack();
276 while ( it.hasPrevious() ) {
277 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
279 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
280 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
282 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
283 continue; // continue search further
285 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
286 if ( osdF != NULL ) {
287 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
288 GEOMGUI* libGUI = (*func)( this );
290 myGUIMap[ libraryName ] = libGUI;
291 break; // found and loaded!
298 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
301 //=======================================================================
302 // function : GeometryGUI::getPluginLibrary()
303 // purpose : get or load GUI Plugin library by name [ internal ]
304 //=======================================================================
305 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
306 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
308 if ( !myGUIMap.contains( libraryName ) ) {
309 // try to load library if it is not loaded yet
312 QString dirs = getenv( "PATH" );
313 #elif defined(__APPLE__)
314 QString dirs = getenv( "DYLD_LIBRARY_PATH" );
316 QString dirs = getenv( "LD_LIBRARY_PATH" );
324 if ( !dirs.isEmpty() ) {
325 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
326 QListIterator<QString> it( dirList ); it.toBack();
327 while ( it.hasPrevious() ) {
328 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
330 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
331 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
333 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
334 continue; // continue search further
336 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
337 if ( osdF != NULL ) {
338 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
339 GEOMPluginGUI* libGUI = (*func)( this );
341 myGUIMap[ libraryName ] = libGUI;
342 break; // found and loaded!
349 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
352 //=======================================================================
353 // function : GeometryGUI::ActiveWorkingPlane()
354 // purpose : Activate Working Plane View
355 //=======================================================================
356 void GeometryGUI::ActiveWorkingPlane()
358 gp_Dir DZ = myWorkingPlane.Direction();
359 gp_Dir DY = myWorkingPlane.YDirection();
361 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
362 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
363 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
366 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
368 Handle(V3d_View) view3d = vw->getViewPort()->getView();
370 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
371 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
375 else if ( ViewVTK ) {
376 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
378 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
380 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
381 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
382 camera->SetFocalPoint(0,0,0);
389 //=======================================================================
390 // function : GeometryGUI::SetActiveDialogBox()
391 // purpose : Set active dialog box
392 //=======================================================================
393 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
395 myActiveDialogBox = (QDialog*)aDlg;
398 //=======================================================================
399 // function : GeometryGUI::EmitSignalDeactivateDialog()
400 // purpose : Emit a signal to deactivate the active dialog Box
401 //=======================================================================
402 void GeometryGUI::EmitSignalDeactivateDialog()
404 emit SignalDeactivateActiveDialog();
407 //=======================================================================
408 // function : GeometryGUI::EmitSignalCloseAllDialogs()
409 // purpose : Emit a signal to close all non modal dialogs box
410 //=======================================================================
411 void GeometryGUI::EmitSignalCloseAllDialogs()
413 emit SignalCloseAllDialogs();
416 //=======================================================================
417 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
418 // purpose : Emit a signal to inform that default real spin box step has
420 //=======================================================================
421 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
423 emit SignalDefaultStepValueChanged(newVal);
426 //=======================================================================
427 // function : GeometryGUI::OnGUIEvent()
428 // purpose : common slot for all menu/toolbar actions
429 //=======================================================================
430 void GeometryGUI::OnGUIEvent()
432 const QObject* obj = sender();
433 if ( !obj || !obj->inherits( "QAction" ) )
435 int id = actionId((QAction*)obj);
440 //=======================================================================
441 // function : GeometryGUI::OnGUIEvent()
442 // purpose : manage all events on GUI [static]
443 //=======================================================================
444 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
446 SUIT_Application* anApp = application();
448 SUIT_Desktop* desk = anApp->desktop();
450 // check type of the active viewframe
451 SUIT_ViewWindow* window = desk->activeWindow();
452 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
453 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
454 #ifndef DISABLE_GRAPHICSVIEW
455 bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() );
459 // if current viewframe is not of OCC and not of VTK type - return immediately
460 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
461 QList<int> NotViewerDependentCommands;
462 NotViewerDependentCommands << GEOMOp::OpDelete
464 << GEOMOp::OpShowOnly
465 << GEOMOp::OpShowOnlyChildren
466 << GEOMOp::OpDiscloseChildren
467 << GEOMOp::OpConcealChildren
468 << GEOMOp::OpUnpublishObject
469 << GEOMOp::OpPublishObject
470 << GEOMOp::OpPointMarker
471 << GEOMOp::OpCreateFolder
472 << GEOMOp::OpSortChildren;
473 if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) {
474 // activate OCC viewer
475 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
478 // fix for IPAL9103, point 2
479 if ( CORBA::is_nil( GetGeomGen() ) ) {
480 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
485 // find corresponding GUI library
487 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
488 createOriginAndBaseVectors(); // internal operation
490 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
491 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
492 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
493 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
494 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
495 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
496 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
497 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
498 case GEOMOp::OpDelete: // MENU EDIT - DELETE
499 #ifndef DISABLE_PYCONSOLE
500 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
502 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
503 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
504 case GEOMOp::OpColor: // POPUP MENU - COLOR
505 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
506 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
507 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
508 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
509 case GEOMOp::OpIsos: // POPUP MENU - ISOS
510 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
511 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
512 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
513 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
514 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
515 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
516 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
517 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
518 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
519 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
520 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
521 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
522 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
523 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
524 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
525 case GEOMOp::OpClsBringToFront: //
526 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
527 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
528 #ifndef DISABLE_GRAPHICSVIEW
529 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
531 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
532 libName = "GEOMToolsGUI";
534 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
535 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
536 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
537 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
538 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
539 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
540 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
541 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
542 case GEOMOp::OpHide: // MENU VIEW - ERASE
543 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
544 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
545 case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE
546 case GEOMOp::OpSwitchName: // MENU VIEW - VERTICES MODE
547 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
548 case GEOMOp::OpShading: // POPUP MENU - SHADING
549 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
550 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
551 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
552 case GEOMOp::OpVertices: // POPUP MENU - VERTICES
553 case GEOMOp::OpShowName: // POPUP MENU - SHOW NAME
554 libName = "DisplayGUI";
556 case GEOMOp::OpPoint: // MENU BASIC - POINT
557 case GEOMOp::OpLine: // MENU BASIC - LINE
558 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
559 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
560 case GEOMOp::OpArc: // MENU BASIC - ARC
561 case GEOMOp::OpVector: // MENU BASIC - VECTOR
562 case GEOMOp::OpPlane: // MENU BASIC - PLANE
563 case GEOMOp::OpCurve: // MENU BASIC - CURVE
564 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
565 libName = "BasicGUI";
567 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
568 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
569 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
570 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
571 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
572 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
573 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
574 libName = "PrimitiveGUI";
576 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
577 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
578 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
579 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
580 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
581 case GEOMOp::OpThickness: // MENU GENERATION - THICKNESS
582 libName = "GenerationGUI";
584 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
585 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
586 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
587 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
588 case GEOMOp::OpSurfaceFromFace: // MENU ENTITY - SURFACE FROM FACE
590 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
592 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
593 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
594 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
595 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
596 case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR
597 libName = "EntityGUI";
599 case GEOMOp::OpEdge: // MENU BUILD - EDGE
600 case GEOMOp::OpWire: // MENU BUILD - WIRE
601 case GEOMOp::OpFace: // MENU BUILD - FACE
602 case GEOMOp::OpShell: // MENU BUILD - SHELL
603 case GEOMOp::OpSolid: // MENU BUILD - SOLID
604 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
605 libName = "BuildGUI";
607 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
608 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
609 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
610 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
611 libName = "BooleanGUI";
613 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
614 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
615 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
616 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
617 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
618 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
619 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
620 case GEOMOp::OpProjOnCyl: // MENU TRANSFORMATION - PROJECTION ON CYLINDER
621 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
622 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
623 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
624 case GEOMOp::OpExtension: // MENU TRANSFORMATION - EXTENSION
625 libName = "TransformationGUI";
627 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
628 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
629 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
630 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
631 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
632 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
633 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
634 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
635 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
636 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
637 case GEOMOp::OpTransferData: // MENU OPERATION - TRANSFER DATA
638 case GEOMOp::OpExtraction: // MENU OPERATION - EXTRACT AND REBUILD
639 libName = "OperationGUI";
641 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
642 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
643 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
644 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
645 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
646 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
647 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
648 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
649 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
650 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
651 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
652 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
653 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
654 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
655 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
656 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
657 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
658 case GEOMOp::OpInspectObj: // MENU REPAIR - INSPECT OBJECT
659 libName = "RepairGUI";
661 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
662 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
663 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
664 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
665 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
666 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
667 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
668 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
669 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
670 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
671 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
672 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
673 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
674 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
675 case GEOMOp::OpFastCheckInters: // MENU MEASURE - FAST CHECK INTERSECTIONS
676 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
677 #ifndef DISABLE_PLOT2DVIEWER
678 case GEOMOp::OpShapeStatistics: // MENU MEASURE - SHAPE STATISTICS
680 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
681 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
682 libName = "MeasureGUI";
684 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
685 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
686 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
687 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
688 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
689 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
690 libName = "GroupGUI";
692 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
693 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
694 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
695 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
696 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
697 libName = "BlocksGUI";
699 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
700 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
701 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
702 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
703 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
704 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
705 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
706 //libName = "AdvancedGUI";
709 if (myPluginActions.contains(id)) {
710 libName = myPluginActions[id].first;
712 GEOMPluginGUI* library = 0;
713 if ( !libName.isEmpty() ) {
715 libName = libName + ".dll";
716 #elif defined(__APPLE__)
717 libName = QString( "lib" ) + libName + ".dylib";
719 libName = QString( "lib" ) + libName + ".so";
721 library = getPluginLibrary( libName );
724 // call method of corresponding GUI library
726 //QString action ("%1");
727 //action = action.arg(id);
729 //if( !theParam.isValid() )
730 library->OnGUIEvent( myPluginActions[id].second, desk );
732 // library->OnGUIEvent( id, desk, theParam);
735 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
737 updateCreationInfo();
743 GEOMGUI* library = 0;
744 if ( !libName.isEmpty() ) {
746 libName = libName + ".dll";
747 #elif defined(__APPLE__)
748 libName = QString( "lib" ) + libName + ".dylib";
750 libName = QString( "lib" ) + libName + ".so";
752 library = getLibrary( libName );
755 // call method of corresponding GUI library
757 if( !theParam.isValid() )
758 library->OnGUIEvent( id, desk );
760 library->OnGUIEvent( id, desk, theParam);
763 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
765 updateCreationInfo();
768 //=================================================================================
769 // function : GeometryGUI::activateOperation()
771 //=================================================================================
772 bool GeometryGUI::activateOperation( int actionId )
774 OnGUIEvent(actionId);
778 //=================================================================================
779 // function : GeometryGUI::activateOperation()
781 //=================================================================================
782 bool GeometryGUI::activateOperation( const QString& actionId )
786 int id = actionId.toInt(&isOk);
793 //=================================================================================
794 // function : GeometryGUI::activateOperation()
796 //=================================================================================
797 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
801 QString pluginLib = plugin;
802 // TODO: if <plugin> is a plugin name, find plugin library name
803 if (myPluginLibs.contains(plugin))
804 pluginLib = myPluginLibs[plugin];
806 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
807 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
808 const PluginAction& anAction = actionsIter.value();
809 if (anAction.first == pluginLib && anAction.second == actionId) {
810 // activate operation
811 OnGUIEvent(actionsIter.key());
819 //=================================================================================
820 // function : GeometryGUI::OnKeyPress()
821 // purpose : Called when any key is pressed by user [static]
822 //=================================================================================
823 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
825 if ( !application() )
827 foreach ( GEOMGUI* lib, myGUIMap )
828 lib->OnKeyPress( e, application()->desktop(), w );
831 //=================================================================================
832 // function : GeometryGUI::OnMouseMove()
833 // purpose : Manages mouse move events [static]
834 //=================================================================================
835 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
837 if ( !application() )
839 foreach ( GEOMGUI* lib, myGUIMap )
840 lib->OnMouseMove( e, application()->desktop(), w );
843 //=================================================================================
844 // function : GeometryGUI::OnMouseRelease()
845 // purpose : Manages mouse release events [static]
846 //=================================================================================
847 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
849 if ( !application() )
851 foreach ( GEOMGUI* lib, myGUIMap )
852 lib->OnMouseRelease( e, application()->desktop(), w );
855 //=================================================================================
856 // function : GeometryGUI::OnMousePress()
857 // purpose : Manage mouse press events [static]
858 //=================================================================================
859 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
861 if ( !application() )
863 foreach ( GEOMGUI* lib, myGUIMap )
864 lib->OnMousePress( e, application()->desktop(), w );
867 //=======================================================================
868 // function : createGeomAction
870 //=======================================================================
871 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
872 const int accel, const bool toggle, const QString& shortcutAction )
874 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
875 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
876 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
878 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
880 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
881 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
883 application()->desktop(),
885 this, SLOT( OnGUIEvent() ),
889 //=======================================================================
890 // function : createOriginAndBaseVectors
892 //=======================================================================
893 void GeometryGUI::createOriginAndBaseVectors()
895 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
896 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
898 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
902 _PTR(Study) studyDS = appStudy->studyDS();
903 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
904 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
905 if ( !aBasicOperations->_is_nil() ) {
906 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
907 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
908 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
909 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
910 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
911 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
913 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
914 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
915 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
916 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
917 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
918 anOrigin->UnRegister();
922 aBasicOperations->UnRegister();
924 getApp()->updateObjectBrowser( true );
930 //=======================================================================
931 // function : GeometryGUI::initialize()
932 // purpose : Called when GEOM module is created
933 //=======================================================================
934 void GeometryGUI::initialize( CAM_Application* app )
936 SalomeApp_Module::initialize( app );
938 // ----- create actions --------------
940 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
942 createGeomAction( GEOMOp::OpPoint, "POINT" );
943 createGeomAction( GEOMOp::OpLine, "LINE" );
944 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
945 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
946 createGeomAction( GEOMOp::OpArc, "ARC" );
947 createGeomAction( GEOMOp::OpCurve, "CURVE" );
948 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
949 createGeomAction( GEOMOp::OpVector, "VECTOR" );
950 createGeomAction( GEOMOp::OpPlane, "PLANE" );
951 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
952 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
953 createGeomAction( GEOMOp::OpSurfaceFromFace, "SURFACE_FROM_FACE" );
955 createGeomAction( GEOMOp::OpBox, "BOX" );
956 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
957 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
958 createGeomAction( GEOMOp::OpTorus, "TORUS" );
959 createGeomAction( GEOMOp::OpCone, "CONE" );
960 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
961 createGeomAction( GEOMOp::OpDisk, "DISK" );
963 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
964 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
965 createGeomAction( GEOMOp::OpFilling, "FILLING" );
966 createGeomAction( GEOMOp::OpPipe, "PIPE" );
967 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
968 createGeomAction( GEOMOp::OpThickness, "THICKNESS" );
970 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
971 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
972 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
973 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
974 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
976 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
977 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
979 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
981 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
982 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
984 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
985 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
986 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
988 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
990 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
991 createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" );
993 createGeomAction( GEOMOp::OpEdge, "EDGE" );
994 createGeomAction( GEOMOp::OpWire, "WIRE" );
995 createGeomAction( GEOMOp::OpFace, "FACE" );
996 createGeomAction( GEOMOp::OpShell, "SHELL" );
997 createGeomAction( GEOMOp::OpSolid, "SOLID" );
998 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
1000 createGeomAction( GEOMOp::OpFuse, "FUSE" );
1001 createGeomAction( GEOMOp::OpCommon, "COMMON" );
1002 createGeomAction( GEOMOp::OpCut, "CUT" );
1003 createGeomAction( GEOMOp::OpSection, "SECTION" );
1005 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
1006 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
1007 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
1008 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
1009 createGeomAction( GEOMOp::OpScale, "SCALE" );
1010 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
1011 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
1012 createGeomAction( GEOMOp::OpProjOnCyl, "PROJ_ON_CYL" );
1013 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
1014 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
1015 createGeomAction( GEOMOp::OpExtension, "EXTENSION" );
1017 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
1018 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
1019 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
1020 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
1021 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
1022 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
1023 createGeomAction( GEOMOp::OpTransferData, "TRANSFER_DATA" );
1024 createGeomAction( GEOMOp::OpExtraction, "EXTRACTION" );
1025 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
1026 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
1027 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
1028 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
1030 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
1031 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
1032 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
1034 createGeomAction( GEOMOp::OpSewing, "SEWING" );
1035 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
1036 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
1037 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
1038 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
1039 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
1040 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
1041 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
1042 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
1043 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
1044 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
1045 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
1046 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1047 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1048 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1049 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1050 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1051 createGeomAction( GEOMOp::OpInspectObj, "INSPECT_OBJECT" );
1053 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1054 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1055 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1056 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1057 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1058 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1059 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1060 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1061 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1063 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1064 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1065 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1066 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1067 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1068 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1069 createGeomAction( GEOMOp::OpFastCheckInters, "FAST_CHECK_INTERSECTIONS" );
1070 #ifndef DISABLE_PLOT2DVIEWER
1071 createGeomAction( GEOMOp::OpShapeStatistics, "SHAPE_STATISTICS" );
1074 #ifndef DISABLE_PYCONSOLE
1075 #ifdef _DEBUG_ // PAL16821
1076 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1080 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1081 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1082 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1083 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1084 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1085 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1086 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1087 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1088 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1089 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1090 createGeomAction( GEOMOp::OpSwitchName, "NAME_MODE");
1091 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1092 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1093 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1094 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1095 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1096 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1097 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1098 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1099 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1100 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1101 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1102 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1103 createGeomAction( GEOMOp::OpHide, "ERASE" );
1105 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1106 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1107 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1108 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1109 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1110 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1111 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1112 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1113 createGeomAction( GEOMOp::OpShowName, "POP_SHOW_NAME", "", 0, true );
1114 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1115 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1116 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1117 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1118 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1119 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1120 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1121 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1122 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1123 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1124 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1125 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1126 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1127 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1128 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1129 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1130 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1131 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1132 #ifndef DISABLE_GRAPHICSVIEW
1133 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1135 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1136 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1137 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1139 // Create actions for increase/decrease transparency shortcuts
1140 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1141 "Geometry:Increase transparency");
1142 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1143 "Geometry:Decrease transparency");
1145 // Create actions for increase/decrease number of isolines
1146 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1147 "Geometry:Increase number of isolines");
1148 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1149 "Geometry:Decrease number of isolines");
1151 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1152 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1153 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1154 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1155 //@@ 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 @@//
1157 // ---- create menus --------------------------
1159 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1161 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1162 createMenu( GEOMOp::OpDelete, editId, -1 );
1164 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1166 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1167 createMenu( GEOMOp::OpPoint, basicId, -1 );
1168 createMenu( GEOMOp::OpLine, basicId, -1 );
1169 createMenu( GEOMOp::OpCircle, basicId, -1 );
1170 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1171 createMenu( GEOMOp::OpArc, basicId, -1 );
1172 createMenu( GEOMOp::OpCurve, basicId, -1 );
1173 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1174 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1175 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1176 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1177 createMenu( GEOMOp::OpSurfaceFromFace, basicId, -1 );
1178 createMenu( separator(), basicId, -1 );
1179 createMenu( GEOMOp::OpVector, basicId, -1 );
1180 createMenu( GEOMOp::OpPlane, basicId, -1 );
1181 createMenu( GEOMOp::OpLCS, basicId, -1 );
1182 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1184 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1185 createMenu( GEOMOp::OpBox, primId, -1 );
1186 createMenu( GEOMOp::OpCylinder, primId, -1 );
1187 createMenu( GEOMOp::OpSphere, primId, -1 );
1188 createMenu( GEOMOp::OpTorus, primId, -1 );
1189 createMenu( GEOMOp::OpCone, primId, -1 );
1190 createMenu( GEOMOp::OpRectangle, primId, -1 );
1191 createMenu( GEOMOp::OpDisk, primId, -1 );
1192 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1194 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1195 createMenu( GEOMOp::OpPrism, genId, -1 );
1196 createMenu( GEOMOp::OpRevolution, genId, -1 );
1197 createMenu( GEOMOp::OpFilling, genId, -1 );
1198 createMenu( GEOMOp::OpPipe, genId, -1 );
1199 createMenu( GEOMOp::OpPipePath, genId, -1 );
1200 createMenu( GEOMOp::OpThickness, genId, -1 );
1202 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1203 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1204 //@@ 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 @@//
1206 createMenu( separator(), newEntId, -1 );
1208 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1209 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1210 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1211 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1212 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1213 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1215 createMenu( separator(), newEntId, -1 );
1217 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1218 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1219 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1221 createMenu( separator(), newEntId, -1 );
1223 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1224 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1225 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1226 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1227 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1229 createMenu( separator(), newEntId, -1 );
1231 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1233 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1234 createMenu( GEOMOp::OpEdge, buildId, -1 );
1235 createMenu( GEOMOp::OpWire, buildId, -1 );
1236 createMenu( GEOMOp::OpFace, buildId, -1 );
1237 createMenu( GEOMOp::OpShell, buildId, -1 );
1238 createMenu( GEOMOp::OpSolid, buildId, -1 );
1239 createMenu( GEOMOp::OpCompound, buildId, -1 );
1241 createMenu( separator(), newEntId, -1 );
1243 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1245 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1248 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1250 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1251 createMenu( GEOMOp::OpFuse, boolId, -1 );
1252 createMenu( GEOMOp::OpCommon, boolId, -1 );
1253 createMenu( GEOMOp::OpCut, boolId, -1 );
1254 createMenu( GEOMOp::OpSection, boolId, -1 );
1256 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1257 createMenu( GEOMOp::OpTranslate, transId, -1 );
1258 createMenu( GEOMOp::OpRotate, transId, -1 );
1259 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1260 createMenu( GEOMOp::OpMirror, transId, -1 );
1261 createMenu( GEOMOp::OpScale, transId, -1 );
1262 createMenu( GEOMOp::OpOffset, transId, -1 );
1263 createMenu( GEOMOp::OpProjection, transId, -1 );
1264 createMenu( GEOMOp::OpExtension, transId, -1 );
1265 createMenu( GEOMOp::OpProjOnCyl, transId, -1 );
1266 createMenu( separator(), transId, -1 );
1267 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1268 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1270 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1271 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1272 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1273 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1275 createMenu( separator(), operId, -1 );
1277 createMenu( GEOMOp::OpPartition, operId, -1 );
1278 createMenu( GEOMOp::OpArchimede, operId, -1 );
1279 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1280 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1281 createMenu( GEOMOp::OpTransferData, operId, -1 );
1282 createMenu( GEOMOp::OpExtraction, operId, -1 );
1284 createMenu( separator(), operId, -1 );
1286 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1287 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1288 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1289 createMenu( GEOMOp::OpChamfer, operId, -1 );
1290 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1291 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1293 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1294 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1295 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1296 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1297 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1298 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1299 createMenu( GEOMOp::OpSewing, repairId, -1 );
1300 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1301 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1302 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1303 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1304 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1305 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1306 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1307 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1308 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1309 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1310 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1312 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1313 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1314 createMenu( GEOMOp::OpProperties, measurId, -1 );
1315 createMenu( separator(), measurId, -1 );
1316 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1317 createMenu( GEOMOp::OpInertia, measurId, -1 );
1318 createMenu( GEOMOp::OpNormale, measurId, -1 );
1319 createMenu( separator(), measurId, -1 );
1320 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1321 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1322 createMenu( separator(), measurId, -1 );
1324 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1325 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1326 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1327 createMenu( GEOMOp::OpAngle, dimId, -1 );
1328 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1330 createMenu( separator(), measurId, -1 );
1331 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1332 createMenu( separator(), measurId, -1 );
1333 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1334 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1335 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1336 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1337 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1338 createMenu( GEOMOp::OpFastCheckInters, measurId, -1 );
1339 createMenu( GEOMOp::OpInspectObj, measurId, -1 );
1340 #ifndef DISABLE_PLOT2DVIEWER
1341 createMenu( GEOMOp::OpShapeStatistics, measurId, -1 );
1344 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1345 #ifndef DISABLE_PYCONSOLE
1346 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1347 createMenu( separator(), toolsId, -1 );
1348 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1352 createMenu( separator(), toolsId, -1 );
1353 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1354 createMenu( separator(), toolsId, -1 );
1356 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1357 createMenu( separator(), viewId, -1 );
1359 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1360 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1361 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1362 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1363 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1364 createMenu( separator(), dispmodeId, -1 );
1365 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1366 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1367 createMenu( GEOMOp::OpSwitchName, dispmodeId, -1 );
1369 createMenu( separator(), viewId, -1 );
1370 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1371 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1372 createMenu( separator(), viewId, -1 );
1373 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1374 createMenu( separator(), viewId, -1 );
1378 because of these items are accessible through object browser and viewers
1379 we have removed they from main menu
1381 createMenu( GEOMOp::OpShow, viewId, -1 );
1382 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1383 createMenu( GEOMOp::OpHide, viewId, -1 );
1386 // ---- create toolbars --------------------------
1388 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1389 createTool( GEOMOp::OpPoint, basicTbId );
1390 createTool( GEOMOp::OpLine, basicTbId );
1391 createTool( GEOMOp::OpCircle, basicTbId );
1392 createTool( GEOMOp::OpEllipse, basicTbId );
1393 createTool( GEOMOp::OpArc, basicTbId );
1394 createTool( GEOMOp::OpCurve, basicTbId );
1395 createTool( GEOMOp::OpVector, basicTbId );
1396 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1397 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1398 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1399 createTool( GEOMOp::OpIsoline, basicTbId );
1400 createTool( GEOMOp::OpSurfaceFromFace, basicTbId );
1401 createTool( GEOMOp::OpPlane, basicTbId );
1402 createTool( GEOMOp::OpLCS, basicTbId );
1403 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1405 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1406 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1407 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1409 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1410 createTool( GEOMOp::OpBox, primTbId );
1411 createTool( GEOMOp::OpCylinder, primTbId );
1412 createTool( GEOMOp::OpSphere, primTbId );
1413 createTool( GEOMOp::OpTorus, primTbId );
1414 createTool( GEOMOp::OpCone, primTbId );
1415 createTool( GEOMOp::OpRectangle, primTbId );
1416 createTool( GEOMOp::OpDisk, primTbId );
1417 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1419 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1420 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1421 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1423 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1424 createTool( GEOMOp::OpFuse, boolTbId );
1425 createTool( GEOMOp::OpCommon, boolTbId );
1426 createTool( GEOMOp::OpCut, boolTbId );
1427 createTool( GEOMOp::OpSection, boolTbId );
1429 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1430 createTool( GEOMOp::OpPrism, genTbId );
1431 createTool( GEOMOp::OpRevolution, genTbId );
1432 createTool( GEOMOp::OpFilling, genTbId );
1433 createTool( GEOMOp::OpPipe, genTbId );
1434 createTool( GEOMOp::OpPipePath, genTbId );
1435 createTool( GEOMOp::OpThickness, genTbId );
1437 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1438 createTool( GEOMOp::OpTranslate, transTbId );
1439 createTool( GEOMOp::OpRotate, transTbId );
1440 createTool( GEOMOp::OpChangeLoc, transTbId );
1441 createTool( GEOMOp::OpMirror, transTbId );
1442 createTool( GEOMOp::OpScale, transTbId );
1443 createTool( GEOMOp::OpOffset, transTbId );
1444 createTool( GEOMOp::OpProjection, transTbId );
1445 createTool( GEOMOp::OpExtension, transTbId );
1446 createTool( GEOMOp::OpProjOnCyl, transTbId );
1447 createTool( separator(), transTbId );
1448 createTool( GEOMOp::OpMultiTranslate, transTbId );
1449 createTool( GEOMOp::OpMultiRotate, transTbId );
1451 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1452 createTool( GEOMOp::OpExplode, operTbId );
1453 createTool( GEOMOp::OpPartition, operTbId );
1454 createTool( GEOMOp::OpArchimede, operTbId );
1455 createTool( GEOMOp::OpShapesOnShape, operTbId );
1456 createTool( GEOMOp::OpSharedShapes, operTbId );
1457 createTool( GEOMOp::OpTransferData, operTbId );
1458 createTool( GEOMOp::OpExtraction, operTbId );
1460 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1461 createTool( GEOMOp::OpFillet1d, featTbId );
1462 createTool( GEOMOp::OpFillet2d, featTbId );
1463 createTool( GEOMOp::OpFillet3d, featTbId );
1464 createTool( GEOMOp::OpChamfer, featTbId );
1465 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1466 createTool( GEOMOp::OpExtrudedCut, featTbId );
1468 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1469 createTool( GEOMOp::OpEdge, buildTbId );
1470 createTool( GEOMOp::OpWire, buildTbId );
1471 createTool( GEOMOp::OpFace, buildTbId );
1472 createTool( GEOMOp::OpShell, buildTbId );
1473 createTool( GEOMOp::OpSolid, buildTbId );
1474 createTool( GEOMOp::OpCompound, buildTbId );
1476 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1477 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1478 createTool( GEOMOp::OpProperties, measureTbId );
1479 createTool( GEOMOp::OpCenterMass, measureTbId );
1480 createTool( GEOMOp::OpInertia, measureTbId );
1481 createTool( GEOMOp::OpNormale, measureTbId );
1482 createTool( separator(), measureTbId );
1483 createTool( GEOMOp::OpBoundingBox, measureTbId );
1484 createTool( GEOMOp::OpMinDistance, measureTbId );
1485 createTool( GEOMOp::OpAngle, measureTbId );
1486 createTool( GEOMOp::OpTolerance , measureTbId );
1487 createTool( separator(), measureTbId );
1488 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1489 createTool( GEOMOp::OpFreeFaces, measureTbId );
1490 createTool( separator(), measureTbId );
1491 createTool( GEOMOp::OpWhatIs, measureTbId );
1492 createTool( GEOMOp::OpCheckShape, measureTbId );
1493 createTool( GEOMOp::OpCheckCompound, measureTbId );
1494 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1495 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1496 createTool( GEOMOp::OpFastCheckInters, measureTbId );
1498 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1499 createTool( GEOMOp::OpPictureImport, picturesTbId );
1501 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1504 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1505 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1506 //@@ 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 @@//
1508 // ---- create popup menus --------------------------
1510 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1511 QString clientOCC = "(client='OCCViewer')";
1512 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1513 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1515 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1516 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1517 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1518 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1520 QString autoColorPrefix =
1521 "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') and type='Shape' and selcount=1";
1523 QtxPopupMgr* mgr = popupMgr();
1525 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1526 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1527 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1528 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1529 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1530 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1531 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1532 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1534 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1535 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1536 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1537 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1538 mgr->insert( separator(), -1, -1 ); // -----------
1540 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1541 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1542 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1543 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1544 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1545 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1546 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1547 mgr->insert( separator(), -1, -1 ); // -----------
1548 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1549 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1550 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1551 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1552 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1553 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1554 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1555 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1556 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1557 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1558 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1559 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1560 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1561 mgr->insert( separator(), dispmodeId, -1 );
1562 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1563 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1564 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1565 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1566 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1567 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1568 mgr->insert( action( GEOMOp::OpShowName ), dispmodeId, -1 ); // show name
1569 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1570 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK + " and isNameMode", QtxPopupMgr::ToggleRule );
1571 mgr->insert( separator(), -1, -1 ); // -----------
1573 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1574 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1575 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1576 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1577 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1578 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1579 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1580 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1581 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1582 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1584 // material properties
1585 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1586 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1589 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1590 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1592 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1593 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1594 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1596 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1597 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1599 mgr->insert( separator(), -1, -1 ); // -----------
1600 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1601 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1602 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1603 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1604 mgr->insert( separator(), -1, -1 ); // -----------
1606 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1607 onlyComponent = "((type='Component') and selcount=1)",
1608 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1609 types = "'Shape' 'Group' 'FieldStep'";
1611 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1612 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1614 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1615 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1617 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1618 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1620 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1622 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1623 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1624 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1625 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1626 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1627 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1628 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1629 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1630 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1631 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1632 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1633 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1634 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1635 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1636 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1637 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1638 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1639 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1640 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1641 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1642 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1643 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1644 mgr->insert( separator(), selectonlyId, -1);
1645 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1646 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1647 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1648 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1649 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1650 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1651 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1653 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1655 mgr->insert( separator(), -1, -1 ); // -----------
1656 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1657 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1658 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1659 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1661 mgr->insert( separator(), -1, -1 ); // -----------
1662 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1663 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1665 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1666 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1668 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1669 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1671 mgr->insert( separator(), -1, -1 ); // -----------
1672 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1673 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1675 mgr->insert( separator(), -1, -1 ); // -----------
1676 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1677 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1679 #ifndef DISABLE_GRAPHICSVIEW
1680 mgr->insert( separator(), -1, -1 ); // -----------
1681 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1682 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1685 mgr->insert( separator(), -1, -1 ); // -----------
1686 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1687 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1689 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1691 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1693 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1694 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1695 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1698 // create plugin actions and menus
1702 //=======================================================================
1703 // function : GeometryGUI::addPluginActions()
1705 //=======================================================================
1706 void GeometryGUI::addPluginActions()
1709 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1710 if (!resMgr) return;
1712 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1713 if (!appStudy) return;
1715 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1717 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1719 int id = GEOMOp::OpLastOperationID; // TODO?
1722 GEOMUtils::PluginInfo::const_iterator it;
1723 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1724 // bind action lib and label to its ID for activateOperation() method proper work
1725 GEOMUtils::PluginData pdata = (*it);
1726 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1727 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1728 std::list<GEOMUtils::ActionData>::const_iterator ait;
1729 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1730 GEOMUtils::ActionData adata = (*ait);
1733 if ( !adata.icon.empty() )
1734 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1736 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1737 QString actionName = smenus.last();
1738 actionName = actionName.toUpper().prepend( "MEN_" );
1739 smenus.removeLast();
1741 // path to action in toolbar
1742 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1743 QString actionTool = stools.last();
1744 actionTool = actionTool.toUpper().prepend( "TOP_" );
1745 stools.removeLast();
1747 QString actionStat = adata.statusText.c_str();
1748 actionStat = actionStat.toUpper().prepend( "STB_" );
1750 createAction( id, // ~ adata.label
1751 tr( actionTool.toLatin1().constData() ),
1753 tr( actionName.toLatin1().constData() ),
1754 tr( actionStat.toLatin1().constData() ),
1755 QKeySequence( tr( adata.accel.c_str() ) ),
1756 application()->desktop(),
1758 this, SLOT( OnGUIEvent() ),
1759 QString() /*shortcutAction*/ );
1762 foreach ( QString subMenu, smenus ) {
1763 QStringList subMenuList = subMenu.split( ":" );
1764 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1765 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1766 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1768 createMenu( id, menuId, -1 );
1770 if ( !stools.isEmpty() ) {
1771 QString subTool = stools[0];
1772 subTool = subTool.toUpper().prepend( "TOOL_" );
1773 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1774 createTool(id, toolId);
1777 // add action id to map
1778 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1779 myPluginActions[id] = anAction;
1786 //=======================================================================
1787 // function : GeometryGUI::activateModule()
1788 // purpose : Called when GEOM module is activated
1789 //=======================================================================
1790 bool GeometryGUI::activateModule( SUIT_Study* study )
1792 if ( CORBA::is_nil( myComponentGeom ) )
1795 bool res = SalomeApp_Module::activateModule( study );
1799 setMenuShown( true );
1800 setToolShown( true );
1802 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1803 PyGILState_STATE gstate = PyGILState_Ensure();
1804 PyObject* pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1805 if ( !pluginsmanager ) {
1810 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1811 tr("MEN_NEW_ENTITY").toUtf8().data(),
1812 tr("GEOM_PLUGINS_OTHER").toUtf8().data());
1817 PyGILState_Release(gstate);
1818 // end of GEOM plugins loading
1820 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1821 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1823 // Reset actions accelerator keys
1824 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1826 GUIMap::Iterator it;
1827 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1828 it.value()->activate( application()->desktop() );
1830 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1832 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1833 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1834 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1836 if ( !myCreationInfoWdg )
1837 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1838 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1839 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1841 if ( !myTextTreeWdg )
1842 myTextTreeWdg = new GEOMGUI_TextTreeWdg( getApp() );
1843 getApp()->insertDockWindow( myTextTreeWdg->getWinID(), myTextTreeWdg );
1844 getApp()->placeDockWindow( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
1847 SALOME_ListIO selected;
1848 sm->selectedObjects( selected );
1849 sm->clearSelected();
1851 SUIT_ViewManager* vm;
1852 ViewManagerList OCCViewManagers, VTKViewManagers;
1854 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1855 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1856 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1857 onViewManagerAdded(vm);
1859 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1860 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1861 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1862 onViewManagerAdded(vm);
1864 sm->setSelectedObjects( selected, true ); //NPAL 19674
1866 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1868 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1870 // 0020836 (Basic vectors and origin)
1871 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1872 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1873 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1875 _PTR(Study) studyDS = appStudy->studyDS();
1877 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1878 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1879 createOriginAndBaseVectors();
1884 Py_XDECREF(pluginsmanager);
1888 //=======================================================================
1889 // function : GeometryGUI::deactivateModule()
1890 // purpose : Called when GEOM module is deactivated
1891 //=======================================================================
1892 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1894 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1896 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1898 setMenuShown( false );
1899 setToolShown( false );
1901 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1902 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1904 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1906 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1907 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1908 if ( myCreationInfoWdg ) {
1909 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1910 myCreationInfoWdg = 0;
1912 if ( myTextTreeWdg ) {
1913 getApp()->removeDockWindow( myTextTreeWdg->getWinID() );
1914 disconnect( application(), 0, myTextTreeWdg, 0 );
1918 EmitSignalCloseAllDialogs();
1920 GUIMap::Iterator it;
1921 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1922 it.value()->deactivate();
1924 // Unset actions accelerator keys
1925 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1927 qDeleteAll(myOCCSelectors);
1928 myOCCSelectors.clear();
1929 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1931 qDeleteAll(myVTKSelectors);
1932 myVTKSelectors.clear();
1933 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1935 return SalomeApp_Module::deactivateModule( study );
1938 //=======================================================================
1939 // function : onWindowActivated()
1940 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1941 //=======================================================================
1942 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1947 const bool ViewOCC = ( win->getViewManager() ? win->getViewManager()->getType() == OCCViewer_Viewer::Type() : false );
1948 //const bool ViewVTK = ( win->getViewManager() ? win->getViewManager()->getType() == SVTK_Viewer::Type() : false );
1950 // disable non-OCC viewframe menu commands
1951 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1952 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1953 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1954 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1955 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1956 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1957 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1959 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1960 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1961 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1962 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1964 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1967 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1969 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1970 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
1971 #ifndef DISABLE_PYCONSOLE
1972 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1974 if ( myCreationInfoWdg )
1975 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1976 if ( myTextTreeWdg )
1977 mappa.insert( myTextTreeWdg->getWinID(), Qt::LeftDockWidgetArea );
1980 void GeometryGUI::viewManagers( QStringList& lst ) const
1982 lst.append( OCCViewer_Viewer::Type() );
1985 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1987 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1989 qDebug( "connect" );
1990 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1991 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1992 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1993 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1994 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1995 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1996 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1997 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1999 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2000 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
2002 // disable OCC selectors
2003 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
2004 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2005 while ( itOCCSel.hasNext() )
2006 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2007 sr->setEnabled(true);
2009 else if ( vm->getType() == SVTK_Viewer::Type() )
2011 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2012 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
2014 // disable VTK selectors
2015 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
2016 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2017 while ( itVTKSel.hasNext() )
2018 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2019 sr->setEnabled(true);
2023 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
2025 SUIT_ViewModel* viewer = vm->getViewModel();
2026 if ( vm->getType() == OCCViewer_Viewer::Type() )
2028 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2029 while ( itOCCSel.hasNext() )
2030 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2031 if ( sr->viewer() == viewer )
2033 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
2037 if ( vm->getType() == SVTK_Viewer::Type() )
2039 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2040 while ( itVTKSel.hasNext() )
2041 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2042 if ( sr->viewer() == viewer )
2044 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2050 //================================================================================
2052 * \brief Slot called when selection changed. Shows creation info of a selected object
2054 //================================================================================
2056 void GeometryGUI::updateCreationInfo()
2058 if ( myCreationInfoWdg )
2059 myCreationInfoWdg->clear();
2061 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2062 // if ( !myCreationInfoWdg->isVisible() )
2065 // look for a sole selected GEOM_Object
2066 GEOM::GEOM_BaseObject_var geomObj;
2068 SALOME_ListIO selected;
2069 getApp()->selectionMgr()->selectedObjects( selected );
2071 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2072 SALOME_ListIteratorOfListIO selIt( selected );
2073 for ( ; selIt.More(); selIt.Next() )
2075 Handle(SALOME_InteractiveObject) io = selIt.Value();
2076 if ( !io->hasEntry() ) continue;
2077 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2078 if ( !sobj ) continue;
2079 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2080 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2081 if ( !gobj->_is_nil() )
2083 if ( !geomObj->_is_nil() )
2084 return; // several GEOM objects selected
2088 if ( geomObj->_is_nil() ) return;
2090 // pass creation info of geomObj to myCreationInfoWdg
2092 if ( myCreationInfoWdg ) {
2094 GEOM::CreationInformationSeq_var info;
2097 info = geomObj->GetCreationInformation();
2101 myCreationInfoWdg->setInfo( info );
2105 void GeometryGUI::onAutoBringToFront()
2107 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2108 if( !isAutoBringToFront )
2111 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2112 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2115 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2116 if (!appStudy) return;
2118 GEOM_Displayer displayer( appStudy );
2120 SALOME_View* window = displayer.GetActiveView();
2121 if ( !window ) return;
2123 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2125 SALOME_ListIO selected;
2126 getApp()->selectionMgr()->selectedObjects( selected );
2127 if (!myTopLevelIOList.IsEmpty())
2129 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2131 Handle( SALOME_InteractiveObject ) io = It.Value();
2132 bool isSelected = false;
2133 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2135 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2136 if( io->isSame( sel_io ) )
2139 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2141 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2142 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2147 myTopLevelIOList.Assign(selected);
2148 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2150 Handle( SALOME_InteractiveObject ) io = It.Value();
2151 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2152 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2155 displayer.UpdateViewer();
2156 GeometryGUI::Modified();
2159 void GeometryGUI::updateFieldColorScale()
2161 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2163 GEOM_Displayer aDisplayer( aStudy );
2164 aDisplayer.UpdateColorScale();
2168 QString GeometryGUI::engineIOR() const
2170 if ( !CORBA::is_nil( GetGeomGen() ) )
2171 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2175 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2176 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2178 theWidth = theHeight = 0;
2180 Handle(TColStd_HArray1OfByte) aTexture;
2183 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2184 aTexture = aTextureMap[ theId ];
2185 if ( aTexture.IsNull() ) {
2186 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2187 if ( !aInsOp->_is_nil() ) {
2188 CORBA::Long aWidth, aHeight;
2189 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2190 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2192 theHeight = aHeight;
2194 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2196 for (int i = 0; i < aStream->length(); i++)
2197 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2198 aTextureMap[ theId ] = aTexture;
2206 LightApp_Selection* GeometryGUI::createSelection() const
2208 return new GEOMGUI_Selection();
2211 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2213 SalomeApp_Module::contextMenuPopup( client, menu, title );
2215 getApp()->selectionMgr()->selectedObjects( lst );
2217 //Add submenu for predefined materials
2218 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2219 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2220 QtxPopupMgr* mgr = popupMgr();
2221 //get parrent for submenu
2222 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2224 QMenu* oldMenu = act->menu() ;
2229 QMenu* matMenu = new QMenu();
2230 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2232 //Get current material model for the object
2234 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2235 if ( anApp && anApp->activeViewManager() ) {
2236 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2238 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2241 QString curModel = "";
2242 if ( v.canConvert<QString>() ) curModel = v.toString();
2243 // get list of all predefined materials
2244 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2246 foreach ( QString material, materials )
2248 QAction* menAct = matMenu->addAction( material );
2249 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2250 signalMapper->setMapping( menAct, material );
2251 menAct->setCheckable( true );
2252 // Set checked if this material is current
2253 Material_Model aModel;
2254 aModel.fromResources( material );
2255 if ( !found && aModel.toProperties() == curModel ) {
2256 menAct->setChecked( true );
2260 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2261 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2262 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2263 this, SLOT( OnSetMaterial( const QString & ) ) );
2264 act->setMenu( matMenu );
2268 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2269 Handle(SALOME_InteractiveObject) io = lst.First();
2270 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2271 _PTR(Study) study = appStudy->studyDS();
2272 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2274 QString aName = QString( obj->GetName().c_str() );
2275 aName.remove( QRegExp("\\s+$") );
2281 void GeometryGUI::OnSetMaterial(const QString& theName)
2283 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2287 void GeometryGUI::createPreferences()
2289 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2291 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2293 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2294 setPreferenceProperty( genGroup, "columns", 2 );
2296 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2297 LightApp_Preferences::Selector,
2298 "Geometry", "display_mode" );
2300 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2301 LightApp_Preferences::Color, "Geometry", "shading_color" );
2303 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2304 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2306 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2307 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2309 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2310 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2312 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2313 LightApp_Preferences::Color, "Geometry", "line_color" );
2315 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2316 LightApp_Preferences::Color, "Geometry", "point_color" );
2318 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2319 LightApp_Preferences::Color, "Geometry", "isos_color" );
2321 addPreference( tr( "PREF_LABEL_COLOR" ), genGroup,
2322 LightApp_Preferences::Color, "Geometry", "label_color" );
2324 addPreference( "", genGroup, LightApp_Preferences::Space );
2326 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2327 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2329 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2330 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2332 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2333 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2335 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2336 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2338 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2339 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2341 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2342 LightApp_Preferences::Selector,
2343 "Geometry", "material" );
2345 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2346 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2352 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2353 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2355 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2356 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2358 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2359 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2361 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2362 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2364 for (int i = 0; i < nb; i++) {
2365 setPreferenceProperty( wd[i], "min", 1 );
2366 setPreferenceProperty( wd[i], "max", 5 );
2369 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2370 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2372 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2373 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2375 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2376 setPreferenceProperty( aDimGroupId, "columns", 2 );
2378 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2379 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2381 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2382 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2384 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2385 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2387 int aDimFontId = addPreference( tr( "PREF_DIMENSIONS_FONT" ), aDimGroupId, LightApp_Preferences::Font, "Geometry", "dimensions_font" );
2389 int f = QtxFontEdit::Family | QtxFontEdit::Size;
2390 setPreferenceProperty( aDimFontId, "features", f );
2391 setPreferenceProperty( aDimFontId, "mode", QtxFontEdit::Custom );
2393 Handle(Font_FontMgr) fmgr = Font_FontMgr::GetInstance();
2394 QString aFontFile = "";
2395 resMgr->value("resources", "GEOM", aFontFile);
2396 aFontFile = aFontFile + QDir::separator() + "Y14.5M-2009.ttf";
2397 // add enginier font into combobox
2398 int fontID = QFontDatabase::addApplicationFont( aFontFile );
2399 Handle(Font_SystemFont) sf = new Font_SystemFont(
2400 new TCollection_HAsciiString("Y14.5M-2009"),
2402 new TCollection_HAsciiString(aFontFile.toLatin1().data()) );
2403 // register font in OCC font manager
2404 fmgr->RegisterFont( sf, Standard_False );
2406 // get list of supported fonts by OCC
2407 QStringList anOCCFonts;
2408 TColStd_SequenceOfHAsciiString theFontsNames;
2409 fmgr->GetAvailableFontsNames( theFontsNames );
2410 for(Standard_Integer i=1; i<=theFontsNames.Length(); i++) {
2411 Handle(TCollection_HAsciiString) str = theFontsNames(i);
2412 anOCCFonts << str->ToCString();
2414 anOCCFonts.removeDuplicates();
2415 // set the supported fonts into combobox to use its only
2416 setPreferenceProperty( aDimFontId, "fonts", anOCCFonts );
2418 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2419 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2421 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2422 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2423 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2425 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2426 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2428 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2429 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2431 QStringList aListOfLengthUnits;
2432 aListOfLengthUnits << "m";
2433 aListOfLengthUnits << "cm";
2434 aListOfLengthUnits << "mm";
2435 aListOfLengthUnits << "in.";
2436 aListOfLengthUnits << "ft.";
2438 QStringList aListOfAngUnits;
2439 aListOfAngUnits << "rad";
2440 aListOfAngUnits << "deg";
2442 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2443 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2445 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2446 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2448 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2449 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2451 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2452 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2453 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2455 addPreference( tr( "PREF_DIMENSIONS_USE_TEXT3D" ), aDimGroupId,
2456 LightApp_Preferences::Bool, "Geometry", "dimensions_use_text3d" );
2458 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2459 setPreferenceProperty( isoGroup, "columns", 2 );
2460 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2461 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2462 setPreferenceProperty( isoU, "min", 0 );
2463 setPreferenceProperty( isoU, "max", 100000 );
2464 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2465 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2466 setPreferenceProperty( isoV, "min", 0 );
2467 setPreferenceProperty( isoV, "max", 100000 );
2469 // Quantities with individual precision settings
2470 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2471 setPreferenceProperty( precGroup, "columns", 2 );
2473 const int nbQuantities = 8;
2474 int prec[nbQuantities], ii = 0;
2475 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2476 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2477 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2478 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2479 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2480 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2481 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2482 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2483 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2484 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2485 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2486 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2487 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2488 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2489 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2490 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2492 // Set property for precision value for spinboxes
2493 for ( ii = 0; ii < nbQuantities; ii++ ){
2494 setPreferenceProperty( prec[ii], "min", -14 );
2495 setPreferenceProperty( prec[ii], "max", 14 );
2496 setPreferenceProperty( prec[ii], "precision", 2 );
2499 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2500 setPreferenceProperty( VertexGroup, "columns", 2 );
2502 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2503 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2505 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2506 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2508 // Set property for default display mode
2509 QStringList aModesList;
2510 aModesList.append( tr("MEN_WIREFRAME") );
2511 aModesList.append( tr("MEN_SHADING") );
2512 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2513 aModesList.append( tr("MEN_TEXTURE") );
2515 QList<QVariant> anIndexesList;
2516 anIndexesList.append(0);
2517 anIndexesList.append(1);
2518 anIndexesList.append(2);
2519 anIndexesList.append(3);
2521 setPreferenceProperty( dispmode, "strings", aModesList );
2522 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2524 // Set property for top level display mode
2525 QStringList aTopModesList;
2526 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2527 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2528 aTopModesList.append( tr("MEN_WIREFRAME") );
2529 aTopModesList.append( tr("MEN_SHADING") );
2530 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2532 QList<QVariant> aTopIndexesList;
2533 aTopIndexesList.append(0);
2534 aTopIndexesList.append(1);
2535 aTopIndexesList.append(2);
2536 aTopIndexesList.append(3);
2537 aTopIndexesList.append(4);
2539 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2540 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2542 // Set property for step value for spinboxes
2543 setPreferenceProperty( step, "min", 1 );
2544 setPreferenceProperty( step, "max", 10000 );
2545 setPreferenceProperty( step, "precision", 3 );
2547 // Set property for trandparency value for spinboxes
2548 setPreferenceProperty( transparency, "min", 0 );
2549 setPreferenceProperty( transparency, "max", 100 );
2551 // Set property for deflection value for spinboxes
2552 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2553 setPreferenceProperty( defl, "max", 1.0 );
2554 setPreferenceProperty( defl, "step", 1.0e-04 );
2555 setPreferenceProperty( defl, "precision", 6 );
2557 // Set property for default material
2558 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2560 // Set property vertex marker type
2561 QList<QVariant> aMarkerTypeIndicesList;
2562 QList<QVariant> aMarkerTypeIconsList;
2564 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2565 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2566 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2567 aMarkerTypeIndicesList << (i-1);
2568 aMarkerTypeIconsList << pixmap;
2571 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2572 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2574 // Set property for vertex marker scale
2575 QList<QVariant> aMarkerScaleIndicesList;
2576 QStringList aMarkerScaleValuesList;
2578 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2579 aMarkerScaleIndicesList << iii;
2580 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2583 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2584 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2586 // Scalar bar for field step presentation
2587 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2588 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2590 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2591 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2592 setPreferenceProperty( sbXPosition, "min", 0 );
2593 setPreferenceProperty( sbXPosition, "max", 1 );
2594 setPreferenceProperty( sbXPosition, "step", 0.05 );
2596 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2597 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2598 setPreferenceProperty( sbYPosition, "min", 0 );
2599 setPreferenceProperty( sbYPosition, "max", 1 );
2600 setPreferenceProperty( sbYPosition, "step", 0.05 );
2602 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2603 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2604 setPreferenceProperty( sbWidth, "min", 0 );
2605 setPreferenceProperty( sbWidth, "max", 1 );
2606 setPreferenceProperty( sbWidth, "step", 0.05 );
2608 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2609 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2610 setPreferenceProperty( sbHeight, "min", 0 );
2611 setPreferenceProperty( sbHeight, "max", 1 );
2612 setPreferenceProperty( sbHeight, "step", 0.05 );
2614 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2615 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2616 setPreferenceProperty( sbTextHeight, "min", 6 );
2617 setPreferenceProperty( sbTextHeight, "max", 24 );
2618 setPreferenceProperty( sbTextHeight, "step", 1 );
2620 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2621 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2622 setPreferenceProperty( sbNbIntervals, "min", 2 );
2623 setPreferenceProperty( sbNbIntervals, "max", 64 );
2624 setPreferenceProperty( sbNbIntervals, "step", 1 );
2626 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2627 setPreferenceProperty( originGroup, "columns", 2 );
2629 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2630 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2631 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2632 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2634 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2635 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2637 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2638 setPreferenceProperty( operationsGroup, "columns", 2 );
2640 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2641 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2643 addPreference( tr( "PREF_HIDE_INPUT_OBJECT" ), operationsGroup,
2644 LightApp_Preferences::Bool, "Geometry", "hide_input_object" );
2646 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2648 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2650 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2651 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2653 QStringList aHierarchyTypeList;
2654 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2655 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2656 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2658 QList<QVariant> aHierarchyTypeIndexesList;
2659 aHierarchyTypeIndexesList.append(0);
2660 aHierarchyTypeIndexesList.append(1);
2661 aHierarchyTypeIndexesList.append(2);
2663 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2664 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2666 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2667 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2669 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2671 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2672 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2674 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2675 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2676 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2677 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2678 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2679 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2680 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2681 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2683 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2684 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2685 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2686 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2687 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2688 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2695 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2697 if (section == "Geometry") {
2698 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2699 if (param == QString("SettingsGeomStep")) {
2700 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2701 EmitSignalDefaultStepValueChanged(spin_step);
2703 else if (param == QString("toplevel_color")) {
2704 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2705 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2707 else if (param == QString("toplevel_dm")) {
2708 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2710 else if (param == QString("scalar_bar_x_position") ||
2711 param == QString("scalar_bar_y_position") ||
2712 param == QString("scalar_bar_width") ||
2713 param == QString("scalar_bar_height") ||
2714 param == QString("scalar_bar_text_height") ||
2715 param == QString("scalar_bar_nb_intervals")) {
2716 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2718 GEOM_Displayer aDisplayer( aStudy );
2719 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2720 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2723 else if ( param == QString("dimensions_color") ||
2724 param == QString("dimensions_line_width") ||
2725 param == QString("dimensions_font") ||
2726 param == QString("dimensions_arrow_length") ||
2727 param == QString("dimensions_show_units") ||
2728 param == QString("dimensions_length_units") ||
2729 param == QString("dimensions_angle_units") ||
2730 param == QString("dimensions_use_text3d") ||
2731 param == QString("label_color") )
2733 SalomeApp_Application* anApp = getApp();
2739 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2745 GEOM_Displayer aDisplayer( aStudy );
2747 ViewManagerList aVMs;
2748 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2749 ViewManagerList::Iterator anIt = aVMs.begin();
2750 for ( ; anIt != aVMs.end(); ++anIt )
2752 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2758 SALOME_ListIO aVisible;
2759 aViewer->GetVisible( aVisible );
2760 aDisplayer.Redisplay( aVisible, false, aViewer );
2762 if ( param == QString( "label_color" ) ) {
2763 ViewManagerList aVMsVTK;
2764 anApp->viewManagers( SVTK_Viewer::Type(), aVMsVTK );
2765 ViewManagerList::Iterator anIt = aVMsVTK.begin();
2766 for ( ; anIt != aVMsVTK.end(); ++anIt )
2768 SVTK_Viewer* aViewer = dynamic_cast<SVTK_Viewer*>( (*anIt)->getViewModel() );
2773 SALOME_ListIO aVisible;
2774 aViewer->GetVisible( aVisible );
2775 aDisplayer.Redisplay( aVisible, false, aViewer );
2778 aDisplayer.UpdateViewer();
2780 else if ( param.startsWith( "dependency_tree") )
2781 emit SignalDependencyTreeParamChanged( section, param );
2785 LightApp_Displayer* GeometryGUI::displayer()
2788 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2792 void GeometryGUI::setLocalSelectionMode(const int mode)
2794 myLocalSelectionMode = mode;
2797 int GeometryGUI::getLocalSelectionMode() const
2799 return myLocalSelectionMode;
2802 const char gSeparator = '_'; // character used to separate parameter names
2803 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2806 * \brief Store visual parameters
2808 * This method is called just before the study document is saved.
2809 * Store visual parameters in AttributeParameter attribute(s)
2811 void GeometryGUI::storeVisualParameters (int savePoint)
2813 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2814 if ( !appStudy || !appStudy->studyDS() )
2816 _PTR(Study) studyDS = appStudy->studyDS();
2818 // componentName is used for encoding of entries when storing them in IParameters
2819 std::string componentName = myComponentGeom->ComponentDataType();
2820 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2821 //if (!aSComponent) return;
2824 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2825 componentName.c_str(),
2827 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2829 QSet<QString> anEntriesToStoreShared;
2830 QList<SUIT_ViewManager*> lst;
2831 QList<SUIT_ViewManager*>::Iterator it;
2833 // main cycle to store parameters of displayed objects
2835 getApp()->viewManagers(lst);
2836 for (it = lst.begin(); it != lst.end(); it++) {
2837 SUIT_ViewManager* vman = *it;
2838 QString vType = vman->getType();
2839 int aMgrId = vman->getGlobalId();
2840 // saving VTK actors properties
2841 QVector<SUIT_ViewWindow*> views = vman->getViews();
2842 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2843 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
2844 ObjMap::ConstIterator o_it = anObjects.begin();
2845 for (; o_it != anObjects.end(); o_it++) {
2846 const PropMap& aProps = o_it.value();
2848 //Check that object exists in the study
2849 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2850 if ( !obj || !(aProps.count() > 0))
2852 // entry is "encoded" = it does NOT contain component adress, since it is a
2853 // subject to change on next component loading
2855 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2857 _PTR(GenericAttribute) anAttr;
2858 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2861 // remember entry of object to store shared GEOM properties
2862 // (e.g. dimension properties).
2863 if ( vType == OCCViewer_Viewer::Type() )
2865 anEntriesToStoreShared.insert( o_it.key() );
2868 QString param, occParam = vType;
2869 occParam += GEOM::sectionSeparator();
2870 occParam += QString::number(aMgrId);
2871 occParam += GEOM::sectionSeparator();
2873 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2874 param = occParam + GEOM::propertyName( GEOM::Visibility );
2875 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2878 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2879 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2880 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2883 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2884 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2886 val << QString::number(c.redF());
2887 val << QString::number(c.greenF());
2888 val << QString::number(c.blueF());
2889 param = occParam + GEOM::propertyName( GEOM::Color );
2890 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2893 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2894 param = occParam + GEOM::propertyName( GEOM::Texture );
2895 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2898 if (vType == SVTK_Viewer::Type()) {
2899 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2900 param = occParam + GEOM::propertyName( GEOM::Opacity );
2901 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2903 } else if (vType == SOCC_Viewer::Type()) {
2904 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2905 param = occParam + GEOM::propertyName( GEOM::Transparency );
2906 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2909 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2910 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2911 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2915 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2916 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2917 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2920 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2921 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2922 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2925 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
2926 param = occParam + GEOM::propertyName( GEOM::Vertices );
2927 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
2930 if (aProps.contains(GEOM::propertyName( GEOM::ShowName ))) {
2931 param = occParam + GEOM::propertyName( GEOM::ShowName );
2932 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::ShowName )).toString().toStdString());
2935 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2936 param = occParam + GEOM::propertyName( GEOM::Deflection );
2937 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2940 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2941 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2942 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2943 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2946 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2947 param = occParam + GEOM::propertyName( GEOM::Material );
2948 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2951 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2952 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2953 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2956 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2957 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2958 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2960 } // object iterator
2962 } // for (viewManagers)
2964 // store dimension attributes of objects:
2965 // since the displayed object always persists in property map, we remember the object entries
2966 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
2967 QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
2968 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
2969 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
2971 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
2972 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName);
2974 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
2976 if ( aDimensions.GetNumber() == 0 )
2981 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
2986 * \brief Restore visual parameters
2988 * This method is called after the study document is opened.
2989 * Restore visual parameters from AttributeParameter attribute(s)
2991 void GeometryGUI::restoreVisualParameters (int savePoint)
2993 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2994 if (!appStudy || !appStudy->studyDS())
2996 _PTR(Study) studyDS = appStudy->studyDS();
2998 // componentName is used for encoding of entries when storing them in IParameters
2999 std::string componentName = myComponentGeom->ComponentDataType();
3000 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
3001 //if (!aSComponent) return;
3004 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
3005 componentName.c_str(),
3007 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
3009 std::vector<std::string> entries = ip->getEntries();
3011 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
3013 // entry is a normal entry - it should be "decoded" (setting base adress of component)
3014 QString entry (ip->decodeEntry(*entIt).c_str());
3016 // Check that the entry corresponds to a real object in the Study
3017 // as the object may be deleted or modified after the visual state is saved.
3018 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
3019 if (!so) continue; //Skip the not existent entry
3021 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
3022 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
3024 std::vector<std::string>::iterator namesIt = paramNames.begin();
3025 std::vector<std::string>::iterator valuesIt = paramValues.begin();
3027 // actors are stored in a map after displaying of them for
3028 // quicker access in the future: map < viewID to actor >
3029 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
3030 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
3032 QString viewerTypStr;
3033 QString viewIndexStr;
3035 QVector<PropMap> aListOfMap;
3037 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
3039 // visual parameters are stored in strings as follows:
3040 // 1) ViewerType_ViewIndex_ParamName
3041 // 2) ViewerType_ParamName (shared for GEOM module)
3042 // '_' is used as separator and should not be used in viewer type or parameter names.
3043 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
3045 bool isShared = lst.size() == 2;
3046 bool isViewer = lst.size() == 3;
3047 if ( !isShared && !isViewer )
3052 // shared visual parameters
3055 QString aParamNameStr( lst[1] );
3056 QString aValuesStr( (*valuesIt).c_str() );
3058 // shared dimension properties are stored as attribute
3059 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
3061 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
3062 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
3068 // per view visual parameters
3069 viewerTypStr = lst[0];
3070 viewIndexStr = lst[1];
3071 QString paramNameStr = lst[2];
3074 viewIndex = viewIndexStr.toUInt(&ok);
3075 if (!ok) // bad conversion of view index to integer
3078 if ((viewIndex + 1) > aListOfMap.count()) {
3079 aListOfMap.resize(viewIndex + 1);
3082 QString val((*valuesIt).c_str());
3083 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
3084 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
3085 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
3086 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
3087 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
3088 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
3089 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
3090 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
3091 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
3092 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
3093 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
3094 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
3095 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
3096 QStringList rgb = val.split(GEOM::subSectionSeparator());
3097 if (rgb.count() == 3) {
3098 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
3099 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
3101 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
3102 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
3103 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
3104 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
3105 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
3106 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
3107 } else if (paramNameStr == GEOM::propertyName( GEOM::ShowName )) {
3108 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::ShowName ), val == "true" || val == "1");
3109 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3110 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3111 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3112 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3113 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3114 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3115 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3116 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3117 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3118 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3120 } // for names/parameters iterator
3122 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3124 for (int index = 0; index < aListOfMap.count(); index++) {
3125 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
3127 //Get Visibility property of the current PropMap
3128 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3129 SUIT_ViewManager* vman = lst.at(index);
3130 SUIT_ViewModel* vmodel = vman->getViewModel();
3131 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
3134 } // for entries iterator
3136 // update all VTK and OCC views
3137 QList<SUIT_ViewManager*> lst;
3138 getApp()->viewManagers(lst);
3139 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3140 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3143 if (vmodel->getType() == SVTK_Viewer::Type()) {
3144 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3145 vtkView->getRenderer()->ResetCameraClippingRange();
3148 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3149 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3150 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3157 // Compute current name mode of the viewer
3158 void UpdateNameMode( SalomeApp_Application* app )
3160 bool isMode = false;
3161 SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() );
3162 SUIT_ViewWindow* viewWindow = app->desktop()->activeWindow();
3163 GEOM_Displayer displayer( aStudy );
3164 int aMgrId = viewWindow->getViewManager()->getGlobalId();
3166 SALOME_View* window = displayer.GetActiveView();
3167 if ( !window ) return;
3169 SALOME_ListIO anIOlst;
3170 window->GetVisible( anIOlst );
3172 for ( SALOME_ListIteratorOfListIO It( anIOlst ); It.More(); It.Next() ) {
3173 Handle( SALOME_InteractiveObject ) io = It.Value();
3174 QVariant v = aStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::ShowName ), QVariant() );
3175 bool isIONameMode = v.isValid() ? v.toBool() : false;
3179 viewWindow->setProperty( "NameMode", isMode );
3182 void GeometryGUI::onViewAboutToShow()
3184 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3185 QAction* a = action( GEOMOp::OpSwitchVectors );
3186 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3187 QAction* aNameAction = action( GEOMOp::OpSwitchName );
3189 a->setEnabled(true);
3190 bool vmode = window->property("VectorsMode").toBool();
3191 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3192 aVerticesAction->setEnabled(true);
3193 vmode = window->property("VerticesMode").toBool();
3194 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3195 UpdateNameMode( getApp() );
3196 aNameAction->setEnabled(true);
3197 vmode = window->property("NameMode").toBool();
3198 aNameAction->setText ( vmode == 1 ? tr( "MEN_NAME_MODE_OFF" ) : tr("MEN_NAME_MODE_ON") );
3200 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3201 a->setEnabled(false);
3202 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3203 aVerticesAction->setEnabled(false);
3204 aNameAction->setText ( tr("MEN_NAME_MODE_ON") );
3205 aNameAction->setEnabled(false);
3210 \brief Return action by id
3211 \param id identifier of the action
3214 QAction* GeometryGUI::getAction(const int id) {
3219 \brief GEOM module message handler
3221 This method can be re-implemented in the subclasses.
3222 This is a GEOM module message handler.
3224 \param msg the message received.
3226 void GeometryGUI::message(const QString& msg)
3229 QStringList data = msg.split("/");
3230 const int nbStrings = data.count();
3232 if (nbStrings > 0) {
3233 if (data[0] == "modified") {
3235 QString anIOR = nbStrings > 1 ? data[1] : QString();
3237 if ( anIOR.isEmpty() ) {
3241 // Get the geom object.
3242 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3244 // Clear the shape buffer
3245 GeometryGUI::ClearShapeBuffer (anObj);
3251 \brief Clears the shape buffer.
3253 This is a static method. It clears the shape buffer.
3255 \param theObj the object
3257 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3259 if ( CORBA::is_nil( theObj ) )
3262 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3263 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3264 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3266 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3271 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3276 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3280 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3281 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3282 _PTR(GenericAttribute) anAttr;
3283 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3284 _PTR(AttributeIOR) anIOR ( anAttr );
3285 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3286 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3292 \brief Returns the object from IOR.
3294 This is a static method. It returns the object from its IOR.
3296 \param IOR object IOR
3297 \return GEOM object.
3299 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3301 GEOM::GEOM_Object_var geomObj;
3302 if ( !IOR.isEmpty() ) {
3303 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3304 ( IOR.toLatin1().constData() );
3305 if ( !CORBA::is_nil( corbaObj ) )
3306 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3308 return geomObj._retn();
3312 \brief Returns IOR of the object.
3314 This is a static method. It returns the object's IOR.
3316 \param object the GEOM object.
3317 \return object's IOR.
3319 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3322 if ( !CORBA::is_nil( object ) ) {
3323 CORBA::String_var anIOR =
3324 SalomeApp_Application::orb()->object_to_string( object );
3331 \brief Check if this object is can't be renamed in place
3333 This method can be re-implemented in the subclasses.
3334 Return true in case if object isn't reference or component (module root).
3336 \param entry column id
3337 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3339 bool GeometryGUI::renameAllowed( const QString& entry) const {
3341 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3342 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3343 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3345 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3349 Rename object by entry.
3350 \param entry entry of the object
3351 \param name new name of the object
3352 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3354 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3356 bool result = false;
3358 SalomeApp_Application* app =
3359 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3360 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3365 _PTR(Study) aStudy = appStudy->studyDS();
3370 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3372 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3376 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3377 _PTR(GenericAttribute) anAttr;
3379 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3380 _PTR(AttributeName) aName (anAttr);
3382 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3383 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3384 if (!CORBA::is_nil(anObj)) {
3385 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3386 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3394 void GeometryGUI::updateMaterials()
3396 LightApp_Preferences* pref = preferences();
3398 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3399 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3400 if ( !materials.contains( currentMaterial ) )
3401 // user material set as default in the preferences, might be removed
3402 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3404 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3406 setPreferenceProperty( prefItem->id(),
3407 "strings", materials );
3408 prefItem->retrieve();
3414 \brief Check if the module allows "drag" operation of its objects.
3416 Overloaded from LightApp_Module class.
3418 This function is a part of the general drag-n-drop mechanism.
3419 The goal of this function is to check data object passed as a parameter
3420 and decide if it can be dragged or no.
3422 \param what data object being tested for drag operation
3423 \return \c true if module allows dragging of the specified object
3424 \sa isDropAccepted(), dropObjects()
3426 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3428 // we allow dragging object under root and object from folder
3429 int aLevel = what->level();
3430 bool anObjectInFolder = false;
3432 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3434 _PTR(SObject) aSO = dataObj->object();
3436 _PTR(GenericAttribute) anAttr;
3437 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3438 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3439 _PTR(AttributeLocalID) aLocalID( anAttr );
3440 anObjectInFolder = aLocalID->Value() == 999;
3445 return aLevel == 2 || anObjectInFolder;
3449 \brief Check if the module allows "drop" operation on the given object.
3451 Overloaded from LightApp_Module class.
3453 This function is a part of the general drag-n-drop mechanism.
3454 The goal of this function is to check data object passed as a parameter
3455 and decide if it can be used as a target for the "drop" operation.
3456 The processing of the drop operation itself is done in the dropObjects() function.
3458 \param where target data object
3459 \return \c true if module supports dropping on the \a where data object
3460 \sa isDraggable(), dropObjects()
3462 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3464 // we allow dropping into folder and top-level GEOM object
3465 int aLevel = where->level();
3466 bool isFolder = false;
3468 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3470 _PTR(SObject) aSO = dataObj->object();
3472 _PTR(GenericAttribute) anAttr;
3473 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3474 _PTR(AttributeLocalID) aLocalID( anAttr );
3475 isFolder = aLocalID->Value() == 999;
3480 return aLevel == 1 || isFolder;
3484 \brief Complete drag-n-drop operation.
3486 Overloaded from LightApp_Module class.
3488 This function is a part of the general drag-n-drop mechanism.
3489 Its goal is to handle dropping of the objects being dragged according
3490 to the chosen operation (move). The dropping is performed in the
3491 context of the parent data object \a where and the \a row (position in the
3492 children index) at which the data should be dropped. If \a row is equal to -1,
3493 this means that objects are added to the end of the children list.
3495 \param what objects being dropped
3496 \param where target data object
3497 \param row child index at which the drop operation is performed
3498 \param action drag-n-drop operation (Qt::DropAction) - move
3500 \sa isDraggable(), isDropAccepted()
3502 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3503 const int row, Qt::DropAction action )
3505 if (action != Qt::CopyAction && action != Qt::MoveAction)
3506 return; // unsupported action
3508 // get parent object
3509 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3510 if ( !dataObj ) return; // wrong parent
3511 _PTR(SObject) parentObj = dataObj->object();
3513 // Find the current Study and StudyBuilder
3514 _PTR(Study) aStudy = parentObj->GetStudy();
3515 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3516 // collect all parents of the target node
3517 QStringList parentIDs;
3518 _PTR(SObject) parent = parentObj;
3519 while( !parent->IsNull() ) {
3520 parentIDs << parent->GetID().c_str();
3521 parent = aUseCaseBuilder->GetFather(parent);
3524 // collect objects being dropped
3525 GEOM::object_list_var objects = new GEOM::object_list();
3526 objects->length( what.count() );
3528 for ( int i = 0; i < what.count(); i++ ) {
3529 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3530 if ( !dataObj ) continue; // skip wrong objects
3531 _PTR(SObject) sobj = dataObj->object();
3532 // check that dropped object is not a parent of target object
3533 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3534 return; // it's not allowed to move node into it's child
3536 objects[i] = _CAST(SObject, sobj)->GetSObject();
3539 objects->length( count );
3541 // call engine function
3542 GetGeomGen()->Move( objects.in(), // what
3543 _CAST(SObject, parentObj)->GetSObject(), // where
3546 // update Object browser
3547 getApp()->updateObjectBrowser( false );
3550 void GeometryGUI::emitDimensionsUpdated( QString entry )
3552 emit DimensionsUpdated( entry );