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" ),
206 if ( CORBA::is_nil( myComponentGeom ) )
208 Engines::EngineComponent_var comp =
209 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
210 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
213 myActiveDialogBox = 0;
215 gp_Pnt origin = gp_Pnt(0., 0., 0.);
216 gp_Dir direction = gp_Dir(0., 0., 1.);
217 myWorkingPlane = gp_Ax3(origin, direction);
220 myLocalSelectionMode = GEOM_ALLOBJECTS;
222 myCreationInfoWdg = 0;
224 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
227 //=======================================================================
228 // function : GeometryGUI::~GeometryGUI()
229 // purpose : Destructor
230 //=======================================================================
231 GeometryGUI::~GeometryGUI()
233 while (!myOCCSelectors.isEmpty())
234 delete myOCCSelectors.takeFirst();
236 while (!myVTKSelectors.isEmpty())
237 delete myVTKSelectors.takeFirst();
239 qDeleteAll(myGUIMap);
242 //=======================================================================
243 // function : GeometryGUI::getLibrary()
244 // purpose : get or load GUI library by name [ internal ]
245 //=======================================================================
246 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
247 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
249 if ( !myGUIMap.contains( libraryName ) ) {
250 // try to load library if it is not loaded yet
252 QString dirs = getenv( "LD_LIBRARY_PATH" );
255 QString dirs = getenv( "PATH" );
258 if ( !dirs.isEmpty() ) {
259 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
260 QListIterator<QString> it( dirList ); it.toBack();
261 while ( it.hasPrevious() ) {
262 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
264 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
265 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
267 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
268 continue; // continue search further
270 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
271 if ( osdF != NULL ) {
272 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
273 GEOMGUI* libGUI = (*func)( this );
275 myGUIMap[ libraryName ] = libGUI;
276 break; // found and loaded!
283 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
286 //=======================================================================
287 // function : GeometryGUI::getPluginLibrary()
288 // purpose : get or load GUI Plugin library by name [ internal ]
289 //=======================================================================
290 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
291 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
293 if ( !myGUIMap.contains( libraryName ) ) {
294 // try to load library if it is not loaded yet
296 QString dirs = getenv( "LD_LIBRARY_PATH" );
299 QString dirs = getenv( "PATH" );
302 if ( !dirs.isEmpty() ) {
303 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
304 QListIterator<QString> it( dirList ); it.toBack();
305 while ( it.hasPrevious() ) {
306 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
308 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
309 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
311 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
312 continue; // continue search further
314 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
315 if ( osdF != NULL ) {
316 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
317 GEOMPluginGUI* libGUI = (*func)( this );
319 myGUIMap[ libraryName ] = libGUI;
320 break; // found and loaded!
327 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
330 //=======================================================================
331 // function : GeometryGUI::ActiveWorkingPlane()
332 // purpose : Activate Working Plane View
333 //=======================================================================
334 void GeometryGUI::ActiveWorkingPlane()
336 gp_Dir DZ = myWorkingPlane.Direction();
337 gp_Dir DY = myWorkingPlane.YDirection();
339 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
340 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
341 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
344 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
346 Handle(V3d_View) view3d = vw->getViewPort()->getView();
348 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
349 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
353 else if ( ViewVTK ) {
354 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
356 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
358 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
359 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
360 camera->SetFocalPoint(0,0,0);
367 //=======================================================================
368 // function : GeometryGUI::SetActiveDialogBox()
369 // purpose : Set active dialog box
370 //=======================================================================
371 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
373 myActiveDialogBox = (QDialog*)aDlg;
376 //=======================================================================
377 // function : GeometryGUI::EmitSignalDeactivateDialog()
378 // purpose : Emit a signal to deactivate the active dialog Box
379 //=======================================================================
380 void GeometryGUI::EmitSignalDeactivateDialog()
382 emit SignalDeactivateActiveDialog();
385 //=======================================================================
386 // function : GeometryGUI::EmitSignalCloseAllDialogs()
387 // purpose : Emit a signal to close all non modal dialogs box
388 //=======================================================================
389 void GeometryGUI::EmitSignalCloseAllDialogs()
391 emit SignalCloseAllDialogs();
394 //=======================================================================
395 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
396 // purpose : Emit a signal to inform that default real spin box step has
398 //=======================================================================
399 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
401 emit SignalDefaultStepValueChanged(newVal);
404 //=======================================================================
405 // function : GeometryGUI::OnGUIEvent()
406 // purpose : common slot for all menu/toolbar actions
407 //=======================================================================
408 void GeometryGUI::OnGUIEvent()
410 const QObject* obj = sender();
411 if ( !obj || !obj->inherits( "QAction" ) )
413 int id = actionId((QAction*)obj);
418 //=======================================================================
419 // function : GeometryGUI::OnGUIEvent()
420 // purpose : manage all events on GUI [static]
421 //=======================================================================
422 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
424 SUIT_Application* anApp = application();
426 SUIT_Desktop* desk = anApp->desktop();
428 // check type of the active viewframe
429 SUIT_ViewWindow* window = desk->activeWindow();
430 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
431 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
432 // if current viewframe is not of OCC and not of VTK type - return immediately
433 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
434 QList<int> NotViewerDependentCommands;
435 NotViewerDependentCommands << GEOMOp::OpDelete
437 << GEOMOp::OpShowOnly
438 << GEOMOp::OpShowOnlyChildren
439 << GEOMOp::OpDiscloseChildren
440 << GEOMOp::OpConcealChildren
441 << GEOMOp::OpUnpublishObject
442 << GEOMOp::OpPublishObject
443 << GEOMOp::OpPointMarker
444 << GEOMOp::OpCreateFolder
445 << GEOMOp::OpSortChildren;
446 if ( !ViewOCC && !ViewVTK && !NotViewerDependentCommands.contains( id ) ) {
447 // activate OCC viewer
448 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
451 // fix for IPAL9103, point 2
452 if ( CORBA::is_nil( GetGeomGen() ) ) {
453 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
458 // find corresponding GUI library
460 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
461 createOriginAndBaseVectors(); // internal operation
463 case GEOMOp::OpImport: // MENU FILE - IMPORT
464 case GEOMOp::OpExport: // MENU FILE - EXPORT
465 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
466 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
467 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
468 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
469 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
470 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
471 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
472 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
473 case GEOMOp::OpDelete: // MENU EDIT - DELETE
474 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
475 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
476 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
477 case GEOMOp::OpColor: // POPUP MENU - COLOR
478 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
479 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
480 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
481 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
482 case GEOMOp::OpIsos: // POPUP MENU - ISOS
483 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
484 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
485 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
486 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
487 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
488 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
489 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
490 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
491 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
492 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
493 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
494 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
495 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
496 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
497 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
498 case GEOMOp::OpClsBringToFront: //
499 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
500 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
501 libName = "GEOMToolsGUI";
503 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
504 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
505 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
506 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
507 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
508 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
509 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
510 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
511 case GEOMOp::OpHide: // MENU VIEW - ERASE
512 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
513 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
514 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
515 case GEOMOp::OpShading: // POPUP MENU - SHADING
516 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
517 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
518 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
519 libName = "DisplayGUI";
521 case GEOMOp::OpPoint: // MENU BASIC - POINT
522 case GEOMOp::OpLine: // MENU BASIC - LINE
523 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
524 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
525 case GEOMOp::OpArc: // MENU BASIC - ARC
526 case GEOMOp::OpVector: // MENU BASIC - VECTOR
527 case GEOMOp::OpPlane: // MENU BASIC - PLANE
528 case GEOMOp::OpCurve: // MENU BASIC - CURVE
529 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
530 libName = "BasicGUI";
532 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
533 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
534 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
535 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
536 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
537 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
538 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
539 libName = "PrimitiveGUI";
541 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
542 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
543 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
544 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
545 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
546 libName = "GenerationGUI";
548 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
549 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
550 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
551 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
553 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
555 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
556 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
557 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
558 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
559 libName = "EntityGUI";
561 case GEOMOp::OpEdge: // MENU BUILD - EDGE
562 case GEOMOp::OpWire: // MENU BUILD - WIRE
563 case GEOMOp::OpFace: // MENU BUILD - FACE
564 case GEOMOp::OpShell: // MENU BUILD - SHELL
565 case GEOMOp::OpSolid: // MENU BUILD - SOLID
566 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
567 libName = "BuildGUI";
569 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
570 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
571 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
572 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
573 libName = "BooleanGUI";
575 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
576 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
577 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
578 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
579 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
580 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
581 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
582 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
583 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
584 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
585 libName = "TransformationGUI";
587 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
588 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
589 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
590 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
591 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
592 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
593 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
594 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
595 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
596 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
597 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
598 #ifdef DEBUG_CURVE_CREATOR
599 // for debug purposes, to be removed
600 case GEOMOp::OpCurveCreator: // MENU OPERATION - CURVE CREATOR
602 libName = "OperationGUI";
604 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
605 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
606 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
607 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
608 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
609 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
610 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
611 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
612 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
613 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
614 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
615 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
616 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
617 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
618 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
619 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
620 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
621 libName = "RepairGUI";
623 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
624 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
625 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
626 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
627 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
628 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
629 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
630 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
631 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
632 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
633 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
634 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
635 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
636 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
637 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
638 libName = "MeasureGUI";
640 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
641 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
642 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
643 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
644 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
645 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
646 libName = "GroupGUI";
648 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
649 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
650 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
651 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
652 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
653 libName = "BlocksGUI";
655 case GEOMOp::OpExportXAO: // MENU NEW ENTITY - IMPORTEXPORT - EXPORTXAO
656 case GEOMOp::OpImportXAO: // MENU NEW ENTITY - IMPORTEXPORT - IMPORTXAO
657 libName = "ImportExportGUI";
659 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
660 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
661 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
662 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
663 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
664 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
665 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
666 //libName = "AdvancedGUI";
669 if (myPluginActions.contains(id)) {
670 libName = myPluginActions[id].first;
672 GEOMPluginGUI* library = 0;
673 if ( !libName.isEmpty() ) {
675 libName = QString( "lib" ) + libName + ".so";
677 libName = libName + ".dll";
679 library = getPluginLibrary( libName );
682 // call method of corresponding GUI library
684 //QString action ("%1");
685 //action = action.arg(id);
687 //if( !theParam.isValid() )
688 library->OnGUIEvent( myPluginActions[id].second, desk );
690 // library->OnGUIEvent( id, desk, theParam);
693 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
695 updateCreationInfo();
701 GEOMGUI* library = 0;
702 if ( !libName.isEmpty() ) {
704 libName = QString( "lib" ) + libName + ".so";
706 libName = libName + ".dll";
708 library = getLibrary( libName );
711 // call method of corresponding GUI library
713 if( !theParam.isValid() )
714 library->OnGUIEvent( id, desk );
716 library->OnGUIEvent( id, desk, theParam);
719 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
721 updateCreationInfo();
724 //=================================================================================
725 // function : GeometryGUI::activateOperation()
727 //=================================================================================
728 bool GeometryGUI::activateOperation( int actionId )
730 OnGUIEvent(actionId);
734 //=================================================================================
735 // function : GeometryGUI::activateOperation()
737 //=================================================================================
738 bool GeometryGUI::activateOperation( const QString& actionId )
742 int id = actionId.toInt(&isOk);
749 //=================================================================================
750 // function : GeometryGUI::activateOperation()
752 //=================================================================================
753 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
757 QString pluginLib = plugin;
758 // TODO: if <plugin> is a plugin name, find plugin library name
759 if (myPluginLibs.contains(plugin))
760 pluginLib = myPluginLibs[plugin];
762 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
763 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
764 const PluginAction& anAction = actionsIter.value();
765 if (anAction.first == pluginLib && anAction.second == actionId) {
766 // activate operation
767 OnGUIEvent(actionsIter.key());
775 //=================================================================================
776 // function : GeometryGUI::OnKeyPress()
777 // purpose : Called when any key is pressed by user [static]
778 //=================================================================================
779 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
781 if ( !application() )
783 foreach ( GEOMGUI* lib, myGUIMap )
784 lib->OnKeyPress( e, application()->desktop(), w );
787 //=================================================================================
788 // function : GeometryGUI::OnMouseMove()
789 // purpose : Manages mouse move events [static]
790 //=================================================================================
791 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
793 if ( !application() )
795 foreach ( GEOMGUI* lib, myGUIMap )
796 lib->OnMouseMove( e, application()->desktop(), w );
799 //=================================================================================
800 // function : GeometryGUI::OnMouseRelease()
801 // purpose : Manages mouse release events [static]
802 //=================================================================================
803 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
805 if ( !application() )
807 foreach ( GEOMGUI* lib, myGUIMap )
808 lib->OnMouseRelease( e, application()->desktop(), w );
811 //=================================================================================
812 // function : GeometryGUI::OnMousePress()
813 // purpose : Manage mouse press events [static]
814 //=================================================================================
815 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
817 if ( !application() )
819 foreach ( GEOMGUI* lib, myGUIMap )
820 lib->OnMousePress( e, application()->desktop(), w );
823 //=======================================================================
824 // function : createGeomAction
826 //=======================================================================
827 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
828 const int accel, const bool toggle, const QString& shortcutAction )
830 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
831 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
832 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
834 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
836 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
837 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
839 application()->desktop(),
841 this, SLOT( OnGUIEvent() ),
845 //=======================================================================
846 // function : createOriginAndBaseVectors
848 //=======================================================================
849 void GeometryGUI::createOriginAndBaseVectors()
851 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
852 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
854 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
858 _PTR(Study) studyDS = appStudy->studyDS();
859 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
860 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
861 if ( !aBasicOperations->_is_nil() ) {
862 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
863 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
864 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
865 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
866 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
867 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
869 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
870 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
871 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
872 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
873 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
875 getApp()->updateObjectBrowser( true );
881 //=======================================================================
882 // function : GeometryGUI::initialize()
883 // purpose : Called when GEOM module is created
884 //=======================================================================
885 void GeometryGUI::initialize( CAM_Application* app )
887 SalomeApp_Module::initialize( app );
889 // ----- create actions --------------
891 createGeomAction( GEOMOp::OpImport, "IMPORT", "", Qt::ControlModifier + Qt::Key_I );
892 createGeomAction( GEOMOp::OpExport, "EXPORT", "", Qt::ControlModifier + Qt::Key_E );
894 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
896 createGeomAction( GEOMOp::OpPoint, "POINT" );
897 createGeomAction( GEOMOp::OpLine, "LINE" );
898 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
899 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
900 createGeomAction( GEOMOp::OpArc, "ARC" );
901 createGeomAction( GEOMOp::OpCurve, "CURVE" );
902 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
903 createGeomAction( GEOMOp::OpVector, "VECTOR" );
904 createGeomAction( GEOMOp::OpPlane, "PLANE" );
905 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
906 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
908 createGeomAction( GEOMOp::OpBox, "BOX" );
909 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
910 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
911 createGeomAction( GEOMOp::OpTorus, "TORUS" );
912 createGeomAction( GEOMOp::OpCone, "CONE" );
913 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
914 createGeomAction( GEOMOp::OpDisk, "DISK" );
916 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
917 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
918 createGeomAction( GEOMOp::OpFilling, "FILLING" );
919 createGeomAction( GEOMOp::OpPipe, "PIPE" );
920 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
922 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
923 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
924 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
925 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
926 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
928 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
929 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
931 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
933 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
934 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
936 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
937 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
938 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
939 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
941 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
943 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
945 createGeomAction( GEOMOp::OpEdge, "EDGE" );
946 createGeomAction( GEOMOp::OpWire, "WIRE" );
947 createGeomAction( GEOMOp::OpFace, "FACE" );
948 createGeomAction( GEOMOp::OpShell, "SHELL" );
949 createGeomAction( GEOMOp::OpSolid, "SOLID" );
950 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
952 createGeomAction( GEOMOp::OpFuse, "FUSE" );
953 createGeomAction( GEOMOp::OpCommon, "COMMON" );
954 createGeomAction( GEOMOp::OpCut, "CUT" );
955 createGeomAction( GEOMOp::OpSection, "SECTION" );
957 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
958 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
959 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
960 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
961 createGeomAction( GEOMOp::OpScale, "SCALE" );
962 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
963 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
964 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
965 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
967 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
968 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
969 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
970 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
971 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
972 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
973 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
974 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
975 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
976 #ifdef DEBUG_CURVE_CREATOR
977 // for debug purposes, to be removed
978 createGeomAction( GEOMOp::OpCurveCreator, "CURVE_CREATOR" );
980 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
981 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
983 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
984 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
985 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
987 createGeomAction( GEOMOp::OpSewing, "SEWING" );
988 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
989 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
990 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
991 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
992 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
993 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
994 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
995 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
996 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
997 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
998 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
999 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1000 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1001 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1002 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1003 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1005 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1006 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1007 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1008 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1009 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1010 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1011 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1012 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1013 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1015 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1016 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1017 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1018 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1019 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1020 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1022 #ifdef _DEBUG_ // PAL16821
1023 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1026 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1027 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1028 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1029 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1030 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1031 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1032 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1033 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1034 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1035 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1036 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1037 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1038 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1039 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1040 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1041 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1042 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1043 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1044 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1045 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1046 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1047 createGeomAction( GEOMOp::OpHide, "ERASE" );
1049 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1050 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1051 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1052 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1053 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1054 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1055 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1056 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1057 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1058 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1059 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1060 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1061 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1062 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1063 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1064 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1065 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1066 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1067 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1068 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1069 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1070 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1071 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1072 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1073 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1075 // Create actions for increase/decrease transparency shortcuts
1076 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1077 "Geometry:Increase transparency");
1078 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1079 "Geometry:Decrease transparency");
1081 // Create actions for increase/decrease number of isolines
1082 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1083 "Geometry:Increase number of isolines");
1084 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1085 "Geometry:Decrease number of isolines");
1087 // Import/Export XAO
1088 createGeomAction( GEOMOp::OpExportXAO, "EXPORTXAO" );
1089 createGeomAction( GEOMOp::OpImportXAO, "IMPORTXAO" );
1091 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1092 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1093 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1094 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1095 //@@ 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 @@//
1097 // ---- create menus --------------------------
1099 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1100 createMenu( separator(), fileId, 10 );
1101 createMenu( GEOMOp::OpImport, fileId, 10 );
1102 createMenu( GEOMOp::OpExport, fileId, 10 );
1103 int impexpId = createMenu( tr( "MEN_IMPORTEXPORT" ), fileId, -1, 10 );
1104 createMenu( GEOMOp::OpExportXAO, impexpId, -1 );
1105 createMenu( GEOMOp::OpImportXAO, impexpId, -1 );
1106 createMenu( separator(), fileId, -1 );
1108 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1109 createMenu( GEOMOp::OpDelete, editId, -1 );
1111 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1113 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1114 createMenu( GEOMOp::OpPoint, basicId, -1 );
1115 createMenu( GEOMOp::OpLine, basicId, -1 );
1116 createMenu( GEOMOp::OpCircle, basicId, -1 );
1117 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1118 createMenu( GEOMOp::OpArc, basicId, -1 );
1119 createMenu( GEOMOp::OpCurve, basicId, -1 );
1120 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1121 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1122 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1123 createMenu( separator(), basicId, -1 );
1124 createMenu( GEOMOp::OpVector, basicId, -1 );
1125 createMenu( GEOMOp::OpPlane, basicId, -1 );
1126 createMenu( GEOMOp::OpLCS, basicId, -1 );
1127 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1129 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1130 createMenu( GEOMOp::OpBox, primId, -1 );
1131 createMenu( GEOMOp::OpCylinder, primId, -1 );
1132 createMenu( GEOMOp::OpSphere, primId, -1 );
1133 createMenu( GEOMOp::OpTorus, primId, -1 );
1134 createMenu( GEOMOp::OpCone, primId, -1 );
1135 createMenu( GEOMOp::OpRectangle, primId, -1 );
1136 createMenu( GEOMOp::OpDisk, primId, -1 );
1137 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1139 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1140 createMenu( GEOMOp::OpPrism, genId, -1 );
1141 createMenu( GEOMOp::OpRevolution, genId, -1 );
1142 createMenu( GEOMOp::OpFilling, genId, -1 );
1143 createMenu( GEOMOp::OpPipe, genId, -1 );
1144 #if OCC_VERSION_LARGE > 0x06050300
1145 createMenu( GEOMOp::OpPipePath, genId, -1 );
1148 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1149 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1150 //@@ 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 @@//
1152 createMenu( separator(), newEntId, -1 );
1154 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1155 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1156 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1157 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1158 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1159 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1161 createMenu( separator(), newEntId, -1 );
1163 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1164 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1165 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1167 createMenu( separator(), newEntId, -1 );
1169 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1170 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1171 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1172 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1173 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1175 createMenu( separator(), newEntId, -1 );
1177 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1179 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1180 createMenu( GEOMOp::OpEdge, buildId, -1 );
1181 createMenu( GEOMOp::OpWire, buildId, -1 );
1182 createMenu( GEOMOp::OpFace, buildId, -1 );
1183 createMenu( GEOMOp::OpShell, buildId, -1 );
1184 createMenu( GEOMOp::OpSolid, buildId, -1 );
1185 createMenu( GEOMOp::OpCompound, buildId, -1 );
1187 createMenu( separator(), newEntId, -1 );
1189 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1191 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1194 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1196 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1197 createMenu( GEOMOp::OpFuse, boolId, -1 );
1198 createMenu( GEOMOp::OpCommon, boolId, -1 );
1199 createMenu( GEOMOp::OpCut, boolId, -1 );
1200 createMenu( GEOMOp::OpSection, boolId, -1 );
1202 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1203 createMenu( GEOMOp::OpTranslate, transId, -1 );
1204 createMenu( GEOMOp::OpRotate, transId, -1 );
1205 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1206 createMenu( GEOMOp::OpMirror, transId, -1 );
1207 createMenu( GEOMOp::OpScale, transId, -1 );
1208 createMenu( GEOMOp::OpOffset, transId, -1 );
1209 createMenu( GEOMOp::OpProjection, transId, -1 );
1210 createMenu( separator(), transId, -1 );
1211 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1212 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1214 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1215 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1216 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1217 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1219 createMenu( separator(), operId, -1 );
1221 createMenu( GEOMOp::OpPartition, operId, -1 );
1222 createMenu( GEOMOp::OpArchimede, operId, -1 );
1223 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1224 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1226 createMenu( separator(), operId, -1 );
1228 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1229 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1230 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1231 createMenu( GEOMOp::OpChamfer, operId, -1 );
1232 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1233 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1234 #ifdef DEBUG_CURVE_CREATOR
1235 // for debug purposes, to be removed
1236 createMenu( separator(), operId, -1 );
1237 createMenu( GEOMOp::OpCurveCreator, operId, -1 );
1239 //createMenu( GEOMOp::OpClipping, operId, -1 );
1241 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1242 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1243 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1244 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1245 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1246 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1247 createMenu( GEOMOp::OpSewing, repairId, -1 );
1248 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1249 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1250 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1251 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1252 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1253 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1254 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1255 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1256 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1257 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1258 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1260 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1261 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1262 createMenu( GEOMOp::OpProperties, measurId, -1 );
1263 createMenu( separator(), measurId, -1 );
1264 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1265 createMenu( GEOMOp::OpInertia, measurId, -1 );
1266 createMenu( GEOMOp::OpNormale, measurId, -1 );
1267 createMenu( separator(), measurId, -1 );
1268 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1269 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1270 createMenu( separator(), measurId, -1 );
1272 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1273 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1274 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1275 createMenu( GEOMOp::OpAngle, dimId, -1 );
1276 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1278 createMenu( separator(), measurId, -1 );
1279 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1280 createMenu( separator(), measurId, -1 );
1281 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1282 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1283 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1284 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1285 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1287 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1288 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1289 createMenu( separator(), toolsId, -1 );
1290 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1293 createMenu( separator(), toolsId, -1 );
1294 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1295 createMenu( separator(), toolsId, -1 );
1297 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1298 createMenu( separator(), viewId, -1 );
1300 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1301 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1302 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1303 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1304 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1305 createMenu( separator(), dispmodeId, -1 );
1306 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1308 createMenu( separator(), viewId, -1 );
1309 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1310 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1311 createMenu( separator(), viewId, -1 );
1312 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1313 createMenu( separator(), viewId, -1 );
1317 because of these items are accessible through object browser and viewers
1318 we have removed they from main menu
1320 createMenu( GEOMOp::OpShow, viewId, -1 );
1321 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1322 createMenu( GEOMOp::OpHide, viewId, -1 );
1325 // ---- create toolbars --------------------------
1327 int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1328 createTool( GEOMOp::OpPoint, basicTbId );
1329 createTool( GEOMOp::OpLine, basicTbId );
1330 createTool( GEOMOp::OpCircle, basicTbId );
1331 createTool( GEOMOp::OpEllipse, basicTbId );
1332 createTool( GEOMOp::OpArc, basicTbId );
1333 createTool( GEOMOp::OpCurve, basicTbId );
1334 createTool( GEOMOp::OpVector, basicTbId );
1335 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1336 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1337 createTool( GEOMOp::OpIsoline, basicTbId );
1338 createTool( GEOMOp::OpPlane, basicTbId );
1339 createTool( GEOMOp::OpLCS, basicTbId );
1340 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1342 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ) );
1343 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1344 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1346 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1347 createTool( GEOMOp::OpBox, primTbId );
1348 createTool( GEOMOp::OpCylinder, primTbId );
1349 createTool( GEOMOp::OpSphere, primTbId );
1350 createTool( GEOMOp::OpTorus, primTbId );
1351 createTool( GEOMOp::OpCone, primTbId );
1352 createTool( GEOMOp::OpRectangle, primTbId );
1353 createTool( GEOMOp::OpDisk, primTbId );
1354 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1356 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ) );
1357 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1358 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1360 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1361 createTool( GEOMOp::OpFuse, boolTbId );
1362 createTool( GEOMOp::OpCommon, boolTbId );
1363 createTool( GEOMOp::OpCut, boolTbId );
1364 createTool( GEOMOp::OpSection, boolTbId );
1366 int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1367 createTool( GEOMOp::OpPrism, genTbId );
1368 createTool( GEOMOp::OpRevolution, genTbId );
1369 createTool( GEOMOp::OpFilling, genTbId );
1370 createTool( GEOMOp::OpPipe, genTbId );
1371 #if OCC_VERSION_LARGE > 0x06050300
1372 createTool( GEOMOp::OpPipePath, genTbId );
1375 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1376 createTool( GEOMOp::OpTranslate, transTbId );
1377 createTool( GEOMOp::OpRotate, transTbId );
1378 createTool( GEOMOp::OpChangeLoc, transTbId );
1379 createTool( GEOMOp::OpMirror, transTbId );
1380 createTool( GEOMOp::OpScale, transTbId );
1381 createTool( GEOMOp::OpOffset, transTbId );
1382 createTool( GEOMOp::OpProjection, transTbId );
1383 createTool( separator(), transTbId );
1384 createTool( GEOMOp::OpMultiTranslate, transTbId );
1385 createTool( GEOMOp::OpMultiRotate, transTbId );
1387 int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1388 createTool( GEOMOp::OpExplode, operTbId );
1389 createTool( GEOMOp::OpPartition, operTbId );
1390 createTool( GEOMOp::OpArchimede, operTbId );
1391 createTool( GEOMOp::OpShapesOnShape, operTbId );
1392 createTool( GEOMOp::OpSharedShapes, operTbId );
1394 int featTbId = createTool( tr( "TOOL_FEATURES" ) );
1395 createTool( GEOMOp::OpFillet1d, featTbId );
1396 createTool( GEOMOp::OpFillet2d, featTbId );
1397 createTool( GEOMOp::OpFillet3d, featTbId );
1398 createTool( GEOMOp::OpChamfer, featTbId );
1399 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1400 createTool( GEOMOp::OpExtrudedCut, featTbId );
1401 #ifdef DEBUG_CURVE_CREATOR
1402 // for debug purposes, to be removed
1403 createTool( GEOMOp::OpCurveCreator, featTbId );
1406 int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1407 createTool( GEOMOp::OpEdge, buildTbId );
1408 createTool( GEOMOp::OpWire, buildTbId );
1409 createTool( GEOMOp::OpFace, buildTbId );
1410 createTool( GEOMOp::OpShell, buildTbId );
1411 createTool( GEOMOp::OpSolid, buildTbId );
1412 createTool( GEOMOp::OpCompound, buildTbId );
1414 int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1415 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1416 createTool( GEOMOp::OpProperties, measureTbId );
1417 createTool( GEOMOp::OpCenterMass, measureTbId );
1418 createTool( GEOMOp::OpInertia, measureTbId );
1419 createTool( GEOMOp::OpNormale, measureTbId );
1420 createTool( separator(), measureTbId );
1421 createTool( GEOMOp::OpBoundingBox, measureTbId );
1422 createTool( GEOMOp::OpMinDistance, measureTbId );
1423 createTool( GEOMOp::OpAngle, measureTbId );
1424 createTool( GEOMOp::OpTolerance , measureTbId );
1425 createTool( separator(), measureTbId );
1426 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1427 createTool( GEOMOp::OpFreeFaces, measureTbId );
1428 createTool( separator(), measureTbId );
1429 createTool( GEOMOp::OpWhatIs, measureTbId );
1430 createTool( GEOMOp::OpCheckShape, measureTbId );
1431 createTool( GEOMOp::OpCheckCompound, measureTbId );
1432 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1433 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1435 int picturesTbId = createTool( tr( "TOOL_PICTURES" ) );
1436 createTool( GEOMOp::OpPictureImport, picturesTbId );
1438 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1441 int impexpTbId = createTool( tr( "TOOL_IMPORTEXPORT" ) );
1442 createTool( GEOMOp::OpExportXAO, impexpTbId );
1443 createTool( GEOMOp::OpImportXAO, impexpTbId );
1445 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1446 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1447 //@@ 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 @@//
1449 // ---- create popup menus --------------------------
1451 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1452 QString clientOCC = "(client='OCCViewer')";
1453 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1454 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1456 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1457 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1458 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1459 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1461 QString autoColorPrefix =
1462 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1464 QtxPopupMgr* mgr = popupMgr();
1466 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1467 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1468 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1469 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1470 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1471 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1472 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1473 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1475 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1476 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1477 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1478 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1479 mgr->insert( separator(), -1, -1 ); // -----------
1481 #if OCC_VERSION_LARGE > 0x06050200
1482 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1483 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1484 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1485 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1486 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1487 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1488 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1490 mgr->insert( separator(), -1, -1 ); // -----------
1491 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1492 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1493 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1494 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1495 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1496 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1497 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1498 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1499 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1500 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1501 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1502 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1503 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1504 mgr->insert( separator(), dispmodeId, -1 );
1505 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1506 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1507 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1508 mgr->insert( separator(), -1, -1 ); // -----------
1510 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1511 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1512 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1513 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1514 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1515 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1516 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1517 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1518 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1519 //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1520 mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1522 // material properties
1523 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1524 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1527 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1528 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1530 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1531 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1532 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1534 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1535 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1537 mgr->insert( separator(), -1, -1 ); // -----------
1538 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1539 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1540 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1541 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1542 mgr->insert( separator(), -1, -1 ); // -----------
1544 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1545 onlyComponent = "((type='Component') and selcount=1)",
1546 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1547 types = "'Shape' 'Group' 'FieldStep'";
1549 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1550 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1552 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1553 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1555 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1556 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1558 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1560 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1561 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1562 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1563 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1564 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1565 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1566 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1567 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1568 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1569 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1570 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1571 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1572 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1573 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1574 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1575 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1576 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1577 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1578 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1579 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1580 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1581 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1582 mgr->insert( separator(), selectonlyId, -1);
1583 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1584 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1585 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1586 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1587 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1588 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1589 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1591 mgr->insert( separator(), -1, -1 ); // -----------
1592 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1593 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1595 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1596 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1598 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1599 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1601 mgr->insert( separator(), -1, -1 ); // -----------
1602 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1603 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1605 mgr->insert( separator(), -1, -1 ); // -----------
1606 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1607 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1609 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1611 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1613 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1614 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1615 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1618 // create plugin actions and menus
1622 //=======================================================================
1623 // function : GeometryGUI::addPluginActions()
1625 //=======================================================================
1626 void GeometryGUI::addPluginActions()
1629 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1630 if (!resMgr) return;
1632 // Find names of a resource XML files ("GEOMActions.xml" and others);
1634 char* cenv = getenv("GEOM_PluginsList");
1636 PluginsXml.sprintf("%s", cenv);
1638 QStringList PluginsXmlList = PluginsXml.split(":", QString::SkipEmptyParts);
1639 if (PluginsXmlList.count() == 0) return;
1641 // get full names of xml files from PluginsXmlList
1642 QStringList xmlFiles;
1643 xmlFiles.append(QDir::home().filePath("CustomGeomPlugins.xml")); // may be inexistent
1644 for (int i = 0; i < PluginsXmlList.count(); i++) {
1645 PluginsXml = PluginsXmlList[ i ];
1647 // Find full path to the resource XML file
1648 QString xmlFile = resMgr->path("resources", "GEOM", PluginsXml + ".xml");
1649 if ( xmlFile.isEmpty() ) // try PLUGIN resources
1650 xmlFile = resMgr->path("resources", PluginsXml, PluginsXml + ".xml");
1651 if ( !xmlFile.isEmpty() )
1652 xmlFiles.append( xmlFile );
1655 // create "Advanced Operations" menu and corresponding toolbar
1656 //int advancedMenuId = createMenu(tr("MEN_ADVANCED"), -1, -1, 10);
1657 //int advancedTbarId = createTool(tr("TOOL_ADVANCED"));
1658 int id = GEOMOp::OpLastOperationID; // TODO?
1661 QString aNoAccessFiles;
1662 for (int i = 0; i < xmlFiles.count(); i++) {
1663 QString xmlFile = xmlFiles[ i ];
1665 QFile file (xmlFile);
1666 if (file.exists() && file.open(QIODevice::ReadOnly)) {
1669 GEOMGUI_XmlHandler* aXmlHandler = new GEOMGUI_XmlHandler();
1670 ASSERT(aXmlHandler);
1672 QXmlInputSource source (&file);
1673 QXmlSimpleReader reader;
1674 reader.setContentHandler(aXmlHandler);
1675 reader.setErrorHandler(aXmlHandler);
1676 bool ok = reader.parse(source);
1680 // bind action lib and label to its ID for activateOperation() method proper work
1681 myPluginLibs[aXmlHandler->myPluginData.myName] = aXmlHandler->myPluginData.myClientLib;
1683 QListIterator<GEOMGUI_ActionData> anActionsIter (aXmlHandler->myPluginData.myListOfActions);
1684 while (anActionsIter.hasNext()) {
1685 GEOMGUI_ActionData anActionData = anActionsIter.next();
1687 //QPixmap icon = resMgr->loadPixmap("GEOM", tr(anActionData.myIcon.toLatin1().constData()));
1688 QPixmap icon = resMgr->loadPixmap(aXmlHandler->myPluginData.myName,
1689 anActionData.myIcon.toLatin1().constData());
1691 // path to action in menu
1692 QStringList smenus = anActionData.myMenu.split( "/" );
1693 QString actionName = smenus.last();
1694 actionName = actionName.toUpper().prepend("MEN_");
1695 smenus.removeLast();
1697 // path to action in toolbar
1698 QStringList stools = anActionData.myTooltip.split( "/" );
1699 QString actionTool = stools.last();
1700 actionTool = actionTool.toUpper().prepend("TOP_");
1701 stools.removeLast();
1703 QString actionStat = anActionData.myStatusBar;
1704 actionStat = actionStat.toUpper().prepend("STB_");
1706 createAction(id, // ~ anActionData.myLabel
1707 tr(actionTool.toLatin1().constData()),
1709 tr(actionName.toLatin1().constData()),
1710 tr(actionStat.toLatin1().constData()),
1712 application()->desktop(),
1714 this, SLOT(OnGUIEvent()),
1715 QString() /*shortcutAction*/);
1718 foreach (QString subMenu, smenus) {
1719 subMenu = subMenu.toUpper().prepend("MEN_");
1720 menuId = createMenu(tr(subMenu.toLatin1().constData()), menuId, -1);
1722 //createMenu(id, pluginMenuId, -1);
1723 createMenu(id, menuId, -1);
1725 QString subTool = stools[0];
1726 subTool = subTool.toUpper().prepend("TOOL_");
1727 int toolId = createTool(tr(subTool.toLatin1().constData()));
1728 //createTool(id, advancedTbarId);
1729 createTool(id, toolId);
1731 // add action id to map
1732 PluginAction anAction (aXmlHandler->myPluginData.myClientLib, anActionData.myLabel);
1733 myPluginActions[id] = anAction;
1739 SUIT_MessageBox::critical(application()->desktop(),
1740 tr("INF_PARSE_ERROR"),
1741 tr(aXmlHandler->errorProtocol().toLatin1().data()));
1745 else if ( i > 0 ) { // 1st is ~/CustomGeomPlugins.xml
1746 if (aNoAccessFiles.isEmpty())
1747 aNoAccessFiles = xmlFile;
1749 aNoAccessFiles += ", " + xmlFile;
1751 } // end loop on xmlFiles
1753 if (!aNoAccessFiles.isEmpty()) {
1754 QString aMess = QObject::tr("PLUGIN_FILE_CANT_OPEN") + " " + aNoAccessFiles + "\n";
1755 aMess += QObject::tr("PLUGIN_FILE_CHECK_VARIABLE");
1756 SUIT_MessageBox::warning(application()->desktop(), tr("GEOM_WRN_WARNING"), aMess);
1760 //=======================================================================
1761 // function : GeometryGUI::activateModule()
1762 // purpose : Called when GEOM module is activated
1763 //=======================================================================
1764 bool GeometryGUI::activateModule( SUIT_Study* study )
1766 if ( CORBA::is_nil( myComponentGeom ) )
1769 bool res = SalomeApp_Module::activateModule( study );
1773 setMenuShown( true );
1774 setToolShown( true );
1776 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1777 PyGILState_STATE gstate = PyGILState_Ensure();
1778 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1779 if ( !pluginsmanager ) {
1783 PyObjWrapper result =
1784 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1785 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1786 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1790 PyGILState_Release(gstate);
1791 // end of GEOM plugins loading
1793 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1794 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1796 // Reset actions accelerator keys
1797 action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1798 action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1799 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1801 GUIMap::Iterator it;
1802 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1803 it.value()->activate( application()->desktop() );
1805 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1807 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1808 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1809 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1811 if ( !myCreationInfoWdg )
1812 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1813 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1814 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1816 SUIT_ViewManager* vm;
1817 ViewManagerList OCCViewManagers, VTKViewManagers;
1819 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1820 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1821 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1822 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1824 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1825 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1826 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1827 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1830 SALOME_ListIO selected;
1831 sm->selectedObjects( selected );
1832 sm->clearSelected();
1834 // disable OCC selectors
1835 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1836 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1837 while ( itOCCSel.hasNext() )
1838 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1839 sr->setEnabled(true);
1841 // disable VTK selectors
1842 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1843 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1844 while ( itVTKSel.hasNext() )
1845 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1846 sr->setEnabled(true);
1848 sm->setSelectedObjects( selected, true ); //NPAL 19674
1850 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1852 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1854 // 0020836 (Basic vectors and origin)
1855 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1856 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1857 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1859 _PTR(Study) studyDS = appStudy->studyDS();
1861 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1862 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1863 createOriginAndBaseVectors();
1871 //=======================================================================
1872 // function : GeometryGUI::deactivateModule()
1873 // purpose : Called when GEOM module is deactivated
1874 //=======================================================================
1875 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1877 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1879 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1881 setMenuShown( false );
1882 setToolShown( false );
1884 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1885 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1887 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1889 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1890 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1891 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1892 myCreationInfoWdg = 0;
1894 EmitSignalCloseAllDialogs();
1896 GUIMap::Iterator it;
1897 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1898 it.value()->deactivate();
1900 // Unset actions accelerator keys
1901 action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1902 action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1903 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1905 qDeleteAll(myOCCSelectors);
1906 myOCCSelectors.clear();
1907 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1909 qDeleteAll(myVTKSelectors);
1910 myVTKSelectors.clear();
1911 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1913 return SalomeApp_Module::deactivateModule( study );
1916 //=======================================================================
1917 // function : onWindowActivated()
1918 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1919 //=======================================================================
1920 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1925 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1926 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1928 // disable non-OCC viewframe menu commands
1929 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1930 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1931 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1932 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1933 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1934 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1935 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1937 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1938 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1939 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1940 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1942 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1945 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1947 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1948 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1949 if ( myCreationInfoWdg )
1950 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1953 void GeometryGUI::viewManagers( QStringList& lst ) const
1955 lst.append( OCCViewer_Viewer::Type() );
1958 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1960 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1962 qDebug( "connect" );
1963 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1964 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1965 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1966 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1967 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1968 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1969 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1970 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1972 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1973 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1975 // disable OCC selectors
1976 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1977 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1978 while ( itOCCSel.hasNext() )
1979 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1980 sr->setEnabled(true);
1982 else if ( vm->getType() == SVTK_Viewer::Type() )
1984 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1985 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1987 // disable VTK selectors
1988 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1989 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1990 while ( itVTKSel.hasNext() )
1991 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1992 sr->setEnabled(true);
1996 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1998 SUIT_ViewModel* viewer = vm->getViewModel();
1999 if ( vm->getType() == OCCViewer_Viewer::Type() )
2001 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2002 while ( itOCCSel.hasNext() )
2003 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2004 if ( sr->viewer() == viewer )
2006 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
2010 if ( vm->getType() == SVTK_Viewer::Type() )
2012 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2013 while ( itVTKSel.hasNext() )
2014 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2015 if ( sr->viewer() == viewer )
2017 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2023 //================================================================================
2025 * \brief Slot called when selection changed. Shows creation info of a selected object
2027 //================================================================================
2029 void GeometryGUI::updateCreationInfo()
2031 if ( myCreationInfoWdg )
2032 myCreationInfoWdg->clear();
2034 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2035 // if ( !myCreationInfoWdg->isVisible() )
2038 // look for a sole selected GEOM_Object
2039 GEOM::GEOM_BaseObject_var geomObj;
2041 SALOME_ListIO selected;
2042 getApp()->selectionMgr()->selectedObjects( selected );
2044 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2045 SALOME_ListIteratorOfListIO selIt( selected );
2046 for ( ; selIt.More(); selIt.Next() )
2048 Handle(SALOME_InteractiveObject) io = selIt.Value();
2049 if ( !io->hasEntry() ) continue;
2050 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2051 if ( !sobj ) continue;
2052 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2053 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2054 if ( !gobj->_is_nil() )
2056 if ( !geomObj->_is_nil() )
2057 return; // several GEOM objects selected
2061 if ( geomObj->_is_nil() ) return;
2063 // pass creation info of geomObj to myCreationInfoWdg
2065 if ( myCreationInfoWdg ) {
2067 QString operationName;
2068 myCreationInfoWdg->setOperation( icon, operationName );
2072 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2074 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2075 QString name = info->operationName.in();
2076 if ( !name.isEmpty() ) {
2077 icon = resMgr->loadPixmap( "GEOM", tr( ("ICO_"+name).toLatin1().constData() ), false );
2078 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2079 if ( operationName.startsWith( "MEN_" ))
2080 operationName = name; // no translation
2081 myCreationInfoWdg->setOperation( icon, operationName );
2083 for ( size_t i = 0; i < info->params.length(); ++i )
2084 myCreationInfoWdg->addParam( info->params[i].name.in(),
2085 info->params[i].value.in() );
2094 void GeometryGUI::onAutoBringToFront()
2096 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front" );
2097 if( !isAutoBringToFront )
2100 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2101 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2104 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2105 if (!appStudy) return;
2107 GEOM_Displayer displayer( appStudy );
2109 SALOME_View* window = displayer.GetActiveView();
2110 if ( !window ) return;
2112 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2114 SALOME_ListIO selected;
2115 getApp()->selectionMgr()->selectedObjects( selected );
2116 if (!myTopLevelIOList.IsEmpty())
2118 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2120 Handle( SALOME_InteractiveObject ) io = It.Value();
2121 bool isSelected = false;
2122 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2124 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2125 if( io->isSame( sel_io ) )
2128 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2130 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2131 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2136 myTopLevelIOList.Assign(selected);
2137 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2139 Handle( SALOME_InteractiveObject ) io = It.Value();
2140 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2141 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2144 displayer.UpdateViewer();
2145 GeometryGUI::Modified();
2148 void GeometryGUI::updateFieldColorScale()
2150 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2152 GEOM_Displayer aDisplayer( aStudy );
2153 aDisplayer.UpdateColorScale();
2157 QString GeometryGUI::engineIOR() const
2159 if ( !CORBA::is_nil( GetGeomGen() ) )
2160 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2164 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2165 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2167 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
2169 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2171 theWidth = theHeight = 0;
2173 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2174 Handle(TColStd_HArray1OfByte) aTexture;
2176 Handle(Graphic3d_HArray1OfBytes) aTexture;
2180 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2181 aTexture = aTextureMap[ theId ];
2182 if ( aTexture.IsNull() ) {
2183 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2184 if ( !aInsOp->_is_nil() ) {
2185 CORBA::Long aWidth, aHeight;
2186 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2187 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2189 theHeight = aHeight;
2191 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2192 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2194 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
2197 for (int i = 0; i < aStream->length(); i++)
2198 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2199 aTextureMap[ theId ] = aTexture;
2207 LightApp_Selection* GeometryGUI::createSelection() const
2209 return new GEOMGUI_Selection();
2212 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2214 SalomeApp_Module::contextMenuPopup( client, menu, title );
2216 getApp()->selectionMgr()->selectedObjects( lst );
2218 //Add submenu for predefined materials
2219 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2220 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2221 QtxPopupMgr* mgr = popupMgr();
2222 //get parrent for submenu
2223 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2225 QMenu* oldMenu = act->menu() ;
2230 QMenu* matMenu = new QMenu();
2231 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2233 //Get current material model for the object
2235 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2236 if ( anApp && anApp->activeViewManager() ) {
2237 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2239 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2242 QString curModel = "";
2243 if ( v.canConvert<QString>() ) curModel = v.toString();
2244 // get list of all predefined materials
2245 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2247 foreach ( QString material, materials )
2249 QAction* menAct = matMenu->addAction( material );
2250 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2251 signalMapper->setMapping( menAct, material );
2252 menAct->setCheckable( true );
2253 // Set checked if this material is current
2254 Material_Model aModel;
2255 aModel.fromResources( material );
2256 if ( !found && aModel.toProperties() == curModel ) {
2257 menAct->setChecked( true );
2261 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2262 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2263 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2264 this, SLOT( OnSetMaterial( const QString & ) ) );
2265 act->setMenu( matMenu );
2269 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2270 Handle(SALOME_InteractiveObject) io = lst.First();
2271 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2272 _PTR(Study) study = appStudy->studyDS();
2273 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2275 QString aName = QString( obj->GetName().c_str() );
2276 aName.remove( QRegExp("\\s+$") );
2282 void GeometryGUI::OnSetMaterial(const QString& theName)
2284 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2288 void GeometryGUI::createPreferences()
2290 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2292 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2293 setPreferenceProperty( genGroup, "columns", 2 );
2295 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2296 LightApp_Preferences::Selector,
2297 "Geometry", "display_mode" );
2299 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2300 LightApp_Preferences::Color, "Geometry", "shading_color" );
2302 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2303 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2305 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2306 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2308 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2309 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2311 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2312 LightApp_Preferences::Color, "Geometry", "line_color" );
2314 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2315 LightApp_Preferences::Color, "Geometry", "point_color" );
2317 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2318 LightApp_Preferences::Color, "Geometry", "isos_color" );
2320 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2321 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2323 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2324 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2326 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2327 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2329 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2330 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2332 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2333 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2335 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2336 LightApp_Preferences::Selector,
2337 "Geometry", "material" );
2339 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2340 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2346 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2347 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2349 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2350 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2352 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2353 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2355 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2356 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2358 for (int i = 0; i < nb; i++) {
2359 setPreferenceProperty( wd[i], "min", 1 );
2360 setPreferenceProperty( wd[i], "max", 5 );
2363 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2364 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2366 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2367 setPreferenceProperty( aDimGroupId, "columns", 2 );
2369 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2370 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2372 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2373 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2375 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2376 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2378 addPreference( tr( "PREF_DIMENSIONS_FONT_HEIGHT" ), aDimGroupId,
2379 LightApp_Preferences::DblSpin, "Geometry", "dimensions_font_height" );
2381 addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2382 LightApp_Preferences::IntSpin, "Geometry", "dimensions_arrow_length" );
2384 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2385 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2387 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2388 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2390 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2391 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2393 QStringList aListOfLengthUnits;
2394 aListOfLengthUnits << "m";
2395 aListOfLengthUnits << "cm";
2396 aListOfLengthUnits << "mm";
2397 aListOfLengthUnits << "in.";
2398 aListOfLengthUnits << "ft.";
2400 QStringList aListOfAngUnits;
2401 aListOfAngUnits << "rad";
2402 aListOfAngUnits << "deg";
2404 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2405 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2407 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2408 setPreferenceProperty( isoGroup, "columns", 2 );
2409 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2410 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2411 setPreferenceProperty( isoU, "min", 0 );
2412 setPreferenceProperty( isoU, "max", 100000 );
2413 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2414 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2415 setPreferenceProperty( isoV, "min", 0 );
2416 setPreferenceProperty( isoV, "max", 100000 );
2418 // Quantities with individual precision settings
2419 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2420 setPreferenceProperty( precGroup, "columns", 2 );
2422 const int nbQuantities = 8;
2423 int prec[nbQuantities], ii = 0;
2424 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2425 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2426 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2427 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2428 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2429 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2430 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2431 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2432 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2433 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2434 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2435 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2436 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2437 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2438 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2439 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2441 // Set property for precision value for spinboxes
2442 for ( ii = 0; ii < nbQuantities; ii++ ){
2443 setPreferenceProperty( prec[ii], "min", -14 );
2444 setPreferenceProperty( prec[ii], "max", 14 );
2445 setPreferenceProperty( prec[ii], "precision", 2 );
2448 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2449 setPreferenceProperty( VertexGroup, "columns", 2 );
2451 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2452 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2454 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2455 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2457 // Set property for default display mode
2458 QStringList aModesList;
2459 aModesList.append( tr("MEN_WIREFRAME") );
2460 aModesList.append( tr("MEN_SHADING") );
2461 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2463 QList<QVariant> anIndexesList;
2464 anIndexesList.append(0);
2465 anIndexesList.append(1);
2466 anIndexesList.append(2);
2468 setPreferenceProperty( dispmode, "strings", aModesList );
2469 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2471 // Set property for top level display mode
2472 QStringList aTopModesList;
2473 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2474 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2475 aTopModesList.append( tr("MEN_WIREFRAME") );
2476 aTopModesList.append( tr("MEN_SHADING") );
2477 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2479 QList<QVariant> aTopIndexesList;
2480 aTopIndexesList.append(0);
2481 aTopIndexesList.append(1);
2482 aTopIndexesList.append(2);
2483 aTopIndexesList.append(3);
2484 aTopIndexesList.append(4);
2486 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2487 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2489 // Set property for step value for spinboxes
2490 setPreferenceProperty( step, "min", 1 );
2491 setPreferenceProperty( step, "max", 10000 );
2492 setPreferenceProperty( step, "precision", 3 );
2494 // Set property for deflection value for spinboxes
2495 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2496 setPreferenceProperty( defl, "max", 1.0 );
2497 setPreferenceProperty( defl, "step", 1.0e-04 );
2498 setPreferenceProperty( defl, "precision", 6 );
2500 // Set property for default material
2501 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2503 // Set property vertex marker type
2504 QList<QVariant> aMarkerTypeIndicesList;
2505 QList<QVariant> aMarkerTypeIconsList;
2507 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2508 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2509 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2510 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2511 aMarkerTypeIndicesList << (i-1);
2512 aMarkerTypeIconsList << pixmap;
2515 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2516 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2518 // Set property for vertex marker scale
2519 QList<QVariant> aMarkerScaleIndicesList;
2520 QStringList aMarkerScaleValuesList;
2522 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2523 aMarkerScaleIndicesList << iii;
2524 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2527 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2528 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2530 // Scalar bar for field step presentation
2531 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2532 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2534 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2535 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2536 setPreferenceProperty( sbXPosition, "min", 0 );
2537 setPreferenceProperty( sbXPosition, "max", 1 );
2538 setPreferenceProperty( sbXPosition, "step", 0.05 );
2540 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2541 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2542 setPreferenceProperty( sbYPosition, "min", 0 );
2543 setPreferenceProperty( sbYPosition, "max", 1 );
2544 setPreferenceProperty( sbYPosition, "step", 0.05 );
2546 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2547 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2548 setPreferenceProperty( sbWidth, "min", 0 );
2549 setPreferenceProperty( sbWidth, "max", 1 );
2550 setPreferenceProperty( sbWidth, "step", 0.05 );
2552 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2553 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2554 setPreferenceProperty( sbHeight, "min", 0 );
2555 setPreferenceProperty( sbHeight, "max", 1 );
2556 setPreferenceProperty( sbHeight, "step", 0.05 );
2558 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2559 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2560 setPreferenceProperty( sbTextHeight, "min", 6 );
2561 setPreferenceProperty( sbTextHeight, "max", 24 );
2562 setPreferenceProperty( sbTextHeight, "step", 1 );
2564 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2565 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2566 setPreferenceProperty( sbNbIntervals, "min", 2 );
2567 setPreferenceProperty( sbNbIntervals, "max", 64 );
2568 setPreferenceProperty( sbNbIntervals, "step", 1 );
2570 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2571 setPreferenceProperty( originGroup, "columns", 2 );
2573 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2574 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2575 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2576 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2578 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2579 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2581 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2582 setPreferenceProperty( operationsGroup, "columns", 2 );
2584 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2585 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2588 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2590 if (section == "Geometry") {
2591 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2592 if (param == QString("SettingsGeomStep")) {
2593 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2594 EmitSignalDefaultStepValueChanged(spin_step);
2596 else if (param == QString("toplevel_color")) {
2597 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2598 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2600 else if (param == QString("toplevel_dm")) {
2601 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2603 else if (param == QString("scalar_bar_x_position") ||
2604 param == QString("scalar_bar_y_position") ||
2605 param == QString("scalar_bar_width") ||
2606 param == QString("scalar_bar_height") ||
2607 param == QString("scalar_bar_text_height") ||
2608 param == QString("scalar_bar_nb_intervals")) {
2609 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2611 GEOM_Displayer aDisplayer( aStudy );
2612 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2613 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2616 else if ( param == QString("dimensions_color") ||
2617 param == QString("dimensions_line_width") ||
2618 param == QString("dimensions_font_height") ||
2619 param == QString("dimensions_arrow_length") ||
2620 param == QString("dimensions_show_units") ||
2621 param == QString("dimensions_length_units") ||
2622 param == QString("dimensions_angle_units") )
2624 SalomeApp_Application* anApp = getApp();
2630 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2636 GEOM_Displayer aDisplayer( aStudy );
2638 ViewManagerList aVMs;
2639 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2640 ViewManagerList::Iterator anIt = aVMs.begin();
2641 for ( ; anIt != aVMs.end(); ++anIt )
2643 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2649 SALOME_ListIO aVisible;
2650 aViewer->GetVisible( aVisible );
2651 aDisplayer.Redisplay( aVisible, false, aViewer );
2654 aDisplayer.UpdateViewer();
2659 LightApp_Displayer* GeometryGUI::displayer()
2662 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2666 void GeometryGUI::setLocalSelectionMode(const int mode)
2668 myLocalSelectionMode = mode;
2671 int GeometryGUI::getLocalSelectionMode() const
2673 return myLocalSelectionMode;
2676 const char gSeparator = '_'; // character used to separate parameter names
2677 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2680 * \brief Store visual parameters
2682 * This method is called just before the study document is saved.
2683 * Store visual parameters in AttributeParameter attribute(s)
2685 void GeometryGUI::storeVisualParameters (int savePoint)
2687 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2688 if ( !appStudy || !appStudy->studyDS() )
2690 _PTR(Study) studyDS = appStudy->studyDS();
2692 // componentName is used for encoding of entries when storing them in IParameters
2693 std::string componentName = myComponentGeom->ComponentDataType();
2694 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2695 //if (!aSComponent) return;
2698 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2699 componentName.c_str(),
2701 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2703 QList<SUIT_ViewManager*> lst;
2704 QList<SUIT_ViewManager*>::Iterator it;
2706 // main cycle to store parameters of displayed objects
2708 getApp()->viewManagers(lst);
2709 for (it = lst.begin(); it != lst.end(); it++) {
2710 SUIT_ViewManager* vman = *it;
2711 QString vType = vman->getType();
2712 int aMgrId = vman->getGlobalId();
2713 // saving VTK actors properties
2714 QVector<SUIT_ViewWindow*> views = vman->getViews();
2715 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2716 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
2717 ObjMap::ConstIterator o_it = anObjects.begin();
2718 for (; o_it != anObjects.end(); o_it++) {
2719 const PropMap aProps = o_it.value();
2721 //Check that object exists in the study
2722 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2723 if ( !obj || !(aProps.count() > 0))
2725 // entry is "encoded" = it does NOT contain component adress, since it is a
2726 // subject to change on next component loading
2728 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2730 _PTR(GenericAttribute) anAttr;
2731 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2734 QString param, occParam = vType;
2735 occParam += GEOM::sectionSeparator();
2736 occParam += QString::number(aMgrId);
2737 occParam += GEOM::sectionSeparator();
2739 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2740 param = occParam + GEOM::propertyName( GEOM::Visibility );
2741 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2744 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2745 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2746 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2749 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2750 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2752 val << QString::number(c.redF());
2753 val << QString::number(c.greenF());
2754 val << QString::number(c.blueF());
2755 param = occParam + GEOM::propertyName( GEOM::Color );
2756 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2759 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2760 param = occParam + GEOM::propertyName( GEOM::Texture );
2761 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2764 if (vType == SVTK_Viewer::Type()) {
2765 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2766 param = occParam + GEOM::propertyName( GEOM::Opacity );
2767 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2769 } else if (vType == SOCC_Viewer::Type()) {
2770 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2771 param = occParam + GEOM::propertyName( GEOM::Transparency );
2772 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2775 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2776 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2777 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2781 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2782 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2783 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2786 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2787 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2788 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2791 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2792 param = occParam + GEOM::propertyName( GEOM::Deflection );
2793 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2796 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2797 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2798 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2799 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2802 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2803 param = occParam + GEOM::propertyName( GEOM::Material );
2804 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2807 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2808 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2809 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2812 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2813 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2814 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2816 } // object iterator
2818 } // for (viewManagers)
2822 * \brief Restore visual parameters
2824 * This method is called after the study document is opened.
2825 * Restore visual parameters from AttributeParameter attribute(s)
2827 void GeometryGUI::restoreVisualParameters (int savePoint)
2829 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2830 if (!appStudy || !appStudy->studyDS())
2832 _PTR(Study) studyDS = appStudy->studyDS();
2834 // componentName is used for encoding of entries when storing them in IParameters
2835 std::string componentName = myComponentGeom->ComponentDataType();
2836 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2837 //if (!aSComponent) return;
2840 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2841 componentName.c_str(),
2843 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2845 std::vector<std::string> entries = ip->getEntries();
2847 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2849 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2850 QString entry (ip->decodeEntry(*entIt).c_str());
2852 // Check that the entry corresponds to a real object in the Study
2853 // as the object may be deleted or modified after the visual state is saved.
2854 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2855 if (!so) continue; //Skip the not existent entry
2857 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2858 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2860 std::vector<std::string>::iterator namesIt = paramNames.begin();
2861 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2863 // actors are stored in a map after displaying of them for
2864 // quicker access in the future: map < viewID to actor >
2865 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2866 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2868 QString viewerTypStr;
2869 QString viewIndexStr;
2871 QVector<PropMap> aListOfMap;
2873 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2875 // visual parameters are stored in strings as follows: ViewerType_ViewIndex_ParamName.
2876 // '_' is used as separator and should not be used in viewer type or parameter names.
2877 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2878 if (lst.size() != 3)
2881 viewerTypStr = lst[0];
2882 viewIndexStr = lst[1];
2883 QString paramNameStr = lst[2];
2886 viewIndex = viewIndexStr.toUInt(&ok);
2887 if (!ok) // bad conversion of view index to integer
2890 if ((viewIndex + 1) > aListOfMap.count()) {
2891 aListOfMap.resize(viewIndex + 1);
2894 QString val((*valuesIt).c_str());
2895 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
2896 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
2897 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
2898 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
2899 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
2900 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
2901 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
2902 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
2903 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
2904 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
2905 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
2906 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
2907 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
2908 QStringList rgb = val.split(GEOM::subSectionSeparator());
2909 if (rgb.count() == 3) {
2910 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
2911 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
2913 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
2914 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
2915 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
2916 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
2917 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
2918 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
2919 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
2920 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
2921 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
2922 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
2923 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
2924 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
2925 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
2926 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
2928 } // for names/parameters iterator
2930 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2932 for (int index = 0; index < aListOfMap.count(); index++) {
2934 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
2936 //Get Visibility property of the current PropMap
2937 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
2938 SUIT_ViewManager* vman = lst.at(index);
2939 SUIT_ViewModel* vmodel = vman->getViewModel();
2940 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
2943 } // for entries iterator
2945 // update all VTK and OCC views
2946 QList<SUIT_ViewManager*> lst;
2947 getApp()->viewManagers(lst);
2948 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
2949 SUIT_ViewModel* vmodel = (*it)->getViewModel();
2952 if (vmodel->getType() == SVTK_Viewer::Type()) {
2953 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
2954 vtkView->getRenderer()->ResetCameraClippingRange();
2957 else if (vmodel->getType() == SOCC_Viewer::Type()) {
2958 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
2959 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
2966 void GeometryGUI::onViewAboutToShow()
2968 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
2969 QAction* a = action( GEOMOp::OpSwitchVectors );
2971 a->setEnabled(true);
2972 bool vmode = window->property("VectorsMode").toBool();
2973 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
2975 a->setText ( tr("MEN_VECTOR_MODE_ON") );
2976 a->setEnabled(false);
2981 \brief Return action by id
2982 \param id identifier of the action
2985 QAction* GeometryGUI::getAction(const int id) {
2990 \brief GEOM module message handler
2992 This method can be re-implemented in the subclasses.
2993 This is a GEOM module message handler.
2995 \param msg the message received.
2997 void GeometryGUI::message(const QString& msg)
3000 QStringList data = msg.split("/");
3001 const int nbStrings = data.count();
3003 if (nbStrings > 0) {
3004 if (data[0] == "modified") {
3006 QString anIOR = nbStrings > 1 ? data[1] : QString();
3008 if ( anIOR.isEmpty() ) {
3012 // Get the geom object.
3013 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3015 // Clear the shape buffer
3016 GeometryGUI::ClearShapeBuffer (anObj);
3022 \brief Clears the shape buffer.
3024 This is a static method. It clears the shape buffer.
3026 \param theObj the object
3028 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3030 if ( CORBA::is_nil( theObj ) )
3033 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3034 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3035 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3037 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3042 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3047 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3051 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3052 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3053 _PTR(GenericAttribute) anAttr;
3054 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3055 _PTR(AttributeIOR) anIOR ( anAttr );
3056 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3057 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3063 \brief Returns the object from IOR.
3065 This is a static method. It returns the object from its IOR.
3067 \param IOR object IOR
3068 \return GEOM object.
3070 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3072 GEOM::GEOM_Object_var geomObj;
3073 if ( !IOR.isEmpty() ) {
3074 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3075 ( IOR.toLatin1().constData() );
3076 if ( !CORBA::is_nil( corbaObj ) )
3077 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3079 return geomObj._retn();
3083 \brief Returns IOR of the object.
3085 This is a static method. It returns the object's IOR.
3087 \param object the GEOM object.
3088 \return object's IOR.
3090 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3093 if ( !CORBA::is_nil( object ) ) {
3094 CORBA::String_var anIOR =
3095 SalomeApp_Application::orb()->object_to_string( object );
3102 \brief Check if this object is can't be renamed in place
3104 This method can be re-implemented in the subclasses.
3105 Return true in case if object isn't reference or component (module root).
3107 \param entry column id
3108 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3110 bool GeometryGUI::renameAllowed( const QString& entry) const {
3112 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3113 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3114 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3116 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3120 Rename object by entry.
3121 \param entry entry of the object
3122 \param name new name of the object
3123 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3125 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3127 bool result = false;
3129 SalomeApp_Application* app =
3130 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3131 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3136 _PTR(Study) aStudy = appStudy->studyDS();
3141 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3143 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3147 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3148 _PTR(GenericAttribute) anAttr;
3150 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3151 _PTR(AttributeName) aName (anAttr);
3153 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3154 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3155 if (!CORBA::is_nil(anObj)) {
3156 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3164 void GeometryGUI::updateMaterials()
3166 LightApp_Preferences* pref = preferences();
3168 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3169 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3170 if ( !materials.contains( currentMaterial ) )
3171 // user material set as default in the preferences, might be removed
3172 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3174 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3176 setPreferenceProperty( prefItem->id(),
3177 "strings", materials );
3178 prefItem->retrieve();
3184 \brief Check if the module allows "drag" operation of its objects.
3186 Overloaded from LightApp_Module class.
3188 This function is a part of the general drag-n-drop mechanism.
3189 The goal of this function is to check data object passed as a parameter
3190 and decide if it can be dragged or no.
3192 \param what data object being tested for drag operation
3193 \return \c true if module allows dragging of the specified object
3194 \sa isDropAccepted(), dropObjects()
3196 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3198 // we allow dragging object under root and object from folder
3199 int aLevel = what->level();
3200 bool anObjectInFolder = false;
3202 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3204 _PTR(SObject) aSO = dataObj->object();
3206 _PTR(GenericAttribute) anAttr;
3207 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3208 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3209 _PTR(AttributeLocalID) aLocalID( anAttr );
3210 anObjectInFolder = aLocalID->Value() == 999;
3215 return aLevel == 2 || anObjectInFolder;
3219 \brief Check if the module allows "drop" operation on the given object.
3221 Overloaded from LightApp_Module class.
3223 This function is a part of the general drag-n-drop mechanism.
3224 The goal of this function is to check data object passed as a parameter
3225 and decide if it can be used as a target for the "drop" operation.
3226 The processing of the drop operation itself is done in the dropObjects() function.
3228 \param where target data object
3229 \return \c true if module supports dropping on the \a where data object
3230 \sa isDraggable(), dropObjects()
3232 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3234 // we allow dropping into folder and top-level GEOM object
3235 int aLevel = where->level();
3236 bool isFolder = false;
3238 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3240 _PTR(SObject) aSO = dataObj->object();
3242 _PTR(GenericAttribute) anAttr;
3243 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3244 _PTR(AttributeLocalID) aLocalID( anAttr );
3245 isFolder = aLocalID->Value() == 999;
3250 return aLevel == 1 || isFolder;
3254 \brief Complete drag-n-drop operation.
3256 Overloaded from LightApp_Module class.
3258 This function is a part of the general drag-n-drop mechanism.
3259 Its goal is to handle dropping of the objects being dragged according
3260 to the chosen operation (move). The dropping is performed in the
3261 context of the parent data object \a where and the \a row (position in the
3262 children index) at which the data should be dropped. If \a row is equal to -1,
3263 this means that objects are added to the end of the children list.
3265 \param what objects being dropped
3266 \param where target data object
3267 \param row child index at which the drop operation is performed
3268 \param action drag-n-drop operation (Qt::DropAction) - move
3270 \sa isDraggable(), isDropAccepted()
3272 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3273 const int row, Qt::DropAction action )
3275 if (action != Qt::CopyAction && action != Qt::MoveAction)
3276 return; // unsupported action
3278 // get parent object
3279 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3280 if ( !dataObj ) return; // wrong parent
3281 _PTR(SObject) parentObj = dataObj->object();
3283 // Find the current Study and StudyBuilder
3284 _PTR(Study) aStudy = parentObj->GetStudy();
3285 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3286 // collect all parents of the target node
3287 QStringList parentIDs;
3288 _PTR(SObject) parent = parentObj;
3289 while( !parent->IsNull() ) {
3290 parentIDs << parent->GetID().c_str();
3291 parent = aUseCaseBuilder->GetFather(parent);
3294 // collect objects being dropped
3295 GEOM::object_list_var objects = new GEOM::object_list();
3296 objects->length( what.count() );
3298 for ( int i = 0; i < what.count(); i++ ) {
3299 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3300 if ( !dataObj ) continue; // skip wrong objects
3301 _PTR(SObject) sobj = dataObj->object();
3302 // check that dropped object is not a parent of target object
3303 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3304 return; // it's not allowed to move node into it's child
3306 objects[i] = _CAST(SObject, sobj)->GetSObject();
3309 objects->length( count );
3311 // call engine function
3312 GetGeomGen()->Move( objects.in(), // what
3313 _CAST(SObject, parentObj)->GetSObject(), // where
3316 // update Object browser
3317 getApp()->updateObjectBrowser( false );