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 #ifdef DEBUG_CURVE_CREATOR
596 // for debug purposes, to be removed
597 case GEOMOp::OpCurveCreator: // MENU OPERATION - CURVE CREATOR
599 libName = "OperationGUI";
601 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
602 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
603 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
604 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
605 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
606 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
607 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
608 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
609 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
610 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
611 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
612 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
613 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
614 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
615 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
616 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
617 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
618 libName = "RepairGUI";
620 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
621 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
622 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
623 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
624 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
625 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
626 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
627 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
628 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
629 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
630 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
631 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
632 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
633 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
634 libName = "MeasureGUI";
636 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
637 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
638 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
639 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
640 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
641 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
642 libName = "GroupGUI";
644 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
645 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
646 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
647 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
648 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
649 libName = "BlocksGUI";
651 case GEOMOp::OpExportXAO: // MENU NEW ENTITY - IMPORTEXPORT - EXPORTXAO
652 case GEOMOp::OpImportXAO: // MENU NEW ENTITY - IMPORTEXPORT - IMPORTXAO
653 libName = "ImportExportGUI";
655 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
656 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
657 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
658 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
659 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
660 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
661 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
662 //libName = "AdvancedGUI";
665 if (myPluginActions.contains(id)) {
666 libName = myPluginActions[id].first;
668 GEOMPluginGUI* library = 0;
669 if ( !libName.isEmpty() ) {
671 libName = QString( "lib" ) + libName + ".so";
673 libName = libName + ".dll";
675 library = getPluginLibrary( libName );
678 // call method of corresponding GUI library
680 //QString action ("%1");
681 //action = action.arg(id);
683 //if( !theParam.isValid() )
684 library->OnGUIEvent( myPluginActions[id].second, desk );
686 // library->OnGUIEvent( id, desk, theParam);
689 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
691 updateCreationInfo();
697 GEOMGUI* library = 0;
698 if ( !libName.isEmpty() ) {
700 libName = QString( "lib" ) + libName + ".so";
702 libName = libName + ".dll";
704 library = getLibrary( libName );
707 // call method of corresponding GUI library
709 if( !theParam.isValid() )
710 library->OnGUIEvent( id, desk );
712 library->OnGUIEvent( id, desk, theParam);
715 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
717 updateCreationInfo();
720 //=================================================================================
721 // function : GeometryGUI::activateOperation()
723 //=================================================================================
724 bool GeometryGUI::activateOperation( int actionId )
726 OnGUIEvent(actionId);
730 //=================================================================================
731 // function : GeometryGUI::activateOperation()
733 //=================================================================================
734 bool GeometryGUI::activateOperation( const QString& actionId )
738 int id = actionId.toInt(&isOk);
745 //=================================================================================
746 // function : GeometryGUI::activateOperation()
748 //=================================================================================
749 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
753 QString pluginLib = plugin;
754 // TODO: if <plugin> is a plugin name, find plugin library name
755 if (myPluginLibs.contains(plugin))
756 pluginLib = myPluginLibs[plugin];
758 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
759 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
760 const PluginAction& anAction = actionsIter.value();
761 if (anAction.first == pluginLib && anAction.second == actionId) {
762 // activate operation
763 OnGUIEvent(actionsIter.key());
771 //=================================================================================
772 // function : GeometryGUI::OnKeyPress()
773 // purpose : Called when any key is pressed by user [static]
774 //=================================================================================
775 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
777 if ( !application() )
779 foreach ( GEOMGUI* lib, myGUIMap )
780 lib->OnKeyPress( e, application()->desktop(), w );
783 //=================================================================================
784 // function : GeometryGUI::OnMouseMove()
785 // purpose : Manages mouse move events [static]
786 //=================================================================================
787 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
789 if ( !application() )
791 foreach ( GEOMGUI* lib, myGUIMap )
792 lib->OnMouseMove( e, application()->desktop(), w );
795 //=================================================================================
796 // function : GeometryGUI::OnMouseRelease()
797 // purpose : Manages mouse release events [static]
798 //=================================================================================
799 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
801 if ( !application() )
803 foreach ( GEOMGUI* lib, myGUIMap )
804 lib->OnMouseRelease( e, application()->desktop(), w );
807 //=================================================================================
808 // function : GeometryGUI::OnMousePress()
809 // purpose : Manage mouse press events [static]
810 //=================================================================================
811 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
813 if ( !application() )
815 foreach ( GEOMGUI* lib, myGUIMap )
816 lib->OnMousePress( e, application()->desktop(), w );
819 //=======================================================================
820 // function : createGeomAction
822 //=======================================================================
823 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
824 const int accel, const bool toggle, const QString& shortcutAction )
826 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
827 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
828 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
830 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
832 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
833 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
835 application()->desktop(),
837 this, SLOT( OnGUIEvent() ),
841 //=======================================================================
842 // function : createOriginAndBaseVectors
844 //=======================================================================
845 void GeometryGUI::createOriginAndBaseVectors()
847 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
849 _PTR(Study) studyDS = appStudy->studyDS();
850 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
851 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
852 if ( !aBasicOperations->_is_nil() ) {
853 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
854 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
855 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
856 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
857 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
858 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
860 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
861 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
862 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
863 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
864 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
866 getApp()->updateObjectBrowser( true );
872 //=======================================================================
873 // function : GeometryGUI::initialize()
874 // purpose : Called when GEOM module is created
875 //=======================================================================
876 void GeometryGUI::initialize( CAM_Application* app )
878 SalomeApp_Module::initialize( app );
880 // ----- create actions --------------
882 createGeomAction( GEOMOp::OpImport, "IMPORT", "", Qt::ControlModifier + Qt::Key_I );
883 createGeomAction( GEOMOp::OpExport, "EXPORT", "", Qt::ControlModifier + Qt::Key_E );
885 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
887 createGeomAction( GEOMOp::OpPoint, "POINT" );
888 createGeomAction( GEOMOp::OpLine, "LINE" );
889 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
890 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
891 createGeomAction( GEOMOp::OpArc, "ARC" );
892 createGeomAction( GEOMOp::OpCurve, "CURVE" );
893 createGeomAction( GEOMOp::OpVector, "VECTOR" );
894 createGeomAction( GEOMOp::OpPlane, "PLANE" );
895 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
896 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
898 createGeomAction( GEOMOp::OpBox, "BOX" );
899 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
900 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
901 createGeomAction( GEOMOp::OpTorus, "TORUS" );
902 createGeomAction( GEOMOp::OpCone, "CONE" );
903 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
904 createGeomAction( GEOMOp::OpDisk, "DISK" );
906 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
907 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
908 createGeomAction( GEOMOp::OpFilling, "FILLING" );
909 createGeomAction( GEOMOp::OpPipe, "PIPE" );
910 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
912 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
913 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
914 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
915 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
916 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
918 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
919 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
921 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
923 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
924 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
926 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
927 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
928 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
930 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
932 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
934 createGeomAction( GEOMOp::OpEdge, "EDGE" );
935 createGeomAction( GEOMOp::OpWire, "WIRE" );
936 createGeomAction( GEOMOp::OpFace, "FACE" );
937 createGeomAction( GEOMOp::OpShell, "SHELL" );
938 createGeomAction( GEOMOp::OpSolid, "SOLID" );
939 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
941 createGeomAction( GEOMOp::OpFuse, "FUSE" );
942 createGeomAction( GEOMOp::OpCommon, "COMMON" );
943 createGeomAction( GEOMOp::OpCut, "CUT" );
944 createGeomAction( GEOMOp::OpSection, "SECTION" );
946 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
947 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
948 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
949 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
950 createGeomAction( GEOMOp::OpScale, "SCALE" );
951 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
952 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
953 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
954 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
956 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
957 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
958 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
959 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
960 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
961 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
962 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
963 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
964 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
965 #ifdef DEBUG_CURVE_CREATOR
966 // for debug purposes, to be removed
967 createGeomAction( GEOMOp::OpCurveCreator, "CURVE_CREATOR" );
969 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
970 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
972 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
973 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
974 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
976 createGeomAction( GEOMOp::OpSewing, "SEWING" );
977 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
978 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
979 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
980 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
981 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
982 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
983 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
984 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
985 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
986 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
987 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
988 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
989 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
990 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
991 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
992 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
994 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
995 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
996 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
997 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
998 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
999 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1000 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1001 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1003 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1004 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1005 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1006 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1007 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1008 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1010 #ifdef _DEBUG_ // PAL16821
1011 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1014 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1015 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1016 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1017 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1018 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1019 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1020 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1021 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1022 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1023 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1024 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1025 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1026 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1027 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1028 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1029 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1030 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1031 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1032 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1033 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1034 createGeomAction( GEOMOp::OpHide, "ERASE" );
1036 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1037 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1038 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1039 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1040 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1041 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1042 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1043 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1044 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1045 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1046 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1047 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1048 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1049 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1050 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1051 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1052 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1053 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1054 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1055 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1056 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1057 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1058 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1059 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1060 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1062 // Create actions for increase/decrease transparency shortcuts
1063 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1064 "Geometry:Increase transparency");
1065 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1066 "Geometry:Decrease transparency");
1068 // Create actions for increase/decrease number of isolines
1069 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1070 "Geometry:Increase number of isolines");
1071 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1072 "Geometry:Decrease number of isolines");
1074 // Import/Export XAO
1075 createGeomAction( GEOMOp::OpExportXAO, "EXPORTXAO" );
1076 createGeomAction( GEOMOp::OpImportXAO, "IMPORTXAO" );
1078 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1079 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1080 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1081 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1082 //@@ 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 @@//
1084 // ---- create menus --------------------------
1086 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1087 createMenu( separator(), fileId, 10 );
1088 createMenu( GEOMOp::OpImport, fileId, 10 );
1089 createMenu( GEOMOp::OpExport, fileId, 10 );
1090 int impexpId = createMenu( tr( "MEN_IMPORTEXPORT" ), fileId, -1, 10 );
1091 createMenu( GEOMOp::OpExportXAO, impexpId, -1 );
1092 createMenu( GEOMOp::OpImportXAO, impexpId, -1 );
1093 createMenu( separator(), fileId, -1 );
1095 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1096 createMenu( GEOMOp::OpDelete, editId, -1 );
1098 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1100 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1101 createMenu( GEOMOp::OpPoint, basicId, -1 );
1102 createMenu( GEOMOp::OpLine, basicId, -1 );
1103 createMenu( GEOMOp::OpCircle, basicId, -1 );
1104 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1105 createMenu( GEOMOp::OpArc, basicId, -1 );
1106 createMenu( GEOMOp::OpCurve, basicId, -1 );
1107 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1108 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1109 createMenu( separator(), basicId, -1 );
1110 createMenu( GEOMOp::OpVector, basicId, -1 );
1111 createMenu( GEOMOp::OpPlane, basicId, -1 );
1112 createMenu( GEOMOp::OpLCS, basicId, -1 );
1113 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1115 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1116 createMenu( GEOMOp::OpBox, primId, -1 );
1117 createMenu( GEOMOp::OpCylinder, primId, -1 );
1118 createMenu( GEOMOp::OpSphere, primId, -1 );
1119 createMenu( GEOMOp::OpTorus, primId, -1 );
1120 createMenu( GEOMOp::OpCone, primId, -1 );
1121 createMenu( GEOMOp::OpRectangle, primId, -1 );
1122 createMenu( GEOMOp::OpDisk, primId, -1 );
1123 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1125 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1126 createMenu( GEOMOp::OpPrism, genId, -1 );
1127 createMenu( GEOMOp::OpRevolution, genId, -1 );
1128 createMenu( GEOMOp::OpFilling, genId, -1 );
1129 createMenu( GEOMOp::OpPipe, genId, -1 );
1130 #if OCC_VERSION_LARGE > 0x06050300
1131 createMenu( GEOMOp::OpPipePath, genId, -1 );
1134 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1135 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1136 //@@ 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 @@//
1138 createMenu( separator(), newEntId, -1 );
1140 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1141 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1142 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1143 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1144 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1145 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1147 createMenu( separator(), newEntId, -1 );
1149 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1150 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1151 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1153 createMenu( separator(), newEntId, -1 );
1155 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1156 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1157 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1158 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1159 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1161 createMenu( separator(), newEntId, -1 );
1163 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1165 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1166 createMenu( GEOMOp::OpEdge, buildId, -1 );
1167 createMenu( GEOMOp::OpWire, buildId, -1 );
1168 createMenu( GEOMOp::OpFace, buildId, -1 );
1169 createMenu( GEOMOp::OpShell, buildId, -1 );
1170 createMenu( GEOMOp::OpSolid, buildId, -1 );
1171 createMenu( GEOMOp::OpCompound, buildId, -1 );
1173 createMenu( separator(), newEntId, -1 );
1175 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1177 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1180 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1182 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1183 createMenu( GEOMOp::OpFuse, boolId, -1 );
1184 createMenu( GEOMOp::OpCommon, boolId, -1 );
1185 createMenu( GEOMOp::OpCut, boolId, -1 );
1186 createMenu( GEOMOp::OpSection, boolId, -1 );
1188 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1189 createMenu( GEOMOp::OpTranslate, transId, -1 );
1190 createMenu( GEOMOp::OpRotate, transId, -1 );
1191 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1192 createMenu( GEOMOp::OpMirror, transId, -1 );
1193 createMenu( GEOMOp::OpScale, transId, -1 );
1194 createMenu( GEOMOp::OpOffset, transId, -1 );
1195 createMenu( GEOMOp::OpProjection, transId, -1 );
1196 createMenu( separator(), transId, -1 );
1197 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1198 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1200 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1201 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1202 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1203 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1205 createMenu( separator(), operId, -1 );
1207 createMenu( GEOMOp::OpPartition, operId, -1 );
1208 createMenu( GEOMOp::OpArchimede, operId, -1 );
1209 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1210 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1212 createMenu( separator(), operId, -1 );
1214 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1215 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1216 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1217 createMenu( GEOMOp::OpChamfer, operId, -1 );
1218 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1219 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1220 #ifdef DEBUG_CURVE_CREATOR
1221 // for debug purposes, to be removed
1222 createMenu( separator(), operId, -1 );
1223 createMenu( GEOMOp::OpCurveCreator, operId, -1 );
1225 //createMenu( GEOMOp::OpClipping, operId, -1 );
1227 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1228 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1229 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1230 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1231 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1232 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1233 createMenu( GEOMOp::OpSewing, repairId, -1 );
1234 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1235 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1236 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1237 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1238 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1239 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1240 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1241 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1242 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1243 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1244 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1246 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1247 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1248 createMenu( GEOMOp::OpProperties, measurId, -1 );
1249 createMenu( separator(), measurId, -1 );
1250 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1251 createMenu( GEOMOp::OpInertia, measurId, -1 );
1252 createMenu( GEOMOp::OpNormale, measurId, -1 );
1253 createMenu( separator(), measurId, -1 );
1254 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1255 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1256 createMenu( separator(), measurId, -1 );
1258 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1259 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1260 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1261 createMenu( GEOMOp::OpAngle, dimId, -1 );
1263 createMenu( separator(), measurId, -1 );
1264 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1265 createMenu( separator(), measurId, -1 );
1266 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1267 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1268 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1269 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1270 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1272 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1273 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1274 createMenu( separator(), toolsId, -1 );
1275 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1278 createMenu( separator(), toolsId, -1 );
1279 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1280 createMenu( separator(), toolsId, -1 );
1282 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1283 createMenu( separator(), viewId, -1 );
1285 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1286 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1287 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1288 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1289 createMenu( separator(), dispmodeId, -1 );
1290 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1292 createMenu( separator(), viewId, -1 );
1293 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1294 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1295 createMenu( separator(), viewId, -1 );
1296 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1297 createMenu( separator(), viewId, -1 );
1301 because of these items are accessible through object browser and viewers
1302 we have removed they from main menu
1304 createMenu( GEOMOp::OpShow, viewId, -1 );
1305 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1306 createMenu( GEOMOp::OpHide, viewId, -1 );
1309 // ---- create toolbars --------------------------
1311 int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1312 createTool( GEOMOp::OpPoint, basicTbId );
1313 createTool( GEOMOp::OpLine, basicTbId );
1314 createTool( GEOMOp::OpCircle, basicTbId );
1315 createTool( GEOMOp::OpEllipse, basicTbId );
1316 createTool( GEOMOp::OpArc, basicTbId );
1317 createTool( GEOMOp::OpCurve, basicTbId );
1318 createTool( GEOMOp::OpVector, basicTbId );
1319 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1320 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1321 createTool( GEOMOp::OpPlane, basicTbId );
1322 createTool( GEOMOp::OpLCS, basicTbId );
1323 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1325 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ) );
1326 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1327 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1329 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1330 createTool( GEOMOp::OpBox, primTbId );
1331 createTool( GEOMOp::OpCylinder, primTbId );
1332 createTool( GEOMOp::OpSphere, primTbId );
1333 createTool( GEOMOp::OpTorus, primTbId );
1334 createTool( GEOMOp::OpCone, primTbId );
1335 createTool( GEOMOp::OpRectangle, primTbId );
1336 createTool( GEOMOp::OpDisk, primTbId );
1337 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1339 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ) );
1340 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1341 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1343 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1344 createTool( GEOMOp::OpFuse, boolTbId );
1345 createTool( GEOMOp::OpCommon, boolTbId );
1346 createTool( GEOMOp::OpCut, boolTbId );
1347 createTool( GEOMOp::OpSection, boolTbId );
1349 int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1350 createTool( GEOMOp::OpPrism, genTbId );
1351 createTool( GEOMOp::OpRevolution, genTbId );
1352 createTool( GEOMOp::OpFilling, genTbId );
1353 createTool( GEOMOp::OpPipe, genTbId );
1354 #if OCC_VERSION_LARGE > 0x06050300
1355 createTool( GEOMOp::OpPipePath, genTbId );
1358 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1359 createTool( GEOMOp::OpTranslate, transTbId );
1360 createTool( GEOMOp::OpRotate, transTbId );
1361 createTool( GEOMOp::OpChangeLoc, transTbId );
1362 createTool( GEOMOp::OpMirror, transTbId );
1363 createTool( GEOMOp::OpScale, transTbId );
1364 createTool( GEOMOp::OpOffset, transTbId );
1365 createTool( GEOMOp::OpProjection, transTbId );
1366 createTool( separator(), transTbId );
1367 createTool( GEOMOp::OpMultiTranslate, transTbId );
1368 createTool( GEOMOp::OpMultiRotate, transTbId );
1370 int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1371 createTool( GEOMOp::OpExplode, operTbId );
1372 createTool( GEOMOp::OpPartition, operTbId );
1373 createTool( GEOMOp::OpArchimede, operTbId );
1374 createTool( GEOMOp::OpShapesOnShape, operTbId );
1375 createTool( GEOMOp::OpSharedShapes, operTbId );
1377 int featTbId = createTool( tr( "TOOL_FEATURES" ) );
1378 createTool( GEOMOp::OpFillet1d, featTbId );
1379 createTool( GEOMOp::OpFillet2d, featTbId );
1380 createTool( GEOMOp::OpFillet3d, featTbId );
1381 createTool( GEOMOp::OpChamfer, featTbId );
1382 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1383 createTool( GEOMOp::OpExtrudedCut, featTbId );
1384 #ifdef DEBUG_CURVE_CREATOR
1385 // for debug purposes, to be removed
1386 createTool( GEOMOp::OpCurveCreator, featTbId );
1389 int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1390 createTool( GEOMOp::OpEdge, buildTbId );
1391 createTool( GEOMOp::OpWire, buildTbId );
1392 createTool( GEOMOp::OpFace, buildTbId );
1393 createTool( GEOMOp::OpShell, buildTbId );
1394 createTool( GEOMOp::OpSolid, buildTbId );
1395 createTool( GEOMOp::OpCompound, buildTbId );
1397 int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1398 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1399 createTool( GEOMOp::OpProperties, measureTbId );
1400 createTool( GEOMOp::OpCenterMass, measureTbId );
1401 createTool( GEOMOp::OpInertia, measureTbId );
1402 createTool( GEOMOp::OpNormale, measureTbId );
1403 createTool( separator(), measureTbId );
1404 createTool( GEOMOp::OpBoundingBox, measureTbId );
1405 createTool( GEOMOp::OpMinDistance, measureTbId );
1406 createTool( GEOMOp::OpAngle, measureTbId );
1407 createTool( GEOMOp::OpTolerance , measureTbId );
1408 createTool( separator(), measureTbId );
1409 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1410 createTool( GEOMOp::OpFreeFaces, measureTbId );
1411 createTool( separator(), measureTbId );
1412 createTool( GEOMOp::OpWhatIs, measureTbId );
1413 createTool( GEOMOp::OpCheckShape, measureTbId );
1414 createTool( GEOMOp::OpCheckCompound, measureTbId );
1415 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1416 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1418 int picturesTbId = createTool( tr( "TOOL_PICTURES" ) );
1419 createTool( GEOMOp::OpPictureImport, picturesTbId );
1421 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1424 int impexpTbId = createTool( tr( "TOOL_IMPORTEXPORT" ) );
1425 createTool( GEOMOp::OpExportXAO, impexpTbId );
1426 createTool( GEOMOp::OpImportXAO, impexpTbId );
1428 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1429 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1430 //@@ 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 @@//
1432 // ---- create popup menus --------------------------
1434 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1435 QString clientOCC = "(client='OCCViewer')";
1436 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1437 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1439 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1440 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1441 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1442 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1444 QString autoColorPrefix =
1445 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1447 QtxPopupMgr* mgr = popupMgr();
1449 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1450 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1451 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1452 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1453 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1454 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1455 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1456 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1458 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1459 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1460 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1461 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1462 mgr->insert( separator(), -1, -1 ); // -----------
1464 #if OCC_VERSION_LARGE > 0x06050200
1465 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1466 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1467 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1468 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1469 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1470 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1471 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1473 mgr->insert( separator(), -1, -1 ); // -----------
1474 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1475 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1476 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1477 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1478 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1479 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1480 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1481 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1482 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1483 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1484 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1485 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1486 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1487 mgr->insert( separator(), dispmodeId, -1 );
1488 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1489 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1490 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1491 mgr->insert( separator(), -1, -1 ); // -----------
1493 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1494 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1495 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1496 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1497 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1498 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1499 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1500 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1501 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1502 //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1503 mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1505 // material properties
1506 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1507 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1510 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1511 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1513 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1514 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1515 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1517 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1518 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1520 mgr->insert( separator(), -1, -1 ); // -----------
1521 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1522 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1523 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1524 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1525 mgr->insert( separator(), -1, -1 ); // -----------
1527 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1528 onlyComponent = "((type='Component') and selcount=1)",
1529 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1530 types = "'Shape' 'Group' 'FieldStep'";
1532 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1533 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1535 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1536 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1538 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1539 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1541 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1543 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1544 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1545 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1546 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1547 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1548 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1549 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1550 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1551 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1552 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1553 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1554 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1555 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1556 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1557 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1558 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1559 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1560 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1561 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1562 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1563 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1564 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1565 mgr->insert( separator(), selectonlyId, -1);
1566 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1567 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1568 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1569 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1570 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1571 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1572 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1574 mgr->insert( separator(), -1, -1 ); // -----------
1575 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1576 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1578 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1579 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1581 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1582 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1584 mgr->insert( separator(), -1, -1 ); // -----------
1585 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1586 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1588 mgr->insert( separator(), -1, -1 ); // -----------
1589 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1590 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1592 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1594 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1596 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1597 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1598 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1601 // create plugin actions and menus
1605 //=======================================================================
1606 // function : GeometryGUI::addPluginActions()
1608 //=======================================================================
1609 void GeometryGUI::addPluginActions()
1612 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1613 if (!resMgr) return;
1615 // Find names of a resource XML files ("GEOMActions.xml" and others);
1617 char* cenv = getenv("GEOM_PluginsList");
1619 PluginsXml.sprintf("%s", cenv);
1621 QStringList PluginsXmlList = PluginsXml.split(":", QString::SkipEmptyParts);
1622 if (PluginsXmlList.count() == 0) return;
1624 // get full names of xml files from PluginsXmlList
1625 QStringList xmlFiles;
1626 xmlFiles.append(QDir::home().filePath("CustomGeomPlugins.xml")); // may be inexistent
1627 for (int i = 0; i < PluginsXmlList.count(); i++) {
1628 PluginsXml = PluginsXmlList[ i ];
1630 // Find full path to the resource XML file
1631 QString xmlFile = resMgr->path("resources", "GEOM", PluginsXml + ".xml");
1632 if ( xmlFile.isEmpty() ) // try PLUGIN resources
1633 xmlFile = resMgr->path("resources", PluginsXml, PluginsXml + ".xml");
1634 if ( !xmlFile.isEmpty() )
1635 xmlFiles.append( xmlFile );
1638 // create "Advanced Operations" menu and corresponding toolbar
1639 //int advancedMenuId = createMenu(tr("MEN_ADVANCED"), -1, -1, 10);
1640 //int advancedTbarId = createTool(tr("TOOL_ADVANCED"));
1641 int id = GEOMOp::OpLastOperationID; // TODO?
1644 QString aNoAccessFiles;
1645 for (int i = 0; i < xmlFiles.count(); i++) {
1646 QString xmlFile = xmlFiles[ i ];
1648 QFile file (xmlFile);
1649 if (file.exists() && file.open(QIODevice::ReadOnly)) {
1652 GEOMGUI_XmlHandler* aXmlHandler = new GEOMGUI_XmlHandler();
1653 ASSERT(aXmlHandler);
1655 QXmlInputSource source (&file);
1656 QXmlSimpleReader reader;
1657 reader.setContentHandler(aXmlHandler);
1658 reader.setErrorHandler(aXmlHandler);
1659 bool ok = reader.parse(source);
1663 // bind action lib and label to its ID for activateOperation() method proper work
1664 myPluginLibs[aXmlHandler->myPluginData.myName] = aXmlHandler->myPluginData.myClientLib;
1666 QListIterator<GEOMGUI_ActionData> anActionsIter (aXmlHandler->myPluginData.myListOfActions);
1667 while (anActionsIter.hasNext()) {
1668 GEOMGUI_ActionData anActionData = anActionsIter.next();
1670 //QPixmap icon = resMgr->loadPixmap("GEOM", tr(anActionData.myIcon.toLatin1().constData()));
1671 QPixmap icon = resMgr->loadPixmap(aXmlHandler->myPluginData.myName,
1672 anActionData.myIcon.toLatin1().constData());
1674 // path to action in menu
1675 QStringList smenus = anActionData.myMenu.split( "/" );
1676 QString actionName = smenus.last();
1677 actionName = actionName.toUpper().prepend("MEN_");
1678 smenus.removeLast();
1680 // path to action in toolbar
1681 QStringList stools = anActionData.myTooltip.split( "/" );
1682 QString actionTool = stools.last();
1683 actionTool = actionTool.toUpper().prepend("TOP_");
1684 stools.removeLast();
1686 QString actionStat = anActionData.myStatusBar;
1687 actionStat = actionStat.toUpper().prepend("STB_");
1689 createAction(id, // ~ anActionData.myLabel
1690 tr(actionTool.toLatin1().constData()),
1692 tr(actionName.toLatin1().constData()),
1693 tr(actionStat.toLatin1().constData()),
1695 application()->desktop(),
1697 this, SLOT(OnGUIEvent()),
1698 QString() /*shortcutAction*/);
1701 foreach (QString subMenu, smenus) {
1702 subMenu = subMenu.toUpper().prepend("MEN_");
1703 menuId = createMenu(tr(subMenu.toLatin1().constData()), menuId, -1);
1705 //createMenu(id, pluginMenuId, -1);
1706 createMenu(id, menuId, -1);
1708 QString subTool = stools[0];
1709 subTool = subTool.toUpper().prepend("TOOL_");
1710 int toolId = createTool(tr(subTool.toLatin1().constData()));
1711 //createTool(id, advancedTbarId);
1712 createTool(id, toolId);
1714 // add action id to map
1715 PluginAction anAction (aXmlHandler->myPluginData.myClientLib, anActionData.myLabel);
1716 myPluginActions[id] = anAction;
1722 SUIT_MessageBox::critical(application()->desktop(),
1723 tr("INF_PARSE_ERROR"),
1724 tr(aXmlHandler->errorProtocol().toLatin1().data()));
1728 else if ( i > 0 ) { // 1st is ~/CustomGeomPlugins.xml
1729 if (aNoAccessFiles.isEmpty())
1730 aNoAccessFiles = xmlFile;
1732 aNoAccessFiles += ", " + xmlFile;
1734 } // end loop on xmlFiles
1736 if (!aNoAccessFiles.isEmpty()) {
1737 QString aMess = QObject::tr("PLUGIN_FILE_CANT_OPEN") + " " + aNoAccessFiles + "\n";
1738 aMess += QObject::tr("PLUGIN_FILE_CHECK_VARIABLE");
1739 SUIT_MessageBox::warning(application()->desktop(), tr("GEOM_WRN_WARNING"), aMess);
1743 //=======================================================================
1744 // function : GeometryGUI::activateModule()
1745 // purpose : Called when GEOM module is activated
1746 //=======================================================================
1747 bool GeometryGUI::activateModule( SUIT_Study* study )
1749 if ( CORBA::is_nil( myComponentGeom ) )
1752 bool res = SalomeApp_Module::activateModule( study );
1756 setMenuShown( true );
1757 setToolShown( true );
1759 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1760 PyGILState_STATE gstate = PyGILState_Ensure();
1761 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1762 if ( !pluginsmanager ) {
1766 PyObjWrapper result =
1767 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1768 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1769 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1773 PyGILState_Release(gstate);
1774 // end of GEOM plugins loading
1776 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1777 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1779 // Reset actions accelerator keys
1780 action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1781 action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1782 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1784 GUIMap::Iterator it;
1785 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1786 it.value()->activate( application()->desktop() );
1788 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1790 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1791 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1792 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1794 if ( !myCreationInfoWdg )
1795 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1796 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1797 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1799 SUIT_ViewManager* vm;
1800 ViewManagerList OCCViewManagers, VTKViewManagers;
1802 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1803 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1804 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1805 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1807 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1808 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1809 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1810 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1813 SALOME_ListIO selected;
1814 sm->selectedObjects( selected );
1815 sm->clearSelected();
1817 // disable OCC selectors
1818 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1819 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1820 while ( itOCCSel.hasNext() )
1821 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1822 sr->setEnabled(true);
1824 // disable VTK selectors
1825 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1826 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1827 while ( itVTKSel.hasNext() )
1828 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1829 sr->setEnabled(true);
1831 sm->setSelectedObjects( selected, true ); //NPAL 19674
1833 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1835 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1837 // 0020836 (Basic vectors and origin)
1838 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1839 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1840 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1842 _PTR(Study) studyDS = appStudy->studyDS();
1844 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1845 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1846 createOriginAndBaseVectors();
1854 //=======================================================================
1855 // function : GeometryGUI::deactivateModule()
1856 // purpose : Called when GEOM module is deactivated
1857 //=======================================================================
1858 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1860 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1862 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1864 setMenuShown( false );
1865 setToolShown( false );
1867 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1868 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1870 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1872 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1873 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1874 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1875 myCreationInfoWdg = 0;
1877 EmitSignalCloseAllDialogs();
1879 GUIMap::Iterator it;
1880 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1881 it.value()->deactivate();
1883 // Unset actions accelerator keys
1884 action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1885 action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1886 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1888 qDeleteAll(myOCCSelectors);
1889 myOCCSelectors.clear();
1890 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1892 qDeleteAll(myVTKSelectors);
1893 myVTKSelectors.clear();
1894 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1896 return SalomeApp_Module::deactivateModule( study );
1899 //=======================================================================
1900 // function : onWindowActivated()
1901 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1902 //=======================================================================
1903 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1908 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1909 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1911 // disable non-OCC viewframe menu commands
1912 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1913 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1914 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1915 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1916 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1917 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1918 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1920 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1921 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1922 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1923 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1925 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1928 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1930 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1931 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1932 if ( myCreationInfoWdg )
1933 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1936 void GeometryGUI::viewManagers( QStringList& lst ) const
1938 lst.append( OCCViewer_Viewer::Type() );
1941 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1943 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1945 qDebug( "connect" );
1946 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1947 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1948 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1949 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1950 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1951 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1952 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1953 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1955 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1956 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1958 // disable OCC selectors
1959 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1960 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1961 while ( itOCCSel.hasNext() )
1962 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1963 sr->setEnabled(true);
1965 else if ( vm->getType() == SVTK_Viewer::Type() )
1967 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1968 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1970 // disable VTK selectors
1971 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1972 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1973 while ( itVTKSel.hasNext() )
1974 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1975 sr->setEnabled(true);
1979 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1981 SUIT_ViewModel* viewer = vm->getViewModel();
1982 if ( vm->getType() == OCCViewer_Viewer::Type() )
1984 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1985 while ( itOCCSel.hasNext() )
1986 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1987 if ( sr->viewer() == viewer )
1989 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1993 if ( vm->getType() == SVTK_Viewer::Type() )
1995 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1996 while ( itVTKSel.hasNext() )
1997 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1998 if ( sr->viewer() == viewer )
2000 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2006 //================================================================================
2008 * \brief Slot called when selection changed. Shows creation info of a selected object
2010 //================================================================================
2012 void GeometryGUI::updateCreationInfo()
2014 if ( myCreationInfoWdg )
2015 myCreationInfoWdg->clear();
2017 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2018 // if ( !myCreationInfoWdg->isVisible() )
2021 // look for a sole selected GEOM_Object
2022 GEOM::GEOM_BaseObject_var geomObj;
2024 SALOME_ListIO selected;
2025 getApp()->selectionMgr()->selectedObjects( selected );
2027 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2028 SALOME_ListIteratorOfListIO selIt( selected );
2029 for ( ; selIt.More(); selIt.Next() )
2031 Handle(SALOME_InteractiveObject) io = selIt.Value();
2032 if ( !io->hasEntry() ) continue;
2033 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2034 if ( !sobj ) continue;
2035 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2036 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2037 if ( !gobj->_is_nil() )
2039 if ( !geomObj->_is_nil() )
2040 return; // several GEOM objects selected
2044 if ( geomObj->_is_nil() ) return;
2046 // pass creation info of geomObj to myCreationInfoWdg
2048 if ( myCreationInfoWdg ) {
2050 QString operationName;
2051 myCreationInfoWdg->setOperation( icon, operationName );
2055 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2057 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2058 QString name = info->operationName.in();
2059 if ( !name.isEmpty() ) {
2060 icon = resMgr->loadPixmap( "GEOM", tr( ("ICO_"+name).toLatin1().constData() ), false );
2061 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2062 if ( operationName.startsWith( "MEN_" ))
2063 operationName = name; // no translation
2064 myCreationInfoWdg->setOperation( icon, operationName );
2066 for ( size_t i = 0; i < info->params.length(); ++i )
2067 myCreationInfoWdg->addParam( info->params[i].name.in(),
2068 info->params[i].value.in() );
2077 void GeometryGUI::onAutoBringToFront()
2079 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front" );
2080 if( !isAutoBringToFront )
2083 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2084 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2087 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2088 if (!appStudy) return;
2090 GEOM_Displayer displayer( appStudy );
2092 SALOME_View* window = displayer.GetActiveView();
2093 if ( !window ) return;
2095 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2097 SALOME_ListIO selected;
2098 getApp()->selectionMgr()->selectedObjects( selected );
2099 SALOME_ListIO allObjects;
2100 window->GetVisible( allObjects );
2102 for ( SALOME_ListIteratorOfListIO It( allObjects ); It.More(); It.Next() ) {
2103 Handle( SALOME_InteractiveObject ) io = It.Value();
2104 bool isSelected = false;
2105 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
2106 Handle( SALOME_InteractiveObject ) ioSelected = It.Value();
2107 if( io->isSame( ioSelected ) )
2110 QVariant v = appStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), QVariant() );
2111 bool isTopLevel = v.isValid() ? v.toBool() : false;
2112 if( isSelected && !isTopLevel ) {
2113 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2114 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2116 else if( !isSelected ) {
2117 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2118 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2121 displayer.UpdateViewer();
2122 GeometryGUI::Modified();
2125 void GeometryGUI::updateFieldColorScale()
2127 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2129 GEOM_Displayer aDisplayer( aStudy );
2130 aDisplayer.UpdateColorScale();
2134 QString GeometryGUI::engineIOR() const
2136 if ( !CORBA::is_nil( GetGeomGen() ) )
2137 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2141 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2142 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2144 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
2146 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2148 theWidth = theHeight = 0;
2150 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2151 Handle(TColStd_HArray1OfByte) aTexture;
2153 Handle(Graphic3d_HArray1OfBytes) aTexture;
2157 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2158 aTexture = aTextureMap[ theId ];
2159 if ( aTexture.IsNull() ) {
2160 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2161 if ( !aInsOp->_is_nil() ) {
2162 CORBA::Long aWidth, aHeight;
2163 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2164 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2166 theHeight = aHeight;
2168 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2169 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2171 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
2174 for (int i = 0; i < aStream->length(); i++)
2175 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2176 aTextureMap[ theId ] = aTexture;
2184 LightApp_Selection* GeometryGUI::createSelection() const
2186 return new GEOMGUI_Selection();
2189 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2191 SalomeApp_Module::contextMenuPopup( client, menu, title );
2193 getApp()->selectionMgr()->selectedObjects( lst );
2195 //Add submenu for predefined materials
2196 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2197 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2198 QtxPopupMgr* mgr = popupMgr();
2199 //get parrent for submenu
2200 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2202 QMenu* oldMenu = act->menu() ;
2207 QMenu* matMenu = new QMenu();
2208 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2210 //Get current material model for the object
2212 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2213 if ( anApp && anApp->activeViewManager() ) {
2214 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2216 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2219 QString curModel = "";
2220 if ( v.canConvert<QString>() ) curModel = v.toString();
2221 // get list of all predefined materials
2222 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2224 foreach ( QString material, materials )
2226 QAction* menAct = matMenu->addAction( material );
2227 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2228 signalMapper->setMapping( menAct, material );
2229 menAct->setCheckable( true );
2230 // Set checked if this material is current
2231 Material_Model aModel;
2232 aModel.fromResources( material );
2233 if ( !found && aModel.toProperties() == curModel ) {
2234 menAct->setChecked( true );
2238 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2239 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2240 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2241 this, SLOT( OnSetMaterial( const QString & ) ) );
2242 act->setMenu( matMenu );
2246 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2247 Handle(SALOME_InteractiveObject) io = lst.First();
2248 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2249 _PTR(Study) study = appStudy->studyDS();
2250 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2252 QString aName = QString( obj->GetName().c_str() );
2253 aName.remove( QRegExp("\\s+$") );
2259 void GeometryGUI::OnSetMaterial(const QString& theName)
2261 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2265 void GeometryGUI::createPreferences()
2267 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2269 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2270 setPreferenceProperty( genGroup, "columns", 2 );
2272 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2273 LightApp_Preferences::Selector,
2274 "Geometry", "display_mode" );
2276 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2277 LightApp_Preferences::Color, "Geometry", "shading_color" );
2279 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2280 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2282 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2283 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2285 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2286 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2288 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2289 LightApp_Preferences::Color, "Geometry", "line_color" );
2291 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2292 LightApp_Preferences::Color, "Geometry", "point_color" );
2294 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2295 LightApp_Preferences::Color, "Geometry", "isos_color" );
2297 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2298 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2300 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2301 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2303 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2304 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2306 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2307 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2309 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2310 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2312 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2313 LightApp_Preferences::Selector,
2314 "Geometry", "material" );
2316 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2317 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2323 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2324 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2326 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2327 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2329 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2330 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2332 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2333 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2335 for (int i = 0; i < nb; i++) {
2336 setPreferenceProperty( wd[i], "min", 1 );
2337 setPreferenceProperty( wd[i], "max", 5 );
2340 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2341 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2343 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2344 setPreferenceProperty( isoGroup, "columns", 2 );
2345 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2346 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2347 setPreferenceProperty( isoU, "min", 0 );
2348 setPreferenceProperty( isoU, "max", 100000 );
2349 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2350 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2351 setPreferenceProperty( isoV, "min", 0 );
2352 setPreferenceProperty( isoV, "max", 100000 );
2354 // Quantities with individual precision settings
2355 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2356 setPreferenceProperty( precGroup, "columns", 2 );
2358 const int nbQuantities = 8;
2359 int prec[nbQuantities], ii = 0;
2360 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2361 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2362 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2363 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2364 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2365 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2366 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2367 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2368 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2369 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2370 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2371 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2372 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2373 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2374 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2375 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2377 // Set property for precision value for spinboxes
2378 for ( ii = 0; ii < nbQuantities; ii++ ){
2379 setPreferenceProperty( prec[ii], "min", -14 );
2380 setPreferenceProperty( prec[ii], "max", 14 );
2381 setPreferenceProperty( prec[ii], "precision", 2 );
2384 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2385 setPreferenceProperty( VertexGroup, "columns", 2 );
2387 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2388 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2390 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2391 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2393 // Set property for default display mode
2394 QStringList aModesList;
2395 aModesList.append( tr("MEN_WIREFRAME") );
2396 aModesList.append( tr("MEN_SHADING") );
2397 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2399 QList<QVariant> anIndexesList;
2400 anIndexesList.append(0);
2401 anIndexesList.append(1);
2402 anIndexesList.append(2);
2404 setPreferenceProperty( dispmode, "strings", aModesList );
2405 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2407 // Set property for top level display mode
2408 QStringList aTopModesList;
2409 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2410 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2411 aTopModesList.append( tr("MEN_WIREFRAME") );
2412 aTopModesList.append( tr("MEN_SHADING") );
2413 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2415 QList<QVariant> aTopIndexesList;
2416 aTopIndexesList.append(0);
2417 aTopIndexesList.append(1);
2418 aTopIndexesList.append(2);
2419 aTopIndexesList.append(3);
2420 aTopIndexesList.append(4);
2422 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2423 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2425 // Set property for step value for spinboxes
2426 setPreferenceProperty( step, "min", 1 );
2427 setPreferenceProperty( step, "max", 10000 );
2428 setPreferenceProperty( step, "precision", 3 );
2430 // Set property for deflection value for spinboxes
2431 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2432 setPreferenceProperty( defl, "max", 1.0 );
2433 setPreferenceProperty( defl, "step", 1.0e-04 );
2434 setPreferenceProperty( defl, "precision", 6 );
2436 // Set property for default material
2437 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2439 // Set property vertex marker type
2440 QList<QVariant> aMarkerTypeIndicesList;
2441 QList<QVariant> aMarkerTypeIconsList;
2443 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2444 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2445 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2446 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2447 aMarkerTypeIndicesList << (i-1);
2448 aMarkerTypeIconsList << pixmap;
2451 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2452 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2454 // Set property for vertex marker scale
2455 QList<QVariant> aMarkerScaleIndicesList;
2456 QStringList aMarkerScaleValuesList;
2458 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2459 aMarkerScaleIndicesList << iii;
2460 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2463 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2464 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2466 // Scalar bar for field step presentation
2467 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2468 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2470 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2471 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2472 setPreferenceProperty( sbXPosition, "min", 0 );
2473 setPreferenceProperty( sbXPosition, "max", 1 );
2474 setPreferenceProperty( sbXPosition, "step", 0.05 );
2476 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2477 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2478 setPreferenceProperty( sbYPosition, "min", 0 );
2479 setPreferenceProperty( sbYPosition, "max", 1 );
2480 setPreferenceProperty( sbYPosition, "step", 0.05 );
2482 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2483 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2484 setPreferenceProperty( sbWidth, "min", 0 );
2485 setPreferenceProperty( sbWidth, "max", 1 );
2486 setPreferenceProperty( sbWidth, "step", 0.05 );
2488 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2489 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2490 setPreferenceProperty( sbHeight, "min", 0 );
2491 setPreferenceProperty( sbHeight, "max", 1 );
2492 setPreferenceProperty( sbHeight, "step", 0.05 );
2494 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2495 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2496 setPreferenceProperty( sbTextHeight, "min", 6 );
2497 setPreferenceProperty( sbTextHeight, "max", 24 );
2498 setPreferenceProperty( sbTextHeight, "step", 1 );
2500 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2501 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2502 setPreferenceProperty( sbNbIntervals, "min", 2 );
2503 setPreferenceProperty( sbNbIntervals, "max", 64 );
2504 setPreferenceProperty( sbNbIntervals, "step", 1 );
2506 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2507 setPreferenceProperty( originGroup, "columns", 2 );
2509 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2510 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2511 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2512 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2514 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2515 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2517 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2518 setPreferenceProperty( operationsGroup, "columns", 2 );
2520 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2521 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2524 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2526 if (section == "Geometry") {
2527 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2528 if (param == QString("SettingsGeomStep")) {
2529 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2530 EmitSignalDefaultStepValueChanged(spin_step);
2532 else if (param == QString("toplevel_color")) {
2533 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2534 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2536 else if (param == QString("toplevel_dm")) {
2537 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2539 else if (param == QString("scalar_bar_x_position") ||
2540 param == QString("scalar_bar_y_position") ||
2541 param == QString("scalar_bar_width") ||
2542 param == QString("scalar_bar_height") ||
2543 param == QString("scalar_bar_text_height") ||
2544 param == QString("scalar_bar_nb_intervals")) {
2545 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2547 GEOM_Displayer aDisplayer( aStudy );
2548 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2549 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps );
2555 LightApp_Displayer* GeometryGUI::displayer()
2558 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2562 void GeometryGUI::setLocalSelectionMode(const int mode)
2564 myLocalSelectionMode = mode;
2567 int GeometryGUI::getLocalSelectionMode() const
2569 return myLocalSelectionMode;
2572 const char gSeparator = '_'; // character used to separate parameter names
2573 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2576 * \brief Store visual parameters
2578 * This method is called just before the study document is saved.
2579 * Store visual parameters in AttributeParameter attribute(s)
2581 void GeometryGUI::storeVisualParameters (int savePoint)
2583 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2584 if ( !appStudy || !appStudy->studyDS() )
2586 _PTR(Study) studyDS = appStudy->studyDS();
2588 // componentName is used for encoding of entries when storing them in IParameters
2589 std::string componentName = myComponentGeom->ComponentDataType();
2590 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2591 //if (!aSComponent) return;
2594 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2595 componentName.c_str(),
2597 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2599 QList<SUIT_ViewManager*> lst;
2600 QList<SUIT_ViewManager*>::Iterator it;
2602 // main cycle to store parameters of displayed objects
2604 getApp()->viewManagers(lst);
2605 for (it = lst.begin(); it != lst.end(); it++) {
2606 SUIT_ViewManager* vman = *it;
2607 QString vType = vman->getType();
2608 int aMgrId = vman->getGlobalId();
2609 // saving VTK actors properties
2610 QVector<SUIT_ViewWindow*> views = vman->getViews();
2611 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2612 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
2613 ObjMap::ConstIterator o_it = anObjects.begin();
2614 for (; o_it != anObjects.end(); o_it++) {
2615 const PropMap aProps = o_it.value();
2617 //Check that object exists in the study
2618 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2619 if ( !obj || !(aProps.count() > 0))
2621 // entry is "encoded" = it does NOT contain component adress, since it is a
2622 // subject to change on next component loading
2624 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2626 _PTR(GenericAttribute) anAttr;
2627 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2630 QString param, occParam = vType;
2631 occParam += GEOM::sectionSeparator();
2632 occParam += QString::number(aMgrId);
2633 occParam += GEOM::sectionSeparator();
2635 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2636 param = occParam + GEOM::propertyName( GEOM::Visibility );
2637 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2640 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2641 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2642 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2645 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2646 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2648 val << QString::number(c.redF());
2649 val << QString::number(c.greenF());
2650 val << QString::number(c.blueF());
2651 param = occParam + GEOM::propertyName( GEOM::Color );
2652 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2655 if (vType == SVTK_Viewer::Type()) {
2656 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2657 param = occParam + GEOM::propertyName( GEOM::Opacity );
2658 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2660 } else if (vType == SOCC_Viewer::Type()) {
2661 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2662 param = occParam + GEOM::propertyName( GEOM::Transparency );
2663 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2666 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2667 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2668 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2672 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2673 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2674 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2677 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2678 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2679 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2682 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2683 param = occParam + GEOM::propertyName( GEOM::Deflection );
2684 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2687 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2688 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2689 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2690 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2693 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2694 param = occParam + GEOM::propertyName( GEOM::Material );
2695 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2698 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2699 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2700 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2703 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2704 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2705 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2707 } // object iterator
2709 } // for (viewManagers)
2713 * \brief Restore visual parameters
2715 * This method is called after the study document is opened.
2716 * Restore visual parameters from AttributeParameter attribute(s)
2718 void GeometryGUI::restoreVisualParameters (int savePoint)
2720 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2721 if (!appStudy || !appStudy->studyDS())
2723 _PTR(Study) studyDS = appStudy->studyDS();
2725 // componentName is used for encoding of entries when storing them in IParameters
2726 std::string componentName = myComponentGeom->ComponentDataType();
2727 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2728 //if (!aSComponent) return;
2731 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2732 componentName.c_str(),
2734 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2736 std::vector<std::string> entries = ip->getEntries();
2738 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2740 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2741 QString entry (ip->decodeEntry(*entIt).c_str());
2743 // Check that the entry corresponds to a real object in the Study
2744 // as the object may be deleted or modified after the visual state is saved.
2745 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2746 if (!so) continue; //Skip the not existent entry
2748 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2749 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2751 std::vector<std::string>::iterator namesIt = paramNames.begin();
2752 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2754 // actors are stored in a map after displaying of them for
2755 // quicker access in the future: map < viewID to actor >
2756 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2757 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2759 QString viewerTypStr;
2760 QString viewIndexStr;
2762 QVector<PropMap> aListOfMap;
2764 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2766 // visual parameters are stored in strings as follows: ViewerType_ViewIndex_ParamName.
2767 // '_' is used as separator and should not be used in viewer type or parameter names.
2768 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2769 if (lst.size() != 3)
2772 viewerTypStr = lst[0];
2773 viewIndexStr = lst[1];
2774 QString paramNameStr = lst[2];
2777 viewIndex = viewIndexStr.toUInt(&ok);
2778 if (!ok) // bad conversion of view index to integer
2781 if ((viewIndex + 1) > aListOfMap.count()) {
2782 aListOfMap.resize(viewIndex + 1);
2785 QString val((*valuesIt).c_str());
2786 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
2787 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
2788 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
2789 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
2790 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
2791 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
2792 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
2793 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
2794 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
2795 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
2796 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
2797 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
2798 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
2799 QStringList rgb = val.split(GEOM::subSectionSeparator());
2800 if (rgb.count() == 3) {
2801 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
2802 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
2804 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
2805 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
2806 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
2807 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
2808 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
2809 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
2810 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
2811 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
2812 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
2813 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
2814 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
2815 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
2817 } // for names/parameters iterator
2819 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2821 for (int index = 0; index < aListOfMap.count(); index++) {
2823 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
2825 //Get Visibility property of the current PropMap
2826 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
2827 SUIT_ViewManager* vman = lst.at(index);
2828 SUIT_ViewModel* vmodel = vman->getViewModel();
2829 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
2832 } // for entries iterator
2834 // update all VTK and OCC views
2835 QList<SUIT_ViewManager*> lst;
2836 getApp()->viewManagers(lst);
2837 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
2838 SUIT_ViewModel* vmodel = (*it)->getViewModel();
2841 if (vmodel->getType() == SVTK_Viewer::Type()) {
2842 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
2843 vtkView->getRenderer()->ResetCameraClippingRange();
2846 else if (vmodel->getType() == SOCC_Viewer::Type()) {
2847 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
2848 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
2855 void GeometryGUI::onViewAboutToShow()
2857 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
2858 QAction* a = action( GEOMOp::OpSwitchVectors );
2860 a->setEnabled(true);
2861 bool vmode = window->property("VectorsMode").toBool();
2862 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
2864 a->setText ( tr("MEN_VECTOR_MODE_ON") );
2865 a->setEnabled(false);
2870 \brief Return action by id
2871 \param id identifier of the action
2874 QAction* GeometryGUI::getAction(const int id) {
2879 \brief GEOM module message handler
2881 This method can be re-implemented in the subclasses.
2882 This is a GEOM module message handler.
2884 \param msg the message received.
2886 void GeometryGUI::message(const QString& msg)
2889 QStringList data = msg.split("/");
2890 const int nbStrings = data.count();
2892 if (nbStrings > 0) {
2893 if (data[0] == "modified") {
2895 QString anIOR = nbStrings > 1 ? data[1] : QString();
2897 if ( anIOR.isEmpty() ) {
2901 // Get the geom object.
2902 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
2904 // Clear the shape buffer
2905 GeometryGUI::ClearShapeBuffer (anObj);
2911 \brief Clears the shape buffer.
2913 This is a static method. It clears the shape buffer.
2915 \param theObj the object
2917 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
2919 if ( CORBA::is_nil( theObj ) )
2922 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
2923 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
2924 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
2926 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
2931 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
2936 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
2940 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
2941 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
2942 _PTR(GenericAttribute) anAttr;
2943 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
2944 _PTR(AttributeIOR) anIOR ( anAttr );
2945 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
2946 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
2952 \brief Returns the object from IOR.
2954 This is a static method. It returns the object from its IOR.
2956 \param IOR object IOR
2957 \return GEOM object.
2959 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
2961 GEOM::GEOM_Object_var geomObj;
2962 if ( !IOR.isEmpty() ) {
2963 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
2964 ( IOR.toLatin1().constData() );
2965 if ( !CORBA::is_nil( corbaObj ) )
2966 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
2968 return geomObj._retn();
2972 \brief Returns IOR of the object.
2974 This is a static method. It returns the object's IOR.
2976 \param object the GEOM object.
2977 \return object's IOR.
2979 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
2982 if ( !CORBA::is_nil( object ) ) {
2983 CORBA::String_var anIOR =
2984 SalomeApp_Application::orb()->object_to_string( object );
2991 \brief Check if this object is can't be renamed in place
2993 This method can be re-implemented in the subclasses.
2994 Return true in case if object isn't reference or component (module root).
2996 \param entry column id
2997 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
2999 bool GeometryGUI::renameAllowed( const QString& entry) const {
3001 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3002 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3003 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3005 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3009 Rename object by entry.
3010 \param entry entry of the object
3011 \param name new name of the object
3012 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3014 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3016 bool result = false;
3018 SalomeApp_Application* app =
3019 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3020 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3025 _PTR(Study) aStudy = appStudy->studyDS();
3030 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3032 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3036 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3037 _PTR(GenericAttribute) anAttr;
3039 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3040 _PTR(AttributeName) aName (anAttr);
3042 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3043 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3044 if (!CORBA::is_nil(anObj)) {
3045 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3053 void GeometryGUI::updateMaterials()
3055 LightApp_Preferences* pref = preferences();
3057 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3058 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3059 if ( !materials.contains( currentMaterial ) )
3060 // user material set as default in the preferences, might be removed
3061 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3063 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3065 setPreferenceProperty( prefItem->id(),
3066 "strings", materials );
3067 prefItem->retrieve();
3073 \brief Check if the module allows "drag" operation of its objects.
3075 Overloaded from LightApp_Module class.
3077 This function is a part of the general drag-n-drop mechanism.
3078 The goal of this function is to check data object passed as a parameter
3079 and decide if it can be dragged or no.
3081 \param what data object being tested for drag operation
3082 \return \c true if module allows dragging of the specified object
3083 \sa isDropAccepted(), dropObjects()
3085 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3087 // we allow dragging object under root and object from folder
3088 int aLevel = what->level();
3089 bool anObjectInFolder = false;
3091 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3093 _PTR(SObject) aSO = dataObj->object();
3095 _PTR(GenericAttribute) anAttr;
3096 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3097 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3098 _PTR(AttributeLocalID) aLocalID( anAttr );
3099 anObjectInFolder = aLocalID->Value() == 999;
3104 return aLevel == 2 || anObjectInFolder;
3108 \brief Check if the module allows "drop" operation on the given object.
3110 Overloaded from LightApp_Module class.
3112 This function is a part of the general drag-n-drop mechanism.
3113 The goal of this function is to check data object passed as a parameter
3114 and decide if it can be used as a target for the "drop" operation.
3115 The processing of the drop operation itself is done in the dropObjects() function.
3117 \param where target data object
3118 \return \c true if module supports dropping on the \a where data object
3119 \sa isDraggable(), dropObjects()
3121 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3123 // we allow dropping into folder and top-level GEOM object
3124 int aLevel = where->level();
3125 bool isFolder = false;
3127 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3129 _PTR(SObject) aSO = dataObj->object();
3131 _PTR(GenericAttribute) anAttr;
3132 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3133 _PTR(AttributeLocalID) aLocalID( anAttr );
3134 isFolder = aLocalID->Value() == 999;
3139 return aLevel == 1 || isFolder;
3143 \brief Complete drag-n-drop operation.
3145 Overloaded from LightApp_Module class.
3147 This function is a part of the general drag-n-drop mechanism.
3148 Its goal is to handle dropping of the objects being dragged according
3149 to the chosen operation (move). The dropping is performed in the
3150 context of the parent data object \a where and the \a row (position in the
3151 children index) at which the data should be dropped. If \a row is equal to -1,
3152 this means that objects are added to the end of the children list.
3154 \param what objects being dropped
3155 \param where target data object
3156 \param row child index at which the drop operation is performed
3157 \param action drag-n-drop operation (Qt::DropAction) - move
3159 \sa isDraggable(), isDropAccepted()
3161 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3162 const int row, Qt::DropAction action )
3164 if (action != Qt::CopyAction && action != Qt::MoveAction)
3165 return; // unsupported action
3167 // get parent object
3168 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3169 if ( !dataObj ) return; // wrong parent
3170 _PTR(SObject) parentObj = dataObj->object();
3172 // Find the current Study and StudyBuilder
3173 _PTR(Study) aStudy = parentObj->GetStudy();
3174 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3175 // collect all parents of the target node
3176 QStringList parentIDs;
3177 _PTR(SObject) parent = parentObj;
3178 while( !parent->IsNull() ) {
3179 parentIDs << parent->GetID().c_str();
3180 parent = aUseCaseBuilder->GetFather(parent);
3183 // collect objects being dropped
3184 GEOM::object_list_var objects = new GEOM::object_list();
3185 objects->length( what.count() );
3187 for ( int i = 0; i < what.count(); i++ ) {
3188 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3189 if ( !dataObj ) continue; // skip wrong objects
3190 _PTR(SObject) sobj = dataObj->object();
3191 // check that dropped object is not a parent of target object
3192 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3193 return; // it's not allowed to move node into it's child
3195 objects[i] = _CAST(SObject, sobj)->GetSObject();
3198 objects->length( count );
3200 // call engine function
3201 GetGeomGen()->Move( objects.in(), // what
3202 _CAST(SObject, parentObj)->GetSObject(), // where
3205 // update Object browser
3206 getApp()->updateObjectBrowser( false );