1 // Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : GeometryGUI.cxx
23 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
25 #include <Standard_math.hxx> // E.A. must be included before Python.h to fix compilation on windows
27 #undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
30 #include "GeometryGUI.h"
31 #include "GeometryGUI_Operations.h"
32 #include "GEOMGUI_OCCSelector.h"
33 #include "GEOMGUI_Selection.h"
34 #include "GEOM_Constants.h"
35 #include "GEOM_Displayer.h"
36 #include "GEOM_AISShape.hxx"
38 #include "GEOM_Actor.h"
40 #include <Material_ResourceMgr.h>
42 #include <SUIT_Desktop.h>
43 #include <SUIT_MessageBox.h>
44 #include <SUIT_ResourceMgr.h>
45 #include <SUIT_Session.h>
46 #include <SUIT_ViewManager.h>
48 #include <OCCViewer_ViewWindow.h>
49 #include <OCCViewer_ViewPort3d.h>
50 #include <OCCViewer_ViewModel.h>
51 #include <OCCViewer_ViewManager.h>
53 #include <SOCC_ViewModel.h>
54 #include <SOCC_ViewWindow.h>
56 #include <SVTK_ViewWindow.h>
57 #include <SVTK_RenderWindowInteractor.h>
58 #include <SVTK_InteractorStyle.h>
59 #include <SVTK_ViewModel.h>
61 #include <SalomeApp_Application.h>
62 #include <SalomeApp_DataObject.h>
63 #include <SalomeApp_Study.h>
64 #include <SalomeApp_Tools.h>
66 #include <LightApp_SelectionMgr.h>
67 #include <LightApp_VTKSelector.h>
68 #include <LightApp_DataObject.h>
69 #include <LightApp_Preferences.h>
71 #include <SALOME_LifeCycleCORBA.hxx>
72 #include <SALOME_ListIO.hxx>
73 #include <SALOME_ListIteratorOfListIO.hxx>
75 #include <SALOMEDSClient_ClientFactory.hxx>
76 #include <SALOMEDSClient_IParameters.hxx>
78 #include <Basics_OCCTVersion.hxx>
88 #include <AIS_Drawer.hxx>
89 #include <AIS_ListOfInteractive.hxx>
90 #include <AIS_ListIteratorOfListOfInteractive.hxx>
91 #include <Prs3d_Drawer.hxx>
92 #include <Prs3d_IsoAspect.hxx>
93 #include <Aspect_TypeOfMarker.hxx>
94 #include <OSD_SharedLibrary.hxx>
95 #include <NCollection_DataMap.hxx>
97 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
98 #include <TColStd_HArray1OfByte.hxx>
100 #include <Graphic3d_HArray1OfBytes.hxx>
103 #include <utilities.h>
105 #include <vtkCamera.h>
106 #include <vtkRenderer.h>
108 #include <GEOM_version.h>
111 #include "GEOMImpl_Types.hxx"
114 Standard_EXPORT CAM_Module* createModule() {
115 return new GeometryGUI();
118 Standard_EXPORT char* getModuleVersion() {
119 return (char*)GEOM_VERSION_STR;
123 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
125 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
127 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
129 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
130 if (CORBA::is_nil(myComponentGeom))
132 return GeometryGUI::myComponentGeom;
135 bool GeometryGUI::InitGeomGen()
138 if( CORBA::is_nil( myComponentGeom ) ) return false;
142 //=======================================================================
143 // function : ClientSObjectToObject
145 //=======================================================================
146 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
148 _PTR(GenericAttribute) anAttr;
149 CORBA::Object_var anObj;
151 std::string aValue = theSObject->GetIOR();
152 if (strcmp(aValue.c_str(), "") != 0) {
153 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
154 anObj = anORB->string_to_object(aValue.c_str());
157 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
159 return anObj._retn();
162 //=======================================================================
163 // function : ClientStudyToStudy
165 //=======================================================================
166 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
168 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
169 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
170 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
171 int aStudyID = theStudy->StudyId();
172 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
173 return aDSStudy._retn();
176 void GeometryGUI::Modified( bool theIsUpdateActions )
178 if( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
179 if( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
180 appStudy->Modified();
181 if( theIsUpdateActions )
182 app->updateActions();
187 //=======================================================================
188 // function : GeometryGUI::GeometryGUI()
189 // purpose : Constructor
190 //=======================================================================
191 GeometryGUI::GeometryGUI() :
192 SalomeApp_Module( "GEOM" ),
193 LightApp_Module( "GEOM" )
195 if ( CORBA::is_nil( myComponentGeom ) )
197 Engines::EngineComponent_var comp =
198 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
199 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
202 myActiveDialogBox = 0;
204 gp_Pnt origin = gp_Pnt(0., 0., 0.);
205 gp_Dir direction = gp_Dir(0., 0., 1.);
206 myWorkingPlane = gp_Ax3(origin, direction);
209 myLocalSelectionMode = GEOM_ALLOBJECTS;
212 //=======================================================================
213 // function : GeometryGUI::~GeometryGUI()
214 // purpose : Destructor
215 //=======================================================================
216 GeometryGUI::~GeometryGUI()
218 while (!myOCCSelectors.isEmpty())
219 delete myOCCSelectors.takeFirst();
221 while (!myVTKSelectors.isEmpty())
222 delete myVTKSelectors.takeFirst();
224 qDeleteAll(myGUIMap);
227 //=======================================================================
228 // function : GeometryGUI::getLibrary()
229 // purpose : get or load GUI library by name [ internal ]
230 //=======================================================================
231 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
232 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
234 if ( !myGUIMap.contains( libraryName ) ) {
235 // try to load library if it is not loaded yet
237 QString dirs = getenv( "LD_LIBRARY_PATH" );
240 QString dirs = getenv( "PATH" );
243 if ( !dirs.isEmpty() ) {
244 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
245 QListIterator<QString> it( dirList ); it.toBack();
246 while ( it.hasPrevious() ) {
247 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
249 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
250 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
252 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
253 continue; // continue search further
255 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
256 if ( osdF != NULL ) {
257 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
258 GEOMGUI* libGUI = (*func)( this );
260 myGUIMap[ libraryName ] = libGUI;
261 break; // found and loaded!
268 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
271 //=======================================================================
272 // function : GeometryGUI::ActiveWorkingPlane()
273 // purpose : Activate Working Plane View
274 //=======================================================================
275 void GeometryGUI::ActiveWorkingPlane()
277 gp_Dir DZ = myWorkingPlane.Direction();
278 gp_Dir DY = myWorkingPlane.YDirection();
280 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
281 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
282 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
285 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
287 Handle(V3d_View) view3d = vw->getViewPort()->getView();
289 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
290 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
295 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
297 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
299 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
300 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
301 camera->SetFocalPoint(0,0,0);
308 //=======================================================================
309 // function : GeometryGUI::SetActiveDialogBox()
310 // purpose : Set active dialog box
311 //=======================================================================
312 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
314 myActiveDialogBox = (QDialog*)aDlg;
317 //=======================================================================
318 // function : GeometryGUI::EmitSignalDeactivateDialog()
319 // purpose : Emit a signal to deactivate the active dialog Box
320 //=======================================================================
321 void GeometryGUI::EmitSignalDeactivateDialog()
323 emit SignalDeactivateActiveDialog();
326 //=======================================================================
327 // function : GeometryGUI::EmitSignalCloseAllDialogs()
328 // purpose : Emit a signal to close all non modal dialogs box
329 //=======================================================================
330 void GeometryGUI::EmitSignalCloseAllDialogs()
332 emit SignalCloseAllDialogs();
335 //=======================================================================
336 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
337 // purpose : Emit a signal to inform that default real spin box step has
339 //=======================================================================
340 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
342 emit SignalDefaultStepValueChanged(newVal);
345 //=======================================================================
346 // function : GeometryGUI::OnGUIEvent()
347 // purpose : common slot for all menu/toolbar actions
348 //=======================================================================
349 void GeometryGUI::OnGUIEvent()
351 const QObject* obj = sender();
352 if ( !obj || !obj->inherits( "QAction" ) )
354 int id = actionId((QAction*)obj);
359 //=======================================================================
360 // function : GeometryGUI::OnGUIEvent()
361 // purpose : manage all events on GUI [static]
362 //=======================================================================
363 void GeometryGUI::OnGUIEvent( int id )
365 SUIT_Application* anApp = application();
367 SUIT_Desktop* desk = anApp->desktop();
369 // check type of the active viewframe
370 SUIT_ViewWindow* window = desk->activeWindow();
371 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
372 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
373 // if current viewframe is not of OCC and not of VTK type - return immediately
374 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
375 QList<int> NotViewerDependentCommands;
376 NotViewerDependentCommands << GEOMOp::OpDelete
378 << GEOMOp::OpShowOnly
379 << GEOMOp::OpShowChildren
380 << GEOMOp::OpHideChildren
381 << GEOMOp::OpUnpublishObject
382 << GEOMOp::OpPublishObject
383 << GEOMOp::OpPointMarker;
384 if ( !ViewOCC && !ViewVTK && !NotViewerDependentCommands.contains( id ) )
387 // fix for IPAL9103, point 2
388 if ( CORBA::is_nil( GetGeomGen() ) ) {
389 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
394 // find corresponding GUI library
396 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
397 createOriginAndBaseVectors(); // internal operation
399 case GEOMOp::OpImport: // MENU FILE - IMPORT
400 case GEOMOp::OpExport: // MENU FILE - EXPORT
401 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
402 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
403 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
404 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
405 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
406 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
407 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
408 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
409 case GEOMOp::OpDelete: // MENU EDIT - DELETE
410 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
411 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
412 case GEOMOp::OpColor: // POPUP MENU - COLOR
413 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
414 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
415 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
416 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
417 case GEOMOp::OpIsos: // POPUP MENU - ISOS
418 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
419 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
420 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
421 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
422 case GEOMOp::OpShowChildren: // POPUP MENU - SHOW CHILDREN
423 case GEOMOp::OpHideChildren: // POPUP MENU - HIDE CHILDREN
424 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
425 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
426 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
427 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
428 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
429 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
430 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
431 case GEOMOp::OpClsBringToFront: //
432 libName = "GEOMToolsGUI";
434 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
435 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
436 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
437 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
438 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
439 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
440 case GEOMOp::OpHide: // MENU VIEW - ERASE
441 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
442 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
443 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
444 case GEOMOp::OpShading: // POPUP MENU - SHADING
445 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
446 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
447 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
448 libName = "DisplayGUI";
450 case GEOMOp::OpPoint: // MENU BASIC - POINT
451 case GEOMOp::OpLine: // MENU BASIC - LINE
452 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
453 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
454 case GEOMOp::OpArc: // MENU BASIC - ARC
455 case GEOMOp::OpVector: // MENU BASIC - VECTOR
456 case GEOMOp::OpPlane: // MENU BASIC - PLANE
457 case GEOMOp::OpCurve: // MENU BASIC - CURVE
458 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
459 libName = "BasicGUI";
461 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
462 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
463 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
464 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
465 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
466 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
467 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
468 libName = "PrimitiveGUI";
470 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
471 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
472 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
473 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
474 libName = "GenerationGUI";
476 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
477 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
478 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
480 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
482 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
483 libName = "EntityGUI";
485 case GEOMOp::OpEdge: // MENU BUILD - EDGE
486 case GEOMOp::OpWire: // MENU BUILD - WIRE
487 case GEOMOp::OpFace: // MENU BUILD - FACE
488 case GEOMOp::OpShell: // MENU BUILD - SHELL
489 case GEOMOp::OpSolid: // MENU BUILD - SOLID
490 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
491 libName = "BuildGUI";
493 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
494 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
495 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
496 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
497 libName = "BooleanGUI";
499 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
500 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
501 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
502 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
503 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
504 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
505 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
506 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
507 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
508 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
509 libName = "TransformationGUI";
511 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
512 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
513 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
514 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
515 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
516 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
517 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
518 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
519 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
520 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
521 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
522 libName = "OperationGUI";
524 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
525 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
526 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
527 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
528 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
529 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
530 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
531 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
532 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
533 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
534 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
535 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
536 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
537 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
538 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
539 libName = "RepairGUI";
541 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
542 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
543 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
544 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
545 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
546 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
547 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
548 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
549 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
550 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
551 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
552 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
553 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
554 libName = "MeasureGUI";
556 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
557 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
558 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
559 libName = "GroupGUI";
561 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
562 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
563 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
564 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
565 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
566 libName = "BlocksGUI";
568 case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
569 case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
570 // case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
571 case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
572 case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
573 //@@ 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 @@//
574 libName = "AdvancedGUI";
580 GEOMGUI* library = 0;
581 if ( !libName.isEmpty() ) {
583 libName = QString( "lib" ) + libName + ".so";
585 libName = libName + ".dll";
587 library = getLibrary( libName );
590 // call method of corresponding GUI library
592 library->OnGUIEvent( id, desk );
594 // Update a list of materials for "Preferences" dialog
595 if ( id == GEOMOp::OpMaterialProperties ) {
596 LightApp_Preferences* pref = preferences();
598 Material_ResourceMgr aMatResMgr;
599 setPreferenceProperty( pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true )->id(),
601 aMatResMgr.materials() );
606 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
609 //=================================================================================
610 // function : GeometryGUI::OnKeyPress()
611 // purpose : Called when any key is pressed by user [static]
612 //=================================================================================
613 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
615 if ( !application() )
617 foreach ( GEOMGUI* lib, myGUIMap )
618 lib->OnKeyPress( e, application()->desktop(), w );
621 //=================================================================================
622 // function : GeometryGUI::OnMouseMove()
623 // purpose : Manages mouse move events [static]
624 //=================================================================================
625 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
627 if ( !application() )
629 foreach ( GEOMGUI* lib, myGUIMap )
630 lib->OnMouseMove( e, application()->desktop(), w );
633 //=================================================================================
634 // function : GeometryGUI::OnMouseRelease()
635 // purpose : Manages mouse release events [static]
636 //=================================================================================
637 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
639 if ( !application() )
641 foreach ( GEOMGUI* lib, myGUIMap )
642 lib->OnMouseRelease( e, application()->desktop(), w );
645 //=================================================================================
646 // function : GeometryGUI::OnMousePress()
647 // purpose : Manage mouse press events [static]
648 //=================================================================================
649 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
651 if ( !application() )
653 foreach ( GEOMGUI* lib, myGUIMap )
654 lib->OnMousePress( e, application()->desktop(), w );
657 //=======================================================================
658 // function : createGeomAction
660 //=======================================================================
661 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
662 const int accel, const bool toggle, const QString& shortcutAction )
664 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
665 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
666 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
668 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
670 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
671 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
673 application()->desktop(),
675 this, SLOT( OnGUIEvent() ),
679 //=======================================================================
680 // function : createOriginAndBaseVectors
682 //=======================================================================
683 void GeometryGUI::createOriginAndBaseVectors()
685 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
687 _PTR(Study) studyDS = appStudy->studyDS();
688 if( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
689 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
690 if( !aBasicOperations->_is_nil() ) {
691 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
692 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
693 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
694 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
695 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
696 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
698 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
699 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
700 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
701 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
702 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
704 getApp()->updateObjectBrowser( false );
710 //=======================================================================
711 // function : GeometryGUI::initialize()
712 // purpose : Called when GEOM module is created
713 //=======================================================================
714 void GeometryGUI::initialize( CAM_Application* app )
716 SalomeApp_Module::initialize( app );
718 // ----- create actions --------------
720 createGeomAction( GEOMOp::OpImport, "IMPORT", "", Qt::ControlModifier + Qt::Key_I );
721 createGeomAction( GEOMOp::OpExport, "EXPORT", "", Qt::ControlModifier + Qt::Key_E );
723 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
725 createGeomAction( GEOMOp::OpPoint, "POINT" );
726 createGeomAction( GEOMOp::OpLine, "LINE" );
727 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
728 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
729 createGeomAction( GEOMOp::OpArc, "ARC" );
730 createGeomAction( GEOMOp::OpCurve, "CURVE" );
731 createGeomAction( GEOMOp::OpVector, "VECTOR" );
732 createGeomAction( GEOMOp::OpPlane, "PLANE" );
733 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
734 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
736 createGeomAction( GEOMOp::OpBox, "BOX" );
737 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
738 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
739 createGeomAction( GEOMOp::OpTorus, "TORUS" );
740 createGeomAction( GEOMOp::OpCone, "CONE" );
741 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
742 createGeomAction( GEOMOp::OpDisk, "DISK" );
744 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
745 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
746 createGeomAction( GEOMOp::OpFilling, "FILLING" );
747 createGeomAction( GEOMOp::OpPipe, "PIPE" );
749 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
750 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
752 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
754 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
755 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
757 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
758 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
759 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
761 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
763 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
765 createGeomAction( GEOMOp::OpEdge, "EDGE" );
766 createGeomAction( GEOMOp::OpWire, "WIRE" );
767 createGeomAction( GEOMOp::OpFace, "FACE" );
768 createGeomAction( GEOMOp::OpShell, "SHELL" );
769 createGeomAction( GEOMOp::OpSolid, "SOLID" );
770 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
772 createGeomAction( GEOMOp::OpFuse, "FUSE" );
773 createGeomAction( GEOMOp::OpCommon, "COMMON" );
774 createGeomAction( GEOMOp::OpCut, "CUT" );
775 createGeomAction( GEOMOp::OpSection, "SECTION" );
777 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
778 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
779 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
780 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
781 createGeomAction( GEOMOp::OpScale, "SCALE" );
782 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
783 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
784 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
785 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
787 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
788 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
789 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
790 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
791 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
792 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
793 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
794 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
795 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
796 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
797 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
799 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
800 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
801 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
803 createGeomAction( GEOMOp::OpSewing, "SEWING" );
804 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
805 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
806 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
807 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
808 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
809 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
810 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
811 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
812 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
813 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
814 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
815 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
816 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
817 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
819 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
820 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
821 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
822 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
823 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
824 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
825 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
826 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
828 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
829 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
830 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
831 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
832 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
834 #ifdef _DEBUG_ // PAL16821
835 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
838 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
839 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
840 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
841 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
842 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
843 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
844 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
845 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
846 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
847 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
848 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
849 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
850 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
851 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
852 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
853 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
854 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
855 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
856 createGeomAction( GEOMOp::OpHide, "ERASE" );
858 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
859 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
860 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
861 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
862 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
863 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
864 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
865 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
866 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
867 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
868 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
869 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
870 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
871 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
872 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
873 createGeomAction( GEOMOp::OpShowChildren, "POP_SHOW_CHILDREN" );
874 createGeomAction( GEOMOp::OpHideChildren, "POP_HIDE_CHILDREN" );
875 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
876 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
877 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
878 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
880 createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
882 // Create actions for increase/decrease transparency shortcuts
883 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
884 "Geometry:Increase transparency");
885 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
886 "Geometry:Decrease transparency");
888 // Create actions for increase/decrease number of isolines
889 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
890 "Geometry:Increase number of isolines");
891 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
892 "Geometry:Decrease number of isolines");
894 // createGeomAction( GEOMOp::OpPipeTShapeGroups, "PIPETSHAPEGROUPS" );
895 createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
896 createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
897 //@@ 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 @@//
899 // ---- create menus --------------------------
901 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
902 createMenu( separator(), fileId, 10 );
903 createMenu( GEOMOp::OpImport, fileId, 10 );
904 createMenu( GEOMOp::OpExport, fileId, 10 );
905 createMenu( separator(), fileId, -1 );
907 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
908 createMenu( GEOMOp::OpDelete, editId, -1 );
910 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
912 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
913 createMenu( GEOMOp::OpPoint, basicId, -1 );
914 createMenu( GEOMOp::OpLine, basicId, -1 );
915 createMenu( GEOMOp::OpCircle, basicId, -1 );
916 createMenu( GEOMOp::OpEllipse, basicId, -1 );
917 createMenu( GEOMOp::OpArc, basicId, -1 );
918 createMenu( GEOMOp::OpCurve, basicId, -1 );
919 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
920 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
921 createMenu( separator(), basicId, -1 );
922 createMenu( GEOMOp::OpVector, basicId, -1 );
923 createMenu( GEOMOp::OpPlane, basicId, -1 );
924 createMenu( GEOMOp::OpLCS, basicId, -1 );
925 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
927 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
928 createMenu( GEOMOp::OpBox, primId, -1 );
929 createMenu( GEOMOp::OpCylinder, primId, -1 );
930 createMenu( GEOMOp::OpSphere, primId, -1 );
931 createMenu( GEOMOp::OpTorus, primId, -1 );
932 createMenu( GEOMOp::OpCone, primId, -1 );
933 createMenu( GEOMOp::OpRectangle, primId, -1 );
934 createMenu( GEOMOp::OpDisk, primId, -1 );
935 createMenu( GEOMOp::OpPipeTShape,primId, -1 );
937 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
938 createMenu( GEOMOp::OpPrism, genId, -1 );
939 createMenu( GEOMOp::OpRevolution, genId, -1 );
940 createMenu( GEOMOp::OpFilling, genId, -1 );
941 createMenu( GEOMOp::OpPipe, genId, -1 );
943 // int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
945 //@@ 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 @@//
947 createMenu( separator(), newEntId, -1 );
949 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
950 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
951 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
953 createMenu( separator(), newEntId, -1 );
955 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
956 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
957 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
958 createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
959 createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
961 createMenu( separator(), newEntId, -1 );
963 createMenu( GEOMOp::OpExplode, newEntId, -1 );
965 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
966 createMenu( GEOMOp::OpEdge, buildId, -1 );
967 createMenu( GEOMOp::OpWire, buildId, -1 );
968 createMenu( GEOMOp::OpFace, buildId, -1 );
969 createMenu( GEOMOp::OpShell, buildId, -1 );
970 createMenu( GEOMOp::OpSolid, buildId, -1 );
971 createMenu( GEOMOp::OpCompound, buildId, -1 );
973 createMenu( separator(), newEntId, -1 );
975 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
977 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
980 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
982 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
983 createMenu( GEOMOp::OpFuse, boolId, -1 );
984 createMenu( GEOMOp::OpCommon, boolId, -1 );
985 createMenu( GEOMOp::OpCut, boolId, -1 );
986 createMenu( GEOMOp::OpSection, boolId, -1 );
988 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
989 createMenu( GEOMOp::OpTranslate, transId, -1 );
990 createMenu( GEOMOp::OpRotate, transId, -1 );
991 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
992 createMenu( GEOMOp::OpMirror, transId, -1 );
993 createMenu( GEOMOp::OpScale, transId, -1 );
994 createMenu( GEOMOp::OpOffset, transId, -1 );
995 createMenu( GEOMOp::OpProjection, transId, -1 );
996 createMenu( separator(), transId, -1 );
997 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
998 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1000 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1001 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1002 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1003 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1005 createMenu( separator(), operId, -1 );
1007 createMenu( GEOMOp::OpPartition, operId, -1 );
1008 createMenu( GEOMOp::OpArchimede, operId, -1 );
1009 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1010 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1012 createMenu( separator(), operId, -1 );
1014 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1015 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1016 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1017 createMenu( GEOMOp::OpChamfer, operId, -1 );
1018 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1019 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1020 //createMenu( GEOMOp::OpClipping, operId, -1 );
1022 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1023 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1024 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1025 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1026 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1027 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1028 createMenu( GEOMOp::OpSewing, repairId, -1 );
1029 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1030 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1031 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1032 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1033 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1034 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1035 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1036 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1037 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1039 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1040 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1041 createMenu( GEOMOp::OpProperties, measurId, -1 );
1042 createMenu( separator(), measurId, -1 );
1043 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1044 createMenu( GEOMOp::OpInertia, measurId, -1 );
1045 createMenu( GEOMOp::OpNormale, measurId, -1 );
1046 createMenu( separator(), measurId, -1 );
1047 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1048 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1049 createMenu( separator(), measurId, -1 );
1051 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1052 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1053 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1054 createMenu( GEOMOp::OpAngle, dimId, -1 );
1056 createMenu( separator(), measurId, -1 );
1057 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1058 createMenu( separator(), measurId, -1 );
1059 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1060 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1061 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1062 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1064 #ifdef _DEBUG_ // PAL16821
1065 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1066 createMenu( separator(), toolsId, -1 );
1067 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1070 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1071 createMenu( separator(), viewId, -1 );
1073 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1074 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1075 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1076 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1077 createMenu( separator(), dispmodeId, -1 );
1078 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1080 createMenu( separator(), viewId, -1 );
1081 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1082 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1083 createMenu( separator(), viewId, -1 );
1084 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1085 createMenu( separator(), viewId, -1 );
1089 because of these items are accessible through object browser and viewers
1090 we have removed they from main menu
1092 createMenu( GEOMOp::OpShow, viewId, -1 );
1093 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1094 createMenu( GEOMOp::OpHide, viewId, -1 );
1097 // ---- create toolbars --------------------------
1099 int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1100 createTool( GEOMOp::OpPoint, basicTbId );
1101 createTool( GEOMOp::OpLine, basicTbId );
1102 createTool( GEOMOp::OpCircle, basicTbId );
1103 createTool( GEOMOp::OpEllipse, basicTbId );
1104 createTool( GEOMOp::OpArc, basicTbId );
1105 createTool( GEOMOp::OpCurve, basicTbId );
1106 createTool( GEOMOp::OpVector, basicTbId );
1107 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1108 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1109 createTool( GEOMOp::OpPlane, basicTbId );
1110 createTool( GEOMOp::OpLCS, basicTbId );
1111 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1113 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ) );
1114 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1115 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1117 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1118 createTool( GEOMOp::OpBox, primTbId );
1119 createTool( GEOMOp::OpCylinder, primTbId );
1120 createTool( GEOMOp::OpSphere, primTbId );
1121 createTool( GEOMOp::OpTorus, primTbId );
1122 createTool( GEOMOp::OpCone, primTbId );
1123 createTool( GEOMOp::OpRectangle, primTbId );
1124 createTool( GEOMOp::OpDisk, primTbId );
1125 createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1127 int blocksTbId = createTool( tr( "TOOL_BLOCKS" ) );
1128 createTool( GEOMOp::OpDividedDisk, blocksTbId );
1129 createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1131 // int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) ); //rnc
1132 // createTool( GEOMOp::OpPipeTShape, advancedTbId );
1134 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1135 createTool( GEOMOp::OpFuse, boolTbId );
1136 createTool( GEOMOp::OpCommon, boolTbId );
1137 createTool( GEOMOp::OpCut, boolTbId );
1138 createTool( GEOMOp::OpSection, boolTbId );
1140 int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1141 createTool( GEOMOp::OpPrism, genTbId );
1142 createTool( GEOMOp::OpRevolution, genTbId );
1143 createTool( GEOMOp::OpFilling, genTbId );
1144 createTool( GEOMOp::OpPipe, genTbId );
1146 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1147 createTool( GEOMOp::OpTranslate, transTbId );
1148 createTool( GEOMOp::OpRotate, transTbId );
1149 createTool( GEOMOp::OpChangeLoc, transTbId );
1150 createTool( GEOMOp::OpMirror, transTbId );
1151 createTool( GEOMOp::OpScale, transTbId );
1152 createTool( GEOMOp::OpOffset, transTbId );
1153 createTool( GEOMOp::OpProjection, transTbId );
1154 createTool( separator(), transTbId );
1155 createTool( GEOMOp::OpMultiTranslate, transTbId );
1156 createTool( GEOMOp::OpMultiRotate, transTbId );
1158 int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1159 createTool( GEOMOp::OpExplode, operTbId );
1160 createTool( GEOMOp::OpPartition, operTbId );
1161 createTool( GEOMOp::OpArchimede, operTbId );
1162 createTool( GEOMOp::OpShapesOnShape, operTbId );
1163 createTool( GEOMOp::OpSharedShapes, operTbId );
1165 int featTbId = createTool( tr( "TOOL_FEATURES" ) );
1166 createTool( GEOMOp::OpFillet1d, featTbId );
1167 createTool( GEOMOp::OpFillet2d, featTbId );
1168 createTool( GEOMOp::OpFillet3d, featTbId );
1169 createTool( GEOMOp::OpChamfer, featTbId );
1170 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1171 createTool( GEOMOp::OpExtrudedCut, featTbId );
1173 int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1174 createTool( GEOMOp::OpEdge, buildTbId );
1175 createTool( GEOMOp::OpWire, buildTbId );
1176 createTool( GEOMOp::OpFace, buildTbId );
1177 createTool( GEOMOp::OpShell, buildTbId );
1178 createTool( GEOMOp::OpSolid, buildTbId );
1179 createTool( GEOMOp::OpCompound, buildTbId );
1181 int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1182 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1183 createTool( GEOMOp::OpProperties, measureTbId );
1184 createTool( GEOMOp::OpCenterMass, measureTbId );
1185 createTool( GEOMOp::OpInertia, measureTbId );
1186 createTool( GEOMOp::OpNormale, measureTbId );
1187 createTool( separator(), measureTbId );
1188 createTool( GEOMOp::OpBoundingBox, measureTbId );
1189 createTool( GEOMOp::OpMinDistance, measureTbId );
1190 createTool( GEOMOp::OpAngle, measureTbId );
1191 createTool( GEOMOp::OpTolerance , measureTbId );
1192 createTool( separator(), measureTbId );
1193 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1194 createTool( GEOMOp::OpFreeFaces, measureTbId );
1195 createTool( separator(), measureTbId );
1196 createTool( GEOMOp::OpWhatIs, measureTbId );
1197 createTool( GEOMOp::OpCheckShape, measureTbId );
1198 createTool( GEOMOp::OpCheckCompound, measureTbId );
1199 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1201 int picturesTbId = createTool( tr( "TOOL_PICTURES" ) );
1202 createTool( GEOMOp::OpPictureImport, picturesTbId );
1204 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1207 // int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1209 //@@ 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 @@//
1211 // ---- create popup menus --------------------------
1213 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1214 QString clientOCC = "(client='OCCViewer')";
1215 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1216 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1218 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1219 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1220 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1221 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1223 QString autoColorPrefix =
1224 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1226 QtxPopupMgr* mgr = popupMgr();
1228 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1229 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
1230 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1231 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1232 mgr->insert( action( GEOMOp::OpShowChildren ), -1, -1 ); // show children
1233 mgr->setRule( action( GEOMOp::OpShowChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasHiddenChildren=true"), QtxPopupMgr::VisibleRule );
1235 mgr->insert( action( GEOMOp::OpHideChildren ), -1, -1 ); // hide children
1236 mgr->setRule( action( GEOMOp::OpHideChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasShownChildren=true"), QtxPopupMgr::VisibleRule );
1237 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1238 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1239 mgr->insert( separator(), -1, -1 ); // -----------
1241 #if OCC_VERSION_LARGE > 0x06050200
1242 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1243 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true";
1244 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1245 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule, QtxPopupMgr::VisibleRule );
1246 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1247 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1248 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC, QtxPopupMgr::VisibleRule );
1250 mgr->insert( separator(), -1, -1 ); // -----------
1251 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1252 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1253 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1254 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1255 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1256 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1257 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1258 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1259 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1260 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1261 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1262 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1263 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1264 mgr->insert( separator(), dispmodeId, -1 );
1265 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1266 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1267 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1268 mgr->insert( separator(), -1, -1 ); // -----------
1269 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1270 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1271 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1272 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1273 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1274 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1275 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1276 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1277 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1278 //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1279 mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1280 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 ); // material properties
1281 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'}) and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1282 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 ); // texture
1283 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1285 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1286 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1287 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1289 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1290 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1292 mgr->insert( separator(), -1, -1 ); // -----------
1293 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1294 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1295 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1296 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1297 mgr->insert( separator(), -1, -1 ); // -----------
1299 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1300 onlyComponent = "((type='Component') and selcount=1)",
1301 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1302 types = "'Shape' 'Group'";
1304 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1305 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1307 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1308 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1310 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1311 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1313 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1315 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1316 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1317 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1318 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1319 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1320 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1321 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1322 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1323 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1324 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1325 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1326 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1327 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1328 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1329 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1330 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1331 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1332 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1333 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1334 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1335 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1336 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1337 mgr->insert( separator(), selectonlyId, -1);
1338 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1339 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1340 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1341 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1342 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1344 mgr->insert( separator(), -1, -1 ); // -----------
1345 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1346 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
1349 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1350 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1352 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1353 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1355 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1358 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1360 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1361 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1362 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1366 //=======================================================================
1367 // function : GeometryGUI::activateModule()
1368 // purpose : Called when GEOM module is activated
1369 //=======================================================================
1370 bool GeometryGUI::activateModule( SUIT_Study* study )
1372 if ( CORBA::is_nil( myComponentGeom ) )
1375 bool res = SalomeApp_Module::activateModule( study );
1379 setMenuShown( true );
1380 setToolShown( true );
1382 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1383 PyGILState_STATE gstate = PyGILState_Ensure();
1384 PyObject* pluginsmanager=PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1385 if(pluginsmanager==NULL)
1389 PyObject* result=PyObject_CallMethod( pluginsmanager, (char*)"initialize", (char*)"isss",1,"geom",tr("MEN_NEW_ENTITY").toStdString().c_str(),tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1394 PyGILState_Release(gstate);
1395 // end of GEOM plugins loading
1397 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1398 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1400 // Reset actions accelerator keys
1401 action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1402 action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1403 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1405 GUIMap::Iterator it;
1406 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1407 it.value()->activate( application()->desktop() );
1409 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1411 SUIT_ViewManager* vm;
1412 ViewManagerList OCCViewManagers, VTKViewManagers;
1414 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1415 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1416 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1417 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1419 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1420 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1421 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1422 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1425 SALOME_ListIO selected;
1426 sm->selectedObjects( selected );
1427 sm->clearSelected();
1429 // disable OCC selectors
1430 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1431 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1432 while ( itOCCSel.hasNext() )
1433 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1434 sr->setEnabled(true);
1436 // disable VTK selectors
1437 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1438 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1439 while ( itVTKSel.hasNext() )
1440 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1441 sr->setEnabled(true);
1443 sm->setSelectedObjects( selected, true ); //NPAL 19674
1445 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1447 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1449 // 0020836 (Basic vectors and origin)
1450 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1451 if( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1452 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1454 _PTR(Study) studyDS = appStudy->studyDS();
1456 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1457 if( !aSComponent ) // create objects automatically only if there is no GEOM component
1458 createOriginAndBaseVectors();
1467 //=======================================================================
1468 // function : GeometryGUI::deactivateModule()
1469 // purpose : Called when GEOM module is deactivated
1470 //=======================================================================
1471 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1473 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1475 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1477 setMenuShown( false );
1478 setToolShown( false );
1480 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1481 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1483 EmitSignalCloseAllDialogs();
1485 GUIMap::Iterator it;
1486 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1487 it.value()->deactivate();
1489 // Unset actions accelerator keys
1490 action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1491 action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1492 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1494 qDeleteAll(myOCCSelectors);
1495 myOCCSelectors.clear();
1496 getApp()->selectionMgr()->setEnabled( true, OCCViewer_Viewer::Type() );
1498 qDeleteAll(myVTKSelectors);
1499 myVTKSelectors.clear();
1500 getApp()->selectionMgr()->setEnabled( true, SVTK_Viewer::Type() );
1502 return SalomeApp_Module::deactivateModule( study );
1505 //=======================================================================
1506 // function : onWindowActivated()
1507 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1508 //=======================================================================
1509 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1514 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1515 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1517 // disable non-OCC viewframe menu commands
1518 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1519 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1520 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1521 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1522 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1523 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1524 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1526 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1527 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1529 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1532 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1534 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1535 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1538 void GeometryGUI::viewManagers( QStringList& lst ) const
1540 lst.append( OCCViewer_Viewer::Type() );
1543 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1545 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1547 qDebug( "connect" );
1548 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1549 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1550 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1551 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1552 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1553 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1554 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1555 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1557 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1558 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1560 // disable OCC selectors
1561 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1562 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1563 while ( itOCCSel.hasNext() )
1564 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1565 sr->setEnabled(true);
1567 else if ( vm->getType() == SVTK_Viewer::Type() )
1569 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1570 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1572 // disable VTK selectors
1573 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1574 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1575 while ( itVTKSel.hasNext() )
1576 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1577 sr->setEnabled(true);
1581 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1583 SUIT_ViewModel* viewer = vm->getViewModel();
1584 if ( vm->getType() == OCCViewer_Viewer::Type() )
1586 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1587 while ( itOCCSel.hasNext() )
1588 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1589 if ( sr->viewer() == viewer )
1591 delete myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1595 if ( vm->getType() == SVTK_Viewer::Type() )
1597 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1598 while ( itVTKSel.hasNext() )
1599 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1600 if ( sr->viewer() == viewer )
1602 delete myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1608 QString GeometryGUI::engineIOR() const
1610 if ( !CORBA::is_nil( GetGeomGen() ) )
1611 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
1615 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1616 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
1618 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
1620 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
1622 theWidth = theHeight = 0;
1624 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1625 Handle(TColStd_HArray1OfByte) aTexture;
1627 Handle(Graphic3d_HArray1OfBytes) aTexture;
1631 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
1632 aTexture = aTextureMap[ theId ];
1633 if ( aTexture.IsNull() ) {
1634 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
1635 if ( !aInsOp->_is_nil() ) {
1636 CORBA::Long aWidth, aHeight;
1637 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
1638 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
1640 theHeight = aHeight;
1642 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1643 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
1645 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
1648 for (int i = 0; i < aStream->length(); i++)
1649 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
1650 aTextureMap[ theId ] = aTexture;
1658 LightApp_Selection* GeometryGUI::createSelection() const
1660 return new GEOMGUI_Selection();
1663 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
1665 SalomeApp_Module::contextMenuPopup( client, menu, title );
1669 getApp()->selectionMgr()->selectedObjects(lst);
1670 if (lst.Extent() < 1)
1673 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
1674 _PTR(Study) study = appStudy->studyDS();
1676 bool isImported = true;
1677 SALOME_ListIteratorOfListIO anIt (lst);
1678 for (; anIt.More() && isImported; anIt.Next()) {
1679 Handle(SALOME_InteractiveObject) io = anIt.Value();
1680 _PTR(SObject) aSObj = study->FindObjectID(io->getEntry());
1682 if (lst.Extent() == 1) {
1683 // Set context menu title
1684 if (client == "OCCViewer" || client == "VTKViewer")
1685 title = QString(aSObj->GetName().c_str());
1688 CORBA::Object_var anObj = GeometryGUI::ClientSObjectToObject(aSObj);
1689 GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(anObj);
1690 if (CORBA::is_nil(aGeomObj) || aGeomObj->GetType() != GEOM_IMPORT)
1698 menu->addAction(action(GEOMOp::OpReimport)); // Reload imported shape
1703 void GeometryGUI::createPreferences()
1705 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
1707 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
1708 setPreferenceProperty( genGroup, "columns", 2 );
1710 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
1711 LightApp_Preferences::Selector,
1712 "Geometry", "display_mode" );
1714 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
1715 LightApp_Preferences::Color, "Geometry", "shading_color" );
1717 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
1718 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
1720 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
1721 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
1723 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
1724 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
1726 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
1727 LightApp_Preferences::Color, "Geometry", "line_color" );
1729 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
1730 LightApp_Preferences::Color, "Geometry", "point_color" );
1732 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
1733 LightApp_Preferences::Color, "Geometry", "isos_color" );
1735 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
1736 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
1738 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
1739 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
1741 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
1742 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
1744 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
1745 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
1747 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
1748 LightApp_Preferences::Selector,
1749 "Geometry", "material" );
1755 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
1756 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
1758 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
1759 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
1761 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
1762 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
1764 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
1765 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
1767 for(int i = 0; i < nb; i++) {
1768 setPreferenceProperty( wd[i], "min", 1 );
1769 setPreferenceProperty( wd[i], "max", 5 );
1773 // Quantities with individual precision settings
1774 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
1775 setPreferenceProperty( precGroup, "columns", 2 );
1777 const int nbQuantities = 8;
1778 int prec[nbQuantities], ii = 0;
1779 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
1780 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
1781 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
1782 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
1783 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
1784 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
1785 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
1786 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
1787 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
1788 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
1789 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
1790 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
1791 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
1792 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
1793 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
1794 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
1796 // Set property for precision value for spinboxes
1797 for ( ii = 0; ii < nbQuantities; ii++ ){
1798 setPreferenceProperty( prec[ii], "min", -14 );
1799 setPreferenceProperty( prec[ii], "max", 14 );
1800 setPreferenceProperty( prec[ii], "precision", 2 );
1803 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
1804 setPreferenceProperty( VertexGroup, "columns", 2 );
1806 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
1807 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
1809 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
1810 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
1812 // Set property for default display mode
1813 QStringList aModesList;
1814 aModesList.append( tr("MEN_WIREFRAME") );
1815 aModesList.append( tr("MEN_SHADING") );
1816 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
1818 QList<QVariant> anIndexesList;
1819 anIndexesList.append(0);
1820 anIndexesList.append(1);
1821 anIndexesList.append(2);
1823 setPreferenceProperty( dispmode, "strings", aModesList );
1824 setPreferenceProperty( dispmode, "indexes", anIndexesList );
1827 // Set property for top level display mode
1828 QStringList aTopModesList;
1829 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
1830 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
1831 aTopModesList.append( tr("MEN_WIREFRAME") );
1832 aTopModesList.append( tr("MEN_SHADING") );
1833 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
1835 QList<QVariant> aTopIndexesList;
1836 aTopIndexesList.append(0);
1837 aTopIndexesList.append(1);
1838 aTopIndexesList.append(2);
1839 aTopIndexesList.append(3);
1840 aTopIndexesList.append(4);
1842 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
1843 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
1845 // Set property for step value for spinboxes
1846 setPreferenceProperty( step, "min", 1 );
1847 setPreferenceProperty( step, "max", 10000 );
1848 setPreferenceProperty( step, "precision", 3 );
1850 // Set property for deflection value for spinboxes
1851 setPreferenceProperty( defl, "min", DEFLECTION_MIN );
1852 setPreferenceProperty( defl, "max", 1.0 );
1853 setPreferenceProperty( defl, "step", 1.0e-04 );
1854 setPreferenceProperty( defl, "precision", 6 );
1856 // Set property for default material
1857 Material_ResourceMgr aMatResMgr;
1858 setPreferenceProperty( material, "strings", aMatResMgr.materials() );
1860 // Set property vertex marker type
1861 QList<QVariant> aMarkerTypeIndicesList;
1862 QList<QVariant> aMarkerTypeIconsList;
1864 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1865 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
1866 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
1867 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
1868 aMarkerTypeIndicesList << (i-1);
1869 aMarkerTypeIconsList << pixmap;
1872 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
1873 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
1875 // Set property for vertex marker scale
1876 QList<QVariant> aMarkerScaleIndicesList;
1877 QStringList aMarkerScaleValuesList;
1879 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
1880 aMarkerScaleIndicesList << iii;
1881 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
1884 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
1885 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
1887 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
1888 setPreferenceProperty( originGroup, "columns", 2 );
1890 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
1891 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
1892 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
1893 setPreferenceProperty( baseVectorsLength, "max", 1000 );
1895 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
1896 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
1899 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
1900 setPreferenceProperty( operationsGroup, "columns", 2 );
1902 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
1903 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
1906 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
1908 if (section == "Geometry") {
1909 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1910 if (param == QString("SettingsGeomStep")) {
1911 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
1912 EmitSignalDefaultStepValueChanged(spin_step);
1913 } else if(param == QString("toplevel_color")) {
1914 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1915 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1916 } else if(param == QString("toplevel_dm")) {
1917 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
1922 LightApp_Displayer* GeometryGUI::displayer()
1925 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
1929 void GeometryGUI::setLocalSelectionMode(const int mode)
1931 myLocalSelectionMode = mode;
1933 int GeometryGUI::getLocalSelectionMode() const
1935 return myLocalSelectionMode;
1938 const char gSeparator = '_'; // character used to separate parameter names
1939 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
1942 * \brief Store visual parameters
1944 * This method is called just before the study document is saved.
1945 * Store visual parameters in AttributeParameter attribute(s)
1947 void GeometryGUI::storeVisualParameters (int savePoint)
1949 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
1950 if ( !appStudy || !appStudy->studyDS() )
1952 _PTR(Study) studyDS = appStudy->studyDS();
1954 // componentName is used for encoding of entries when storing them in IParameters
1955 std::string componentName = myComponentGeom->ComponentDataType();
1956 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1957 //if (!aSComponent) return;
1960 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
1961 componentName.c_str(),
1963 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
1965 QList<SUIT_ViewManager*> lst;
1966 QList<SUIT_ViewManager*>::Iterator it;
1968 // main cycle to store parameters of displayed objects
1970 getApp()->viewManagers(lst);
1971 for (it = lst.begin(); it != lst.end(); it++) {
1972 SUIT_ViewManager* vman = *it;
1973 QString vType = vman->getType();
1974 int aMgrId = vman->getGlobalId();
1975 // saving VTK actors properties
1976 QVector<SUIT_ViewWindow*> views = vman->getViews();
1977 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
1978 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
1979 ObjMap::ConstIterator o_it = anObjects.begin();
1980 for (; o_it != anObjects.end(); o_it++) {
1981 const PropMap aProps = o_it.value();
1983 //Check that object exists in the study
1984 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
1985 if ( !obj || !(aProps.count() > 0))
1987 // entry is "encoded" = it does NOT contain component adress, since it is a
1988 // subject to change on next component loading
1990 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
1992 _PTR(GenericAttribute) anAttr;
1993 if( !obj->FindAttribute(anAttr, "AttributeIOR"))
1996 std::string param,occParam = vType.toLatin1().data();
1997 occParam += NAME_SEPARATOR;
1998 occParam += QString::number(aMgrId).toLatin1().data();
1999 occParam += NAME_SEPARATOR;
2001 if(aProps.contains(VISIBILITY_PROP)) {
2002 param = occParam + VISIBILITY_PROP;
2003 ip->setParameter(entry, param, aProps.value(VISIBILITY_PROP).toInt() == 1 ? "On" : "Off");
2006 if(aProps.contains(DISPLAY_MODE_PROP)) {
2007 param = occParam + DISPLAY_MODE_PROP;
2008 ip->setParameter(entry, param, QString::number(aProps.value(DISPLAY_MODE_PROP).toInt()).toLatin1().data());
2011 if(aProps.contains(COLOR_PROP)) {
2012 QColor c = aProps.value(COLOR_PROP).value<QColor>();
2013 QString colorStr = QString::number(c.red()/255.);
2014 colorStr += DIGIT_SEPARATOR; colorStr += QString::number(c.green()/255.);
2015 colorStr += DIGIT_SEPARATOR; colorStr += QString::number(c.blue()/255.);
2016 param = occParam + COLOR_PROP;
2017 ip->setParameter(entry, param, colorStr.toLatin1().data());
2020 if(vType == SVTK_Viewer::Type()) {
2021 if(aProps.contains(OPACITY_PROP)) {
2022 param = occParam + OPACITY_PROP;
2023 ip->setParameter(entry, param, QString::number(1. - aProps.value(TRANSPARENCY_PROP).toDouble()).toLatin1().data());
2025 } else if (vType == SOCC_Viewer::Type()) {
2026 if(aProps.contains(TRANSPARENCY_PROP)) {
2027 param = occParam + TRANSPARENCY_PROP;
2028 ip->setParameter(entry, param, QString::number(aProps.value(TRANSPARENCY_PROP).toDouble()).toLatin1().data());
2031 if(aProps.contains(TOP_LEVEL_PROP)) {
2032 param = occParam + TOP_LEVEL_PROP;
2033 Standard_Boolean val = aProps.value(TOP_LEVEL_PROP).value<Standard_Boolean>();
2034 if (val == Standard_True)
2035 ip->setParameter(entry, param, "1");
2039 if(aProps.contains(ISOS_PROP)) {
2040 param = occParam + ISOS_PROP;
2041 ip->setParameter(entry, param, aProps.value(ISOS_PROP).toString().toLatin1().data());
2044 if(aProps.contains(VECTOR_MODE_PROP)) {
2045 param = occParam + VECTOR_MODE_PROP;
2046 ip->setParameter(entry, param, QString::number(aProps.value(VECTOR_MODE_PROP).toInt()).toLatin1().data());
2049 if(aProps.contains(DEFLECTION_COEFF_PROP)) {
2050 param = occParam + DEFLECTION_COEFF_PROP;
2051 ip->setParameter(entry, param, QString::number(aProps.value(DEFLECTION_COEFF_PROP).toDouble()).toLatin1().data());
2054 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2055 if(aProps.contains(MARKER_TYPE_PROP)) {
2056 param = occParam + MARKER_TYPE_PROP;
2057 ip->setParameter(entry, param, aProps.value(MARKER_TYPE_PROP).toString().toLatin1().data());
2060 if(aProps.contains(MATERIAL_PROP)) {
2061 param = occParam + MATERIAL_PROP;
2062 ip->setParameter(entry, param, aProps.value(MATERIAL_PROP).toString().toLatin1().data());
2065 if(aProps.contains( EDGE_WIDTH_PROP )) {
2066 param = occParam + EDGE_WIDTH_PROP;
2067 ip->setParameter(entry, param, aProps.value(EDGE_WIDTH_PROP).toString().toLatin1().data());
2070 if(aProps.contains( ISOS_WIDTH_PROP )) {
2071 param = occParam + ISOS_WIDTH_PROP;
2072 ip->setParameter(entry, param, aProps.value(ISOS_WIDTH_PROP).toString().toLatin1().data());
2074 } // object iterator
2076 } // for (viewManagers)
2080 * \brief Restore visual parameters
2082 * This method is called after the study document is opened.
2083 * Restore visual parameters from AttributeParameter attribute(s)
2085 void GeometryGUI::restoreVisualParameters (int savePoint)
2087 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2088 if (!appStudy || !appStudy->studyDS())
2090 _PTR(Study) studyDS = appStudy->studyDS();
2092 // componentName is used for encoding of entries when storing them in IParameters
2093 std::string componentName = myComponentGeom->ComponentDataType();
2094 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2095 //if (!aSComponent) return;
2098 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2099 componentName.c_str(),
2101 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2103 std::vector<std::string> entries = ip->getEntries();
2105 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2107 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2108 QString entry (ip->decodeEntry(*entIt).c_str());
2110 // Check that the entry corresponds to a real object in the Study
2111 // as the object may be deleted or modified after the visual state is saved.
2112 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2113 if (!so) continue; //Skip the not existent entry
2115 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2116 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2118 std::vector<std::string>::iterator namesIt = paramNames.begin();
2119 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2121 // actors are stored in a map after displaying of them for
2122 // quicker access in the future: map < viewID to actor >
2123 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2124 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2126 QString viewerTypStr;
2127 QString viewIndexStr;
2129 QVector<PropMap> aListOfMap;
2131 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2133 // visual parameters are stored in strings as follows: ViewerType_ViewIndex_ParamName.
2134 // '_' is used as separator and should not be used in viewer type or parameter names.
2135 QStringList lst = QString((*namesIt).c_str()).split(NAME_SEPARATOR, QString::SkipEmptyParts);
2136 if (lst.size() != 3)
2139 viewerTypStr = lst[0];
2140 viewIndexStr = lst[1];
2141 QString paramNameStr = lst[2];
2144 viewIndex = viewIndexStr.toUInt(&ok);
2145 if (!ok) // bad conversion of view index to integer
2148 if((viewIndex + 1) > aListOfMap.count()) {
2149 aListOfMap.resize(viewIndex + 1);
2152 QString val((*valuesIt).c_str());
2153 if(paramNameStr == VISIBILITY_PROP){
2154 aListOfMap[viewIndex].insert(VISIBILITY_PROP, val == "On" ? 1 : 0);
2156 } else if(paramNameStr == OPACITY_PROP) {
2157 aListOfMap[viewIndex].insert(TRANSPARENCY_PROP, 1. - val.toDouble());
2159 } else if(paramNameStr == TRANSPARENCY_PROP) {
2160 aListOfMap[viewIndex].insert( TRANSPARENCY_PROP, val.toDouble() );
2162 } else if(paramNameStr == TOP_LEVEL_PROP) {
2163 aListOfMap[viewIndex].insert( TRANSPARENCY_PROP, val == "1" ? Standard_True : Standard_False );
2165 } else if(paramNameStr == DISPLAY_MODE_PROP) {
2166 aListOfMap[viewIndex].insert( DISPLAY_MODE_PROP, val.toInt());
2168 } else if(paramNameStr == ISOS_PROP) {
2169 aListOfMap[viewIndex].insert( ISOS_PROP, val);
2171 } else if(paramNameStr == COLOR_PROP) {
2172 QStringList rgb = val.split(DIGIT_SEPARATOR);
2173 if(rgb.count() == 3) {
2174 QColor c(int(rgb[0].toDouble()*255), int(rgb[1].toDouble()*255), int(rgb[2].toDouble()*255));
2175 aListOfMap[viewIndex].insert( COLOR_PROP, c);
2177 } else if(paramNameStr == VECTOR_MODE_PROP) {
2178 aListOfMap[viewIndex].insert( VECTOR_MODE_PROP, val.toInt());
2180 } else if(paramNameStr == DEFLECTION_COEFF_PROP) {
2181 aListOfMap[viewIndex].insert( DEFLECTION_COEFF_PROP, val.toDouble());
2182 } else if(paramNameStr == MARKER_TYPE_PROP) {
2183 aListOfMap[viewIndex].insert( MARKER_TYPE_PROP, val);
2184 } else if(paramNameStr == MATERIAL_PROP) {
2185 aListOfMap[viewIndex].insert( MATERIAL_PROP, val);
2186 } else if(paramNameStr == EDGE_WIDTH_PROP) {
2187 aListOfMap[viewIndex].insert( EDGE_WIDTH_PROP , val);
2188 } else if(paramNameStr == ISOS_WIDTH_PROP) {
2189 aListOfMap[viewIndex].insert( ISOS_WIDTH_PROP , val);
2194 } // for names/parameters iterator
2196 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2198 for (int index = 0; index < aListOfMap.count(); index++) {
2200 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
2202 //Get Visibility property of the current PropMap
2203 if (aListOfMap[index].value(VISIBILITY_PROP) == 1) {
2204 SUIT_ViewManager* vman = lst.at(index);
2205 SUIT_ViewModel* vmodel = vman->getViewModel();
2206 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
2210 } // for entries iterator
2212 // update all VTK and OCC views
2213 QList<SUIT_ViewManager*> lst;
2214 getApp()->viewManagers(lst);
2215 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
2216 SUIT_ViewModel* vmodel = (*it)->getViewModel();
2219 if (vmodel->getType() == SVTK_Viewer::Type()) {
2220 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
2221 vtkView->getRenderer()->ResetCameraClippingRange();
2224 else if (vmodel->getType() == SOCC_Viewer::Type()) {
2225 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
2226 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
2233 void GeometryGUI::onViewAboutToShow()
2235 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
2236 QAction* a = action( GEOMOp::OpSwitchVectors );
2238 a->setEnabled(true);
2239 bool vmode = window->property("VectorsMode").toBool();
2240 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
2242 a->setText ( tr("MEN_VECTOR_MODE_ON") );
2243 a->setEnabled(false);
2248 \brief Return action by id
2249 \param id identifier of the action
2252 QAction* GeometryGUI::getAction(const int id) {
2257 \brief Check if this object is can't be renamed in place
2259 This method can be re-implemented in the subclasses.
2260 Return true in case if object isn't reference or component (module root).
2262 \param entry column id
2263 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
2265 bool GeometryGUI::renameAllowed( const QString& entry) const {
2267 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
2268 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
2269 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
2271 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
2276 Rename object by entry.
2277 \param entry entry of the object
2278 \param name new name of the object
2279 \brief Return \c true if rename operation finished successfully, \c false otherwise.
2281 bool GeometryGUI::renameObject( const QString& entry, const QString& name) {
2283 bool result = false;
2285 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
2286 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
2291 _PTR(Study) aStudy = appStudy->studyDS();
2296 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
2298 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
2302 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
2303 _PTR(GenericAttribute) anAttr;
2305 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
2306 _PTR(AttributeName) aName (anAttr);
2308 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
2309 if (!CORBA::is_nil(anObj)) {
2310 aName->SetValue( name.toLatin1().data() ); // rename the SObject
2311 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object