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 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
554 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
555 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
556 libName = "EntityGUI";
558 case GEOMOp::OpEdge: // MENU BUILD - EDGE
559 case GEOMOp::OpWire: // MENU BUILD - WIRE
560 case GEOMOp::OpFace: // MENU BUILD - FACE
561 case GEOMOp::OpShell: // MENU BUILD - SHELL
562 case GEOMOp::OpSolid: // MENU BUILD - SOLID
563 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
564 libName = "BuildGUI";
566 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
567 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
568 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
569 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
570 libName = "BooleanGUI";
572 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
573 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
574 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
575 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
576 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
577 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
578 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
579 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
580 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
581 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
582 libName = "TransformationGUI";
584 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
585 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
586 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
587 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
588 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
589 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
590 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
591 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
592 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
593 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
594 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
595 libName = "OperationGUI";
597 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
598 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
599 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
600 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
601 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
602 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
603 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
604 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
605 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
606 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
607 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
608 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
609 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
610 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
611 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
612 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
613 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
614 libName = "RepairGUI";
616 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
617 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
618 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
619 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
620 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
621 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
622 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
623 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
624 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
625 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
626 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
627 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
628 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
629 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
630 libName = "MeasureGUI";
632 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
633 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
634 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
635 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
636 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
637 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
638 libName = "GroupGUI";
640 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
641 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
642 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
643 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
644 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
645 libName = "BlocksGUI";
647 case GEOMOp::OpExportXAO: // MENU NEW ENTITY - IMPORTEXPORT - EXPORTXAO
648 case GEOMOp::OpImportXAO: // MENU NEW ENTITY - IMPORTEXPORT - IMPORTXAO
649 libName = "ImportExportGUI";
651 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
652 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
653 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
654 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
655 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
656 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
657 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
658 //libName = "AdvancedGUI";
661 if (myPluginActions.contains(id)) {
662 libName = myPluginActions[id].first;
664 GEOMPluginGUI* library = 0;
665 if ( !libName.isEmpty() ) {
667 libName = QString( "lib" ) + libName + ".so";
669 libName = libName + ".dll";
671 library = getPluginLibrary( libName );
674 // call method of corresponding GUI library
676 //QString action ("%1");
677 //action = action.arg(id);
679 //if( !theParam.isValid() )
680 library->OnGUIEvent( myPluginActions[id].second, desk );
682 // library->OnGUIEvent( id, desk, theParam);
685 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
687 updateCreationInfo();
693 GEOMGUI* library = 0;
694 if ( !libName.isEmpty() ) {
696 libName = QString( "lib" ) + libName + ".so";
698 libName = libName + ".dll";
700 library = getLibrary( libName );
703 // call method of corresponding GUI library
705 if( !theParam.isValid() )
706 library->OnGUIEvent( id, desk );
708 library->OnGUIEvent( id, desk, theParam);
711 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
713 updateCreationInfo();
716 //=================================================================================
717 // function : GeometryGUI::activateOperation()
719 //=================================================================================
720 bool GeometryGUI::activateOperation( int actionId )
722 OnGUIEvent(actionId);
726 //=================================================================================
727 // function : GeometryGUI::activateOperation()
729 //=================================================================================
730 bool GeometryGUI::activateOperation( const QString& actionId )
734 int id = actionId.toInt(&isOk);
741 //=================================================================================
742 // function : GeometryGUI::activateOperation()
744 //=================================================================================
745 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
749 QString pluginLib = plugin;
750 // TODO: if <plugin> is a plugin name, find plugin library name
751 if (myPluginLibs.contains(plugin))
752 pluginLib = myPluginLibs[plugin];
754 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
755 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
756 const PluginAction& anAction = actionsIter.value();
757 if (anAction.first == pluginLib && anAction.second == actionId) {
758 // activate operation
759 OnGUIEvent(actionsIter.key());
767 //=================================================================================
768 // function : GeometryGUI::OnKeyPress()
769 // purpose : Called when any key is pressed by user [static]
770 //=================================================================================
771 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
773 if ( !application() )
775 foreach ( GEOMGUI* lib, myGUIMap )
776 lib->OnKeyPress( e, application()->desktop(), w );
779 //=================================================================================
780 // function : GeometryGUI::OnMouseMove()
781 // purpose : Manages mouse move events [static]
782 //=================================================================================
783 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
785 if ( !application() )
787 foreach ( GEOMGUI* lib, myGUIMap )
788 lib->OnMouseMove( e, application()->desktop(), w );
791 //=================================================================================
792 // function : GeometryGUI::OnMouseRelease()
793 // purpose : Manages mouse release events [static]
794 //=================================================================================
795 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
797 if ( !application() )
799 foreach ( GEOMGUI* lib, myGUIMap )
800 lib->OnMouseRelease( e, application()->desktop(), w );
803 //=================================================================================
804 // function : GeometryGUI::OnMousePress()
805 // purpose : Manage mouse press events [static]
806 //=================================================================================
807 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
809 if ( !application() )
811 foreach ( GEOMGUI* lib, myGUIMap )
812 lib->OnMousePress( e, application()->desktop(), w );
815 //=======================================================================
816 // function : createGeomAction
818 //=======================================================================
819 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
820 const int accel, const bool toggle, const QString& shortcutAction )
822 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
823 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
824 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
826 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
828 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
829 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
831 application()->desktop(),
833 this, SLOT( OnGUIEvent() ),
837 //=======================================================================
838 // function : createOriginAndBaseVectors
840 //=======================================================================
841 void GeometryGUI::createOriginAndBaseVectors()
843 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
845 _PTR(Study) studyDS = appStudy->studyDS();
846 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
847 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
848 if ( !aBasicOperations->_is_nil() ) {
849 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
850 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
851 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
852 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
853 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
854 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
856 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
857 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
858 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
859 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
860 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
862 getApp()->updateObjectBrowser( true );
868 //=======================================================================
869 // function : GeometryGUI::initialize()
870 // purpose : Called when GEOM module is created
871 //=======================================================================
872 void GeometryGUI::initialize( CAM_Application* app )
874 SalomeApp_Module::initialize( app );
876 // ----- create actions --------------
878 createGeomAction( GEOMOp::OpImport, "IMPORT", "", Qt::ControlModifier + Qt::Key_I );
879 createGeomAction( GEOMOp::OpExport, "EXPORT", "", Qt::ControlModifier + Qt::Key_E );
881 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
883 createGeomAction( GEOMOp::OpPoint, "POINT" );
884 createGeomAction( GEOMOp::OpLine, "LINE" );
885 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
886 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
887 createGeomAction( GEOMOp::OpArc, "ARC" );
888 createGeomAction( GEOMOp::OpCurve, "CURVE" );
889 createGeomAction( GEOMOp::OpVector, "VECTOR" );
890 createGeomAction( GEOMOp::OpPlane, "PLANE" );
891 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
892 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
894 createGeomAction( GEOMOp::OpBox, "BOX" );
895 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
896 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
897 createGeomAction( GEOMOp::OpTorus, "TORUS" );
898 createGeomAction( GEOMOp::OpCone, "CONE" );
899 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
900 createGeomAction( GEOMOp::OpDisk, "DISK" );
902 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
903 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
904 createGeomAction( GEOMOp::OpFilling, "FILLING" );
905 createGeomAction( GEOMOp::OpPipe, "PIPE" );
906 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
908 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
909 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
910 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
911 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
912 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
914 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
915 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
917 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
919 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
920 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
922 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
923 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
924 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
926 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
928 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
930 createGeomAction( GEOMOp::OpEdge, "EDGE" );
931 createGeomAction( GEOMOp::OpWire, "WIRE" );
932 createGeomAction( GEOMOp::OpFace, "FACE" );
933 createGeomAction( GEOMOp::OpShell, "SHELL" );
934 createGeomAction( GEOMOp::OpSolid, "SOLID" );
935 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
937 createGeomAction( GEOMOp::OpFuse, "FUSE" );
938 createGeomAction( GEOMOp::OpCommon, "COMMON" );
939 createGeomAction( GEOMOp::OpCut, "CUT" );
940 createGeomAction( GEOMOp::OpSection, "SECTION" );
942 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
943 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
944 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
945 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
946 createGeomAction( GEOMOp::OpScale, "SCALE" );
947 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
948 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
949 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
950 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
952 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
953 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
954 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
955 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
956 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
957 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
958 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
959 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
960 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
961 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
962 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
964 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
965 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
966 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
968 createGeomAction( GEOMOp::OpSewing, "SEWING" );
969 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
970 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
971 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
972 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
973 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
974 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
975 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
976 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
977 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
978 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
979 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
980 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
981 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
982 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
983 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
984 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
986 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
987 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
988 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
989 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
990 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
991 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
992 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
993 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
995 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
996 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
997 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
998 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
999 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1000 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1002 #ifdef _DEBUG_ // PAL16821
1003 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1006 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1007 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1008 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1009 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1010 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1011 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1012 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1013 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1014 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1015 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1016 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1017 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1018 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1019 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1020 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1021 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1022 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1023 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1024 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1025 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1026 createGeomAction( GEOMOp::OpHide, "ERASE" );
1028 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1029 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1030 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1031 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1032 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1033 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1034 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1035 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1036 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1037 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1038 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1039 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1040 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1041 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1042 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1043 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1044 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1045 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1046 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1047 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1048 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1049 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1050 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1051 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1052 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1054 // Create actions for increase/decrease transparency shortcuts
1055 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1056 "Geometry:Increase transparency");
1057 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1058 "Geometry:Decrease transparency");
1060 // Create actions for increase/decrease number of isolines
1061 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1062 "Geometry:Increase number of isolines");
1063 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1064 "Geometry:Decrease number of isolines");
1066 // Import/Export XAO
1067 createGeomAction( GEOMOp::OpExportXAO, "EXPORTXAO" );
1068 createGeomAction( GEOMOp::OpImportXAO, "IMPORTXAO" );
1070 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1071 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1072 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1073 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1074 //@@ 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 @@//
1076 // ---- create menus --------------------------
1078 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1079 createMenu( separator(), fileId, 10 );
1080 createMenu( GEOMOp::OpImport, fileId, 10 );
1081 createMenu( GEOMOp::OpExport, fileId, 10 );
1082 createMenu( separator(), fileId, -1 );
1084 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1085 createMenu( GEOMOp::OpDelete, editId, -1 );
1087 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1089 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1090 createMenu( GEOMOp::OpPoint, basicId, -1 );
1091 createMenu( GEOMOp::OpLine, basicId, -1 );
1092 createMenu( GEOMOp::OpCircle, basicId, -1 );
1093 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1094 createMenu( GEOMOp::OpArc, basicId, -1 );
1095 createMenu( GEOMOp::OpCurve, basicId, -1 );
1096 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1097 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1098 createMenu( separator(), basicId, -1 );
1099 createMenu( GEOMOp::OpVector, basicId, -1 );
1100 createMenu( GEOMOp::OpPlane, basicId, -1 );
1101 createMenu( GEOMOp::OpLCS, basicId, -1 );
1102 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1104 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1105 createMenu( GEOMOp::OpBox, primId, -1 );
1106 createMenu( GEOMOp::OpCylinder, primId, -1 );
1107 createMenu( GEOMOp::OpSphere, primId, -1 );
1108 createMenu( GEOMOp::OpTorus, primId, -1 );
1109 createMenu( GEOMOp::OpCone, primId, -1 );
1110 createMenu( GEOMOp::OpRectangle, primId, -1 );
1111 createMenu( GEOMOp::OpDisk, primId, -1 );
1112 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1114 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1115 createMenu( GEOMOp::OpPrism, genId, -1 );
1116 createMenu( GEOMOp::OpRevolution, genId, -1 );
1117 createMenu( GEOMOp::OpFilling, genId, -1 );
1118 createMenu( GEOMOp::OpPipe, genId, -1 );
1119 #if OCC_VERSION_LARGE > 0x06050300
1120 createMenu( GEOMOp::OpPipePath, genId, -1 );
1123 int impexpId = createMenu( tr( "MEN_IMPORTEXPORT" ), newEntId, -1 );
1124 createMenu( GEOMOp::OpExportXAO, impexpId, -1 );
1125 createMenu( GEOMOp::OpImportXAO, impexpId, -1 );
1127 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1128 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1129 //@@ 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 @@//
1131 createMenu( separator(), newEntId, -1 );
1133 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1134 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1135 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1136 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1137 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1138 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1140 createMenu( separator(), newEntId, -1 );
1142 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1143 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1144 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1146 createMenu( separator(), newEntId, -1 );
1148 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1149 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1150 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1151 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1152 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1154 createMenu( separator(), newEntId, -1 );
1156 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1158 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1159 createMenu( GEOMOp::OpEdge, buildId, -1 );
1160 createMenu( GEOMOp::OpWire, buildId, -1 );
1161 createMenu( GEOMOp::OpFace, buildId, -1 );
1162 createMenu( GEOMOp::OpShell, buildId, -1 );
1163 createMenu( GEOMOp::OpSolid, buildId, -1 );
1164 createMenu( GEOMOp::OpCompound, buildId, -1 );
1166 createMenu( separator(), newEntId, -1 );
1168 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1170 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1173 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1175 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1176 createMenu( GEOMOp::OpFuse, boolId, -1 );
1177 createMenu( GEOMOp::OpCommon, boolId, -1 );
1178 createMenu( GEOMOp::OpCut, boolId, -1 );
1179 createMenu( GEOMOp::OpSection, boolId, -1 );
1181 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1182 createMenu( GEOMOp::OpTranslate, transId, -1 );
1183 createMenu( GEOMOp::OpRotate, transId, -1 );
1184 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1185 createMenu( GEOMOp::OpMirror, transId, -1 );
1186 createMenu( GEOMOp::OpScale, transId, -1 );
1187 createMenu( GEOMOp::OpOffset, transId, -1 );
1188 createMenu( GEOMOp::OpProjection, transId, -1 );
1189 createMenu( separator(), transId, -1 );
1190 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1191 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1193 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1194 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1195 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1196 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1198 createMenu( separator(), operId, -1 );
1200 createMenu( GEOMOp::OpPartition, operId, -1 );
1201 createMenu( GEOMOp::OpArchimede, operId, -1 );
1202 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1203 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1205 createMenu( separator(), operId, -1 );
1207 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1208 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1209 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1210 createMenu( GEOMOp::OpChamfer, operId, -1 );
1211 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1212 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1213 //createMenu( GEOMOp::OpClipping, operId, -1 );
1215 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1216 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1217 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1218 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1219 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1220 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1221 createMenu( GEOMOp::OpSewing, repairId, -1 );
1222 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1223 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1224 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1225 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1226 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1227 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1228 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1229 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1230 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1231 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1232 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1234 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1235 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1236 createMenu( GEOMOp::OpProperties, measurId, -1 );
1237 createMenu( separator(), measurId, -1 );
1238 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1239 createMenu( GEOMOp::OpInertia, measurId, -1 );
1240 createMenu( GEOMOp::OpNormale, measurId, -1 );
1241 createMenu( separator(), measurId, -1 );
1242 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1243 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1244 createMenu( separator(), measurId, -1 );
1246 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1247 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1248 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1249 createMenu( GEOMOp::OpAngle, dimId, -1 );
1251 createMenu( separator(), measurId, -1 );
1252 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1253 createMenu( separator(), measurId, -1 );
1254 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1255 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1256 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1257 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1258 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1260 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1261 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1262 createMenu( separator(), toolsId, -1 );
1263 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1266 createMenu( separator(), toolsId, -1 );
1267 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1268 createMenu( separator(), toolsId, -1 );
1270 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1271 createMenu( separator(), viewId, -1 );
1273 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1274 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1275 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1276 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1277 createMenu( separator(), dispmodeId, -1 );
1278 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1280 createMenu( separator(), viewId, -1 );
1281 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1282 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1283 createMenu( separator(), viewId, -1 );
1284 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1285 createMenu( separator(), viewId, -1 );
1289 because of these items are accessible through object browser and viewers
1290 we have removed they from main menu
1292 createMenu( GEOMOp::OpShow, viewId, -1 );
1293 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1294 createMenu( GEOMOp::OpHide, viewId, -1 );
1297 // ---- create toolbars --------------------------
1299 int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1300 createTool( GEOMOp::OpPoint, basicTbId );
1301 createTool( GEOMOp::OpLine, basicTbId );
1302 createTool( GEOMOp::OpCircle, basicTbId );
1303 createTool( GEOMOp::OpEllipse, basicTbId );
1304 createTool( GEOMOp::OpArc, basicTbId );
1305 createTool( GEOMOp::OpCurve, basicTbId );
1306 createTool( GEOMOp::OpVector, basicTbId );
1307 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1308 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1309 createTool( GEOMOp::OpPlane, basicTbId );
1310 createTool( GEOMOp::OpLCS, basicTbId );
1311 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1313 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ) );
1314 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1315 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1317 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1318 createTool( GEOMOp::OpBox, primTbId );
1319 createTool( GEOMOp::OpCylinder, primTbId );
1320 createTool( GEOMOp::OpSphere, primTbId );
1321 createTool( GEOMOp::OpTorus, primTbId );
1322 createTool( GEOMOp::OpCone, primTbId );
1323 createTool( GEOMOp::OpRectangle, primTbId );
1324 createTool( GEOMOp::OpDisk, primTbId );
1325 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1327 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ) );
1328 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1329 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1331 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1332 createTool( GEOMOp::OpFuse, boolTbId );
1333 createTool( GEOMOp::OpCommon, boolTbId );
1334 createTool( GEOMOp::OpCut, boolTbId );
1335 createTool( GEOMOp::OpSection, boolTbId );
1337 int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1338 createTool( GEOMOp::OpPrism, genTbId );
1339 createTool( GEOMOp::OpRevolution, genTbId );
1340 createTool( GEOMOp::OpFilling, genTbId );
1341 createTool( GEOMOp::OpPipe, genTbId );
1342 #if OCC_VERSION_LARGE > 0x06050300
1343 createTool( GEOMOp::OpPipePath, genTbId );
1346 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1347 createTool( GEOMOp::OpTranslate, transTbId );
1348 createTool( GEOMOp::OpRotate, transTbId );
1349 createTool( GEOMOp::OpChangeLoc, transTbId );
1350 createTool( GEOMOp::OpMirror, transTbId );
1351 createTool( GEOMOp::OpScale, transTbId );
1352 createTool( GEOMOp::OpOffset, transTbId );
1353 createTool( GEOMOp::OpProjection, transTbId );
1354 createTool( separator(), transTbId );
1355 createTool( GEOMOp::OpMultiTranslate, transTbId );
1356 createTool( GEOMOp::OpMultiRotate, transTbId );
1358 int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1359 createTool( GEOMOp::OpExplode, operTbId );
1360 createTool( GEOMOp::OpPartition, operTbId );
1361 createTool( GEOMOp::OpArchimede, operTbId );
1362 createTool( GEOMOp::OpShapesOnShape, operTbId );
1363 createTool( GEOMOp::OpSharedShapes, operTbId );
1365 int featTbId = createTool( tr( "TOOL_FEATURES" ) );
1366 createTool( GEOMOp::OpFillet1d, featTbId );
1367 createTool( GEOMOp::OpFillet2d, featTbId );
1368 createTool( GEOMOp::OpFillet3d, featTbId );
1369 createTool( GEOMOp::OpChamfer, featTbId );
1370 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1371 createTool( GEOMOp::OpExtrudedCut, featTbId );
1373 int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1374 createTool( GEOMOp::OpEdge, buildTbId );
1375 createTool( GEOMOp::OpWire, buildTbId );
1376 createTool( GEOMOp::OpFace, buildTbId );
1377 createTool( GEOMOp::OpShell, buildTbId );
1378 createTool( GEOMOp::OpSolid, buildTbId );
1379 createTool( GEOMOp::OpCompound, buildTbId );
1381 int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1382 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1383 createTool( GEOMOp::OpProperties, measureTbId );
1384 createTool( GEOMOp::OpCenterMass, measureTbId );
1385 createTool( GEOMOp::OpInertia, measureTbId );
1386 createTool( GEOMOp::OpNormale, measureTbId );
1387 createTool( separator(), measureTbId );
1388 createTool( GEOMOp::OpBoundingBox, measureTbId );
1389 createTool( GEOMOp::OpMinDistance, measureTbId );
1390 createTool( GEOMOp::OpAngle, measureTbId );
1391 createTool( GEOMOp::OpTolerance , measureTbId );
1392 createTool( separator(), measureTbId );
1393 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1394 createTool( GEOMOp::OpFreeFaces, measureTbId );
1395 createTool( separator(), measureTbId );
1396 createTool( GEOMOp::OpWhatIs, measureTbId );
1397 createTool( GEOMOp::OpCheckShape, measureTbId );
1398 createTool( GEOMOp::OpCheckCompound, measureTbId );
1399 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1400 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1402 int picturesTbId = createTool( tr( "TOOL_PICTURES" ) );
1403 createTool( GEOMOp::OpPictureImport, picturesTbId );
1405 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1408 int impexpTbId = createTool( tr( "TOOL_IMPORTEXPORT" ) );
1409 createTool( GEOMOp::OpExportXAO, impexpTbId );
1410 createTool( GEOMOp::OpImportXAO, impexpTbId );
1412 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1413 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1414 //@@ 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 @@//
1416 // ---- create popup menus --------------------------
1418 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1419 QString clientOCC = "(client='OCCViewer')";
1420 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1421 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1423 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1424 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1425 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1426 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1428 QString autoColorPrefix =
1429 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1431 QtxPopupMgr* mgr = popupMgr();
1433 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1434 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1435 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1436 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1437 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1438 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1439 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1440 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1442 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1443 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1444 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1445 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1446 mgr->insert( separator(), -1, -1 ); // -----------
1448 #if OCC_VERSION_LARGE > 0x06050200
1449 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1450 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1451 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1452 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1453 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1454 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1455 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1457 mgr->insert( separator(), -1, -1 ); // -----------
1458 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1459 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1460 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1461 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1462 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1463 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1464 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1465 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1466 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1467 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1468 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1469 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1470 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1471 mgr->insert( separator(), dispmodeId, -1 );
1472 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1473 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1474 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1475 mgr->insert( separator(), -1, -1 ); // -----------
1477 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1478 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1479 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1480 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1481 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1482 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1483 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1484 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1485 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1486 //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1487 mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1489 // material properties
1490 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1491 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1494 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1495 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1497 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1498 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1499 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1501 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1502 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1504 mgr->insert( separator(), -1, -1 ); // -----------
1505 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1506 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1507 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1508 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1509 mgr->insert( separator(), -1, -1 ); // -----------
1511 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1512 onlyComponent = "((type='Component') and selcount=1)",
1513 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1514 types = "'Shape' 'Group' 'FieldStep'";
1516 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1517 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1519 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1520 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1522 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1523 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1525 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1527 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1528 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1529 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1530 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1531 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1532 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1533 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1534 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1535 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1536 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1537 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1538 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1539 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1540 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1541 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1542 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1543 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1544 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1545 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1546 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1547 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1548 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1549 mgr->insert( separator(), selectonlyId, -1);
1550 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1551 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1552 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1553 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1554 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1555 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1556 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1558 mgr->insert( separator(), -1, -1 ); // -----------
1559 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1560 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1562 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1563 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1565 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1566 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1568 mgr->insert( separator(), -1, -1 ); // -----------
1569 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1570 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1572 mgr->insert( separator(), -1, -1 ); // -----------
1573 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1574 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1576 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1578 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1580 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1581 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1582 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1585 // create plugin actions and menus
1589 //=======================================================================
1590 // function : GeometryGUI::addPluginActions()
1592 //=======================================================================
1593 void GeometryGUI::addPluginActions()
1596 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1597 if (!resMgr) return;
1599 // Find names of a resource XML files ("GEOMActions.xml" and others);
1601 char* cenv = getenv("GEOM_PluginsList");
1603 PluginsXml.sprintf("%s", cenv);
1605 QStringList PluginsXmlList = PluginsXml.split(":", QString::SkipEmptyParts);
1606 if (PluginsXmlList.count() == 0) return;
1608 // get full names of xml files from PluginsXmlList
1609 QStringList xmlFiles;
1610 xmlFiles.append(QDir::home().filePath("CustomGeomPlugins.xml")); // may be inexistent
1611 for (int i = 0; i < PluginsXmlList.count(); i++) {
1612 PluginsXml = PluginsXmlList[ i ];
1614 // Find full path to the resource XML file
1615 QString xmlFile = resMgr->path("resources", "GEOM", PluginsXml + ".xml");
1616 if ( xmlFile.isEmpty() ) // try PLUGIN resources
1617 xmlFile = resMgr->path("resources", PluginsXml, PluginsXml + ".xml");
1618 if ( !xmlFile.isEmpty() )
1619 xmlFiles.append( xmlFile );
1622 // create "Advanced Operations" menu and corresponding toolbar
1623 //int advancedMenuId = createMenu(tr("MEN_ADVANCED"), -1, -1, 10);
1624 //int advancedTbarId = createTool(tr("TOOL_ADVANCED"));
1625 int id = GEOMOp::OpLastOperationID; // TODO?
1628 QString aNoAccessFiles;
1629 for (int i = 0; i < xmlFiles.count(); i++) {
1630 QString xmlFile = xmlFiles[ i ];
1632 QFile file (xmlFile);
1633 if (file.exists() && file.open(QIODevice::ReadOnly)) {
1636 GEOMGUI_XmlHandler* aXmlHandler = new GEOMGUI_XmlHandler();
1637 ASSERT(aXmlHandler);
1639 QXmlInputSource source (&file);
1640 QXmlSimpleReader reader;
1641 reader.setContentHandler(aXmlHandler);
1642 reader.setErrorHandler(aXmlHandler);
1643 bool ok = reader.parse(source);
1647 // bind action lib and label to its ID for activateOperation() method proper work
1648 myPluginLibs[aXmlHandler->myPluginData.myName] = aXmlHandler->myPluginData.myClientLib;
1650 QListIterator<GEOMGUI_ActionData> anActionsIter (aXmlHandler->myPluginData.myListOfActions);
1651 while (anActionsIter.hasNext()) {
1652 GEOMGUI_ActionData anActionData = anActionsIter.next();
1654 //QPixmap icon = resMgr->loadPixmap("GEOM", tr(anActionData.myIcon.toLatin1().constData()));
1655 QPixmap icon = resMgr->loadPixmap(aXmlHandler->myPluginData.myName,
1656 anActionData.myIcon.toLatin1().constData());
1658 // path to action in menu
1659 QStringList smenus = anActionData.myMenu.split( "/" );
1660 QString actionName = smenus.last();
1661 actionName = actionName.toUpper().prepend("MEN_");
1662 smenus.removeLast();
1664 // path to action in toolbar
1665 QStringList stools = anActionData.myTooltip.split( "/" );
1666 QString actionTool = stools.last();
1667 actionTool = actionTool.toUpper().prepend("TOP_");
1668 stools.removeLast();
1670 QString actionStat = anActionData.myStatusBar;
1671 actionStat = actionStat.toUpper().prepend("STB_");
1673 createAction(id, // ~ anActionData.myLabel
1674 tr(actionTool.toLatin1().constData()),
1676 tr(actionName.toLatin1().constData()),
1677 tr(actionStat.toLatin1().constData()),
1679 application()->desktop(),
1681 this, SLOT(OnGUIEvent()),
1682 QString() /*shortcutAction*/);
1685 foreach (QString subMenu, smenus) {
1686 subMenu = subMenu.toUpper().prepend("MEN_");
1687 menuId = createMenu(tr(subMenu.toLatin1().constData()), menuId, -1);
1689 //createMenu(id, pluginMenuId, -1);
1690 createMenu(id, menuId, -1);
1692 QString subTool = stools[0];
1693 subTool = subTool.toUpper().prepend("TOOL_");
1694 int toolId = createTool(tr(subTool.toLatin1().constData()));
1695 //createTool(id, advancedTbarId);
1696 createTool(id, toolId);
1698 // add action id to map
1699 PluginAction anAction (aXmlHandler->myPluginData.myClientLib, anActionData.myLabel);
1700 myPluginActions[id] = anAction;
1706 SUIT_MessageBox::critical(application()->desktop(),
1707 tr("INF_PARSE_ERROR"),
1708 tr(aXmlHandler->errorProtocol().toLatin1().data()));
1712 else if ( i > 0 ) { // 1st is ~/CustomGeomPlugins.xml
1713 if (aNoAccessFiles.isEmpty())
1714 aNoAccessFiles = xmlFile;
1716 aNoAccessFiles += ", " + xmlFile;
1718 } // end loop on xmlFiles
1720 if (!aNoAccessFiles.isEmpty()) {
1721 QString aMess = QObject::tr("PLUGIN_FILE_CANT_OPEN") + " " + aNoAccessFiles + "\n";
1722 aMess += QObject::tr("PLUGIN_FILE_CHECK_VARIABLE");
1723 SUIT_MessageBox::warning(application()->desktop(), tr("GEOM_WRN_WARNING"), aMess);
1727 //=======================================================================
1728 // function : GeometryGUI::activateModule()
1729 // purpose : Called when GEOM module is activated
1730 //=======================================================================
1731 bool GeometryGUI::activateModule( SUIT_Study* study )
1733 if ( CORBA::is_nil( myComponentGeom ) )
1736 bool res = SalomeApp_Module::activateModule( study );
1740 setMenuShown( true );
1741 setToolShown( true );
1743 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1744 PyGILState_STATE gstate = PyGILState_Ensure();
1745 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1746 if ( !pluginsmanager ) {
1750 PyObjWrapper result =
1751 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1752 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1753 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1757 PyGILState_Release(gstate);
1758 // end of GEOM plugins loading
1760 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1761 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1763 // Reset actions accelerator keys
1764 action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1765 action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1766 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1768 GUIMap::Iterator it;
1769 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1770 it.value()->activate( application()->desktop() );
1772 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1774 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1775 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1776 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1778 if ( !myCreationInfoWdg )
1779 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1780 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1781 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1783 SUIT_ViewManager* vm;
1784 ViewManagerList OCCViewManagers, VTKViewManagers;
1786 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1787 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1788 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1789 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1791 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1792 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1793 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1794 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1797 SALOME_ListIO selected;
1798 sm->selectedObjects( selected );
1799 sm->clearSelected();
1801 // disable OCC selectors
1802 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1803 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1804 while ( itOCCSel.hasNext() )
1805 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1806 sr->setEnabled(true);
1808 // disable VTK selectors
1809 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1810 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1811 while ( itVTKSel.hasNext() )
1812 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1813 sr->setEnabled(true);
1815 sm->setSelectedObjects( selected, true ); //NPAL 19674
1817 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1819 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1821 // 0020836 (Basic vectors and origin)
1822 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1823 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1824 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1826 _PTR(Study) studyDS = appStudy->studyDS();
1828 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1829 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1830 createOriginAndBaseVectors();
1838 //=======================================================================
1839 // function : GeometryGUI::deactivateModule()
1840 // purpose : Called when GEOM module is deactivated
1841 //=======================================================================
1842 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1844 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1846 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1848 setMenuShown( false );
1849 setToolShown( false );
1851 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1852 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1854 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1856 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1857 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1858 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1859 myCreationInfoWdg = 0;
1861 EmitSignalCloseAllDialogs();
1863 GUIMap::Iterator it;
1864 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1865 it.value()->deactivate();
1867 // Unset actions accelerator keys
1868 action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1869 action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1870 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1872 qDeleteAll(myOCCSelectors);
1873 myOCCSelectors.clear();
1874 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1876 qDeleteAll(myVTKSelectors);
1877 myVTKSelectors.clear();
1878 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1880 return SalomeApp_Module::deactivateModule( study );
1883 //=======================================================================
1884 // function : onWindowActivated()
1885 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1886 //=======================================================================
1887 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1892 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1893 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1895 // disable non-OCC viewframe menu commands
1896 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1897 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1898 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1899 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1900 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1901 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1902 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1904 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1905 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1906 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1907 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1909 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1912 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1914 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1915 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1916 if ( myCreationInfoWdg )
1917 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1920 void GeometryGUI::viewManagers( QStringList& lst ) const
1922 lst.append( OCCViewer_Viewer::Type() );
1925 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1927 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1929 qDebug( "connect" );
1930 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1931 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1932 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1933 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1934 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1935 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1936 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1937 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1939 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1940 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1942 // disable OCC selectors
1943 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1944 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1945 while ( itOCCSel.hasNext() )
1946 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1947 sr->setEnabled(true);
1949 else if ( vm->getType() == SVTK_Viewer::Type() )
1951 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1952 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1954 // disable VTK selectors
1955 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1956 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1957 while ( itVTKSel.hasNext() )
1958 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1959 sr->setEnabled(true);
1963 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1965 SUIT_ViewModel* viewer = vm->getViewModel();
1966 if ( vm->getType() == OCCViewer_Viewer::Type() )
1968 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1969 while ( itOCCSel.hasNext() )
1970 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1971 if ( sr->viewer() == viewer )
1973 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1977 if ( vm->getType() == SVTK_Viewer::Type() )
1979 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1980 while ( itVTKSel.hasNext() )
1981 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1982 if ( sr->viewer() == viewer )
1984 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1990 //================================================================================
1992 * \brief Slot called when selection changed. Shows creation info of a selected object
1994 //================================================================================
1996 void GeometryGUI::updateCreationInfo()
1998 if ( myCreationInfoWdg )
1999 myCreationInfoWdg->clear();
2001 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2002 // if ( !myCreationInfoWdg->isVisible() )
2005 // look for a sole selected GEOM_Object
2006 GEOM::GEOM_BaseObject_var geomObj;
2008 SALOME_ListIO selected;
2009 getApp()->selectionMgr()->selectedObjects( selected );
2011 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2012 SALOME_ListIteratorOfListIO selIt( selected );
2013 for ( ; selIt.More(); selIt.Next() )
2015 Handle(SALOME_InteractiveObject) io = selIt.Value();
2016 if ( !io->hasEntry() ) continue;
2017 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2018 if ( !sobj ) continue;
2019 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2020 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2021 if ( !gobj->_is_nil() )
2023 if ( !geomObj->_is_nil() )
2024 return; // several GEOM objects selected
2028 if ( geomObj->_is_nil() ) return;
2030 // pass creation info of geomObj to myCreationInfoWdg
2032 if ( myCreationInfoWdg ) {
2034 QString operationName;
2035 myCreationInfoWdg->setOperation( icon, operationName );
2039 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2041 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2042 QString name = info->operationName.in();
2043 if ( !name.isEmpty() ) {
2044 icon = resMgr->loadPixmap( "GEOM", tr( ("ICO_"+name).toLatin1().constData() ), false );
2045 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2046 if ( operationName.startsWith( "MEN_" ))
2047 operationName = name; // no translation
2048 myCreationInfoWdg->setOperation( icon, operationName );
2050 for ( size_t i = 0; i < info->params.length(); ++i )
2051 myCreationInfoWdg->addParam( info->params[i].name.in(),
2052 info->params[i].value.in() );
2061 void GeometryGUI::onAutoBringToFront()
2063 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front" );
2064 if( !isAutoBringToFront )
2067 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2068 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2071 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2072 if (!appStudy) return;
2074 GEOM_Displayer displayer( appStudy );
2076 SALOME_View* window = displayer.GetActiveView();
2077 if ( !window ) return;
2079 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2081 SALOME_ListIO selected;
2082 getApp()->selectionMgr()->selectedObjects( selected );
2083 SALOME_ListIO allObjects;
2084 window->GetVisible( allObjects );
2086 for ( SALOME_ListIteratorOfListIO It( allObjects ); It.More(); It.Next() ) {
2087 Handle( SALOME_InteractiveObject ) io = It.Value();
2088 bool isSelected = false;
2089 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
2090 Handle( SALOME_InteractiveObject ) ioSelected = It.Value();
2091 if( io->isSame( ioSelected ) )
2094 QVariant v = appStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), QVariant() );
2095 bool isTopLevel = v.isValid() ? v.toBool() : false;
2096 if( isSelected && !isTopLevel ) {
2097 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2098 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2100 else if( !isSelected ) {
2101 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2102 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2105 displayer.UpdateViewer();
2106 GeometryGUI::Modified();
2109 void GeometryGUI::updateFieldColorScale()
2111 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2113 GEOM_Displayer aDisplayer( aStudy );
2114 aDisplayer.UpdateColorScale();
2118 QString GeometryGUI::engineIOR() const
2120 if ( !CORBA::is_nil( GetGeomGen() ) )
2121 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2125 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2126 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2128 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
2130 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2132 theWidth = theHeight = 0;
2134 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2135 Handle(TColStd_HArray1OfByte) aTexture;
2137 Handle(Graphic3d_HArray1OfBytes) aTexture;
2141 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2142 aTexture = aTextureMap[ theId ];
2143 if ( aTexture.IsNull() ) {
2144 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2145 if ( !aInsOp->_is_nil() ) {
2146 CORBA::Long aWidth, aHeight;
2147 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2148 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2150 theHeight = aHeight;
2152 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2153 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2155 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
2158 for (int i = 0; i < aStream->length(); i++)
2159 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2160 aTextureMap[ theId ] = aTexture;
2168 LightApp_Selection* GeometryGUI::createSelection() const
2170 return new GEOMGUI_Selection();
2173 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2175 SalomeApp_Module::contextMenuPopup( client, menu, title );
2177 getApp()->selectionMgr()->selectedObjects( lst );
2179 //Add submenu for predefined materials
2180 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2181 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2182 QtxPopupMgr* mgr = popupMgr();
2183 //get parrent for submenu
2184 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2186 QMenu* oldMenu = act->menu() ;
2191 QMenu* matMenu = new QMenu();
2192 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2194 //Get current material model for the object
2196 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2197 if ( anApp && anApp->activeViewManager() ) {
2198 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2200 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2203 QString curModel = "";
2204 if ( v.canConvert<QString>() ) curModel = v.toString();
2205 // get list of all predefined materials
2206 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2208 foreach ( QString material, materials )
2210 QAction* menAct = matMenu->addAction( material );
2211 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2212 signalMapper->setMapping( menAct, material );
2213 menAct->setCheckable( true );
2214 // Set checked if this material is current
2215 Material_Model aModel;
2216 aModel.fromResources( material );
2217 if ( !found && aModel.toProperties() == curModel ) {
2218 menAct->setChecked( true );
2222 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2223 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2224 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2225 this, SLOT( OnSetMaterial( const QString & ) ) );
2226 act->setMenu( matMenu );
2230 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2231 Handle(SALOME_InteractiveObject) io = lst.First();
2232 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2233 _PTR(Study) study = appStudy->studyDS();
2234 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2236 QString aName = QString( obj->GetName().c_str() );
2237 aName.remove( QRegExp("\\s+$") );
2243 void GeometryGUI::OnSetMaterial(const QString& theName)
2245 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2249 void GeometryGUI::createPreferences()
2251 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2253 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2254 setPreferenceProperty( genGroup, "columns", 2 );
2256 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2257 LightApp_Preferences::Selector,
2258 "Geometry", "display_mode" );
2260 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2261 LightApp_Preferences::Color, "Geometry", "shading_color" );
2263 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2264 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2266 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2267 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2269 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2270 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2272 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2273 LightApp_Preferences::Color, "Geometry", "line_color" );
2275 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2276 LightApp_Preferences::Color, "Geometry", "point_color" );
2278 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2279 LightApp_Preferences::Color, "Geometry", "isos_color" );
2281 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2282 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2284 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2285 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2287 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2288 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2290 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2291 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2293 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2294 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2296 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2297 LightApp_Preferences::Selector,
2298 "Geometry", "material" );
2300 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2301 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2307 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2308 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2310 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2311 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2313 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2314 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2316 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2317 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2319 for (int i = 0; i < nb; i++) {
2320 setPreferenceProperty( wd[i], "min", 1 );
2321 setPreferenceProperty( wd[i], "max", 5 );
2324 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2325 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2327 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2328 setPreferenceProperty( isoGroup, "columns", 2 );
2329 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2330 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2331 setPreferenceProperty( isoU, "min", 0 );
2332 setPreferenceProperty( isoU, "max", 100000 );
2333 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2334 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2335 setPreferenceProperty( isoV, "min", 0 );
2336 setPreferenceProperty( isoV, "max", 100000 );
2338 // Quantities with individual precision settings
2339 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2340 setPreferenceProperty( precGroup, "columns", 2 );
2342 const int nbQuantities = 8;
2343 int prec[nbQuantities], ii = 0;
2344 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2345 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2346 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2347 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2348 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2349 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2350 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2351 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2352 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2353 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2354 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2355 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2356 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2357 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2358 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2359 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2361 // Set property for precision value for spinboxes
2362 for ( ii = 0; ii < nbQuantities; ii++ ){
2363 setPreferenceProperty( prec[ii], "min", -14 );
2364 setPreferenceProperty( prec[ii], "max", 14 );
2365 setPreferenceProperty( prec[ii], "precision", 2 );
2368 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2369 setPreferenceProperty( VertexGroup, "columns", 2 );
2371 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2372 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2374 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2375 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2377 // Set property for default display mode
2378 QStringList aModesList;
2379 aModesList.append( tr("MEN_WIREFRAME") );
2380 aModesList.append( tr("MEN_SHADING") );
2381 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2383 QList<QVariant> anIndexesList;
2384 anIndexesList.append(0);
2385 anIndexesList.append(1);
2386 anIndexesList.append(2);
2388 setPreferenceProperty( dispmode, "strings", aModesList );
2389 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2391 // Set property for top level display mode
2392 QStringList aTopModesList;
2393 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2394 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2395 aTopModesList.append( tr("MEN_WIREFRAME") );
2396 aTopModesList.append( tr("MEN_SHADING") );
2397 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2399 QList<QVariant> aTopIndexesList;
2400 aTopIndexesList.append(0);
2401 aTopIndexesList.append(1);
2402 aTopIndexesList.append(2);
2403 aTopIndexesList.append(3);
2404 aTopIndexesList.append(4);
2406 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2407 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2409 // Set property for step value for spinboxes
2410 setPreferenceProperty( step, "min", 1 );
2411 setPreferenceProperty( step, "max", 10000 );
2412 setPreferenceProperty( step, "precision", 3 );
2414 // Set property for deflection value for spinboxes
2415 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2416 setPreferenceProperty( defl, "max", 1.0 );
2417 setPreferenceProperty( defl, "step", 1.0e-04 );
2418 setPreferenceProperty( defl, "precision", 6 );
2420 // Set property for default material
2421 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2423 // Set property vertex marker type
2424 QList<QVariant> aMarkerTypeIndicesList;
2425 QList<QVariant> aMarkerTypeIconsList;
2427 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2428 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2429 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2430 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2431 aMarkerTypeIndicesList << (i-1);
2432 aMarkerTypeIconsList << pixmap;
2435 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2436 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2438 // Set property for vertex marker scale
2439 QList<QVariant> aMarkerScaleIndicesList;
2440 QStringList aMarkerScaleValuesList;
2442 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2443 aMarkerScaleIndicesList << iii;
2444 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2447 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2448 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2450 // Scalar bar for field step presentation
2451 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2452 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2454 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2455 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2456 setPreferenceProperty( sbXPosition, "min", 0 );
2457 setPreferenceProperty( sbXPosition, "max", 1 );
2458 setPreferenceProperty( sbXPosition, "step", 0.05 );
2460 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2461 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2462 setPreferenceProperty( sbYPosition, "min", 0 );
2463 setPreferenceProperty( sbYPosition, "max", 1 );
2464 setPreferenceProperty( sbYPosition, "step", 0.05 );
2466 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2467 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2468 setPreferenceProperty( sbWidth, "min", 0 );
2469 setPreferenceProperty( sbWidth, "max", 1 );
2470 setPreferenceProperty( sbWidth, "step", 0.05 );
2472 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2473 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2474 setPreferenceProperty( sbHeight, "min", 0 );
2475 setPreferenceProperty( sbHeight, "max", 1 );
2476 setPreferenceProperty( sbHeight, "step", 0.05 );
2478 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2479 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2480 setPreferenceProperty( sbTextHeight, "min", 6 );
2481 setPreferenceProperty( sbTextHeight, "max", 24 );
2482 setPreferenceProperty( sbTextHeight, "step", 1 );
2484 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2485 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2486 setPreferenceProperty( sbNbIntervals, "min", 2 );
2487 setPreferenceProperty( sbNbIntervals, "max", 64 );
2488 setPreferenceProperty( sbNbIntervals, "step", 1 );
2490 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2491 setPreferenceProperty( originGroup, "columns", 2 );
2493 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2494 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2495 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2496 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2498 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2499 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2501 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2502 setPreferenceProperty( operationsGroup, "columns", 2 );
2504 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2505 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2508 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2510 if (section == "Geometry") {
2511 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2512 if (param == QString("SettingsGeomStep")) {
2513 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2514 EmitSignalDefaultStepValueChanged(spin_step);
2516 else if (param == QString("toplevel_color")) {
2517 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2518 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2520 else if (param == QString("toplevel_dm")) {
2521 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2523 else if (param == QString("scalar_bar_x_position") ||
2524 param == QString("scalar_bar_y_position") ||
2525 param == QString("scalar_bar_width") ||
2526 param == QString("scalar_bar_height") ||
2527 param == QString("scalar_bar_text_height") ||
2528 param == QString("scalar_bar_nb_intervals")) {
2529 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2531 GEOM_Displayer aDisplayer( aStudy );
2532 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2533 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps );
2539 LightApp_Displayer* GeometryGUI::displayer()
2542 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2546 void GeometryGUI::setLocalSelectionMode(const int mode)
2548 myLocalSelectionMode = mode;
2551 int GeometryGUI::getLocalSelectionMode() const
2553 return myLocalSelectionMode;
2556 const char gSeparator = '_'; // character used to separate parameter names
2557 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2560 * \brief Store visual parameters
2562 * This method is called just before the study document is saved.
2563 * Store visual parameters in AttributeParameter attribute(s)
2565 void GeometryGUI::storeVisualParameters (int savePoint)
2567 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2568 if ( !appStudy || !appStudy->studyDS() )
2570 _PTR(Study) studyDS = appStudy->studyDS();
2572 // componentName is used for encoding of entries when storing them in IParameters
2573 std::string componentName = myComponentGeom->ComponentDataType();
2574 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2575 //if (!aSComponent) return;
2578 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2579 componentName.c_str(),
2581 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2583 QList<SUIT_ViewManager*> lst;
2584 QList<SUIT_ViewManager*>::Iterator it;
2586 // main cycle to store parameters of displayed objects
2588 getApp()->viewManagers(lst);
2589 for (it = lst.begin(); it != lst.end(); it++) {
2590 SUIT_ViewManager* vman = *it;
2591 QString vType = vman->getType();
2592 int aMgrId = vman->getGlobalId();
2593 // saving VTK actors properties
2594 QVector<SUIT_ViewWindow*> views = vman->getViews();
2595 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2596 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
2597 ObjMap::ConstIterator o_it = anObjects.begin();
2598 for (; o_it != anObjects.end(); o_it++) {
2599 const PropMap aProps = o_it.value();
2601 //Check that object exists in the study
2602 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2603 if ( !obj || !(aProps.count() > 0))
2605 // entry is "encoded" = it does NOT contain component adress, since it is a
2606 // subject to change on next component loading
2608 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2610 _PTR(GenericAttribute) anAttr;
2611 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2614 QString param, occParam = vType;
2615 occParam += GEOM::sectionSeparator();
2616 occParam += QString::number(aMgrId);
2617 occParam += GEOM::sectionSeparator();
2619 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2620 param = occParam + GEOM::propertyName( GEOM::Visibility );
2621 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2624 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2625 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2626 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2629 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2630 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2632 val << QString::number(c.redF());
2633 val << QString::number(c.greenF());
2634 val << QString::number(c.blueF());
2635 param = occParam + GEOM::propertyName( GEOM::Color );
2636 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2639 if (vType == SVTK_Viewer::Type()) {
2640 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2641 param = occParam + GEOM::propertyName( GEOM::Opacity );
2642 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2644 } else if (vType == SOCC_Viewer::Type()) {
2645 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2646 param = occParam + GEOM::propertyName( GEOM::Transparency );
2647 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2650 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2651 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2652 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2656 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2657 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2658 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2661 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2662 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2663 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2666 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2667 param = occParam + GEOM::propertyName( GEOM::Deflection );
2668 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2671 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2672 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2673 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2674 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2677 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2678 param = occParam + GEOM::propertyName( GEOM::Material );
2679 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2682 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2683 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2684 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2687 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2688 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2689 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2691 } // object iterator
2693 } // for (viewManagers)
2697 * \brief Restore visual parameters
2699 * This method is called after the study document is opened.
2700 * Restore visual parameters from AttributeParameter attribute(s)
2702 void GeometryGUI::restoreVisualParameters (int savePoint)
2704 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2705 if (!appStudy || !appStudy->studyDS())
2707 _PTR(Study) studyDS = appStudy->studyDS();
2709 // componentName is used for encoding of entries when storing them in IParameters
2710 std::string componentName = myComponentGeom->ComponentDataType();
2711 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2712 //if (!aSComponent) return;
2715 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2716 componentName.c_str(),
2718 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2720 std::vector<std::string> entries = ip->getEntries();
2722 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2724 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2725 QString entry (ip->decodeEntry(*entIt).c_str());
2727 // Check that the entry corresponds to a real object in the Study
2728 // as the object may be deleted or modified after the visual state is saved.
2729 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2730 if (!so) continue; //Skip the not existent entry
2732 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2733 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2735 std::vector<std::string>::iterator namesIt = paramNames.begin();
2736 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2738 // actors are stored in a map after displaying of them for
2739 // quicker access in the future: map < viewID to actor >
2740 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2741 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2743 QString viewerTypStr;
2744 QString viewIndexStr;
2746 QVector<PropMap> aListOfMap;
2748 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2750 // visual parameters are stored in strings as follows: ViewerType_ViewIndex_ParamName.
2751 // '_' is used as separator and should not be used in viewer type or parameter names.
2752 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2753 if (lst.size() != 3)
2756 viewerTypStr = lst[0];
2757 viewIndexStr = lst[1];
2758 QString paramNameStr = lst[2];
2761 viewIndex = viewIndexStr.toUInt(&ok);
2762 if (!ok) // bad conversion of view index to integer
2765 if ((viewIndex + 1) > aListOfMap.count()) {
2766 aListOfMap.resize(viewIndex + 1);
2769 QString val((*valuesIt).c_str());
2770 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
2771 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
2772 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
2773 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
2774 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
2775 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
2776 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
2777 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
2778 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
2779 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
2780 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
2781 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
2782 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
2783 QStringList rgb = val.split(GEOM::subSectionSeparator());
2784 if (rgb.count() == 3) {
2785 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
2786 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
2788 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
2789 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
2790 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
2791 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
2792 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
2793 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
2794 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
2795 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
2796 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
2797 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
2798 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
2799 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
2801 } // for names/parameters iterator
2803 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2805 for (int index = 0; index < aListOfMap.count(); index++) {
2807 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
2809 //Get Visibility property of the current PropMap
2810 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
2811 SUIT_ViewManager* vman = lst.at(index);
2812 SUIT_ViewModel* vmodel = vman->getViewModel();
2813 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
2816 } // for entries iterator
2818 // update all VTK and OCC views
2819 QList<SUIT_ViewManager*> lst;
2820 getApp()->viewManagers(lst);
2821 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
2822 SUIT_ViewModel* vmodel = (*it)->getViewModel();
2825 if (vmodel->getType() == SVTK_Viewer::Type()) {
2826 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
2827 vtkView->getRenderer()->ResetCameraClippingRange();
2830 else if (vmodel->getType() == SOCC_Viewer::Type()) {
2831 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
2832 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
2839 void GeometryGUI::onViewAboutToShow()
2841 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
2842 QAction* a = action( GEOMOp::OpSwitchVectors );
2844 a->setEnabled(true);
2845 bool vmode = window->property("VectorsMode").toBool();
2846 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
2848 a->setText ( tr("MEN_VECTOR_MODE_ON") );
2849 a->setEnabled(false);
2854 \brief Return action by id
2855 \param id identifier of the action
2858 QAction* GeometryGUI::getAction(const int id) {
2863 \brief GEOM module message handler
2865 This method can be re-implemented in the subclasses.
2866 This is a GEOM module message handler.
2868 \param msg the message received.
2870 void GeometryGUI::message(const QString& msg)
2873 QStringList data = msg.split("/");
2874 const int nbStrings = data.count();
2876 if (nbStrings > 0) {
2877 if (data[0] == "modified") {
2879 QString anIOR = nbStrings > 1 ? data[1] : QString();
2881 if ( anIOR.isEmpty() ) {
2885 // Get the geom object.
2886 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
2888 // Clear the shape buffer
2889 GeometryGUI::ClearShapeBuffer (anObj);
2895 \brief Clears the shape buffer.
2897 This is a static method. It clears the shape buffer.
2899 \param theObj the object
2901 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
2903 if ( CORBA::is_nil( theObj ) )
2906 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
2907 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
2908 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
2910 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
2915 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
2920 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
2924 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
2925 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
2926 _PTR(GenericAttribute) anAttr;
2927 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
2928 _PTR(AttributeIOR) anIOR ( anAttr );
2929 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
2930 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
2936 \brief Returns the object from IOR.
2938 This is a static method. It returns the object from its IOR.
2940 \param IOR object IOR
2941 \return GEOM object.
2943 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
2945 GEOM::GEOM_Object_var geomObj;
2946 if ( !IOR.isEmpty() ) {
2947 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
2948 ( IOR.toLatin1().constData() );
2949 if ( !CORBA::is_nil( corbaObj ) )
2950 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
2952 return geomObj._retn();
2956 \brief Returns IOR of the object.
2958 This is a static method. It returns the object's IOR.
2960 \param object the GEOM object.
2961 \return object's IOR.
2963 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
2966 if ( !CORBA::is_nil( object ) ) {
2967 CORBA::String_var anIOR =
2968 SalomeApp_Application::orb()->object_to_string( object );
2975 \brief Check if this object is can't be renamed in place
2977 This method can be re-implemented in the subclasses.
2978 Return true in case if object isn't reference or component (module root).
2980 \param entry column id
2981 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
2983 bool GeometryGUI::renameAllowed( const QString& entry) const {
2985 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
2986 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
2987 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
2989 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
2993 Rename object by entry.
2994 \param entry entry of the object
2995 \param name new name of the object
2996 \brief Return \c true if rename operation finished successfully, \c false otherwise.
2998 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3000 bool result = false;
3002 SalomeApp_Application* app =
3003 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3004 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3009 _PTR(Study) aStudy = appStudy->studyDS();
3014 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3016 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3020 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3021 _PTR(GenericAttribute) anAttr;
3023 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3024 _PTR(AttributeName) aName (anAttr);
3026 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3027 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3028 if (!CORBA::is_nil(anObj)) {
3029 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3037 void GeometryGUI::updateMaterials()
3039 LightApp_Preferences* pref = preferences();
3041 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3042 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3043 if ( !materials.contains( currentMaterial ) )
3044 // user material set as default in the preferences, might be removed
3045 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3047 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3049 setPreferenceProperty( prefItem->id(),
3050 "strings", materials );
3051 prefItem->retrieve();
3057 \brief Check if the module allows "drag" operation of its objects.
3059 Overloaded from LightApp_Module class.
3061 This function is a part of the general drag-n-drop mechanism.
3062 The goal of this function is to check data object passed as a parameter
3063 and decide if it can be dragged or no.
3065 \param what data object being tested for drag operation
3066 \return \c true if module allows dragging of the specified object
3067 \sa isDropAccepted(), dropObjects()
3069 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3071 // we allow dragging object under root and object from folder
3072 int aLevel = what->level();
3073 bool anObjectInFolder = false;
3075 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3077 _PTR(SObject) aSO = dataObj->object();
3079 _PTR(GenericAttribute) anAttr;
3080 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3081 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3082 _PTR(AttributeLocalID) aLocalID( anAttr );
3083 anObjectInFolder = aLocalID->Value() == 999;
3088 return aLevel == 2 || anObjectInFolder;
3092 \brief Check if the module allows "drop" operation on the given object.
3094 Overloaded from LightApp_Module class.
3096 This function is a part of the general drag-n-drop mechanism.
3097 The goal of this function is to check data object passed as a parameter
3098 and decide if it can be used as a target for the "drop" operation.
3099 The processing of the drop operation itself is done in the dropObjects() function.
3101 \param where target data object
3102 \return \c true if module supports dropping on the \a where data object
3103 \sa isDraggable(), dropObjects()
3105 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3107 // we allow dropping into folder and top-level GEOM object
3108 int aLevel = where->level();
3109 bool isFolder = false;
3111 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3113 _PTR(SObject) aSO = dataObj->object();
3115 _PTR(GenericAttribute) anAttr;
3116 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3117 _PTR(AttributeLocalID) aLocalID( anAttr );
3118 isFolder = aLocalID->Value() == 999;
3123 return aLevel == 1 || isFolder;
3127 \brief Complete drag-n-drop operation.
3129 Overloaded from LightApp_Module class.
3131 This function is a part of the general drag-n-drop mechanism.
3132 Its goal is to handle dropping of the objects being dragged according
3133 to the chosen operation (move). The dropping is performed in the
3134 context of the parent data object \a where and the \a row (position in the
3135 children index) at which the data should be dropped. If \a row is equal to -1,
3136 this means that objects are added to the end of the children list.
3138 \param what objects being dropped
3139 \param where target data object
3140 \param row child index at which the drop operation is performed
3141 \param action drag-n-drop operation (Qt::DropAction) - move
3143 \sa isDraggable(), isDropAccepted()
3145 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3146 const int row, Qt::DropAction action )
3148 if (action != Qt::CopyAction && action != Qt::MoveAction)
3149 return; // unsupported action
3151 // get parent object
3152 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3153 if ( !dataObj ) return; // wrong parent
3154 _PTR(SObject) parentObj = dataObj->object();
3156 // Find the current Study and StudyBuilder
3157 _PTR(Study) aStudy = parentObj->GetStudy();
3158 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3159 // collect all parents of the target node
3160 QStringList parentIDs;
3161 _PTR(SObject) parent = parentObj;
3162 while( !parent->IsNull() ) {
3163 parentIDs << parent->GetID().c_str();
3164 parent = aUseCaseBuilder->GetFather(parent);
3167 // collect objects being dropped
3168 GEOM::object_list_var objects = new GEOM::object_list();
3169 objects->length( what.count() );
3171 for ( int i = 0; i < what.count(); i++ ) {
3172 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3173 if ( !dataObj ) continue; // skip wrong objects
3174 _PTR(SObject) sobj = dataObj->object();
3175 // check that dropped object is not a parent of target object
3176 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3177 return; // it's not allowed to move node into it's child
3179 objects[i] = _CAST(SObject, sobj)->GetSObject();
3182 objects->length( count );
3184 // call engine function
3185 GetGeomGen()->Move( objects.in(), // what
3186 _CAST(SObject, parentObj)->GetSObject(), // where
3189 // update Object browser
3190 getApp()->updateObjectBrowser( false );