1 // Copyright (C) 2007-2013 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.
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_XmlHandler.h"
34 #include "GEOMGUI_OCCSelector.h"
35 #include "GEOMGUI_Selection.h"
36 #include "GEOMGUI_CreationInfoWdg.h"
37 #include "GEOM_Constants.h"
38 #include "GEOM_Displayer.h"
39 #include "GEOM_AISShape.hxx"
41 #include "GEOM_Actor.h"
43 #include <Material_ResourceMgr.h>
44 #include <Material_Model.h>
46 #include <SUIT_Desktop.h>
47 #include <SUIT_MessageBox.h>
48 #include <SUIT_ResourceMgr.h>
49 #include <SUIT_Session.h>
50 #include <SUIT_ViewManager.h>
52 #include <PyInterp_Interp.h>
54 #include <OCCViewer_ViewWindow.h>
55 #include <OCCViewer_ViewPort3d.h>
56 #include <OCCViewer_ViewModel.h>
57 #include <OCCViewer_ViewManager.h>
59 #include <SOCC_ViewModel.h>
60 #include <SOCC_ViewWindow.h>
62 #include <SVTK_ViewWindow.h>
63 #include <SVTK_RenderWindowInteractor.h>
64 #include <SVTK_InteractorStyle.h>
65 #include <SVTK_ViewModel.h>
67 #include <SalomeApp_Application.h>
68 #include <SalomeApp_DataObject.h>
69 #include <SalomeApp_Study.h>
70 #include <SalomeApp_Tools.h>
72 #include <LightApp_SelectionMgr.h>
73 #include <LightApp_VTKSelector.h>
74 #include <LightApp_DataObject.h>
75 #include <LightApp_Preferences.h>
77 #include <SALOME_LifeCycleCORBA.hxx>
78 #include <SALOME_ListIO.hxx>
79 #include <SALOME_ListIteratorOfListIO.hxx>
81 #include <SALOMEDSClient_ClientFactory.hxx>
82 #include <SALOMEDSClient_IParameters.hxx>
84 #include <SALOMEDS_SObject.hxx>
86 #include <Basics_OCCTVersion.hxx>
96 #include <QSignalMapper>
98 #include <AIS_Drawer.hxx>
99 #include <AIS_ListOfInteractive.hxx>
100 #include <AIS_ListIteratorOfListOfInteractive.hxx>
101 #include <Prs3d_Drawer.hxx>
102 #include <Prs3d_IsoAspect.hxx>
103 #include <Aspect_TypeOfMarker.hxx>
104 #include <OSD_SharedLibrary.hxx>
105 #include <NCollection_DataMap.hxx>
107 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
108 #include <TColStd_HArray1OfByte.hxx>
110 #include <Graphic3d_HArray1OfBytes.hxx>
113 #include <utilities.h>
115 #include <vtkCamera.h>
116 #include <vtkRenderer.h>
118 #include <Standard_Failure.hxx>
119 #include <Standard_ErrorHandler.hxx>
121 #include "GEOM_version.h"
122 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
125 Standard_EXPORT CAM_Module* createModule() {
126 return new GeometryGUI();
129 Standard_EXPORT char* getModuleVersion() {
130 return (char*)GEOM_VERSION_STR;
134 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
136 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
138 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
140 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
141 if (CORBA::is_nil(myComponentGeom))
143 return GeometryGUI::myComponentGeom;
146 bool GeometryGUI::InitGeomGen()
149 if ( CORBA::is_nil( myComponentGeom ) ) return false;
153 //=======================================================================
154 // function : ClientSObjectToObject
156 //=======================================================================
157 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
159 _PTR(GenericAttribute) anAttr;
160 CORBA::Object_var anObj;
162 std::string aValue = theSObject->GetIOR();
163 if (strcmp(aValue.c_str(), "") != 0) {
164 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
165 anObj = anORB->string_to_object(aValue.c_str());
168 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
170 return anObj._retn();
173 //=======================================================================
174 // function : ClientStudyToStudy
176 //=======================================================================
177 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
179 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
180 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
181 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
182 int aStudyID = theStudy->StudyId();
183 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
184 return aDSStudy._retn();
187 void GeometryGUI::Modified (bool theIsUpdateActions)
189 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
190 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
191 appStudy->Modified();
192 if ( theIsUpdateActions )
193 app->updateActions();
198 //=======================================================================
199 // function : GeometryGUI::GeometryGUI()
200 // purpose : Constructor
201 //=======================================================================
202 GeometryGUI::GeometryGUI() :
203 SalomeApp_Module( "GEOM" )
205 if ( CORBA::is_nil( myComponentGeom ) )
207 Engines::EngineComponent_var comp =
208 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
209 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
212 myActiveDialogBox = 0;
214 gp_Pnt origin = gp_Pnt(0., 0., 0.);
215 gp_Dir direction = gp_Dir(0., 0., 1.);
216 myWorkingPlane = gp_Ax3(origin, direction);
219 myLocalSelectionMode = GEOM_ALLOBJECTS;
221 myCreationInfoWdg = 0;
223 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
226 //=======================================================================
227 // function : GeometryGUI::~GeometryGUI()
228 // purpose : Destructor
229 //=======================================================================
230 GeometryGUI::~GeometryGUI()
232 while (!myOCCSelectors.isEmpty())
233 delete myOCCSelectors.takeFirst();
235 while (!myVTKSelectors.isEmpty())
236 delete myVTKSelectors.takeFirst();
238 qDeleteAll(myGUIMap);
241 //=======================================================================
242 // function : GeometryGUI::getLibrary()
243 // purpose : get or load GUI library by name [ internal ]
244 //=======================================================================
245 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
246 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
248 if ( !myGUIMap.contains( libraryName ) ) {
249 // try to load library if it is not loaded yet
251 QString dirs = getenv( "LD_LIBRARY_PATH" );
254 QString dirs = getenv( "PATH" );
257 if ( !dirs.isEmpty() ) {
258 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
259 QListIterator<QString> it( dirList ); it.toBack();
260 while ( it.hasPrevious() ) {
261 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
263 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
264 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
266 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
267 continue; // continue search further
269 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
270 if ( osdF != NULL ) {
271 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
272 GEOMGUI* libGUI = (*func)( this );
274 myGUIMap[ libraryName ] = libGUI;
275 break; // found and loaded!
282 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
285 //=======================================================================
286 // function : GeometryGUI::getPluginLibrary()
287 // purpose : get or load GUI Plugin library by name [ internal ]
288 //=======================================================================
289 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
290 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
292 if ( !myGUIMap.contains( libraryName ) ) {
293 // try to load library if it is not loaded yet
295 QString dirs = getenv( "LD_LIBRARY_PATH" );
298 QString dirs = getenv( "PATH" );
301 if ( !dirs.isEmpty() ) {
302 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
303 QListIterator<QString> it( dirList ); it.toBack();
304 while ( it.hasPrevious() ) {
305 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
307 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
308 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
310 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
311 continue; // continue search further
313 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
314 if ( osdF != NULL ) {
315 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
316 GEOMPluginGUI* libGUI = (*func)( this );
318 myGUIMap[ libraryName ] = libGUI;
319 break; // found and loaded!
326 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
329 //=======================================================================
330 // function : GeometryGUI::ActiveWorkingPlane()
331 // purpose : Activate Working Plane View
332 //=======================================================================
333 void GeometryGUI::ActiveWorkingPlane()
335 gp_Dir DZ = myWorkingPlane.Direction();
336 gp_Dir DY = myWorkingPlane.YDirection();
338 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
339 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
340 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
343 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
345 Handle(V3d_View) view3d = vw->getViewPort()->getView();
347 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
348 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
352 else if ( ViewVTK ) {
353 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
355 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
357 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
358 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
359 camera->SetFocalPoint(0,0,0);
366 //=======================================================================
367 // function : GeometryGUI::SetActiveDialogBox()
368 // purpose : Set active dialog box
369 //=======================================================================
370 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
372 myActiveDialogBox = (QDialog*)aDlg;
375 //=======================================================================
376 // function : GeometryGUI::EmitSignalDeactivateDialog()
377 // purpose : Emit a signal to deactivate the active dialog Box
378 //=======================================================================
379 void GeometryGUI::EmitSignalDeactivateDialog()
381 emit SignalDeactivateActiveDialog();
384 //=======================================================================
385 // function : GeometryGUI::EmitSignalCloseAllDialogs()
386 // purpose : Emit a signal to close all non modal dialogs box
387 //=======================================================================
388 void GeometryGUI::EmitSignalCloseAllDialogs()
390 emit SignalCloseAllDialogs();
393 //=======================================================================
394 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
395 // purpose : Emit a signal to inform that default real spin box step has
397 //=======================================================================
398 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
400 emit SignalDefaultStepValueChanged(newVal);
403 //=======================================================================
404 // function : GeometryGUI::OnGUIEvent()
405 // purpose : common slot for all menu/toolbar actions
406 //=======================================================================
407 void GeometryGUI::OnGUIEvent()
409 const QObject* obj = sender();
410 if ( !obj || !obj->inherits( "QAction" ) )
412 int id = actionId((QAction*)obj);
417 //=======================================================================
418 // function : GeometryGUI::OnGUIEvent()
419 // purpose : manage all events on GUI [static]
420 //=======================================================================
421 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
423 SUIT_Application* anApp = application();
425 SUIT_Desktop* desk = anApp->desktop();
427 // check type of the active viewframe
428 SUIT_ViewWindow* window = desk->activeWindow();
429 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
430 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
431 // if current viewframe is not of OCC and not of VTK type - return immediately
432 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
433 QList<int> NotViewerDependentCommands;
434 NotViewerDependentCommands << GEOMOp::OpDelete
436 << GEOMOp::OpShowOnly
437 << GEOMOp::OpShowOnlyChildren
438 << GEOMOp::OpDiscloseChildren
439 << GEOMOp::OpConcealChildren
440 << GEOMOp::OpUnpublishObject
441 << GEOMOp::OpPublishObject
442 << GEOMOp::OpPointMarker
443 << GEOMOp::OpCreateFolder
444 << GEOMOp::OpSortChildren;
445 if ( !ViewOCC && !ViewVTK && !NotViewerDependentCommands.contains( id ) ) {
446 // activate OCC viewer
447 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
450 // fix for IPAL9103, point 2
451 if ( CORBA::is_nil( GetGeomGen() ) ) {
452 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
457 // find corresponding GUI library
459 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
460 createOriginAndBaseVectors(); // internal operation
462 case GEOMOp::OpImport: // MENU FILE - IMPORT
463 case GEOMOp::OpExport: // MENU FILE - EXPORT
464 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
465 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
466 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
467 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
468 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
469 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
470 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
471 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
472 case GEOMOp::OpDelete: // MENU EDIT - DELETE
473 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
474 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
475 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
476 case GEOMOp::OpColor: // POPUP MENU - COLOR
477 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
478 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
479 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
480 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
481 case GEOMOp::OpIsos: // POPUP MENU - ISOS
482 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
483 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
484 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
485 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
486 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
487 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
488 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
489 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
490 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
491 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
492 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
493 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
494 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
495 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
496 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
497 case GEOMOp::OpClsBringToFront: //
498 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
499 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
500 libName = "GEOMToolsGUI";
502 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
503 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
504 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
505 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
506 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
507 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
508 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
509 case GEOMOp::OpHide: // MENU VIEW - ERASE
510 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
511 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
512 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
513 case GEOMOp::OpShading: // POPUP MENU - SHADING
514 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
515 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
516 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
517 libName = "DisplayGUI";
519 case GEOMOp::OpPoint: // MENU BASIC - POINT
520 case GEOMOp::OpLine: // MENU BASIC - LINE
521 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
522 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
523 case GEOMOp::OpArc: // MENU BASIC - ARC
524 case GEOMOp::OpVector: // MENU BASIC - VECTOR
525 case GEOMOp::OpPlane: // MENU BASIC - PLANE
526 case GEOMOp::OpCurve: // MENU BASIC - CURVE
527 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
528 libName = "BasicGUI";
530 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
531 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
532 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
533 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
534 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
535 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
536 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
537 libName = "PrimitiveGUI";
539 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
540 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
541 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
542 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
543 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
544 libName = "GenerationGUI";
546 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
547 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
548 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
550 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
552 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
553 libName = "EntityGUI";
555 case GEOMOp::OpEdge: // MENU BUILD - EDGE
556 case GEOMOp::OpWire: // MENU BUILD - WIRE
557 case GEOMOp::OpFace: // MENU BUILD - FACE
558 case GEOMOp::OpShell: // MENU BUILD - SHELL
559 case GEOMOp::OpSolid: // MENU BUILD - SOLID
560 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
561 libName = "BuildGUI";
563 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
564 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
565 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
566 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
567 libName = "BooleanGUI";
569 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
570 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
571 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
572 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
573 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
574 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
575 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
576 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
577 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
578 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
579 libName = "TransformationGUI";
581 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
582 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
583 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
584 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
585 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
586 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
587 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
588 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
589 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
590 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
591 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
592 libName = "OperationGUI";
594 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
595 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
596 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
597 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
598 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
599 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
600 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
601 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
602 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
603 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
604 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
605 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
606 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
607 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
608 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
609 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
610 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
611 libName = "RepairGUI";
613 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
614 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
615 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
616 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
617 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
618 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
619 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
620 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
621 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
622 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
623 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
624 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
625 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
626 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
627 libName = "MeasureGUI";
629 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
630 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
631 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
632 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
633 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
634 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
635 libName = "GroupGUI";
637 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
638 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
639 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
640 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
641 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
642 libName = "BlocksGUI";
644 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
645 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
646 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
647 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
648 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
649 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
650 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
651 //libName = "AdvancedGUI";
654 if (myPluginActions.contains(id)) {
655 libName = myPluginActions[id].first;
657 GEOMPluginGUI* library = 0;
658 if ( !libName.isEmpty() ) {
660 libName = QString( "lib" ) + libName + ".so";
662 libName = libName + ".dll";
664 library = getPluginLibrary( libName );
667 // call method of corresponding GUI library
669 //QString action ("%1");
670 //action = action.arg(id);
672 //if( !theParam.isValid() )
673 library->OnGUIEvent( myPluginActions[id].second, desk );
675 // library->OnGUIEvent( id, desk, theParam);
678 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
680 updateCreationInfo();
686 GEOMGUI* library = 0;
687 if ( !libName.isEmpty() ) {
689 libName = QString( "lib" ) + libName + ".so";
691 libName = libName + ".dll";
693 library = getLibrary( libName );
696 // call method of corresponding GUI library
698 if( !theParam.isValid() )
699 library->OnGUIEvent( id, desk );
701 library->OnGUIEvent( id, desk, theParam);
704 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
706 updateCreationInfo();
709 //=================================================================================
710 // function : GeometryGUI::activateOperation()
712 //=================================================================================
713 bool GeometryGUI::activateOperation( int actionId )
715 OnGUIEvent(actionId);
719 //=================================================================================
720 // function : GeometryGUI::activateOperation()
722 //=================================================================================
723 bool GeometryGUI::activateOperation( const QString& actionId )
727 int id = actionId.toInt(&isOk);
734 //=================================================================================
735 // function : GeometryGUI::activateOperation()
737 //=================================================================================
738 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
742 QString pluginLib = plugin;
743 // TODO: if <plugin> is a plugin name, find plugin library name
744 if (myPluginLibs.contains(plugin))
745 pluginLib = myPluginLibs[plugin];
747 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
748 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
749 const PluginAction& anAction = actionsIter.value();
750 if (anAction.first == pluginLib && anAction.second == actionId) {
751 // activate operation
752 OnGUIEvent(actionsIter.key());
760 //=================================================================================
761 // function : GeometryGUI::OnKeyPress()
762 // purpose : Called when any key is pressed by user [static]
763 //=================================================================================
764 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
766 if ( !application() )
768 foreach ( GEOMGUI* lib, myGUIMap )
769 lib->OnKeyPress( e, application()->desktop(), w );
772 //=================================================================================
773 // function : GeometryGUI::OnMouseMove()
774 // purpose : Manages mouse move events [static]
775 //=================================================================================
776 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
778 if ( !application() )
780 foreach ( GEOMGUI* lib, myGUIMap )
781 lib->OnMouseMove( e, application()->desktop(), w );
784 //=================================================================================
785 // function : GeometryGUI::OnMouseRelease()
786 // purpose : Manages mouse release events [static]
787 //=================================================================================
788 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
790 if ( !application() )
792 foreach ( GEOMGUI* lib, myGUIMap )
793 lib->OnMouseRelease( e, application()->desktop(), w );
796 //=================================================================================
797 // function : GeometryGUI::OnMousePress()
798 // purpose : Manage mouse press events [static]
799 //=================================================================================
800 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
802 if ( !application() )
804 foreach ( GEOMGUI* lib, myGUIMap )
805 lib->OnMousePress( e, application()->desktop(), w );
808 //=======================================================================
809 // function : createGeomAction
811 //=======================================================================
812 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
813 const int accel, const bool toggle, const QString& shortcutAction )
815 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
816 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
817 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
819 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
821 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
822 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
824 application()->desktop(),
826 this, SLOT( OnGUIEvent() ),
830 //=======================================================================
831 // function : createOriginAndBaseVectors
833 //=======================================================================
834 void GeometryGUI::createOriginAndBaseVectors()
836 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
838 _PTR(Study) studyDS = appStudy->studyDS();
839 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
840 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
841 if ( !aBasicOperations->_is_nil() ) {
842 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
843 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
844 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
845 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
846 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
847 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
849 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
850 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
851 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
852 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
853 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
855 getApp()->updateObjectBrowser( true );
861 //=======================================================================
862 // function : GeometryGUI::initialize()
863 // purpose : Called when GEOM module is created
864 //=======================================================================
865 void GeometryGUI::initialize( CAM_Application* app )
867 SalomeApp_Module::initialize( app );
869 // ----- create actions --------------
871 createGeomAction( GEOMOp::OpImport, "IMPORT", "", Qt::ControlModifier + Qt::Key_I );
872 createGeomAction( GEOMOp::OpExport, "EXPORT", "", Qt::ControlModifier + Qt::Key_E );
874 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
876 createGeomAction( GEOMOp::OpPoint, "POINT" );
877 createGeomAction( GEOMOp::OpLine, "LINE" );
878 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
879 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
880 createGeomAction( GEOMOp::OpArc, "ARC" );
881 createGeomAction( GEOMOp::OpCurve, "CURVE" );
882 createGeomAction( GEOMOp::OpVector, "VECTOR" );
883 createGeomAction( GEOMOp::OpPlane, "PLANE" );
884 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
885 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
887 createGeomAction( GEOMOp::OpBox, "BOX" );
888 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
889 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
890 createGeomAction( GEOMOp::OpTorus, "TORUS" );
891 createGeomAction( GEOMOp::OpCone, "CONE" );
892 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
893 createGeomAction( GEOMOp::OpDisk, "DISK" );
895 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
896 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
897 createGeomAction( GEOMOp::OpFilling, "FILLING" );
898 createGeomAction( GEOMOp::OpPipe, "PIPE" );
899 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
901 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
902 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
903 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
904 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
905 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
907 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
909 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
910 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
912 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
913 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
914 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
916 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
918 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
920 createGeomAction( GEOMOp::OpEdge, "EDGE" );
921 createGeomAction( GEOMOp::OpWire, "WIRE" );
922 createGeomAction( GEOMOp::OpFace, "FACE" );
923 createGeomAction( GEOMOp::OpShell, "SHELL" );
924 createGeomAction( GEOMOp::OpSolid, "SOLID" );
925 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
927 createGeomAction( GEOMOp::OpFuse, "FUSE" );
928 createGeomAction( GEOMOp::OpCommon, "COMMON" );
929 createGeomAction( GEOMOp::OpCut, "CUT" );
930 createGeomAction( GEOMOp::OpSection, "SECTION" );
932 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
933 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
934 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
935 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
936 createGeomAction( GEOMOp::OpScale, "SCALE" );
937 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
938 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
939 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
940 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
942 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
943 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
944 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
945 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
946 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
947 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
948 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
949 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
950 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
951 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
952 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
954 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
955 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
956 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
958 createGeomAction( GEOMOp::OpSewing, "SEWING" );
959 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
960 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
961 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
962 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
963 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
964 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
965 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
966 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
967 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
968 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
969 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
970 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
971 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
972 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
973 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
974 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
976 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
977 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
978 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
979 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
980 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
981 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
982 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
983 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
985 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
986 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
987 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
988 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
989 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
990 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
992 #ifdef _DEBUG_ // PAL16821
993 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
996 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
997 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
998 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
999 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1000 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1001 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1002 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1003 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1004 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1005 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1006 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1007 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1008 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1009 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1010 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1011 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1012 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1013 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1014 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1015 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1016 createGeomAction( GEOMOp::OpHide, "ERASE" );
1018 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1019 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1020 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1021 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1022 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1023 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1024 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1025 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1026 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1027 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1028 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1029 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1030 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1031 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1032 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1033 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1034 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1035 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1036 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1037 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1038 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1039 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1040 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1041 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1043 // Create actions for increase/decrease transparency shortcuts
1044 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1045 "Geometry:Increase transparency");
1046 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1047 "Geometry:Decrease transparency");
1049 // Create actions for increase/decrease number of isolines
1050 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1051 "Geometry:Increase number of isolines");
1052 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1053 "Geometry:Decrease number of isolines");
1055 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1056 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1057 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1058 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1059 //@@ 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 @@//
1061 // ---- create menus --------------------------
1063 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1064 createMenu( separator(), fileId, 10 );
1065 createMenu( GEOMOp::OpImport, fileId, 10 );
1066 createMenu( GEOMOp::OpExport, fileId, 10 );
1067 createMenu( separator(), fileId, -1 );
1069 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1070 createMenu( GEOMOp::OpDelete, editId, -1 );
1072 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1074 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1075 createMenu( GEOMOp::OpPoint, basicId, -1 );
1076 createMenu( GEOMOp::OpLine, basicId, -1 );
1077 createMenu( GEOMOp::OpCircle, basicId, -1 );
1078 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1079 createMenu( GEOMOp::OpArc, basicId, -1 );
1080 createMenu( GEOMOp::OpCurve, basicId, -1 );
1081 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1082 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1083 createMenu( separator(), basicId, -1 );
1084 createMenu( GEOMOp::OpVector, basicId, -1 );
1085 createMenu( GEOMOp::OpPlane, basicId, -1 );
1086 createMenu( GEOMOp::OpLCS, basicId, -1 );
1087 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1089 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1090 createMenu( GEOMOp::OpBox, primId, -1 );
1091 createMenu( GEOMOp::OpCylinder, primId, -1 );
1092 createMenu( GEOMOp::OpSphere, primId, -1 );
1093 createMenu( GEOMOp::OpTorus, primId, -1 );
1094 createMenu( GEOMOp::OpCone, primId, -1 );
1095 createMenu( GEOMOp::OpRectangle, primId, -1 );
1096 createMenu( GEOMOp::OpDisk, primId, -1 );
1097 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1099 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1100 createMenu( GEOMOp::OpPrism, genId, -1 );
1101 createMenu( GEOMOp::OpRevolution, genId, -1 );
1102 createMenu( GEOMOp::OpFilling, genId, -1 );
1103 createMenu( GEOMOp::OpPipe, genId, -1 );
1104 #if OCC_VERSION_LARGE > 0x06050300
1105 createMenu( GEOMOp::OpPipePath, genId, -1 );
1108 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1109 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1110 //@@ 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 @@//
1112 createMenu( separator(), newEntId, -1 );
1114 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1115 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1116 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1117 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1118 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1119 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1121 createMenu( separator(), newEntId, -1 );
1123 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1124 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1125 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1126 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1127 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1129 createMenu( separator(), newEntId, -1 );
1131 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1133 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1134 createMenu( GEOMOp::OpEdge, buildId, -1 );
1135 createMenu( GEOMOp::OpWire, buildId, -1 );
1136 createMenu( GEOMOp::OpFace, buildId, -1 );
1137 createMenu( GEOMOp::OpShell, buildId, -1 );
1138 createMenu( GEOMOp::OpSolid, buildId, -1 );
1139 createMenu( GEOMOp::OpCompound, buildId, -1 );
1141 createMenu( separator(), newEntId, -1 );
1143 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1145 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1148 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1150 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1151 createMenu( GEOMOp::OpFuse, boolId, -1 );
1152 createMenu( GEOMOp::OpCommon, boolId, -1 );
1153 createMenu( GEOMOp::OpCut, boolId, -1 );
1154 createMenu( GEOMOp::OpSection, boolId, -1 );
1156 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1157 createMenu( GEOMOp::OpTranslate, transId, -1 );
1158 createMenu( GEOMOp::OpRotate, transId, -1 );
1159 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1160 createMenu( GEOMOp::OpMirror, transId, -1 );
1161 createMenu( GEOMOp::OpScale, transId, -1 );
1162 createMenu( GEOMOp::OpOffset, transId, -1 );
1163 createMenu( GEOMOp::OpProjection, transId, -1 );
1164 createMenu( separator(), transId, -1 );
1165 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1166 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1168 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1169 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1170 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1171 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1173 createMenu( separator(), operId, -1 );
1175 createMenu( GEOMOp::OpPartition, operId, -1 );
1176 createMenu( GEOMOp::OpArchimede, operId, -1 );
1177 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1178 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1180 createMenu( separator(), operId, -1 );
1182 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1183 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1184 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1185 createMenu( GEOMOp::OpChamfer, operId, -1 );
1186 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1187 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1188 //createMenu( GEOMOp::OpClipping, operId, -1 );
1190 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1191 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1192 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1193 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1194 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1195 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1196 createMenu( GEOMOp::OpSewing, repairId, -1 );
1197 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1198 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1199 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1200 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1201 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1202 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1203 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1204 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1205 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1206 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1207 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1209 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1210 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1211 createMenu( GEOMOp::OpProperties, measurId, -1 );
1212 createMenu( separator(), measurId, -1 );
1213 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1214 createMenu( GEOMOp::OpInertia, measurId, -1 );
1215 createMenu( GEOMOp::OpNormale, measurId, -1 );
1216 createMenu( separator(), measurId, -1 );
1217 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1218 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1219 createMenu( separator(), measurId, -1 );
1221 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1222 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1223 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1224 createMenu( GEOMOp::OpAngle, dimId, -1 );
1226 createMenu( separator(), measurId, -1 );
1227 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1228 createMenu( separator(), measurId, -1 );
1229 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1230 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1231 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1232 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1233 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1235 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1236 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1237 createMenu( separator(), toolsId, -1 );
1238 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1241 createMenu( separator(), toolsId, -1 );
1242 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1243 createMenu( separator(), toolsId, -1 );
1245 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1246 createMenu( separator(), viewId, -1 );
1248 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1249 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1250 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1251 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1252 createMenu( separator(), dispmodeId, -1 );
1253 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1255 createMenu( separator(), viewId, -1 );
1256 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1257 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1258 createMenu( separator(), viewId, -1 );
1259 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1260 createMenu( separator(), viewId, -1 );
1264 because of these items are accessible through object browser and viewers
1265 we have removed they from main menu
1267 createMenu( GEOMOp::OpShow, viewId, -1 );
1268 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1269 createMenu( GEOMOp::OpHide, viewId, -1 );
1272 // ---- create toolbars --------------------------
1274 int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1275 createTool( GEOMOp::OpPoint, basicTbId );
1276 createTool( GEOMOp::OpLine, basicTbId );
1277 createTool( GEOMOp::OpCircle, basicTbId );
1278 createTool( GEOMOp::OpEllipse, basicTbId );
1279 createTool( GEOMOp::OpArc, basicTbId );
1280 createTool( GEOMOp::OpCurve, basicTbId );
1281 createTool( GEOMOp::OpVector, basicTbId );
1282 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1283 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1284 createTool( GEOMOp::OpPlane, basicTbId );
1285 createTool( GEOMOp::OpLCS, basicTbId );
1286 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1288 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ) );
1289 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1290 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1292 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1293 createTool( GEOMOp::OpBox, primTbId );
1294 createTool( GEOMOp::OpCylinder, primTbId );
1295 createTool( GEOMOp::OpSphere, primTbId );
1296 createTool( GEOMOp::OpTorus, primTbId );
1297 createTool( GEOMOp::OpCone, primTbId );
1298 createTool( GEOMOp::OpRectangle, primTbId );
1299 createTool( GEOMOp::OpDisk, primTbId );
1300 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1302 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ) );
1303 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1304 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1306 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1307 createTool( GEOMOp::OpFuse, boolTbId );
1308 createTool( GEOMOp::OpCommon, boolTbId );
1309 createTool( GEOMOp::OpCut, boolTbId );
1310 createTool( GEOMOp::OpSection, boolTbId );
1312 int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1313 createTool( GEOMOp::OpPrism, genTbId );
1314 createTool( GEOMOp::OpRevolution, genTbId );
1315 createTool( GEOMOp::OpFilling, genTbId );
1316 createTool( GEOMOp::OpPipe, genTbId );
1317 #if OCC_VERSION_LARGE > 0x06050300
1318 createTool( GEOMOp::OpPipePath, genTbId );
1321 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1322 createTool( GEOMOp::OpTranslate, transTbId );
1323 createTool( GEOMOp::OpRotate, transTbId );
1324 createTool( GEOMOp::OpChangeLoc, transTbId );
1325 createTool( GEOMOp::OpMirror, transTbId );
1326 createTool( GEOMOp::OpScale, transTbId );
1327 createTool( GEOMOp::OpOffset, transTbId );
1328 createTool( GEOMOp::OpProjection, transTbId );
1329 createTool( separator(), transTbId );
1330 createTool( GEOMOp::OpMultiTranslate, transTbId );
1331 createTool( GEOMOp::OpMultiRotate, transTbId );
1333 int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1334 createTool( GEOMOp::OpExplode, operTbId );
1335 createTool( GEOMOp::OpPartition, operTbId );
1336 createTool( GEOMOp::OpArchimede, operTbId );
1337 createTool( GEOMOp::OpShapesOnShape, operTbId );
1338 createTool( GEOMOp::OpSharedShapes, operTbId );
1340 int featTbId = createTool( tr( "TOOL_FEATURES" ) );
1341 createTool( GEOMOp::OpFillet1d, featTbId );
1342 createTool( GEOMOp::OpFillet2d, featTbId );
1343 createTool( GEOMOp::OpFillet3d, featTbId );
1344 createTool( GEOMOp::OpChamfer, featTbId );
1345 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1346 createTool( GEOMOp::OpExtrudedCut, featTbId );
1348 int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1349 createTool( GEOMOp::OpEdge, buildTbId );
1350 createTool( GEOMOp::OpWire, buildTbId );
1351 createTool( GEOMOp::OpFace, buildTbId );
1352 createTool( GEOMOp::OpShell, buildTbId );
1353 createTool( GEOMOp::OpSolid, buildTbId );
1354 createTool( GEOMOp::OpCompound, buildTbId );
1356 int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1357 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1358 createTool( GEOMOp::OpProperties, measureTbId );
1359 createTool( GEOMOp::OpCenterMass, measureTbId );
1360 createTool( GEOMOp::OpInertia, measureTbId );
1361 createTool( GEOMOp::OpNormale, measureTbId );
1362 createTool( separator(), measureTbId );
1363 createTool( GEOMOp::OpBoundingBox, measureTbId );
1364 createTool( GEOMOp::OpMinDistance, measureTbId );
1365 createTool( GEOMOp::OpAngle, measureTbId );
1366 createTool( GEOMOp::OpTolerance , measureTbId );
1367 createTool( separator(), measureTbId );
1368 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1369 createTool( GEOMOp::OpFreeFaces, measureTbId );
1370 createTool( separator(), measureTbId );
1371 createTool( GEOMOp::OpWhatIs, measureTbId );
1372 createTool( GEOMOp::OpCheckShape, measureTbId );
1373 createTool( GEOMOp::OpCheckCompound, measureTbId );
1374 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1375 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1377 int picturesTbId = createTool( tr( "TOOL_PICTURES" ) );
1378 createTool( GEOMOp::OpPictureImport, picturesTbId );
1380 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1383 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1384 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1385 //@@ 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 @@//
1387 // ---- create popup menus --------------------------
1389 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1390 QString clientOCC = "(client='OCCViewer')";
1391 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1392 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1394 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1395 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1396 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1397 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1399 QString autoColorPrefix =
1400 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1402 QtxPopupMgr* mgr = popupMgr();
1404 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1405 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder'} and selcount>0"), QtxPopupMgr::VisibleRule );
1406 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1407 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1408 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1409 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1411 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal shild items
1412 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1413 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1414 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1415 mgr->insert( separator(), -1, -1 ); // -----------
1417 #if OCC_VERSION_LARGE > 0x06050200
1418 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1419 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1420 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1421 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1422 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1423 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1424 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1426 mgr->insert( separator(), -1, -1 ); // -----------
1427 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1428 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1429 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1430 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1431 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1432 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1433 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1434 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1435 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1436 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1437 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1438 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1439 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1440 mgr->insert( separator(), dispmodeId, -1 );
1441 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1442 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1443 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1444 mgr->insert( separator(), -1, -1 ); // -----------
1446 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1447 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1448 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1449 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1450 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1451 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1452 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1453 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1454 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1455 //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1456 mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1458 // material properties
1459 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1460 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1463 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1464 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1466 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1467 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1468 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1470 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1471 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1473 mgr->insert( separator(), -1, -1 ); // -----------
1474 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1475 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1476 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1477 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1478 mgr->insert( separator(), -1, -1 ); // -----------
1480 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1481 onlyComponent = "((type='Component') and selcount=1)",
1482 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1483 types = "'Shape' 'Group'";
1485 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1486 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1488 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1489 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1491 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1492 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1494 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1496 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1497 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1498 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1499 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1500 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1501 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1502 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1503 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1504 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1505 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1506 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1507 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1508 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1509 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1510 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1511 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1512 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1513 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1514 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1515 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1516 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1517 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1518 mgr->insert( separator(), selectonlyId, -1);
1519 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1520 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1521 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1522 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1523 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1524 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1525 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1527 mgr->insert( separator(), -1, -1 ); // -----------
1528 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1529 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
1531 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1532 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1534 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1535 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1537 mgr->insert( separator(), -1, -1 ); // -----------
1538 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1539 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1541 mgr->insert( separator(), -1, -1 ); // -----------
1542 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1543 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1545 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1547 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1549 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1550 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1551 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1554 // create plugin actions and menus
1558 //=======================================================================
1559 // function : GeometryGUI::addPluginActions()
1561 //=======================================================================
1562 void GeometryGUI::addPluginActions()
1565 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1566 if (!resMgr) return;
1568 // Find names of a resource XML files ("GEOMActions.xml" and others);
1570 char* cenv = getenv("GEOM_PluginsList");
1572 PluginsXml.sprintf("%s", cenv);
1574 QStringList PluginsXmlList = PluginsXml.split(":", QString::SkipEmptyParts);
1575 if (PluginsXmlList.count() == 0) return;
1577 // get full names of xml files from PluginsXmlList
1578 QStringList xmlFiles;
1579 xmlFiles.append(QDir::home().filePath("CustomGeomPlugins.xml")); // may be inexistent
1580 for (int i = 0; i < PluginsXmlList.count(); i++) {
1581 PluginsXml = PluginsXmlList[ i ];
1583 // Find full path to the resource XML file
1584 QString xmlFile = resMgr->path("resources", "GEOM", PluginsXml + ".xml");
1585 if ( xmlFile.isEmpty() ) // try PLUGIN resources
1586 xmlFile = resMgr->path("resources", PluginsXml, PluginsXml + ".xml");
1587 if ( !xmlFile.isEmpty() )
1588 xmlFiles.append( xmlFile );
1591 // create "Advanced Operations" menu and corresponding toolbar
1592 //int advancedMenuId = createMenu(tr("MEN_ADVANCED"), -1, -1, 10);
1593 //int advancedTbarId = createTool(tr("TOOL_ADVANCED"));
1594 int id = GEOMOp::OpLastOperationID; // TODO?
1597 QString aNoAccessFiles;
1598 for (int i = 0; i < xmlFiles.count(); i++) {
1599 QString xmlFile = xmlFiles[ i ];
1601 QFile file (xmlFile);
1602 if (file.exists() && file.open(QIODevice::ReadOnly)) {
1605 GEOMGUI_XmlHandler* aXmlHandler = new GEOMGUI_XmlHandler();
1606 ASSERT(aXmlHandler);
1608 QXmlInputSource source (&file);
1609 QXmlSimpleReader reader;
1610 reader.setContentHandler(aXmlHandler);
1611 reader.setErrorHandler(aXmlHandler);
1612 bool ok = reader.parse(source);
1616 // bind action lib and label to its ID for activateOperation() method proper work
1617 myPluginLibs[aXmlHandler->myPluginData.myName] = aXmlHandler->myPluginData.myClientLib;
1619 QListIterator<GEOMGUI_ActionData> anActionsIter (aXmlHandler->myPluginData.myListOfActions);
1620 while (anActionsIter.hasNext()) {
1621 GEOMGUI_ActionData anActionData = anActionsIter.next();
1623 //QPixmap icon = resMgr->loadPixmap("GEOM", tr(anActionData.myIcon.toLatin1().constData()));
1624 QPixmap icon = resMgr->loadPixmap(aXmlHandler->myPluginData.myName,
1625 anActionData.myIcon.toLatin1().constData());
1627 // path to action in menu
1628 QStringList smenus = anActionData.myMenu.split( "/" );
1629 QString actionName = smenus.last();
1630 actionName = actionName.toUpper().prepend("MEN_");
1631 smenus.removeLast();
1633 // path to action in toolbar
1634 QStringList stools = anActionData.myTooltip.split( "/" );
1635 QString actionTool = stools.last();
1636 actionTool = actionTool.toUpper().prepend("TOP_");
1637 stools.removeLast();
1639 QString actionStat = anActionData.myStatusBar;
1640 actionStat = actionStat.toUpper().prepend("STB_");
1642 createAction(id, // ~ anActionData.myLabel
1643 tr(actionTool.toLatin1().constData()),
1645 tr(actionName.toLatin1().constData()),
1646 tr(actionStat.toLatin1().constData()),
1648 application()->desktop(),
1650 this, SLOT(OnGUIEvent()),
1651 QString() /*shortcutAction*/);
1654 foreach (QString subMenu, smenus) {
1655 subMenu = subMenu.toUpper().prepend("MEN_");
1656 menuId = createMenu(tr(subMenu.toLatin1().constData()), menuId, -1);
1658 //createMenu(id, pluginMenuId, -1);
1659 createMenu(id, menuId, -1);
1661 QString subTool = stools[0];
1662 subTool = subTool.toUpper().prepend("TOOL_");
1663 int toolId = createTool(tr(subTool.toLatin1().constData()));
1664 //createTool(id, advancedTbarId);
1665 createTool(id, toolId);
1667 // add action id to map
1668 PluginAction anAction (aXmlHandler->myPluginData.myClientLib, anActionData.myLabel);
1669 myPluginActions[id] = anAction;
1675 SUIT_MessageBox::critical(application()->desktop(),
1676 tr("INF_PARSE_ERROR"),
1677 tr(aXmlHandler->errorProtocol().toLatin1().data()));
1681 else if ( i > 0 ) { // 1st is ~/CustomGeomPlugins.xml
1682 if (aNoAccessFiles.isEmpty())
1683 aNoAccessFiles = xmlFile;
1685 aNoAccessFiles += ", " + xmlFile;
1687 } // end loop on xmlFiles
1689 if (!aNoAccessFiles.isEmpty()) {
1690 QString aMess = QObject::tr("PLUGIN_FILE_CANT_OPEN") + " " + aNoAccessFiles + "\n";
1691 aMess += QObject::tr("PLUGIN_FILE_CHECK_VARIABLE");
1692 SUIT_MessageBox::warning(application()->desktop(), tr("GEOM_WRN_WARNING"), aMess);
1696 //=======================================================================
1697 // function : GeometryGUI::activateModule()
1698 // purpose : Called when GEOM module is activated
1699 //=======================================================================
1700 bool GeometryGUI::activateModule( SUIT_Study* study )
1702 if ( CORBA::is_nil( myComponentGeom ) )
1705 bool res = SalomeApp_Module::activateModule( study );
1709 setMenuShown( true );
1710 setToolShown( true );
1712 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1713 PyGILState_STATE gstate = PyGILState_Ensure();
1714 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1715 if ( !pluginsmanager ) {
1719 PyObjWrapper result =
1720 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1721 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1722 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1726 PyGILState_Release(gstate);
1727 // end of GEOM plugins loading
1729 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1730 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1732 // Reset actions accelerator keys
1733 action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1734 action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1735 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1737 GUIMap::Iterator it;
1738 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1739 it.value()->activate( application()->desktop() );
1741 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1743 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1744 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1746 if ( !myCreationInfoWdg )
1747 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1748 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1749 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1751 SUIT_ViewManager* vm;
1752 ViewManagerList OCCViewManagers, VTKViewManagers;
1754 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1755 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1756 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1757 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1759 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1760 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1761 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1762 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1765 SALOME_ListIO selected;
1766 sm->selectedObjects( selected );
1767 sm->clearSelected();
1769 // disable OCC selectors
1770 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1771 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1772 while ( itOCCSel.hasNext() )
1773 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1774 sr->setEnabled(true);
1776 // disable VTK selectors
1777 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1778 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1779 while ( itVTKSel.hasNext() )
1780 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1781 sr->setEnabled(true);
1783 sm->setSelectedObjects( selected, true ); //NPAL 19674
1785 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1787 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1789 // 0020836 (Basic vectors and origin)
1790 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1791 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1792 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1794 _PTR(Study) studyDS = appStudy->studyDS();
1796 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1797 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1798 createOriginAndBaseVectors();
1806 //=======================================================================
1807 // function : GeometryGUI::deactivateModule()
1808 // purpose : Called when GEOM module is deactivated
1809 //=======================================================================
1810 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1812 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1814 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1816 setMenuShown( false );
1817 setToolShown( false );
1819 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1820 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1822 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1824 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1825 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1826 myCreationInfoWdg = 0;
1828 EmitSignalCloseAllDialogs();
1830 GUIMap::Iterator it;
1831 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1832 it.value()->deactivate();
1834 // Unset actions accelerator keys
1835 action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1836 action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1837 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1839 qDeleteAll(myOCCSelectors);
1840 myOCCSelectors.clear();
1841 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1843 qDeleteAll(myVTKSelectors);
1844 myVTKSelectors.clear();
1845 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1847 return SalomeApp_Module::deactivateModule( study );
1850 //=======================================================================
1851 // function : onWindowActivated()
1852 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1853 //=======================================================================
1854 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1859 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1860 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1862 // disable non-OCC viewframe menu commands
1863 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1864 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1865 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1866 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1867 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1868 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1869 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1871 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1872 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1874 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1877 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1879 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1880 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1881 if ( myCreationInfoWdg )
1882 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1885 void GeometryGUI::viewManagers( QStringList& lst ) const
1887 lst.append( OCCViewer_Viewer::Type() );
1890 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1892 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1894 qDebug( "connect" );
1895 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1896 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1897 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1898 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1899 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1900 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1901 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1902 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1904 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1905 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1907 // disable OCC selectors
1908 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1909 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1910 while ( itOCCSel.hasNext() )
1911 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1912 sr->setEnabled(true);
1914 else if ( vm->getType() == SVTK_Viewer::Type() )
1916 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1917 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1919 // disable VTK selectors
1920 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1921 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1922 while ( itVTKSel.hasNext() )
1923 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1924 sr->setEnabled(true);
1928 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1930 SUIT_ViewModel* viewer = vm->getViewModel();
1931 if ( vm->getType() == OCCViewer_Viewer::Type() )
1933 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1934 while ( itOCCSel.hasNext() )
1935 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1936 if ( sr->viewer() == viewer )
1938 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1942 if ( vm->getType() == SVTK_Viewer::Type() )
1944 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1945 while ( itVTKSel.hasNext() )
1946 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1947 if ( sr->viewer() == viewer )
1949 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1955 //================================================================================
1957 * \brief Slot called when selection changed. Shows creation info of a selected object
1959 //================================================================================
1961 void GeometryGUI::updateCreationInfo()
1963 if ( myCreationInfoWdg )
1964 myCreationInfoWdg->clear();
1966 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
1967 // if ( !myCreationInfoWdg->isVisible() )
1970 // look for a sole selected GEOM_Object
1971 GEOM::GEOM_Object_var geomObj;
1973 SALOME_ListIO selected;
1974 getApp()->selectionMgr()->selectedObjects( selected );
1976 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
1977 SALOME_ListIteratorOfListIO selIt( selected );
1978 for ( ; selIt.More(); selIt.Next() )
1980 Handle(SALOME_InteractiveObject) io = selIt.Value();
1981 if ( !io->hasEntry() ) continue;
1982 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
1983 if ( !sobj ) continue;
1984 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
1985 GEOM::GEOM_Object_var gobj = GEOM::GEOM_Object::_narrow( obj );
1986 if ( !gobj->_is_nil() )
1988 if ( !geomObj->_is_nil() )
1989 return; // several GEOM objects selected
1993 if ( geomObj->_is_nil() ) return;
1995 // pass creation info of geomObj to myCreationInfoWdg
1997 if ( myCreationInfoWdg ) {
1999 QString operationName;
2000 myCreationInfoWdg->setOperation( icon, operationName );
2004 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2006 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2007 QString name = info->operationName.in();
2008 if ( !name.isEmpty() ) {
2009 icon = resMgr->loadPixmap( "GEOM", tr( ("ICO_"+name).toLatin1().constData() ), false );
2010 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2011 if ( operationName.startsWith( "MEN_" ))
2012 operationName = name; // no translation
2013 myCreationInfoWdg->setOperation( icon, operationName );
2015 for ( size_t i = 0; i < info->params.length(); ++i )
2016 myCreationInfoWdg->addParam( info->params[i].name.in(),
2017 info->params[i].value.in() );
2026 void GeometryGUI::onAutoBringToFront()
2028 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front" );
2029 if( !isAutoBringToFront )
2032 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2033 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2036 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2037 if (!appStudy) return;
2039 GEOM_Displayer displayer( appStudy );
2041 SALOME_View* window = displayer.GetActiveView();
2042 if ( !window ) return;
2044 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2046 SALOME_ListIO selected;
2047 getApp()->selectionMgr()->selectedObjects( selected );
2048 SALOME_ListIO allObjects;
2049 window->GetVisible( allObjects );
2051 for ( SALOME_ListIteratorOfListIO It( allObjects ); It.More(); It.Next() ) {
2052 Handle( SALOME_InteractiveObject ) io = It.Value();
2053 bool isSelected = false;
2054 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
2055 Handle( SALOME_InteractiveObject ) ioSelected = It.Value();
2056 if( io->isSame( ioSelected ) )
2059 QVariant v = appStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), QVariant() );
2060 bool isTopLevel = v.isValid() ? v.toBool() : false;
2061 if( isSelected && !isTopLevel ) {
2062 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2063 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2065 else if( !isSelected ) {
2066 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2067 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2070 displayer.UpdateViewer();
2071 GeometryGUI::Modified();
2074 QString GeometryGUI::engineIOR() const
2076 if ( !CORBA::is_nil( GetGeomGen() ) )
2077 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2081 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2082 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2084 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
2086 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2088 theWidth = theHeight = 0;
2090 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2091 Handle(TColStd_HArray1OfByte) aTexture;
2093 Handle(Graphic3d_HArray1OfBytes) aTexture;
2097 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2098 aTexture = aTextureMap[ theId ];
2099 if ( aTexture.IsNull() ) {
2100 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2101 if ( !aInsOp->_is_nil() ) {
2102 CORBA::Long aWidth, aHeight;
2103 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2104 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2106 theHeight = aHeight;
2108 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2109 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2111 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
2114 for (int i = 0; i < aStream->length(); i++)
2115 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2116 aTextureMap[ theId ] = aTexture;
2124 LightApp_Selection* GeometryGUI::createSelection() const
2126 return new GEOMGUI_Selection();
2129 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2131 SalomeApp_Module::contextMenuPopup( client, menu, title );
2133 getApp()->selectionMgr()->selectedObjects( lst );
2135 //Add submenu for predefined materials
2136 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2137 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2138 QtxPopupMgr* mgr = popupMgr();
2139 //get parrent for submenu
2140 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2142 QMenu* oldMenu = act->menu() ;
2147 QMenu* matMenu = new QMenu();
2148 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2150 //Get current material model for the object
2152 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2153 if ( anApp && anApp->activeViewManager() ) {
2154 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2156 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2159 QString curModel = "";
2160 if ( v.canConvert<QString>() ) curModel = v.toString();
2161 // get list of all predefined materials
2162 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2164 foreach ( QString material, materials )
2166 QAction* menAct = matMenu->addAction( material );
2167 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2168 signalMapper->setMapping( menAct, material );
2169 menAct->setCheckable( true );
2170 // Set checked if this material is current
2171 Material_Model aModel;
2172 aModel.fromResources( material );
2173 if ( !found && aModel.toProperties() == curModel ) {
2174 menAct->setChecked( true );
2178 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2179 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2180 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2181 this, SLOT( OnSetMaterial( const QString & ) ) );
2182 act->setMenu( matMenu );
2186 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2187 Handle(SALOME_InteractiveObject) io = lst.First();
2188 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2189 _PTR(Study) study = appStudy->studyDS();
2190 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2192 QString aName = QString( obj->GetName().c_str() );
2193 aName.remove( QRegExp("\\s+$") );
2199 void GeometryGUI::OnSetMaterial(const QString& theName)
2201 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2205 void GeometryGUI::createPreferences()
2207 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2209 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2210 setPreferenceProperty( genGroup, "columns", 2 );
2212 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2213 LightApp_Preferences::Selector,
2214 "Geometry", "display_mode" );
2216 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2217 LightApp_Preferences::Color, "Geometry", "shading_color" );
2219 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2220 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2222 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2223 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2225 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2226 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2228 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2229 LightApp_Preferences::Color, "Geometry", "line_color" );
2231 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2232 LightApp_Preferences::Color, "Geometry", "point_color" );
2234 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2235 LightApp_Preferences::Color, "Geometry", "isos_color" );
2237 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2238 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2240 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2241 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2243 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2244 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2246 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2247 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2249 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2250 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2252 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2253 LightApp_Preferences::Selector,
2254 "Geometry", "material" );
2256 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2257 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2263 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2264 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2266 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2267 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2269 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2270 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2272 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2273 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2275 for (int i = 0; i < nb; i++) {
2276 setPreferenceProperty( wd[i], "min", 1 );
2277 setPreferenceProperty( wd[i], "max", 5 );
2280 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2281 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2283 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2284 setPreferenceProperty( isoGroup, "columns", 2 );
2285 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2286 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2287 setPreferenceProperty( isoU, "min", 0 );
2288 setPreferenceProperty( isoU, "max", 100000 );
2289 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2290 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2291 setPreferenceProperty( isoV, "min", 0 );
2292 setPreferenceProperty( isoV, "max", 100000 );
2294 // Quantities with individual precision settings
2295 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2296 setPreferenceProperty( precGroup, "columns", 2 );
2298 const int nbQuantities = 8;
2299 int prec[nbQuantities], ii = 0;
2300 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2301 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2302 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2303 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2304 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2305 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2306 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2307 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2308 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2309 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2310 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2311 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2312 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2313 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2314 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2315 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2317 // Set property for precision value for spinboxes
2318 for ( ii = 0; ii < nbQuantities; ii++ ){
2319 setPreferenceProperty( prec[ii], "min", -14 );
2320 setPreferenceProperty( prec[ii], "max", 14 );
2321 setPreferenceProperty( prec[ii], "precision", 2 );
2324 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2325 setPreferenceProperty( VertexGroup, "columns", 2 );
2327 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2328 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2330 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2331 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2333 // Set property for default display mode
2334 QStringList aModesList;
2335 aModesList.append( tr("MEN_WIREFRAME") );
2336 aModesList.append( tr("MEN_SHADING") );
2337 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2339 QList<QVariant> anIndexesList;
2340 anIndexesList.append(0);
2341 anIndexesList.append(1);
2342 anIndexesList.append(2);
2344 setPreferenceProperty( dispmode, "strings", aModesList );
2345 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2347 // Set property for top level display mode
2348 QStringList aTopModesList;
2349 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2350 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2351 aTopModesList.append( tr("MEN_WIREFRAME") );
2352 aTopModesList.append( tr("MEN_SHADING") );
2353 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2355 QList<QVariant> aTopIndexesList;
2356 aTopIndexesList.append(0);
2357 aTopIndexesList.append(1);
2358 aTopIndexesList.append(2);
2359 aTopIndexesList.append(3);
2360 aTopIndexesList.append(4);
2362 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2363 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2365 // Set property for step value for spinboxes
2366 setPreferenceProperty( step, "min", 1 );
2367 setPreferenceProperty( step, "max", 10000 );
2368 setPreferenceProperty( step, "precision", 3 );
2370 // Set property for deflection value for spinboxes
2371 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2372 setPreferenceProperty( defl, "max", 1.0 );
2373 setPreferenceProperty( defl, "step", 1.0e-04 );
2374 setPreferenceProperty( defl, "precision", 6 );
2376 // Set property for default material
2377 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2379 // Set property vertex marker type
2380 QList<QVariant> aMarkerTypeIndicesList;
2381 QList<QVariant> aMarkerTypeIconsList;
2383 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2384 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2385 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2386 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2387 aMarkerTypeIndicesList << (i-1);
2388 aMarkerTypeIconsList << pixmap;
2391 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2392 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2394 // Set property for vertex marker scale
2395 QList<QVariant> aMarkerScaleIndicesList;
2396 QStringList aMarkerScaleValuesList;
2398 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2399 aMarkerScaleIndicesList << iii;
2400 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2403 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2404 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2406 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2407 setPreferenceProperty( originGroup, "columns", 2 );
2409 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2410 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2411 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2412 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2414 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2415 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2417 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2418 setPreferenceProperty( operationsGroup, "columns", 2 );
2420 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2421 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2424 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2426 if (section == "Geometry") {
2427 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2428 if (param == QString("SettingsGeomStep")) {
2429 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2430 EmitSignalDefaultStepValueChanged(spin_step);
2432 else if (param == QString("toplevel_color")) {
2433 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2434 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2436 else if (param == QString("toplevel_dm")) {
2437 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2442 LightApp_Displayer* GeometryGUI::displayer()
2445 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2449 void GeometryGUI::setLocalSelectionMode(const int mode)
2451 myLocalSelectionMode = mode;
2454 int GeometryGUI::getLocalSelectionMode() const
2456 return myLocalSelectionMode;
2459 const char gSeparator = '_'; // character used to separate parameter names
2460 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2463 * \brief Store visual parameters
2465 * This method is called just before the study document is saved.
2466 * Store visual parameters in AttributeParameter attribute(s)
2468 void GeometryGUI::storeVisualParameters (int savePoint)
2470 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2471 if ( !appStudy || !appStudy->studyDS() )
2473 _PTR(Study) studyDS = appStudy->studyDS();
2475 // componentName is used for encoding of entries when storing them in IParameters
2476 std::string componentName = myComponentGeom->ComponentDataType();
2477 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2478 //if (!aSComponent) return;
2481 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2482 componentName.c_str(),
2484 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2486 QList<SUIT_ViewManager*> lst;
2487 QList<SUIT_ViewManager*>::Iterator it;
2489 // main cycle to store parameters of displayed objects
2491 getApp()->viewManagers(lst);
2492 for (it = lst.begin(); it != lst.end(); it++) {
2493 SUIT_ViewManager* vman = *it;
2494 QString vType = vman->getType();
2495 int aMgrId = vman->getGlobalId();
2496 // saving VTK actors properties
2497 QVector<SUIT_ViewWindow*> views = vman->getViews();
2498 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2499 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
2500 ObjMap::ConstIterator o_it = anObjects.begin();
2501 for (; o_it != anObjects.end(); o_it++) {
2502 const PropMap aProps = o_it.value();
2504 //Check that object exists in the study
2505 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2506 if ( !obj || !(aProps.count() > 0))
2508 // entry is "encoded" = it does NOT contain component adress, since it is a
2509 // subject to change on next component loading
2511 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2513 _PTR(GenericAttribute) anAttr;
2514 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2517 QString param, occParam = vType;
2518 occParam += GEOM::sectionSeparator();
2519 occParam += QString::number(aMgrId);
2520 occParam += GEOM::sectionSeparator();
2522 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2523 param = occParam + GEOM::propertyName( GEOM::Visibility );
2524 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2527 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2528 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2529 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2532 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2533 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2535 val << QString::number(c.redF());
2536 val << QString::number(c.greenF());
2537 val << QString::number(c.blueF());
2538 param = occParam + GEOM::propertyName( GEOM::Color );
2539 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2542 if (vType == SVTK_Viewer::Type()) {
2543 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2544 param = occParam + GEOM::propertyName( GEOM::Opacity );
2545 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2547 } else if (vType == SOCC_Viewer::Type()) {
2548 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2549 param = occParam + GEOM::propertyName( GEOM::Transparency );
2550 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2553 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2554 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2555 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2559 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2560 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2561 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2564 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2565 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2566 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2569 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2570 param = occParam + GEOM::propertyName( GEOM::Deflection );
2571 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2574 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2575 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2576 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2577 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2580 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2581 param = occParam + GEOM::propertyName( GEOM::Material );
2582 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2585 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2586 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2587 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2590 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2591 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2592 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2594 } // object iterator
2596 } // for (viewManagers)
2600 * \brief Restore visual parameters
2602 * This method is called after the study document is opened.
2603 * Restore visual parameters from AttributeParameter attribute(s)
2605 void GeometryGUI::restoreVisualParameters (int savePoint)
2607 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2608 if (!appStudy || !appStudy->studyDS())
2610 _PTR(Study) studyDS = appStudy->studyDS();
2612 // componentName is used for encoding of entries when storing them in IParameters
2613 std::string componentName = myComponentGeom->ComponentDataType();
2614 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2615 //if (!aSComponent) return;
2618 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2619 componentName.c_str(),
2621 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2623 std::vector<std::string> entries = ip->getEntries();
2625 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2627 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2628 QString entry (ip->decodeEntry(*entIt).c_str());
2630 // Check that the entry corresponds to a real object in the Study
2631 // as the object may be deleted or modified after the visual state is saved.
2632 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2633 if (!so) continue; //Skip the not existent entry
2635 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2636 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2638 std::vector<std::string>::iterator namesIt = paramNames.begin();
2639 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2641 // actors are stored in a map after displaying of them for
2642 // quicker access in the future: map < viewID to actor >
2643 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2644 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2646 QString viewerTypStr;
2647 QString viewIndexStr;
2649 QVector<PropMap> aListOfMap;
2651 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2653 // visual parameters are stored in strings as follows: ViewerType_ViewIndex_ParamName.
2654 // '_' is used as separator and should not be used in viewer type or parameter names.
2655 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2656 if (lst.size() != 3)
2659 viewerTypStr = lst[0];
2660 viewIndexStr = lst[1];
2661 QString paramNameStr = lst[2];
2664 viewIndex = viewIndexStr.toUInt(&ok);
2665 if (!ok) // bad conversion of view index to integer
2668 if ((viewIndex + 1) > aListOfMap.count()) {
2669 aListOfMap.resize(viewIndex + 1);
2672 QString val((*valuesIt).c_str());
2673 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
2674 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
2675 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
2676 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
2677 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
2678 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
2679 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
2680 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
2681 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
2682 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
2683 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
2684 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
2685 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
2686 QStringList rgb = val.split(GEOM::subSectionSeparator());
2687 if (rgb.count() == 3) {
2688 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
2689 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
2691 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
2692 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
2693 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
2694 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
2695 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
2696 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
2697 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
2698 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
2699 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
2700 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
2701 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
2702 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
2704 } // for names/parameters iterator
2706 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2708 for (int index = 0; index < aListOfMap.count(); index++) {
2710 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
2712 //Get Visibility property of the current PropMap
2713 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
2714 SUIT_ViewManager* vman = lst.at(index);
2715 SUIT_ViewModel* vmodel = vman->getViewModel();
2716 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
2719 } // for entries iterator
2721 // update all VTK and OCC views
2722 QList<SUIT_ViewManager*> lst;
2723 getApp()->viewManagers(lst);
2724 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
2725 SUIT_ViewModel* vmodel = (*it)->getViewModel();
2728 if (vmodel->getType() == SVTK_Viewer::Type()) {
2729 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
2730 vtkView->getRenderer()->ResetCameraClippingRange();
2733 else if (vmodel->getType() == SOCC_Viewer::Type()) {
2734 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
2735 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
2742 void GeometryGUI::onViewAboutToShow()
2744 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
2745 QAction* a = action( GEOMOp::OpSwitchVectors );
2747 a->setEnabled(true);
2748 bool vmode = window->property("VectorsMode").toBool();
2749 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
2751 a->setText ( tr("MEN_VECTOR_MODE_ON") );
2752 a->setEnabled(false);
2757 \brief Return action by id
2758 \param id identifier of the action
2761 QAction* GeometryGUI::getAction(const int id) {
2766 \brief GEOM module message handler
2768 This method can be re-implemented in the subclasses.
2769 This is a GEOM module message handler.
2771 \param msg the message received.
2773 void GeometryGUI::message(const QString& msg)
2776 QStringList data = msg.split("/");
2777 const int nbStrings = data.count();
2779 if (nbStrings > 0) {
2780 if (data[0] == "modified") {
2782 QString anIOR = nbStrings > 1 ? data[1] : QString();
2784 if ( anIOR.isEmpty() ) {
2788 // Get the geom object.
2789 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
2791 // Clear the shape buffer
2792 GeometryGUI::ClearShapeBuffer (anObj);
2798 \brief Clears the shape buffer.
2800 This is a static method. It clears the shape buffer.
2802 \param theObj the object
2804 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
2806 if ( CORBA::is_nil( theObj ) )
2809 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
2810 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
2811 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
2813 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
2818 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
2823 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
2827 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
2828 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
2829 _PTR(GenericAttribute) anAttr;
2830 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
2831 _PTR(AttributeIOR) anIOR ( anAttr );
2832 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
2833 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
2839 \brief Returns the object from IOR.
2841 This is a static method. It returns the object from its IOR.
2843 \param IOR object IOR
2844 \return GEOM object.
2846 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
2848 GEOM::GEOM_Object_var geomObj;
2849 if ( !IOR.isEmpty() ) {
2850 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
2851 ( IOR.toLatin1().constData() );
2852 if ( !CORBA::is_nil( corbaObj ) )
2853 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
2855 return geomObj._retn();
2859 \brief Returns IOR of the object.
2861 This is a static method. It returns the object's IOR.
2863 \param object the GEOM object.
2864 \return object's IOR.
2866 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
2869 if ( !CORBA::is_nil( object ) ) {
2870 CORBA::String_var anIOR =
2871 SalomeApp_Application::orb()->object_to_string( object );
2878 \brief Check if this object is can't be renamed in place
2880 This method can be re-implemented in the subclasses.
2881 Return true in case if object isn't reference or component (module root).
2883 \param entry column id
2884 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
2886 bool GeometryGUI::renameAllowed( const QString& entry) const {
2888 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
2889 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
2890 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
2892 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
2896 Rename object by entry.
2897 \param entry entry of the object
2898 \param name new name of the object
2899 \brief Return \c true if rename operation finished successfully, \c false otherwise.
2901 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
2903 bool result = false;
2905 SalomeApp_Application* app =
2906 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
2907 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
2912 _PTR(Study) aStudy = appStudy->studyDS();
2917 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
2919 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
2923 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
2924 _PTR(GenericAttribute) anAttr;
2926 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
2927 _PTR(AttributeName) aName (anAttr);
2929 aName->SetValue( name.toLatin1().data() ); // rename the SObject
2930 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
2931 if (!CORBA::is_nil(anObj)) {
2932 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
2940 void GeometryGUI::updateMaterials()
2942 LightApp_Preferences* pref = preferences();
2944 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2945 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
2946 if ( !materials.contains( currentMaterial ) )
2947 // user material set as default in the preferences, might be removed
2948 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
2950 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
2952 setPreferenceProperty( prefItem->id(),
2953 "strings", materials );
2954 prefItem->retrieve();
2960 \brief Check if the module allows "drag" operation of its objects.
2962 Overloaded from LightApp_Module class.
2964 This function is a part of the general drag-n-drop mechanism.
2965 The goal of this function is to check data object passed as a parameter
2966 and decide if it can be dragged or no.
2968 \param what data object being tested for drag operation
2969 \return \c true if module allows dragging of the specified object
2970 \sa isDropAccepted(), dropObjects()
2972 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
2974 // we allow dragging object under root and object from folder
2975 int aLevel = what->level();
2976 bool anObjectInFolder = false;
2978 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
2980 _PTR(SObject) aSO = dataObj->object();
2982 _PTR(GenericAttribute) anAttr;
2983 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
2984 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
2985 _PTR(AttributeLocalID) aLocalID( anAttr );
2986 anObjectInFolder = aLocalID->Value() == 999;
2991 return aLevel == 2 || anObjectInFolder;
2995 \brief Check if the module allows "drop" operation on the given object.
2997 Overloaded from LightApp_Module class.
2999 This function is a part of the general drag-n-drop mechanism.
3000 The goal of this function is to check data object passed as a parameter
3001 and decide if it can be used as a target for the "drop" operation.
3002 The processing of the drop operation itself is done in the dropObjects() function.
3004 \param where target data object
3005 \return \c true if module supports dropping on the \a where data object
3006 \sa isDraggable(), dropObjects()
3008 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3010 // we allow dropping into folder and top-level GEOM object
3011 int aLevel = where->level();
3012 bool isFolder = false;
3014 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3016 _PTR(SObject) aSO = dataObj->object();
3018 _PTR(GenericAttribute) anAttr;
3019 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3020 _PTR(AttributeLocalID) aLocalID( anAttr );
3021 isFolder = aLocalID->Value() == 999;
3026 return aLevel == 1 || isFolder;
3030 \brief Complete drag-n-drop operation.
3032 Overloaded from LightApp_Module class.
3034 This function is a part of the general drag-n-drop mechanism.
3035 Its goal is to handle dropping of the objects being dragged according
3036 to the chosen operation (move). The dropping is performed in the
3037 context of the parent data object \a where and the \a row (position in the
3038 children index) at which the data should be dropped. If \a row is equal to -1,
3039 this means that objects are added to the end of the children list.
3041 \param what objects being dropped
3042 \param where target data object
3043 \param row child index at which the drop operation is performed
3044 \param action drag-n-drop operation (Qt::DropAction) - move
3046 \sa isDraggable(), isDropAccepted()
3048 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3049 const int row, Qt::DropAction action )
3051 if (action != Qt::CopyAction && action != Qt::MoveAction)
3052 return; // unsupported action
3054 // get parent object
3055 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3056 if ( !dataObj ) return; // wrong parent
3057 _PTR(SObject) parentObj = dataObj->object();
3059 // Find the current Study and StudyBuilder
3060 _PTR(Study) aStudy = parentObj->GetStudy();
3061 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3062 // collect all parents of the target node
3063 QStringList parentIDs;
3064 _PTR(SObject) parent = parentObj;
3065 while( !parent->IsNull() ) {
3066 parentIDs << parent->GetID().c_str();
3067 parent = aUseCaseBuilder->GetFather(parent);
3070 // collect objects being dropped
3071 GEOM::object_list_var objects = new GEOM::object_list();
3072 objects->length( what.count() );
3074 for ( int i = 0; i < what.count(); i++ ) {
3075 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3076 if ( !dataObj ) continue; // skip wrong objects
3077 _PTR(SObject) sobj = dataObj->object();
3078 // check that dropped object is not a parent of target object
3079 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3080 return; // it's not allowed to move node into it's child
3082 objects[i] = _CAST(SObject, sobj)->GetSObject();
3085 objects->length( count );
3087 // call engine function
3088 GetGeomGen()->Move( objects.in(), // what
3089 _CAST(SObject, parentObj)->GetSObject(), // where
3092 // update Object browser
3093 getApp()->updateObjectBrowser( false );