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 createMenu( separator(), fileId, -1 );
1092 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1093 createMenu( GEOMOp::OpDelete, editId, -1 );
1095 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1097 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1098 createMenu( GEOMOp::OpPoint, basicId, -1 );
1099 createMenu( GEOMOp::OpLine, basicId, -1 );
1100 createMenu( GEOMOp::OpCircle, basicId, -1 );
1101 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1102 createMenu( GEOMOp::OpArc, basicId, -1 );
1103 createMenu( GEOMOp::OpCurve, basicId, -1 );
1104 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1105 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1106 createMenu( separator(), basicId, -1 );
1107 createMenu( GEOMOp::OpVector, basicId, -1 );
1108 createMenu( GEOMOp::OpPlane, basicId, -1 );
1109 createMenu( GEOMOp::OpLCS, basicId, -1 );
1110 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1112 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1113 createMenu( GEOMOp::OpBox, primId, -1 );
1114 createMenu( GEOMOp::OpCylinder, primId, -1 );
1115 createMenu( GEOMOp::OpSphere, primId, -1 );
1116 createMenu( GEOMOp::OpTorus, primId, -1 );
1117 createMenu( GEOMOp::OpCone, primId, -1 );
1118 createMenu( GEOMOp::OpRectangle, primId, -1 );
1119 createMenu( GEOMOp::OpDisk, primId, -1 );
1120 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1122 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1123 createMenu( GEOMOp::OpPrism, genId, -1 );
1124 createMenu( GEOMOp::OpRevolution, genId, -1 );
1125 createMenu( GEOMOp::OpFilling, genId, -1 );
1126 createMenu( GEOMOp::OpPipe, genId, -1 );
1127 #if OCC_VERSION_LARGE > 0x06050300
1128 createMenu( GEOMOp::OpPipePath, genId, -1 );
1131 int impexpId = createMenu( tr( "MEN_IMPORTEXPORT" ), newEntId, -1 );
1132 createMenu( GEOMOp::OpExportXAO, impexpId, -1 );
1133 createMenu( GEOMOp::OpImportXAO, impexpId, -1 );
1135 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1136 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1137 //@@ 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 @@//
1139 createMenu( separator(), newEntId, -1 );
1141 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1142 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1143 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1144 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1145 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1146 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1148 createMenu( separator(), newEntId, -1 );
1150 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1151 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1152 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1154 createMenu( separator(), newEntId, -1 );
1156 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1157 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1158 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1159 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1160 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1162 createMenu( separator(), newEntId, -1 );
1164 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1166 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1167 createMenu( GEOMOp::OpEdge, buildId, -1 );
1168 createMenu( GEOMOp::OpWire, buildId, -1 );
1169 createMenu( GEOMOp::OpFace, buildId, -1 );
1170 createMenu( GEOMOp::OpShell, buildId, -1 );
1171 createMenu( GEOMOp::OpSolid, buildId, -1 );
1172 createMenu( GEOMOp::OpCompound, buildId, -1 );
1174 createMenu( separator(), newEntId, -1 );
1176 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1178 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1181 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1183 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1184 createMenu( GEOMOp::OpFuse, boolId, -1 );
1185 createMenu( GEOMOp::OpCommon, boolId, -1 );
1186 createMenu( GEOMOp::OpCut, boolId, -1 );
1187 createMenu( GEOMOp::OpSection, boolId, -1 );
1189 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1190 createMenu( GEOMOp::OpTranslate, transId, -1 );
1191 createMenu( GEOMOp::OpRotate, transId, -1 );
1192 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1193 createMenu( GEOMOp::OpMirror, transId, -1 );
1194 createMenu( GEOMOp::OpScale, transId, -1 );
1195 createMenu( GEOMOp::OpOffset, transId, -1 );
1196 createMenu( GEOMOp::OpProjection, transId, -1 );
1197 createMenu( separator(), transId, -1 );
1198 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1199 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1201 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1202 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1203 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1204 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1206 createMenu( separator(), operId, -1 );
1208 createMenu( GEOMOp::OpPartition, operId, -1 );
1209 createMenu( GEOMOp::OpArchimede, operId, -1 );
1210 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1211 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1213 createMenu( separator(), operId, -1 );
1215 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1216 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1217 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1218 createMenu( GEOMOp::OpChamfer, operId, -1 );
1219 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1220 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1221 #ifdef DEBUG_CURVE_CREATOR
1222 // for debug purposes, to be removed
1223 createMenu( separator(), operId, -1 );
1224 createMenu( GEOMOp::OpCurveCreator, operId, -1 );
1226 //createMenu( GEOMOp::OpClipping, operId, -1 );
1228 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1229 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1230 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1231 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1232 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1233 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1234 createMenu( GEOMOp::OpSewing, repairId, -1 );
1235 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1236 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1237 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1238 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1239 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1240 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1241 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1242 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1243 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1244 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1245 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1247 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1248 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1249 createMenu( GEOMOp::OpProperties, measurId, -1 );
1250 createMenu( separator(), measurId, -1 );
1251 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1252 createMenu( GEOMOp::OpInertia, measurId, -1 );
1253 createMenu( GEOMOp::OpNormale, measurId, -1 );
1254 createMenu( separator(), measurId, -1 );
1255 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1256 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1257 createMenu( separator(), measurId, -1 );
1259 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1260 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1261 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1262 createMenu( GEOMOp::OpAngle, dimId, -1 );
1264 createMenu( separator(), measurId, -1 );
1265 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1266 createMenu( separator(), measurId, -1 );
1267 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1268 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1269 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1270 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1271 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1273 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1274 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1275 createMenu( separator(), toolsId, -1 );
1276 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1279 createMenu( separator(), toolsId, -1 );
1280 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1281 createMenu( separator(), toolsId, -1 );
1283 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1284 createMenu( separator(), viewId, -1 );
1286 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1287 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1288 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1289 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1290 createMenu( separator(), dispmodeId, -1 );
1291 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1293 createMenu( separator(), viewId, -1 );
1294 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1295 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1296 createMenu( separator(), viewId, -1 );
1297 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1298 createMenu( separator(), viewId, -1 );
1302 because of these items are accessible through object browser and viewers
1303 we have removed they from main menu
1305 createMenu( GEOMOp::OpShow, viewId, -1 );
1306 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1307 createMenu( GEOMOp::OpHide, viewId, -1 );
1310 // ---- create toolbars --------------------------
1312 int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1313 createTool( GEOMOp::OpPoint, basicTbId );
1314 createTool( GEOMOp::OpLine, basicTbId );
1315 createTool( GEOMOp::OpCircle, basicTbId );
1316 createTool( GEOMOp::OpEllipse, basicTbId );
1317 createTool( GEOMOp::OpArc, basicTbId );
1318 createTool( GEOMOp::OpCurve, basicTbId );
1319 createTool( GEOMOp::OpVector, basicTbId );
1320 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1321 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1322 createTool( GEOMOp::OpPlane, basicTbId );
1323 createTool( GEOMOp::OpLCS, basicTbId );
1324 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1326 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ) );
1327 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1328 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1330 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1331 createTool( GEOMOp::OpBox, primTbId );
1332 createTool( GEOMOp::OpCylinder, primTbId );
1333 createTool( GEOMOp::OpSphere, primTbId );
1334 createTool( GEOMOp::OpTorus, primTbId );
1335 createTool( GEOMOp::OpCone, primTbId );
1336 createTool( GEOMOp::OpRectangle, primTbId );
1337 createTool( GEOMOp::OpDisk, primTbId );
1338 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1340 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ) );
1341 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1342 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1344 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1345 createTool( GEOMOp::OpFuse, boolTbId );
1346 createTool( GEOMOp::OpCommon, boolTbId );
1347 createTool( GEOMOp::OpCut, boolTbId );
1348 createTool( GEOMOp::OpSection, boolTbId );
1350 int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1351 createTool( GEOMOp::OpPrism, genTbId );
1352 createTool( GEOMOp::OpRevolution, genTbId );
1353 createTool( GEOMOp::OpFilling, genTbId );
1354 createTool( GEOMOp::OpPipe, genTbId );
1355 #if OCC_VERSION_LARGE > 0x06050300
1356 createTool( GEOMOp::OpPipePath, genTbId );
1359 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1360 createTool( GEOMOp::OpTranslate, transTbId );
1361 createTool( GEOMOp::OpRotate, transTbId );
1362 createTool( GEOMOp::OpChangeLoc, transTbId );
1363 createTool( GEOMOp::OpMirror, transTbId );
1364 createTool( GEOMOp::OpScale, transTbId );
1365 createTool( GEOMOp::OpOffset, transTbId );
1366 createTool( GEOMOp::OpProjection, transTbId );
1367 createTool( separator(), transTbId );
1368 createTool( GEOMOp::OpMultiTranslate, transTbId );
1369 createTool( GEOMOp::OpMultiRotate, transTbId );
1371 int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1372 createTool( GEOMOp::OpExplode, operTbId );
1373 createTool( GEOMOp::OpPartition, operTbId );
1374 createTool( GEOMOp::OpArchimede, operTbId );
1375 createTool( GEOMOp::OpShapesOnShape, operTbId );
1376 createTool( GEOMOp::OpSharedShapes, operTbId );
1378 int featTbId = createTool( tr( "TOOL_FEATURES" ) );
1379 createTool( GEOMOp::OpFillet1d, featTbId );
1380 createTool( GEOMOp::OpFillet2d, featTbId );
1381 createTool( GEOMOp::OpFillet3d, featTbId );
1382 createTool( GEOMOp::OpChamfer, featTbId );
1383 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1384 createTool( GEOMOp::OpExtrudedCut, featTbId );
1385 #ifdef DEBUG_CURVE_CREATOR
1386 // for debug purposes, to be removed
1387 createTool( GEOMOp::OpCurveCreator, featTbId );
1390 int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1391 createTool( GEOMOp::OpEdge, buildTbId );
1392 createTool( GEOMOp::OpWire, buildTbId );
1393 createTool( GEOMOp::OpFace, buildTbId );
1394 createTool( GEOMOp::OpShell, buildTbId );
1395 createTool( GEOMOp::OpSolid, buildTbId );
1396 createTool( GEOMOp::OpCompound, buildTbId );
1398 int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1399 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1400 createTool( GEOMOp::OpProperties, measureTbId );
1401 createTool( GEOMOp::OpCenterMass, measureTbId );
1402 createTool( GEOMOp::OpInertia, measureTbId );
1403 createTool( GEOMOp::OpNormale, measureTbId );
1404 createTool( separator(), measureTbId );
1405 createTool( GEOMOp::OpBoundingBox, measureTbId );
1406 createTool( GEOMOp::OpMinDistance, measureTbId );
1407 createTool( GEOMOp::OpAngle, measureTbId );
1408 createTool( GEOMOp::OpTolerance , measureTbId );
1409 createTool( separator(), measureTbId );
1410 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1411 createTool( GEOMOp::OpFreeFaces, measureTbId );
1412 createTool( separator(), measureTbId );
1413 createTool( GEOMOp::OpWhatIs, measureTbId );
1414 createTool( GEOMOp::OpCheckShape, measureTbId );
1415 createTool( GEOMOp::OpCheckCompound, measureTbId );
1416 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1417 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1419 int picturesTbId = createTool( tr( "TOOL_PICTURES" ) );
1420 createTool( GEOMOp::OpPictureImport, picturesTbId );
1422 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1425 int impexpTbId = createTool( tr( "TOOL_IMPORTEXPORT" ) );
1426 createTool( GEOMOp::OpExportXAO, impexpTbId );
1427 createTool( GEOMOp::OpImportXAO, impexpTbId );
1429 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1430 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1431 //@@ 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 @@//
1433 // ---- create popup menus --------------------------
1435 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1436 QString clientOCC = "(client='OCCViewer')";
1437 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1438 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1440 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1441 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1442 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1443 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1445 QString autoColorPrefix =
1446 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1448 QtxPopupMgr* mgr = popupMgr();
1450 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1451 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1452 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1453 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1454 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1455 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1456 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1457 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1459 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1460 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1461 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1462 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1463 mgr->insert( separator(), -1, -1 ); // -----------
1465 #if OCC_VERSION_LARGE > 0x06050200
1466 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1467 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1468 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1469 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1470 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1471 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1472 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1474 mgr->insert( separator(), -1, -1 ); // -----------
1475 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1476 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1477 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1478 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1479 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1480 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1481 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1482 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1483 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1484 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1485 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1486 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1487 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1488 mgr->insert( separator(), dispmodeId, -1 );
1489 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1490 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1491 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1492 mgr->insert( separator(), -1, -1 ); // -----------
1494 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1495 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1496 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1497 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1498 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1499 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1500 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1501 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1502 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1503 //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1504 mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1506 // material properties
1507 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1508 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1511 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1512 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1514 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1515 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1516 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1518 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1519 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1521 mgr->insert( separator(), -1, -1 ); // -----------
1522 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1523 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1524 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1525 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1526 mgr->insert( separator(), -1, -1 ); // -----------
1528 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1529 onlyComponent = "((type='Component') and selcount=1)",
1530 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1531 types = "'Shape' 'Group' 'FieldStep'";
1533 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1534 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1536 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1537 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1539 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1540 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1542 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1544 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1545 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1546 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1547 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1548 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1549 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1550 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1551 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1552 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1553 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1554 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1555 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1556 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1557 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1558 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1559 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1560 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1561 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1562 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1563 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1564 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1565 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1566 mgr->insert( separator(), selectonlyId, -1);
1567 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1568 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1569 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1570 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1571 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1572 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1573 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1575 mgr->insert( separator(), -1, -1 ); // -----------
1576 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1577 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1579 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1580 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1582 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1583 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1585 mgr->insert( separator(), -1, -1 ); // -----------
1586 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1587 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1589 mgr->insert( separator(), -1, -1 ); // -----------
1590 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1591 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1593 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1595 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1597 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1598 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1599 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1602 // create plugin actions and menus
1606 //=======================================================================
1607 // function : GeometryGUI::addPluginActions()
1609 //=======================================================================
1610 void GeometryGUI::addPluginActions()
1613 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1614 if (!resMgr) return;
1616 // Find names of a resource XML files ("GEOMActions.xml" and others);
1618 char* cenv = getenv("GEOM_PluginsList");
1620 PluginsXml.sprintf("%s", cenv);
1622 QStringList PluginsXmlList = PluginsXml.split(":", QString::SkipEmptyParts);
1623 if (PluginsXmlList.count() == 0) return;
1625 // get full names of xml files from PluginsXmlList
1626 QStringList xmlFiles;
1627 xmlFiles.append(QDir::home().filePath("CustomGeomPlugins.xml")); // may be inexistent
1628 for (int i = 0; i < PluginsXmlList.count(); i++) {
1629 PluginsXml = PluginsXmlList[ i ];
1631 // Find full path to the resource XML file
1632 QString xmlFile = resMgr->path("resources", "GEOM", PluginsXml + ".xml");
1633 if ( xmlFile.isEmpty() ) // try PLUGIN resources
1634 xmlFile = resMgr->path("resources", PluginsXml, PluginsXml + ".xml");
1635 if ( !xmlFile.isEmpty() )
1636 xmlFiles.append( xmlFile );
1639 // create "Advanced Operations" menu and corresponding toolbar
1640 //int advancedMenuId = createMenu(tr("MEN_ADVANCED"), -1, -1, 10);
1641 //int advancedTbarId = createTool(tr("TOOL_ADVANCED"));
1642 int id = GEOMOp::OpLastOperationID; // TODO?
1645 QString aNoAccessFiles;
1646 for (int i = 0; i < xmlFiles.count(); i++) {
1647 QString xmlFile = xmlFiles[ i ];
1649 QFile file (xmlFile);
1650 if (file.exists() && file.open(QIODevice::ReadOnly)) {
1653 GEOMGUI_XmlHandler* aXmlHandler = new GEOMGUI_XmlHandler();
1654 ASSERT(aXmlHandler);
1656 QXmlInputSource source (&file);
1657 QXmlSimpleReader reader;
1658 reader.setContentHandler(aXmlHandler);
1659 reader.setErrorHandler(aXmlHandler);
1660 bool ok = reader.parse(source);
1664 // bind action lib and label to its ID for activateOperation() method proper work
1665 myPluginLibs[aXmlHandler->myPluginData.myName] = aXmlHandler->myPluginData.myClientLib;
1667 QListIterator<GEOMGUI_ActionData> anActionsIter (aXmlHandler->myPluginData.myListOfActions);
1668 while (anActionsIter.hasNext()) {
1669 GEOMGUI_ActionData anActionData = anActionsIter.next();
1671 //QPixmap icon = resMgr->loadPixmap("GEOM", tr(anActionData.myIcon.toLatin1().constData()));
1672 QPixmap icon = resMgr->loadPixmap(aXmlHandler->myPluginData.myName,
1673 anActionData.myIcon.toLatin1().constData());
1675 // path to action in menu
1676 QStringList smenus = anActionData.myMenu.split( "/" );
1677 QString actionName = smenus.last();
1678 actionName = actionName.toUpper().prepend("MEN_");
1679 smenus.removeLast();
1681 // path to action in toolbar
1682 QStringList stools = anActionData.myTooltip.split( "/" );
1683 QString actionTool = stools.last();
1684 actionTool = actionTool.toUpper().prepend("TOP_");
1685 stools.removeLast();
1687 QString actionStat = anActionData.myStatusBar;
1688 actionStat = actionStat.toUpper().prepend("STB_");
1690 createAction(id, // ~ anActionData.myLabel
1691 tr(actionTool.toLatin1().constData()),
1693 tr(actionName.toLatin1().constData()),
1694 tr(actionStat.toLatin1().constData()),
1696 application()->desktop(),
1698 this, SLOT(OnGUIEvent()),
1699 QString() /*shortcutAction*/);
1702 foreach (QString subMenu, smenus) {
1703 subMenu = subMenu.toUpper().prepend("MEN_");
1704 menuId = createMenu(tr(subMenu.toLatin1().constData()), menuId, -1);
1706 //createMenu(id, pluginMenuId, -1);
1707 createMenu(id, menuId, -1);
1709 QString subTool = stools[0];
1710 subTool = subTool.toUpper().prepend("TOOL_");
1711 int toolId = createTool(tr(subTool.toLatin1().constData()));
1712 //createTool(id, advancedTbarId);
1713 createTool(id, toolId);
1715 // add action id to map
1716 PluginAction anAction (aXmlHandler->myPluginData.myClientLib, anActionData.myLabel);
1717 myPluginActions[id] = anAction;
1723 SUIT_MessageBox::critical(application()->desktop(),
1724 tr("INF_PARSE_ERROR"),
1725 tr(aXmlHandler->errorProtocol().toLatin1().data()));
1729 else if ( i > 0 ) { // 1st is ~/CustomGeomPlugins.xml
1730 if (aNoAccessFiles.isEmpty())
1731 aNoAccessFiles = xmlFile;
1733 aNoAccessFiles += ", " + xmlFile;
1735 } // end loop on xmlFiles
1737 if (!aNoAccessFiles.isEmpty()) {
1738 QString aMess = QObject::tr("PLUGIN_FILE_CANT_OPEN") + " " + aNoAccessFiles + "\n";
1739 aMess += QObject::tr("PLUGIN_FILE_CHECK_VARIABLE");
1740 SUIT_MessageBox::warning(application()->desktop(), tr("GEOM_WRN_WARNING"), aMess);
1744 //=======================================================================
1745 // function : GeometryGUI::activateModule()
1746 // purpose : Called when GEOM module is activated
1747 //=======================================================================
1748 bool GeometryGUI::activateModule( SUIT_Study* study )
1750 if ( CORBA::is_nil( myComponentGeom ) )
1753 bool res = SalomeApp_Module::activateModule( study );
1757 setMenuShown( true );
1758 setToolShown( true );
1760 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1761 PyGILState_STATE gstate = PyGILState_Ensure();
1762 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1763 if ( !pluginsmanager ) {
1767 PyObjWrapper result =
1768 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1769 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1770 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1774 PyGILState_Release(gstate);
1775 // end of GEOM plugins loading
1777 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1778 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1780 // Reset actions accelerator keys
1781 action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1782 action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1783 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1785 GUIMap::Iterator it;
1786 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1787 it.value()->activate( application()->desktop() );
1789 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1791 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1792 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1793 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1795 if ( !myCreationInfoWdg )
1796 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1797 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1798 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1800 SUIT_ViewManager* vm;
1801 ViewManagerList OCCViewManagers, VTKViewManagers;
1803 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1804 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1805 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1806 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1808 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1809 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1810 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1811 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1814 SALOME_ListIO selected;
1815 sm->selectedObjects( selected );
1816 sm->clearSelected();
1818 // disable OCC selectors
1819 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1820 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1821 while ( itOCCSel.hasNext() )
1822 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1823 sr->setEnabled(true);
1825 // disable VTK selectors
1826 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1827 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1828 while ( itVTKSel.hasNext() )
1829 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1830 sr->setEnabled(true);
1832 sm->setSelectedObjects( selected, true ); //NPAL 19674
1834 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1836 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1838 // 0020836 (Basic vectors and origin)
1839 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1840 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1841 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1843 _PTR(Study) studyDS = appStudy->studyDS();
1845 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1846 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1847 createOriginAndBaseVectors();
1855 //=======================================================================
1856 // function : GeometryGUI::deactivateModule()
1857 // purpose : Called when GEOM module is deactivated
1858 //=======================================================================
1859 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1861 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1863 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1865 setMenuShown( false );
1866 setToolShown( false );
1868 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1869 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1871 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1873 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1874 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1875 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1876 myCreationInfoWdg = 0;
1878 EmitSignalCloseAllDialogs();
1880 GUIMap::Iterator it;
1881 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1882 it.value()->deactivate();
1884 // Unset actions accelerator keys
1885 action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1886 action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1887 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1889 qDeleteAll(myOCCSelectors);
1890 myOCCSelectors.clear();
1891 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1893 qDeleteAll(myVTKSelectors);
1894 myVTKSelectors.clear();
1895 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1897 return SalomeApp_Module::deactivateModule( study );
1900 //=======================================================================
1901 // function : onWindowActivated()
1902 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1903 //=======================================================================
1904 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1909 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1910 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1912 // disable non-OCC viewframe menu commands
1913 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1914 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1915 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1916 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1917 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1918 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1919 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1921 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1922 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1923 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1924 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1926 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1929 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1931 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1932 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1933 if ( myCreationInfoWdg )
1934 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1937 void GeometryGUI::viewManagers( QStringList& lst ) const
1939 lst.append( OCCViewer_Viewer::Type() );
1942 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1944 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1946 qDebug( "connect" );
1947 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1948 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1949 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1950 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1951 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1952 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1953 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1954 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1956 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1957 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1959 // disable OCC selectors
1960 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1961 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1962 while ( itOCCSel.hasNext() )
1963 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1964 sr->setEnabled(true);
1966 else if ( vm->getType() == SVTK_Viewer::Type() )
1968 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1969 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1971 // disable VTK selectors
1972 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1973 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1974 while ( itVTKSel.hasNext() )
1975 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1976 sr->setEnabled(true);
1980 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1982 SUIT_ViewModel* viewer = vm->getViewModel();
1983 if ( vm->getType() == OCCViewer_Viewer::Type() )
1985 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1986 while ( itOCCSel.hasNext() )
1987 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1988 if ( sr->viewer() == viewer )
1990 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1994 if ( vm->getType() == SVTK_Viewer::Type() )
1996 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1997 while ( itVTKSel.hasNext() )
1998 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1999 if ( sr->viewer() == viewer )
2001 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2007 //================================================================================
2009 * \brief Slot called when selection changed. Shows creation info of a selected object
2011 //================================================================================
2013 void GeometryGUI::updateCreationInfo()
2015 if ( myCreationInfoWdg )
2016 myCreationInfoWdg->clear();
2018 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2019 // if ( !myCreationInfoWdg->isVisible() )
2022 // look for a sole selected GEOM_Object
2023 GEOM::GEOM_BaseObject_var geomObj;
2025 SALOME_ListIO selected;
2026 getApp()->selectionMgr()->selectedObjects( selected );
2028 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2029 SALOME_ListIteratorOfListIO selIt( selected );
2030 for ( ; selIt.More(); selIt.Next() )
2032 Handle(SALOME_InteractiveObject) io = selIt.Value();
2033 if ( !io->hasEntry() ) continue;
2034 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2035 if ( !sobj ) continue;
2036 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2037 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2038 if ( !gobj->_is_nil() )
2040 if ( !geomObj->_is_nil() )
2041 return; // several GEOM objects selected
2045 if ( geomObj->_is_nil() ) return;
2047 // pass creation info of geomObj to myCreationInfoWdg
2049 if ( myCreationInfoWdg ) {
2051 QString operationName;
2052 myCreationInfoWdg->setOperation( icon, operationName );
2056 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2058 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2059 QString name = info->operationName.in();
2060 if ( !name.isEmpty() ) {
2061 icon = resMgr->loadPixmap( "GEOM", tr( ("ICO_"+name).toLatin1().constData() ), false );
2062 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2063 if ( operationName.startsWith( "MEN_" ))
2064 operationName = name; // no translation
2065 myCreationInfoWdg->setOperation( icon, operationName );
2067 for ( size_t i = 0; i < info->params.length(); ++i )
2068 myCreationInfoWdg->addParam( info->params[i].name.in(),
2069 info->params[i].value.in() );
2078 void GeometryGUI::onAutoBringToFront()
2080 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front" );
2081 if( !isAutoBringToFront )
2084 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2085 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2088 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2089 if (!appStudy) return;
2091 GEOM_Displayer displayer( appStudy );
2093 SALOME_View* window = displayer.GetActiveView();
2094 if ( !window ) return;
2096 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2098 SALOME_ListIO selected;
2099 getApp()->selectionMgr()->selectedObjects( selected );
2100 SALOME_ListIO allObjects;
2101 window->GetVisible( allObjects );
2103 for ( SALOME_ListIteratorOfListIO It( allObjects ); It.More(); It.Next() ) {
2104 Handle( SALOME_InteractiveObject ) io = It.Value();
2105 bool isSelected = false;
2106 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
2107 Handle( SALOME_InteractiveObject ) ioSelected = It.Value();
2108 if( io->isSame( ioSelected ) )
2111 QVariant v = appStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), QVariant() );
2112 bool isTopLevel = v.isValid() ? v.toBool() : false;
2113 if( isSelected && !isTopLevel ) {
2114 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2115 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2117 else if( !isSelected ) {
2118 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2119 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2122 displayer.UpdateViewer();
2123 GeometryGUI::Modified();
2126 void GeometryGUI::updateFieldColorScale()
2128 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2130 GEOM_Displayer aDisplayer( aStudy );
2131 aDisplayer.UpdateColorScale();
2135 QString GeometryGUI::engineIOR() const
2137 if ( !CORBA::is_nil( GetGeomGen() ) )
2138 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2142 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2143 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2145 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
2147 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2149 theWidth = theHeight = 0;
2151 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2152 Handle(TColStd_HArray1OfByte) aTexture;
2154 Handle(Graphic3d_HArray1OfBytes) aTexture;
2158 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2159 aTexture = aTextureMap[ theId ];
2160 if ( aTexture.IsNull() ) {
2161 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2162 if ( !aInsOp->_is_nil() ) {
2163 CORBA::Long aWidth, aHeight;
2164 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2165 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2167 theHeight = aHeight;
2169 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2170 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2172 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
2175 for (int i = 0; i < aStream->length(); i++)
2176 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2177 aTextureMap[ theId ] = aTexture;
2185 LightApp_Selection* GeometryGUI::createSelection() const
2187 return new GEOMGUI_Selection();
2190 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2192 SalomeApp_Module::contextMenuPopup( client, menu, title );
2194 getApp()->selectionMgr()->selectedObjects( lst );
2196 //Add submenu for predefined materials
2197 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2198 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2199 QtxPopupMgr* mgr = popupMgr();
2200 //get parrent for submenu
2201 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2203 QMenu* oldMenu = act->menu() ;
2208 QMenu* matMenu = new QMenu();
2209 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2211 //Get current material model for the object
2213 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2214 if ( anApp && anApp->activeViewManager() ) {
2215 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2217 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2220 QString curModel = "";
2221 if ( v.canConvert<QString>() ) curModel = v.toString();
2222 // get list of all predefined materials
2223 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2225 foreach ( QString material, materials )
2227 QAction* menAct = matMenu->addAction( material );
2228 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2229 signalMapper->setMapping( menAct, material );
2230 menAct->setCheckable( true );
2231 // Set checked if this material is current
2232 Material_Model aModel;
2233 aModel.fromResources( material );
2234 if ( !found && aModel.toProperties() == curModel ) {
2235 menAct->setChecked( true );
2239 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2240 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2241 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2242 this, SLOT( OnSetMaterial( const QString & ) ) );
2243 act->setMenu( matMenu );
2247 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2248 Handle(SALOME_InteractiveObject) io = lst.First();
2249 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2250 _PTR(Study) study = appStudy->studyDS();
2251 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2253 QString aName = QString( obj->GetName().c_str() );
2254 aName.remove( QRegExp("\\s+$") );
2260 void GeometryGUI::OnSetMaterial(const QString& theName)
2262 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2266 void GeometryGUI::createPreferences()
2268 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2270 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2271 setPreferenceProperty( genGroup, "columns", 2 );
2273 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2274 LightApp_Preferences::Selector,
2275 "Geometry", "display_mode" );
2277 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2278 LightApp_Preferences::Color, "Geometry", "shading_color" );
2280 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2281 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2283 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2284 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2286 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2287 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2289 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2290 LightApp_Preferences::Color, "Geometry", "line_color" );
2292 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2293 LightApp_Preferences::Color, "Geometry", "point_color" );
2295 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2296 LightApp_Preferences::Color, "Geometry", "isos_color" );
2298 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2299 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2301 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2302 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2304 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2305 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2307 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2308 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2310 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2311 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2313 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2314 LightApp_Preferences::Selector,
2315 "Geometry", "material" );
2317 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2318 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2324 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2325 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2327 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2328 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2330 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2331 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2333 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2334 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2336 for (int i = 0; i < nb; i++) {
2337 setPreferenceProperty( wd[i], "min", 1 );
2338 setPreferenceProperty( wd[i], "max", 5 );
2341 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2342 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2344 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2345 setPreferenceProperty( isoGroup, "columns", 2 );
2346 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2347 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2348 setPreferenceProperty( isoU, "min", 0 );
2349 setPreferenceProperty( isoU, "max", 100000 );
2350 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2351 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2352 setPreferenceProperty( isoV, "min", 0 );
2353 setPreferenceProperty( isoV, "max", 100000 );
2355 // Quantities with individual precision settings
2356 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2357 setPreferenceProperty( precGroup, "columns", 2 );
2359 const int nbQuantities = 8;
2360 int prec[nbQuantities], ii = 0;
2361 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2362 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2363 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2364 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2365 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2366 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2367 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2368 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2369 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2370 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2371 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2372 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2373 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2374 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2375 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2376 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2378 // Set property for precision value for spinboxes
2379 for ( ii = 0; ii < nbQuantities; ii++ ){
2380 setPreferenceProperty( prec[ii], "min", -14 );
2381 setPreferenceProperty( prec[ii], "max", 14 );
2382 setPreferenceProperty( prec[ii], "precision", 2 );
2385 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2386 setPreferenceProperty( VertexGroup, "columns", 2 );
2388 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2389 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2391 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2392 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2394 // Set property for default display mode
2395 QStringList aModesList;
2396 aModesList.append( tr("MEN_WIREFRAME") );
2397 aModesList.append( tr("MEN_SHADING") );
2398 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2400 QList<QVariant> anIndexesList;
2401 anIndexesList.append(0);
2402 anIndexesList.append(1);
2403 anIndexesList.append(2);
2405 setPreferenceProperty( dispmode, "strings", aModesList );
2406 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2408 // Set property for top level display mode
2409 QStringList aTopModesList;
2410 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2411 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2412 aTopModesList.append( tr("MEN_WIREFRAME") );
2413 aTopModesList.append( tr("MEN_SHADING") );
2414 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2416 QList<QVariant> aTopIndexesList;
2417 aTopIndexesList.append(0);
2418 aTopIndexesList.append(1);
2419 aTopIndexesList.append(2);
2420 aTopIndexesList.append(3);
2421 aTopIndexesList.append(4);
2423 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2424 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2426 // Set property for step value for spinboxes
2427 setPreferenceProperty( step, "min", 1 );
2428 setPreferenceProperty( step, "max", 10000 );
2429 setPreferenceProperty( step, "precision", 3 );
2431 // Set property for deflection value for spinboxes
2432 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2433 setPreferenceProperty( defl, "max", 1.0 );
2434 setPreferenceProperty( defl, "step", 1.0e-04 );
2435 setPreferenceProperty( defl, "precision", 6 );
2437 // Set property for default material
2438 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2440 // Set property vertex marker type
2441 QList<QVariant> aMarkerTypeIndicesList;
2442 QList<QVariant> aMarkerTypeIconsList;
2444 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2445 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2446 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2447 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2448 aMarkerTypeIndicesList << (i-1);
2449 aMarkerTypeIconsList << pixmap;
2452 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2453 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2455 // Set property for vertex marker scale
2456 QList<QVariant> aMarkerScaleIndicesList;
2457 QStringList aMarkerScaleValuesList;
2459 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2460 aMarkerScaleIndicesList << iii;
2461 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2464 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2465 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2467 // Scalar bar for field step presentation
2468 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2469 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2471 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2472 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2473 setPreferenceProperty( sbXPosition, "min", 0 );
2474 setPreferenceProperty( sbXPosition, "max", 1 );
2475 setPreferenceProperty( sbXPosition, "step", 0.05 );
2477 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2478 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2479 setPreferenceProperty( sbYPosition, "min", 0 );
2480 setPreferenceProperty( sbYPosition, "max", 1 );
2481 setPreferenceProperty( sbYPosition, "step", 0.05 );
2483 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2484 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2485 setPreferenceProperty( sbWidth, "min", 0 );
2486 setPreferenceProperty( sbWidth, "max", 1 );
2487 setPreferenceProperty( sbWidth, "step", 0.05 );
2489 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2490 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2491 setPreferenceProperty( sbHeight, "min", 0 );
2492 setPreferenceProperty( sbHeight, "max", 1 );
2493 setPreferenceProperty( sbHeight, "step", 0.05 );
2495 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2496 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2497 setPreferenceProperty( sbTextHeight, "min", 6 );
2498 setPreferenceProperty( sbTextHeight, "max", 24 );
2499 setPreferenceProperty( sbTextHeight, "step", 1 );
2501 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2502 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2503 setPreferenceProperty( sbNbIntervals, "min", 2 );
2504 setPreferenceProperty( sbNbIntervals, "max", 64 );
2505 setPreferenceProperty( sbNbIntervals, "step", 1 );
2507 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2508 setPreferenceProperty( originGroup, "columns", 2 );
2510 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2511 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2512 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2513 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2515 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2516 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2518 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2519 setPreferenceProperty( operationsGroup, "columns", 2 );
2521 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2522 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2525 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2527 if (section == "Geometry") {
2528 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2529 if (param == QString("SettingsGeomStep")) {
2530 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2531 EmitSignalDefaultStepValueChanged(spin_step);
2533 else if (param == QString("toplevel_color")) {
2534 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2535 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2537 else if (param == QString("toplevel_dm")) {
2538 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2540 else if (param == QString("scalar_bar_x_position") ||
2541 param == QString("scalar_bar_y_position") ||
2542 param == QString("scalar_bar_width") ||
2543 param == QString("scalar_bar_height") ||
2544 param == QString("scalar_bar_text_height") ||
2545 param == QString("scalar_bar_nb_intervals")) {
2546 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2548 GEOM_Displayer aDisplayer( aStudy );
2549 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2550 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps );
2556 LightApp_Displayer* GeometryGUI::displayer()
2559 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2563 void GeometryGUI::setLocalSelectionMode(const int mode)
2565 myLocalSelectionMode = mode;
2568 int GeometryGUI::getLocalSelectionMode() const
2570 return myLocalSelectionMode;
2573 const char gSeparator = '_'; // character used to separate parameter names
2574 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2577 * \brief Store visual parameters
2579 * This method is called just before the study document is saved.
2580 * Store visual parameters in AttributeParameter attribute(s)
2582 void GeometryGUI::storeVisualParameters (int savePoint)
2584 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2585 if ( !appStudy || !appStudy->studyDS() )
2587 _PTR(Study) studyDS = appStudy->studyDS();
2589 // componentName is used for encoding of entries when storing them in IParameters
2590 std::string componentName = myComponentGeom->ComponentDataType();
2591 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2592 //if (!aSComponent) return;
2595 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2596 componentName.c_str(),
2598 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2600 QList<SUIT_ViewManager*> lst;
2601 QList<SUIT_ViewManager*>::Iterator it;
2603 // main cycle to store parameters of displayed objects
2605 getApp()->viewManagers(lst);
2606 for (it = lst.begin(); it != lst.end(); it++) {
2607 SUIT_ViewManager* vman = *it;
2608 QString vType = vman->getType();
2609 int aMgrId = vman->getGlobalId();
2610 // saving VTK actors properties
2611 QVector<SUIT_ViewWindow*> views = vman->getViews();
2612 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2613 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
2614 ObjMap::ConstIterator o_it = anObjects.begin();
2615 for (; o_it != anObjects.end(); o_it++) {
2616 const PropMap aProps = o_it.value();
2618 //Check that object exists in the study
2619 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2620 if ( !obj || !(aProps.count() > 0))
2622 // entry is "encoded" = it does NOT contain component adress, since it is a
2623 // subject to change on next component loading
2625 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2627 _PTR(GenericAttribute) anAttr;
2628 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2631 QString param, occParam = vType;
2632 occParam += GEOM::sectionSeparator();
2633 occParam += QString::number(aMgrId);
2634 occParam += GEOM::sectionSeparator();
2636 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2637 param = occParam + GEOM::propertyName( GEOM::Visibility );
2638 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2641 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2642 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2643 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2646 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2647 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2649 val << QString::number(c.redF());
2650 val << QString::number(c.greenF());
2651 val << QString::number(c.blueF());
2652 param = occParam + GEOM::propertyName( GEOM::Color );
2653 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2656 if (vType == SVTK_Viewer::Type()) {
2657 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2658 param = occParam + GEOM::propertyName( GEOM::Opacity );
2659 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2661 } else if (vType == SOCC_Viewer::Type()) {
2662 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2663 param = occParam + GEOM::propertyName( GEOM::Transparency );
2664 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2667 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2668 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2669 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2673 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2674 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2675 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2678 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2679 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2680 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2683 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2684 param = occParam + GEOM::propertyName( GEOM::Deflection );
2685 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2688 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2689 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2690 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2691 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2694 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2695 param = occParam + GEOM::propertyName( GEOM::Material );
2696 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2699 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2700 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2701 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2704 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2705 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2706 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2708 } // object iterator
2710 } // for (viewManagers)
2714 * \brief Restore visual parameters
2716 * This method is called after the study document is opened.
2717 * Restore visual parameters from AttributeParameter attribute(s)
2719 void GeometryGUI::restoreVisualParameters (int savePoint)
2721 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2722 if (!appStudy || !appStudy->studyDS())
2724 _PTR(Study) studyDS = appStudy->studyDS();
2726 // componentName is used for encoding of entries when storing them in IParameters
2727 std::string componentName = myComponentGeom->ComponentDataType();
2728 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2729 //if (!aSComponent) return;
2732 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2733 componentName.c_str(),
2735 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2737 std::vector<std::string> entries = ip->getEntries();
2739 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2741 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2742 QString entry (ip->decodeEntry(*entIt).c_str());
2744 // Check that the entry corresponds to a real object in the Study
2745 // as the object may be deleted or modified after the visual state is saved.
2746 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2747 if (!so) continue; //Skip the not existent entry
2749 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2750 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2752 std::vector<std::string>::iterator namesIt = paramNames.begin();
2753 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2755 // actors are stored in a map after displaying of them for
2756 // quicker access in the future: map < viewID to actor >
2757 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2758 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2760 QString viewerTypStr;
2761 QString viewIndexStr;
2763 QVector<PropMap> aListOfMap;
2765 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2767 // visual parameters are stored in strings as follows: ViewerType_ViewIndex_ParamName.
2768 // '_' is used as separator and should not be used in viewer type or parameter names.
2769 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2770 if (lst.size() != 3)
2773 viewerTypStr = lst[0];
2774 viewIndexStr = lst[1];
2775 QString paramNameStr = lst[2];
2778 viewIndex = viewIndexStr.toUInt(&ok);
2779 if (!ok) // bad conversion of view index to integer
2782 if ((viewIndex + 1) > aListOfMap.count()) {
2783 aListOfMap.resize(viewIndex + 1);
2786 QString val((*valuesIt).c_str());
2787 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
2788 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
2789 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
2790 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
2791 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
2792 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
2793 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
2794 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
2795 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
2796 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
2797 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
2798 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
2799 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
2800 QStringList rgb = val.split(GEOM::subSectionSeparator());
2801 if (rgb.count() == 3) {
2802 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
2803 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
2805 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
2806 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
2807 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
2808 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
2809 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
2810 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
2811 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
2812 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
2813 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
2814 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
2815 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
2816 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
2818 } // for names/parameters iterator
2820 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2822 for (int index = 0; index < aListOfMap.count(); index++) {
2824 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
2826 //Get Visibility property of the current PropMap
2827 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
2828 SUIT_ViewManager* vman = lst.at(index);
2829 SUIT_ViewModel* vmodel = vman->getViewModel();
2830 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
2833 } // for entries iterator
2835 // update all VTK and OCC views
2836 QList<SUIT_ViewManager*> lst;
2837 getApp()->viewManagers(lst);
2838 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
2839 SUIT_ViewModel* vmodel = (*it)->getViewModel();
2842 if (vmodel->getType() == SVTK_Viewer::Type()) {
2843 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
2844 vtkView->getRenderer()->ResetCameraClippingRange();
2847 else if (vmodel->getType() == SOCC_Viewer::Type()) {
2848 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
2849 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
2856 void GeometryGUI::onViewAboutToShow()
2858 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
2859 QAction* a = action( GEOMOp::OpSwitchVectors );
2861 a->setEnabled(true);
2862 bool vmode = window->property("VectorsMode").toBool();
2863 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
2865 a->setText ( tr("MEN_VECTOR_MODE_ON") );
2866 a->setEnabled(false);
2871 \brief Return action by id
2872 \param id identifier of the action
2875 QAction* GeometryGUI::getAction(const int id) {
2880 \brief GEOM module message handler
2882 This method can be re-implemented in the subclasses.
2883 This is a GEOM module message handler.
2885 \param msg the message received.
2887 void GeometryGUI::message(const QString& msg)
2890 QStringList data = msg.split("/");
2891 const int nbStrings = data.count();
2893 if (nbStrings > 0) {
2894 if (data[0] == "modified") {
2896 QString anIOR = nbStrings > 1 ? data[1] : QString();
2898 if ( anIOR.isEmpty() ) {
2902 // Get the geom object.
2903 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
2905 // Clear the shape buffer
2906 GeometryGUI::ClearShapeBuffer (anObj);
2912 \brief Clears the shape buffer.
2914 This is a static method. It clears the shape buffer.
2916 \param theObj the object
2918 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
2920 if ( CORBA::is_nil( theObj ) )
2923 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
2924 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
2925 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
2927 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
2932 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
2937 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
2941 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
2942 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
2943 _PTR(GenericAttribute) anAttr;
2944 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
2945 _PTR(AttributeIOR) anIOR ( anAttr );
2946 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
2947 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
2953 \brief Returns the object from IOR.
2955 This is a static method. It returns the object from its IOR.
2957 \param IOR object IOR
2958 \return GEOM object.
2960 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
2962 GEOM::GEOM_Object_var geomObj;
2963 if ( !IOR.isEmpty() ) {
2964 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
2965 ( IOR.toLatin1().constData() );
2966 if ( !CORBA::is_nil( corbaObj ) )
2967 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
2969 return geomObj._retn();
2973 \brief Returns IOR of the object.
2975 This is a static method. It returns the object's IOR.
2977 \param object the GEOM object.
2978 \return object's IOR.
2980 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
2983 if ( !CORBA::is_nil( object ) ) {
2984 CORBA::String_var anIOR =
2985 SalomeApp_Application::orb()->object_to_string( object );
2992 \brief Check if this object is can't be renamed in place
2994 This method can be re-implemented in the subclasses.
2995 Return true in case if object isn't reference or component (module root).
2997 \param entry column id
2998 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3000 bool GeometryGUI::renameAllowed( const QString& entry) const {
3002 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3003 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3004 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3006 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3010 Rename object by entry.
3011 \param entry entry of the object
3012 \param name new name of the object
3013 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3015 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3017 bool result = false;
3019 SalomeApp_Application* app =
3020 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3021 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3026 _PTR(Study) aStudy = appStudy->studyDS();
3031 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3033 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3037 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3038 _PTR(GenericAttribute) anAttr;
3040 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3041 _PTR(AttributeName) aName (anAttr);
3043 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3044 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3045 if (!CORBA::is_nil(anObj)) {
3046 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3054 void GeometryGUI::updateMaterials()
3056 LightApp_Preferences* pref = preferences();
3058 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3059 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3060 if ( !materials.contains( currentMaterial ) )
3061 // user material set as default in the preferences, might be removed
3062 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3064 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3066 setPreferenceProperty( prefItem->id(),
3067 "strings", materials );
3068 prefItem->retrieve();
3074 \brief Check if the module allows "drag" operation of its objects.
3076 Overloaded from LightApp_Module class.
3078 This function is a part of the general drag-n-drop mechanism.
3079 The goal of this function is to check data object passed as a parameter
3080 and decide if it can be dragged or no.
3082 \param what data object being tested for drag operation
3083 \return \c true if module allows dragging of the specified object
3084 \sa isDropAccepted(), dropObjects()
3086 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3088 // we allow dragging object under root and object from folder
3089 int aLevel = what->level();
3090 bool anObjectInFolder = false;
3092 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3094 _PTR(SObject) aSO = dataObj->object();
3096 _PTR(GenericAttribute) anAttr;
3097 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3098 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3099 _PTR(AttributeLocalID) aLocalID( anAttr );
3100 anObjectInFolder = aLocalID->Value() == 999;
3105 return aLevel == 2 || anObjectInFolder;
3109 \brief Check if the module allows "drop" operation on the given object.
3111 Overloaded from LightApp_Module class.
3113 This function is a part of the general drag-n-drop mechanism.
3114 The goal of this function is to check data object passed as a parameter
3115 and decide if it can be used as a target for the "drop" operation.
3116 The processing of the drop operation itself is done in the dropObjects() function.
3118 \param where target data object
3119 \return \c true if module supports dropping on the \a where data object
3120 \sa isDraggable(), dropObjects()
3122 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3124 // we allow dropping into folder and top-level GEOM object
3125 int aLevel = where->level();
3126 bool isFolder = false;
3128 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3130 _PTR(SObject) aSO = dataObj->object();
3132 _PTR(GenericAttribute) anAttr;
3133 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3134 _PTR(AttributeLocalID) aLocalID( anAttr );
3135 isFolder = aLocalID->Value() == 999;
3140 return aLevel == 1 || isFolder;
3144 \brief Complete drag-n-drop operation.
3146 Overloaded from LightApp_Module class.
3148 This function is a part of the general drag-n-drop mechanism.
3149 Its goal is to handle dropping of the objects being dragged according
3150 to the chosen operation (move). The dropping is performed in the
3151 context of the parent data object \a where and the \a row (position in the
3152 children index) at which the data should be dropped. If \a row is equal to -1,
3153 this means that objects are added to the end of the children list.
3155 \param what objects being dropped
3156 \param where target data object
3157 \param row child index at which the drop operation is performed
3158 \param action drag-n-drop operation (Qt::DropAction) - move
3160 \sa isDraggable(), isDropAccepted()
3162 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3163 const int row, Qt::DropAction action )
3165 if (action != Qt::CopyAction && action != Qt::MoveAction)
3166 return; // unsupported action
3168 // get parent object
3169 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3170 if ( !dataObj ) return; // wrong parent
3171 _PTR(SObject) parentObj = dataObj->object();
3173 // Find the current Study and StudyBuilder
3174 _PTR(Study) aStudy = parentObj->GetStudy();
3175 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3176 // collect all parents of the target node
3177 QStringList parentIDs;
3178 _PTR(SObject) parent = parentObj;
3179 while( !parent->IsNull() ) {
3180 parentIDs << parent->GetID().c_str();
3181 parent = aUseCaseBuilder->GetFather(parent);
3184 // collect objects being dropped
3185 GEOM::object_list_var objects = new GEOM::object_list();
3186 objects->length( what.count() );
3188 for ( int i = 0; i < what.count(); i++ ) {
3189 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3190 if ( !dataObj ) continue; // skip wrong objects
3191 _PTR(SObject) sobj = dataObj->object();
3192 // check that dropped object is not a parent of target object
3193 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3194 return; // it's not allowed to move node into it's child
3196 objects[i] = _CAST(SObject, sobj)->GetSObject();
3199 objects->length( count );
3201 // call engine function
3202 GetGeomGen()->Move( objects.in(), // what
3203 _CAST(SObject, parentObj)->GetSObject(), // where
3206 // update Object browser
3207 getApp()->updateObjectBrowser( false );