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 libName = "MeasureGUI";
639 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
640 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
641 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
642 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
643 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
644 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
645 libName = "GroupGUI";
647 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
648 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
649 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
650 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
651 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
652 libName = "BlocksGUI";
654 case GEOMOp::OpExportXAO: // MENU NEW ENTITY - IMPORTEXPORT - EXPORTXAO
655 case GEOMOp::OpImportXAO: // MENU NEW ENTITY - IMPORTEXPORT - IMPORTXAO
656 libName = "ImportExportGUI";
658 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
659 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
660 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
661 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
662 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
663 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
664 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
665 //libName = "AdvancedGUI";
668 if (myPluginActions.contains(id)) {
669 libName = myPluginActions[id].first;
671 GEOMPluginGUI* library = 0;
672 if ( !libName.isEmpty() ) {
674 libName = QString( "lib" ) + libName + ".so";
676 libName = libName + ".dll";
678 library = getPluginLibrary( libName );
681 // call method of corresponding GUI library
683 //QString action ("%1");
684 //action = action.arg(id);
686 //if( !theParam.isValid() )
687 library->OnGUIEvent( myPluginActions[id].second, desk );
689 // library->OnGUIEvent( id, desk, theParam);
692 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
694 updateCreationInfo();
700 GEOMGUI* library = 0;
701 if ( !libName.isEmpty() ) {
703 libName = QString( "lib" ) + libName + ".so";
705 libName = libName + ".dll";
707 library = getLibrary( libName );
710 // call method of corresponding GUI library
712 if( !theParam.isValid() )
713 library->OnGUIEvent( id, desk );
715 library->OnGUIEvent( id, desk, theParam);
718 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
720 updateCreationInfo();
723 //=================================================================================
724 // function : GeometryGUI::activateOperation()
726 //=================================================================================
727 bool GeometryGUI::activateOperation( int actionId )
729 OnGUIEvent(actionId);
733 //=================================================================================
734 // function : GeometryGUI::activateOperation()
736 //=================================================================================
737 bool GeometryGUI::activateOperation( const QString& actionId )
741 int id = actionId.toInt(&isOk);
748 //=================================================================================
749 // function : GeometryGUI::activateOperation()
751 //=================================================================================
752 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
756 QString pluginLib = plugin;
757 // TODO: if <plugin> is a plugin name, find plugin library name
758 if (myPluginLibs.contains(plugin))
759 pluginLib = myPluginLibs[plugin];
761 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
762 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
763 const PluginAction& anAction = actionsIter.value();
764 if (anAction.first == pluginLib && anAction.second == actionId) {
765 // activate operation
766 OnGUIEvent(actionsIter.key());
774 //=================================================================================
775 // function : GeometryGUI::OnKeyPress()
776 // purpose : Called when any key is pressed by user [static]
777 //=================================================================================
778 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
780 if ( !application() )
782 foreach ( GEOMGUI* lib, myGUIMap )
783 lib->OnKeyPress( e, application()->desktop(), w );
786 //=================================================================================
787 // function : GeometryGUI::OnMouseMove()
788 // purpose : Manages mouse move events [static]
789 //=================================================================================
790 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
792 if ( !application() )
794 foreach ( GEOMGUI* lib, myGUIMap )
795 lib->OnMouseMove( e, application()->desktop(), w );
798 //=================================================================================
799 // function : GeometryGUI::OnMouseRelease()
800 // purpose : Manages mouse release events [static]
801 //=================================================================================
802 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
804 if ( !application() )
806 foreach ( GEOMGUI* lib, myGUIMap )
807 lib->OnMouseRelease( e, application()->desktop(), w );
810 //=================================================================================
811 // function : GeometryGUI::OnMousePress()
812 // purpose : Manage mouse press events [static]
813 //=================================================================================
814 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
816 if ( !application() )
818 foreach ( GEOMGUI* lib, myGUIMap )
819 lib->OnMousePress( e, application()->desktop(), w );
822 //=======================================================================
823 // function : createGeomAction
825 //=======================================================================
826 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
827 const int accel, const bool toggle, const QString& shortcutAction )
829 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
830 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
831 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
833 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
835 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
836 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
838 application()->desktop(),
840 this, SLOT( OnGUIEvent() ),
844 //=======================================================================
845 // function : createOriginAndBaseVectors
847 //=======================================================================
848 void GeometryGUI::createOriginAndBaseVectors()
850 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
852 _PTR(Study) studyDS = appStudy->studyDS();
853 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
854 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
855 if ( !aBasicOperations->_is_nil() ) {
856 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
857 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
858 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
859 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
860 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
861 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
863 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
864 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
865 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
866 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
867 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
869 getApp()->updateObjectBrowser( true );
875 //=======================================================================
876 // function : GeometryGUI::initialize()
877 // purpose : Called when GEOM module is created
878 //=======================================================================
879 void GeometryGUI::initialize( CAM_Application* app )
881 SalomeApp_Module::initialize( app );
883 // ----- create actions --------------
885 createGeomAction( GEOMOp::OpImport, "IMPORT", "", Qt::ControlModifier + Qt::Key_I );
886 createGeomAction( GEOMOp::OpExport, "EXPORT", "", Qt::ControlModifier + Qt::Key_E );
888 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
890 createGeomAction( GEOMOp::OpPoint, "POINT" );
891 createGeomAction( GEOMOp::OpLine, "LINE" );
892 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
893 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
894 createGeomAction( GEOMOp::OpArc, "ARC" );
895 createGeomAction( GEOMOp::OpCurve, "CURVE" );
896 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
897 createGeomAction( GEOMOp::OpVector, "VECTOR" );
898 createGeomAction( GEOMOp::OpPlane, "PLANE" );
899 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
900 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
902 createGeomAction( GEOMOp::OpBox, "BOX" );
903 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
904 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
905 createGeomAction( GEOMOp::OpTorus, "TORUS" );
906 createGeomAction( GEOMOp::OpCone, "CONE" );
907 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
908 createGeomAction( GEOMOp::OpDisk, "DISK" );
910 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
911 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
912 createGeomAction( GEOMOp::OpFilling, "FILLING" );
913 createGeomAction( GEOMOp::OpPipe, "PIPE" );
914 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
916 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
917 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
918 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
919 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
920 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
922 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
923 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
925 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
927 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
928 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
930 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
931 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
932 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
933 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
935 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
937 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
939 createGeomAction( GEOMOp::OpEdge, "EDGE" );
940 createGeomAction( GEOMOp::OpWire, "WIRE" );
941 createGeomAction( GEOMOp::OpFace, "FACE" );
942 createGeomAction( GEOMOp::OpShell, "SHELL" );
943 createGeomAction( GEOMOp::OpSolid, "SOLID" );
944 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
946 createGeomAction( GEOMOp::OpFuse, "FUSE" );
947 createGeomAction( GEOMOp::OpCommon, "COMMON" );
948 createGeomAction( GEOMOp::OpCut, "CUT" );
949 createGeomAction( GEOMOp::OpSection, "SECTION" );
951 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
952 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
953 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
954 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
955 createGeomAction( GEOMOp::OpScale, "SCALE" );
956 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
957 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
958 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
959 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
961 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
962 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
963 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
964 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
965 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
966 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
967 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
968 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
969 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
970 #ifdef DEBUG_CURVE_CREATOR
971 // for debug purposes, to be removed
972 createGeomAction( GEOMOp::OpCurveCreator, "CURVE_CREATOR" );
974 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
975 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
977 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
978 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
979 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
981 createGeomAction( GEOMOp::OpSewing, "SEWING" );
982 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
983 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
984 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
985 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
986 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
987 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
988 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
989 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
990 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
991 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
992 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
993 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
994 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
995 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
996 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
997 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
999 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1000 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1001 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1002 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1003 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1004 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1005 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1006 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1008 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1009 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1010 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1011 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1012 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1013 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1015 #ifdef _DEBUG_ // PAL16821
1016 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1019 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1020 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1021 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1022 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1023 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1024 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1025 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1026 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1027 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1028 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1029 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1030 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1031 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1032 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1033 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1034 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1035 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1036 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1037 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1038 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1039 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1040 createGeomAction( GEOMOp::OpHide, "ERASE" );
1042 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1043 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1044 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1045 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1046 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1047 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1048 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1049 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1050 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1051 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1052 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1053 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1054 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1055 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1056 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1057 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1058 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1059 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1060 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1061 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1062 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1063 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1064 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1065 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1066 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1068 // Create actions for increase/decrease transparency shortcuts
1069 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1070 "Geometry:Increase transparency");
1071 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1072 "Geometry:Decrease transparency");
1074 // Create actions for increase/decrease number of isolines
1075 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1076 "Geometry:Increase number of isolines");
1077 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1078 "Geometry:Decrease number of isolines");
1080 // Import/Export XAO
1081 createGeomAction( GEOMOp::OpExportXAO, "EXPORTXAO" );
1082 createGeomAction( GEOMOp::OpImportXAO, "IMPORTXAO" );
1084 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1085 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1086 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1087 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1088 //@@ 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 @@//
1090 // ---- create menus --------------------------
1092 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1093 createMenu( separator(), fileId, 10 );
1094 createMenu( GEOMOp::OpImport, fileId, 10 );
1095 createMenu( GEOMOp::OpExport, fileId, 10 );
1096 int impexpId = createMenu( tr( "MEN_IMPORTEXPORT" ), fileId, -1, 10 );
1097 createMenu( GEOMOp::OpExportXAO, impexpId, -1 );
1098 createMenu( GEOMOp::OpImportXAO, impexpId, -1 );
1099 createMenu( separator(), fileId, -1 );
1101 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1102 createMenu( GEOMOp::OpDelete, editId, -1 );
1104 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1106 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1107 createMenu( GEOMOp::OpPoint, basicId, -1 );
1108 createMenu( GEOMOp::OpLine, basicId, -1 );
1109 createMenu( GEOMOp::OpCircle, basicId, -1 );
1110 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1111 createMenu( GEOMOp::OpArc, basicId, -1 );
1112 createMenu( GEOMOp::OpCurve, basicId, -1 );
1113 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1114 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1115 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1116 createMenu( separator(), basicId, -1 );
1117 createMenu( GEOMOp::OpVector, basicId, -1 );
1118 createMenu( GEOMOp::OpPlane, basicId, -1 );
1119 createMenu( GEOMOp::OpLCS, basicId, -1 );
1120 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1122 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1123 createMenu( GEOMOp::OpBox, primId, -1 );
1124 createMenu( GEOMOp::OpCylinder, primId, -1 );
1125 createMenu( GEOMOp::OpSphere, primId, -1 );
1126 createMenu( GEOMOp::OpTorus, primId, -1 );
1127 createMenu( GEOMOp::OpCone, primId, -1 );
1128 createMenu( GEOMOp::OpRectangle, primId, -1 );
1129 createMenu( GEOMOp::OpDisk, primId, -1 );
1130 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1132 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1133 createMenu( GEOMOp::OpPrism, genId, -1 );
1134 createMenu( GEOMOp::OpRevolution, genId, -1 );
1135 createMenu( GEOMOp::OpFilling, genId, -1 );
1136 createMenu( GEOMOp::OpPipe, genId, -1 );
1137 #if OCC_VERSION_LARGE > 0x06050300
1138 createMenu( GEOMOp::OpPipePath, genId, -1 );
1141 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1142 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1143 //@@ 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 @@//
1145 createMenu( separator(), newEntId, -1 );
1147 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1148 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1149 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1150 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1151 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1152 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1154 createMenu( separator(), newEntId, -1 );
1156 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1157 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1158 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1160 createMenu( separator(), newEntId, -1 );
1162 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1163 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1164 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1165 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1166 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1168 createMenu( separator(), newEntId, -1 );
1170 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1172 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1173 createMenu( GEOMOp::OpEdge, buildId, -1 );
1174 createMenu( GEOMOp::OpWire, buildId, -1 );
1175 createMenu( GEOMOp::OpFace, buildId, -1 );
1176 createMenu( GEOMOp::OpShell, buildId, -1 );
1177 createMenu( GEOMOp::OpSolid, buildId, -1 );
1178 createMenu( GEOMOp::OpCompound, buildId, -1 );
1180 createMenu( separator(), newEntId, -1 );
1182 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1184 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1187 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1189 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1190 createMenu( GEOMOp::OpFuse, boolId, -1 );
1191 createMenu( GEOMOp::OpCommon, boolId, -1 );
1192 createMenu( GEOMOp::OpCut, boolId, -1 );
1193 createMenu( GEOMOp::OpSection, boolId, -1 );
1195 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1196 createMenu( GEOMOp::OpTranslate, transId, -1 );
1197 createMenu( GEOMOp::OpRotate, transId, -1 );
1198 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1199 createMenu( GEOMOp::OpMirror, transId, -1 );
1200 createMenu( GEOMOp::OpScale, transId, -1 );
1201 createMenu( GEOMOp::OpOffset, transId, -1 );
1202 createMenu( GEOMOp::OpProjection, transId, -1 );
1203 createMenu( separator(), transId, -1 );
1204 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1205 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1207 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1208 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1209 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1210 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1212 createMenu( separator(), operId, -1 );
1214 createMenu( GEOMOp::OpPartition, operId, -1 );
1215 createMenu( GEOMOp::OpArchimede, operId, -1 );
1216 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1217 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1219 createMenu( separator(), operId, -1 );
1221 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1222 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1223 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1224 createMenu( GEOMOp::OpChamfer, operId, -1 );
1225 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1226 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1227 #ifdef DEBUG_CURVE_CREATOR
1228 // for debug purposes, to be removed
1229 createMenu( separator(), operId, -1 );
1230 createMenu( GEOMOp::OpCurveCreator, operId, -1 );
1232 //createMenu( GEOMOp::OpClipping, operId, -1 );
1234 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1235 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1236 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1237 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1238 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1239 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1240 createMenu( GEOMOp::OpSewing, repairId, -1 );
1241 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1242 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1243 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1244 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1245 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1246 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1247 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1248 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1249 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1250 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1251 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1253 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1254 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1255 createMenu( GEOMOp::OpProperties, measurId, -1 );
1256 createMenu( separator(), measurId, -1 );
1257 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1258 createMenu( GEOMOp::OpInertia, measurId, -1 );
1259 createMenu( GEOMOp::OpNormale, measurId, -1 );
1260 createMenu( separator(), measurId, -1 );
1261 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1262 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1263 createMenu( separator(), measurId, -1 );
1265 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1266 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1267 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1268 createMenu( GEOMOp::OpAngle, dimId, -1 );
1270 createMenu( separator(), measurId, -1 );
1271 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1272 createMenu( separator(), measurId, -1 );
1273 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1274 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1275 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1276 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1277 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1279 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1280 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1281 createMenu( separator(), toolsId, -1 );
1282 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1285 createMenu( separator(), toolsId, -1 );
1286 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1287 createMenu( separator(), toolsId, -1 );
1289 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1290 createMenu( separator(), viewId, -1 );
1292 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1293 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1294 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1295 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1296 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1297 createMenu( separator(), dispmodeId, -1 );
1298 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1300 createMenu( separator(), viewId, -1 );
1301 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1302 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1303 createMenu( separator(), viewId, -1 );
1304 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1305 createMenu( separator(), viewId, -1 );
1309 because of these items are accessible through object browser and viewers
1310 we have removed they from main menu
1312 createMenu( GEOMOp::OpShow, viewId, -1 );
1313 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1314 createMenu( GEOMOp::OpHide, viewId, -1 );
1317 // ---- create toolbars --------------------------
1319 int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1320 createTool( GEOMOp::OpPoint, basicTbId );
1321 createTool( GEOMOp::OpLine, basicTbId );
1322 createTool( GEOMOp::OpCircle, basicTbId );
1323 createTool( GEOMOp::OpEllipse, basicTbId );
1324 createTool( GEOMOp::OpArc, basicTbId );
1325 createTool( GEOMOp::OpCurve, basicTbId );
1326 createTool( GEOMOp::OpVector, basicTbId );
1327 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1328 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1329 createTool( GEOMOp::OpIsoline, basicTbId );
1330 createTool( GEOMOp::OpPlane, basicTbId );
1331 createTool( GEOMOp::OpLCS, basicTbId );
1332 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1334 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ) );
1335 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1336 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1338 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1339 createTool( GEOMOp::OpBox, primTbId );
1340 createTool( GEOMOp::OpCylinder, primTbId );
1341 createTool( GEOMOp::OpSphere, primTbId );
1342 createTool( GEOMOp::OpTorus, primTbId );
1343 createTool( GEOMOp::OpCone, primTbId );
1344 createTool( GEOMOp::OpRectangle, primTbId );
1345 createTool( GEOMOp::OpDisk, primTbId );
1346 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1348 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ) );
1349 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1350 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1352 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1353 createTool( GEOMOp::OpFuse, boolTbId );
1354 createTool( GEOMOp::OpCommon, boolTbId );
1355 createTool( GEOMOp::OpCut, boolTbId );
1356 createTool( GEOMOp::OpSection, boolTbId );
1358 int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1359 createTool( GEOMOp::OpPrism, genTbId );
1360 createTool( GEOMOp::OpRevolution, genTbId );
1361 createTool( GEOMOp::OpFilling, genTbId );
1362 createTool( GEOMOp::OpPipe, genTbId );
1363 #if OCC_VERSION_LARGE > 0x06050300
1364 createTool( GEOMOp::OpPipePath, genTbId );
1367 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1368 createTool( GEOMOp::OpTranslate, transTbId );
1369 createTool( GEOMOp::OpRotate, transTbId );
1370 createTool( GEOMOp::OpChangeLoc, transTbId );
1371 createTool( GEOMOp::OpMirror, transTbId );
1372 createTool( GEOMOp::OpScale, transTbId );
1373 createTool( GEOMOp::OpOffset, transTbId );
1374 createTool( GEOMOp::OpProjection, transTbId );
1375 createTool( separator(), transTbId );
1376 createTool( GEOMOp::OpMultiTranslate, transTbId );
1377 createTool( GEOMOp::OpMultiRotate, transTbId );
1379 int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1380 createTool( GEOMOp::OpExplode, operTbId );
1381 createTool( GEOMOp::OpPartition, operTbId );
1382 createTool( GEOMOp::OpArchimede, operTbId );
1383 createTool( GEOMOp::OpShapesOnShape, operTbId );
1384 createTool( GEOMOp::OpSharedShapes, operTbId );
1386 int featTbId = createTool( tr( "TOOL_FEATURES" ) );
1387 createTool( GEOMOp::OpFillet1d, featTbId );
1388 createTool( GEOMOp::OpFillet2d, featTbId );
1389 createTool( GEOMOp::OpFillet3d, featTbId );
1390 createTool( GEOMOp::OpChamfer, featTbId );
1391 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1392 createTool( GEOMOp::OpExtrudedCut, featTbId );
1393 #ifdef DEBUG_CURVE_CREATOR
1394 // for debug purposes, to be removed
1395 createTool( GEOMOp::OpCurveCreator, featTbId );
1398 int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1399 createTool( GEOMOp::OpEdge, buildTbId );
1400 createTool( GEOMOp::OpWire, buildTbId );
1401 createTool( GEOMOp::OpFace, buildTbId );
1402 createTool( GEOMOp::OpShell, buildTbId );
1403 createTool( GEOMOp::OpSolid, buildTbId );
1404 createTool( GEOMOp::OpCompound, buildTbId );
1406 int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1407 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1408 createTool( GEOMOp::OpProperties, measureTbId );
1409 createTool( GEOMOp::OpCenterMass, measureTbId );
1410 createTool( GEOMOp::OpInertia, measureTbId );
1411 createTool( GEOMOp::OpNormale, measureTbId );
1412 createTool( separator(), measureTbId );
1413 createTool( GEOMOp::OpBoundingBox, measureTbId );
1414 createTool( GEOMOp::OpMinDistance, measureTbId );
1415 createTool( GEOMOp::OpAngle, measureTbId );
1416 createTool( GEOMOp::OpTolerance , measureTbId );
1417 createTool( separator(), measureTbId );
1418 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1419 createTool( GEOMOp::OpFreeFaces, measureTbId );
1420 createTool( separator(), measureTbId );
1421 createTool( GEOMOp::OpWhatIs, measureTbId );
1422 createTool( GEOMOp::OpCheckShape, measureTbId );
1423 createTool( GEOMOp::OpCheckCompound, measureTbId );
1424 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1425 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1427 int picturesTbId = createTool( tr( "TOOL_PICTURES" ) );
1428 createTool( GEOMOp::OpPictureImport, picturesTbId );
1430 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1433 int impexpTbId = createTool( tr( "TOOL_IMPORTEXPORT" ) );
1434 createTool( GEOMOp::OpExportXAO, impexpTbId );
1435 createTool( GEOMOp::OpImportXAO, impexpTbId );
1437 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1438 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1439 //@@ 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 @@//
1441 // ---- create popup menus --------------------------
1443 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1444 QString clientOCC = "(client='OCCViewer')";
1445 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1446 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1448 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1449 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1450 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1451 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1453 QString autoColorPrefix =
1454 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1456 QtxPopupMgr* mgr = popupMgr();
1458 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1459 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1460 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1461 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1462 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1463 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1464 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1465 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1467 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1468 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1469 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1470 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1471 mgr->insert( separator(), -1, -1 ); // -----------
1473 #if OCC_VERSION_LARGE > 0x06050200
1474 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1475 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1476 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1477 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1478 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1479 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1480 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1482 mgr->insert( separator(), -1, -1 ); // -----------
1483 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1484 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1485 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1486 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1487 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1488 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1489 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1490 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1491 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1492 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1493 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1494 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1495 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1496 mgr->insert( separator(), dispmodeId, -1 );
1497 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1498 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1499 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1500 mgr->insert( separator(), -1, -1 ); // -----------
1502 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1503 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1504 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1505 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1506 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1507 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1508 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1509 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1510 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1511 //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1512 mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1514 // material properties
1515 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1516 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1519 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1520 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1522 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1523 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1524 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1526 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1527 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1529 mgr->insert( separator(), -1, -1 ); // -----------
1530 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1531 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1532 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1533 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1534 mgr->insert( separator(), -1, -1 ); // -----------
1536 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1537 onlyComponent = "((type='Component') and selcount=1)",
1538 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1539 types = "'Shape' 'Group' 'FieldStep'";
1541 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1542 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1544 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1545 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1547 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1548 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1550 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1552 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1553 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1554 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1555 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1556 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1557 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1558 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1559 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1560 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1561 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1562 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1563 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1564 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1565 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1566 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1567 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1568 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1569 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1570 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1571 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1572 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1573 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1574 mgr->insert( separator(), selectonlyId, -1);
1575 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1576 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1577 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1578 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1579 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1580 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1581 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1583 mgr->insert( separator(), -1, -1 ); // -----------
1584 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1585 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1587 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1588 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1590 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1591 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1593 mgr->insert( separator(), -1, -1 ); // -----------
1594 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1595 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1597 mgr->insert( separator(), -1, -1 ); // -----------
1598 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1599 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1601 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1603 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1605 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1606 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1607 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1610 // create plugin actions and menus
1614 //=======================================================================
1615 // function : GeometryGUI::addPluginActions()
1617 //=======================================================================
1618 void GeometryGUI::addPluginActions()
1621 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1622 if (!resMgr) return;
1624 // Find names of a resource XML files ("GEOMActions.xml" and others);
1626 char* cenv = getenv("GEOM_PluginsList");
1628 PluginsXml.sprintf("%s", cenv);
1630 QStringList PluginsXmlList = PluginsXml.split(":", QString::SkipEmptyParts);
1631 if (PluginsXmlList.count() == 0) return;
1633 // get full names of xml files from PluginsXmlList
1634 QStringList xmlFiles;
1635 xmlFiles.append(QDir::home().filePath("CustomGeomPlugins.xml")); // may be inexistent
1636 for (int i = 0; i < PluginsXmlList.count(); i++) {
1637 PluginsXml = PluginsXmlList[ i ];
1639 // Find full path to the resource XML file
1640 QString xmlFile = resMgr->path("resources", "GEOM", PluginsXml + ".xml");
1641 if ( xmlFile.isEmpty() ) // try PLUGIN resources
1642 xmlFile = resMgr->path("resources", PluginsXml, PluginsXml + ".xml");
1643 if ( !xmlFile.isEmpty() )
1644 xmlFiles.append( xmlFile );
1647 // create "Advanced Operations" menu and corresponding toolbar
1648 //int advancedMenuId = createMenu(tr("MEN_ADVANCED"), -1, -1, 10);
1649 //int advancedTbarId = createTool(tr("TOOL_ADVANCED"));
1650 int id = GEOMOp::OpLastOperationID; // TODO?
1653 QString aNoAccessFiles;
1654 for (int i = 0; i < xmlFiles.count(); i++) {
1655 QString xmlFile = xmlFiles[ i ];
1657 QFile file (xmlFile);
1658 if (file.exists() && file.open(QIODevice::ReadOnly)) {
1661 GEOMGUI_XmlHandler* aXmlHandler = new GEOMGUI_XmlHandler();
1662 ASSERT(aXmlHandler);
1664 QXmlInputSource source (&file);
1665 QXmlSimpleReader reader;
1666 reader.setContentHandler(aXmlHandler);
1667 reader.setErrorHandler(aXmlHandler);
1668 bool ok = reader.parse(source);
1672 // bind action lib and label to its ID for activateOperation() method proper work
1673 myPluginLibs[aXmlHandler->myPluginData.myName] = aXmlHandler->myPluginData.myClientLib;
1675 QListIterator<GEOMGUI_ActionData> anActionsIter (aXmlHandler->myPluginData.myListOfActions);
1676 while (anActionsIter.hasNext()) {
1677 GEOMGUI_ActionData anActionData = anActionsIter.next();
1679 //QPixmap icon = resMgr->loadPixmap("GEOM", tr(anActionData.myIcon.toLatin1().constData()));
1680 QPixmap icon = resMgr->loadPixmap(aXmlHandler->myPluginData.myName,
1681 anActionData.myIcon.toLatin1().constData());
1683 // path to action in menu
1684 QStringList smenus = anActionData.myMenu.split( "/" );
1685 QString actionName = smenus.last();
1686 actionName = actionName.toUpper().prepend("MEN_");
1687 smenus.removeLast();
1689 // path to action in toolbar
1690 QStringList stools = anActionData.myTooltip.split( "/" );
1691 QString actionTool = stools.last();
1692 actionTool = actionTool.toUpper().prepend("TOP_");
1693 stools.removeLast();
1695 QString actionStat = anActionData.myStatusBar;
1696 actionStat = actionStat.toUpper().prepend("STB_");
1698 createAction(id, // ~ anActionData.myLabel
1699 tr(actionTool.toLatin1().constData()),
1701 tr(actionName.toLatin1().constData()),
1702 tr(actionStat.toLatin1().constData()),
1704 application()->desktop(),
1706 this, SLOT(OnGUIEvent()),
1707 QString() /*shortcutAction*/);
1710 foreach (QString subMenu, smenus) {
1711 subMenu = subMenu.toUpper().prepend("MEN_");
1712 menuId = createMenu(tr(subMenu.toLatin1().constData()), menuId, -1);
1714 //createMenu(id, pluginMenuId, -1);
1715 createMenu(id, menuId, -1);
1717 QString subTool = stools[0];
1718 subTool = subTool.toUpper().prepend("TOOL_");
1719 int toolId = createTool(tr(subTool.toLatin1().constData()));
1720 //createTool(id, advancedTbarId);
1721 createTool(id, toolId);
1723 // add action id to map
1724 PluginAction anAction (aXmlHandler->myPluginData.myClientLib, anActionData.myLabel);
1725 myPluginActions[id] = anAction;
1731 SUIT_MessageBox::critical(application()->desktop(),
1732 tr("INF_PARSE_ERROR"),
1733 tr(aXmlHandler->errorProtocol().toLatin1().data()));
1737 else if ( i > 0 ) { // 1st is ~/CustomGeomPlugins.xml
1738 if (aNoAccessFiles.isEmpty())
1739 aNoAccessFiles = xmlFile;
1741 aNoAccessFiles += ", " + xmlFile;
1743 } // end loop on xmlFiles
1745 if (!aNoAccessFiles.isEmpty()) {
1746 QString aMess = QObject::tr("PLUGIN_FILE_CANT_OPEN") + " " + aNoAccessFiles + "\n";
1747 aMess += QObject::tr("PLUGIN_FILE_CHECK_VARIABLE");
1748 SUIT_MessageBox::warning(application()->desktop(), tr("GEOM_WRN_WARNING"), aMess);
1752 //=======================================================================
1753 // function : GeometryGUI::activateModule()
1754 // purpose : Called when GEOM module is activated
1755 //=======================================================================
1756 bool GeometryGUI::activateModule( SUIT_Study* study )
1758 if ( CORBA::is_nil( myComponentGeom ) )
1761 bool res = SalomeApp_Module::activateModule( study );
1765 setMenuShown( true );
1766 setToolShown( true );
1768 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1769 PyGILState_STATE gstate = PyGILState_Ensure();
1770 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1771 if ( !pluginsmanager ) {
1775 PyObjWrapper result =
1776 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1777 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1778 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1782 PyGILState_Release(gstate);
1783 // end of GEOM plugins loading
1785 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1786 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1788 // Reset actions accelerator keys
1789 action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1790 action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1791 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1793 GUIMap::Iterator it;
1794 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1795 it.value()->activate( application()->desktop() );
1797 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1799 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1800 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1801 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1803 if ( !myCreationInfoWdg )
1804 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1805 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1806 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1808 SUIT_ViewManager* vm;
1809 ViewManagerList OCCViewManagers, VTKViewManagers;
1811 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1812 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1813 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1814 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1816 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1817 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1818 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1819 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1822 SALOME_ListIO selected;
1823 sm->selectedObjects( selected );
1824 sm->clearSelected();
1826 // disable OCC selectors
1827 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1828 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1829 while ( itOCCSel.hasNext() )
1830 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1831 sr->setEnabled(true);
1833 // disable VTK selectors
1834 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1835 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1836 while ( itVTKSel.hasNext() )
1837 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1838 sr->setEnabled(true);
1840 sm->setSelectedObjects( selected, true ); //NPAL 19674
1842 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1844 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1846 // 0020836 (Basic vectors and origin)
1847 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1848 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1849 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1851 _PTR(Study) studyDS = appStudy->studyDS();
1853 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1854 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1855 createOriginAndBaseVectors();
1863 //=======================================================================
1864 // function : GeometryGUI::deactivateModule()
1865 // purpose : Called when GEOM module is deactivated
1866 //=======================================================================
1867 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1869 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1871 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1873 setMenuShown( false );
1874 setToolShown( false );
1876 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1877 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1879 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1881 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1882 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1883 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1884 myCreationInfoWdg = 0;
1886 EmitSignalCloseAllDialogs();
1888 GUIMap::Iterator it;
1889 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1890 it.value()->deactivate();
1892 // Unset actions accelerator keys
1893 action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1894 action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1895 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1897 qDeleteAll(myOCCSelectors);
1898 myOCCSelectors.clear();
1899 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1901 qDeleteAll(myVTKSelectors);
1902 myVTKSelectors.clear();
1903 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1905 return SalomeApp_Module::deactivateModule( study );
1908 //=======================================================================
1909 // function : onWindowActivated()
1910 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1911 //=======================================================================
1912 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1917 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1918 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1920 // disable non-OCC viewframe menu commands
1921 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1922 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1923 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1924 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1925 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1926 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1927 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1929 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1930 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1931 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1932 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1934 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1937 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1939 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1940 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1941 if ( myCreationInfoWdg )
1942 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1945 void GeometryGUI::viewManagers( QStringList& lst ) const
1947 lst.append( OCCViewer_Viewer::Type() );
1950 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1952 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1954 qDebug( "connect" );
1955 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1956 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1957 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1958 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1959 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1960 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1961 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1962 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1964 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1965 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1967 // disable OCC selectors
1968 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1969 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1970 while ( itOCCSel.hasNext() )
1971 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1972 sr->setEnabled(true);
1974 else if ( vm->getType() == SVTK_Viewer::Type() )
1976 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1977 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1979 // disable VTK selectors
1980 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1981 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1982 while ( itVTKSel.hasNext() )
1983 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1984 sr->setEnabled(true);
1988 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1990 SUIT_ViewModel* viewer = vm->getViewModel();
1991 if ( vm->getType() == OCCViewer_Viewer::Type() )
1993 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1994 while ( itOCCSel.hasNext() )
1995 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1996 if ( sr->viewer() == viewer )
1998 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
2002 if ( vm->getType() == SVTK_Viewer::Type() )
2004 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2005 while ( itVTKSel.hasNext() )
2006 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2007 if ( sr->viewer() == viewer )
2009 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2015 //================================================================================
2017 * \brief Slot called when selection changed. Shows creation info of a selected object
2019 //================================================================================
2021 void GeometryGUI::updateCreationInfo()
2023 if ( myCreationInfoWdg )
2024 myCreationInfoWdg->clear();
2026 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2027 // if ( !myCreationInfoWdg->isVisible() )
2030 // look for a sole selected GEOM_Object
2031 GEOM::GEOM_BaseObject_var geomObj;
2033 SALOME_ListIO selected;
2034 getApp()->selectionMgr()->selectedObjects( selected );
2036 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2037 SALOME_ListIteratorOfListIO selIt( selected );
2038 for ( ; selIt.More(); selIt.Next() )
2040 Handle(SALOME_InteractiveObject) io = selIt.Value();
2041 if ( !io->hasEntry() ) continue;
2042 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2043 if ( !sobj ) continue;
2044 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2045 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2046 if ( !gobj->_is_nil() )
2048 if ( !geomObj->_is_nil() )
2049 return; // several GEOM objects selected
2053 if ( geomObj->_is_nil() ) return;
2055 // pass creation info of geomObj to myCreationInfoWdg
2057 if ( myCreationInfoWdg ) {
2059 QString operationName;
2060 myCreationInfoWdg->setOperation( icon, operationName );
2064 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2066 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2067 QString name = info->operationName.in();
2068 if ( !name.isEmpty() ) {
2069 icon = resMgr->loadPixmap( "GEOM", tr( ("ICO_"+name).toLatin1().constData() ), false );
2070 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2071 if ( operationName.startsWith( "MEN_" ))
2072 operationName = name; // no translation
2073 myCreationInfoWdg->setOperation( icon, operationName );
2075 for ( size_t i = 0; i < info->params.length(); ++i )
2076 myCreationInfoWdg->addParam( info->params[i].name.in(),
2077 info->params[i].value.in() );
2086 void GeometryGUI::onAutoBringToFront()
2088 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front" );
2089 if( !isAutoBringToFront )
2092 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2093 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2096 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2097 if (!appStudy) return;
2099 GEOM_Displayer displayer( appStudy );
2101 SALOME_View* window = displayer.GetActiveView();
2102 if ( !window ) return;
2104 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2106 SALOME_ListIO selected;
2107 getApp()->selectionMgr()->selectedObjects( selected );
2108 if (!myTopLevelIOList.IsEmpty())
2110 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2112 Handle( SALOME_InteractiveObject ) io = It.Value();
2113 bool isSelected = false;
2114 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2116 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2117 if( io->isSame( sel_io ) )
2120 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2122 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2123 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2128 myTopLevelIOList.Assign(selected);
2129 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2131 Handle( SALOME_InteractiveObject ) io = It.Value();
2132 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2133 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2136 displayer.UpdateViewer();
2137 GeometryGUI::Modified();
2140 void GeometryGUI::updateFieldColorScale()
2142 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2144 GEOM_Displayer aDisplayer( aStudy );
2145 aDisplayer.UpdateColorScale();
2149 QString GeometryGUI::engineIOR() const
2151 if ( !CORBA::is_nil( GetGeomGen() ) )
2152 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2156 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2157 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2159 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
2161 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2163 theWidth = theHeight = 0;
2165 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2166 Handle(TColStd_HArray1OfByte) aTexture;
2168 Handle(Graphic3d_HArray1OfBytes) aTexture;
2172 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2173 aTexture = aTextureMap[ theId ];
2174 if ( aTexture.IsNull() ) {
2175 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2176 if ( !aInsOp->_is_nil() ) {
2177 CORBA::Long aWidth, aHeight;
2178 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2179 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2181 theHeight = aHeight;
2183 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2184 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2186 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
2189 for (int i = 0; i < aStream->length(); i++)
2190 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2191 aTextureMap[ theId ] = aTexture;
2199 LightApp_Selection* GeometryGUI::createSelection() const
2201 return new GEOMGUI_Selection();
2204 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2206 SalomeApp_Module::contextMenuPopup( client, menu, title );
2208 getApp()->selectionMgr()->selectedObjects( lst );
2210 //Add submenu for predefined materials
2211 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2212 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2213 QtxPopupMgr* mgr = popupMgr();
2214 //get parrent for submenu
2215 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2217 QMenu* oldMenu = act->menu() ;
2222 QMenu* matMenu = new QMenu();
2223 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2225 //Get current material model for the object
2227 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2228 if ( anApp && anApp->activeViewManager() ) {
2229 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2231 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2234 QString curModel = "";
2235 if ( v.canConvert<QString>() ) curModel = v.toString();
2236 // get list of all predefined materials
2237 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2239 foreach ( QString material, materials )
2241 QAction* menAct = matMenu->addAction( material );
2242 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2243 signalMapper->setMapping( menAct, material );
2244 menAct->setCheckable( true );
2245 // Set checked if this material is current
2246 Material_Model aModel;
2247 aModel.fromResources( material );
2248 if ( !found && aModel.toProperties() == curModel ) {
2249 menAct->setChecked( true );
2253 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2254 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2255 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2256 this, SLOT( OnSetMaterial( const QString & ) ) );
2257 act->setMenu( matMenu );
2261 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2262 Handle(SALOME_InteractiveObject) io = lst.First();
2263 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2264 _PTR(Study) study = appStudy->studyDS();
2265 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2267 QString aName = QString( obj->GetName().c_str() );
2268 aName.remove( QRegExp("\\s+$") );
2274 void GeometryGUI::OnSetMaterial(const QString& theName)
2276 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2280 void GeometryGUI::createPreferences()
2282 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2284 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2285 setPreferenceProperty( genGroup, "columns", 2 );
2287 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2288 LightApp_Preferences::Selector,
2289 "Geometry", "display_mode" );
2291 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2292 LightApp_Preferences::Color, "Geometry", "shading_color" );
2294 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2295 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2297 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2298 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2300 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2301 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2303 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2304 LightApp_Preferences::Color, "Geometry", "line_color" );
2306 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2307 LightApp_Preferences::Color, "Geometry", "point_color" );
2309 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2310 LightApp_Preferences::Color, "Geometry", "isos_color" );
2312 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2313 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2315 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2316 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2318 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2319 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2321 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2322 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2324 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2325 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2327 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2328 LightApp_Preferences::Selector,
2329 "Geometry", "material" );
2331 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2332 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2338 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2339 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2341 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2342 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2344 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2345 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2347 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2348 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2350 for (int i = 0; i < nb; i++) {
2351 setPreferenceProperty( wd[i], "min", 1 );
2352 setPreferenceProperty( wd[i], "max", 5 );
2355 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2356 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2358 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2359 setPreferenceProperty( isoGroup, "columns", 2 );
2360 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2361 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2362 setPreferenceProperty( isoU, "min", 0 );
2363 setPreferenceProperty( isoU, "max", 100000 );
2364 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2365 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2366 setPreferenceProperty( isoV, "min", 0 );
2367 setPreferenceProperty( isoV, "max", 100000 );
2369 // Quantities with individual precision settings
2370 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2371 setPreferenceProperty( precGroup, "columns", 2 );
2373 const int nbQuantities = 8;
2374 int prec[nbQuantities], ii = 0;
2375 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2376 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2377 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2378 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2379 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2380 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2381 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2382 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2383 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2384 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2385 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2386 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2387 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2388 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2389 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2390 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2392 // Set property for precision value for spinboxes
2393 for ( ii = 0; ii < nbQuantities; ii++ ){
2394 setPreferenceProperty( prec[ii], "min", -14 );
2395 setPreferenceProperty( prec[ii], "max", 14 );
2396 setPreferenceProperty( prec[ii], "precision", 2 );
2399 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2400 setPreferenceProperty( VertexGroup, "columns", 2 );
2402 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2403 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2405 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2406 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2408 // Set property for default display mode
2409 QStringList aModesList;
2410 aModesList.append( tr("MEN_WIREFRAME") );
2411 aModesList.append( tr("MEN_SHADING") );
2412 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2414 QList<QVariant> anIndexesList;
2415 anIndexesList.append(0);
2416 anIndexesList.append(1);
2417 anIndexesList.append(2);
2419 setPreferenceProperty( dispmode, "strings", aModesList );
2420 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2422 // Set property for top level display mode
2423 QStringList aTopModesList;
2424 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2425 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2426 aTopModesList.append( tr("MEN_WIREFRAME") );
2427 aTopModesList.append( tr("MEN_SHADING") );
2428 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2430 QList<QVariant> aTopIndexesList;
2431 aTopIndexesList.append(0);
2432 aTopIndexesList.append(1);
2433 aTopIndexesList.append(2);
2434 aTopIndexesList.append(3);
2435 aTopIndexesList.append(4);
2437 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2438 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2440 // Set property for step value for spinboxes
2441 setPreferenceProperty( step, "min", 1 );
2442 setPreferenceProperty( step, "max", 10000 );
2443 setPreferenceProperty( step, "precision", 3 );
2445 // Set property for deflection value for spinboxes
2446 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2447 setPreferenceProperty( defl, "max", 1.0 );
2448 setPreferenceProperty( defl, "step", 1.0e-04 );
2449 setPreferenceProperty( defl, "precision", 6 );
2451 // Set property for default material
2452 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2454 // Set property vertex marker type
2455 QList<QVariant> aMarkerTypeIndicesList;
2456 QList<QVariant> aMarkerTypeIconsList;
2458 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2459 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2460 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2461 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2462 aMarkerTypeIndicesList << (i-1);
2463 aMarkerTypeIconsList << pixmap;
2466 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2467 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2469 // Set property for vertex marker scale
2470 QList<QVariant> aMarkerScaleIndicesList;
2471 QStringList aMarkerScaleValuesList;
2473 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2474 aMarkerScaleIndicesList << iii;
2475 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2478 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2479 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2481 // Scalar bar for field step presentation
2482 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2483 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2485 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2486 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2487 setPreferenceProperty( sbXPosition, "min", 0 );
2488 setPreferenceProperty( sbXPosition, "max", 1 );
2489 setPreferenceProperty( sbXPosition, "step", 0.05 );
2491 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2492 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2493 setPreferenceProperty( sbYPosition, "min", 0 );
2494 setPreferenceProperty( sbYPosition, "max", 1 );
2495 setPreferenceProperty( sbYPosition, "step", 0.05 );
2497 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2498 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2499 setPreferenceProperty( sbWidth, "min", 0 );
2500 setPreferenceProperty( sbWidth, "max", 1 );
2501 setPreferenceProperty( sbWidth, "step", 0.05 );
2503 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2504 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2505 setPreferenceProperty( sbHeight, "min", 0 );
2506 setPreferenceProperty( sbHeight, "max", 1 );
2507 setPreferenceProperty( sbHeight, "step", 0.05 );
2509 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2510 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2511 setPreferenceProperty( sbTextHeight, "min", 6 );
2512 setPreferenceProperty( sbTextHeight, "max", 24 );
2513 setPreferenceProperty( sbTextHeight, "step", 1 );
2515 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2516 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2517 setPreferenceProperty( sbNbIntervals, "min", 2 );
2518 setPreferenceProperty( sbNbIntervals, "max", 64 );
2519 setPreferenceProperty( sbNbIntervals, "step", 1 );
2521 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2522 setPreferenceProperty( originGroup, "columns", 2 );
2524 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2525 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2526 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2527 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2529 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2530 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2532 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2533 setPreferenceProperty( operationsGroup, "columns", 2 );
2535 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2536 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2539 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2541 if (section == "Geometry") {
2542 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2543 if (param == QString("SettingsGeomStep")) {
2544 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2545 EmitSignalDefaultStepValueChanged(spin_step);
2547 else if (param == QString("toplevel_color")) {
2548 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2549 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2551 else if (param == QString("toplevel_dm")) {
2552 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2554 else if (param == QString("scalar_bar_x_position") ||
2555 param == QString("scalar_bar_y_position") ||
2556 param == QString("scalar_bar_width") ||
2557 param == QString("scalar_bar_height") ||
2558 param == QString("scalar_bar_text_height") ||
2559 param == QString("scalar_bar_nb_intervals")) {
2560 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2562 GEOM_Displayer aDisplayer( aStudy );
2563 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2564 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2570 LightApp_Displayer* GeometryGUI::displayer()
2573 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2577 void GeometryGUI::setLocalSelectionMode(const int mode)
2579 myLocalSelectionMode = mode;
2582 int GeometryGUI::getLocalSelectionMode() const
2584 return myLocalSelectionMode;
2587 const char gSeparator = '_'; // character used to separate parameter names
2588 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2591 * \brief Store visual parameters
2593 * This method is called just before the study document is saved.
2594 * Store visual parameters in AttributeParameter attribute(s)
2596 void GeometryGUI::storeVisualParameters (int savePoint)
2598 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2599 if ( !appStudy || !appStudy->studyDS() )
2601 _PTR(Study) studyDS = appStudy->studyDS();
2603 // componentName is used for encoding of entries when storing them in IParameters
2604 std::string componentName = myComponentGeom->ComponentDataType();
2605 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2606 //if (!aSComponent) return;
2609 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2610 componentName.c_str(),
2612 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2614 QList<SUIT_ViewManager*> lst;
2615 QList<SUIT_ViewManager*>::Iterator it;
2617 // main cycle to store parameters of displayed objects
2619 getApp()->viewManagers(lst);
2620 for (it = lst.begin(); it != lst.end(); it++) {
2621 SUIT_ViewManager* vman = *it;
2622 QString vType = vman->getType();
2623 int aMgrId = vman->getGlobalId();
2624 // saving VTK actors properties
2625 QVector<SUIT_ViewWindow*> views = vman->getViews();
2626 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2627 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
2628 ObjMap::ConstIterator o_it = anObjects.begin();
2629 for (; o_it != anObjects.end(); o_it++) {
2630 const PropMap aProps = o_it.value();
2632 //Check that object exists in the study
2633 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2634 if ( !obj || !(aProps.count() > 0))
2636 // entry is "encoded" = it does NOT contain component adress, since it is a
2637 // subject to change on next component loading
2639 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2641 _PTR(GenericAttribute) anAttr;
2642 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2645 QString param, occParam = vType;
2646 occParam += GEOM::sectionSeparator();
2647 occParam += QString::number(aMgrId);
2648 occParam += GEOM::sectionSeparator();
2650 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2651 param = occParam + GEOM::propertyName( GEOM::Visibility );
2652 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2655 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2656 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2657 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2660 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2661 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2663 val << QString::number(c.redF());
2664 val << QString::number(c.greenF());
2665 val << QString::number(c.blueF());
2666 param = occParam + GEOM::propertyName( GEOM::Color );
2667 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2670 if (vType == SVTK_Viewer::Type()) {
2671 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2672 param = occParam + GEOM::propertyName( GEOM::Opacity );
2673 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2675 } else if (vType == SOCC_Viewer::Type()) {
2676 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2677 param = occParam + GEOM::propertyName( GEOM::Transparency );
2678 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2681 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2682 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2683 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2687 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2688 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2689 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2692 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2693 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2694 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2697 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2698 param = occParam + GEOM::propertyName( GEOM::Deflection );
2699 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2702 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2703 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2704 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2705 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2708 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2709 param = occParam + GEOM::propertyName( GEOM::Material );
2710 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2713 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2714 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2715 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2718 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2719 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2720 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2722 } // object iterator
2724 } // for (viewManagers)
2728 * \brief Restore visual parameters
2730 * This method is called after the study document is opened.
2731 * Restore visual parameters from AttributeParameter attribute(s)
2733 void GeometryGUI::restoreVisualParameters (int savePoint)
2735 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2736 if (!appStudy || !appStudy->studyDS())
2738 _PTR(Study) studyDS = appStudy->studyDS();
2740 // componentName is used for encoding of entries when storing them in IParameters
2741 std::string componentName = myComponentGeom->ComponentDataType();
2742 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2743 //if (!aSComponent) return;
2746 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2747 componentName.c_str(),
2749 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2751 std::vector<std::string> entries = ip->getEntries();
2753 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2755 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2756 QString entry (ip->decodeEntry(*entIt).c_str());
2758 // Check that the entry corresponds to a real object in the Study
2759 // as the object may be deleted or modified after the visual state is saved.
2760 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2761 if (!so) continue; //Skip the not existent entry
2763 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2764 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2766 std::vector<std::string>::iterator namesIt = paramNames.begin();
2767 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2769 // actors are stored in a map after displaying of them for
2770 // quicker access in the future: map < viewID to actor >
2771 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2772 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2774 QString viewerTypStr;
2775 QString viewIndexStr;
2777 QVector<PropMap> aListOfMap;
2779 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2781 // visual parameters are stored in strings as follows: ViewerType_ViewIndex_ParamName.
2782 // '_' is used as separator and should not be used in viewer type or parameter names.
2783 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2784 if (lst.size() != 3)
2787 viewerTypStr = lst[0];
2788 viewIndexStr = lst[1];
2789 QString paramNameStr = lst[2];
2792 viewIndex = viewIndexStr.toUInt(&ok);
2793 if (!ok) // bad conversion of view index to integer
2796 if ((viewIndex + 1) > aListOfMap.count()) {
2797 aListOfMap.resize(viewIndex + 1);
2800 QString val((*valuesIt).c_str());
2801 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
2802 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
2803 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
2804 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
2805 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
2806 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
2807 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
2808 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
2809 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
2810 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
2811 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
2812 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
2813 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
2814 QStringList rgb = val.split(GEOM::subSectionSeparator());
2815 if (rgb.count() == 3) {
2816 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
2817 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
2819 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
2820 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
2821 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
2822 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
2823 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
2824 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
2825 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
2826 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
2827 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
2828 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
2829 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
2830 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
2832 } // for names/parameters iterator
2834 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2836 for (int index = 0; index < aListOfMap.count(); index++) {
2838 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
2840 //Get Visibility property of the current PropMap
2841 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
2842 SUIT_ViewManager* vman = lst.at(index);
2843 SUIT_ViewModel* vmodel = vman->getViewModel();
2844 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
2847 } // for entries iterator
2849 // update all VTK and OCC views
2850 QList<SUIT_ViewManager*> lst;
2851 getApp()->viewManagers(lst);
2852 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
2853 SUIT_ViewModel* vmodel = (*it)->getViewModel();
2856 if (vmodel->getType() == SVTK_Viewer::Type()) {
2857 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
2858 vtkView->getRenderer()->ResetCameraClippingRange();
2861 else if (vmodel->getType() == SOCC_Viewer::Type()) {
2862 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
2863 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
2870 void GeometryGUI::onViewAboutToShow()
2872 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
2873 QAction* a = action( GEOMOp::OpSwitchVectors );
2875 a->setEnabled(true);
2876 bool vmode = window->property("VectorsMode").toBool();
2877 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
2879 a->setText ( tr("MEN_VECTOR_MODE_ON") );
2880 a->setEnabled(false);
2885 \brief Return action by id
2886 \param id identifier of the action
2889 QAction* GeometryGUI::getAction(const int id) {
2894 \brief GEOM module message handler
2896 This method can be re-implemented in the subclasses.
2897 This is a GEOM module message handler.
2899 \param msg the message received.
2901 void GeometryGUI::message(const QString& msg)
2904 QStringList data = msg.split("/");
2905 const int nbStrings = data.count();
2907 if (nbStrings > 0) {
2908 if (data[0] == "modified") {
2910 QString anIOR = nbStrings > 1 ? data[1] : QString();
2912 if ( anIOR.isEmpty() ) {
2916 // Get the geom object.
2917 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
2919 // Clear the shape buffer
2920 GeometryGUI::ClearShapeBuffer (anObj);
2926 \brief Clears the shape buffer.
2928 This is a static method. It clears the shape buffer.
2930 \param theObj the object
2932 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
2934 if ( CORBA::is_nil( theObj ) )
2937 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
2938 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
2939 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
2941 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
2946 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
2951 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
2955 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
2956 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
2957 _PTR(GenericAttribute) anAttr;
2958 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
2959 _PTR(AttributeIOR) anIOR ( anAttr );
2960 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
2961 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
2967 \brief Returns the object from IOR.
2969 This is a static method. It returns the object from its IOR.
2971 \param IOR object IOR
2972 \return GEOM object.
2974 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
2976 GEOM::GEOM_Object_var geomObj;
2977 if ( !IOR.isEmpty() ) {
2978 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
2979 ( IOR.toLatin1().constData() );
2980 if ( !CORBA::is_nil( corbaObj ) )
2981 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
2983 return geomObj._retn();
2987 \brief Returns IOR of the object.
2989 This is a static method. It returns the object's IOR.
2991 \param object the GEOM object.
2992 \return object's IOR.
2994 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
2997 if ( !CORBA::is_nil( object ) ) {
2998 CORBA::String_var anIOR =
2999 SalomeApp_Application::orb()->object_to_string( object );
3006 \brief Check if this object is can't be renamed in place
3008 This method can be re-implemented in the subclasses.
3009 Return true in case if object isn't reference or component (module root).
3011 \param entry column id
3012 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3014 bool GeometryGUI::renameAllowed( const QString& entry) const {
3016 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3017 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3018 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3020 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3024 Rename object by entry.
3025 \param entry entry of the object
3026 \param name new name of the object
3027 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3029 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3031 bool result = false;
3033 SalomeApp_Application* app =
3034 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3035 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3040 _PTR(Study) aStudy = appStudy->studyDS();
3045 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3047 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3051 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3052 _PTR(GenericAttribute) anAttr;
3054 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3055 _PTR(AttributeName) aName (anAttr);
3057 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3058 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3059 if (!CORBA::is_nil(anObj)) {
3060 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3068 void GeometryGUI::updateMaterials()
3070 LightApp_Preferences* pref = preferences();
3072 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3073 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3074 if ( !materials.contains( currentMaterial ) )
3075 // user material set as default in the preferences, might be removed
3076 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3078 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3080 setPreferenceProperty( prefItem->id(),
3081 "strings", materials );
3082 prefItem->retrieve();
3088 \brief Check if the module allows "drag" operation of its objects.
3090 Overloaded from LightApp_Module class.
3092 This function is a part of the general drag-n-drop mechanism.
3093 The goal of this function is to check data object passed as a parameter
3094 and decide if it can be dragged or no.
3096 \param what data object being tested for drag operation
3097 \return \c true if module allows dragging of the specified object
3098 \sa isDropAccepted(), dropObjects()
3100 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3102 // we allow dragging object under root and object from folder
3103 int aLevel = what->level();
3104 bool anObjectInFolder = false;
3106 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3108 _PTR(SObject) aSO = dataObj->object();
3110 _PTR(GenericAttribute) anAttr;
3111 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3112 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3113 _PTR(AttributeLocalID) aLocalID( anAttr );
3114 anObjectInFolder = aLocalID->Value() == 999;
3119 return aLevel == 2 || anObjectInFolder;
3123 \brief Check if the module allows "drop" operation on the given object.
3125 Overloaded from LightApp_Module class.
3127 This function is a part of the general drag-n-drop mechanism.
3128 The goal of this function is to check data object passed as a parameter
3129 and decide if it can be used as a target for the "drop" operation.
3130 The processing of the drop operation itself is done in the dropObjects() function.
3132 \param where target data object
3133 \return \c true if module supports dropping on the \a where data object
3134 \sa isDraggable(), dropObjects()
3136 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3138 // we allow dropping into folder and top-level GEOM object
3139 int aLevel = where->level();
3140 bool isFolder = false;
3142 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3144 _PTR(SObject) aSO = dataObj->object();
3146 _PTR(GenericAttribute) anAttr;
3147 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3148 _PTR(AttributeLocalID) aLocalID( anAttr );
3149 isFolder = aLocalID->Value() == 999;
3154 return aLevel == 1 || isFolder;
3158 \brief Complete drag-n-drop operation.
3160 Overloaded from LightApp_Module class.
3162 This function is a part of the general drag-n-drop mechanism.
3163 Its goal is to handle dropping of the objects being dragged according
3164 to the chosen operation (move). The dropping is performed in the
3165 context of the parent data object \a where and the \a row (position in the
3166 children index) at which the data should be dropped. If \a row is equal to -1,
3167 this means that objects are added to the end of the children list.
3169 \param what objects being dropped
3170 \param where target data object
3171 \param row child index at which the drop operation is performed
3172 \param action drag-n-drop operation (Qt::DropAction) - move
3174 \sa isDraggable(), isDropAccepted()
3176 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3177 const int row, Qt::DropAction action )
3179 if (action != Qt::CopyAction && action != Qt::MoveAction)
3180 return; // unsupported action
3182 // get parent object
3183 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3184 if ( !dataObj ) return; // wrong parent
3185 _PTR(SObject) parentObj = dataObj->object();
3187 // Find the current Study and StudyBuilder
3188 _PTR(Study) aStudy = parentObj->GetStudy();
3189 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3190 // collect all parents of the target node
3191 QStringList parentIDs;
3192 _PTR(SObject) parent = parentObj;
3193 while( !parent->IsNull() ) {
3194 parentIDs << parent->GetID().c_str();
3195 parent = aUseCaseBuilder->GetFather(parent);
3198 // collect objects being dropped
3199 GEOM::object_list_var objects = new GEOM::object_list();
3200 objects->length( what.count() );
3202 for ( int i = 0; i < what.count(); i++ ) {
3203 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3204 if ( !dataObj ) continue; // skip wrong objects
3205 _PTR(SObject) sobj = dataObj->object();
3206 // check that dropped object is not a parent of target object
3207 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3208 return; // it's not allowed to move node into it's child
3210 objects[i] = _CAST(SObject, sobj)->GetSObject();
3213 objects->length( count );
3215 // call engine function
3216 GetGeomGen()->Move( objects.in(), // what
3217 _CAST(SObject, parentObj)->GetSObject(), // where
3220 // update Object browser
3221 getApp()->updateObjectBrowser( false );