1 // Copyright (C) 2007-2014 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, or (at your option) any later version.
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_OCCSelector.h"
34 #include "GEOMGUI_Selection.h"
35 #include "GEOMGUI_CreationInfoWdg.h"
36 #include "GEOMGUI_DimensionProperty.h"
37 #include "GEOM_Constants.h"
38 #include "GEOM_Displayer.h"
39 #include "GEOM_AISShape.hxx"
40 #include "GEOMUtils_XmlHandler.hxx"
42 #include "GEOM_Actor.h"
44 #include <Material_ResourceMgr.h>
45 #include <Material_Model.h>
47 #include <SUIT_Desktop.h>
48 #include <SUIT_MessageBox.h>
49 #include <SUIT_ResourceMgr.h>
50 #include <SUIT_Session.h>
51 #include <SUIT_ViewManager.h>
53 #include <PyInterp_Interp.h>
55 #include <OCCViewer_ViewWindow.h>
56 #include <OCCViewer_ViewPort3d.h>
57 #include <OCCViewer_ViewModel.h>
58 #include <OCCViewer_ViewManager.h>
60 #include <SOCC_ViewModel.h>
61 #include <SOCC_ViewWindow.h>
63 #include <SVTK_ViewWindow.h>
64 #include <SVTK_RenderWindowInteractor.h>
65 #include <SVTK_InteractorStyle.h>
66 #include <SVTK_ViewModel.h>
68 #include <GraphicsView_Viewer.h>
70 #include <SalomeApp_Application.h>
71 #include <SalomeApp_DataObject.h>
72 #include <SalomeApp_Study.h>
73 #include <SalomeApp_Tools.h>
75 #include <LightApp_SelectionMgr.h>
76 #include <LightApp_VTKSelector.h>
77 #include <LightApp_DataObject.h>
78 #include <LightApp_Preferences.h>
80 #include <SALOME_LifeCycleCORBA.hxx>
81 #include <SALOME_ListIO.hxx>
83 #include <SALOMEDSClient_ClientFactory.hxx>
84 #include <SALOMEDSClient_IParameters.hxx>
86 #include <SALOMEDS_SObject.hxx>
88 #include <Basics_OCCTVersion.hxx>
99 #include <QSignalMapper>
101 #include <AIS_Drawer.hxx>
102 #include <AIS_ListOfInteractive.hxx>
103 #include <AIS_ListIteratorOfListOfInteractive.hxx>
104 #include <Prs3d_Drawer.hxx>
105 #include <Prs3d_IsoAspect.hxx>
106 #include <Aspect_TypeOfMarker.hxx>
107 #include <OSD_SharedLibrary.hxx>
108 #include <NCollection_DataMap.hxx>
110 #include <TColStd_HArray1OfByte.hxx>
112 #include <utilities.h>
114 #include <vtkCamera.h>
115 #include <vtkRenderer.h>
117 #include <Standard_Failure.hxx>
118 #include <Standard_ErrorHandler.hxx>
120 #include "GEOM_version.h"
121 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
124 Standard_EXPORT CAM_Module* createModule() {
125 return new GeometryGUI();
128 Standard_EXPORT char* getModuleVersion() {
129 return (char*)GEOM_VERSION_STR;
133 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
135 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
137 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
139 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
140 if (CORBA::is_nil(myComponentGeom))
142 return GeometryGUI::myComponentGeom;
145 bool GeometryGUI::InitGeomGen()
148 if ( CORBA::is_nil( myComponentGeom ) ) return false;
152 //=======================================================================
153 // function : ClientSObjectToObject
155 //=======================================================================
156 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
158 _PTR(GenericAttribute) anAttr;
159 CORBA::Object_var anObj;
161 std::string aValue = theSObject->GetIOR();
162 if (strcmp(aValue.c_str(), "") != 0) {
163 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
164 anObj = anORB->string_to_object(aValue.c_str());
167 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
169 return anObj._retn();
172 //=======================================================================
173 // function : ClientStudyToStudy
175 //=======================================================================
176 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
178 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
179 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
180 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
181 int aStudyID = theStudy->StudyId();
182 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
183 return aDSStudy._retn();
186 void GeometryGUI::Modified (bool theIsUpdateActions)
188 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
189 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
190 appStudy->Modified();
191 if ( theIsUpdateActions )
192 app->updateActions();
197 //=======================================================================
198 // function : GeometryGUI::GeometryGUI()
199 // purpose : Constructor
200 //=======================================================================
201 GeometryGUI::GeometryGUI() :
202 SalomeApp_Module( "GEOM" ),
205 if ( CORBA::is_nil( myComponentGeom ) )
207 Engines::EngineComponent_var comp =
208 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
209 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
212 myActiveDialogBox = 0;
214 gp_Pnt origin = gp_Pnt(0., 0., 0.);
215 gp_Dir direction = gp_Dir(0., 0., 1.);
216 myWorkingPlane = gp_Ax3(origin, direction);
219 myLocalSelectionMode = GEOM_ALLOBJECTS;
221 myCreationInfoWdg = 0;
223 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
225 Q_INIT_RESOURCE( GEOMGUI );
228 //=======================================================================
229 // function : GeometryGUI::~GeometryGUI()
230 // purpose : Destructor
231 //=======================================================================
232 GeometryGUI::~GeometryGUI()
234 while (!myOCCSelectors.isEmpty())
235 delete myOCCSelectors.takeFirst();
237 while (!myVTKSelectors.isEmpty())
238 delete myVTKSelectors.takeFirst();
240 qDeleteAll(myGUIMap);
243 //=======================================================================
244 // function : GeometryGUI::getLibrary()
245 // purpose : get or load GUI library by name [ internal ]
246 //=======================================================================
247 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
248 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
250 if ( !myGUIMap.contains( libraryName ) ) {
251 // try to load library if it is not loaded yet
253 QString dirs = getenv( "LD_LIBRARY_PATH" );
256 QString dirs = getenv( "PATH" );
259 if ( !dirs.isEmpty() ) {
260 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
261 QListIterator<QString> it( dirList ); it.toBack();
262 while ( it.hasPrevious() ) {
263 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
265 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
266 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
268 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
269 continue; // continue search further
271 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
272 if ( osdF != NULL ) {
273 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
274 GEOMGUI* libGUI = (*func)( this );
276 myGUIMap[ libraryName ] = libGUI;
277 break; // found and loaded!
284 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
287 //=======================================================================
288 // function : GeometryGUI::getPluginLibrary()
289 // purpose : get or load GUI Plugin library by name [ internal ]
290 //=======================================================================
291 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
292 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
294 if ( !myGUIMap.contains( libraryName ) ) {
295 // try to load library if it is not loaded yet
297 QString dirs = getenv( "LD_LIBRARY_PATH" );
300 QString dirs = getenv( "PATH" );
303 if ( !dirs.isEmpty() ) {
304 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
305 QListIterator<QString> it( dirList ); it.toBack();
306 while ( it.hasPrevious() ) {
307 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
309 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
310 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
312 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
313 continue; // continue search further
315 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
316 if ( osdF != NULL ) {
317 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
318 GEOMPluginGUI* libGUI = (*func)( this );
320 myGUIMap[ libraryName ] = libGUI;
321 break; // found and loaded!
328 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
331 //=======================================================================
332 // function : GeometryGUI::ActiveWorkingPlane()
333 // purpose : Activate Working Plane View
334 //=======================================================================
335 void GeometryGUI::ActiveWorkingPlane()
337 gp_Dir DZ = myWorkingPlane.Direction();
338 gp_Dir DY = myWorkingPlane.YDirection();
340 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
341 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
342 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
345 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
347 Handle(V3d_View) view3d = vw->getViewPort()->getView();
349 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
350 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
354 else if ( ViewVTK ) {
355 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
357 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
359 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
360 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
361 camera->SetFocalPoint(0,0,0);
368 //=======================================================================
369 // function : GeometryGUI::SetActiveDialogBox()
370 // purpose : Set active dialog box
371 //=======================================================================
372 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
374 myActiveDialogBox = (QDialog*)aDlg;
377 //=======================================================================
378 // function : GeometryGUI::EmitSignalDeactivateDialog()
379 // purpose : Emit a signal to deactivate the active dialog Box
380 //=======================================================================
381 void GeometryGUI::EmitSignalDeactivateDialog()
383 emit SignalDeactivateActiveDialog();
386 //=======================================================================
387 // function : GeometryGUI::EmitSignalCloseAllDialogs()
388 // purpose : Emit a signal to close all non modal dialogs box
389 //=======================================================================
390 void GeometryGUI::EmitSignalCloseAllDialogs()
392 emit SignalCloseAllDialogs();
395 //=======================================================================
396 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
397 // purpose : Emit a signal to inform that default real spin box step has
399 //=======================================================================
400 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
402 emit SignalDefaultStepValueChanged(newVal);
405 //=======================================================================
406 // function : GeometryGUI::OnGUIEvent()
407 // purpose : common slot for all menu/toolbar actions
408 //=======================================================================
409 void GeometryGUI::OnGUIEvent()
411 const QObject* obj = sender();
412 if ( !obj || !obj->inherits( "QAction" ) )
414 int id = actionId((QAction*)obj);
419 //=======================================================================
420 // function : GeometryGUI::OnGUIEvent()
421 // purpose : manage all events on GUI [static]
422 //=======================================================================
423 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
425 SUIT_Application* anApp = application();
427 SUIT_Desktop* desk = anApp->desktop();
429 // check type of the active viewframe
430 SUIT_ViewWindow* window = desk->activeWindow();
431 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
432 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
433 bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() );
434 // if current viewframe is not of OCC and not of VTK type - return immediately
435 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
436 QList<int> NotViewerDependentCommands;
437 NotViewerDependentCommands << GEOMOp::OpDelete
439 << GEOMOp::OpShowOnly
440 << GEOMOp::OpShowOnlyChildren
441 << GEOMOp::OpDiscloseChildren
442 << GEOMOp::OpConcealChildren
443 << GEOMOp::OpUnpublishObject
444 << GEOMOp::OpPublishObject
445 << GEOMOp::OpPointMarker
446 << GEOMOp::OpCreateFolder
447 << GEOMOp::OpSortChildren;
448 if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) {
449 // activate OCC viewer
450 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
453 // fix for IPAL9103, point 2
454 if ( CORBA::is_nil( GetGeomGen() ) ) {
455 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
460 // find corresponding GUI library
462 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
463 createOriginAndBaseVectors(); // internal operation
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 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
502 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
503 libName = "GEOMToolsGUI";
505 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
506 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
507 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
508 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
509 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
510 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
511 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
512 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
513 case GEOMOp::OpHide: // MENU VIEW - ERASE
514 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
515 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
516 case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE
517 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
518 case GEOMOp::OpShading: // POPUP MENU - SHADING
519 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
520 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
521 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
522 case GEOMOp::OpVertices: // POPUP MENU - VERTICES
523 libName = "DisplayGUI";
525 case GEOMOp::OpPoint: // MENU BASIC - POINT
526 case GEOMOp::OpLine: // MENU BASIC - LINE
527 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
528 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
529 case GEOMOp::OpArc: // MENU BASIC - ARC
530 case GEOMOp::OpVector: // MENU BASIC - VECTOR
531 case GEOMOp::OpPlane: // MENU BASIC - PLANE
532 case GEOMOp::OpCurve: // MENU BASIC - CURVE
533 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
534 libName = "BasicGUI";
536 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
537 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
538 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
539 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
540 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
541 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
542 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
543 libName = "PrimitiveGUI";
545 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
546 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
547 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
548 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
549 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
550 libName = "GenerationGUI";
552 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
553 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
554 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
555 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
556 case GEOMOp::OpSurfaceFromFace: // MENU ENTITY - SURFACE FROM FACE
558 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
560 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
561 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
562 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
563 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
564 case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR
565 libName = "EntityGUI";
567 case GEOMOp::OpEdge: // MENU BUILD - EDGE
568 case GEOMOp::OpWire: // MENU BUILD - WIRE
569 case GEOMOp::OpFace: // MENU BUILD - FACE
570 case GEOMOp::OpShell: // MENU BUILD - SHELL
571 case GEOMOp::OpSolid: // MENU BUILD - SOLID
572 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
573 libName = "BuildGUI";
575 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
576 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
577 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
578 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
579 libName = "BooleanGUI";
581 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
582 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
583 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
584 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
585 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
586 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
587 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
588 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
589 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
590 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
591 case GEOMOp::OpExtension: // MENU TRANSFORMATION - EXTENSION
592 libName = "TransformationGUI";
594 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
595 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
596 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
597 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
598 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
599 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
600 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
601 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
602 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
603 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
604 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
605 case GEOMOp::OpTransferData: // MENU OPERATION - TRANSFER DATA
606 libName = "OperationGUI";
608 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
609 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
610 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
611 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
612 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
613 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
614 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
615 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
616 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
617 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
618 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
619 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
620 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
621 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
622 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
623 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
624 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
625 case GEOMOp::OpInspectObj: // MENU REPAIR - INSPECT OBJECT
626 libName = "RepairGUI";
628 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
629 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
630 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
631 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
632 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
633 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
634 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
635 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
636 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
637 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
638 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
639 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
640 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
641 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
642 case GEOMOp::OpFastCheckInters: // MENU MEASURE - FAST CHECK INTERSECTIONS
643 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
644 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
645 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
646 libName = "MeasureGUI";
648 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
649 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
650 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
651 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
652 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
653 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
654 libName = "GroupGUI";
656 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
657 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
658 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
659 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
660 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
661 libName = "BlocksGUI";
663 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
664 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
665 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
666 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
667 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
668 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
669 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
670 //libName = "AdvancedGUI";
673 if (myPluginActions.contains(id)) {
674 libName = myPluginActions[id].first;
676 GEOMPluginGUI* library = 0;
677 if ( !libName.isEmpty() ) {
679 libName = QString( "lib" ) + libName + ".so";
681 libName = libName + ".dll";
683 library = getPluginLibrary( libName );
686 // call method of corresponding GUI library
688 //QString action ("%1");
689 //action = action.arg(id);
691 //if( !theParam.isValid() )
692 library->OnGUIEvent( myPluginActions[id].second, desk );
694 // library->OnGUIEvent( id, desk, theParam);
697 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
699 updateCreationInfo();
705 GEOMGUI* library = 0;
706 if ( !libName.isEmpty() ) {
708 libName = QString( "lib" ) + libName + ".so";
710 libName = libName + ".dll";
712 library = getLibrary( libName );
715 // call method of corresponding GUI library
717 if( !theParam.isValid() )
718 library->OnGUIEvent( id, desk );
720 library->OnGUIEvent( id, desk, theParam);
723 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
725 updateCreationInfo();
728 //=================================================================================
729 // function : GeometryGUI::activateOperation()
731 //=================================================================================
732 bool GeometryGUI::activateOperation( int actionId )
734 OnGUIEvent(actionId);
738 //=================================================================================
739 // function : GeometryGUI::activateOperation()
741 //=================================================================================
742 bool GeometryGUI::activateOperation( const QString& actionId )
746 int id = actionId.toInt(&isOk);
753 //=================================================================================
754 // function : GeometryGUI::activateOperation()
756 //=================================================================================
757 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
761 QString pluginLib = plugin;
762 // TODO: if <plugin> is a plugin name, find plugin library name
763 if (myPluginLibs.contains(plugin))
764 pluginLib = myPluginLibs[plugin];
766 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
767 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
768 const PluginAction& anAction = actionsIter.value();
769 if (anAction.first == pluginLib && anAction.second == actionId) {
770 // activate operation
771 OnGUIEvent(actionsIter.key());
779 //=================================================================================
780 // function : GeometryGUI::OnKeyPress()
781 // purpose : Called when any key is pressed by user [static]
782 //=================================================================================
783 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
785 if ( !application() )
787 foreach ( GEOMGUI* lib, myGUIMap )
788 lib->OnKeyPress( e, application()->desktop(), w );
791 //=================================================================================
792 // function : GeometryGUI::OnMouseMove()
793 // purpose : Manages mouse move events [static]
794 //=================================================================================
795 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
797 if ( !application() )
799 foreach ( GEOMGUI* lib, myGUIMap )
800 lib->OnMouseMove( e, application()->desktop(), w );
803 //=================================================================================
804 // function : GeometryGUI::OnMouseRelease()
805 // purpose : Manages mouse release events [static]
806 //=================================================================================
807 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
809 if ( !application() )
811 foreach ( GEOMGUI* lib, myGUIMap )
812 lib->OnMouseRelease( e, application()->desktop(), w );
815 //=================================================================================
816 // function : GeometryGUI::OnMousePress()
817 // purpose : Manage mouse press events [static]
818 //=================================================================================
819 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
821 if ( !application() )
823 foreach ( GEOMGUI* lib, myGUIMap )
824 lib->OnMousePress( e, application()->desktop(), w );
827 //=======================================================================
828 // function : createGeomAction
830 //=======================================================================
831 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
832 const int accel, const bool toggle, const QString& shortcutAction )
834 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
835 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
836 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
838 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
840 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
841 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
843 application()->desktop(),
845 this, SLOT( OnGUIEvent() ),
849 //=======================================================================
850 // function : createOriginAndBaseVectors
852 //=======================================================================
853 void GeometryGUI::createOriginAndBaseVectors()
855 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
856 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
858 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
862 _PTR(Study) studyDS = appStudy->studyDS();
863 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
864 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
865 if ( !aBasicOperations->_is_nil() ) {
866 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
867 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
868 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
869 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
870 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
871 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
873 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
874 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
875 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
876 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
877 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
879 getApp()->updateObjectBrowser( true );
885 //=======================================================================
886 // function : GeometryGUI::initialize()
887 // purpose : Called when GEOM module is created
888 //=======================================================================
889 void GeometryGUI::initialize( CAM_Application* app )
891 SalomeApp_Module::initialize( app );
893 // ----- create actions --------------
895 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
897 createGeomAction( GEOMOp::OpPoint, "POINT" );
898 createGeomAction( GEOMOp::OpLine, "LINE" );
899 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
900 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
901 createGeomAction( GEOMOp::OpArc, "ARC" );
902 createGeomAction( GEOMOp::OpCurve, "CURVE" );
903 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
904 createGeomAction( GEOMOp::OpVector, "VECTOR" );
905 createGeomAction( GEOMOp::OpPlane, "PLANE" );
906 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
907 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
908 createGeomAction( GEOMOp::OpSurfaceFromFace, "SURFACE_FROM_FACE" );
910 createGeomAction( GEOMOp::OpBox, "BOX" );
911 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
912 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
913 createGeomAction( GEOMOp::OpTorus, "TORUS" );
914 createGeomAction( GEOMOp::OpCone, "CONE" );
915 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
916 createGeomAction( GEOMOp::OpDisk, "DISK" );
918 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
919 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
920 createGeomAction( GEOMOp::OpFilling, "FILLING" );
921 createGeomAction( GEOMOp::OpPipe, "PIPE" );
922 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
924 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
925 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
926 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
927 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
928 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
930 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
931 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
933 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
935 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
936 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
938 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
939 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
940 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
942 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
944 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
945 createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" );
947 createGeomAction( GEOMOp::OpEdge, "EDGE" );
948 createGeomAction( GEOMOp::OpWire, "WIRE" );
949 createGeomAction( GEOMOp::OpFace, "FACE" );
950 createGeomAction( GEOMOp::OpShell, "SHELL" );
951 createGeomAction( GEOMOp::OpSolid, "SOLID" );
952 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
954 createGeomAction( GEOMOp::OpFuse, "FUSE" );
955 createGeomAction( GEOMOp::OpCommon, "COMMON" );
956 createGeomAction( GEOMOp::OpCut, "CUT" );
957 createGeomAction( GEOMOp::OpSection, "SECTION" );
959 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
960 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
961 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
962 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
963 createGeomAction( GEOMOp::OpScale, "SCALE" );
964 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
965 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
966 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
967 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
968 createGeomAction( GEOMOp::OpExtension, "EXTENSION" );
970 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
971 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
972 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
973 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
974 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
975 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
976 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
977 createGeomAction( GEOMOp::OpTransferData, "TRANSFER_DATA" );
978 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
979 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
980 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
981 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
983 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
984 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
985 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
987 createGeomAction( GEOMOp::OpSewing, "SEWING" );
988 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
989 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
990 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
991 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
992 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
993 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
994 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
995 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
996 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
997 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
998 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
999 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1000 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1001 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1002 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1003 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1004 createGeomAction( GEOMOp::OpInspectObj, "INSPECT_OBJECT" );
1006 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1007 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1008 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1009 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1010 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1011 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1012 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1013 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1014 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1016 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1017 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1018 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1019 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1020 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1021 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1022 createGeomAction( GEOMOp::OpFastCheckInters, "FAST_CHECK_INTERSECTIONS" );
1024 #ifdef _DEBUG_ // PAL16821
1025 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1028 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1029 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1030 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1031 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1032 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1033 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1034 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1035 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1036 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1037 createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
1038 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1039 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1040 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1041 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1042 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1043 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1044 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1045 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1046 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1047 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1048 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1049 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1050 createGeomAction( GEOMOp::OpHide, "ERASE" );
1052 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1053 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1054 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1055 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1056 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1057 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1058 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1059 createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
1060 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1061 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1062 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1063 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1064 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1065 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1066 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1067 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1068 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1069 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1070 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1071 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1072 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1073 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1074 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1075 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1076 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1077 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1078 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1079 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1080 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1081 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1083 // Create actions for increase/decrease transparency shortcuts
1084 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1085 "Geometry:Increase transparency");
1086 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1087 "Geometry:Decrease transparency");
1089 // Create actions for increase/decrease number of isolines
1090 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1091 "Geometry:Increase number of isolines");
1092 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1093 "Geometry:Decrease number of isolines");
1095 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1096 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1097 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1098 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1099 //@@ 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 @@//
1101 // ---- create menus --------------------------
1103 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1105 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1106 createMenu( GEOMOp::OpDelete, editId, -1 );
1108 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1110 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1111 createMenu( GEOMOp::OpPoint, basicId, -1 );
1112 createMenu( GEOMOp::OpLine, basicId, -1 );
1113 createMenu( GEOMOp::OpCircle, basicId, -1 );
1114 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1115 createMenu( GEOMOp::OpArc, basicId, -1 );
1116 createMenu( GEOMOp::OpCurve, basicId, -1 );
1117 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1118 createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 );
1119 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1120 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1121 createMenu( GEOMOp::OpSurfaceFromFace, basicId, -1 );
1122 createMenu( separator(), basicId, -1 );
1123 createMenu( GEOMOp::OpVector, basicId, -1 );
1124 createMenu( GEOMOp::OpPlane, basicId, -1 );
1125 createMenu( GEOMOp::OpLCS, basicId, -1 );
1126 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1128 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1129 createMenu( GEOMOp::OpBox, primId, -1 );
1130 createMenu( GEOMOp::OpCylinder, primId, -1 );
1131 createMenu( GEOMOp::OpSphere, primId, -1 );
1132 createMenu( GEOMOp::OpTorus, primId, -1 );
1133 createMenu( GEOMOp::OpCone, primId, -1 );
1134 createMenu( GEOMOp::OpRectangle, primId, -1 );
1135 createMenu( GEOMOp::OpDisk, primId, -1 );
1136 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1138 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1139 createMenu( GEOMOp::OpPrism, genId, -1 );
1140 createMenu( GEOMOp::OpRevolution, genId, -1 );
1141 createMenu( GEOMOp::OpFilling, genId, -1 );
1142 createMenu( GEOMOp::OpPipe, genId, -1 );
1143 createMenu( GEOMOp::OpPipePath, genId, -1 );
1145 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1146 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1147 //@@ 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 @@//
1149 createMenu( separator(), newEntId, -1 );
1151 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1152 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1153 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1154 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1155 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1156 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1158 createMenu( separator(), newEntId, -1 );
1160 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1161 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1162 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1164 createMenu( separator(), newEntId, -1 );
1166 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1167 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1168 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1169 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1170 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1172 createMenu( separator(), newEntId, -1 );
1174 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1176 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1177 createMenu( GEOMOp::OpEdge, buildId, -1 );
1178 createMenu( GEOMOp::OpWire, buildId, -1 );
1179 createMenu( GEOMOp::OpFace, buildId, -1 );
1180 createMenu( GEOMOp::OpShell, buildId, -1 );
1181 createMenu( GEOMOp::OpSolid, buildId, -1 );
1182 createMenu( GEOMOp::OpCompound, buildId, -1 );
1184 createMenu( separator(), newEntId, -1 );
1186 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1188 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1191 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1193 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1194 createMenu( GEOMOp::OpFuse, boolId, -1 );
1195 createMenu( GEOMOp::OpCommon, boolId, -1 );
1196 createMenu( GEOMOp::OpCut, boolId, -1 );
1197 createMenu( GEOMOp::OpSection, boolId, -1 );
1199 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1200 createMenu( GEOMOp::OpTranslate, transId, -1 );
1201 createMenu( GEOMOp::OpRotate, transId, -1 );
1202 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1203 createMenu( GEOMOp::OpMirror, transId, -1 );
1204 createMenu( GEOMOp::OpScale, transId, -1 );
1205 createMenu( GEOMOp::OpOffset, transId, -1 );
1206 createMenu( GEOMOp::OpProjection, transId, -1 );
1207 createMenu( GEOMOp::OpExtension, transId, -1 );
1208 createMenu( separator(), transId, -1 );
1209 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1210 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1212 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1213 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1214 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1215 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1217 createMenu( separator(), operId, -1 );
1219 createMenu( GEOMOp::OpPartition, operId, -1 );
1220 createMenu( GEOMOp::OpArchimede, operId, -1 );
1221 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1222 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1223 createMenu( GEOMOp::OpTransferData, operId, -1 );
1225 createMenu( separator(), operId, -1 );
1227 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1228 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1229 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1230 createMenu( GEOMOp::OpChamfer, operId, -1 );
1231 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1232 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1233 //createMenu( GEOMOp::OpClipping, operId, -1 );
1235 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1236 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1237 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1238 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1239 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1240 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1241 createMenu( GEOMOp::OpSewing, repairId, -1 );
1242 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1243 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1244 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1245 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1246 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1247 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1248 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1249 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1250 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1251 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1252 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1254 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1255 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1256 createMenu( GEOMOp::OpProperties, measurId, -1 );
1257 createMenu( separator(), measurId, -1 );
1258 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1259 createMenu( GEOMOp::OpInertia, measurId, -1 );
1260 createMenu( GEOMOp::OpNormale, measurId, -1 );
1261 createMenu( separator(), measurId, -1 );
1262 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1263 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1264 createMenu( separator(), measurId, -1 );
1266 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1267 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1268 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1269 createMenu( GEOMOp::OpAngle, dimId, -1 );
1270 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1272 createMenu( separator(), measurId, -1 );
1273 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1274 createMenu( separator(), measurId, -1 );
1275 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1276 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1277 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1278 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1279 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1280 createMenu( GEOMOp::OpFastCheckInters, measurId, -1 );
1281 createMenu( GEOMOp::OpInspectObj, measurId, -1 );
1283 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1284 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1285 createMenu( separator(), toolsId, -1 );
1286 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1289 createMenu( separator(), toolsId, -1 );
1290 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1291 createMenu( separator(), toolsId, -1 );
1293 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1294 createMenu( separator(), viewId, -1 );
1296 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1297 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1298 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1299 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1300 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1301 createMenu( separator(), dispmodeId, -1 );
1302 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1303 createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
1305 createMenu( separator(), viewId, -1 );
1306 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1307 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1308 createMenu( separator(), viewId, -1 );
1309 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1310 createMenu( separator(), viewId, -1 );
1314 because of these items are accessible through object browser and viewers
1315 we have removed they from main menu
1317 createMenu( GEOMOp::OpShow, viewId, -1 );
1318 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1319 createMenu( GEOMOp::OpHide, viewId, -1 );
1322 // ---- create toolbars --------------------------
1324 int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) );
1325 createTool( GEOMOp::OpPoint, basicTbId );
1326 createTool( GEOMOp::OpLine, basicTbId );
1327 createTool( GEOMOp::OpCircle, basicTbId );
1328 createTool( GEOMOp::OpEllipse, basicTbId );
1329 createTool( GEOMOp::OpArc, basicTbId );
1330 createTool( GEOMOp::OpCurve, basicTbId );
1331 createTool( GEOMOp::OpVector, basicTbId );
1332 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1333 createTool( GEOMOp::Op2dPolylineEditor, basicTbId );
1334 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1335 createTool( GEOMOp::OpIsoline, basicTbId );
1336 createTool( GEOMOp::OpSurfaceFromFace, basicTbId );
1337 createTool( GEOMOp::OpPlane, basicTbId );
1338 createTool( GEOMOp::OpLCS, basicTbId );
1339 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1341 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) );
1342 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1343 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1345 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) );
1346 createTool( GEOMOp::OpBox, primTbId );
1347 createTool( GEOMOp::OpCylinder, primTbId );
1348 createTool( GEOMOp::OpSphere, primTbId );
1349 createTool( GEOMOp::OpTorus, primTbId );
1350 createTool( GEOMOp::OpCone, primTbId );
1351 createTool( GEOMOp::OpRectangle, primTbId );
1352 createTool( GEOMOp::OpDisk, primTbId );
1353 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1355 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) );
1356 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1357 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1359 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) );
1360 createTool( GEOMOp::OpFuse, boolTbId );
1361 createTool( GEOMOp::OpCommon, boolTbId );
1362 createTool( GEOMOp::OpCut, boolTbId );
1363 createTool( GEOMOp::OpSection, boolTbId );
1365 int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) );
1366 createTool( GEOMOp::OpPrism, genTbId );
1367 createTool( GEOMOp::OpRevolution, genTbId );
1368 createTool( GEOMOp::OpFilling, genTbId );
1369 createTool( GEOMOp::OpPipe, genTbId );
1370 createTool( GEOMOp::OpPipePath, genTbId );
1372 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) );
1373 createTool( GEOMOp::OpTranslate, transTbId );
1374 createTool( GEOMOp::OpRotate, transTbId );
1375 createTool( GEOMOp::OpChangeLoc, transTbId );
1376 createTool( GEOMOp::OpMirror, transTbId );
1377 createTool( GEOMOp::OpScale, transTbId );
1378 createTool( GEOMOp::OpOffset, transTbId );
1379 createTool( GEOMOp::OpProjection, transTbId );
1380 createTool( GEOMOp::OpExtension, transTbId );
1381 createTool( separator(), transTbId );
1382 createTool( GEOMOp::OpMultiTranslate, transTbId );
1383 createTool( GEOMOp::OpMultiRotate, transTbId );
1385 int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) );
1386 createTool( GEOMOp::OpExplode, operTbId );
1387 createTool( GEOMOp::OpPartition, operTbId );
1388 createTool( GEOMOp::OpArchimede, operTbId );
1389 createTool( GEOMOp::OpShapesOnShape, operTbId );
1390 createTool( GEOMOp::OpSharedShapes, operTbId );
1391 createTool( GEOMOp::OpTransferData, operTbId );
1393 int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) );
1394 createTool( GEOMOp::OpFillet1d, featTbId );
1395 createTool( GEOMOp::OpFillet2d, featTbId );
1396 createTool( GEOMOp::OpFillet3d, featTbId );
1397 createTool( GEOMOp::OpChamfer, featTbId );
1398 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1399 createTool( GEOMOp::OpExtrudedCut, featTbId );
1401 int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) );
1402 createTool( GEOMOp::OpEdge, buildTbId );
1403 createTool( GEOMOp::OpWire, buildTbId );
1404 createTool( GEOMOp::OpFace, buildTbId );
1405 createTool( GEOMOp::OpShell, buildTbId );
1406 createTool( GEOMOp::OpSolid, buildTbId );
1407 createTool( GEOMOp::OpCompound, buildTbId );
1409 int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) );
1410 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1411 createTool( GEOMOp::OpProperties, measureTbId );
1412 createTool( GEOMOp::OpCenterMass, measureTbId );
1413 createTool( GEOMOp::OpInertia, measureTbId );
1414 createTool( GEOMOp::OpNormale, measureTbId );
1415 createTool( separator(), measureTbId );
1416 createTool( GEOMOp::OpBoundingBox, measureTbId );
1417 createTool( GEOMOp::OpMinDistance, measureTbId );
1418 createTool( GEOMOp::OpAngle, measureTbId );
1419 createTool( GEOMOp::OpTolerance , measureTbId );
1420 createTool( separator(), measureTbId );
1421 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1422 createTool( GEOMOp::OpFreeFaces, measureTbId );
1423 createTool( separator(), measureTbId );
1424 createTool( GEOMOp::OpWhatIs, measureTbId );
1425 createTool( GEOMOp::OpCheckShape, measureTbId );
1426 createTool( GEOMOp::OpCheckCompound, measureTbId );
1427 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1428 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1429 createTool( GEOMOp::OpFastCheckInters, measureTbId );
1431 int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) );
1432 createTool( GEOMOp::OpPictureImport, picturesTbId );
1434 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
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' or client='VTKViewer') and type='Shape' and selcount=1";
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 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1474 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1475 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1476 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1477 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1478 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1479 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1480 mgr->insert( separator(), -1, -1 ); // -----------
1481 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1482 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1483 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1484 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1485 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1486 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1487 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1488 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1489 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1490 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1491 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1492 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1493 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1494 mgr->insert( separator(), dispmodeId, -1 );
1495 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1496 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1497 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1498 mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices
1499 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1500 mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule );
1501 mgr->insert( separator(), -1, -1 ); // -----------
1503 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1504 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1505 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1506 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1507 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1508 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1509 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1510 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1511 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1512 mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", 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 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1585 mgr->insert( separator(), -1, -1 ); // -----------
1586 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1587 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1588 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1589 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1591 mgr->insert( separator(), -1, -1 ); // -----------
1592 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1593 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1595 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1596 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1598 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1599 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1601 mgr->insert( separator(), -1, -1 ); // -----------
1602 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1603 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1605 mgr->insert( separator(), -1, -1 ); // -----------
1606 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1607 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1609 mgr->insert( separator(), -1, -1 ); // -----------
1610 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1611 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1613 mgr->insert( separator(), -1, -1 ); // -----------
1614 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1615 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1617 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1619 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1621 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1622 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1623 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1626 // create plugin actions and menus
1630 //=======================================================================
1631 // function : GeometryGUI::addPluginActions()
1633 //=======================================================================
1634 void GeometryGUI::addPluginActions()
1637 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1638 if (!resMgr) return;
1640 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1641 if (!appStudy) return;
1643 // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
1645 GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
1647 int id = GEOMOp::OpLastOperationID; // TODO?
1650 GEOMUtils::PluginInfo::const_iterator it;
1651 for ( it = plugins.begin(); it != plugins.end(); ++it ) {
1652 // bind action lib and label to its ID for activateOperation() method proper work
1653 GEOMUtils::PluginData pdata = (*it);
1654 myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str();
1655 std::list<GEOMUtils::ActionData> actions = (*it).actions;
1656 std::list<GEOMUtils::ActionData>::const_iterator ait;
1657 for ( ait = actions.begin(); ait != actions.end(); ++ait ) {
1658 GEOMUtils::ActionData adata = (*ait);
1661 if ( !adata.icon.empty() )
1662 icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
1664 QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
1665 QString actionName = smenus.last();
1666 actionName = actionName.toUpper().prepend( "MEN_" );
1667 smenus.removeLast();
1669 // path to action in toolbar
1670 QStringList stools = QString( adata.toolTip.c_str() ).split( "/" );
1671 QString actionTool = stools.last();
1672 actionTool = actionTool.toUpper().prepend( "TOP_" );
1673 stools.removeLast();
1675 QString actionStat = adata.statusText.c_str();
1676 actionStat = actionStat.toUpper().prepend( "STB_" );
1678 createAction( id, // ~ adata.label
1679 tr( actionTool.toLatin1().constData() ),
1681 tr( actionName.toLatin1().constData() ),
1682 tr( actionStat.toLatin1().constData() ),
1683 QKeySequence( tr( adata.accel.c_str() ) ),
1684 application()->desktop(),
1686 this, SLOT( OnGUIEvent() ),
1687 QString() /*shortcutAction*/ );
1690 foreach ( QString subMenu, smenus ) {
1691 QStringList subMenuList = subMenu.split( ":" );
1692 QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
1693 int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
1694 menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
1696 createMenu( id, menuId, -1 );
1698 if ( !stools.isEmpty() ) {
1699 QString subTool = stools[0];
1700 subTool = subTool.toUpper().prepend( "TOOL_" );
1701 int toolId = createTool( tr( subTool.toLatin1().constData() ) );
1702 createTool(id, toolId);
1705 // add action id to map
1706 PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
1707 myPluginActions[id] = anAction;
1714 //=======================================================================
1715 // function : GeometryGUI::activateModule()
1716 // purpose : Called when GEOM module is activated
1717 //=======================================================================
1718 bool GeometryGUI::activateModule( SUIT_Study* study )
1720 if ( CORBA::is_nil( myComponentGeom ) )
1723 bool res = SalomeApp_Module::activateModule( study );
1727 setMenuShown( true );
1728 setToolShown( true );
1730 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1731 PyGILState_STATE gstate = PyGILState_Ensure();
1732 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1733 if ( !pluginsmanager ) {
1737 PyObjWrapper result =
1738 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1739 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1740 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1744 PyGILState_Release(gstate);
1745 // end of GEOM plugins loading
1747 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1748 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1750 // Reset actions accelerator keys
1751 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1753 GUIMap::Iterator it;
1754 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1755 it.value()->activate( application()->desktop() );
1757 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1759 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1760 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1761 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1763 if ( !myCreationInfoWdg )
1764 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1765 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1766 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1769 SALOME_ListIO selected;
1770 sm->selectedObjects( selected );
1771 sm->clearSelected();
1773 SUIT_ViewManager* vm;
1774 ViewManagerList OCCViewManagers, VTKViewManagers;
1776 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1777 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1778 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1779 onViewManagerAdded(vm);
1781 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1782 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1783 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1784 onViewManagerAdded(vm);
1786 sm->setSelectedObjects( selected, true ); //NPAL 19674
1788 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1790 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1792 // 0020836 (Basic vectors and origin)
1793 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1794 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1795 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1797 _PTR(Study) studyDS = appStudy->studyDS();
1799 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1800 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1801 createOriginAndBaseVectors();
1809 //=======================================================================
1810 // function : GeometryGUI::deactivateModule()
1811 // purpose : Called when GEOM module is deactivated
1812 //=======================================================================
1813 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1815 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1817 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1819 setMenuShown( false );
1820 setToolShown( false );
1822 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1823 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1825 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1827 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1828 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1829 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1830 myCreationInfoWdg = 0;
1832 EmitSignalCloseAllDialogs();
1834 GUIMap::Iterator it;
1835 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1836 it.value()->deactivate();
1838 // Unset actions accelerator keys
1839 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1841 qDeleteAll(myOCCSelectors);
1842 myOCCSelectors.clear();
1843 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1845 qDeleteAll(myVTKSelectors);
1846 myVTKSelectors.clear();
1847 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1849 return SalomeApp_Module::deactivateModule( study );
1852 //=======================================================================
1853 // function : onWindowActivated()
1854 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1855 //=======================================================================
1856 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1861 const bool ViewOCC = ( win->getViewManager() ? win->getViewManager()->getType() == OCCViewer_Viewer::Type() : false );
1862 //const bool ViewVTK = ( win->getViewManager() ? win->getViewManager()->getType() == SVTK_Viewer::Type() : false );
1864 // disable non-OCC viewframe menu commands
1865 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1866 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1867 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1868 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1869 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1870 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1871 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1873 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1874 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1875 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1876 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1878 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1881 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1883 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1884 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
1885 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1886 if ( myCreationInfoWdg )
1887 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1890 void GeometryGUI::viewManagers( QStringList& lst ) const
1892 lst.append( OCCViewer_Viewer::Type() );
1895 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1897 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1899 qDebug( "connect" );
1900 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1901 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1902 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1903 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1904 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1905 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1906 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1907 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1909 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1910 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1912 // disable OCC selectors
1913 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1914 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1915 while ( itOCCSel.hasNext() )
1916 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1917 sr->setEnabled(true);
1919 else if ( vm->getType() == SVTK_Viewer::Type() )
1921 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1922 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1924 // disable VTK selectors
1925 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1926 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1927 while ( itVTKSel.hasNext() )
1928 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1929 sr->setEnabled(true);
1933 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1935 SUIT_ViewModel* viewer = vm->getViewModel();
1936 if ( vm->getType() == OCCViewer_Viewer::Type() )
1938 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1939 while ( itOCCSel.hasNext() )
1940 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1941 if ( sr->viewer() == viewer )
1943 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1947 if ( vm->getType() == SVTK_Viewer::Type() )
1949 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1950 while ( itVTKSel.hasNext() )
1951 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1952 if ( sr->viewer() == viewer )
1954 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1960 //================================================================================
1962 * \brief Slot called when selection changed. Shows creation info of a selected object
1964 //================================================================================
1966 void GeometryGUI::updateCreationInfo()
1968 if ( myCreationInfoWdg )
1969 myCreationInfoWdg->clear();
1971 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
1972 // if ( !myCreationInfoWdg->isVisible() )
1975 // look for a sole selected GEOM_Object
1976 GEOM::GEOM_BaseObject_var geomObj;
1978 SALOME_ListIO selected;
1979 getApp()->selectionMgr()->selectedObjects( selected );
1981 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
1982 SALOME_ListIteratorOfListIO selIt( selected );
1983 for ( ; selIt.More(); selIt.Next() )
1985 Handle(SALOME_InteractiveObject) io = selIt.Value();
1986 if ( !io->hasEntry() ) continue;
1987 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
1988 if ( !sobj ) continue;
1989 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
1990 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
1991 if ( !gobj->_is_nil() )
1993 if ( !geomObj->_is_nil() )
1994 return; // several GEOM objects selected
1998 if ( geomObj->_is_nil() ) return;
2000 // pass creation info of geomObj to myCreationInfoWdg
2002 if ( myCreationInfoWdg ) {
2004 QString operationName;
2005 myCreationInfoWdg->setOperation( icon, operationName );
2009 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2011 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2012 QString name = info->operationName.in();
2013 if ( !name.isEmpty() ) {
2015 QString plugin_name;
2016 for ( size_t i = 0; i < info->params.length(); ++i ) {
2017 myCreationInfoWdg->addParam( info->params[i].name.in(),
2018 info->params[i].value.in() );
2019 QString value = info->params[i].name.in();
2020 if( value == PLUGIN_NAME ) {
2021 plugin_name = info->params[i].value.in();
2024 QString prefix = plugin_name.isEmpty() ? "GEOM" : plugin_name;
2025 icon = resMgr->loadPixmap( prefix, tr( ("ICO_"+name).toLatin1().constData() ), false );
2026 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2027 if ( operationName.startsWith( "MEN_" ))
2028 operationName = name; // no translation
2029 myCreationInfoWdg->setOperation( icon, operationName );
2038 void GeometryGUI::onAutoBringToFront()
2040 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" );
2041 if( !isAutoBringToFront )
2044 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2045 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2048 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2049 if (!appStudy) return;
2051 GEOM_Displayer displayer( appStudy );
2053 SALOME_View* window = displayer.GetActiveView();
2054 if ( !window ) return;
2056 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2058 SALOME_ListIO selected;
2059 getApp()->selectionMgr()->selectedObjects( selected );
2060 if (!myTopLevelIOList.IsEmpty())
2062 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2064 Handle( SALOME_InteractiveObject ) io = It.Value();
2065 bool isSelected = false;
2066 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2068 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2069 if( io->isSame( sel_io ) )
2072 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2074 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2075 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2080 myTopLevelIOList.Assign(selected);
2081 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2083 Handle( SALOME_InteractiveObject ) io = It.Value();
2084 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2085 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2088 displayer.UpdateViewer();
2089 GeometryGUI::Modified();
2092 void GeometryGUI::updateFieldColorScale()
2094 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2096 GEOM_Displayer aDisplayer( aStudy );
2097 aDisplayer.UpdateColorScale();
2101 QString GeometryGUI::engineIOR() const
2103 if ( !CORBA::is_nil( GetGeomGen() ) )
2104 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2108 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2109 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2111 theWidth = theHeight = 0;
2113 Handle(TColStd_HArray1OfByte) aTexture;
2116 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2117 aTexture = aTextureMap[ theId ];
2118 if ( aTexture.IsNull() ) {
2119 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2120 if ( !aInsOp->_is_nil() ) {
2121 CORBA::Long aWidth, aHeight;
2122 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2123 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2125 theHeight = aHeight;
2127 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2129 for (int i = 0; i < aStream->length(); i++)
2130 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2131 aTextureMap[ theId ] = aTexture;
2139 LightApp_Selection* GeometryGUI::createSelection() const
2141 return new GEOMGUI_Selection();
2144 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2146 SalomeApp_Module::contextMenuPopup( client, menu, title );
2148 getApp()->selectionMgr()->selectedObjects( lst );
2150 //Add submenu for predefined materials
2151 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2152 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2153 QtxPopupMgr* mgr = popupMgr();
2154 //get parrent for submenu
2155 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2157 QMenu* oldMenu = act->menu() ;
2162 QMenu* matMenu = new QMenu();
2163 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2165 //Get current material model for the object
2167 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2168 if ( anApp && anApp->activeViewManager() ) {
2169 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2171 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2174 QString curModel = "";
2175 if ( v.canConvert<QString>() ) curModel = v.toString();
2176 // get list of all predefined materials
2177 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2179 foreach ( QString material, materials )
2181 QAction* menAct = matMenu->addAction( material );
2182 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2183 signalMapper->setMapping( menAct, material );
2184 menAct->setCheckable( true );
2185 // Set checked if this material is current
2186 Material_Model aModel;
2187 aModel.fromResources( material );
2188 if ( !found && aModel.toProperties() == curModel ) {
2189 menAct->setChecked( true );
2193 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2194 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2195 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2196 this, SLOT( OnSetMaterial( const QString & ) ) );
2197 act->setMenu( matMenu );
2201 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2202 Handle(SALOME_InteractiveObject) io = lst.First();
2203 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2204 _PTR(Study) study = appStudy->studyDS();
2205 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2207 QString aName = QString( obj->GetName().c_str() );
2208 aName.remove( QRegExp("\\s+$") );
2214 void GeometryGUI::OnSetMaterial(const QString& theName)
2216 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2220 void GeometryGUI::createPreferences()
2222 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2224 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2225 setPreferenceProperty( genGroup, "columns", 2 );
2227 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2228 LightApp_Preferences::Selector,
2229 "Geometry", "display_mode" );
2231 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2232 LightApp_Preferences::Color, "Geometry", "shading_color" );
2234 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2235 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2237 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2238 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2240 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2241 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2243 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2244 LightApp_Preferences::Color, "Geometry", "line_color" );
2246 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2247 LightApp_Preferences::Color, "Geometry", "point_color" );
2249 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2250 LightApp_Preferences::Color, "Geometry", "isos_color" );
2252 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2253 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2255 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2256 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2258 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2259 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2261 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2262 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2264 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2265 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2267 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2268 LightApp_Preferences::Selector,
2269 "Geometry", "material" );
2271 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2272 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2278 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2279 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2281 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2282 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2284 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2285 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2287 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2288 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2290 for (int i = 0; i < nb; i++) {
2291 setPreferenceProperty( wd[i], "min", 1 );
2292 setPreferenceProperty( wd[i], "max", 5 );
2295 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2296 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2298 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2299 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2301 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2302 setPreferenceProperty( aDimGroupId, "columns", 2 );
2304 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2305 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2307 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2308 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2310 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2311 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2313 int aDimFontHeightId = addPreference( tr( "PREF_DIMENSIONS_FONT_HEIGHT" ), aDimGroupId,
2314 LightApp_Preferences::DblSpin, "Geometry", "dimensions_font_height" );
2316 setPreferenceProperty( aDimFontHeightId, "min", 1e-9 );
2317 setPreferenceProperty( aDimFontHeightId, "max", 1e+9 );
2318 setPreferenceProperty( aDimFontHeightId, "precision", 9 );
2320 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2321 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2323 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2324 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2325 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2327 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2328 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2330 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2331 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2333 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2334 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2336 QStringList aListOfLengthUnits;
2337 aListOfLengthUnits << "m";
2338 aListOfLengthUnits << "cm";
2339 aListOfLengthUnits << "mm";
2340 aListOfLengthUnits << "in.";
2341 aListOfLengthUnits << "ft.";
2343 QStringList aListOfAngUnits;
2344 aListOfAngUnits << "rad";
2345 aListOfAngUnits << "deg";
2347 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2348 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2350 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2351 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2353 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2354 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2355 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2357 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2358 setPreferenceProperty( isoGroup, "columns", 2 );
2359 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2360 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2361 setPreferenceProperty( isoU, "min", 0 );
2362 setPreferenceProperty( isoU, "max", 100000 );
2363 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2364 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2365 setPreferenceProperty( isoV, "min", 0 );
2366 setPreferenceProperty( isoV, "max", 100000 );
2368 // Quantities with individual precision settings
2369 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2370 setPreferenceProperty( precGroup, "columns", 2 );
2372 const int nbQuantities = 8;
2373 int prec[nbQuantities], ii = 0;
2374 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2375 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2376 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2377 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2378 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2379 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2380 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2381 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2382 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2383 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2384 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2385 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2386 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2387 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2388 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2389 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2391 // Set property for precision value for spinboxes
2392 for ( ii = 0; ii < nbQuantities; ii++ ){
2393 setPreferenceProperty( prec[ii], "min", -14 );
2394 setPreferenceProperty( prec[ii], "max", 14 );
2395 setPreferenceProperty( prec[ii], "precision", 2 );
2398 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2399 setPreferenceProperty( VertexGroup, "columns", 2 );
2401 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2402 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2404 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2405 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2407 // Set property for default display mode
2408 QStringList aModesList;
2409 aModesList.append( tr("MEN_WIREFRAME") );
2410 aModesList.append( tr("MEN_SHADING") );
2411 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2412 aModesList.append( tr("MEN_TEXTURE") );
2414 QList<QVariant> anIndexesList;
2415 anIndexesList.append(0);
2416 anIndexesList.append(1);
2417 anIndexesList.append(2);
2418 anIndexesList.append(3);
2420 setPreferenceProperty( dispmode, "strings", aModesList );
2421 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2423 // Set property for top level display mode
2424 QStringList aTopModesList;
2425 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2426 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2427 aTopModesList.append( tr("MEN_WIREFRAME") );
2428 aTopModesList.append( tr("MEN_SHADING") );
2429 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2431 QList<QVariant> aTopIndexesList;
2432 aTopIndexesList.append(0);
2433 aTopIndexesList.append(1);
2434 aTopIndexesList.append(2);
2435 aTopIndexesList.append(3);
2436 aTopIndexesList.append(4);
2438 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2439 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2441 // Set property for step value for spinboxes
2442 setPreferenceProperty( step, "min", 1 );
2443 setPreferenceProperty( step, "max", 10000 );
2444 setPreferenceProperty( step, "precision", 3 );
2446 // Set property for trandparency value for spinboxes
2447 setPreferenceProperty( transparency, "min", 0 );
2448 setPreferenceProperty( transparency, "max", 100 );
2450 // Set property for deflection value for spinboxes
2451 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2452 setPreferenceProperty( defl, "max", 1.0 );
2453 setPreferenceProperty( defl, "step", 1.0e-04 );
2454 setPreferenceProperty( defl, "precision", 6 );
2456 // Set property for default material
2457 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2459 // Set property vertex marker type
2460 QList<QVariant> aMarkerTypeIndicesList;
2461 QList<QVariant> aMarkerTypeIconsList;
2463 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2464 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2465 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2466 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2467 aMarkerTypeIndicesList << (i-1);
2468 aMarkerTypeIconsList << pixmap;
2471 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2472 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2474 // Set property for vertex marker scale
2475 QList<QVariant> aMarkerScaleIndicesList;
2476 QStringList aMarkerScaleValuesList;
2478 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2479 aMarkerScaleIndicesList << iii;
2480 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2483 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2484 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2486 // Scalar bar for field step presentation
2487 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2488 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2490 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2491 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2492 setPreferenceProperty( sbXPosition, "min", 0 );
2493 setPreferenceProperty( sbXPosition, "max", 1 );
2494 setPreferenceProperty( sbXPosition, "step", 0.05 );
2496 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2497 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2498 setPreferenceProperty( sbYPosition, "min", 0 );
2499 setPreferenceProperty( sbYPosition, "max", 1 );
2500 setPreferenceProperty( sbYPosition, "step", 0.05 );
2502 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2503 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2504 setPreferenceProperty( sbWidth, "min", 0 );
2505 setPreferenceProperty( sbWidth, "max", 1 );
2506 setPreferenceProperty( sbWidth, "step", 0.05 );
2508 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2509 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2510 setPreferenceProperty( sbHeight, "min", 0 );
2511 setPreferenceProperty( sbHeight, "max", 1 );
2512 setPreferenceProperty( sbHeight, "step", 0.05 );
2514 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2515 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2516 setPreferenceProperty( sbTextHeight, "min", 6 );
2517 setPreferenceProperty( sbTextHeight, "max", 24 );
2518 setPreferenceProperty( sbTextHeight, "step", 1 );
2520 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2521 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2522 setPreferenceProperty( sbNbIntervals, "min", 2 );
2523 setPreferenceProperty( sbNbIntervals, "max", 64 );
2524 setPreferenceProperty( sbNbIntervals, "step", 1 );
2526 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2527 setPreferenceProperty( originGroup, "columns", 2 );
2529 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2530 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2531 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2532 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2534 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2535 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2537 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2538 setPreferenceProperty( operationsGroup, "columns", 2 );
2540 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2541 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2543 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2545 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2547 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2548 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2550 QStringList aHierarchyTypeList;
2551 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2552 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2553 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2555 QList<QVariant> aHierarchyTypeIndexesList;
2556 aHierarchyTypeIndexesList.append(0);
2557 aHierarchyTypeIndexesList.append(1);
2558 aHierarchyTypeIndexesList.append(2);
2560 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2561 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2563 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2564 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2566 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2568 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2569 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2571 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2572 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2573 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2574 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2575 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2576 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2577 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2578 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2580 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2581 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2582 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2583 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2584 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2585 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2592 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2594 if (section == "Geometry") {
2595 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2596 if (param == QString("SettingsGeomStep")) {
2597 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2598 EmitSignalDefaultStepValueChanged(spin_step);
2600 else if (param == QString("toplevel_color")) {
2601 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2602 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2604 else if (param == QString("toplevel_dm")) {
2605 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2607 else if (param == QString("scalar_bar_x_position") ||
2608 param == QString("scalar_bar_y_position") ||
2609 param == QString("scalar_bar_width") ||
2610 param == QString("scalar_bar_height") ||
2611 param == QString("scalar_bar_text_height") ||
2612 param == QString("scalar_bar_nb_intervals")) {
2613 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2615 GEOM_Displayer aDisplayer( aStudy );
2616 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2617 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2620 else if ( param == QString("dimensions_color") ||
2621 param == QString("dimensions_line_width") ||
2622 param == QString("dimensions_font_height") ||
2623 param == QString("dimensions_arrow_length") ||
2624 param == QString("dimensions_show_units") ||
2625 param == QString("dimensions_length_units") ||
2626 param == QString("dimensions_angle_units") )
2628 SalomeApp_Application* anApp = getApp();
2634 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2640 GEOM_Displayer aDisplayer( aStudy );
2642 ViewManagerList aVMs;
2643 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2644 ViewManagerList::Iterator anIt = aVMs.begin();
2645 for ( ; anIt != aVMs.end(); ++anIt )
2647 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2653 SALOME_ListIO aVisible;
2654 aViewer->GetVisible( aVisible );
2655 aDisplayer.Redisplay( aVisible, false, aViewer );
2658 aDisplayer.UpdateViewer();
2660 else if ( param.startsWith( "dependency_tree") )
2661 emit SignalDependencyTreeParamChanged( section, param );
2665 LightApp_Displayer* GeometryGUI::displayer()
2668 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2672 void GeometryGUI::setLocalSelectionMode(const int mode)
2674 myLocalSelectionMode = mode;
2677 int GeometryGUI::getLocalSelectionMode() const
2679 return myLocalSelectionMode;
2682 const char gSeparator = '_'; // character used to separate parameter names
2683 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2686 * \brief Store visual parameters
2688 * This method is called just before the study document is saved.
2689 * Store visual parameters in AttributeParameter attribute(s)
2691 void GeometryGUI::storeVisualParameters (int savePoint)
2693 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2694 if ( !appStudy || !appStudy->studyDS() )
2696 _PTR(Study) studyDS = appStudy->studyDS();
2698 // componentName is used for encoding of entries when storing them in IParameters
2699 std::string componentName = myComponentGeom->ComponentDataType();
2700 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2701 //if (!aSComponent) return;
2704 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2705 componentName.c_str(),
2707 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2709 QSet<QString> anEntriesToStoreShared;
2710 QList<SUIT_ViewManager*> lst;
2711 QList<SUIT_ViewManager*>::Iterator it;
2713 // main cycle to store parameters of displayed objects
2715 getApp()->viewManagers(lst);
2716 for (it = lst.begin(); it != lst.end(); it++) {
2717 SUIT_ViewManager* vman = *it;
2718 QString vType = vman->getType();
2719 int aMgrId = vman->getGlobalId();
2720 // saving VTK actors properties
2721 QVector<SUIT_ViewWindow*> views = vman->getViews();
2722 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2723 const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId);
2724 ObjMap::ConstIterator o_it = anObjects.begin();
2725 for (; o_it != anObjects.end(); o_it++) {
2726 const PropMap& aProps = o_it.value();
2728 //Check that object exists in the study
2729 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2730 if ( !obj || !(aProps.count() > 0))
2732 // entry is "encoded" = it does NOT contain component adress, since it is a
2733 // subject to change on next component loading
2735 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2737 _PTR(GenericAttribute) anAttr;
2738 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2741 // remember entry of object to store shared GEOM properties
2742 // (e.g. dimension properties).
2743 if ( vType == OCCViewer_Viewer::Type() )
2745 anEntriesToStoreShared.insert( o_it.key() );
2748 QString param, occParam = vType;
2749 occParam += GEOM::sectionSeparator();
2750 occParam += QString::number(aMgrId);
2751 occParam += GEOM::sectionSeparator();
2753 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2754 param = occParam + GEOM::propertyName( GEOM::Visibility );
2755 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2758 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2759 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2760 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2763 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2764 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2766 val << QString::number(c.redF());
2767 val << QString::number(c.greenF());
2768 val << QString::number(c.blueF());
2769 param = occParam + GEOM::propertyName( GEOM::Color );
2770 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2773 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2774 param = occParam + GEOM::propertyName( GEOM::Texture );
2775 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2778 if (vType == SVTK_Viewer::Type()) {
2779 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2780 param = occParam + GEOM::propertyName( GEOM::Opacity );
2781 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2783 } else if (vType == SOCC_Viewer::Type()) {
2784 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2785 param = occParam + GEOM::propertyName( GEOM::Transparency );
2786 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2789 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2790 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2791 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2795 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2796 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2797 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2800 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2801 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2802 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2805 if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) {
2806 param = occParam + GEOM::propertyName( GEOM::Vertices );
2807 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
2810 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2811 param = occParam + GEOM::propertyName( GEOM::Deflection );
2812 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2815 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2816 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2817 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2818 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2821 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2822 param = occParam + GEOM::propertyName( GEOM::Material );
2823 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2826 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2827 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2828 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2831 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2832 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2833 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2835 } // object iterator
2837 } // for (viewManagers)
2839 // store dimension attributes of objects:
2840 // since the displayed object always persists in property map, we remember the object entries
2841 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
2842 QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
2843 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
2844 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
2846 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
2847 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName);
2849 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
2851 if ( aDimensions.GetNumber() == 0 )
2856 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
2861 * \brief Restore visual parameters
2863 * This method is called after the study document is opened.
2864 * Restore visual parameters from AttributeParameter attribute(s)
2866 void GeometryGUI::restoreVisualParameters (int savePoint)
2868 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2869 if (!appStudy || !appStudy->studyDS())
2871 _PTR(Study) studyDS = appStudy->studyDS();
2873 // componentName is used for encoding of entries when storing them in IParameters
2874 std::string componentName = myComponentGeom->ComponentDataType();
2875 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2876 //if (!aSComponent) return;
2879 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2880 componentName.c_str(),
2882 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2884 std::vector<std::string> entries = ip->getEntries();
2886 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2888 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2889 QString entry (ip->decodeEntry(*entIt).c_str());
2891 // Check that the entry corresponds to a real object in the Study
2892 // as the object may be deleted or modified after the visual state is saved.
2893 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2894 if (!so) continue; //Skip the not existent entry
2896 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2897 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2899 std::vector<std::string>::iterator namesIt = paramNames.begin();
2900 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2902 // actors are stored in a map after displaying of them for
2903 // quicker access in the future: map < viewID to actor >
2904 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2905 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2907 QString viewerTypStr;
2908 QString viewIndexStr;
2910 QVector<PropMap> aListOfMap;
2912 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2914 // visual parameters are stored in strings as follows:
2915 // 1) ViewerType_ViewIndex_ParamName
2916 // 2) ViewerType_ParamName (shared for GEOM module)
2917 // '_' is used as separator and should not be used in viewer type or parameter names.
2918 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2920 bool isShared = lst.size() == 2;
2921 bool isViewer = lst.size() == 3;
2922 if ( !isShared && !isViewer )
2927 // shared visual parameters
2930 QString aParamNameStr( lst[1] );
2931 QString aValuesStr( (*valuesIt).c_str() );
2933 // shared dimension properties are stored as attribute
2934 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
2936 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
2937 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
2943 // per view visual parameters
2944 viewerTypStr = lst[0];
2945 viewIndexStr = lst[1];
2946 QString paramNameStr = lst[2];
2949 viewIndex = viewIndexStr.toUInt(&ok);
2950 if (!ok) // bad conversion of view index to integer
2953 if ((viewIndex + 1) > aListOfMap.count()) {
2954 aListOfMap.resize(viewIndex + 1);
2957 QString val((*valuesIt).c_str());
2958 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
2959 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
2960 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
2961 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
2962 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
2963 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
2964 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
2965 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
2966 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
2967 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
2968 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
2969 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
2970 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
2971 QStringList rgb = val.split(GEOM::subSectionSeparator());
2972 if (rgb.count() == 3) {
2973 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
2974 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
2976 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
2977 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
2978 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
2979 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
2980 } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) {
2981 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1");
2982 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
2983 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
2984 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
2985 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
2986 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
2987 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
2988 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
2989 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
2990 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
2991 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
2993 } // for names/parameters iterator
2995 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2997 for (int index = 0; index < aListOfMap.count(); index++) {
2998 appStudy->setObjectProperties(index, entry, aListOfMap[index]);
3000 //Get Visibility property of the current PropMap
3001 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3002 SUIT_ViewManager* vman = lst.at(index);
3003 SUIT_ViewModel* vmodel = vman->getViewModel();
3004 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
3007 } // for entries iterator
3009 // update all VTK and OCC views
3010 QList<SUIT_ViewManager*> lst;
3011 getApp()->viewManagers(lst);
3012 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3013 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3016 if (vmodel->getType() == SVTK_Viewer::Type()) {
3017 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3018 vtkView->getRenderer()->ResetCameraClippingRange();
3021 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3022 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3023 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3030 void GeometryGUI::onViewAboutToShow()
3032 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3033 QAction* a = action( GEOMOp::OpSwitchVectors );
3034 QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
3036 a->setEnabled(true);
3037 bool vmode = window->property("VectorsMode").toBool();
3038 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3039 aVerticesAction->setEnabled(true);
3040 vmode = window->property("VerticesMode").toBool();
3041 aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
3043 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3044 a->setEnabled(false);
3045 aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
3046 aVerticesAction->setEnabled(false);
3051 \brief Return action by id
3052 \param id identifier of the action
3055 QAction* GeometryGUI::getAction(const int id) {
3060 \brief GEOM module message handler
3062 This method can be re-implemented in the subclasses.
3063 This is a GEOM module message handler.
3065 \param msg the message received.
3067 void GeometryGUI::message(const QString& msg)
3070 QStringList data = msg.split("/");
3071 const int nbStrings = data.count();
3073 if (nbStrings > 0) {
3074 if (data[0] == "modified") {
3076 QString anIOR = nbStrings > 1 ? data[1] : QString();
3078 if ( anIOR.isEmpty() ) {
3082 // Get the geom object.
3083 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3085 // Clear the shape buffer
3086 GeometryGUI::ClearShapeBuffer (anObj);
3092 \brief Clears the shape buffer.
3094 This is a static method. It clears the shape buffer.
3096 \param theObj the object
3098 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3100 if ( CORBA::is_nil( theObj ) )
3103 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3104 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3105 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3107 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3112 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3117 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3121 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3122 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3123 _PTR(GenericAttribute) anAttr;
3124 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3125 _PTR(AttributeIOR) anIOR ( anAttr );
3126 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3127 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3133 \brief Returns the object from IOR.
3135 This is a static method. It returns the object from its IOR.
3137 \param IOR object IOR
3138 \return GEOM object.
3140 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3142 GEOM::GEOM_Object_var geomObj;
3143 if ( !IOR.isEmpty() ) {
3144 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3145 ( IOR.toLatin1().constData() );
3146 if ( !CORBA::is_nil( corbaObj ) )
3147 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3149 return geomObj._retn();
3153 \brief Returns IOR of the object.
3155 This is a static method. It returns the object's IOR.
3157 \param object the GEOM object.
3158 \return object's IOR.
3160 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3163 if ( !CORBA::is_nil( object ) ) {
3164 CORBA::String_var anIOR =
3165 SalomeApp_Application::orb()->object_to_string( object );
3172 \brief Check if this object is can't be renamed in place
3174 This method can be re-implemented in the subclasses.
3175 Return true in case if object isn't reference or component (module root).
3177 \param entry column id
3178 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3180 bool GeometryGUI::renameAllowed( const QString& entry) const {
3182 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3183 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3184 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3186 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3190 Rename object by entry.
3191 \param entry entry of the object
3192 \param name new name of the object
3193 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3195 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3197 bool result = false;
3199 SalomeApp_Application* app =
3200 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3201 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3206 _PTR(Study) aStudy = appStudy->studyDS();
3211 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3213 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3217 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3218 _PTR(GenericAttribute) anAttr;
3220 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3221 _PTR(AttributeName) aName (anAttr);
3223 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3224 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3225 if (!CORBA::is_nil(anObj)) {
3226 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3227 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3235 void GeometryGUI::updateMaterials()
3237 LightApp_Preferences* pref = preferences();
3239 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3240 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3241 if ( !materials.contains( currentMaterial ) )
3242 // user material set as default in the preferences, might be removed
3243 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3245 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3247 setPreferenceProperty( prefItem->id(),
3248 "strings", materials );
3249 prefItem->retrieve();
3255 \brief Check if the module allows "drag" operation of its objects.
3257 Overloaded from LightApp_Module class.
3259 This function is a part of the general drag-n-drop mechanism.
3260 The goal of this function is to check data object passed as a parameter
3261 and decide if it can be dragged or no.
3263 \param what data object being tested for drag operation
3264 \return \c true if module allows dragging of the specified object
3265 \sa isDropAccepted(), dropObjects()
3267 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3269 // we allow dragging object under root and object from folder
3270 int aLevel = what->level();
3271 bool anObjectInFolder = false;
3273 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3275 _PTR(SObject) aSO = dataObj->object();
3277 _PTR(GenericAttribute) anAttr;
3278 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3279 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3280 _PTR(AttributeLocalID) aLocalID( anAttr );
3281 anObjectInFolder = aLocalID->Value() == 999;
3286 return aLevel == 2 || anObjectInFolder;
3290 \brief Check if the module allows "drop" operation on the given object.
3292 Overloaded from LightApp_Module class.
3294 This function is a part of the general drag-n-drop mechanism.
3295 The goal of this function is to check data object passed as a parameter
3296 and decide if it can be used as a target for the "drop" operation.
3297 The processing of the drop operation itself is done in the dropObjects() function.
3299 \param where target data object
3300 \return \c true if module supports dropping on the \a where data object
3301 \sa isDraggable(), dropObjects()
3303 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3305 // we allow dropping into folder and top-level GEOM object
3306 int aLevel = where->level();
3307 bool isFolder = false;
3309 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3311 _PTR(SObject) aSO = dataObj->object();
3313 _PTR(GenericAttribute) anAttr;
3314 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3315 _PTR(AttributeLocalID) aLocalID( anAttr );
3316 isFolder = aLocalID->Value() == 999;
3321 return aLevel == 1 || isFolder;
3325 \brief Complete drag-n-drop operation.
3327 Overloaded from LightApp_Module class.
3329 This function is a part of the general drag-n-drop mechanism.
3330 Its goal is to handle dropping of the objects being dragged according
3331 to the chosen operation (move). The dropping is performed in the
3332 context of the parent data object \a where and the \a row (position in the
3333 children index) at which the data should be dropped. If \a row is equal to -1,
3334 this means that objects are added to the end of the children list.
3336 \param what objects being dropped
3337 \param where target data object
3338 \param row child index at which the drop operation is performed
3339 \param action drag-n-drop operation (Qt::DropAction) - move
3341 \sa isDraggable(), isDropAccepted()
3343 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3344 const int row, Qt::DropAction action )
3346 if (action != Qt::CopyAction && action != Qt::MoveAction)
3347 return; // unsupported action
3349 // get parent object
3350 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3351 if ( !dataObj ) return; // wrong parent
3352 _PTR(SObject) parentObj = dataObj->object();
3354 // Find the current Study and StudyBuilder
3355 _PTR(Study) aStudy = parentObj->GetStudy();
3356 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3357 // collect all parents of the target node
3358 QStringList parentIDs;
3359 _PTR(SObject) parent = parentObj;
3360 while( !parent->IsNull() ) {
3361 parentIDs << parent->GetID().c_str();
3362 parent = aUseCaseBuilder->GetFather(parent);
3365 // collect objects being dropped
3366 GEOM::object_list_var objects = new GEOM::object_list();
3367 objects->length( what.count() );
3369 for ( int i = 0; i < what.count(); i++ ) {
3370 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3371 if ( !dataObj ) continue; // skip wrong objects
3372 _PTR(SObject) sobj = dataObj->object();
3373 // check that dropped object is not a parent of target object
3374 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3375 return; // it's not allowed to move node into it's child
3377 objects[i] = _CAST(SObject, sobj)->GetSObject();
3380 objects->length( count );
3382 // call engine function
3383 GetGeomGen()->Move( objects.in(), // what
3384 _CAST(SObject, parentObj)->GetSObject(), // where
3387 // update Object browser
3388 getApp()->updateObjectBrowser( false );