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::OpExportXAO: // MENU NEW ENTITY - IMPORTEXPORT - EXPORTXAO
645 case GEOMOp::OpImportXAO: // MENU NEW ENTITY - IMPORTEXPORT - IMPORTXAO
646 libName = "ImportExportGUI";
648 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
649 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
650 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
651 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
652 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
653 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
654 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
655 //libName = "AdvancedGUI";
658 if (myPluginActions.contains(id)) {
659 libName = myPluginActions[id].first;
661 GEOMPluginGUI* library = 0;
662 if ( !libName.isEmpty() ) {
664 libName = QString( "lib" ) + libName + ".so";
666 libName = libName + ".dll";
668 library = getPluginLibrary( libName );
671 // call method of corresponding GUI library
673 //QString action ("%1");
674 //action = action.arg(id);
676 //if( !theParam.isValid() )
677 library->OnGUIEvent( myPluginActions[id].second, desk );
679 // library->OnGUIEvent( id, desk, theParam);
682 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
684 updateCreationInfo();
690 GEOMGUI* library = 0;
691 if ( !libName.isEmpty() ) {
693 libName = QString( "lib" ) + libName + ".so";
695 libName = libName + ".dll";
697 library = getLibrary( libName );
700 // call method of corresponding GUI library
702 if( !theParam.isValid() )
703 library->OnGUIEvent( id, desk );
705 library->OnGUIEvent( id, desk, theParam);
708 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
710 updateCreationInfo();
713 //=================================================================================
714 // function : GeometryGUI::activateOperation()
716 //=================================================================================
717 bool GeometryGUI::activateOperation( int actionId )
719 OnGUIEvent(actionId);
723 //=================================================================================
724 // function : GeometryGUI::activateOperation()
726 //=================================================================================
727 bool GeometryGUI::activateOperation( const QString& actionId )
731 int id = actionId.toInt(&isOk);
738 //=================================================================================
739 // function : GeometryGUI::activateOperation()
741 //=================================================================================
742 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
746 QString pluginLib = plugin;
747 // TODO: if <plugin> is a plugin name, find plugin library name
748 if (myPluginLibs.contains(plugin))
749 pluginLib = myPluginLibs[plugin];
751 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
752 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
753 const PluginAction& anAction = actionsIter.value();
754 if (anAction.first == pluginLib && anAction.second == actionId) {
755 // activate operation
756 OnGUIEvent(actionsIter.key());
764 //=================================================================================
765 // function : GeometryGUI::OnKeyPress()
766 // purpose : Called when any key is pressed by user [static]
767 //=================================================================================
768 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
770 if ( !application() )
772 foreach ( GEOMGUI* lib, myGUIMap )
773 lib->OnKeyPress( e, application()->desktop(), w );
776 //=================================================================================
777 // function : GeometryGUI::OnMouseMove()
778 // purpose : Manages mouse move events [static]
779 //=================================================================================
780 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
782 if ( !application() )
784 foreach ( GEOMGUI* lib, myGUIMap )
785 lib->OnMouseMove( e, application()->desktop(), w );
788 //=================================================================================
789 // function : GeometryGUI::OnMouseRelease()
790 // purpose : Manages mouse release events [static]
791 //=================================================================================
792 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
794 if ( !application() )
796 foreach ( GEOMGUI* lib, myGUIMap )
797 lib->OnMouseRelease( e, application()->desktop(), w );
800 //=================================================================================
801 // function : GeometryGUI::OnMousePress()
802 // purpose : Manage mouse press events [static]
803 //=================================================================================
804 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
806 if ( !application() )
808 foreach ( GEOMGUI* lib, myGUIMap )
809 lib->OnMousePress( e, application()->desktop(), w );
812 //=======================================================================
813 // function : createGeomAction
815 //=======================================================================
816 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
817 const int accel, const bool toggle, const QString& shortcutAction )
819 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
820 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
821 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
823 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
825 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
826 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
828 application()->desktop(),
830 this, SLOT( OnGUIEvent() ),
834 //=======================================================================
835 // function : createOriginAndBaseVectors
837 //=======================================================================
838 void GeometryGUI::createOriginAndBaseVectors()
840 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
842 _PTR(Study) studyDS = appStudy->studyDS();
843 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
844 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
845 if ( !aBasicOperations->_is_nil() ) {
846 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
847 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
848 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
849 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
850 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
851 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
853 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
854 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
855 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
856 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
857 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
859 getApp()->updateObjectBrowser( true );
865 //=======================================================================
866 // function : GeometryGUI::initialize()
867 // purpose : Called when GEOM module is created
868 //=======================================================================
869 void GeometryGUI::initialize( CAM_Application* app )
871 SalomeApp_Module::initialize( app );
873 // ----- create actions --------------
875 createGeomAction( GEOMOp::OpImport, "IMPORT", "", Qt::ControlModifier + Qt::Key_I );
876 createGeomAction( GEOMOp::OpExport, "EXPORT", "", Qt::ControlModifier + Qt::Key_E );
878 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
880 createGeomAction( GEOMOp::OpPoint, "POINT" );
881 createGeomAction( GEOMOp::OpLine, "LINE" );
882 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
883 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
884 createGeomAction( GEOMOp::OpArc, "ARC" );
885 createGeomAction( GEOMOp::OpCurve, "CURVE" );
886 createGeomAction( GEOMOp::OpVector, "VECTOR" );
887 createGeomAction( GEOMOp::OpPlane, "PLANE" );
888 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
889 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
891 createGeomAction( GEOMOp::OpBox, "BOX" );
892 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
893 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
894 createGeomAction( GEOMOp::OpTorus, "TORUS" );
895 createGeomAction( GEOMOp::OpCone, "CONE" );
896 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
897 createGeomAction( GEOMOp::OpDisk, "DISK" );
899 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
900 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
901 createGeomAction( GEOMOp::OpFilling, "FILLING" );
902 createGeomAction( GEOMOp::OpPipe, "PIPE" );
903 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
905 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
906 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
907 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
908 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
909 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
911 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
913 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
914 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
916 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
917 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
918 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
920 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
922 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
924 createGeomAction( GEOMOp::OpEdge, "EDGE" );
925 createGeomAction( GEOMOp::OpWire, "WIRE" );
926 createGeomAction( GEOMOp::OpFace, "FACE" );
927 createGeomAction( GEOMOp::OpShell, "SHELL" );
928 createGeomAction( GEOMOp::OpSolid, "SOLID" );
929 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
931 createGeomAction( GEOMOp::OpFuse, "FUSE" );
932 createGeomAction( GEOMOp::OpCommon, "COMMON" );
933 createGeomAction( GEOMOp::OpCut, "CUT" );
934 createGeomAction( GEOMOp::OpSection, "SECTION" );
936 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
937 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
938 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
939 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
940 createGeomAction( GEOMOp::OpScale, "SCALE" );
941 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
942 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
943 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
944 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
946 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
947 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
948 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
949 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
950 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
951 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
952 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
953 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
954 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
955 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
956 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
958 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
959 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
960 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
962 createGeomAction( GEOMOp::OpSewing, "SEWING" );
963 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
964 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
965 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
966 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
967 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
968 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
969 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
970 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
971 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
972 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
973 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
974 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
975 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
976 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
977 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
978 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
980 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
981 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
982 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
983 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
984 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
985 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
986 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
987 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
989 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
990 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
991 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
992 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
993 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
994 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
996 #ifdef _DEBUG_ // PAL16821
997 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1000 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1001 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1002 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1003 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1004 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1005 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1006 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1007 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1008 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1009 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1010 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1011 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1012 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1013 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1014 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1015 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1016 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1017 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1018 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1019 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1020 createGeomAction( GEOMOp::OpHide, "ERASE" );
1022 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1023 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1024 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1025 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1026 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1027 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1028 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1029 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1030 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1031 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1032 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1033 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1034 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1035 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1036 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1037 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1038 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1039 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1040 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1041 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1042 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1043 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1044 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1045 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1047 // Create actions for increase/decrease transparency shortcuts
1048 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1049 "Geometry:Increase transparency");
1050 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1051 "Geometry:Decrease transparency");
1053 // Create actions for increase/decrease number of isolines
1054 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1055 "Geometry:Increase number of isolines");
1056 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1057 "Geometry:Decrease number of isolines");
1059 // Import/Export XAO
1060 createGeomAction( GEOMOp::OpExportXAO, "EXPORTXAO" );
1061 createGeomAction( GEOMOp::OpImportXAO, "IMPORTXAO" );
1063 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1064 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1065 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1066 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1067 //@@ 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 @@//
1069 // ---- create menus --------------------------
1071 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1072 createMenu( separator(), fileId, 10 );
1073 createMenu( GEOMOp::OpImport, fileId, 10 );
1074 createMenu( GEOMOp::OpExport, fileId, 10 );
1075 createMenu( separator(), fileId, -1 );
1077 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1078 createMenu( GEOMOp::OpDelete, editId, -1 );
1080 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1082 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1083 createMenu( GEOMOp::OpPoint, basicId, -1 );
1084 createMenu( GEOMOp::OpLine, basicId, -1 );
1085 createMenu( GEOMOp::OpCircle, basicId, -1 );
1086 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1087 createMenu( GEOMOp::OpArc, basicId, -1 );
1088 createMenu( GEOMOp::OpCurve, basicId, -1 );
1089 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1090 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1091 createMenu( separator(), basicId, -1 );
1092 createMenu( GEOMOp::OpVector, basicId, -1 );
1093 createMenu( GEOMOp::OpPlane, basicId, -1 );
1094 createMenu( GEOMOp::OpLCS, basicId, -1 );
1095 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1097 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1098 createMenu( GEOMOp::OpBox, primId, -1 );
1099 createMenu( GEOMOp::OpCylinder, primId, -1 );
1100 createMenu( GEOMOp::OpSphere, primId, -1 );
1101 createMenu( GEOMOp::OpTorus, primId, -1 );
1102 createMenu( GEOMOp::OpCone, primId, -1 );
1103 createMenu( GEOMOp::OpRectangle, primId, -1 );
1104 createMenu( GEOMOp::OpDisk, primId, -1 );
1105 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1107 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1108 createMenu( GEOMOp::OpPrism, genId, -1 );
1109 createMenu( GEOMOp::OpRevolution, genId, -1 );
1110 createMenu( GEOMOp::OpFilling, genId, -1 );
1111 createMenu( GEOMOp::OpPipe, genId, -1 );
1112 #if OCC_VERSION_LARGE > 0x06050300
1113 createMenu( GEOMOp::OpPipePath, genId, -1 );
1116 int impexpId = createMenu( tr( "MEN_IMPORTEXPORT" ), newEntId, -1 );
1117 createMenu( GEOMOp::OpExportXAO, impexpId, -1 );
1118 createMenu( GEOMOp::OpImportXAO, impexpId, -1 );
1120 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1121 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1122 //@@ 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 @@//
1124 createMenu( separator(), newEntId, -1 );
1126 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1127 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1128 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1129 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1130 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1131 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1133 createMenu( separator(), newEntId, -1 );
1135 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1136 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1137 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1138 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1139 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1141 createMenu( separator(), newEntId, -1 );
1143 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1145 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1146 createMenu( GEOMOp::OpEdge, buildId, -1 );
1147 createMenu( GEOMOp::OpWire, buildId, -1 );
1148 createMenu( GEOMOp::OpFace, buildId, -1 );
1149 createMenu( GEOMOp::OpShell, buildId, -1 );
1150 createMenu( GEOMOp::OpSolid, buildId, -1 );
1151 createMenu( GEOMOp::OpCompound, buildId, -1 );
1153 createMenu( separator(), newEntId, -1 );
1155 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1157 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1160 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1162 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1163 createMenu( GEOMOp::OpFuse, boolId, -1 );
1164 createMenu( GEOMOp::OpCommon, boolId, -1 );
1165 createMenu( GEOMOp::OpCut, boolId, -1 );
1166 createMenu( GEOMOp::OpSection, boolId, -1 );
1168 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1169 createMenu( GEOMOp::OpTranslate, transId, -1 );
1170 createMenu( GEOMOp::OpRotate, transId, -1 );
1171 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1172 createMenu( GEOMOp::OpMirror, transId, -1 );
1173 createMenu( GEOMOp::OpScale, transId, -1 );
1174 createMenu( GEOMOp::OpOffset, transId, -1 );
1175 createMenu( GEOMOp::OpProjection, transId, -1 );
1176 createMenu( separator(), transId, -1 );
1177 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1178 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1180 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1181 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1182 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1183 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1185 createMenu( separator(), operId, -1 );
1187 createMenu( GEOMOp::OpPartition, operId, -1 );
1188 createMenu( GEOMOp::OpArchimede, operId, -1 );
1189 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1190 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1192 createMenu( separator(), operId, -1 );
1194 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1195 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1196 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1197 createMenu( GEOMOp::OpChamfer, operId, -1 );
1198 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1199 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1200 //createMenu( GEOMOp::OpClipping, operId, -1 );
1202 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1203 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1204 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1205 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1206 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1207 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1208 createMenu( GEOMOp::OpSewing, repairId, -1 );
1209 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1210 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1211 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1212 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1213 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1214 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1215 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1216 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1217 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1218 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1219 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1221 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1222 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1223 createMenu( GEOMOp::OpProperties, measurId, -1 );
1224 createMenu( separator(), measurId, -1 );
1225 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1226 createMenu( GEOMOp::OpInertia, measurId, -1 );
1227 createMenu( GEOMOp::OpNormale, measurId, -1 );
1228 createMenu( separator(), measurId, -1 );
1229 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1230 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1231 createMenu( separator(), measurId, -1 );
1233 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1234 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1235 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1236 createMenu( GEOMOp::OpAngle, dimId, -1 );
1238 createMenu( separator(), measurId, -1 );
1239 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1240 createMenu( separator(), measurId, -1 );
1241 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1242 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1243 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1244 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1245 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1247 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1248 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1249 createMenu( separator(), toolsId, -1 );
1250 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1253 createMenu( separator(), toolsId, -1 );
1254 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1255 createMenu( separator(), toolsId, -1 );
1257 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1258 createMenu( separator(), viewId, -1 );
1260 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1261 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1262 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1263 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1264 createMenu( separator(), dispmodeId, -1 );
1265 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1267 createMenu( separator(), viewId, -1 );
1268 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1269 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1270 createMenu( separator(), viewId, -1 );
1271 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1272 createMenu( separator(), viewId, -1 );
1276 because of these items are accessible through object browser and viewers
1277 we have removed they from main menu
1279 createMenu( GEOMOp::OpShow, viewId, -1 );
1280 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1281 createMenu( GEOMOp::OpHide, viewId, -1 );
1284 // ---- create toolbars --------------------------
1286 int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1287 createTool( GEOMOp::OpPoint, basicTbId );
1288 createTool( GEOMOp::OpLine, basicTbId );
1289 createTool( GEOMOp::OpCircle, basicTbId );
1290 createTool( GEOMOp::OpEllipse, basicTbId );
1291 createTool( GEOMOp::OpArc, basicTbId );
1292 createTool( GEOMOp::OpCurve, basicTbId );
1293 createTool( GEOMOp::OpVector, basicTbId );
1294 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1295 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1296 createTool( GEOMOp::OpPlane, basicTbId );
1297 createTool( GEOMOp::OpLCS, basicTbId );
1298 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1300 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ) );
1301 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1302 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1304 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1305 createTool( GEOMOp::OpBox, primTbId );
1306 createTool( GEOMOp::OpCylinder, primTbId );
1307 createTool( GEOMOp::OpSphere, primTbId );
1308 createTool( GEOMOp::OpTorus, primTbId );
1309 createTool( GEOMOp::OpCone, primTbId );
1310 createTool( GEOMOp::OpRectangle, primTbId );
1311 createTool( GEOMOp::OpDisk, primTbId );
1312 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1314 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ) );
1315 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1316 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1318 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1319 createTool( GEOMOp::OpFuse, boolTbId );
1320 createTool( GEOMOp::OpCommon, boolTbId );
1321 createTool( GEOMOp::OpCut, boolTbId );
1322 createTool( GEOMOp::OpSection, boolTbId );
1324 int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1325 createTool( GEOMOp::OpPrism, genTbId );
1326 createTool( GEOMOp::OpRevolution, genTbId );
1327 createTool( GEOMOp::OpFilling, genTbId );
1328 createTool( GEOMOp::OpPipe, genTbId );
1329 #if OCC_VERSION_LARGE > 0x06050300
1330 createTool( GEOMOp::OpPipePath, genTbId );
1333 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1334 createTool( GEOMOp::OpTranslate, transTbId );
1335 createTool( GEOMOp::OpRotate, transTbId );
1336 createTool( GEOMOp::OpChangeLoc, transTbId );
1337 createTool( GEOMOp::OpMirror, transTbId );
1338 createTool( GEOMOp::OpScale, transTbId );
1339 createTool( GEOMOp::OpOffset, transTbId );
1340 createTool( GEOMOp::OpProjection, transTbId );
1341 createTool( separator(), transTbId );
1342 createTool( GEOMOp::OpMultiTranslate, transTbId );
1343 createTool( GEOMOp::OpMultiRotate, transTbId );
1345 int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1346 createTool( GEOMOp::OpExplode, operTbId );
1347 createTool( GEOMOp::OpPartition, operTbId );
1348 createTool( GEOMOp::OpArchimede, operTbId );
1349 createTool( GEOMOp::OpShapesOnShape, operTbId );
1350 createTool( GEOMOp::OpSharedShapes, operTbId );
1352 int featTbId = createTool( tr( "TOOL_FEATURES" ) );
1353 createTool( GEOMOp::OpFillet1d, featTbId );
1354 createTool( GEOMOp::OpFillet2d, featTbId );
1355 createTool( GEOMOp::OpFillet3d, featTbId );
1356 createTool( GEOMOp::OpChamfer, featTbId );
1357 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1358 createTool( GEOMOp::OpExtrudedCut, featTbId );
1360 int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1361 createTool( GEOMOp::OpEdge, buildTbId );
1362 createTool( GEOMOp::OpWire, buildTbId );
1363 createTool( GEOMOp::OpFace, buildTbId );
1364 createTool( GEOMOp::OpShell, buildTbId );
1365 createTool( GEOMOp::OpSolid, buildTbId );
1366 createTool( GEOMOp::OpCompound, buildTbId );
1368 int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1369 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1370 createTool( GEOMOp::OpProperties, measureTbId );
1371 createTool( GEOMOp::OpCenterMass, measureTbId );
1372 createTool( GEOMOp::OpInertia, measureTbId );
1373 createTool( GEOMOp::OpNormale, measureTbId );
1374 createTool( separator(), measureTbId );
1375 createTool( GEOMOp::OpBoundingBox, measureTbId );
1376 createTool( GEOMOp::OpMinDistance, measureTbId );
1377 createTool( GEOMOp::OpAngle, measureTbId );
1378 createTool( GEOMOp::OpTolerance , measureTbId );
1379 createTool( separator(), measureTbId );
1380 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1381 createTool( GEOMOp::OpFreeFaces, measureTbId );
1382 createTool( separator(), measureTbId );
1383 createTool( GEOMOp::OpWhatIs, measureTbId );
1384 createTool( GEOMOp::OpCheckShape, measureTbId );
1385 createTool( GEOMOp::OpCheckCompound, measureTbId );
1386 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1387 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1389 int picturesTbId = createTool( tr( "TOOL_PICTURES" ) );
1390 createTool( GEOMOp::OpPictureImport, picturesTbId );
1392 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1395 int impexpTbId = createTool( tr( "TOOL_IMPORTEXPORT" ) );
1396 createTool( GEOMOp::OpExportXAO, impexpTbId );
1397 createTool( GEOMOp::OpImportXAO, impexpTbId );
1399 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1400 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1401 //@@ 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 @@//
1403 // ---- create popup menus --------------------------
1405 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1406 QString clientOCC = "(client='OCCViewer')";
1407 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1408 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1410 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1411 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1412 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1413 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1415 QString autoColorPrefix =
1416 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1418 QtxPopupMgr* mgr = popupMgr();
1420 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1421 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder'} and selcount>0"), QtxPopupMgr::VisibleRule );
1422 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1423 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1424 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1425 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1427 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal shild items
1428 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1429 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1430 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1431 mgr->insert( separator(), -1, -1 ); // -----------
1433 #if OCC_VERSION_LARGE > 0x06050200
1434 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1435 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1436 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1437 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1438 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1439 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1440 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1442 mgr->insert( separator(), -1, -1 ); // -----------
1443 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1444 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1445 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1446 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1447 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1448 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1449 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1450 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1451 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1452 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1453 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1454 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1455 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1456 mgr->insert( separator(), dispmodeId, -1 );
1457 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1458 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1459 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1460 mgr->insert( separator(), -1, -1 ); // -----------
1462 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1463 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1464 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1465 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1466 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1467 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1468 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1469 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1470 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1471 //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1472 mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1474 // material properties
1475 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1476 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1479 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1480 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1482 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1483 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1484 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1486 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1487 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1489 mgr->insert( separator(), -1, -1 ); // -----------
1490 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1491 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1492 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1493 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1494 mgr->insert( separator(), -1, -1 ); // -----------
1496 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1497 onlyComponent = "((type='Component') and selcount=1)",
1498 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1499 types = "'Shape' 'Group'";
1501 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1502 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1504 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1505 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1507 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1508 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1510 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1512 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1513 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1514 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1515 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1516 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1517 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1518 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1519 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1520 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1521 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1522 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1523 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1524 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1525 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1526 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1527 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1528 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1529 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1530 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1531 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1532 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1533 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1534 mgr->insert( separator(), selectonlyId, -1);
1535 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1536 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1537 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1538 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1539 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1540 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1541 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1543 mgr->insert( separator(), -1, -1 ); // -----------
1544 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1545 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
1547 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1548 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1550 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1551 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1553 mgr->insert( separator(), -1, -1 ); // -----------
1554 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1555 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1557 mgr->insert( separator(), -1, -1 ); // -----------
1558 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1559 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1561 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1563 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1565 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1566 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1567 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1570 // create plugin actions and menus
1574 //=======================================================================
1575 // function : GeometryGUI::addPluginActions()
1577 //=======================================================================
1578 void GeometryGUI::addPluginActions()
1581 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1582 if (!resMgr) return;
1584 // Find names of a resource XML files ("GEOMActions.xml" and others);
1586 char* cenv = getenv("GEOM_PluginsList");
1588 PluginsXml.sprintf("%s", cenv);
1590 QStringList PluginsXmlList = PluginsXml.split(":", QString::SkipEmptyParts);
1591 if (PluginsXmlList.count() == 0) return;
1593 // get full names of xml files from PluginsXmlList
1594 QStringList xmlFiles;
1595 xmlFiles.append(QDir::home().filePath("CustomGeomPlugins.xml")); // may be inexistent
1596 for (int i = 0; i < PluginsXmlList.count(); i++) {
1597 PluginsXml = PluginsXmlList[ i ];
1599 // Find full path to the resource XML file
1600 QString xmlFile = resMgr->path("resources", "GEOM", PluginsXml + ".xml");
1601 if ( xmlFile.isEmpty() ) // try PLUGIN resources
1602 xmlFile = resMgr->path("resources", PluginsXml, PluginsXml + ".xml");
1603 if ( !xmlFile.isEmpty() )
1604 xmlFiles.append( xmlFile );
1607 // create "Advanced Operations" menu and corresponding toolbar
1608 //int advancedMenuId = createMenu(tr("MEN_ADVANCED"), -1, -1, 10);
1609 //int advancedTbarId = createTool(tr("TOOL_ADVANCED"));
1610 int id = GEOMOp::OpLastOperationID; // TODO?
1613 QString aNoAccessFiles;
1614 for (int i = 0; i < xmlFiles.count(); i++) {
1615 QString xmlFile = xmlFiles[ i ];
1617 QFile file (xmlFile);
1618 if (file.exists() && file.open(QIODevice::ReadOnly)) {
1621 GEOMGUI_XmlHandler* aXmlHandler = new GEOMGUI_XmlHandler();
1622 ASSERT(aXmlHandler);
1624 QXmlInputSource source (&file);
1625 QXmlSimpleReader reader;
1626 reader.setContentHandler(aXmlHandler);
1627 reader.setErrorHandler(aXmlHandler);
1628 bool ok = reader.parse(source);
1632 // bind action lib and label to its ID for activateOperation() method proper work
1633 myPluginLibs[aXmlHandler->myPluginData.myName] = aXmlHandler->myPluginData.myClientLib;
1635 QListIterator<GEOMGUI_ActionData> anActionsIter (aXmlHandler->myPluginData.myListOfActions);
1636 while (anActionsIter.hasNext()) {
1637 GEOMGUI_ActionData anActionData = anActionsIter.next();
1639 //QPixmap icon = resMgr->loadPixmap("GEOM", tr(anActionData.myIcon.toLatin1().constData()));
1640 QPixmap icon = resMgr->loadPixmap(aXmlHandler->myPluginData.myName,
1641 anActionData.myIcon.toLatin1().constData());
1643 // path to action in menu
1644 QStringList smenus = anActionData.myMenu.split( "/" );
1645 QString actionName = smenus.last();
1646 actionName = actionName.toUpper().prepend("MEN_");
1647 smenus.removeLast();
1649 // path to action in toolbar
1650 QStringList stools = anActionData.myTooltip.split( "/" );
1651 QString actionTool = stools.last();
1652 actionTool = actionTool.toUpper().prepend("TOP_");
1653 stools.removeLast();
1655 QString actionStat = anActionData.myStatusBar;
1656 actionStat = actionStat.toUpper().prepend("STB_");
1658 createAction(id, // ~ anActionData.myLabel
1659 tr(actionTool.toLatin1().constData()),
1661 tr(actionName.toLatin1().constData()),
1662 tr(actionStat.toLatin1().constData()),
1664 application()->desktop(),
1666 this, SLOT(OnGUIEvent()),
1667 QString() /*shortcutAction*/);
1670 foreach (QString subMenu, smenus) {
1671 subMenu = subMenu.toUpper().prepend("MEN_");
1672 menuId = createMenu(tr(subMenu.toLatin1().constData()), menuId, -1);
1674 //createMenu(id, pluginMenuId, -1);
1675 createMenu(id, menuId, -1);
1677 QString subTool = stools[0];
1678 subTool = subTool.toUpper().prepend("TOOL_");
1679 int toolId = createTool(tr(subTool.toLatin1().constData()));
1680 //createTool(id, advancedTbarId);
1681 createTool(id, toolId);
1683 // add action id to map
1684 PluginAction anAction (aXmlHandler->myPluginData.myClientLib, anActionData.myLabel);
1685 myPluginActions[id] = anAction;
1691 SUIT_MessageBox::critical(application()->desktop(),
1692 tr("INF_PARSE_ERROR"),
1693 tr(aXmlHandler->errorProtocol().toLatin1().data()));
1697 else if ( i > 0 ) { // 1st is ~/CustomGeomPlugins.xml
1698 if (aNoAccessFiles.isEmpty())
1699 aNoAccessFiles = xmlFile;
1701 aNoAccessFiles += ", " + xmlFile;
1703 } // end loop on xmlFiles
1705 if (!aNoAccessFiles.isEmpty()) {
1706 QString aMess = QObject::tr("PLUGIN_FILE_CANT_OPEN") + " " + aNoAccessFiles + "\n";
1707 aMess += QObject::tr("PLUGIN_FILE_CHECK_VARIABLE");
1708 SUIT_MessageBox::warning(application()->desktop(), tr("GEOM_WRN_WARNING"), aMess);
1712 //=======================================================================
1713 // function : GeometryGUI::activateModule()
1714 // purpose : Called when GEOM module is activated
1715 //=======================================================================
1716 bool GeometryGUI::activateModule( SUIT_Study* study )
1718 if ( CORBA::is_nil( myComponentGeom ) )
1721 bool res = SalomeApp_Module::activateModule( study );
1725 setMenuShown( true );
1726 setToolShown( true );
1728 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1729 PyGILState_STATE gstate = PyGILState_Ensure();
1730 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1731 if ( !pluginsmanager ) {
1735 PyObjWrapper result =
1736 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1737 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1738 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1742 PyGILState_Release(gstate);
1743 // end of GEOM plugins loading
1745 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1746 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1748 // Reset actions accelerator keys
1749 action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1750 action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1751 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1753 GUIMap::Iterator it;
1754 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1755 it.value()->activate( application()->desktop() );
1757 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1759 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1760 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1762 if ( !myCreationInfoWdg )
1763 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1764 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1765 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1767 SUIT_ViewManager* vm;
1768 ViewManagerList OCCViewManagers, VTKViewManagers;
1770 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1771 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1772 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1773 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1775 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1776 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1777 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1778 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1781 SALOME_ListIO selected;
1782 sm->selectedObjects( selected );
1783 sm->clearSelected();
1785 // disable OCC selectors
1786 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1787 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1788 while ( itOCCSel.hasNext() )
1789 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1790 sr->setEnabled(true);
1792 // disable VTK selectors
1793 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1794 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1795 while ( itVTKSel.hasNext() )
1796 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1797 sr->setEnabled(true);
1799 sm->setSelectedObjects( selected, true ); //NPAL 19674
1801 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1803 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1805 // 0020836 (Basic vectors and origin)
1806 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1807 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1808 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1810 _PTR(Study) studyDS = appStudy->studyDS();
1812 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1813 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1814 createOriginAndBaseVectors();
1822 //=======================================================================
1823 // function : GeometryGUI::deactivateModule()
1824 // purpose : Called when GEOM module is deactivated
1825 //=======================================================================
1826 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1828 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1830 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1832 setMenuShown( false );
1833 setToolShown( false );
1835 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1836 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1838 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1840 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1841 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1842 myCreationInfoWdg = 0;
1844 EmitSignalCloseAllDialogs();
1846 GUIMap::Iterator it;
1847 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1848 it.value()->deactivate();
1850 // Unset actions accelerator keys
1851 action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1852 action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1853 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1855 qDeleteAll(myOCCSelectors);
1856 myOCCSelectors.clear();
1857 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1859 qDeleteAll(myVTKSelectors);
1860 myVTKSelectors.clear();
1861 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1863 return SalomeApp_Module::deactivateModule( study );
1866 //=======================================================================
1867 // function : onWindowActivated()
1868 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1869 //=======================================================================
1870 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1875 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1876 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1878 // disable non-OCC viewframe menu commands
1879 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1880 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1881 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1882 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1883 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1884 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1885 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1887 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1888 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1890 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1893 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1895 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1896 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1897 if ( myCreationInfoWdg )
1898 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1901 void GeometryGUI::viewManagers( QStringList& lst ) const
1903 lst.append( OCCViewer_Viewer::Type() );
1906 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1908 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1910 qDebug( "connect" );
1911 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1912 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1913 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1914 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1915 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1916 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1917 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1918 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1920 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1921 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1923 // disable OCC selectors
1924 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1925 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1926 while ( itOCCSel.hasNext() )
1927 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1928 sr->setEnabled(true);
1930 else if ( vm->getType() == SVTK_Viewer::Type() )
1932 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1933 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1935 // disable VTK selectors
1936 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1937 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1938 while ( itVTKSel.hasNext() )
1939 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1940 sr->setEnabled(true);
1944 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1946 SUIT_ViewModel* viewer = vm->getViewModel();
1947 if ( vm->getType() == OCCViewer_Viewer::Type() )
1949 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1950 while ( itOCCSel.hasNext() )
1951 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1952 if ( sr->viewer() == viewer )
1954 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1958 if ( vm->getType() == SVTK_Viewer::Type() )
1960 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1961 while ( itVTKSel.hasNext() )
1962 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1963 if ( sr->viewer() == viewer )
1965 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1971 //================================================================================
1973 * \brief Slot called when selection changed. Shows creation info of a selected object
1975 //================================================================================
1977 void GeometryGUI::updateCreationInfo()
1979 if ( myCreationInfoWdg )
1980 myCreationInfoWdg->clear();
1982 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
1983 // if ( !myCreationInfoWdg->isVisible() )
1986 // look for a sole selected GEOM_Object
1987 GEOM::GEOM_BaseObject_var geomObj;
1989 SALOME_ListIO selected;
1990 getApp()->selectionMgr()->selectedObjects( selected );
1992 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
1993 SALOME_ListIteratorOfListIO selIt( selected );
1994 for ( ; selIt.More(); selIt.Next() )
1996 Handle(SALOME_InteractiveObject) io = selIt.Value();
1997 if ( !io->hasEntry() ) continue;
1998 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
1999 if ( !sobj ) continue;
2000 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2001 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2002 if ( !gobj->_is_nil() )
2004 if ( !geomObj->_is_nil() )
2005 return; // several GEOM objects selected
2009 if ( geomObj->_is_nil() ) return;
2011 // pass creation info of geomObj to myCreationInfoWdg
2013 if ( myCreationInfoWdg ) {
2015 QString operationName;
2016 myCreationInfoWdg->setOperation( icon, operationName );
2020 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2022 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2023 QString name = info->operationName.in();
2024 if ( !name.isEmpty() ) {
2025 icon = resMgr->loadPixmap( "GEOM", tr( ("ICO_"+name).toLatin1().constData() ), false );
2026 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2027 if ( operationName.startsWith( "MEN_" ))
2028 operationName = name; // no translation
2029 myCreationInfoWdg->setOperation( icon, operationName );
2031 for ( size_t i = 0; i < info->params.length(); ++i )
2032 myCreationInfoWdg->addParam( info->params[i].name.in(),
2033 info->params[i].value.in() );
2042 void GeometryGUI::onAutoBringToFront()
2044 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front" );
2045 if( !isAutoBringToFront )
2048 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2049 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2052 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2053 if (!appStudy) return;
2055 GEOM_Displayer displayer( appStudy );
2057 SALOME_View* window = displayer.GetActiveView();
2058 if ( !window ) return;
2060 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2062 SALOME_ListIO selected;
2063 getApp()->selectionMgr()->selectedObjects( selected );
2064 SALOME_ListIO allObjects;
2065 window->GetVisible( allObjects );
2067 for ( SALOME_ListIteratorOfListIO It( allObjects ); It.More(); It.Next() ) {
2068 Handle( SALOME_InteractiveObject ) io = It.Value();
2069 bool isSelected = false;
2070 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
2071 Handle( SALOME_InteractiveObject ) ioSelected = It.Value();
2072 if( io->isSame( ioSelected ) )
2075 QVariant v = appStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), QVariant() );
2076 bool isTopLevel = v.isValid() ? v.toBool() : false;
2077 if( isSelected && !isTopLevel ) {
2078 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2079 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2081 else if( !isSelected ) {
2082 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2083 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2086 displayer.UpdateViewer();
2087 GeometryGUI::Modified();
2090 QString GeometryGUI::engineIOR() const
2092 if ( !CORBA::is_nil( GetGeomGen() ) )
2093 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2097 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2098 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2100 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
2102 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2104 theWidth = theHeight = 0;
2106 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2107 Handle(TColStd_HArray1OfByte) aTexture;
2109 Handle(Graphic3d_HArray1OfBytes) aTexture;
2113 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2114 aTexture = aTextureMap[ theId ];
2115 if ( aTexture.IsNull() ) {
2116 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2117 if ( !aInsOp->_is_nil() ) {
2118 CORBA::Long aWidth, aHeight;
2119 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2120 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2122 theHeight = aHeight;
2124 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2125 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2127 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
2130 for (int i = 0; i < aStream->length(); i++)
2131 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2132 aTextureMap[ theId ] = aTexture;
2140 LightApp_Selection* GeometryGUI::createSelection() const
2142 return new GEOMGUI_Selection();
2145 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2147 SalomeApp_Module::contextMenuPopup( client, menu, title );
2149 getApp()->selectionMgr()->selectedObjects( lst );
2151 //Add submenu for predefined materials
2152 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2153 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2154 QtxPopupMgr* mgr = popupMgr();
2155 //get parrent for submenu
2156 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2158 QMenu* oldMenu = act->menu() ;
2163 QMenu* matMenu = new QMenu();
2164 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2166 //Get current material model for the object
2168 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2169 if ( anApp && anApp->activeViewManager() ) {
2170 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2172 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2175 QString curModel = "";
2176 if ( v.canConvert<QString>() ) curModel = v.toString();
2177 // get list of all predefined materials
2178 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2180 foreach ( QString material, materials )
2182 QAction* menAct = matMenu->addAction( material );
2183 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2184 signalMapper->setMapping( menAct, material );
2185 menAct->setCheckable( true );
2186 // Set checked if this material is current
2187 Material_Model aModel;
2188 aModel.fromResources( material );
2189 if ( !found && aModel.toProperties() == curModel ) {
2190 menAct->setChecked( true );
2194 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2195 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2196 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2197 this, SLOT( OnSetMaterial( const QString & ) ) );
2198 act->setMenu( matMenu );
2202 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2203 Handle(SALOME_InteractiveObject) io = lst.First();
2204 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2205 _PTR(Study) study = appStudy->studyDS();
2206 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2208 QString aName = QString( obj->GetName().c_str() );
2209 aName.remove( QRegExp("\\s+$") );
2215 void GeometryGUI::OnSetMaterial(const QString& theName)
2217 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2221 void GeometryGUI::createPreferences()
2223 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2225 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2226 setPreferenceProperty( genGroup, "columns", 2 );
2228 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2229 LightApp_Preferences::Selector,
2230 "Geometry", "display_mode" );
2232 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2233 LightApp_Preferences::Color, "Geometry", "shading_color" );
2235 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2236 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2238 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2239 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2241 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2242 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2244 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2245 LightApp_Preferences::Color, "Geometry", "line_color" );
2247 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2248 LightApp_Preferences::Color, "Geometry", "point_color" );
2250 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2251 LightApp_Preferences::Color, "Geometry", "isos_color" );
2253 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2254 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2256 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2257 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2259 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2260 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2262 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2263 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2265 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2266 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2268 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2269 LightApp_Preferences::Selector,
2270 "Geometry", "material" );
2272 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2273 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2279 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2280 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2282 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2283 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2285 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2286 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2288 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2289 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2291 for (int i = 0; i < nb; i++) {
2292 setPreferenceProperty( wd[i], "min", 1 );
2293 setPreferenceProperty( wd[i], "max", 5 );
2296 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2297 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2299 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2300 setPreferenceProperty( isoGroup, "columns", 2 );
2301 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2302 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2303 setPreferenceProperty( isoU, "min", 0 );
2304 setPreferenceProperty( isoU, "max", 100000 );
2305 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2306 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2307 setPreferenceProperty( isoV, "min", 0 );
2308 setPreferenceProperty( isoV, "max", 100000 );
2310 // Quantities with individual precision settings
2311 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2312 setPreferenceProperty( precGroup, "columns", 2 );
2314 const int nbQuantities = 8;
2315 int prec[nbQuantities], ii = 0;
2316 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2317 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2318 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2319 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2320 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2321 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2322 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2323 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2324 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2325 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2326 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2327 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2328 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2329 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2330 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2331 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2333 // Set property for precision value for spinboxes
2334 for ( ii = 0; ii < nbQuantities; ii++ ){
2335 setPreferenceProperty( prec[ii], "min", -14 );
2336 setPreferenceProperty( prec[ii], "max", 14 );
2337 setPreferenceProperty( prec[ii], "precision", 2 );
2340 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2341 setPreferenceProperty( VertexGroup, "columns", 2 );
2343 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2344 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2346 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2347 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2349 // Set property for default display mode
2350 QStringList aModesList;
2351 aModesList.append( tr("MEN_WIREFRAME") );
2352 aModesList.append( tr("MEN_SHADING") );
2353 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2355 QList<QVariant> anIndexesList;
2356 anIndexesList.append(0);
2357 anIndexesList.append(1);
2358 anIndexesList.append(2);
2360 setPreferenceProperty( dispmode, "strings", aModesList );
2361 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2363 // Set property for top level display mode
2364 QStringList aTopModesList;
2365 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2366 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2367 aTopModesList.append( tr("MEN_WIREFRAME") );
2368 aTopModesList.append( tr("MEN_SHADING") );
2369 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2371 QList<QVariant> aTopIndexesList;
2372 aTopIndexesList.append(0);
2373 aTopIndexesList.append(1);
2374 aTopIndexesList.append(2);
2375 aTopIndexesList.append(3);
2376 aTopIndexesList.append(4);
2378 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2379 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2381 // Set property for step value for spinboxes
2382 setPreferenceProperty( step, "min", 1 );
2383 setPreferenceProperty( step, "max", 10000 );
2384 setPreferenceProperty( step, "precision", 3 );
2386 // Set property for deflection value for spinboxes
2387 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2388 setPreferenceProperty( defl, "max", 1.0 );
2389 setPreferenceProperty( defl, "step", 1.0e-04 );
2390 setPreferenceProperty( defl, "precision", 6 );
2392 // Set property for default material
2393 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2395 // Set property vertex marker type
2396 QList<QVariant> aMarkerTypeIndicesList;
2397 QList<QVariant> aMarkerTypeIconsList;
2399 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2400 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2401 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2402 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2403 aMarkerTypeIndicesList << (i-1);
2404 aMarkerTypeIconsList << pixmap;
2407 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2408 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2410 // Set property for vertex marker scale
2411 QList<QVariant> aMarkerScaleIndicesList;
2412 QStringList aMarkerScaleValuesList;
2414 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2415 aMarkerScaleIndicesList << iii;
2416 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2419 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2420 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2422 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2423 setPreferenceProperty( originGroup, "columns", 2 );
2425 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2426 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2427 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2428 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2430 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2431 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2433 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2434 setPreferenceProperty( operationsGroup, "columns", 2 );
2436 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2437 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2440 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2442 if (section == "Geometry") {
2443 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2444 if (param == QString("SettingsGeomStep")) {
2445 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2446 EmitSignalDefaultStepValueChanged(spin_step);
2448 else if (param == QString("toplevel_color")) {
2449 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2450 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2452 else if (param == QString("toplevel_dm")) {
2453 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2458 LightApp_Displayer* GeometryGUI::displayer()
2461 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2465 void GeometryGUI::setLocalSelectionMode(const int mode)
2467 myLocalSelectionMode = mode;
2470 int GeometryGUI::getLocalSelectionMode() const
2472 return myLocalSelectionMode;
2475 const char gSeparator = '_'; // character used to separate parameter names
2476 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2479 * \brief Store visual parameters
2481 * This method is called just before the study document is saved.
2482 * Store visual parameters in AttributeParameter attribute(s)
2484 void GeometryGUI::storeVisualParameters (int savePoint)
2486 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2487 if ( !appStudy || !appStudy->studyDS() )
2489 _PTR(Study) studyDS = appStudy->studyDS();
2491 // componentName is used for encoding of entries when storing them in IParameters
2492 std::string componentName = myComponentGeom->ComponentDataType();
2493 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2494 //if (!aSComponent) return;
2497 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2498 componentName.c_str(),
2500 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2502 QList<SUIT_ViewManager*> lst;
2503 QList<SUIT_ViewManager*>::Iterator it;
2505 // main cycle to store parameters of displayed objects
2507 getApp()->viewManagers(lst);
2508 for (it = lst.begin(); it != lst.end(); it++) {
2509 SUIT_ViewManager* vman = *it;
2510 QString vType = vman->getType();
2511 int aMgrId = vman->getGlobalId();
2512 // saving VTK actors properties
2513 QVector<SUIT_ViewWindow*> views = vman->getViews();
2514 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2515 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
2516 ObjMap::ConstIterator o_it = anObjects.begin();
2517 for (; o_it != anObjects.end(); o_it++) {
2518 const PropMap aProps = o_it.value();
2520 //Check that object exists in the study
2521 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2522 if ( !obj || !(aProps.count() > 0))
2524 // entry is "encoded" = it does NOT contain component adress, since it is a
2525 // subject to change on next component loading
2527 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2529 _PTR(GenericAttribute) anAttr;
2530 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2533 QString param, occParam = vType;
2534 occParam += GEOM::sectionSeparator();
2535 occParam += QString::number(aMgrId);
2536 occParam += GEOM::sectionSeparator();
2538 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2539 param = occParam + GEOM::propertyName( GEOM::Visibility );
2540 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2543 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2544 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2545 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2548 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2549 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2551 val << QString::number(c.redF());
2552 val << QString::number(c.greenF());
2553 val << QString::number(c.blueF());
2554 param = occParam + GEOM::propertyName( GEOM::Color );
2555 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2558 if (vType == SVTK_Viewer::Type()) {
2559 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2560 param = occParam + GEOM::propertyName( GEOM::Opacity );
2561 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2563 } else if (vType == SOCC_Viewer::Type()) {
2564 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2565 param = occParam + GEOM::propertyName( GEOM::Transparency );
2566 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2569 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2570 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2571 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2575 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2576 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2577 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2580 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2581 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2582 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2585 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2586 param = occParam + GEOM::propertyName( GEOM::Deflection );
2587 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2590 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2591 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2592 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2593 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2596 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2597 param = occParam + GEOM::propertyName( GEOM::Material );
2598 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2601 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2602 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2603 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2606 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2607 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2608 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2610 } // object iterator
2612 } // for (viewManagers)
2616 * \brief Restore visual parameters
2618 * This method is called after the study document is opened.
2619 * Restore visual parameters from AttributeParameter attribute(s)
2621 void GeometryGUI::restoreVisualParameters (int savePoint)
2623 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2624 if (!appStudy || !appStudy->studyDS())
2626 _PTR(Study) studyDS = appStudy->studyDS();
2628 // componentName is used for encoding of entries when storing them in IParameters
2629 std::string componentName = myComponentGeom->ComponentDataType();
2630 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2631 //if (!aSComponent) return;
2634 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2635 componentName.c_str(),
2637 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2639 std::vector<std::string> entries = ip->getEntries();
2641 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2643 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2644 QString entry (ip->decodeEntry(*entIt).c_str());
2646 // Check that the entry corresponds to a real object in the Study
2647 // as the object may be deleted or modified after the visual state is saved.
2648 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2649 if (!so) continue; //Skip the not existent entry
2651 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2652 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2654 std::vector<std::string>::iterator namesIt = paramNames.begin();
2655 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2657 // actors are stored in a map after displaying of them for
2658 // quicker access in the future: map < viewID to actor >
2659 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2660 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2662 QString viewerTypStr;
2663 QString viewIndexStr;
2665 QVector<PropMap> aListOfMap;
2667 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2669 // visual parameters are stored in strings as follows: ViewerType_ViewIndex_ParamName.
2670 // '_' is used as separator and should not be used in viewer type or parameter names.
2671 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2672 if (lst.size() != 3)
2675 viewerTypStr = lst[0];
2676 viewIndexStr = lst[1];
2677 QString paramNameStr = lst[2];
2680 viewIndex = viewIndexStr.toUInt(&ok);
2681 if (!ok) // bad conversion of view index to integer
2684 if ((viewIndex + 1) > aListOfMap.count()) {
2685 aListOfMap.resize(viewIndex + 1);
2688 QString val((*valuesIt).c_str());
2689 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
2690 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
2691 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
2692 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
2693 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
2694 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
2695 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
2696 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
2697 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
2698 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
2699 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
2700 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
2701 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
2702 QStringList rgb = val.split(GEOM::subSectionSeparator());
2703 if (rgb.count() == 3) {
2704 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
2705 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
2707 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
2708 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
2709 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
2710 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
2711 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
2712 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
2713 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
2714 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
2715 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
2716 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
2717 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
2718 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
2720 } // for names/parameters iterator
2722 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2724 for (int index = 0; index < aListOfMap.count(); index++) {
2726 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
2728 //Get Visibility property of the current PropMap
2729 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
2730 SUIT_ViewManager* vman = lst.at(index);
2731 SUIT_ViewModel* vmodel = vman->getViewModel();
2732 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
2735 } // for entries iterator
2737 // update all VTK and OCC views
2738 QList<SUIT_ViewManager*> lst;
2739 getApp()->viewManagers(lst);
2740 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
2741 SUIT_ViewModel* vmodel = (*it)->getViewModel();
2744 if (vmodel->getType() == SVTK_Viewer::Type()) {
2745 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
2746 vtkView->getRenderer()->ResetCameraClippingRange();
2749 else if (vmodel->getType() == SOCC_Viewer::Type()) {
2750 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
2751 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
2758 void GeometryGUI::onViewAboutToShow()
2760 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
2761 QAction* a = action( GEOMOp::OpSwitchVectors );
2763 a->setEnabled(true);
2764 bool vmode = window->property("VectorsMode").toBool();
2765 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
2767 a->setText ( tr("MEN_VECTOR_MODE_ON") );
2768 a->setEnabled(false);
2773 \brief Return action by id
2774 \param id identifier of the action
2777 QAction* GeometryGUI::getAction(const int id) {
2782 \brief GEOM module message handler
2784 This method can be re-implemented in the subclasses.
2785 This is a GEOM module message handler.
2787 \param msg the message received.
2789 void GeometryGUI::message(const QString& msg)
2792 QStringList data = msg.split("/");
2793 const int nbStrings = data.count();
2795 if (nbStrings > 0) {
2796 if (data[0] == "modified") {
2798 QString anIOR = nbStrings > 1 ? data[1] : QString();
2800 if ( anIOR.isEmpty() ) {
2804 // Get the geom object.
2805 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
2807 // Clear the shape buffer
2808 GeometryGUI::ClearShapeBuffer (anObj);
2814 \brief Clears the shape buffer.
2816 This is a static method. It clears the shape buffer.
2818 \param theObj the object
2820 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
2822 if ( CORBA::is_nil( theObj ) )
2825 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
2826 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
2827 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
2829 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
2834 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
2839 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
2843 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
2844 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
2845 _PTR(GenericAttribute) anAttr;
2846 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
2847 _PTR(AttributeIOR) anIOR ( anAttr );
2848 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
2849 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
2855 \brief Returns the object from IOR.
2857 This is a static method. It returns the object from its IOR.
2859 \param IOR object IOR
2860 \return GEOM object.
2862 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
2864 GEOM::GEOM_Object_var geomObj;
2865 if ( !IOR.isEmpty() ) {
2866 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
2867 ( IOR.toLatin1().constData() );
2868 if ( !CORBA::is_nil( corbaObj ) )
2869 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
2871 return geomObj._retn();
2875 \brief Returns IOR of the object.
2877 This is a static method. It returns the object's IOR.
2879 \param object the GEOM object.
2880 \return object's IOR.
2882 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
2885 if ( !CORBA::is_nil( object ) ) {
2886 CORBA::String_var anIOR =
2887 SalomeApp_Application::orb()->object_to_string( object );
2894 \brief Check if this object is can't be renamed in place
2896 This method can be re-implemented in the subclasses.
2897 Return true in case if object isn't reference or component (module root).
2899 \param entry column id
2900 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
2902 bool GeometryGUI::renameAllowed( const QString& entry) const {
2904 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
2905 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
2906 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
2908 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
2912 Rename object by entry.
2913 \param entry entry of the object
2914 \param name new name of the object
2915 \brief Return \c true if rename operation finished successfully, \c false otherwise.
2917 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
2919 bool result = false;
2921 SalomeApp_Application* app =
2922 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
2923 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
2928 _PTR(Study) aStudy = appStudy->studyDS();
2933 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
2935 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
2939 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
2940 _PTR(GenericAttribute) anAttr;
2942 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
2943 _PTR(AttributeName) aName (anAttr);
2945 aName->SetValue( name.toLatin1().data() ); // rename the SObject
2946 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
2947 if (!CORBA::is_nil(anObj)) {
2948 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
2956 void GeometryGUI::updateMaterials()
2958 LightApp_Preferences* pref = preferences();
2960 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2961 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
2962 if ( !materials.contains( currentMaterial ) )
2963 // user material set as default in the preferences, might be removed
2964 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
2966 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
2968 setPreferenceProperty( prefItem->id(),
2969 "strings", materials );
2970 prefItem->retrieve();
2976 \brief Check if the module allows "drag" operation of its objects.
2978 Overloaded from LightApp_Module class.
2980 This function is a part of the general drag-n-drop mechanism.
2981 The goal of this function is to check data object passed as a parameter
2982 and decide if it can be dragged or no.
2984 \param what data object being tested for drag operation
2985 \return \c true if module allows dragging of the specified object
2986 \sa isDropAccepted(), dropObjects()
2988 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
2990 // we allow dragging object under root and object from folder
2991 int aLevel = what->level();
2992 bool anObjectInFolder = false;
2994 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
2996 _PTR(SObject) aSO = dataObj->object();
2998 _PTR(GenericAttribute) anAttr;
2999 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3000 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3001 _PTR(AttributeLocalID) aLocalID( anAttr );
3002 anObjectInFolder = aLocalID->Value() == 999;
3007 return aLevel == 2 || anObjectInFolder;
3011 \brief Check if the module allows "drop" operation on the given object.
3013 Overloaded from LightApp_Module class.
3015 This function is a part of the general drag-n-drop mechanism.
3016 The goal of this function is to check data object passed as a parameter
3017 and decide if it can be used as a target for the "drop" operation.
3018 The processing of the drop operation itself is done in the dropObjects() function.
3020 \param where target data object
3021 \return \c true if module supports dropping on the \a where data object
3022 \sa isDraggable(), dropObjects()
3024 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3026 // we allow dropping into folder and top-level GEOM object
3027 int aLevel = where->level();
3028 bool isFolder = false;
3030 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3032 _PTR(SObject) aSO = dataObj->object();
3034 _PTR(GenericAttribute) anAttr;
3035 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3036 _PTR(AttributeLocalID) aLocalID( anAttr );
3037 isFolder = aLocalID->Value() == 999;
3042 return aLevel == 1 || isFolder;
3046 \brief Complete drag-n-drop operation.
3048 Overloaded from LightApp_Module class.
3050 This function is a part of the general drag-n-drop mechanism.
3051 Its goal is to handle dropping of the objects being dragged according
3052 to the chosen operation (move). The dropping is performed in the
3053 context of the parent data object \a where and the \a row (position in the
3054 children index) at which the data should be dropped. If \a row is equal to -1,
3055 this means that objects are added to the end of the children list.
3057 \param what objects being dropped
3058 \param where target data object
3059 \param row child index at which the drop operation is performed
3060 \param action drag-n-drop operation (Qt::DropAction) - move
3062 \sa isDraggable(), isDropAccepted()
3064 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3065 const int row, Qt::DropAction action )
3067 if (action != Qt::CopyAction && action != Qt::MoveAction)
3068 return; // unsupported action
3070 // get parent object
3071 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3072 if ( !dataObj ) return; // wrong parent
3073 _PTR(SObject) parentObj = dataObj->object();
3075 // Find the current Study and StudyBuilder
3076 _PTR(Study) aStudy = parentObj->GetStudy();
3077 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3078 // collect all parents of the target node
3079 QStringList parentIDs;
3080 _PTR(SObject) parent = parentObj;
3081 while( !parent->IsNull() ) {
3082 parentIDs << parent->GetID().c_str();
3083 parent = aUseCaseBuilder->GetFather(parent);
3086 // collect objects being dropped
3087 GEOM::object_list_var objects = new GEOM::object_list();
3088 objects->length( what.count() );
3090 for ( int i = 0; i < what.count(); i++ ) {
3091 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3092 if ( !dataObj ) continue; // skip wrong objects
3093 _PTR(SObject) sobj = dataObj->object();
3094 // check that dropped object is not a parent of target object
3095 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3096 return; // it's not allowed to move node into it's child
3098 objects[i] = _CAST(SObject, sobj)->GetSObject();
3101 objects->length( count );
3103 // call engine function
3104 GetGeomGen()->Move( objects.in(), // what
3105 _CAST(SObject, parentObj)->GetSObject(), // where
3108 // update Object browser
3109 getApp()->updateObjectBrowser( false );