1 // Copyright (C) 2007-2015 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_DimensionProperty.h"
37 #include "GEOM_Constants.h"
38 #include "GEOM_Displayer.h"
39 #include "GEOM_AISShape.hxx"
40 #include "GEOMUtils_XmlHandler.hxx"
42 #include "GEOM_Actor.h"
44 #include <Material_ResourceMgr.h>
45 #include <Material_Model.h>
47 #include <SUIT_Desktop.h>
48 #include <SUIT_MessageBox.h>
49 #include <SUIT_ResourceMgr.h>
50 #include <SUIT_Session.h>
51 #include <SUIT_ViewManager.h>
53 #include <PyInterp_Interp.h>
55 #include <OCCViewer_ViewWindow.h>
56 #include <OCCViewer_ViewPort3d.h>
57 #include <OCCViewer_ViewModel.h>
58 #include <OCCViewer_ViewManager.h>
60 #include <SOCC_ViewModel.h>
61 #include <SOCC_ViewWindow.h>
63 #include <SVTK_ViewWindow.h>
64 #include <SVTK_RenderWindowInteractor.h>
65 #include <SVTK_InteractorStyle.h>
66 #include <SVTK_ViewModel.h>
68 #include <GraphicsView_Viewer.h>
70 #include <SalomeApp_Application.h>
71 #include <SalomeApp_DataObject.h>
72 #include <SalomeApp_Study.h>
73 #include <SalomeApp_Tools.h>
75 #include <LightApp_SelectionMgr.h>
76 #include <LightApp_VTKSelector.h>
77 #include <LightApp_DataObject.h>
78 #include <LightApp_Preferences.h>
80 #include <SALOME_LifeCycleCORBA.hxx>
81 #include <SALOME_ListIO.hxx>
83 #include <SALOMEDSClient_ClientFactory.hxx>
84 #include <SALOMEDSClient_IParameters.hxx>
86 #include <SALOMEDS_SObject.hxx>
88 #include <Basics_OCCTVersion.hxx>
99 #include <QSignalMapper>
101 #include <AIS_ListOfInteractive.hxx>
102 #include <AIS_ListIteratorOfListOfInteractive.hxx>
103 #include <Prs3d_Drawer.hxx>
104 #include <Prs3d_IsoAspect.hxx>
105 #include <Aspect_TypeOfMarker.hxx>
106 #include <OSD_SharedLibrary.hxx>
107 #include <NCollection_DataMap.hxx>
109 #include <TColStd_HArray1OfByte.hxx>
111 #include <utilities.h>
113 #include <vtkCamera.h>
114 #include <vtkRenderer.h>
116 #include <Standard_Failure.hxx>
117 #include <Standard_ErrorHandler.hxx>
119 #include "GEOM_version.h"
120 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
123 Standard_EXPORT CAM_Module* createModule() {
124 return new GeometryGUI();
127 Standard_EXPORT char* getModuleVersion() {
128 return (char*)GEOM_VERSION_STR;
132 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
134 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
136 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
138 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
139 if (CORBA::is_nil(myComponentGeom))
141 return GeometryGUI::myComponentGeom;
144 bool GeometryGUI::InitGeomGen()
147 if ( CORBA::is_nil( myComponentGeom ) ) return false;
151 //=======================================================================
152 // function : ClientSObjectToObject
154 //=======================================================================
155 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
157 _PTR(GenericAttribute) anAttr;
158 CORBA::Object_var anObj;
160 std::string aValue = theSObject->GetIOR();
161 if (strcmp(aValue.c_str(), "") != 0) {
162 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
163 anObj = anORB->string_to_object(aValue.c_str());
166 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
168 return anObj._retn();
171 //=======================================================================
172 // function : ClientStudyToStudy
174 //=======================================================================
175 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
177 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
178 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
179 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
180 int aStudyID = theStudy->StudyId();
181 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
182 return aDSStudy._retn();
185 void GeometryGUI::Modified (bool theIsUpdateActions)
187 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
188 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
189 appStudy->Modified();
190 if ( theIsUpdateActions )
191 app->updateActions();
196 //=======================================================================
197 // function : GeometryGUI::GeometryGUI()
198 // purpose : Constructor
199 //=======================================================================
200 GeometryGUI::GeometryGUI() :
201 SalomeApp_Module( "GEOM" ),
204 if ( CORBA::is_nil( myComponentGeom ) )
206 Engines::EngineComponent_var comp =
207 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
208 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
211 myActiveDialogBox = 0;
213 gp_Pnt origin = gp_Pnt(0., 0., 0.);
214 gp_Dir direction = gp_Dir(0., 0., 1.);
215 myWorkingPlane = gp_Ax3(origin, direction);
218 myLocalSelectionMode = GEOM_ALLOBJECTS;
220 myCreationInfoWdg = 0;
222 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
224 Q_INIT_RESOURCE( GEOMGUI );
227 //=======================================================================
228 // function : GeometryGUI::~GeometryGUI()
229 // purpose : Destructor
230 //=======================================================================
231 GeometryGUI::~GeometryGUI()
233 while (!myOCCSelectors.isEmpty())
234 delete myOCCSelectors.takeFirst();
236 while (!myVTKSelectors.isEmpty())
237 delete myVTKSelectors.takeFirst();
239 qDeleteAll(myGUIMap);
242 //=======================================================================
243 // function : GeometryGUI::getLibrary()
244 // purpose : get or load GUI library by name [ internal ]
245 //=======================================================================
246 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
247 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
249 if ( !myGUIMap.contains( libraryName ) ) {
250 // try to load library if it is not loaded yet
252 QString dirs = getenv( "LD_LIBRARY_PATH" );
255 QString dirs = getenv( "PATH" );
258 if ( !dirs.isEmpty() ) {
259 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
260 QListIterator<QString> it( dirList ); it.toBack();
261 while ( it.hasPrevious() ) {
262 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
264 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
265 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
267 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
268 continue; // continue search further
270 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
271 if ( osdF != NULL ) {
272 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
273 GEOMGUI* libGUI = (*func)( this );
275 myGUIMap[ libraryName ] = libGUI;
276 break; // found and loaded!
283 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
286 //=======================================================================
287 // function : GeometryGUI::getPluginLibrary()
288 // purpose : get or load GUI Plugin library by name [ internal ]
289 //=======================================================================
290 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
291 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
293 if ( !myGUIMap.contains( libraryName ) ) {
294 // try to load library if it is not loaded yet
296 QString dirs = getenv( "LD_LIBRARY_PATH" );
299 QString dirs = getenv( "PATH" );
302 if ( !dirs.isEmpty() ) {
303 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
304 QListIterator<QString> it( dirList ); it.toBack();
305 while ( it.hasPrevious() ) {
306 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
308 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
309 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
311 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
312 continue; // continue search further
314 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
315 if ( osdF != NULL ) {
316 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
317 GEOMPluginGUI* libGUI = (*func)( this );
319 myGUIMap[ libraryName ] = libGUI;
320 break; // found and loaded!
327 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
330 //=======================================================================
331 // function : GeometryGUI::ActiveWorkingPlane()
332 // purpose : Activate Working Plane View
333 //=======================================================================
334 void GeometryGUI::ActiveWorkingPlane()
336 gp_Dir DZ = myWorkingPlane.Direction();
337 gp_Dir DY = myWorkingPlane.YDirection();
339 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
340 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
341 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
344 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
346 Handle(V3d_View) view3d = vw->getViewPort()->getView();
348 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
349 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
353 else if ( ViewVTK ) {
354 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
356 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
358 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
359 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
360 camera->SetFocalPoint(0,0,0);
367 //=======================================================================
368 // function : GeometryGUI::SetActiveDialogBox()
369 // purpose : Set active dialog box
370 //=======================================================================
371 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
373 myActiveDialogBox = (QDialog*)aDlg;
376 //=======================================================================
377 // function : GeometryGUI::EmitSignalDeactivateDialog()
378 // purpose : Emit a signal to deactivate the active dialog Box
379 //=======================================================================
380 void GeometryGUI::EmitSignalDeactivateDialog()
382 emit SignalDeactivateActiveDialog();
385 //=======================================================================
386 // function : GeometryGUI::EmitSignalCloseAllDialogs()
387 // purpose : Emit a signal to close all non modal dialogs box
388 //=======================================================================
389 void GeometryGUI::EmitSignalCloseAllDialogs()
391 emit SignalCloseAllDialogs();
394 //=======================================================================
395 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
396 // purpose : Emit a signal to inform that default real spin box step has
398 //=======================================================================
399 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
401 emit SignalDefaultStepValueChanged(newVal);
404 //=======================================================================
405 // function : GeometryGUI::OnGUIEvent()
406 // purpose : common slot for all menu/toolbar actions
407 //=======================================================================
408 void GeometryGUI::OnGUIEvent()
410 const QObject* obj = sender();
411 if ( !obj || !obj->inherits( "QAction" ) )
413 int id = actionId((QAction*)obj);
418 //=======================================================================
419 // function : GeometryGUI::OnGUIEvent()
420 // purpose : manage all events on GUI [static]
421 //=======================================================================
422 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
424 SUIT_Application* anApp = application();
426 SUIT_Desktop* desk = anApp->desktop();
428 // check type of the active viewframe
429 SUIT_ViewWindow* window = desk->activeWindow();
430 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
431 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
432 bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() );
433 // if current viewframe is not of OCC and not of VTK type - return immediately
434 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
435 QList<int> NotViewerDependentCommands;
436 NotViewerDependentCommands << GEOMOp::OpDelete
438 << GEOMOp::OpShowOnly
439 << GEOMOp::OpShowOnlyChildren
440 << GEOMOp::OpDiscloseChildren
441 << GEOMOp::OpConcealChildren
442 << GEOMOp::OpUnpublishObject
443 << GEOMOp::OpPublishObject
444 << GEOMOp::OpPointMarker
445 << GEOMOp::OpCreateFolder
446 << GEOMOp::OpSortChildren;
447 if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) {
448 // activate OCC viewer
449 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
452 // fix for IPAL9103, point 2
453 if ( CORBA::is_nil( GetGeomGen() ) ) {
454 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
459 // find corresponding GUI library
461 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
462 createOriginAndBaseVectors(); // internal operation
464 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
465 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
466 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
467 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
468 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
469 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
470 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
471 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
472 case GEOMOp::OpDelete: // MENU EDIT - DELETE
473 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
474 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
475 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
476 case GEOMOp::OpColor: // POPUP MENU - COLOR
477 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
478 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
479 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
480 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
481 case GEOMOp::OpIsos: // POPUP MENU - ISOS
482 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
483 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
484 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
485 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
486 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
487 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
488 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
489 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
490 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
491 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
492 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
493 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
494 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
495 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
496 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
497 case GEOMOp::OpClsBringToFront: //
498 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
499 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
500 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
501 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
502 libName = "GEOMToolsGUI";
504 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
505 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
506 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
507 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
508 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
509 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
510 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
511 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
512 case GEOMOp::OpHide: // MENU VIEW - ERASE
513 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
514 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
515 case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE
516 case GEOMOp::OpSwitchName: // MENU VIEW - VERTICES MODE
517 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
518 case GEOMOp::OpShading: // POPUP MENU - SHADING
519 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
520 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
521 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
522 case GEOMOp::OpVertices: // POPUP MENU - VERTICES
523 case GEOMOp::OpShowName: // POPUP MENU - SHOW NAME
524 libName = "DisplayGUI";
526 case GEOMOp::OpPoint: // MENU BASIC - POINT
527 case GEOMOp::OpLine: // MENU BASIC - LINE
528 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
529 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
530 case GEOMOp::OpArc: // MENU BASIC - ARC
531 case GEOMOp::OpVector: // MENU BASIC - VECTOR
532 case GEOMOp::OpPlane: // MENU BASIC - PLANE
533 case GEOMOp::OpCurve: // MENU BASIC - CURVE
534 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
535 libName = "BasicGUI";
537 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
538 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
539 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
540 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
541 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
542 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
543 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
544 libName = "PrimitiveGUI";
546 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
547 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
548 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
549 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
550 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
551 case GEOMOp::OpThickness: // MENU GENERATION - THICKNESS
552 libName = "GenerationGUI";
554 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
555 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
556 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
557 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
558 case GEOMOp::OpSurfaceFromFace: // MENU ENTITY - SURFACE FROM FACE
560 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
562 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
563 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
564 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
565 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
566 case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR
567 libName = "EntityGUI";
569 case GEOMOp::OpEdge: // MENU BUILD - EDGE
570 case GEOMOp::OpWire: // MENU BUILD - WIRE
571 case GEOMOp::OpFace: // MENU BUILD - FACE
572 case GEOMOp::OpShell: // MENU BUILD - SHELL
573 case GEOMOp::OpSolid: // MENU BUILD - SOLID
574 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
575 libName = "BuildGUI";
577 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
578 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
579 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
580 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
581 libName = "BooleanGUI";
583 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
584 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
585 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
586 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
587 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
588 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
589 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
590 case GEOMOp::OpProjOnCyl: // MENU TRANSFORMATION - PROJECTION ON CYLINDER
591 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
592 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
593 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
594 case GEOMOp::OpExtension: // MENU TRANSFORMATION - EXTENSION
595 libName = "TransformationGUI";
597 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
598 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
599 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
600 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
601 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
602 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
603 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
604 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
605 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
606 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
607 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
608 case GEOMOp::OpTransferData: // MENU OPERATION - TRANSFER DATA
609 libName = "OperationGUI";
611 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
612 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
613 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
614 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
615 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
616 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
617 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
618 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
619 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
620 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
621 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
622 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
623 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
624 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
625 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
626 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
627 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
628 case GEOMOp::OpInspectObj: // MENU REPAIR - INSPECT OBJECT
629 libName = "RepairGUI";
631 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
632 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
633 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
634 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
635 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
636 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
637 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
638 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
639 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
640 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
641 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
642 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
643 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
644 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
645 case GEOMOp::OpFastCheckInters: // MENU MEASURE - FAST CHECK INTERSECTIONS
646 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
647 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
648 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
649 libName = "MeasureGUI";
651 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
652 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
653 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
654 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
655 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
656 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
657 libName = "GroupGUI";
659 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
660 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
661 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
662 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
663 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
664 libName = "BlocksGUI";
666 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
667 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
668 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
669 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
670 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
671 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
672 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
673 //libName = "AdvancedGUI";
676 if (myPluginActions.contains(id)) {
677 libName = myPluginActions[id].first;
679 GEOMPluginGUI* library = 0;
680 if ( !libName.isEmpty() ) {
682 libName = QString( "lib" ) + libName + ".so";
684 libName = libName + ".dll";
686 library = getPluginLibrary( libName );
689 // call method of corresponding GUI library
691 //QString action ("%1");
692 //action = action.arg(id);
694 //if( !theParam.isValid() )
695 library->OnGUIEvent( myPluginActions[id].second, desk );
697 // library->OnGUIEvent( id, desk, theParam);
700 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
702 updateCreationInfo();
708 GEOMGUI* library = 0;
709 if ( !libName.isEmpty() ) {
711 libName = QString( "lib" ) + libName + ".so";
713 libName = libName + ".dll";
715 library = getLibrary( libName );
718 // call method of corresponding GUI library
720 if( !theParam.isValid() )
721 library->OnGUIEvent( id, desk );
723 library->OnGUIEvent( id, desk, theParam);
726 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
728 updateCreationInfo();
731 //=================================================================================
732 // function : GeometryGUI::activateOperation()
734 //=================================================================================
735 bool GeometryGUI::activateOperation( int actionId )
737 OnGUIEvent(actionId);
741 //=================================================================================
742 // function : GeometryGUI::activateOperation()
744 //=================================================================================
745 bool GeometryGUI::activateOperation( const QString& actionId )
749 int id = actionId.toInt(&isOk);
756 //=================================================================================
757 // function : GeometryGUI::activateOperation()
759 //=================================================================================
760 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
764 QString pluginLib = plugin;
765 // TODO: if <plugin> is a plugin name, find plugin library name
766 if (myPluginLibs.contains(plugin))
767 pluginLib = myPluginLibs[plugin];
769 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
770 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
771 const PluginAction& anAction = actionsIter.value();
772 if (anAction.first == pluginLib && anAction.second == actionId) {
773 // activate operation
774 OnGUIEvent(actionsIter.key());
782 //=================================================================================
783 // function : GeometryGUI::OnKeyPress()
784 // purpose : Called when any key is pressed by user [static]
785 //=================================================================================
786 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
788 if ( !application() )
790 foreach ( GEOMGUI* lib, myGUIMap )
791 lib->OnKeyPress( e, application()->desktop(), w );
794 //=================================================================================
795 // function : GeometryGUI::OnMouseMove()
796 // purpose : Manages mouse move events [static]
797 //=================================================================================
798 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
800 if ( !application() )
802 foreach ( GEOMGUI* lib, myGUIMap )
803 lib->OnMouseMove( e, application()->desktop(), w );
806 //=================================================================================
807 // function : GeometryGUI::OnMouseRelease()
808 // purpose : Manages mouse release events [static]
809 //=================================================================================
810 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
812 if ( !application() )
814 foreach ( GEOMGUI* lib, myGUIMap )
815 lib->OnMouseRelease( e, application()->desktop(), w );
818 //=================================================================================
819 // function : GeometryGUI::OnMousePress()
820 // purpose : Manage mouse press events [static]
821 //=================================================================================
822 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
824 if ( !application() )
826 foreach ( GEOMGUI* lib, myGUIMap )
827 lib->OnMousePress( e, application()->desktop(), w );
830 //=======================================================================
831 // function : createGeomAction
833 //=======================================================================
834 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
835 const int accel, const bool toggle, const QString& shortcutAction )
837 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
838 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
839 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
841 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
843 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
844 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
846 application()->desktop(),
848 this, SLOT( OnGUIEvent() ),
852 //=======================================================================
853 // function : createOriginAndBaseVectors
855 //=======================================================================
856 void GeometryGUI::createOriginAndBaseVectors()
858 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
859 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
861 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
865 _PTR(Study) studyDS = appStudy->studyDS();
866 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
867 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
868 if ( !aBasicOperations->_is_nil() ) {
869 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
870 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
871 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
872 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
873 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
874 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
876 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
877 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
878 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
879 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
880 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
882 getApp()->updateObjectBrowser( true );
888 //=======================================================================
889 // function : GeometryGUI::initialize()
890 // purpose : Called when GEOM module is created
891 //=======================================================================
892 void GeometryGUI::initialize( CAM_Application* app )
894 SalomeApp_Module::initialize( app );
896 // ----- create actions --------------
898 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
900 createGeomAction( GEOMOp::OpPoint, "POINT" );
901 createGeomAction( GEOMOp::OpLine, "LINE" );
902 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
903 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
904 createGeomAction( GEOMOp::OpArc, "ARC" );
905 createGeomAction( GEOMOp::OpCurve, "CURVE" );
906 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
907 createGeomAction( GEOMOp::OpVector, "VECTOR" );
908 createGeomAction( GEOMOp::OpPlane, "PLANE" );
909 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
910 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
911 createGeomAction( GEOMOp::OpSurfaceFromFace, "SURFACE_FROM_FACE" );
913 createGeomAction( GEOMOp::OpBox, "BOX" );
914 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
915 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
916 createGeomAction( GEOMOp::OpTorus, "TORUS" );
917 createGeomAction( GEOMOp::OpCone, "CONE" );
918 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
919 createGeomAction( GEOMOp::OpDisk, "DISK" );
921 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
922 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
923 createGeomAction( GEOMOp::OpFilling, "FILLING" );
924 createGeomAction( GEOMOp::OpPipe, "PIPE" );
925 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
926 createGeomAction( GEOMOp::OpThickness, "THICKNESS" );
928 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
929 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
930 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
931 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
932 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
934 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
935 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
937 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
939 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
940 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
942 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
943 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
944 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
946 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
948 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
949 createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" );
951 createGeomAction( GEOMOp::OpEdge, "EDGE" );
952 createGeomAction( GEOMOp::OpWire, "WIRE" );
953 createGeomAction( GEOMOp::OpFace, "FACE" );
954 createGeomAction( GEOMOp::OpShell, "SHELL" );
955 createGeomAction( GEOMOp::OpSolid, "SOLID" );
956 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
958 createGeomAction( GEOMOp::OpFuse, "FUSE" );
959 createGeomAction( GEOMOp::OpCommon, "COMMON" );
960 createGeomAction( GEOMOp::OpCut, "CUT" );
961 createGeomAction( GEOMOp::OpSection, "SECTION" );
963 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
964 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
965 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
966 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
967 createGeomAction( GEOMOp::OpScale, "SCALE" );
968 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
969 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
970 createGeomAction( GEOMOp::OpProjOnCyl, "PROJ_ON_CYL" );
971 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
972 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
973 createGeomAction( GEOMOp::OpExtension, "EXTENSION" );
975 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
976 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
977 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
978 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
979 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
980 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
981 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
982 createGeomAction( GEOMOp::OpTransferData, "TRANSFER_DATA" );
983 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
984 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
985 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
986 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
988 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
989 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
990 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
992 createGeomAction( GEOMOp::OpSewing, "SEWING" );
993 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
994 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
995 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
996 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
997 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
998 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
999 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
1000 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
1001 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
1002 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
1003 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
1004 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1005 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1006 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1007 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1008 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1009 createGeomAction( GEOMOp::OpInspectObj, "INSPECT_OBJECT" );
1011 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1012 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1013 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1014 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1015 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1016 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1017 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1018 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1019 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1021 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1022 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1023 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1024 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1025 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1026 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1027 createGeomAction( GEOMOp::OpFastCheckInters, "FAST_CHECK_INTERSECTIONS" );
1029 #ifdef _DEBUG_ // PAL16821
1030 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1033 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1034 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1035 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1036 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1037 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1038 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1039 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1040 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1041 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1042 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1043 createGeomAction( GEOMOp::OpSwitchName, "NAME_MODE");
1044 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1045 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1046 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1047 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1048 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1049 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1050 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1051 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1052 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1053 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1054 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1055 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1056 createGeomAction( GEOMOp::OpHide, "ERASE" );
1058 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1059 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1060 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1061 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1062 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1063 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1064 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1065 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1066 createGeomAction( GEOMOp::OpShowName, "POP_SHOW_NAME", "", 0, true );
1067 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1068 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1069 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1070 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1071 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1072 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1073 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1074 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1075 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1076 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1077 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1078 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1079 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1080 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1081 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1082 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1083 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1084 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1085 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1086 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1087 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1088 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1090 // Create actions for increase/decrease transparency shortcuts
1091 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1092 "Geometry:Increase transparency");
1093 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1094 "Geometry:Decrease transparency");
1096 // Create actions for increase/decrease number of isolines
1097 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1098 "Geometry:Increase number of isolines");
1099 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1100 "Geometry:Decrease number of isolines");
1102 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1103 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1104 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1105 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1106 //@@ 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 @@//
1108 // ---- create menus --------------------------
1110 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1112 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1113 createMenu( GEOMOp::OpDelete, editId, -1 );
1115 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1117 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1118 createMenu( GEOMOp::OpPoint, basicId, -1 );
1119 createMenu( GEOMOp::OpLine, basicId, -1 );
1120 createMenu( GEOMOp::OpCircle, basicId, -1 );
1121 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1122 createMenu( GEOMOp::OpArc, basicId, -1 );
1123 createMenu( GEOMOp::OpCurve, basicId, -1 );
1124 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1125 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1126 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1127 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1128 createMenu( GEOMOp::OpSurfaceFromFace, basicId, -1 );
1129 createMenu( separator(), basicId, -1 );
1130 createMenu( GEOMOp::OpVector, basicId, -1 );
1131 createMenu( GEOMOp::OpPlane, basicId, -1 );
1132 createMenu( GEOMOp::OpLCS, basicId, -1 );
1133 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1135 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1136 createMenu( GEOMOp::OpBox, primId, -1 );
1137 createMenu( GEOMOp::OpCylinder, primId, -1 );
1138 createMenu( GEOMOp::OpSphere, primId, -1 );
1139 createMenu( GEOMOp::OpTorus, primId, -1 );
1140 createMenu( GEOMOp::OpCone, primId, -1 );
1141 createMenu( GEOMOp::OpRectangle, primId, -1 );
1142 createMenu( GEOMOp::OpDisk, primId, -1 );
1143 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1145 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1146 createMenu( GEOMOp::OpPrism, genId, -1 );
1147 createMenu( GEOMOp::OpRevolution, genId, -1 );
1148 createMenu( GEOMOp::OpFilling, genId, -1 );
1149 createMenu( GEOMOp::OpPipe, genId, -1 );
1150 createMenu( GEOMOp::OpPipePath, genId, -1 );
1151 createMenu( GEOMOp::OpThickness, genId, -1 );
1153 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1154 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
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 createMenu( separator(), newEntId, -1 );
1159 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1160 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1161 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1162 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1163 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1164 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1166 createMenu( separator(), newEntId, -1 );
1168 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1169 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1170 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1172 createMenu( separator(), newEntId, -1 );
1174 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1175 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1176 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1177 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1178 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1180 createMenu( separator(), newEntId, -1 );
1182 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1184 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1185 createMenu( GEOMOp::OpEdge, buildId, -1 );
1186 createMenu( GEOMOp::OpWire, buildId, -1 );
1187 createMenu( GEOMOp::OpFace, buildId, -1 );
1188 createMenu( GEOMOp::OpShell, buildId, -1 );
1189 createMenu( GEOMOp::OpSolid, buildId, -1 );
1190 createMenu( GEOMOp::OpCompound, buildId, -1 );
1192 createMenu( separator(), newEntId, -1 );
1194 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1196 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1199 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1201 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1202 createMenu( GEOMOp::OpFuse, boolId, -1 );
1203 createMenu( GEOMOp::OpCommon, boolId, -1 );
1204 createMenu( GEOMOp::OpCut, boolId, -1 );
1205 createMenu( GEOMOp::OpSection, boolId, -1 );
1207 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1208 createMenu( GEOMOp::OpTranslate, transId, -1 );
1209 createMenu( GEOMOp::OpRotate, transId, -1 );
1210 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1211 createMenu( GEOMOp::OpMirror, transId, -1 );
1212 createMenu( GEOMOp::OpScale, transId, -1 );
1213 createMenu( GEOMOp::OpOffset, transId, -1 );
1214 createMenu( GEOMOp::OpProjection, transId, -1 );
1215 createMenu( GEOMOp::OpExtension, transId, -1 );
1216 createMenu( GEOMOp::OpProjOnCyl, transId, -1 );
1217 createMenu( separator(), transId, -1 );
1218 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1219 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1221 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1222 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1223 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1224 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1226 createMenu( separator(), operId, -1 );
1228 createMenu( GEOMOp::OpPartition, operId, -1 );
1229 createMenu( GEOMOp::OpArchimede, operId, -1 );
1230 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1231 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1232 createMenu( GEOMOp::OpTransferData, operId, -1 );
1234 createMenu( separator(), operId, -1 );
1236 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1237 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1238 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1239 createMenu( GEOMOp::OpChamfer, operId, -1 );
1240 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1241 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1242 //createMenu( GEOMOp::OpClipping, operId, -1 );
1244 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1245 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1246 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1247 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1248 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1249 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1250 createMenu( GEOMOp::OpSewing, repairId, -1 );
1251 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1252 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1253 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1254 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1255 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1256 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1257 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1258 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1259 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1260 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1261 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1263 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1264 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1265 createMenu( GEOMOp::OpProperties, measurId, -1 );
1266 createMenu( separator(), measurId, -1 );
1267 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1268 createMenu( GEOMOp::OpInertia, measurId, -1 );
1269 createMenu( GEOMOp::OpNormale, measurId, -1 );
1270 createMenu( separator(), measurId, -1 );
1271 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1272 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1273 createMenu( separator(), measurId, -1 );
1275 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1276 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1277 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1278 createMenu( GEOMOp::OpAngle, dimId, -1 );
1279 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1281 createMenu( separator(), measurId, -1 );
1282 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1283 createMenu( separator(), measurId, -1 );
1284 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1285 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1286 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1287 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1288 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1289 createMenu( GEOMOp::OpFastCheckInters, measurId, -1 );
1290 createMenu( GEOMOp::OpInspectObj, measurId, -1 );
1292 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1293 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1294 createMenu( separator(), toolsId, -1 );
1295 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1298 createMenu( separator(), toolsId, -1 );
1299 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1300 createMenu( separator(), toolsId, -1 );
1302 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1303 createMenu( separator(), viewId, -1 );
1305 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1306 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1307 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1308 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1309 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1310 createMenu( separator(), dispmodeId, -1 );
1311 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1312 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1313 createMenu( GEOMOp::OpSwitchName, dispmodeId, -1 );
1315 createMenu( separator(), viewId, -1 );
1316 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1317 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1318 createMenu( separator(), viewId, -1 );
1319 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1320 createMenu( separator(), viewId, -1 );
1324 because of these items are accessible through object browser and viewers
1325 we have removed they from main menu
1327 createMenu( GEOMOp::OpShow, viewId, -1 );
1328 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1329 createMenu( GEOMOp::OpHide, viewId, -1 );
1332 // ---- create toolbars --------------------------
1334 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1335 createTool( GEOMOp::OpPoint, basicTbId );
1336 createTool( GEOMOp::OpLine, basicTbId );
1337 createTool( GEOMOp::OpCircle, basicTbId );
1338 createTool( GEOMOp::OpEllipse, basicTbId );
1339 createTool( GEOMOp::OpArc, basicTbId );
1340 createTool( GEOMOp::OpCurve, basicTbId );
1341 createTool( GEOMOp::OpVector, basicTbId );
1342 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1343 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1344 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1345 createTool( GEOMOp::OpIsoline, basicTbId );
1346 createTool( GEOMOp::OpSurfaceFromFace, basicTbId );
1347 createTool( GEOMOp::OpPlane, basicTbId );
1348 createTool( GEOMOp::OpLCS, basicTbId );
1349 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1351 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1352 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1353 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1355 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1356 createTool( GEOMOp::OpBox, primTbId );
1357 createTool( GEOMOp::OpCylinder, primTbId );
1358 createTool( GEOMOp::OpSphere, primTbId );
1359 createTool( GEOMOp::OpTorus, primTbId );
1360 createTool( GEOMOp::OpCone, primTbId );
1361 createTool( GEOMOp::OpRectangle, primTbId );
1362 createTool( GEOMOp::OpDisk, primTbId );
1363 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1365 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1366 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1367 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1369 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1370 createTool( GEOMOp::OpFuse, boolTbId );
1371 createTool( GEOMOp::OpCommon, boolTbId );
1372 createTool( GEOMOp::OpCut, boolTbId );
1373 createTool( GEOMOp::OpSection, boolTbId );
1375 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1376 createTool( GEOMOp::OpPrism, genTbId );
1377 createTool( GEOMOp::OpRevolution, genTbId );
1378 createTool( GEOMOp::OpFilling, genTbId );
1379 createTool( GEOMOp::OpPipe, genTbId );
1380 createTool( GEOMOp::OpPipePath, genTbId );
1381 createTool( GEOMOp::OpThickness, genTbId );
1383 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1384 createTool( GEOMOp::OpTranslate, transTbId );
1385 createTool( GEOMOp::OpRotate, transTbId );
1386 createTool( GEOMOp::OpChangeLoc, transTbId );
1387 createTool( GEOMOp::OpMirror, transTbId );
1388 createTool( GEOMOp::OpScale, transTbId );
1389 createTool( GEOMOp::OpOffset, transTbId );
1390 createTool( GEOMOp::OpProjection, transTbId );
1391 createTool( GEOMOp::OpExtension, transTbId );
1392 createTool( GEOMOp::OpProjOnCyl, transTbId );
1393 createTool( separator(), transTbId );
1394 createTool( GEOMOp::OpMultiTranslate, transTbId );
1395 createTool( GEOMOp::OpMultiRotate, transTbId );
1397 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1398 createTool( GEOMOp::OpExplode, operTbId );
1399 createTool( GEOMOp::OpPartition, operTbId );
1400 createTool( GEOMOp::OpArchimede, operTbId );
1401 createTool( GEOMOp::OpShapesOnShape, operTbId );
1402 createTool( GEOMOp::OpSharedShapes, operTbId );
1403 createTool( GEOMOp::OpTransferData, operTbId );
1405 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1406 createTool( GEOMOp::OpFillet1d, featTbId );
1407 createTool( GEOMOp::OpFillet2d, featTbId );
1408 createTool( GEOMOp::OpFillet3d, featTbId );
1409 createTool( GEOMOp::OpChamfer, featTbId );
1410 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1411 createTool( GEOMOp::OpExtrudedCut, featTbId );
1413 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1414 createTool( GEOMOp::OpEdge, buildTbId );
1415 createTool( GEOMOp::OpWire, buildTbId );
1416 createTool( GEOMOp::OpFace, buildTbId );
1417 createTool( GEOMOp::OpShell, buildTbId );
1418 createTool( GEOMOp::OpSolid, buildTbId );
1419 createTool( GEOMOp::OpCompound, buildTbId );
1421 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1422 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1423 createTool( GEOMOp::OpProperties, measureTbId );
1424 createTool( GEOMOp::OpCenterMass, measureTbId );
1425 createTool( GEOMOp::OpInertia, measureTbId );
1426 createTool( GEOMOp::OpNormale, measureTbId );
1427 createTool( separator(), measureTbId );
1428 createTool( GEOMOp::OpBoundingBox, measureTbId );
1429 createTool( GEOMOp::OpMinDistance, measureTbId );
1430 createTool( GEOMOp::OpAngle, measureTbId );
1431 createTool( GEOMOp::OpTolerance , measureTbId );
1432 createTool( separator(), measureTbId );
1433 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1434 createTool( GEOMOp::OpFreeFaces, measureTbId );
1435 createTool( separator(), measureTbId );
1436 createTool( GEOMOp::OpWhatIs, measureTbId );
1437 createTool( GEOMOp::OpCheckShape, measureTbId );
1438 createTool( GEOMOp::OpCheckCompound, measureTbId );
1439 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1440 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1441 createTool( GEOMOp::OpFastCheckInters, measureTbId );
1443 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1444 createTool( GEOMOp::OpPictureImport, picturesTbId );
1446 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1449 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1450 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1451 //@@ 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 @@//
1453 // ---- create popup menus --------------------------
1455 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1456 QString clientOCC = "(client='OCCViewer')";
1457 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1458 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1460 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1461 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1462 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1463 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1465 QString autoColorPrefix =
1466 "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') and type='Shape' and selcount=1";
1468 QtxPopupMgr* mgr = popupMgr();
1470 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1471 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1472 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1473 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1474 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1475 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1476 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1477 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1479 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1480 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1481 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1482 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1483 mgr->insert( separator(), -1, -1 ); // -----------
1485 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1486 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1487 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1488 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1489 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1490 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1491 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1492 mgr->insert( separator(), -1, -1 ); // -----------
1493 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1494 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1495 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1496 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1497 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1498 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1499 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1500 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1501 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1502 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1503 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1504 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1505 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1506 mgr->insert( separator(), dispmodeId, -1 );
1507 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1508 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1509 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1510 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1511 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1512 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1513 mgr->insert( action( GEOMOp::OpShowName ), dispmodeId, -1 ); // show name
1514 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1515 mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK + " and isNameMode", QtxPopupMgr::ToggleRule );
1516 mgr->insert( separator(), -1, -1 ); // -----------
1518 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1519 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1520 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1521 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1522 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1523 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1524 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1525 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1526 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1527 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1529 // material properties
1530 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1531 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1534 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1535 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1537 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1538 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1539 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1541 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1542 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1544 mgr->insert( separator(), -1, -1 ); // -----------
1545 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1546 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1547 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1548 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1549 mgr->insert( separator(), -1, -1 ); // -----------
1551 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1552 onlyComponent = "((type='Component') and selcount=1)",
1553 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1554 types = "'Shape' 'Group' 'FieldStep'";
1556 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1557 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1559 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1560 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1562 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1563 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1565 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1567 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1568 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1569 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1570 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1571 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1572 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1573 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1574 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1575 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1576 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1577 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1578 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1579 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1580 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1581 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1582 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1583 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1584 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1585 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1586 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1587 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1588 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1589 mgr->insert( separator(), selectonlyId, -1);
1590 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1591 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1592 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1593 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1594 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1595 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1596 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1598 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1600 mgr->insert( separator(), -1, -1 ); // -----------
1601 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1602 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1603 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1604 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1606 mgr->insert( separator(), -1, -1 ); // -----------
1607 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1608 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1610 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1611 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1613 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1614 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1616 mgr->insert( separator(), -1, -1 ); // -----------
1617 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1618 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1620 mgr->insert( separator(), -1, -1 ); // -----------
1621 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1622 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1624 mgr->insert( separator(), -1, -1 ); // -----------
1625 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1626 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1628 mgr->insert( separator(), -1, -1 ); // -----------
1629 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1630 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1632 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1634 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1636 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1637 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1638 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1641 // create plugin actions and menus
1645 //=======================================================================
1646 // function : GeometryGUI::addPluginActions()
1648 //=======================================================================
1649 void GeometryGUI::addPluginActions()
1652 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1653 if (!resMgr) return;
1655 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1656 if (!appStudy) return;
1658 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1660 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1662 int id = GEOMOp::OpLastOperationID; // TODO?
1665 GEOMUtils::PluginInfo::const_iterator it;
1666 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1667 // bind action lib and label to its ID for activateOperation() method proper work
1668 GEOMUtils::PluginData pdata = (*it);
1669 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1670 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1671 std::list<GEOMUtils::ActionData>::const_iterator ait;
1672 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1673 GEOMUtils::ActionData adata = (*ait);
1676 if ( !adata.icon.empty() )
1677 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1679 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1680 QString actionName = smenus.last();
1681 actionName = actionName.toUpper().prepend( "MEN_" );
1682 smenus.removeLast();
1684 // path to action in toolbar
1685 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1686 QString actionTool = stools.last();
1687 actionTool = actionTool.toUpper().prepend( "TOP_" );
1688 stools.removeLast();
1690 QString actionStat = adata.statusText.c_str();
1691 actionStat = actionStat.toUpper().prepend( "STB_" );
1693 createAction( id, // ~ adata.label
1694 tr( actionTool.toLatin1().constData() ),
1696 tr( actionName.toLatin1().constData() ),
1697 tr( actionStat.toLatin1().constData() ),
1698 QKeySequence( tr( adata.accel.c_str() ) ),
1699 application()->desktop(),
1701 this, SLOT( OnGUIEvent() ),
1702 QString() /*shortcutAction*/ );
1705 foreach ( QString subMenu, smenus ) {
1706 QStringList subMenuList = subMenu.split( ":" );
1707 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1708 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1709 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1711 createMenu( id, menuId, -1 );
1713 if ( !stools.isEmpty() ) {
1714 QString subTool = stools[0];
1715 subTool = subTool.toUpper().prepend( "TOOL_" );
1716 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1717 createTool(id, toolId);
1720 // add action id to map
1721 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1722 myPluginActions[id] = anAction;
1729 //=======================================================================
1730 // function : GeometryGUI::activateModule()
1731 // purpose : Called when GEOM module is activated
1732 //=======================================================================
1733 bool GeometryGUI::activateModule( SUIT_Study* study )
1735 if ( CORBA::is_nil( myComponentGeom ) )
1738 bool res = SalomeApp_Module::activateModule( study );
1742 setMenuShown( true );
1743 setToolShown( true );
1745 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1746 PyGILState_STATE gstate = PyGILState_Ensure();
1747 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1748 if ( !pluginsmanager ) {
1752 PyObjWrapper result =
1753 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1754 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1755 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1759 PyGILState_Release(gstate);
1760 // end of GEOM plugins loading
1762 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1763 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1765 // Reset actions accelerator keys
1766 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1768 GUIMap::Iterator it;
1769 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1770 it.value()->activate( application()->desktop() );
1772 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1774 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1775 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1776 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1778 if ( !myCreationInfoWdg )
1779 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1780 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1781 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1784 SALOME_ListIO selected;
1785 sm->selectedObjects( selected );
1786 sm->clearSelected();
1788 SUIT_ViewManager* vm;
1789 ViewManagerList OCCViewManagers, VTKViewManagers;
1791 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1792 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1793 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1794 onViewManagerAdded(vm);
1796 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1797 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1798 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1799 onViewManagerAdded(vm);
1801 sm->setSelectedObjects( selected, true ); //NPAL 19674
1803 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1805 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1807 // 0020836 (Basic vectors and origin)
1808 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1809 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1810 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1812 _PTR(Study) studyDS = appStudy->studyDS();
1814 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1815 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1816 createOriginAndBaseVectors();
1824 //=======================================================================
1825 // function : GeometryGUI::deactivateModule()
1826 // purpose : Called when GEOM module is deactivated
1827 //=======================================================================
1828 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1830 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1832 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1834 setMenuShown( false );
1835 setToolShown( false );
1837 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1838 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1840 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1842 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1843 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1844 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1845 myCreationInfoWdg = 0;
1847 EmitSignalCloseAllDialogs();
1849 GUIMap::Iterator it;
1850 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1851 it.value()->deactivate();
1853 // Unset actions accelerator keys
1854 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1856 qDeleteAll(myOCCSelectors);
1857 myOCCSelectors.clear();
1858 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1860 qDeleteAll(myVTKSelectors);
1861 myVTKSelectors.clear();
1862 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1864 return SalomeApp_Module::deactivateModule( study );
1867 //=======================================================================
1868 // function : onWindowActivated()
1869 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1870 //=======================================================================
1871 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1876 const bool ViewOCC = ( win->getViewManager() ? win->getViewManager()->getType() == OCCViewer_Viewer::Type() : false );
1877 //const bool ViewVTK = ( win->getViewManager() ? win->getViewManager()->getType() == SVTK_Viewer::Type() : false );
1879 // disable non-OCC viewframe menu commands
1880 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1881 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1882 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1883 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1884 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1885 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1886 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1888 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1889 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1890 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1891 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1893 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1896 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1898 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1899 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
1900 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1901 if ( myCreationInfoWdg )
1902 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1905 void GeometryGUI::viewManagers( QStringList& lst ) const
1907 lst.append( OCCViewer_Viewer::Type() );
1910 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1912 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1914 qDebug( "connect" );
1915 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1916 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1917 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1918 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1919 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1920 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1921 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1922 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1924 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1925 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1927 // disable OCC selectors
1928 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1929 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1930 while ( itOCCSel.hasNext() )
1931 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1932 sr->setEnabled(true);
1934 else if ( vm->getType() == SVTK_Viewer::Type() )
1936 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1937 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1939 // disable VTK selectors
1940 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1941 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1942 while ( itVTKSel.hasNext() )
1943 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1944 sr->setEnabled(true);
1948 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1950 SUIT_ViewModel* viewer = vm->getViewModel();
1951 if ( vm->getType() == OCCViewer_Viewer::Type() )
1953 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1954 while ( itOCCSel.hasNext() )
1955 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1956 if ( sr->viewer() == viewer )
1958 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1962 if ( vm->getType() == SVTK_Viewer::Type() )
1964 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1965 while ( itVTKSel.hasNext() )
1966 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1967 if ( sr->viewer() == viewer )
1969 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1975 //================================================================================
1977 * \brief Slot called when selection changed. Shows creation info of a selected object
1979 //================================================================================
1981 void GeometryGUI::updateCreationInfo()
1983 if ( myCreationInfoWdg )
1984 myCreationInfoWdg->clear();
1986 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
1987 // if ( !myCreationInfoWdg->isVisible() )
1990 // look for a sole selected GEOM_Object
1991 GEOM::GEOM_BaseObject_var geomObj;
1993 SALOME_ListIO selected;
1994 getApp()->selectionMgr()->selectedObjects( selected );
1996 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
1997 SALOME_ListIteratorOfListIO selIt( selected );
1998 for ( ; selIt.More(); selIt.Next() )
2000 Handle(SALOME_InteractiveObject) io = selIt.Value();
2001 if ( !io->hasEntry() ) continue;
2002 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2003 if ( !sobj ) continue;
2004 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2005 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2006 if ( !gobj->_is_nil() )
2008 if ( !geomObj->_is_nil() )
2009 return; // several GEOM objects selected
2013 if ( geomObj->_is_nil() ) return;
2015 // pass creation info of geomObj to myCreationInfoWdg
2017 if ( myCreationInfoWdg ) {
2019 QString operationName;
2020 myCreationInfoWdg->setOperation( icon, operationName );
2024 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2026 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2027 QString name = info->operationName.in();
2028 if ( !name.isEmpty() ) {
2030 QString plugin_name;
2031 for ( size_t i = 0; i < info->params.length(); ++i ) {
2032 myCreationInfoWdg->addParam( info->params[i].name.in(),
2033 info->params[i].value.in() );
2034 QString value = info->params[i].name.in();
2035 if( value == PLUGIN_NAME ) {
2036 plugin_name = info->params[i].value.in();
2039 QString prefix = plugin_name.isEmpty() ? "GEOM" : plugin_name;
2040 icon = resMgr->loadPixmap( prefix, tr( ("ICO_"+name).toLatin1().constData() ), false );
2041 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2042 if ( operationName.startsWith( "MEN_" ))
2043 operationName = name; // no translation
2044 myCreationInfoWdg->setOperation( icon, operationName );
2053 void GeometryGUI::onAutoBringToFront()
2055 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2056 if( !isAutoBringToFront )
2059 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2060 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2063 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2064 if (!appStudy) return;
2066 GEOM_Displayer displayer( appStudy );
2068 SALOME_View* window = displayer.GetActiveView();
2069 if ( !window ) return;
2071 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2073 SALOME_ListIO selected;
2074 getApp()->selectionMgr()->selectedObjects( selected );
2075 if (!myTopLevelIOList.IsEmpty())
2077 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2079 Handle( SALOME_InteractiveObject ) io = It.Value();
2080 bool isSelected = false;
2081 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2083 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2084 if( io->isSame( sel_io ) )
2087 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2089 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2090 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2095 myTopLevelIOList.Assign(selected);
2096 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2098 Handle( SALOME_InteractiveObject ) io = It.Value();
2099 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2100 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2103 displayer.UpdateViewer();
2104 GeometryGUI::Modified();
2107 void GeometryGUI::updateFieldColorScale()
2109 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2111 GEOM_Displayer aDisplayer( aStudy );
2112 aDisplayer.UpdateColorScale();
2116 QString GeometryGUI::engineIOR() const
2118 if ( !CORBA::is_nil( GetGeomGen() ) )
2119 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2123 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2124 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2126 theWidth = theHeight = 0;
2128 Handle(TColStd_HArray1OfByte) aTexture;
2131 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2132 aTexture = aTextureMap[ theId ];
2133 if ( aTexture.IsNull() ) {
2134 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2135 if ( !aInsOp->_is_nil() ) {
2136 CORBA::Long aWidth, aHeight;
2137 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2138 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2140 theHeight = aHeight;
2142 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2144 for (int i = 0; i < aStream->length(); i++)
2145 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2146 aTextureMap[ theId ] = aTexture;
2154 LightApp_Selection* GeometryGUI::createSelection() const
2156 return new GEOMGUI_Selection();
2159 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2161 SalomeApp_Module::contextMenuPopup( client, menu, title );
2163 getApp()->selectionMgr()->selectedObjects( lst );
2165 //Add submenu for predefined materials
2166 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2167 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2168 QtxPopupMgr* mgr = popupMgr();
2169 //get parrent for submenu
2170 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2172 QMenu* oldMenu = act->menu() ;
2177 QMenu* matMenu = new QMenu();
2178 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2180 //Get current material model for the object
2182 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2183 if ( anApp && anApp->activeViewManager() ) {
2184 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2186 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2189 QString curModel = "";
2190 if ( v.canConvert<QString>() ) curModel = v.toString();
2191 // get list of all predefined materials
2192 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2194 foreach ( QString material, materials )
2196 QAction* menAct = matMenu->addAction( material );
2197 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2198 signalMapper->setMapping( menAct, material );
2199 menAct->setCheckable( true );
2200 // Set checked if this material is current
2201 Material_Model aModel;
2202 aModel.fromResources( material );
2203 if ( !found && aModel.toProperties() == curModel ) {
2204 menAct->setChecked( true );
2208 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2209 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2210 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2211 this, SLOT( OnSetMaterial( const QString & ) ) );
2212 act->setMenu( matMenu );
2216 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2217 Handle(SALOME_InteractiveObject) io = lst.First();
2218 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2219 _PTR(Study) study = appStudy->studyDS();
2220 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2222 QString aName = QString( obj->GetName().c_str() );
2223 aName.remove( QRegExp("\\s+$") );
2229 void GeometryGUI::OnSetMaterial(const QString& theName)
2231 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2235 void GeometryGUI::createPreferences()
2237 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2239 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2240 setPreferenceProperty( genGroup, "columns", 2 );
2242 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2243 LightApp_Preferences::Selector,
2244 "Geometry", "display_mode" );
2246 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2247 LightApp_Preferences::Color, "Geometry", "shading_color" );
2249 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2250 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2252 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2253 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2255 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2256 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2258 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2259 LightApp_Preferences::Color, "Geometry", "line_color" );
2261 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2262 LightApp_Preferences::Color, "Geometry", "point_color" );
2264 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2265 LightApp_Preferences::Color, "Geometry", "isos_color" );
2267 addPreference( tr( "PREF_LABEL_COLOR" ), genGroup,
2268 LightApp_Preferences::Color, "Geometry", "label_color" );
2270 addPreference( "", genGroup, LightApp_Preferences::Space );
2272 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2273 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2275 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2276 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2278 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2279 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2281 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2282 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2284 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2285 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2287 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2288 LightApp_Preferences::Selector,
2289 "Geometry", "material" );
2291 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2292 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2298 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2299 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2301 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2302 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2304 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2305 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2307 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2308 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2310 for (int i = 0; i < nb; i++) {
2311 setPreferenceProperty( wd[i], "min", 1 );
2312 setPreferenceProperty( wd[i], "max", 5 );
2315 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2316 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2318 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2319 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2321 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2322 setPreferenceProperty( aDimGroupId, "columns", 2 );
2324 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2325 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2327 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2328 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2330 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2331 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2333 int aDimFontHeightId = addPreference( tr( "PREF_DIMENSIONS_FONT_HEIGHT" ), aDimGroupId,
2334 LightApp_Preferences::DblSpin, "Geometry", "dimensions_font_height" );
2336 setPreferenceProperty( aDimFontHeightId, "min", 1e-9 );
2337 setPreferenceProperty( aDimFontHeightId, "max", 1e+9 );
2338 setPreferenceProperty( aDimFontHeightId, "precision", 9 );
2340 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2341 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2343 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2344 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2345 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2347 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2348 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2350 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2351 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2353 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2354 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2356 QStringList aListOfLengthUnits;
2357 aListOfLengthUnits << "m";
2358 aListOfLengthUnits << "cm";
2359 aListOfLengthUnits << "mm";
2360 aListOfLengthUnits << "in.";
2361 aListOfLengthUnits << "ft.";
2363 QStringList aListOfAngUnits;
2364 aListOfAngUnits << "rad";
2365 aListOfAngUnits << "deg";
2367 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2368 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2370 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2371 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2373 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2374 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2375 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2377 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2378 setPreferenceProperty( isoGroup, "columns", 2 );
2379 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2380 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2381 setPreferenceProperty( isoU, "min", 0 );
2382 setPreferenceProperty( isoU, "max", 100000 );
2383 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2384 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2385 setPreferenceProperty( isoV, "min", 0 );
2386 setPreferenceProperty( isoV, "max", 100000 );
2388 // Quantities with individual precision settings
2389 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2390 setPreferenceProperty( precGroup, "columns", 2 );
2392 const int nbQuantities = 8;
2393 int prec[nbQuantities], ii = 0;
2394 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2395 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2396 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2397 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2398 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2399 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2400 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2401 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2402 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2403 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2404 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2405 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2406 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2407 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2408 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2409 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2411 // Set property for precision value for spinboxes
2412 for ( ii = 0; ii < nbQuantities; ii++ ){
2413 setPreferenceProperty( prec[ii], "min", -14 );
2414 setPreferenceProperty( prec[ii], "max", 14 );
2415 setPreferenceProperty( prec[ii], "precision", 2 );
2418 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2419 setPreferenceProperty( VertexGroup, "columns", 2 );
2421 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2422 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2424 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2425 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2427 // Set property for default display mode
2428 QStringList aModesList;
2429 aModesList.append( tr("MEN_WIREFRAME") );
2430 aModesList.append( tr("MEN_SHADING") );
2431 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2432 aModesList.append( tr("MEN_TEXTURE") );
2434 QList<QVariant> anIndexesList;
2435 anIndexesList.append(0);
2436 anIndexesList.append(1);
2437 anIndexesList.append(2);
2438 anIndexesList.append(3);
2440 setPreferenceProperty( dispmode, "strings", aModesList );
2441 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2443 // Set property for top level display mode
2444 QStringList aTopModesList;
2445 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2446 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2447 aTopModesList.append( tr("MEN_WIREFRAME") );
2448 aTopModesList.append( tr("MEN_SHADING") );
2449 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2451 QList<QVariant> aTopIndexesList;
2452 aTopIndexesList.append(0);
2453 aTopIndexesList.append(1);
2454 aTopIndexesList.append(2);
2455 aTopIndexesList.append(3);
2456 aTopIndexesList.append(4);
2458 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2459 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2461 // Set property for step value for spinboxes
2462 setPreferenceProperty( step, "min", 1 );
2463 setPreferenceProperty( step, "max", 10000 );
2464 setPreferenceProperty( step, "precision", 3 );
2466 // Set property for trandparency value for spinboxes
2467 setPreferenceProperty( transparency, "min", 0 );
2468 setPreferenceProperty( transparency, "max", 100 );
2470 // Set property for deflection value for spinboxes
2471 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2472 setPreferenceProperty( defl, "max", 1.0 );
2473 setPreferenceProperty( defl, "step", 1.0e-04 );
2474 setPreferenceProperty( defl, "precision", 6 );
2476 // Set property for default material
2477 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2479 // Set property vertex marker type
2480 QList<QVariant> aMarkerTypeIndicesList;
2481 QList<QVariant> aMarkerTypeIconsList;
2483 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2484 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2485 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2486 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2487 aMarkerTypeIndicesList << (i-1);
2488 aMarkerTypeIconsList << pixmap;
2491 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2492 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2494 // Set property for vertex marker scale
2495 QList<QVariant> aMarkerScaleIndicesList;
2496 QStringList aMarkerScaleValuesList;
2498 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2499 aMarkerScaleIndicesList << iii;
2500 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2503 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2504 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2506 // Scalar bar for field step presentation
2507 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2508 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2510 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2511 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2512 setPreferenceProperty( sbXPosition, "min", 0 );
2513 setPreferenceProperty( sbXPosition, "max", 1 );
2514 setPreferenceProperty( sbXPosition, "step", 0.05 );
2516 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2517 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2518 setPreferenceProperty( sbYPosition, "min", 0 );
2519 setPreferenceProperty( sbYPosition, "max", 1 );
2520 setPreferenceProperty( sbYPosition, "step", 0.05 );
2522 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2523 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2524 setPreferenceProperty( sbWidth, "min", 0 );
2525 setPreferenceProperty( sbWidth, "max", 1 );
2526 setPreferenceProperty( sbWidth, "step", 0.05 );
2528 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2529 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2530 setPreferenceProperty( sbHeight, "min", 0 );
2531 setPreferenceProperty( sbHeight, "max", 1 );
2532 setPreferenceProperty( sbHeight, "step", 0.05 );
2534 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2535 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2536 setPreferenceProperty( sbTextHeight, "min", 6 );
2537 setPreferenceProperty( sbTextHeight, "max", 24 );
2538 setPreferenceProperty( sbTextHeight, "step", 1 );
2540 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2541 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2542 setPreferenceProperty( sbNbIntervals, "min", 2 );
2543 setPreferenceProperty( sbNbIntervals, "max", 64 );
2544 setPreferenceProperty( sbNbIntervals, "step", 1 );
2546 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2547 setPreferenceProperty( originGroup, "columns", 2 );
2549 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2550 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2551 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2552 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2554 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2555 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2557 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2558 setPreferenceProperty( operationsGroup, "columns", 2 );
2560 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2561 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2563 addPreference( tr( "PREF_HIDE_INPUT_OBJECT" ), operationsGroup,
2564 LightApp_Preferences::Bool, "Geometry", "hide_input_object" );
2566 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2568 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2570 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2571 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2573 QStringList aHierarchyTypeList;
2574 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2575 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2576 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2578 QList<QVariant> aHierarchyTypeIndexesList;
2579 aHierarchyTypeIndexesList.append(0);
2580 aHierarchyTypeIndexesList.append(1);
2581 aHierarchyTypeIndexesList.append(2);
2583 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2584 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2586 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2587 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2589 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2591 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2592 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2594 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2595 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2596 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2597 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2598 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2599 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2600 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2601 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2603 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2604 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2605 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2606 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2607 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2608 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2615 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2617 if (section == "Geometry") {
2618 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2619 if (param == QString("SettingsGeomStep")) {
2620 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2621 EmitSignalDefaultStepValueChanged(spin_step);
2623 else if (param == QString("toplevel_color")) {
2624 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2625 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2627 else if (param == QString("toplevel_dm")) {
2628 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2630 else if (param == QString("scalar_bar_x_position") ||
2631 param == QString("scalar_bar_y_position") ||
2632 param == QString("scalar_bar_width") ||
2633 param == QString("scalar_bar_height") ||
2634 param == QString("scalar_bar_text_height") ||
2635 param == QString("scalar_bar_nb_intervals")) {
2636 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2638 GEOM_Displayer aDisplayer( aStudy );
2639 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2640 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2643 else if ( param == QString("dimensions_color") ||
2644 param == QString("dimensions_line_width") ||
2645 param == QString("dimensions_font_height") ||
2646 param == QString("dimensions_arrow_length") ||
2647 param == QString("dimensions_show_units") ||
2648 param == QString("dimensions_length_units") ||
2649 param == QString("dimensions_angle_units") ||
2650 param == QString("label_color") )
2652 SalomeApp_Application* anApp = getApp();
2658 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2664 GEOM_Displayer aDisplayer( aStudy );
2666 ViewManagerList aVMs;
2667 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2668 ViewManagerList::Iterator anIt = aVMs.begin();
2669 for ( ; anIt != aVMs.end(); ++anIt )
2671 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2677 SALOME_ListIO aVisible;
2678 aViewer->GetVisible( aVisible );
2679 aDisplayer.Redisplay( aVisible, false, aViewer );
2681 if ( param == QString( "label_color" ) ) {
2682 ViewManagerList aVMsVTK;
2683 anApp->viewManagers( SVTK_Viewer::Type(), aVMsVTK );
2684 ViewManagerList::Iterator anIt = aVMsVTK.begin();
2685 for ( ; anIt != aVMsVTK.end(); ++anIt )
2687 SVTK_Viewer* aViewer = dynamic_cast<SVTK_Viewer*>( (*anIt)->getViewModel() );
2692 SALOME_ListIO aVisible;
2693 aViewer->GetVisible( aVisible );
2694 aDisplayer.Redisplay( aVisible, false, aViewer );
2697 aDisplayer.UpdateViewer();
2699 else if ( param.startsWith( "dependency_tree") )
2700 emit SignalDependencyTreeParamChanged( section, param );
2704 LightApp_Displayer* GeometryGUI::displayer()
2707 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2711 void GeometryGUI::setLocalSelectionMode(const int mode)
2713 myLocalSelectionMode = mode;
2716 int GeometryGUI::getLocalSelectionMode() const
2718 return myLocalSelectionMode;
2721 const char gSeparator = '_'; // character used to separate parameter names
2722 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2725 * \brief Store visual parameters
2727 * This method is called just before the study document is saved.
2728 * Store visual parameters in AttributeParameter attribute(s)
2730 void GeometryGUI::storeVisualParameters (int savePoint)
2732 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2733 if ( !appStudy || !appStudy->studyDS() )
2735 _PTR(Study) studyDS = appStudy->studyDS();
2737 // componentName is used for encoding of entries when storing them in IParameters
2738 std::string componentName = myComponentGeom->ComponentDataType();
2739 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2740 //if (!aSComponent) return;
2743 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2744 componentName.c_str(),
2746 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2748 QSet<QString> anEntriesToStoreShared;
2749 QList<SUIT_ViewManager*> lst;
2750 QList<SUIT_ViewManager*>::Iterator it;
2752 // main cycle to store parameters of displayed objects
2754 getApp()->viewManagers(lst);
2755 for (it = lst.begin(); it != lst.end(); it++) {
2756 SUIT_ViewManager* vman = *it;
2757 QString vType = vman->getType();
2758 int aMgrId = vman->getGlobalId();
2759 // saving VTK actors properties
2760 QVector<SUIT_ViewWindow*> views = vman->getViews();
2761 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2762 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
2763 ObjMap::ConstIterator o_it = anObjects.begin();
2764 for (; o_it != anObjects.end(); o_it++) {
2765 const PropMap& aProps = o_it.value();
2767 //Check that object exists in the study
2768 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2769 if ( !obj || !(aProps.count() > 0))
2771 // entry is "encoded" = it does NOT contain component adress, since it is a
2772 // subject to change on next component loading
2774 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2776 _PTR(GenericAttribute) anAttr;
2777 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2780 // remember entry of object to store shared GEOM properties
2781 // (e.g. dimension properties).
2782 if ( vType == OCCViewer_Viewer::Type() )
2784 anEntriesToStoreShared.insert( o_it.key() );
2787 QString param, occParam = vType;
2788 occParam += GEOM::sectionSeparator();
2789 occParam += QString::number(aMgrId);
2790 occParam += GEOM::sectionSeparator();
2792 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2793 param = occParam + GEOM::propertyName( GEOM::Visibility );
2794 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2797 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2798 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2799 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2802 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2803 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2805 val << QString::number(c.redF());
2806 val << QString::number(c.greenF());
2807 val << QString::number(c.blueF());
2808 param = occParam + GEOM::propertyName( GEOM::Color );
2809 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2812 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2813 param = occParam + GEOM::propertyName( GEOM::Texture );
2814 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2817 if (vType == SVTK_Viewer::Type()) {
2818 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2819 param = occParam + GEOM::propertyName( GEOM::Opacity );
2820 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2822 } else if (vType == SOCC_Viewer::Type()) {
2823 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2824 param = occParam + GEOM::propertyName( GEOM::Transparency );
2825 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2828 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2829 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2830 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2834 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2835 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2836 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2839 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2840 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2841 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2844 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
2845 param = occParam + GEOM::propertyName( GEOM::Vertices );
2846 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
2849 if (aProps.contains(GEOM::propertyName( GEOM::ShowName ))) {
2850 param = occParam + GEOM::propertyName( GEOM::ShowName );
2851 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::ShowName )).toString().toStdString());
2854 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2855 param = occParam + GEOM::propertyName( GEOM::Deflection );
2856 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2859 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2860 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2861 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2862 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2865 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2866 param = occParam + GEOM::propertyName( GEOM::Material );
2867 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2870 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2871 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2872 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2875 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2876 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2877 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2879 } // object iterator
2881 } // for (viewManagers)
2883 // store dimension attributes of objects:
2884 // since the displayed object always persists in property map, we remember the object entries
2885 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
2886 QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
2887 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
2888 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
2890 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
2891 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName);
2893 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
2895 if ( aDimensions.GetNumber() == 0 )
2900 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
2905 * \brief Restore visual parameters
2907 * This method is called after the study document is opened.
2908 * Restore visual parameters from AttributeParameter attribute(s)
2910 void GeometryGUI::restoreVisualParameters (int savePoint)
2912 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2913 if (!appStudy || !appStudy->studyDS())
2915 _PTR(Study) studyDS = appStudy->studyDS();
2917 // componentName is used for encoding of entries when storing them in IParameters
2918 std::string componentName = myComponentGeom->ComponentDataType();
2919 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2920 //if (!aSComponent) return;
2923 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2924 componentName.c_str(),
2926 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2928 std::vector<std::string> entries = ip->getEntries();
2930 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2932 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2933 QString entry (ip->decodeEntry(*entIt).c_str());
2935 // Check that the entry corresponds to a real object in the Study
2936 // as the object may be deleted or modified after the visual state is saved.
2937 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2938 if (!so) continue; //Skip the not existent entry
2940 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2941 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2943 std::vector<std::string>::iterator namesIt = paramNames.begin();
2944 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2946 // actors are stored in a map after displaying of them for
2947 // quicker access in the future: map < viewID to actor >
2948 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2949 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2951 QString viewerTypStr;
2952 QString viewIndexStr;
2954 QVector<PropMap> aListOfMap;
2956 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2958 // visual parameters are stored in strings as follows:
2959 // 1) ViewerType_ViewIndex_ParamName
2960 // 2) ViewerType_ParamName (shared for GEOM module)
2961 // '_' is used as separator and should not be used in viewer type or parameter names.
2962 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2964 bool isShared = lst.size() == 2;
2965 bool isViewer = lst.size() == 3;
2966 if ( !isShared && !isViewer )
2971 // shared visual parameters
2974 QString aParamNameStr( lst[1] );
2975 QString aValuesStr( (*valuesIt).c_str() );
2977 // shared dimension properties are stored as attribute
2978 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
2980 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
2981 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
2987 // per view visual parameters
2988 viewerTypStr = lst[0];
2989 viewIndexStr = lst[1];
2990 QString paramNameStr = lst[2];
2993 viewIndex = viewIndexStr.toUInt(&ok);
2994 if (!ok) // bad conversion of view index to integer
2997 if ((viewIndex + 1) > aListOfMap.count()) {
2998 aListOfMap.resize(viewIndex + 1);
3001 QString val((*valuesIt).c_str());
3002 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
3003 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
3004 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
3005 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
3006 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
3007 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
3008 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
3009 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
3010 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
3011 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
3012 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
3013 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
3014 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
3015 QStringList rgb = val.split(GEOM::subSectionSeparator());
3016 if (rgb.count() == 3) {
3017 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
3018 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
3020 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
3021 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
3022 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
3023 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
3024 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
3025 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
3026 } else if (paramNameStr == GEOM::propertyName( GEOM::ShowName )) {
3027 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::ShowName ), val == "true" || val == "1");
3028 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3029 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3030 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3031 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3032 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3033 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3034 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3035 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3036 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3037 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3039 } // for names/parameters iterator
3041 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3043 for (int index = 0; index < aListOfMap.count(); index++) {
3044 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
3046 //Get Visibility property of the current PropMap
3047 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3048 SUIT_ViewManager* vman = lst.at(index);
3049 SUIT_ViewModel* vmodel = vman->getViewModel();
3050 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
3053 } // for entries iterator
3055 // update all VTK and OCC views
3056 QList<SUIT_ViewManager*> lst;
3057 getApp()->viewManagers(lst);
3058 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3059 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3062 if (vmodel->getType() == SVTK_Viewer::Type()) {
3063 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3064 vtkView->getRenderer()->ResetCameraClippingRange();
3067 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3068 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3069 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3076 // Compute current name mode of the viewer
3077 void UpdateNameMode( SalomeApp_Application* app )
3079 bool isMode = false;
3080 SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() );
3081 SUIT_ViewWindow* viewWindow = app->desktop()->activeWindow();
3082 GEOM_Displayer displayer( aStudy );
3083 int aMgrId = viewWindow->getViewManager()->getGlobalId();
3085 SALOME_View* window = displayer.GetActiveView();
3086 if ( !window ) return;
3088 SALOME_ListIO anIOlst;
3089 window->GetVisible( anIOlst );
3091 for ( SALOME_ListIteratorOfListIO It( anIOlst ); It.More(); It.Next() ) {
3092 Handle( SALOME_InteractiveObject ) io = It.Value();
3093 QVariant v = aStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::ShowName ), QVariant() );
3094 bool isIONameMode = v.isValid() ? v.toBool() : false;
3098 viewWindow->setProperty( "NameMode", isMode );
3101 void GeometryGUI::onViewAboutToShow()
3103 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3104 QAction* a = action( GEOMOp::OpSwitchVectors );
3105 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3106 QAction* aNameAction = action( GEOMOp::OpSwitchName );
3108 a->setEnabled(true);
3109 bool vmode = window->property("VectorsMode").toBool();
3110 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3111 aVerticesAction->setEnabled(true);
3112 vmode = window->property("VerticesMode").toBool();
3113 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3114 UpdateNameMode( getApp() );
3115 aNameAction->setEnabled(true);
3116 vmode = window->property("NameMode").toBool();
3117 aNameAction->setText ( vmode == 1 ? tr( "MEN_NAME_MODE_OFF" ) : tr("MEN_NAME_MODE_ON") );
3119 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3120 a->setEnabled(false);
3121 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3122 aVerticesAction->setEnabled(false);
3123 aNameAction->setText ( tr("MEN_NAME_MODE_ON") );
3124 aNameAction->setEnabled(false);
3129 \brief Return action by id
3130 \param id identifier of the action
3133 QAction* GeometryGUI::getAction(const int id) {
3138 \brief GEOM module message handler
3140 This method can be re-implemented in the subclasses.
3141 This is a GEOM module message handler.
3143 \param msg the message received.
3145 void GeometryGUI::message(const QString& msg)
3148 QStringList data = msg.split("/");
3149 const int nbStrings = data.count();
3151 if (nbStrings > 0) {
3152 if (data[0] == "modified") {
3154 QString anIOR = nbStrings > 1 ? data[1] : QString();
3156 if ( anIOR.isEmpty() ) {
3160 // Get the geom object.
3161 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3163 // Clear the shape buffer
3164 GeometryGUI::ClearShapeBuffer (anObj);
3170 \brief Clears the shape buffer.
3172 This is a static method. It clears the shape buffer.
3174 \param theObj the object
3176 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3178 if ( CORBA::is_nil( theObj ) )
3181 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3182 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3183 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3185 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3190 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3195 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3199 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3200 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3201 _PTR(GenericAttribute) anAttr;
3202 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3203 _PTR(AttributeIOR) anIOR ( anAttr );
3204 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3205 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3211 \brief Returns the object from IOR.
3213 This is a static method. It returns the object from its IOR.
3215 \param IOR object IOR
3216 \return GEOM object.
3218 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3220 GEOM::GEOM_Object_var geomObj;
3221 if ( !IOR.isEmpty() ) {
3222 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3223 ( IOR.toLatin1().constData() );
3224 if ( !CORBA::is_nil( corbaObj ) )
3225 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3227 return geomObj._retn();
3231 \brief Returns IOR of the object.
3233 This is a static method. It returns the object's IOR.
3235 \param object the GEOM object.
3236 \return object's IOR.
3238 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3241 if ( !CORBA::is_nil( object ) ) {
3242 CORBA::String_var anIOR =
3243 SalomeApp_Application::orb()->object_to_string( object );
3250 \brief Check if this object is can't be renamed in place
3252 This method can be re-implemented in the subclasses.
3253 Return true in case if object isn't reference or component (module root).
3255 \param entry column id
3256 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3258 bool GeometryGUI::renameAllowed( const QString& entry) const {
3260 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3261 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3262 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3264 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3268 Rename object by entry.
3269 \param entry entry of the object
3270 \param name new name of the object
3271 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3273 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3275 bool result = false;
3277 SalomeApp_Application* app =
3278 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3279 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3284 _PTR(Study) aStudy = appStudy->studyDS();
3289 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3291 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3295 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3296 _PTR(GenericAttribute) anAttr;
3298 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3299 _PTR(AttributeName) aName (anAttr);
3301 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3302 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3303 if (!CORBA::is_nil(anObj)) {
3304 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3305 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3313 void GeometryGUI::updateMaterials()
3315 LightApp_Preferences* pref = preferences();
3317 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3318 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3319 if ( !materials.contains( currentMaterial ) )
3320 // user material set as default in the preferences, might be removed
3321 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3323 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3325 setPreferenceProperty( prefItem->id(),
3326 "strings", materials );
3327 prefItem->retrieve();
3333 \brief Check if the module allows "drag" operation of its objects.
3335 Overloaded from LightApp_Module class.
3337 This function is a part of the general drag-n-drop mechanism.
3338 The goal of this function is to check data object passed as a parameter
3339 and decide if it can be dragged or no.
3341 \param what data object being tested for drag operation
3342 \return \c true if module allows dragging of the specified object
3343 \sa isDropAccepted(), dropObjects()
3345 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3347 // we allow dragging object under root and object from folder
3348 int aLevel = what->level();
3349 bool anObjectInFolder = false;
3351 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3353 _PTR(SObject) aSO = dataObj->object();
3355 _PTR(GenericAttribute) anAttr;
3356 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3357 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3358 _PTR(AttributeLocalID) aLocalID( anAttr );
3359 anObjectInFolder = aLocalID->Value() == 999;
3364 return aLevel == 2 || anObjectInFolder;
3368 \brief Check if the module allows "drop" operation on the given object.
3370 Overloaded from LightApp_Module class.
3372 This function is a part of the general drag-n-drop mechanism.
3373 The goal of this function is to check data object passed as a parameter
3374 and decide if it can be used as a target for the "drop" operation.
3375 The processing of the drop operation itself is done in the dropObjects() function.
3377 \param where target data object
3378 \return \c true if module supports dropping on the \a where data object
3379 \sa isDraggable(), dropObjects()
3381 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3383 // we allow dropping into folder and top-level GEOM object
3384 int aLevel = where->level();
3385 bool isFolder = false;
3387 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3389 _PTR(SObject) aSO = dataObj->object();
3391 _PTR(GenericAttribute) anAttr;
3392 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3393 _PTR(AttributeLocalID) aLocalID( anAttr );
3394 isFolder = aLocalID->Value() == 999;
3399 return aLevel == 1 || isFolder;
3403 \brief Complete drag-n-drop operation.
3405 Overloaded from LightApp_Module class.
3407 This function is a part of the general drag-n-drop mechanism.
3408 Its goal is to handle dropping of the objects being dragged according
3409 to the chosen operation (move). The dropping is performed in the
3410 context of the parent data object \a where and the \a row (position in the
3411 children index) at which the data should be dropped. If \a row is equal to -1,
3412 this means that objects are added to the end of the children list.
3414 \param what objects being dropped
3415 \param where target data object
3416 \param row child index at which the drop operation is performed
3417 \param action drag-n-drop operation (Qt::DropAction) - move
3419 \sa isDraggable(), isDropAccepted()
3421 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3422 const int row, Qt::DropAction action )
3424 if (action != Qt::CopyAction && action != Qt::MoveAction)
3425 return; // unsupported action
3427 // get parent object
3428 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3429 if ( !dataObj ) return; // wrong parent
3430 _PTR(SObject) parentObj = dataObj->object();
3432 // Find the current Study and StudyBuilder
3433 _PTR(Study) aStudy = parentObj->GetStudy();
3434 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3435 // collect all parents of the target node
3436 QStringList parentIDs;
3437 _PTR(SObject) parent = parentObj;
3438 while( !parent->IsNull() ) {
3439 parentIDs << parent->GetID().c_str();
3440 parent = aUseCaseBuilder->GetFather(parent);
3443 // collect objects being dropped
3444 GEOM::object_list_var objects = new GEOM::object_list();
3445 objects->length( what.count() );
3447 for ( int i = 0; i < what.count(); i++ ) {
3448 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3449 if ( !dataObj ) continue; // skip wrong objects
3450 _PTR(SObject) sobj = dataObj->object();
3451 // check that dropped object is not a parent of target object
3452 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3453 return; // it's not allowed to move node into it's child
3455 objects[i] = _CAST(SObject, sobj)->GetSObject();
3458 objects->length( count );
3460 // call engine function
3461 GetGeomGen()->Move( objects.in(), // what
3462 _CAST(SObject, parentObj)->GetSObject(), // where
3465 // update Object browser
3466 getApp()->updateObjectBrowser( false );