1 // Copyright (C) 2007-2014 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>
82 #include <SALOME_ListIteratorOfListIO.hxx>
84 #include <SALOMEDSClient_ClientFactory.hxx>
85 #include <SALOMEDSClient_IParameters.hxx>
87 #include <SALOMEDS_SObject.hxx>
89 #include <Basics_OCCTVersion.hxx>
100 #include <QSignalMapper>
102 #include <AIS_Drawer.hxx>
103 #include <AIS_ListOfInteractive.hxx>
104 #include <AIS_ListIteratorOfListOfInteractive.hxx>
105 #include <Prs3d_Drawer.hxx>
106 #include <Prs3d_IsoAspect.hxx>
107 #include <Aspect_TypeOfMarker.hxx>
108 #include <OSD_SharedLibrary.hxx>
109 #include <NCollection_DataMap.hxx>
111 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
112 #include <TColStd_HArray1OfByte.hxx>
114 #include <Graphic3d_HArray1OfBytes.hxx>
117 #include <utilities.h>
119 #include <vtkCamera.h>
120 #include <vtkRenderer.h>
122 #include <Standard_Failure.hxx>
123 #include <Standard_ErrorHandler.hxx>
125 #include "GEOM_version.h"
126 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
129 Standard_EXPORT CAM_Module* createModule() {
130 return new GeometryGUI();
133 Standard_EXPORT char* getModuleVersion() {
134 return (char*)GEOM_VERSION_STR;
138 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
140 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
142 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
144 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
145 if (CORBA::is_nil(myComponentGeom))
147 return GeometryGUI::myComponentGeom;
150 bool GeometryGUI::InitGeomGen()
153 if ( CORBA::is_nil( myComponentGeom ) ) return false;
157 //=======================================================================
158 // function : ClientSObjectToObject
160 //=======================================================================
161 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
163 _PTR(GenericAttribute) anAttr;
164 CORBA::Object_var anObj;
166 std::string aValue = theSObject->GetIOR();
167 if (strcmp(aValue.c_str(), "") != 0) {
168 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
169 anObj = anORB->string_to_object(aValue.c_str());
172 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
174 return anObj._retn();
177 //=======================================================================
178 // function : ClientStudyToStudy
180 //=======================================================================
181 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
183 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
184 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
185 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
186 int aStudyID = theStudy->StudyId();
187 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
188 return aDSStudy._retn();
191 void GeometryGUI::Modified (bool theIsUpdateActions)
193 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
194 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
195 appStudy->Modified();
196 if ( theIsUpdateActions )
197 app->updateActions();
202 //=======================================================================
203 // function : GeometryGUI::GeometryGUI()
204 // purpose : Constructor
205 //=======================================================================
206 GeometryGUI::GeometryGUI() :
207 SalomeApp_Module( "GEOM" ),
210 if ( CORBA::is_nil( myComponentGeom ) )
212 Engines::EngineComponent_var comp =
213 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
214 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
217 myActiveDialogBox = 0;
219 gp_Pnt origin = gp_Pnt(0., 0., 0.);
220 gp_Dir direction = gp_Dir(0., 0., 1.);
221 myWorkingPlane = gp_Ax3(origin, direction);
224 myLocalSelectionMode = GEOM_ALLOBJECTS;
226 myCreationInfoWdg = 0;
228 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
230 Q_INIT_RESOURCE( GEOMGUI );
233 //=======================================================================
234 // function : GeometryGUI::~GeometryGUI()
235 // purpose : Destructor
236 //=======================================================================
237 GeometryGUI::~GeometryGUI()
239 while (!myOCCSelectors.isEmpty())
240 delete myOCCSelectors.takeFirst();
242 while (!myVTKSelectors.isEmpty())
243 delete myVTKSelectors.takeFirst();
245 qDeleteAll(myGUIMap);
248 //=======================================================================
249 // function : GeometryGUI::getLibrary()
250 // purpose : get or load GUI library by name [ internal ]
251 //=======================================================================
252 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
253 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
255 if ( !myGUIMap.contains( libraryName ) ) {
256 // try to load library if it is not loaded yet
258 QString dirs = getenv( "LD_LIBRARY_PATH" );
261 QString dirs = getenv( "PATH" );
264 if ( !dirs.isEmpty() ) {
265 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
266 QListIterator<QString> it( dirList ); it.toBack();
267 while ( it.hasPrevious() ) {
268 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
270 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
271 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
273 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
274 continue; // continue search further
276 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
277 if ( osdF != NULL ) {
278 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
279 GEOMGUI* libGUI = (*func)( this );
281 myGUIMap[ libraryName ] = libGUI;
282 break; // found and loaded!
289 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
292 //=======================================================================
293 // function : GeometryGUI::getPluginLibrary()
294 // purpose : get or load GUI Plugin library by name [ internal ]
295 //=======================================================================
296 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
297 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
299 if ( !myGUIMap.contains( libraryName ) ) {
300 // try to load library if it is not loaded yet
302 QString dirs = getenv( "LD_LIBRARY_PATH" );
305 QString dirs = getenv( "PATH" );
308 if ( !dirs.isEmpty() ) {
309 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
310 QListIterator<QString> it( dirList ); it.toBack();
311 while ( it.hasPrevious() ) {
312 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
314 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
315 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
317 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
318 continue; // continue search further
320 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
321 if ( osdF != NULL ) {
322 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
323 GEOMPluginGUI* libGUI = (*func)( this );
325 myGUIMap[ libraryName ] = libGUI;
326 break; // found and loaded!
333 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
336 //=======================================================================
337 // function : GeometryGUI::ActiveWorkingPlane()
338 // purpose : Activate Working Plane View
339 //=======================================================================
340 void GeometryGUI::ActiveWorkingPlane()
342 gp_Dir DZ = myWorkingPlane.Direction();
343 gp_Dir DY = myWorkingPlane.YDirection();
345 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
346 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
347 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
350 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
352 Handle(V3d_View) view3d = vw->getViewPort()->getView();
354 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
355 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
359 else if ( ViewVTK ) {
360 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
362 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
364 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
365 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
366 camera->SetFocalPoint(0,0,0);
373 //=======================================================================
374 // function : GeometryGUI::SetActiveDialogBox()
375 // purpose : Set active dialog box
376 //=======================================================================
377 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
379 myActiveDialogBox = (QDialog*)aDlg;
382 //=======================================================================
383 // function : GeometryGUI::EmitSignalDeactivateDialog()
384 // purpose : Emit a signal to deactivate the active dialog Box
385 //=======================================================================
386 void GeometryGUI::EmitSignalDeactivateDialog()
388 emit SignalDeactivateActiveDialog();
391 //=======================================================================
392 // function : GeometryGUI::EmitSignalCloseAllDialogs()
393 // purpose : Emit a signal to close all non modal dialogs box
394 //=======================================================================
395 void GeometryGUI::EmitSignalCloseAllDialogs()
397 emit SignalCloseAllDialogs();
400 //=======================================================================
401 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
402 // purpose : Emit a signal to inform that default real spin box step has
404 //=======================================================================
405 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
407 emit SignalDefaultStepValueChanged(newVal);
410 //=======================================================================
411 // function : GeometryGUI::OnGUIEvent()
412 // purpose : common slot for all menu/toolbar actions
413 //=======================================================================
414 void GeometryGUI::OnGUIEvent()
416 const QObject* obj = sender();
417 if ( !obj || !obj->inherits( "QAction" ) )
419 int id = actionId((QAction*)obj);
424 //=======================================================================
425 // function : GeometryGUI::OnGUIEvent()
426 // purpose : manage all events on GUI [static]
427 //=======================================================================
428 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
430 SUIT_Application* anApp = application();
432 SUIT_Desktop* desk = anApp->desktop();
434 // check type of the active viewframe
435 SUIT_ViewWindow* window = desk->activeWindow();
436 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
437 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
438 bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() );
439 // if current viewframe is not of OCC and not of VTK type - return immediately
440 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
441 QList<int> NotViewerDependentCommands;
442 NotViewerDependentCommands << GEOMOp::OpDelete
444 << GEOMOp::OpShowOnly
445 << GEOMOp::OpShowOnlyChildren
446 << GEOMOp::OpDiscloseChildren
447 << GEOMOp::OpConcealChildren
448 << GEOMOp::OpUnpublishObject
449 << GEOMOp::OpPublishObject
450 << GEOMOp::OpPointMarker
451 << GEOMOp::OpCreateFolder
452 << GEOMOp::OpSortChildren;
453 if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) {
454 // activate OCC viewer
455 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
458 // fix for IPAL9103, point 2
459 if ( CORBA::is_nil( GetGeomGen() ) ) {
460 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
465 // find corresponding GUI library
467 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
468 createOriginAndBaseVectors(); // internal operation
470 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
471 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
472 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
473 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
474 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
475 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
476 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
477 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
478 case GEOMOp::OpDelete: // MENU EDIT - DELETE
479 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
480 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
481 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
482 case GEOMOp::OpColor: // POPUP MENU - COLOR
483 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
484 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
485 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
486 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
487 case GEOMOp::OpIsos: // POPUP MENU - ISOS
488 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
489 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
490 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
491 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
492 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
493 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
494 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
495 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
496 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
497 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
498 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
499 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
500 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
501 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
502 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
503 case GEOMOp::OpClsBringToFront: //
504 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
505 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
506 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
507 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
508 libName = "GEOMToolsGUI";
510 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
511 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
512 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
513 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
514 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
515 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
516 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
517 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
518 case GEOMOp::OpHide: // MENU VIEW - ERASE
519 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
520 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
521 case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE
522 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
523 case GEOMOp::OpShading: // POPUP MENU - SHADING
524 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
525 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
526 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
527 case GEOMOp::OpVertices: // POPUP MENU - VERTICES
528 libName = "DisplayGUI";
530 case GEOMOp::OpPoint: // MENU BASIC - POINT
531 case GEOMOp::OpLine: // MENU BASIC - LINE
532 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
533 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
534 case GEOMOp::OpArc: // MENU BASIC - ARC
535 case GEOMOp::OpVector: // MENU BASIC - VECTOR
536 case GEOMOp::OpPlane: // MENU BASIC - PLANE
537 case GEOMOp::OpCurve: // MENU BASIC - CURVE
538 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
539 libName = "BasicGUI";
541 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
542 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
543 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
544 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
545 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
546 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
547 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
548 libName = "PrimitiveGUI";
550 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
551 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
552 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
553 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
554 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
555 libName = "GenerationGUI";
557 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
558 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
559 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
560 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
562 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
564 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
565 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
566 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
567 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
568 libName = "EntityGUI";
570 case GEOMOp::OpEdge: // MENU BUILD - EDGE
571 case GEOMOp::OpWire: // MENU BUILD - WIRE
572 case GEOMOp::OpFace: // MENU BUILD - FACE
573 case GEOMOp::OpShell: // MENU BUILD - SHELL
574 case GEOMOp::OpSolid: // MENU BUILD - SOLID
575 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
576 libName = "BuildGUI";
578 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
579 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
580 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
581 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
582 libName = "BooleanGUI";
584 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
585 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
586 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
587 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
588 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
589 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
590 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
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 libName = "TransformationGUI";
596 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
597 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
598 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
599 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
600 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
601 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
602 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
603 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
604 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
605 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
606 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
607 #ifdef DEBUG_CURVE_CREATOR
608 // for debug purposes, to be removed
609 case GEOMOp::OpCurveCreator: // MENU OPERATION - CURVE CREATOR
611 libName = "OperationGUI";
613 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
614 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
615 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
616 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
617 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
618 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
619 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
620 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
621 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
622 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
623 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
624 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
625 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
626 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
627 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
628 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
629 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
630 libName = "RepairGUI";
632 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
633 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
634 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
635 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
636 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
637 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
638 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
639 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
640 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
641 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
642 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
643 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
644 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
645 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF 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" );
912 createGeomAction( GEOMOp::OpBox, "BOX" );
913 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
914 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
915 createGeomAction( GEOMOp::OpTorus, "TORUS" );
916 createGeomAction( GEOMOp::OpCone, "CONE" );
917 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
918 createGeomAction( GEOMOp::OpDisk, "DISK" );
920 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
921 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
922 createGeomAction( GEOMOp::OpFilling, "FILLING" );
923 createGeomAction( GEOMOp::OpPipe, "PIPE" );
924 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
926 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
927 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
928 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
929 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
930 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
932 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
933 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
935 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
937 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
938 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
940 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
941 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
942 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
943 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
945 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
947 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
949 createGeomAction( GEOMOp::OpEdge, "EDGE" );
950 createGeomAction( GEOMOp::OpWire, "WIRE" );
951 createGeomAction( GEOMOp::OpFace, "FACE" );
952 createGeomAction( GEOMOp::OpShell, "SHELL" );
953 createGeomAction( GEOMOp::OpSolid, "SOLID" );
954 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
956 createGeomAction( GEOMOp::OpFuse, "FUSE" );
957 createGeomAction( GEOMOp::OpCommon, "COMMON" );
958 createGeomAction( GEOMOp::OpCut, "CUT" );
959 createGeomAction( GEOMOp::OpSection, "SECTION" );
961 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
962 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
963 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
964 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
965 createGeomAction( GEOMOp::OpScale, "SCALE" );
966 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
967 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
968 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
969 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
971 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
972 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
973 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
974 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
975 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
976 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
977 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
978 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
979 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
980 #ifdef DEBUG_CURVE_CREATOR
981 // for debug purposes, to be removed
982 createGeomAction( GEOMOp::OpCurveCreator, "CURVE_CREATOR" );
984 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
985 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
987 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
988 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
989 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
991 createGeomAction( GEOMOp::OpSewing, "SEWING" );
992 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
993 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
994 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
995 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
996 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
997 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
998 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
999 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
1000 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
1001 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
1002 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
1003 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1004 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1005 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1006 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1007 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1009 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1010 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1011 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1012 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1013 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1014 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1015 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1016 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1017 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1019 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1020 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1021 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1022 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1023 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1024 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1026 #ifdef _DEBUG_ // PAL16821
1027 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1030 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1031 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1032 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1033 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1034 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1035 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1036 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1037 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1038 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1039 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1040 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1041 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1042 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1043 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1044 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1045 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1046 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1047 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1048 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1049 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1050 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1051 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1052 createGeomAction( GEOMOp::OpHide, "ERASE" );
1054 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1055 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1056 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1057 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1058 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1059 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1060 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1061 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1062 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1063 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1064 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1065 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1066 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1067 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1068 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1069 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1070 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1071 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1072 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1073 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1074 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1075 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1076 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1077 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1078 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1079 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1080 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1081 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1082 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1083 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1085 // Create actions for increase/decrease transparency shortcuts
1086 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1087 "Geometry:Increase transparency");
1088 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1089 "Geometry:Decrease transparency");
1091 // Create actions for increase/decrease number of isolines
1092 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1093 "Geometry:Increase number of isolines");
1094 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1095 "Geometry:Decrease number of isolines");
1097 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1098 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1099 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1100 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1101 //@@ 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 @@//
1103 // ---- create menus --------------------------
1105 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1107 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1108 createMenu( GEOMOp::OpDelete, editId, -1 );
1110 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1112 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1113 createMenu( GEOMOp::OpPoint, basicId, -1 );
1114 createMenu( GEOMOp::OpLine, basicId, -1 );
1115 createMenu( GEOMOp::OpCircle, basicId, -1 );
1116 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1117 createMenu( GEOMOp::OpArc, basicId, -1 );
1118 createMenu( GEOMOp::OpCurve, basicId, -1 );
1119 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1120 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1121 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1122 createMenu( separator(), basicId, -1 );
1123 createMenu( GEOMOp::OpVector, basicId, -1 );
1124 createMenu( GEOMOp::OpPlane, basicId, -1 );
1125 createMenu( GEOMOp::OpLCS, basicId, -1 );
1126 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1128 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1129 createMenu( GEOMOp::OpBox, primId, -1 );
1130 createMenu( GEOMOp::OpCylinder, primId, -1 );
1131 createMenu( GEOMOp::OpSphere, primId, -1 );
1132 createMenu( GEOMOp::OpTorus, primId, -1 );
1133 createMenu( GEOMOp::OpCone, primId, -1 );
1134 createMenu( GEOMOp::OpRectangle, primId, -1 );
1135 createMenu( GEOMOp::OpDisk, primId, -1 );
1136 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1138 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1139 createMenu( GEOMOp::OpPrism, genId, -1 );
1140 createMenu( GEOMOp::OpRevolution, genId, -1 );
1141 createMenu( GEOMOp::OpFilling, genId, -1 );
1142 createMenu( GEOMOp::OpPipe, genId, -1 );
1143 #if OCC_VERSION_LARGE > 0x06050300
1144 createMenu( GEOMOp::OpPipePath, genId, -1 );
1147 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1148 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1149 //@@ 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 @@//
1151 createMenu( separator(), newEntId, -1 );
1153 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1154 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1155 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1156 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1157 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1158 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1160 createMenu( separator(), newEntId, -1 );
1162 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1163 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1164 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1166 createMenu( separator(), newEntId, -1 );
1168 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1169 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1170 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1171 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1172 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1174 createMenu( separator(), newEntId, -1 );
1176 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1178 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1179 createMenu( GEOMOp::OpEdge, buildId, -1 );
1180 createMenu( GEOMOp::OpWire, buildId, -1 );
1181 createMenu( GEOMOp::OpFace, buildId, -1 );
1182 createMenu( GEOMOp::OpShell, buildId, -1 );
1183 createMenu( GEOMOp::OpSolid, buildId, -1 );
1184 createMenu( GEOMOp::OpCompound, buildId, -1 );
1186 createMenu( separator(), newEntId, -1 );
1188 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1190 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1193 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1195 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1196 createMenu( GEOMOp::OpFuse, boolId, -1 );
1197 createMenu( GEOMOp::OpCommon, boolId, -1 );
1198 createMenu( GEOMOp::OpCut, boolId, -1 );
1199 createMenu( GEOMOp::OpSection, boolId, -1 );
1201 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1202 createMenu( GEOMOp::OpTranslate, transId, -1 );
1203 createMenu( GEOMOp::OpRotate, transId, -1 );
1204 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1205 createMenu( GEOMOp::OpMirror, transId, -1 );
1206 createMenu( GEOMOp::OpScale, transId, -1 );
1207 createMenu( GEOMOp::OpOffset, transId, -1 );
1208 createMenu( GEOMOp::OpProjection, transId, -1 );
1209 createMenu( separator(), transId, -1 );
1210 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1211 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1213 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1214 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1215 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1216 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1218 createMenu( separator(), operId, -1 );
1220 createMenu( GEOMOp::OpPartition, operId, -1 );
1221 createMenu( GEOMOp::OpArchimede, operId, -1 );
1222 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1223 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1225 createMenu( separator(), operId, -1 );
1227 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1228 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1229 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1230 createMenu( GEOMOp::OpChamfer, operId, -1 );
1231 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1232 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1233 #ifdef DEBUG_CURVE_CREATOR
1234 // for debug purposes, to be removed
1235 createMenu( separator(), operId, -1 );
1236 createMenu( GEOMOp::OpCurveCreator, operId, -1 );
1238 //createMenu( GEOMOp::OpClipping, operId, -1 );
1240 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1241 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1242 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1243 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1244 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1245 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1246 createMenu( GEOMOp::OpSewing, repairId, -1 );
1247 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1248 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1249 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1250 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1251 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1252 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1253 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1254 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1255 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1256 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1257 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1259 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1260 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1261 createMenu( GEOMOp::OpProperties, measurId, -1 );
1262 createMenu( separator(), measurId, -1 );
1263 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1264 createMenu( GEOMOp::OpInertia, measurId, -1 );
1265 createMenu( GEOMOp::OpNormale, measurId, -1 );
1266 createMenu( separator(), measurId, -1 );
1267 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1268 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1269 createMenu( separator(), measurId, -1 );
1271 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1272 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1273 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1274 createMenu( GEOMOp::OpAngle, dimId, -1 );
1275 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1277 createMenu( separator(), measurId, -1 );
1278 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1279 createMenu( separator(), measurId, -1 );
1280 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1281 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1282 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1283 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1284 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1286 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1287 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1288 createMenu( separator(), toolsId, -1 );
1289 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1292 createMenu( separator(), toolsId, -1 );
1293 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1294 createMenu( separator(), toolsId, -1 );
1296 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1297 createMenu( separator(), viewId, -1 );
1299 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1300 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1301 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1302 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1303 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1304 createMenu( separator(), dispmodeId, -1 );
1305 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1306 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1308 createMenu( separator(), viewId, -1 );
1309 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1310 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1311 createMenu( separator(), viewId, -1 );
1312 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1313 createMenu( separator(), viewId, -1 );
1317 because of these items are accessible through object browser and viewers
1318 we have removed they from main menu
1320 createMenu( GEOMOp::OpShow, viewId, -1 );
1321 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1322 createMenu( GEOMOp::OpHide, viewId, -1 );
1325 // ---- create toolbars --------------------------
1327 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1328 createTool( GEOMOp::OpPoint, basicTbId );
1329 createTool( GEOMOp::OpLine, basicTbId );
1330 createTool( GEOMOp::OpCircle, basicTbId );
1331 createTool( GEOMOp::OpEllipse, basicTbId );
1332 createTool( GEOMOp::OpArc, basicTbId );
1333 createTool( GEOMOp::OpCurve, basicTbId );
1334 createTool( GEOMOp::OpVector, basicTbId );
1335 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1336 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1337 createTool( GEOMOp::OpIsoline, basicTbId );
1338 createTool( GEOMOp::OpPlane, basicTbId );
1339 createTool( GEOMOp::OpLCS, basicTbId );
1340 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1342 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1343 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1344 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1346 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1347 createTool( GEOMOp::OpBox, primTbId );
1348 createTool( GEOMOp::OpCylinder, primTbId );
1349 createTool( GEOMOp::OpSphere, primTbId );
1350 createTool( GEOMOp::OpTorus, primTbId );
1351 createTool( GEOMOp::OpCone, primTbId );
1352 createTool( GEOMOp::OpRectangle, primTbId );
1353 createTool( GEOMOp::OpDisk, primTbId );
1354 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1356 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1357 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1358 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1360 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1361 createTool( GEOMOp::OpFuse, boolTbId );
1362 createTool( GEOMOp::OpCommon, boolTbId );
1363 createTool( GEOMOp::OpCut, boolTbId );
1364 createTool( GEOMOp::OpSection, boolTbId );
1366 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1367 createTool( GEOMOp::OpPrism, genTbId );
1368 createTool( GEOMOp::OpRevolution, genTbId );
1369 createTool( GEOMOp::OpFilling, genTbId );
1370 createTool( GEOMOp::OpPipe, genTbId );
1371 #if OCC_VERSION_LARGE > 0x06050300
1372 createTool( GEOMOp::OpPipePath, genTbId );
1375 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1376 createTool( GEOMOp::OpTranslate, transTbId );
1377 createTool( GEOMOp::OpRotate, transTbId );
1378 createTool( GEOMOp::OpChangeLoc, transTbId );
1379 createTool( GEOMOp::OpMirror, transTbId );
1380 createTool( GEOMOp::OpScale, transTbId );
1381 createTool( GEOMOp::OpOffset, transTbId );
1382 createTool( GEOMOp::OpProjection, transTbId );
1383 createTool( separator(), transTbId );
1384 createTool( GEOMOp::OpMultiTranslate, transTbId );
1385 createTool( GEOMOp::OpMultiRotate, transTbId );
1387 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1388 createTool( GEOMOp::OpExplode, operTbId );
1389 createTool( GEOMOp::OpPartition, operTbId );
1390 createTool( GEOMOp::OpArchimede, operTbId );
1391 createTool( GEOMOp::OpShapesOnShape, operTbId );
1392 createTool( GEOMOp::OpSharedShapes, operTbId );
1394 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1395 createTool( GEOMOp::OpFillet1d, featTbId );
1396 createTool( GEOMOp::OpFillet2d, featTbId );
1397 createTool( GEOMOp::OpFillet3d, featTbId );
1398 createTool( GEOMOp::OpChamfer, featTbId );
1399 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1400 createTool( GEOMOp::OpExtrudedCut, featTbId );
1401 #ifdef DEBUG_CURVE_CREATOR
1402 // for debug purposes, to be removed
1403 createTool( GEOMOp::OpCurveCreator, featTbId );
1406 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1407 createTool( GEOMOp::OpEdge, buildTbId );
1408 createTool( GEOMOp::OpWire, buildTbId );
1409 createTool( GEOMOp::OpFace, buildTbId );
1410 createTool( GEOMOp::OpShell, buildTbId );
1411 createTool( GEOMOp::OpSolid, buildTbId );
1412 createTool( GEOMOp::OpCompound, buildTbId );
1414 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1415 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1416 createTool( GEOMOp::OpProperties, measureTbId );
1417 createTool( GEOMOp::OpCenterMass, measureTbId );
1418 createTool( GEOMOp::OpInertia, measureTbId );
1419 createTool( GEOMOp::OpNormale, measureTbId );
1420 createTool( separator(), measureTbId );
1421 createTool( GEOMOp::OpBoundingBox, measureTbId );
1422 createTool( GEOMOp::OpMinDistance, measureTbId );
1423 createTool( GEOMOp::OpAngle, measureTbId );
1424 createTool( GEOMOp::OpTolerance , measureTbId );
1425 createTool( separator(), measureTbId );
1426 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1427 createTool( GEOMOp::OpFreeFaces, measureTbId );
1428 createTool( separator(), measureTbId );
1429 createTool( GEOMOp::OpWhatIs, measureTbId );
1430 createTool( GEOMOp::OpCheckShape, measureTbId );
1431 createTool( GEOMOp::OpCheckCompound, measureTbId );
1432 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1433 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1435 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1436 createTool( GEOMOp::OpPictureImport, picturesTbId );
1438 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1441 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1442 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1443 //@@ 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 @@//
1445 // ---- create popup menus --------------------------
1447 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1448 QString clientOCC = "(client='OCCViewer')";
1449 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1450 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1452 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1453 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1454 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1455 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1457 QString autoColorPrefix =
1458 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1460 QtxPopupMgr* mgr = popupMgr();
1462 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1463 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1464 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1465 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1466 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1467 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1468 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1469 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1471 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1472 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1473 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1474 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1475 mgr->insert( separator(), -1, -1 ); // -----------
1477 #if OCC_VERSION_LARGE > 0x06050200
1478 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1479 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1480 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1481 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1482 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1483 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1484 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1486 mgr->insert( separator(), -1, -1 ); // -----------
1487 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1488 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1489 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1490 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1491 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1492 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1493 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1494 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1495 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1496 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1497 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1498 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1499 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1500 mgr->insert( separator(), dispmodeId, -1 );
1501 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1502 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1503 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1504 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1505 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1506 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1507 mgr->insert( separator(), -1, -1 ); // -----------
1509 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1510 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1511 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1512 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1513 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1514 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1515 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1516 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1517 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1518 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule );
1520 // material properties
1521 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1522 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1525 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1526 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1528 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1529 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1530 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1532 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1533 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1535 mgr->insert( separator(), -1, -1 ); // -----------
1536 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1537 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1538 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1539 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1540 mgr->insert( separator(), -1, -1 ); // -----------
1542 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1543 onlyComponent = "((type='Component') and selcount=1)",
1544 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1545 types = "'Shape' 'Group' 'FieldStep'";
1547 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1548 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1550 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1551 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1553 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1554 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1556 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1558 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1559 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1560 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1561 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1562 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1563 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1564 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1565 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1566 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1567 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1568 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1569 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1570 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1571 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1572 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1573 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1574 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1575 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1576 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1577 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1578 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1579 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1580 mgr->insert( separator(), selectonlyId, -1);
1581 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1582 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1583 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1584 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1585 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1586 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1587 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1589 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1591 mgr->insert( separator(), -1, -1 ); // -----------
1592 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1593 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1594 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1595 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1597 mgr->insert( separator(), -1, -1 ); // -----------
1598 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1599 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1601 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1602 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1604 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1605 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1607 mgr->insert( separator(), -1, -1 ); // -----------
1608 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1609 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1611 mgr->insert( separator(), -1, -1 ); // -----------
1612 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1613 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1615 mgr->insert( separator(), -1, -1 ); // -----------
1616 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1617 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1619 mgr->insert( separator(), -1, -1 ); // -----------
1620 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1621 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1623 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1625 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1627 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1628 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1629 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1632 // create plugin actions and menus
1636 //=======================================================================
1637 // function : GeometryGUI::addPluginActions()
1639 //=======================================================================
1640 void GeometryGUI::addPluginActions()
1643 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1644 if (!resMgr) return;
1646 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1647 if (!appStudy) return;
1649 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1651 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1653 int id = GEOMOp::OpLastOperationID; // TODO?
1656 GEOMUtils::PluginInfo::const_iterator it;
1657 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1658 // bind action lib and label to its ID for activateOperation() method proper work
1659 GEOMUtils::PluginData pdata = (*it);
1660 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1661 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1662 std::list<GEOMUtils::ActionData>::const_iterator ait;
1663 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1664 GEOMUtils::ActionData adata = (*ait);
1667 if ( !adata.icon.empty() )
1668 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1670 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1671 QString actionName = smenus.last();
1672 actionName = actionName.toUpper().prepend( "MEN_" );
1673 smenus.removeLast();
1675 // path to action in toolbar
1676 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1677 QString actionTool = stools.last();
1678 actionTool = actionTool.toUpper().prepend( "TOP_" );
1679 stools.removeLast();
1681 QString actionStat = adata.statusText.c_str();
1682 actionStat = actionStat.toUpper().prepend( "STB_" );
1684 createAction( id, // ~ adata.label
1685 tr( actionTool.toLatin1().constData() ),
1687 tr( actionName.toLatin1().constData() ),
1688 tr( actionStat.toLatin1().constData() ),
1689 QKeySequence( tr( adata.accel.c_str() ) ),
1690 application()->desktop(),
1692 this, SLOT( OnGUIEvent() ),
1693 QString() /*shortcutAction*/ );
1696 foreach ( QString subMenu, smenus ) {
1697 QStringList subMenuList = subMenu.split( ":" );
1698 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1699 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1700 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1702 createMenu( id, menuId, -1 );
1704 if ( !stools.isEmpty() ) {
1705 QString subTool = stools[0];
1706 subTool = subTool.toUpper().prepend( "TOOL_" );
1707 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1708 createTool(id, toolId);
1711 // add action id to map
1712 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1713 myPluginActions[id] = anAction;
1720 //=======================================================================
1721 // function : GeometryGUI::activateModule()
1722 // purpose : Called when GEOM module is activated
1723 //=======================================================================
1724 bool GeometryGUI::activateModule( SUIT_Study* study )
1726 if ( CORBA::is_nil( myComponentGeom ) )
1729 bool res = SalomeApp_Module::activateModule( study );
1733 setMenuShown( true );
1734 setToolShown( true );
1736 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1737 PyGILState_STATE gstate = PyGILState_Ensure();
1738 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1739 if ( !pluginsmanager ) {
1743 PyObjWrapper result =
1744 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1745 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1746 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1750 PyGILState_Release(gstate);
1751 // end of GEOM plugins loading
1753 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1754 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1756 // Reset actions accelerator keys
1757 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1759 GUIMap::Iterator it;
1760 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1761 it.value()->activate( application()->desktop() );
1763 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1765 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1766 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1767 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1769 if ( !myCreationInfoWdg )
1770 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1771 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1772 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1775 SALOME_ListIO selected;
1776 sm->selectedObjects( selected );
1777 sm->clearSelected();
1779 SUIT_ViewManager* vm;
1780 ViewManagerList OCCViewManagers, VTKViewManagers;
1782 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1783 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1784 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1785 onViewManagerAdded(vm);
1787 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1788 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1789 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1790 onViewManagerAdded(vm);
1792 sm->setSelectedObjects( selected, true ); //NPAL 19674
1794 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1796 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1798 // 0020836 (Basic vectors and origin)
1799 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1800 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1801 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1803 _PTR(Study) studyDS = appStudy->studyDS();
1805 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1806 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1807 createOriginAndBaseVectors();
1815 //=======================================================================
1816 // function : GeometryGUI::deactivateModule()
1817 // purpose : Called when GEOM module is deactivated
1818 //=======================================================================
1819 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1821 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1823 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1825 setMenuShown( false );
1826 setToolShown( false );
1828 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1829 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1831 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1833 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1834 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1835 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1836 myCreationInfoWdg = 0;
1838 EmitSignalCloseAllDialogs();
1840 GUIMap::Iterator it;
1841 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1842 it.value()->deactivate();
1844 // Unset actions accelerator keys
1845 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1847 qDeleteAll(myOCCSelectors);
1848 myOCCSelectors.clear();
1849 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1851 qDeleteAll(myVTKSelectors);
1852 myVTKSelectors.clear();
1853 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1855 return SalomeApp_Module::deactivateModule( study );
1858 //=======================================================================
1859 // function : onWindowActivated()
1860 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1861 //=======================================================================
1862 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1867 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1868 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1870 // disable non-OCC viewframe menu commands
1871 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1872 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1873 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1874 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1875 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1876 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1877 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1879 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1880 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1881 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1882 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1884 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1887 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1889 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1890 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
1891 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1892 if ( myCreationInfoWdg )
1893 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1896 void GeometryGUI::viewManagers( QStringList& lst ) const
1898 lst.append( OCCViewer_Viewer::Type() );
1901 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1903 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1905 qDebug( "connect" );
1906 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1907 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1908 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1909 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1910 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1911 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1912 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1913 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1915 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1916 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1918 // disable OCC selectors
1919 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1920 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1921 while ( itOCCSel.hasNext() )
1922 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1923 sr->setEnabled(true);
1925 else if ( vm->getType() == SVTK_Viewer::Type() )
1927 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1928 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1930 // disable VTK selectors
1931 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1932 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1933 while ( itVTKSel.hasNext() )
1934 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1935 sr->setEnabled(true);
1939 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1941 SUIT_ViewModel* viewer = vm->getViewModel();
1942 if ( vm->getType() == OCCViewer_Viewer::Type() )
1944 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1945 while ( itOCCSel.hasNext() )
1946 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1947 if ( sr->viewer() == viewer )
1949 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1953 if ( vm->getType() == SVTK_Viewer::Type() )
1955 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1956 while ( itVTKSel.hasNext() )
1957 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1958 if ( sr->viewer() == viewer )
1960 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1966 //================================================================================
1968 * \brief Slot called when selection changed. Shows creation info of a selected object
1970 //================================================================================
1972 void GeometryGUI::updateCreationInfo()
1974 if ( myCreationInfoWdg )
1975 myCreationInfoWdg->clear();
1977 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
1978 // if ( !myCreationInfoWdg->isVisible() )
1981 // look for a sole selected GEOM_Object
1982 GEOM::GEOM_BaseObject_var geomObj;
1984 SALOME_ListIO selected;
1985 getApp()->selectionMgr()->selectedObjects( selected );
1987 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
1988 SALOME_ListIteratorOfListIO selIt( selected );
1989 for ( ; selIt.More(); selIt.Next() )
1991 Handle(SALOME_InteractiveObject) io = selIt.Value();
1992 if ( !io->hasEntry() ) continue;
1993 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
1994 if ( !sobj ) continue;
1995 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
1996 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
1997 if ( !gobj->_is_nil() )
1999 if ( !geomObj->_is_nil() )
2000 return; // several GEOM objects selected
2004 if ( geomObj->_is_nil() ) return;
2006 // pass creation info of geomObj to myCreationInfoWdg
2008 if ( myCreationInfoWdg ) {
2010 QString operationName;
2011 myCreationInfoWdg->setOperation( icon, operationName );
2015 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2017 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2018 QString name = info->operationName.in();
2019 if ( !name.isEmpty() ) {
2021 QString plugin_name;
2022 for ( size_t i = 0; i < info->params.length(); ++i ) {
2023 myCreationInfoWdg->addParam( info->params[i].name.in(),
2024 info->params[i].value.in() );
2025 QString value = info->params[i].name.in();
2026 if( value == PLUGIN_NAME ) {
2027 plugin_name = info->params[i].value.in();
2030 QString prefix = plugin_name.isEmpty() ? "GEOM" : plugin_name;
2031 icon = resMgr->loadPixmap( prefix, tr( ("ICO_"+name).toLatin1().constData() ), false );
2032 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2033 if ( operationName.startsWith( "MEN_" ))
2034 operationName = name; // no translation
2035 myCreationInfoWdg->setOperation( icon, operationName );
2044 void GeometryGUI::onAutoBringToFront()
2046 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front" );
2047 if( !isAutoBringToFront )
2050 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2051 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2054 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2055 if (!appStudy) return;
2057 GEOM_Displayer displayer( appStudy );
2059 SALOME_View* window = displayer.GetActiveView();
2060 if ( !window ) return;
2062 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2064 SALOME_ListIO selected;
2065 getApp()->selectionMgr()->selectedObjects( selected );
2066 if (!myTopLevelIOList.IsEmpty())
2068 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2070 Handle( SALOME_InteractiveObject ) io = It.Value();
2071 bool isSelected = false;
2072 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2074 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2075 if( io->isSame( sel_io ) )
2078 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2080 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2081 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2086 myTopLevelIOList.Assign(selected);
2087 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2089 Handle( SALOME_InteractiveObject ) io = It.Value();
2090 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2091 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2094 displayer.UpdateViewer();
2095 GeometryGUI::Modified();
2098 void GeometryGUI::updateFieldColorScale()
2100 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2102 GEOM_Displayer aDisplayer( aStudy );
2103 aDisplayer.UpdateColorScale();
2107 QString GeometryGUI::engineIOR() const
2109 if ( !CORBA::is_nil( GetGeomGen() ) )
2110 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2114 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2115 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2117 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
2119 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2121 theWidth = theHeight = 0;
2123 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2124 Handle(TColStd_HArray1OfByte) aTexture;
2126 Handle(Graphic3d_HArray1OfBytes) aTexture;
2130 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2131 aTexture = aTextureMap[ theId ];
2132 if ( aTexture.IsNull() ) {
2133 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2134 if ( !aInsOp->_is_nil() ) {
2135 CORBA::Long aWidth, aHeight;
2136 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2137 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2139 theHeight = aHeight;
2141 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2142 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2144 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
2147 for (int i = 0; i < aStream->length(); i++)
2148 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2149 aTextureMap[ theId ] = aTexture;
2157 LightApp_Selection* GeometryGUI::createSelection() const
2159 return new GEOMGUI_Selection();
2162 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2164 SalomeApp_Module::contextMenuPopup( client, menu, title );
2166 getApp()->selectionMgr()->selectedObjects( lst );
2168 //Add submenu for predefined materials
2169 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2170 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2171 QtxPopupMgr* mgr = popupMgr();
2172 //get parrent for submenu
2173 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2175 QMenu* oldMenu = act->menu() ;
2180 QMenu* matMenu = new QMenu();
2181 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2183 //Get current material model for the object
2185 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2186 if ( anApp && anApp->activeViewManager() ) {
2187 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2189 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2192 QString curModel = "";
2193 if ( v.canConvert<QString>() ) curModel = v.toString();
2194 // get list of all predefined materials
2195 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2197 foreach ( QString material, materials )
2199 QAction* menAct = matMenu->addAction( material );
2200 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2201 signalMapper->setMapping( menAct, material );
2202 menAct->setCheckable( true );
2203 // Set checked if this material is current
2204 Material_Model aModel;
2205 aModel.fromResources( material );
2206 if ( !found && aModel.toProperties() == curModel ) {
2207 menAct->setChecked( true );
2211 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2212 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2213 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2214 this, SLOT( OnSetMaterial( const QString & ) ) );
2215 act->setMenu( matMenu );
2219 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2220 Handle(SALOME_InteractiveObject) io = lst.First();
2221 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2222 _PTR(Study) study = appStudy->studyDS();
2223 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2225 QString aName = QString( obj->GetName().c_str() );
2226 aName.remove( QRegExp("\\s+$") );
2232 void GeometryGUI::OnSetMaterial(const QString& theName)
2234 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2238 void GeometryGUI::createPreferences()
2240 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2242 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2243 setPreferenceProperty( genGroup, "columns", 2 );
2245 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2246 LightApp_Preferences::Selector,
2247 "Geometry", "display_mode" );
2249 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2250 LightApp_Preferences::Color, "Geometry", "shading_color" );
2252 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2253 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2255 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2256 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2258 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2259 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2261 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2262 LightApp_Preferences::Color, "Geometry", "line_color" );
2264 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2265 LightApp_Preferences::Color, "Geometry", "point_color" );
2267 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2268 LightApp_Preferences::Color, "Geometry", "isos_color" );
2270 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2271 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2273 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2274 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2276 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2277 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2279 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2280 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2282 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2283 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2285 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2286 LightApp_Preferences::Selector,
2287 "Geometry", "material" );
2289 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2290 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2296 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2297 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2299 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2300 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2302 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2303 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2305 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2306 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2308 for (int i = 0; i < nb; i++) {
2309 setPreferenceProperty( wd[i], "min", 1 );
2310 setPreferenceProperty( wd[i], "max", 5 );
2313 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2314 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2316 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2317 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2319 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2320 setPreferenceProperty( aDimGroupId, "columns", 2 );
2322 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2323 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2325 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2326 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2328 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2329 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2331 int aDimFontHeightId = addPreference( tr( "PREF_DIMENSIONS_FONT_HEIGHT" ), aDimGroupId,
2332 LightApp_Preferences::DblSpin, "Geometry", "dimensions_font_height" );
2334 setPreferenceProperty( aDimFontHeightId, "min", 1e-9 );
2335 setPreferenceProperty( aDimFontHeightId, "max", 1e+9 );
2336 setPreferenceProperty( aDimFontHeightId, "precision", 9 );
2338 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2339 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2341 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2342 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2343 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2345 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2346 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2348 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2349 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2351 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2352 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2354 QStringList aListOfLengthUnits;
2355 aListOfLengthUnits << "m";
2356 aListOfLengthUnits << "cm";
2357 aListOfLengthUnits << "mm";
2358 aListOfLengthUnits << "in.";
2359 aListOfLengthUnits << "ft.";
2361 QStringList aListOfAngUnits;
2362 aListOfAngUnits << "rad";
2363 aListOfAngUnits << "deg";
2365 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2366 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2368 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2369 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2371 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2372 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2373 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2375 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2376 setPreferenceProperty( isoGroup, "columns", 2 );
2377 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2378 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2379 setPreferenceProperty( isoU, "min", 0 );
2380 setPreferenceProperty( isoU, "max", 100000 );
2381 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2382 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2383 setPreferenceProperty( isoV, "min", 0 );
2384 setPreferenceProperty( isoV, "max", 100000 );
2386 // Quantities with individual precision settings
2387 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2388 setPreferenceProperty( precGroup, "columns", 2 );
2390 const int nbQuantities = 8;
2391 int prec[nbQuantities], ii = 0;
2392 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2393 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2394 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2395 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2396 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2397 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2398 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2399 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2400 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2401 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2402 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2403 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2404 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2405 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2406 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2407 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2409 // Set property for precision value for spinboxes
2410 for ( ii = 0; ii < nbQuantities; ii++ ){
2411 setPreferenceProperty( prec[ii], "min", -14 );
2412 setPreferenceProperty( prec[ii], "max", 14 );
2413 setPreferenceProperty( prec[ii], "precision", 2 );
2416 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2417 setPreferenceProperty( VertexGroup, "columns", 2 );
2419 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2420 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2422 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2423 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2425 // Set property for default display mode
2426 QStringList aModesList;
2427 aModesList.append( tr("MEN_WIREFRAME") );
2428 aModesList.append( tr("MEN_SHADING") );
2429 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2430 aModesList.append( tr("MEN_TEXTURE") );
2432 QList<QVariant> anIndexesList;
2433 anIndexesList.append(0);
2434 anIndexesList.append(1);
2435 anIndexesList.append(2);
2436 anIndexesList.append(3);
2438 setPreferenceProperty( dispmode, "strings", aModesList );
2439 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2441 // Set property for top level display mode
2442 QStringList aTopModesList;
2443 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2444 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2445 aTopModesList.append( tr("MEN_WIREFRAME") );
2446 aTopModesList.append( tr("MEN_SHADING") );
2447 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2449 QList<QVariant> aTopIndexesList;
2450 aTopIndexesList.append(0);
2451 aTopIndexesList.append(1);
2452 aTopIndexesList.append(2);
2453 aTopIndexesList.append(3);
2454 aTopIndexesList.append(4);
2456 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2457 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2459 // Set property for step value for spinboxes
2460 setPreferenceProperty( step, "min", 1 );
2461 setPreferenceProperty( step, "max", 10000 );
2462 setPreferenceProperty( step, "precision", 3 );
2464 // Set property for trandparency value for spinboxes
2465 setPreferenceProperty( transparency, "min", 0 );
2466 setPreferenceProperty( transparency, "max", 100 );
2468 // Set property for deflection value for spinboxes
2469 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2470 setPreferenceProperty( defl, "max", 1.0 );
2471 setPreferenceProperty( defl, "step", 1.0e-04 );
2472 setPreferenceProperty( defl, "precision", 6 );
2474 // Set property for default material
2475 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2477 // Set property vertex marker type
2478 QList<QVariant> aMarkerTypeIndicesList;
2479 QList<QVariant> aMarkerTypeIconsList;
2481 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2482 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2483 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2484 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2485 aMarkerTypeIndicesList << (i-1);
2486 aMarkerTypeIconsList << pixmap;
2489 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2490 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2492 // Set property for vertex marker scale
2493 QList<QVariant> aMarkerScaleIndicesList;
2494 QStringList aMarkerScaleValuesList;
2496 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2497 aMarkerScaleIndicesList << iii;
2498 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2501 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2502 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2504 // Scalar bar for field step presentation
2505 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2506 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2508 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2509 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2510 setPreferenceProperty( sbXPosition, "min", 0 );
2511 setPreferenceProperty( sbXPosition, "max", 1 );
2512 setPreferenceProperty( sbXPosition, "step", 0.05 );
2514 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2515 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2516 setPreferenceProperty( sbYPosition, "min", 0 );
2517 setPreferenceProperty( sbYPosition, "max", 1 );
2518 setPreferenceProperty( sbYPosition, "step", 0.05 );
2520 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2521 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2522 setPreferenceProperty( sbWidth, "min", 0 );
2523 setPreferenceProperty( sbWidth, "max", 1 );
2524 setPreferenceProperty( sbWidth, "step", 0.05 );
2526 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2527 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2528 setPreferenceProperty( sbHeight, "min", 0 );
2529 setPreferenceProperty( sbHeight, "max", 1 );
2530 setPreferenceProperty( sbHeight, "step", 0.05 );
2532 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2533 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2534 setPreferenceProperty( sbTextHeight, "min", 6 );
2535 setPreferenceProperty( sbTextHeight, "max", 24 );
2536 setPreferenceProperty( sbTextHeight, "step", 1 );
2538 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2539 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2540 setPreferenceProperty( sbNbIntervals, "min", 2 );
2541 setPreferenceProperty( sbNbIntervals, "max", 64 );
2542 setPreferenceProperty( sbNbIntervals, "step", 1 );
2544 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2545 setPreferenceProperty( originGroup, "columns", 2 );
2547 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2548 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2549 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2550 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2552 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2553 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2555 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2556 setPreferenceProperty( operationsGroup, "columns", 2 );
2558 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2559 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2561 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2563 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2565 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2566 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2568 QStringList aHierarchyTypeList;
2569 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2570 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2571 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2573 QList<QVariant> aHierarchyTypeIndexesList;
2574 aHierarchyTypeIndexesList.append(0);
2575 aHierarchyTypeIndexesList.append(1);
2576 aHierarchyTypeIndexesList.append(2);
2578 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2579 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2581 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2582 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2584 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2586 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2587 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2589 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2590 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2591 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2592 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2593 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2594 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2595 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2596 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2598 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2599 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2600 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2601 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2602 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2603 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2610 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2612 if (section == "Geometry") {
2613 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2614 if (param == QString("SettingsGeomStep")) {
2615 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2616 EmitSignalDefaultStepValueChanged(spin_step);
2618 else if (param == QString("toplevel_color")) {
2619 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2620 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2622 else if (param == QString("toplevel_dm")) {
2623 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2625 else if (param == QString("scalar_bar_x_position") ||
2626 param == QString("scalar_bar_y_position") ||
2627 param == QString("scalar_bar_width") ||
2628 param == QString("scalar_bar_height") ||
2629 param == QString("scalar_bar_text_height") ||
2630 param == QString("scalar_bar_nb_intervals")) {
2631 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2633 GEOM_Displayer aDisplayer( aStudy );
2634 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2635 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2638 else if ( param == QString("dimensions_color") ||
2639 param == QString("dimensions_line_width") ||
2640 param == QString("dimensions_font_height") ||
2641 param == QString("dimensions_arrow_length") ||
2642 param == QString("dimensions_show_units") ||
2643 param == QString("dimensions_length_units") ||
2644 param == QString("dimensions_angle_units") )
2646 SalomeApp_Application* anApp = getApp();
2652 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2658 GEOM_Displayer aDisplayer( aStudy );
2660 ViewManagerList aVMs;
2661 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2662 ViewManagerList::Iterator anIt = aVMs.begin();
2663 for ( ; anIt != aVMs.end(); ++anIt )
2665 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2671 SALOME_ListIO aVisible;
2672 aViewer->GetVisible( aVisible );
2673 aDisplayer.Redisplay( aVisible, false, aViewer );
2676 aDisplayer.UpdateViewer();
2678 else if ( param.startsWith( "dependency_tree") )
2679 emit SignalDependencyTreeParamChanged( section, param );
2683 LightApp_Displayer* GeometryGUI::displayer()
2686 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2690 void GeometryGUI::setLocalSelectionMode(const int mode)
2692 myLocalSelectionMode = mode;
2695 int GeometryGUI::getLocalSelectionMode() const
2697 return myLocalSelectionMode;
2700 const char gSeparator = '_'; // character used to separate parameter names
2701 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2704 * \brief Store visual parameters
2706 * This method is called just before the study document is saved.
2707 * Store visual parameters in AttributeParameter attribute(s)
2709 void GeometryGUI::storeVisualParameters (int savePoint)
2711 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2712 if ( !appStudy || !appStudy->studyDS() )
2714 _PTR(Study) studyDS = appStudy->studyDS();
2716 // componentName is used for encoding of entries when storing them in IParameters
2717 std::string componentName = myComponentGeom->ComponentDataType();
2718 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2719 //if (!aSComponent) return;
2722 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2723 componentName.c_str(),
2725 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2727 QSet<QString> anEntriesToStoreShared;
2728 QList<SUIT_ViewManager*> lst;
2729 QList<SUIT_ViewManager*>::Iterator it;
2731 // main cycle to store parameters of displayed objects
2733 getApp()->viewManagers(lst);
2734 for (it = lst.begin(); it != lst.end(); it++) {
2735 SUIT_ViewManager* vman = *it;
2736 QString vType = vman->getType();
2737 int aMgrId = vman->getGlobalId();
2738 // saving VTK actors properties
2739 QVector<SUIT_ViewWindow*> views = vman->getViews();
2740 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2741 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
2742 ObjMap::ConstIterator o_it = anObjects.begin();
2743 for (; o_it != anObjects.end(); o_it++) {
2744 const PropMap aProps = o_it.value();
2746 //Check that object exists in the study
2747 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2748 if ( !obj || !(aProps.count() > 0))
2750 // entry is "encoded" = it does NOT contain component adress, since it is a
2751 // subject to change on next component loading
2753 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2755 _PTR(GenericAttribute) anAttr;
2756 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2759 // remember entry of object to store shared GEOM properties
2760 // (e.g. dimension properties).
2761 if ( vType == OCCViewer_Viewer::Type() )
2763 anEntriesToStoreShared.insert( o_it.key() );
2766 QString param, occParam = vType;
2767 occParam += GEOM::sectionSeparator();
2768 occParam += QString::number(aMgrId);
2769 occParam += GEOM::sectionSeparator();
2771 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2772 param = occParam + GEOM::propertyName( GEOM::Visibility );
2773 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2776 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2777 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2778 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2781 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2782 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2784 val << QString::number(c.redF());
2785 val << QString::number(c.greenF());
2786 val << QString::number(c.blueF());
2787 param = occParam + GEOM::propertyName( GEOM::Color );
2788 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2791 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2792 param = occParam + GEOM::propertyName( GEOM::Texture );
2793 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2796 if (vType == SVTK_Viewer::Type()) {
2797 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2798 param = occParam + GEOM::propertyName( GEOM::Opacity );
2799 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2801 } else if (vType == SOCC_Viewer::Type()) {
2802 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2803 param = occParam + GEOM::propertyName( GEOM::Transparency );
2804 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2807 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2808 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2809 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2813 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2814 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2815 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2818 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2819 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2820 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2823 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
2824 param = occParam + GEOM::propertyName( GEOM::Vertices );
2825 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
2828 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2829 param = occParam + GEOM::propertyName( GEOM::Deflection );
2830 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2833 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2834 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2835 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2836 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2839 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2840 param = occParam + GEOM::propertyName( GEOM::Material );
2841 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2844 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2845 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2846 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2849 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2850 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2851 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2853 } // object iterator
2855 } // for (viewManagers)
2857 // store dimension attributes of objects:
2858 // since the displayed object always persists in property map, we remember the object entries
2859 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
2860 QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
2861 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
2862 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
2864 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
2865 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName);
2867 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
2869 if ( aDimensions.GetNumber() == 0 )
2874 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
2879 * \brief Restore visual parameters
2881 * This method is called after the study document is opened.
2882 * Restore visual parameters from AttributeParameter attribute(s)
2884 void GeometryGUI::restoreVisualParameters (int savePoint)
2886 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2887 if (!appStudy || !appStudy->studyDS())
2889 _PTR(Study) studyDS = appStudy->studyDS();
2891 // componentName is used for encoding of entries when storing them in IParameters
2892 std::string componentName = myComponentGeom->ComponentDataType();
2893 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2894 //if (!aSComponent) return;
2897 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2898 componentName.c_str(),
2900 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2902 std::vector<std::string> entries = ip->getEntries();
2904 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2906 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2907 QString entry (ip->decodeEntry(*entIt).c_str());
2909 // Check that the entry corresponds to a real object in the Study
2910 // as the object may be deleted or modified after the visual state is saved.
2911 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2912 if (!so) continue; //Skip the not existent entry
2914 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2915 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2917 std::vector<std::string>::iterator namesIt = paramNames.begin();
2918 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2920 // actors are stored in a map after displaying of them for
2921 // quicker access in the future: map < viewID to actor >
2922 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2923 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2925 QString viewerTypStr;
2926 QString viewIndexStr;
2928 QVector<PropMap> aListOfMap;
2930 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2932 // visual parameters are stored in strings as follows:
2933 // 1) ViewerType_ViewIndex_ParamName
2934 // 2) ViewerType_ParamName (shared for GEOM module)
2935 // '_' is used as separator and should not be used in viewer type or parameter names.
2936 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2938 bool isShared = lst.size() == 2;
2939 bool isViewer = lst.size() == 3;
2940 if ( !isShared && !isViewer )
2945 // shared visual parameters
2948 QString aParamNameStr( lst[1] );
2949 QString aValuesStr( (*valuesIt).c_str() );
2951 // shared dimension properties are stored as attribute
2952 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
2954 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
2955 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
2961 // per view visual parameters
2962 viewerTypStr = lst[0];
2963 viewIndexStr = lst[1];
2964 QString paramNameStr = lst[2];
2967 viewIndex = viewIndexStr.toUInt(&ok);
2968 if (!ok) // bad conversion of view index to integer
2971 if ((viewIndex + 1) > aListOfMap.count()) {
2972 aListOfMap.resize(viewIndex + 1);
2975 QString val((*valuesIt).c_str());
2976 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
2977 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
2978 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
2979 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
2980 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
2981 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
2982 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
2983 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
2984 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
2985 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
2986 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
2987 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
2988 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
2989 QStringList rgb = val.split(GEOM::subSectionSeparator());
2990 if (rgb.count() == 3) {
2991 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
2992 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
2994 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
2995 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
2996 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
2997 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
2998 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
2999 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
3000 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3001 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3002 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3003 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3004 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3005 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3006 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3007 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3008 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3009 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3011 } // for names/parameters iterator
3013 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3015 for (int index = 0; index < aListOfMap.count(); index++) {
3017 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
3019 //Get Visibility property of the current PropMap
3020 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3021 SUIT_ViewManager* vman = lst.at(index);
3022 SUIT_ViewModel* vmodel = vman->getViewModel();
3023 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
3026 } // for entries iterator
3028 // update all VTK and OCC views
3029 QList<SUIT_ViewManager*> lst;
3030 getApp()->viewManagers(lst);
3031 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3032 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3035 if (vmodel->getType() == SVTK_Viewer::Type()) {
3036 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3037 vtkView->getRenderer()->ResetCameraClippingRange();
3040 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3041 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3042 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3049 void GeometryGUI::onViewAboutToShow()
3051 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3052 QAction* a = action( GEOMOp::OpSwitchVectors );
3053 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3055 a->setEnabled(true);
3056 bool vmode = window->property("VectorsMode").toBool();
3057 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3058 aVerticesAction->setEnabled(true);
3059 vmode = window->property("VerticesMode").toBool();
3060 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3062 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3063 a->setEnabled(false);
3064 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3065 aVerticesAction->setEnabled(false);
3070 \brief Return action by id
3071 \param id identifier of the action
3074 QAction* GeometryGUI::getAction(const int id) {
3079 \brief GEOM module message handler
3081 This method can be re-implemented in the subclasses.
3082 This is a GEOM module message handler.
3084 \param msg the message received.
3086 void GeometryGUI::message(const QString& msg)
3089 QStringList data = msg.split("/");
3090 const int nbStrings = data.count();
3092 if (nbStrings > 0) {
3093 if (data[0] == "modified") {
3095 QString anIOR = nbStrings > 1 ? data[1] : QString();
3097 if ( anIOR.isEmpty() ) {
3101 // Get the geom object.
3102 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3104 // Clear the shape buffer
3105 GeometryGUI::ClearShapeBuffer (anObj);
3111 \brief Clears the shape buffer.
3113 This is a static method. It clears the shape buffer.
3115 \param theObj the object
3117 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3119 if ( CORBA::is_nil( theObj ) )
3122 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3123 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3124 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3126 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3131 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3136 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3140 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3141 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3142 _PTR(GenericAttribute) anAttr;
3143 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3144 _PTR(AttributeIOR) anIOR ( anAttr );
3145 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3146 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3152 \brief Returns the object from IOR.
3154 This is a static method. It returns the object from its IOR.
3156 \param IOR object IOR
3157 \return GEOM object.
3159 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3161 GEOM::GEOM_Object_var geomObj;
3162 if ( !IOR.isEmpty() ) {
3163 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3164 ( IOR.toLatin1().constData() );
3165 if ( !CORBA::is_nil( corbaObj ) )
3166 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3168 return geomObj._retn();
3172 \brief Returns IOR of the object.
3174 This is a static method. It returns the object's IOR.
3176 \param object the GEOM object.
3177 \return object's IOR.
3179 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3182 if ( !CORBA::is_nil( object ) ) {
3183 CORBA::String_var anIOR =
3184 SalomeApp_Application::orb()->object_to_string( object );
3191 \brief Check if this object is can't be renamed in place
3193 This method can be re-implemented in the subclasses.
3194 Return true in case if object isn't reference or component (module root).
3196 \param entry column id
3197 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3199 bool GeometryGUI::renameAllowed( const QString& entry) const {
3201 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3202 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3203 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3205 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3209 Rename object by entry.
3210 \param entry entry of the object
3211 \param name new name of the object
3212 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3214 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3216 bool result = false;
3218 SalomeApp_Application* app =
3219 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3220 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3225 _PTR(Study) aStudy = appStudy->studyDS();
3230 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3232 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3236 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3237 _PTR(GenericAttribute) anAttr;
3239 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3240 _PTR(AttributeName) aName (anAttr);
3242 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3243 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3244 if (!CORBA::is_nil(anObj)) {
3245 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3246 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3254 void GeometryGUI::updateMaterials()
3256 LightApp_Preferences* pref = preferences();
3258 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3259 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3260 if ( !materials.contains( currentMaterial ) )
3261 // user material set as default in the preferences, might be removed
3262 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3264 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3266 setPreferenceProperty( prefItem->id(),
3267 "strings", materials );
3268 prefItem->retrieve();
3274 \brief Check if the module allows "drag" operation of its objects.
3276 Overloaded from LightApp_Module class.
3278 This function is a part of the general drag-n-drop mechanism.
3279 The goal of this function is to check data object passed as a parameter
3280 and decide if it can be dragged or no.
3282 \param what data object being tested for drag operation
3283 \return \c true if module allows dragging of the specified object
3284 \sa isDropAccepted(), dropObjects()
3286 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3288 // we allow dragging object under root and object from folder
3289 int aLevel = what->level();
3290 bool anObjectInFolder = false;
3292 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3294 _PTR(SObject) aSO = dataObj->object();
3296 _PTR(GenericAttribute) anAttr;
3297 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3298 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3299 _PTR(AttributeLocalID) aLocalID( anAttr );
3300 anObjectInFolder = aLocalID->Value() == 999;
3305 return aLevel == 2 || anObjectInFolder;
3309 \brief Check if the module allows "drop" operation on the given object.
3311 Overloaded from LightApp_Module class.
3313 This function is a part of the general drag-n-drop mechanism.
3314 The goal of this function is to check data object passed as a parameter
3315 and decide if it can be used as a target for the "drop" operation.
3316 The processing of the drop operation itself is done in the dropObjects() function.
3318 \param where target data object
3319 \return \c true if module supports dropping on the \a where data object
3320 \sa isDraggable(), dropObjects()
3322 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3324 // we allow dropping into folder and top-level GEOM object
3325 int aLevel = where->level();
3326 bool isFolder = false;
3328 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3330 _PTR(SObject) aSO = dataObj->object();
3332 _PTR(GenericAttribute) anAttr;
3333 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3334 _PTR(AttributeLocalID) aLocalID( anAttr );
3335 isFolder = aLocalID->Value() == 999;
3340 return aLevel == 1 || isFolder;
3344 \brief Complete drag-n-drop operation.
3346 Overloaded from LightApp_Module class.
3348 This function is a part of the general drag-n-drop mechanism.
3349 Its goal is to handle dropping of the objects being dragged according
3350 to the chosen operation (move). The dropping is performed in the
3351 context of the parent data object \a where and the \a row (position in the
3352 children index) at which the data should be dropped. If \a row is equal to -1,
3353 this means that objects are added to the end of the children list.
3355 \param what objects being dropped
3356 \param where target data object
3357 \param row child index at which the drop operation is performed
3358 \param action drag-n-drop operation (Qt::DropAction) - move
3360 \sa isDraggable(), isDropAccepted()
3362 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3363 const int row, Qt::DropAction action )
3365 if (action != Qt::CopyAction && action != Qt::MoveAction)
3366 return; // unsupported action
3368 // get parent object
3369 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3370 if ( !dataObj ) return; // wrong parent
3371 _PTR(SObject) parentObj = dataObj->object();
3373 // Find the current Study and StudyBuilder
3374 _PTR(Study) aStudy = parentObj->GetStudy();
3375 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3376 // collect all parents of the target node
3377 QStringList parentIDs;
3378 _PTR(SObject) parent = parentObj;
3379 while( !parent->IsNull() ) {
3380 parentIDs << parent->GetID().c_str();
3381 parent = aUseCaseBuilder->GetFather(parent);
3384 // collect objects being dropped
3385 GEOM::object_list_var objects = new GEOM::object_list();
3386 objects->length( what.count() );
3388 for ( int i = 0; i < what.count(); i++ ) {
3389 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3390 if ( !dataObj ) continue; // skip wrong objects
3391 _PTR(SObject) sobj = dataObj->object();
3392 // check that dropped object is not a parent of target object
3393 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3394 return; // it's not allowed to move node into it's child
3396 objects[i] = _CAST(SObject, sobj)->GetSObject();
3399 objects->length( count );
3401 // call engine function
3402 GetGeomGen()->Move( objects.in(), // what
3403 _CAST(SObject, parentObj)->GetSObject(), // where
3406 // update Object browser
3407 getApp()->updateObjectBrowser( false );