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::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
553 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
554 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
555 libName = "MeasureGUI";
557 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
558 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
559 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
560 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
561 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
562 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
563 libName = "GroupGUI";
565 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
566 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
567 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
568 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
569 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
570 libName = "BlocksGUI";
572 case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
573 case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
574 // case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
575 case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
576 case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
577 //@@ 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 @@//
578 libName = "AdvancedGUI";
584 GEOMGUI* library = 0;
585 if ( !libName.isEmpty() ) {
587 libName = QString( "lib" ) + libName + ".so";
589 libName = libName + ".dll";
591 library = getLibrary( libName );
594 // call method of corresponding GUI library
596 library->OnGUIEvent( id, desk );
598 // Update a list of materials for "Preferences" dialog
599 if ( id == GEOMOp::OpMaterialProperties ) {
600 LightApp_Preferences* pref = preferences();
602 Material_ResourceMgr aMatResMgr;
603 setPreferenceProperty( pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true )->id(),
605 aMatResMgr.materials() );
610 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
613 //=================================================================================
614 // function : GeometryGUI::OnKeyPress()
615 // purpose : Called when any key is pressed by user [static]
616 //=================================================================================
617 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
619 if ( !application() )
621 foreach ( GEOMGUI* lib, myGUIMap )
622 lib->OnKeyPress( e, application()->desktop(), w );
625 //=================================================================================
626 // function : GeometryGUI::OnMouseMove()
627 // purpose : Manages mouse move events [static]
628 //=================================================================================
629 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
631 if ( !application() )
633 foreach ( GEOMGUI* lib, myGUIMap )
634 lib->OnMouseMove( e, application()->desktop(), w );
637 //=================================================================================
638 // function : GeometryGUI::OnMouseRelease()
639 // purpose : Manages mouse release events [static]
640 //=================================================================================
641 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
643 if ( !application() )
645 foreach ( GEOMGUI* lib, myGUIMap )
646 lib->OnMouseRelease( e, application()->desktop(), w );
649 //=================================================================================
650 // function : GeometryGUI::OnMousePress()
651 // purpose : Manage mouse press events [static]
652 //=================================================================================
653 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
655 if ( !application() )
657 foreach ( GEOMGUI* lib, myGUIMap )
658 lib->OnMousePress( e, application()->desktop(), w );
661 //=======================================================================
662 // function : createGeomAction
664 //=======================================================================
665 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
666 const int accel, const bool toggle, const QString& shortcutAction )
668 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
669 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
670 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
672 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
674 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
675 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
677 application()->desktop(),
679 this, SLOT( OnGUIEvent() ),
683 //=======================================================================
684 // function : createOriginAndBaseVectors
686 //=======================================================================
687 void GeometryGUI::createOriginAndBaseVectors()
689 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
691 _PTR(Study) studyDS = appStudy->studyDS();
692 if( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
693 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
694 if( !aBasicOperations->_is_nil() ) {
695 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
696 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
697 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
698 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
699 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
700 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
702 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
703 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
704 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
705 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
706 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
708 getApp()->updateObjectBrowser( false );
714 //=======================================================================
715 // function : GeometryGUI::initialize()
716 // purpose : Called when GEOM module is created
717 //=======================================================================
718 void GeometryGUI::initialize( CAM_Application* app )
720 SalomeApp_Module::initialize( app );
722 // ----- create actions --------------
724 createGeomAction( GEOMOp::OpImport, "IMPORT", "", Qt::ControlModifier + Qt::Key_I );
725 createGeomAction( GEOMOp::OpExport, "EXPORT", "", Qt::ControlModifier + Qt::Key_E );
727 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
729 createGeomAction( GEOMOp::OpPoint, "POINT" );
730 createGeomAction( GEOMOp::OpLine, "LINE" );
731 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
732 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
733 createGeomAction( GEOMOp::OpArc, "ARC" );
734 createGeomAction( GEOMOp::OpCurve, "CURVE" );
735 createGeomAction( GEOMOp::OpVector, "VECTOR" );
736 createGeomAction( GEOMOp::OpPlane, "PLANE" );
737 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
738 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
740 createGeomAction( GEOMOp::OpBox, "BOX" );
741 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
742 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
743 createGeomAction( GEOMOp::OpTorus, "TORUS" );
744 createGeomAction( GEOMOp::OpCone, "CONE" );
745 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
746 createGeomAction( GEOMOp::OpDisk, "DISK" );
748 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
749 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
750 createGeomAction( GEOMOp::OpFilling, "FILLING" );
751 createGeomAction( GEOMOp::OpPipe, "PIPE" );
753 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
754 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
755 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
756 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
757 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
759 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
761 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
762 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
764 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
765 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
766 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
768 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
770 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
772 createGeomAction( GEOMOp::OpEdge, "EDGE" );
773 createGeomAction( GEOMOp::OpWire, "WIRE" );
774 createGeomAction( GEOMOp::OpFace, "FACE" );
775 createGeomAction( GEOMOp::OpShell, "SHELL" );
776 createGeomAction( GEOMOp::OpSolid, "SOLID" );
777 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
779 createGeomAction( GEOMOp::OpFuse, "FUSE" );
780 createGeomAction( GEOMOp::OpCommon, "COMMON" );
781 createGeomAction( GEOMOp::OpCut, "CUT" );
782 createGeomAction( GEOMOp::OpSection, "SECTION" );
784 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
785 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
786 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
787 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
788 createGeomAction( GEOMOp::OpScale, "SCALE" );
789 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
790 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
791 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
792 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
794 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
795 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
796 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
797 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
798 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
799 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
800 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
801 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
802 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
803 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
804 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
806 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
807 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
808 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
810 createGeomAction( GEOMOp::OpSewing, "SEWING" );
811 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
812 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
813 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
814 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
815 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
816 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
817 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
818 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
819 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
820 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
821 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
822 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
823 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
824 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
826 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
827 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
828 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
829 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
830 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
831 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
832 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
833 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
835 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
836 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
837 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
838 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
839 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
840 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
842 #ifdef _DEBUG_ // PAL16821
843 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
846 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
847 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
848 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
849 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
850 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
851 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
852 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
853 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
854 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
855 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
856 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
857 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
858 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
859 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
860 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
861 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
862 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
863 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
864 createGeomAction( GEOMOp::OpHide, "ERASE" );
866 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
867 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
868 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
869 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
870 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
871 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
872 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
873 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
874 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
875 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
876 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
877 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
878 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
879 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
880 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
881 createGeomAction( GEOMOp::OpShowChildren, "POP_SHOW_CHILDREN" );
882 createGeomAction( GEOMOp::OpHideChildren, "POP_HIDE_CHILDREN" );
883 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
884 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
885 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
886 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
888 createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
890 // Create actions for increase/decrease transparency shortcuts
891 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
892 "Geometry:Increase transparency");
893 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
894 "Geometry:Decrease transparency");
896 // Create actions for increase/decrease number of isolines
897 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
898 "Geometry:Increase number of isolines");
899 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
900 "Geometry:Decrease number of isolines");
902 // createGeomAction( GEOMOp::OpPipeTShapeGroups, "PIPETSHAPEGROUPS" );
903 createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
904 createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
905 //@@ 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 @@//
907 // ---- create menus --------------------------
909 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
910 createMenu( separator(), fileId, 10 );
911 createMenu( GEOMOp::OpImport, fileId, 10 );
912 createMenu( GEOMOp::OpExport, fileId, 10 );
913 createMenu( separator(), fileId, -1 );
915 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
916 createMenu( GEOMOp::OpDelete, editId, -1 );
918 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
920 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
921 createMenu( GEOMOp::OpPoint, basicId, -1 );
922 createMenu( GEOMOp::OpLine, basicId, -1 );
923 createMenu( GEOMOp::OpCircle, basicId, -1 );
924 createMenu( GEOMOp::OpEllipse, basicId, -1 );
925 createMenu( GEOMOp::OpArc, basicId, -1 );
926 createMenu( GEOMOp::OpCurve, basicId, -1 );
927 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
928 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
929 createMenu( separator(), basicId, -1 );
930 createMenu( GEOMOp::OpVector, basicId, -1 );
931 createMenu( GEOMOp::OpPlane, basicId, -1 );
932 createMenu( GEOMOp::OpLCS, basicId, -1 );
933 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
935 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
936 createMenu( GEOMOp::OpBox, primId, -1 );
937 createMenu( GEOMOp::OpCylinder, primId, -1 );
938 createMenu( GEOMOp::OpSphere, primId, -1 );
939 createMenu( GEOMOp::OpTorus, primId, -1 );
940 createMenu( GEOMOp::OpCone, primId, -1 );
941 createMenu( GEOMOp::OpRectangle, primId, -1 );
942 createMenu( GEOMOp::OpDisk, primId, -1 );
943 createMenu( GEOMOp::OpPipeTShape,primId, -1 );
945 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
946 createMenu( GEOMOp::OpPrism, genId, -1 );
947 createMenu( GEOMOp::OpRevolution, genId, -1 );
948 createMenu( GEOMOp::OpFilling, genId, -1 );
949 createMenu( GEOMOp::OpPipe, genId, -1 );
951 // int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
953 //@@ 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 @@//
955 createMenu( separator(), newEntId, -1 );
957 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
958 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
959 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
960 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
961 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
962 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
964 createMenu( separator(), newEntId, -1 );
966 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
967 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
968 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
969 createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
970 createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
972 createMenu( separator(), newEntId, -1 );
974 createMenu( GEOMOp::OpExplode, newEntId, -1 );
976 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
977 createMenu( GEOMOp::OpEdge, buildId, -1 );
978 createMenu( GEOMOp::OpWire, buildId, -1 );
979 createMenu( GEOMOp::OpFace, buildId, -1 );
980 createMenu( GEOMOp::OpShell, buildId, -1 );
981 createMenu( GEOMOp::OpSolid, buildId, -1 );
982 createMenu( GEOMOp::OpCompound, buildId, -1 );
984 createMenu( separator(), newEntId, -1 );
986 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
988 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
991 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
993 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
994 createMenu( GEOMOp::OpFuse, boolId, -1 );
995 createMenu( GEOMOp::OpCommon, boolId, -1 );
996 createMenu( GEOMOp::OpCut, boolId, -1 );
997 createMenu( GEOMOp::OpSection, boolId, -1 );
999 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1000 createMenu( GEOMOp::OpTranslate, transId, -1 );
1001 createMenu( GEOMOp::OpRotate, transId, -1 );
1002 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1003 createMenu( GEOMOp::OpMirror, transId, -1 );
1004 createMenu( GEOMOp::OpScale, transId, -1 );
1005 createMenu( GEOMOp::OpOffset, transId, -1 );
1006 createMenu( GEOMOp::OpProjection, transId, -1 );
1007 createMenu( separator(), transId, -1 );
1008 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1009 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1011 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1012 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1013 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1014 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1016 createMenu( separator(), operId, -1 );
1018 createMenu( GEOMOp::OpPartition, operId, -1 );
1019 createMenu( GEOMOp::OpArchimede, operId, -1 );
1020 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1021 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1023 createMenu( separator(), operId, -1 );
1025 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1026 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1027 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1028 createMenu( GEOMOp::OpChamfer, operId, -1 );
1029 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1030 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1031 //createMenu( GEOMOp::OpClipping, operId, -1 );
1033 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1034 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1035 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1036 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1037 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1038 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1039 createMenu( GEOMOp::OpSewing, repairId, -1 );
1040 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1041 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1042 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1043 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1044 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1045 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1046 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1047 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1048 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1050 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1051 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1052 createMenu( GEOMOp::OpProperties, measurId, -1 );
1053 createMenu( separator(), measurId, -1 );
1054 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1055 createMenu( GEOMOp::OpInertia, measurId, -1 );
1056 createMenu( GEOMOp::OpNormale, measurId, -1 );
1057 createMenu( separator(), measurId, -1 );
1058 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1059 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1060 createMenu( separator(), measurId, -1 );
1062 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1063 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1064 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1065 createMenu( GEOMOp::OpAngle, dimId, -1 );
1067 createMenu( separator(), measurId, -1 );
1068 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1069 createMenu( separator(), measurId, -1 );
1070 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1071 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1072 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1073 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1074 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1076 #ifdef _DEBUG_ // PAL16821
1077 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1078 createMenu( separator(), toolsId, -1 );
1079 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1082 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1083 createMenu( separator(), viewId, -1 );
1085 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1086 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1087 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1088 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1089 createMenu( separator(), dispmodeId, -1 );
1090 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1092 createMenu( separator(), viewId, -1 );
1093 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1094 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1095 createMenu( separator(), viewId, -1 );
1096 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1097 createMenu( separator(), viewId, -1 );
1101 because of these items are accessible through object browser and viewers
1102 we have removed they from main menu
1104 createMenu( GEOMOp::OpShow, viewId, -1 );
1105 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1106 createMenu( GEOMOp::OpHide, viewId, -1 );
1109 // ---- create toolbars --------------------------
1111 int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1112 createTool( GEOMOp::OpPoint, basicTbId );
1113 createTool( GEOMOp::OpLine, basicTbId );
1114 createTool( GEOMOp::OpCircle, basicTbId );
1115 createTool( GEOMOp::OpEllipse, basicTbId );
1116 createTool( GEOMOp::OpArc, basicTbId );
1117 createTool( GEOMOp::OpCurve, basicTbId );
1118 createTool( GEOMOp::OpVector, basicTbId );
1119 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1120 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1121 createTool( GEOMOp::OpPlane, basicTbId );
1122 createTool( GEOMOp::OpLCS, basicTbId );
1123 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1125 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ) );
1126 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1127 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1129 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1130 createTool( GEOMOp::OpBox, primTbId );
1131 createTool( GEOMOp::OpCylinder, primTbId );
1132 createTool( GEOMOp::OpSphere, primTbId );
1133 createTool( GEOMOp::OpTorus, primTbId );
1134 createTool( GEOMOp::OpCone, primTbId );
1135 createTool( GEOMOp::OpRectangle, primTbId );
1136 createTool( GEOMOp::OpDisk, primTbId );
1137 createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1139 int blocksTbId = createTool( tr( "TOOL_BLOCKS" ) );
1140 createTool( GEOMOp::OpDividedDisk, blocksTbId );
1141 createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1143 // int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) ); //rnc
1144 // createTool( GEOMOp::OpPipeTShape, advancedTbId );
1146 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1147 createTool( GEOMOp::OpFuse, boolTbId );
1148 createTool( GEOMOp::OpCommon, boolTbId );
1149 createTool( GEOMOp::OpCut, boolTbId );
1150 createTool( GEOMOp::OpSection, boolTbId );
1152 int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1153 createTool( GEOMOp::OpPrism, genTbId );
1154 createTool( GEOMOp::OpRevolution, genTbId );
1155 createTool( GEOMOp::OpFilling, genTbId );
1156 createTool( GEOMOp::OpPipe, genTbId );
1158 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1159 createTool( GEOMOp::OpTranslate, transTbId );
1160 createTool( GEOMOp::OpRotate, transTbId );
1161 createTool( GEOMOp::OpChangeLoc, transTbId );
1162 createTool( GEOMOp::OpMirror, transTbId );
1163 createTool( GEOMOp::OpScale, transTbId );
1164 createTool( GEOMOp::OpOffset, transTbId );
1165 createTool( GEOMOp::OpProjection, transTbId );
1166 createTool( separator(), transTbId );
1167 createTool( GEOMOp::OpMultiTranslate, transTbId );
1168 createTool( GEOMOp::OpMultiRotate, transTbId );
1170 int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1171 createTool( GEOMOp::OpExplode, operTbId );
1172 createTool( GEOMOp::OpPartition, operTbId );
1173 createTool( GEOMOp::OpArchimede, operTbId );
1174 createTool( GEOMOp::OpShapesOnShape, operTbId );
1175 createTool( GEOMOp::OpSharedShapes, operTbId );
1177 int featTbId = createTool( tr( "TOOL_FEATURES" ) );
1178 createTool( GEOMOp::OpFillet1d, featTbId );
1179 createTool( GEOMOp::OpFillet2d, featTbId );
1180 createTool( GEOMOp::OpFillet3d, featTbId );
1181 createTool( GEOMOp::OpChamfer, featTbId );
1182 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1183 createTool( GEOMOp::OpExtrudedCut, featTbId );
1185 int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1186 createTool( GEOMOp::OpEdge, buildTbId );
1187 createTool( GEOMOp::OpWire, buildTbId );
1188 createTool( GEOMOp::OpFace, buildTbId );
1189 createTool( GEOMOp::OpShell, buildTbId );
1190 createTool( GEOMOp::OpSolid, buildTbId );
1191 createTool( GEOMOp::OpCompound, buildTbId );
1193 int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1194 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1195 createTool( GEOMOp::OpProperties, measureTbId );
1196 createTool( GEOMOp::OpCenterMass, measureTbId );
1197 createTool( GEOMOp::OpInertia, measureTbId );
1198 createTool( GEOMOp::OpNormale, measureTbId );
1199 createTool( separator(), measureTbId );
1200 createTool( GEOMOp::OpBoundingBox, measureTbId );
1201 createTool( GEOMOp::OpMinDistance, measureTbId );
1202 createTool( GEOMOp::OpAngle, measureTbId );
1203 createTool( GEOMOp::OpTolerance , measureTbId );
1204 createTool( separator(), measureTbId );
1205 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1206 createTool( GEOMOp::OpFreeFaces, measureTbId );
1207 createTool( separator(), measureTbId );
1208 createTool( GEOMOp::OpWhatIs, measureTbId );
1209 createTool( GEOMOp::OpCheckShape, measureTbId );
1210 createTool( GEOMOp::OpCheckCompound, measureTbId );
1211 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1212 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1214 int picturesTbId = createTool( tr( "TOOL_PICTURES" ) );
1215 createTool( GEOMOp::OpPictureImport, picturesTbId );
1217 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1220 // int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1222 //@@ 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 @@//
1224 // ---- create popup menus --------------------------
1226 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1227 QString clientOCC = "(client='OCCViewer')";
1228 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1229 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1231 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1232 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1233 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1234 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1236 QString autoColorPrefix =
1237 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1239 QtxPopupMgr* mgr = popupMgr();
1241 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1242 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
1243 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1244 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1245 mgr->insert( action( GEOMOp::OpShowChildren ), -1, -1 ); // show children
1246 mgr->setRule( action( GEOMOp::OpShowChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasHiddenChildren=true"), QtxPopupMgr::VisibleRule );
1248 mgr->insert( action( GEOMOp::OpHideChildren ), -1, -1 ); // hide children
1249 mgr->setRule( action( GEOMOp::OpHideChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasShownChildren=true"), QtxPopupMgr::VisibleRule );
1250 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1251 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1252 mgr->insert( separator(), -1, -1 ); // -----------
1254 #if OCC_VERSION_LARGE > 0x06050200
1255 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1256 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true";
1257 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1258 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule, QtxPopupMgr::VisibleRule );
1259 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1260 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1261 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC, QtxPopupMgr::VisibleRule );
1263 mgr->insert( separator(), -1, -1 ); // -----------
1264 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1265 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1266 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1267 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1268 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1269 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1270 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1271 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1272 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1273 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1274 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1275 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1276 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1277 mgr->insert( separator(), dispmodeId, -1 );
1278 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1279 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1280 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1281 mgr->insert( separator(), -1, -1 ); // -----------
1282 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1283 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1284 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1285 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1286 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1287 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1288 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1289 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1290 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1291 //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1292 mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1293 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 ); // material properties
1294 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'}) and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1295 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 ); // texture
1296 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1298 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1299 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1300 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1302 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1303 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1305 mgr->insert( separator(), -1, -1 ); // -----------
1306 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1307 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1308 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1309 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1310 mgr->insert( separator(), -1, -1 ); // -----------
1312 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1313 onlyComponent = "((type='Component') and selcount=1)",
1314 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1315 types = "'Shape' 'Group'";
1317 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1318 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1320 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1321 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1323 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1324 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1326 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1328 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1329 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1330 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1331 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1332 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1333 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1334 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1335 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1336 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1337 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1338 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1339 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1340 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1341 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1342 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1343 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1344 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1345 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1346 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1347 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1348 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1349 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1350 mgr->insert( separator(), selectonlyId, -1);
1351 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1352 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1353 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1354 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1355 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1357 mgr->insert( separator(), -1, -1 ); // -----------
1358 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1359 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
1362 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1363 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1365 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1366 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1368 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1371 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1373 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1374 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1375 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1379 //=======================================================================
1380 // function : GeometryGUI::activateModule()
1381 // purpose : Called when GEOM module is activated
1382 //=======================================================================
1383 bool GeometryGUI::activateModule( SUIT_Study* study )
1385 if ( CORBA::is_nil( myComponentGeom ) )
1388 bool res = SalomeApp_Module::activateModule( study );
1392 setMenuShown( true );
1393 setToolShown( true );
1395 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1396 PyGILState_STATE gstate = PyGILState_Ensure();
1397 PyObject* pluginsmanager=PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1398 if(pluginsmanager==NULL)
1402 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());
1407 PyGILState_Release(gstate);
1408 // end of GEOM plugins loading
1410 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1411 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1413 // Reset actions accelerator keys
1414 action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1415 action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1416 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1418 GUIMap::Iterator it;
1419 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1420 it.value()->activate( application()->desktop() );
1422 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1424 SUIT_ViewManager* vm;
1425 ViewManagerList OCCViewManagers, VTKViewManagers;
1427 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1428 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1429 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1430 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1432 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1433 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1434 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1435 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1438 SALOME_ListIO selected;
1439 sm->selectedObjects( selected );
1440 sm->clearSelected();
1442 // disable OCC selectors
1443 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1444 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1445 while ( itOCCSel.hasNext() )
1446 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1447 sr->setEnabled(true);
1449 // disable VTK selectors
1450 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1451 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1452 while ( itVTKSel.hasNext() )
1453 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1454 sr->setEnabled(true);
1456 sm->setSelectedObjects( selected, true ); //NPAL 19674
1458 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1460 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1462 // 0020836 (Basic vectors and origin)
1463 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1464 if( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1465 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1467 _PTR(Study) studyDS = appStudy->studyDS();
1469 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1470 if( !aSComponent ) // create objects automatically only if there is no GEOM component
1471 createOriginAndBaseVectors();
1480 //=======================================================================
1481 // function : GeometryGUI::deactivateModule()
1482 // purpose : Called when GEOM module is deactivated
1483 //=======================================================================
1484 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1486 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1488 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1490 setMenuShown( false );
1491 setToolShown( false );
1493 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1494 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1496 EmitSignalCloseAllDialogs();
1498 GUIMap::Iterator it;
1499 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1500 it.value()->deactivate();
1502 // Unset actions accelerator keys
1503 action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1504 action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1505 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1507 qDeleteAll(myOCCSelectors);
1508 myOCCSelectors.clear();
1509 getApp()->selectionMgr()->setEnabled( true, OCCViewer_Viewer::Type() );
1511 qDeleteAll(myVTKSelectors);
1512 myVTKSelectors.clear();
1513 getApp()->selectionMgr()->setEnabled( true, SVTK_Viewer::Type() );
1515 return SalomeApp_Module::deactivateModule( study );
1518 //=======================================================================
1519 // function : onWindowActivated()
1520 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1521 //=======================================================================
1522 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1527 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1528 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1530 // disable non-OCC viewframe menu commands
1531 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1532 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1533 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1534 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1535 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1536 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1537 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1539 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1540 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1542 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1545 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1547 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1548 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1551 void GeometryGUI::viewManagers( QStringList& lst ) const
1553 lst.append( OCCViewer_Viewer::Type() );
1556 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1558 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1560 qDebug( "connect" );
1561 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1562 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1563 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1564 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1565 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1566 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1567 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1568 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1570 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1571 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1573 // disable OCC selectors
1574 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1575 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1576 while ( itOCCSel.hasNext() )
1577 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1578 sr->setEnabled(true);
1580 else if ( vm->getType() == SVTK_Viewer::Type() )
1582 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1583 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1585 // disable VTK selectors
1586 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1587 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1588 while ( itVTKSel.hasNext() )
1589 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1590 sr->setEnabled(true);
1594 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1596 SUIT_ViewModel* viewer = vm->getViewModel();
1597 if ( vm->getType() == OCCViewer_Viewer::Type() )
1599 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1600 while ( itOCCSel.hasNext() )
1601 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1602 if ( sr->viewer() == viewer )
1604 delete myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1608 if ( vm->getType() == SVTK_Viewer::Type() )
1610 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1611 while ( itVTKSel.hasNext() )
1612 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1613 if ( sr->viewer() == viewer )
1615 delete myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1621 QString GeometryGUI::engineIOR() const
1623 if ( !CORBA::is_nil( GetGeomGen() ) )
1624 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
1628 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1629 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
1631 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
1633 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
1635 theWidth = theHeight = 0;
1637 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1638 Handle(TColStd_HArray1OfByte) aTexture;
1640 Handle(Graphic3d_HArray1OfBytes) aTexture;
1644 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
1645 aTexture = aTextureMap[ theId ];
1646 if ( aTexture.IsNull() ) {
1647 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
1648 if ( !aInsOp->_is_nil() ) {
1649 CORBA::Long aWidth, aHeight;
1650 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
1651 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
1653 theHeight = aHeight;
1655 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1656 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
1658 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
1661 for (int i = 0; i < aStream->length(); i++)
1662 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
1663 aTextureMap[ theId ] = aTexture;
1671 LightApp_Selection* GeometryGUI::createSelection() const
1673 return new GEOMGUI_Selection();
1676 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
1678 SalomeApp_Module::contextMenuPopup( client, menu, title );
1680 getApp()->selectionMgr()->selectedObjects( lst );
1681 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
1682 Handle(SALOME_InteractiveObject) io = lst.First();
1683 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1684 _PTR(Study) study = appStudy->studyDS();
1685 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
1687 QString aName = QString( obj->GetName().c_str() );
1688 aName.remove( QRegExp("\\s+$") );
1694 void GeometryGUI::createPreferences()
1696 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
1698 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
1699 setPreferenceProperty( genGroup, "columns", 2 );
1701 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
1702 LightApp_Preferences::Selector,
1703 "Geometry", "display_mode" );
1705 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
1706 LightApp_Preferences::Color, "Geometry", "shading_color" );
1708 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
1709 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
1711 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
1712 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
1714 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
1715 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
1717 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
1718 LightApp_Preferences::Color, "Geometry", "line_color" );
1720 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
1721 LightApp_Preferences::Color, "Geometry", "point_color" );
1723 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
1724 LightApp_Preferences::Color, "Geometry", "isos_color" );
1726 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
1727 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
1729 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
1730 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
1732 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
1733 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
1735 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
1736 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
1738 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
1739 LightApp_Preferences::Selector,
1740 "Geometry", "material" );
1746 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
1747 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
1749 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
1750 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
1752 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
1753 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
1755 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
1756 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
1758 for(int i = 0; i < nb; i++) {
1759 setPreferenceProperty( wd[i], "min", 1 );
1760 setPreferenceProperty( wd[i], "max", 5 );
1764 // Quantities with individual precision settings
1765 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
1766 setPreferenceProperty( precGroup, "columns", 2 );
1768 const int nbQuantities = 8;
1769 int prec[nbQuantities], ii = 0;
1770 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
1771 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
1772 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
1773 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
1774 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
1775 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
1776 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
1777 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
1778 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
1779 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
1780 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
1781 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
1782 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
1783 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
1784 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
1785 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
1787 // Set property for precision value for spinboxes
1788 for ( ii = 0; ii < nbQuantities; ii++ ){
1789 setPreferenceProperty( prec[ii], "min", -14 );
1790 setPreferenceProperty( prec[ii], "max", 14 );
1791 setPreferenceProperty( prec[ii], "precision", 2 );
1794 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
1795 setPreferenceProperty( VertexGroup, "columns", 2 );
1797 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
1798 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
1800 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
1801 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
1803 // Set property for default display mode
1804 QStringList aModesList;
1805 aModesList.append( tr("MEN_WIREFRAME") );
1806 aModesList.append( tr("MEN_SHADING") );
1807 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
1809 QList<QVariant> anIndexesList;
1810 anIndexesList.append(0);
1811 anIndexesList.append(1);
1812 anIndexesList.append(2);
1814 setPreferenceProperty( dispmode, "strings", aModesList );
1815 setPreferenceProperty( dispmode, "indexes", anIndexesList );
1818 // Set property for top level display mode
1819 QStringList aTopModesList;
1820 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
1821 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
1822 aTopModesList.append( tr("MEN_WIREFRAME") );
1823 aTopModesList.append( tr("MEN_SHADING") );
1824 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
1826 QList<QVariant> aTopIndexesList;
1827 aTopIndexesList.append(0);
1828 aTopIndexesList.append(1);
1829 aTopIndexesList.append(2);
1830 aTopIndexesList.append(3);
1831 aTopIndexesList.append(4);
1833 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
1834 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
1836 // Set property for step value for spinboxes
1837 setPreferenceProperty( step, "min", 1 );
1838 setPreferenceProperty( step, "max", 10000 );
1839 setPreferenceProperty( step, "precision", 3 );
1841 // Set property for deflection value for spinboxes
1842 setPreferenceProperty( defl, "min", DEFLECTION_MIN );
1843 setPreferenceProperty( defl, "max", 1.0 );
1844 setPreferenceProperty( defl, "step", 1.0e-04 );
1845 setPreferenceProperty( defl, "precision", 6 );
1847 // Set property for default material
1848 Material_ResourceMgr aMatResMgr;
1849 setPreferenceProperty( material, "strings", aMatResMgr.materials() );
1851 // Set property vertex marker type
1852 QList<QVariant> aMarkerTypeIndicesList;
1853 QList<QVariant> aMarkerTypeIconsList;
1855 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1856 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
1857 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
1858 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
1859 aMarkerTypeIndicesList << (i-1);
1860 aMarkerTypeIconsList << pixmap;
1863 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
1864 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
1866 // Set property for vertex marker scale
1867 QList<QVariant> aMarkerScaleIndicesList;
1868 QStringList aMarkerScaleValuesList;
1870 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
1871 aMarkerScaleIndicesList << iii;
1872 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
1875 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
1876 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
1878 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
1879 setPreferenceProperty( originGroup, "columns", 2 );
1881 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
1882 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
1883 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
1884 setPreferenceProperty( baseVectorsLength, "max", 1000 );
1886 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
1887 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
1890 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
1891 setPreferenceProperty( operationsGroup, "columns", 2 );
1893 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
1894 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
1897 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
1899 if (section == "Geometry") {
1900 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1901 if (param == QString("SettingsGeomStep")) {
1902 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
1903 EmitSignalDefaultStepValueChanged(spin_step);
1904 } else if(param == QString("toplevel_color")) {
1905 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1906 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1907 } else if(param == QString("toplevel_dm")) {
1908 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
1913 LightApp_Displayer* GeometryGUI::displayer()
1916 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
1920 void GeometryGUI::setLocalSelectionMode(const int mode)
1922 myLocalSelectionMode = mode;
1924 int GeometryGUI::getLocalSelectionMode() const
1926 return myLocalSelectionMode;
1929 const char gSeparator = '_'; // character used to separate parameter names
1930 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
1933 * \brief Store visual parameters
1935 * This method is called just before the study document is saved.
1936 * Store visual parameters in AttributeParameter attribute(s)
1938 void GeometryGUI::storeVisualParameters (int savePoint)
1940 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
1941 if ( !appStudy || !appStudy->studyDS() )
1943 _PTR(Study) studyDS = appStudy->studyDS();
1945 // componentName is used for encoding of entries when storing them in IParameters
1946 std::string componentName = myComponentGeom->ComponentDataType();
1947 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1948 //if (!aSComponent) return;
1951 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
1952 componentName.c_str(),
1954 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
1956 QList<SUIT_ViewManager*> lst;
1957 QList<SUIT_ViewManager*>::Iterator it;
1959 // main cycle to store parameters of displayed objects
1961 getApp()->viewManagers(lst);
1962 for (it = lst.begin(); it != lst.end(); it++) {
1963 SUIT_ViewManager* vman = *it;
1964 QString vType = vman->getType();
1965 int aMgrId = vman->getGlobalId();
1966 // saving VTK actors properties
1967 QVector<SUIT_ViewWindow*> views = vman->getViews();
1968 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
1969 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
1970 ObjMap::ConstIterator o_it = anObjects.begin();
1971 for (; o_it != anObjects.end(); o_it++) {
1972 const PropMap aProps = o_it.value();
1974 //Check that object exists in the study
1975 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
1976 if ( !obj || !(aProps.count() > 0))
1978 // entry is "encoded" = it does NOT contain component adress, since it is a
1979 // subject to change on next component loading
1981 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
1983 _PTR(GenericAttribute) anAttr;
1984 if( !obj->FindAttribute(anAttr, "AttributeIOR"))
1987 std::string param,occParam = vType.toLatin1().data();
1988 occParam += NAME_SEPARATOR;
1989 occParam += QString::number(aMgrId).toLatin1().data();
1990 occParam += NAME_SEPARATOR;
1992 if(aProps.contains(VISIBILITY_PROP)) {
1993 param = occParam + VISIBILITY_PROP;
1994 ip->setParameter(entry, param, aProps.value(VISIBILITY_PROP).toInt() == 1 ? "On" : "Off");
1997 if(aProps.contains(DISPLAY_MODE_PROP)) {
1998 param = occParam + DISPLAY_MODE_PROP;
1999 ip->setParameter(entry, param, QString::number(aProps.value(DISPLAY_MODE_PROP).toInt()).toLatin1().data());
2002 if(aProps.contains(COLOR_PROP)) {
2003 QColor c = aProps.value(COLOR_PROP).value<QColor>();
2004 QString colorStr = QString::number(c.red()/255.);
2005 colorStr += DIGIT_SEPARATOR; colorStr += QString::number(c.green()/255.);
2006 colorStr += DIGIT_SEPARATOR; colorStr += QString::number(c.blue()/255.);
2007 param = occParam + COLOR_PROP;
2008 ip->setParameter(entry, param, colorStr.toLatin1().data());
2011 if(vType == SVTK_Viewer::Type()) {
2012 if(aProps.contains(OPACITY_PROP)) {
2013 param = occParam + OPACITY_PROP;
2014 ip->setParameter(entry, param, QString::number(1. - aProps.value(TRANSPARENCY_PROP).toDouble()).toLatin1().data());
2016 } else if (vType == SOCC_Viewer::Type()) {
2017 if(aProps.contains(TRANSPARENCY_PROP)) {
2018 param = occParam + TRANSPARENCY_PROP;
2019 ip->setParameter(entry, param, QString::number(aProps.value(TRANSPARENCY_PROP).toDouble()).toLatin1().data());
2022 if(aProps.contains(TOP_LEVEL_PROP)) {
2023 param = occParam + TOP_LEVEL_PROP;
2024 Standard_Boolean val = aProps.value(TOP_LEVEL_PROP).value<Standard_Boolean>();
2025 if (val == Standard_True)
2026 ip->setParameter(entry, param, "1");
2030 if(aProps.contains(ISOS_PROP)) {
2031 param = occParam + ISOS_PROP;
2032 ip->setParameter(entry, param, aProps.value(ISOS_PROP).toString().toLatin1().data());
2035 if(aProps.contains(VECTOR_MODE_PROP)) {
2036 param = occParam + VECTOR_MODE_PROP;
2037 ip->setParameter(entry, param, QString::number(aProps.value(VECTOR_MODE_PROP).toInt()).toLatin1().data());
2040 if(aProps.contains(DEFLECTION_COEFF_PROP)) {
2041 param = occParam + DEFLECTION_COEFF_PROP;
2042 ip->setParameter(entry, param, QString::number(aProps.value(DEFLECTION_COEFF_PROP).toDouble()).toLatin1().data());
2045 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2046 if(aProps.contains(MARKER_TYPE_PROP)) {
2047 param = occParam + MARKER_TYPE_PROP;
2048 ip->setParameter(entry, param, aProps.value(MARKER_TYPE_PROP).toString().toLatin1().data());
2051 if(aProps.contains(MATERIAL_PROP)) {
2052 param = occParam + MATERIAL_PROP;
2053 ip->setParameter(entry, param, aProps.value(MATERIAL_PROP).toString().toLatin1().data());
2056 if(aProps.contains( EDGE_WIDTH_PROP )) {
2057 param = occParam + EDGE_WIDTH_PROP;
2058 ip->setParameter(entry, param, aProps.value(EDGE_WIDTH_PROP).toString().toLatin1().data());
2061 if(aProps.contains( ISOS_WIDTH_PROP )) {
2062 param = occParam + ISOS_WIDTH_PROP;
2063 ip->setParameter(entry, param, aProps.value(ISOS_WIDTH_PROP).toString().toLatin1().data());
2065 } // object iterator
2067 } // for (viewManagers)
2071 * \brief Restore visual parameters
2073 * This method is called after the study document is opened.
2074 * Restore visual parameters from AttributeParameter attribute(s)
2076 void GeometryGUI::restoreVisualParameters (int savePoint)
2078 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2079 if (!appStudy || !appStudy->studyDS())
2081 _PTR(Study) studyDS = appStudy->studyDS();
2083 // componentName is used for encoding of entries when storing them in IParameters
2084 std::string componentName = myComponentGeom->ComponentDataType();
2085 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2086 //if (!aSComponent) return;
2089 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2090 componentName.c_str(),
2092 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2094 std::vector<std::string> entries = ip->getEntries();
2096 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2098 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2099 QString entry (ip->decodeEntry(*entIt).c_str());
2101 // Check that the entry corresponds to a real object in the Study
2102 // as the object may be deleted or modified after the visual state is saved.
2103 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2104 if (!so) continue; //Skip the not existent entry
2106 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2107 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2109 std::vector<std::string>::iterator namesIt = paramNames.begin();
2110 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2112 // actors are stored in a map after displaying of them for
2113 // quicker access in the future: map < viewID to actor >
2114 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2115 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2117 QString viewerTypStr;
2118 QString viewIndexStr;
2120 QVector<PropMap> aListOfMap;
2122 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2124 // visual parameters are stored in strings as follows: ViewerType_ViewIndex_ParamName.
2125 // '_' is used as separator and should not be used in viewer type or parameter names.
2126 QStringList lst = QString((*namesIt).c_str()).split(NAME_SEPARATOR, QString::SkipEmptyParts);
2127 if (lst.size() != 3)
2130 viewerTypStr = lst[0];
2131 viewIndexStr = lst[1];
2132 QString paramNameStr = lst[2];
2135 viewIndex = viewIndexStr.toUInt(&ok);
2136 if (!ok) // bad conversion of view index to integer
2139 if((viewIndex + 1) > aListOfMap.count()) {
2140 aListOfMap.resize(viewIndex + 1);
2143 QString val((*valuesIt).c_str());
2144 if(paramNameStr == VISIBILITY_PROP){
2145 aListOfMap[viewIndex].insert(VISIBILITY_PROP, val == "On" ? 1 : 0);
2147 } else if(paramNameStr == OPACITY_PROP) {
2148 aListOfMap[viewIndex].insert(TRANSPARENCY_PROP, 1. - val.toDouble());
2150 } else if(paramNameStr == TRANSPARENCY_PROP) {
2151 aListOfMap[viewIndex].insert( TRANSPARENCY_PROP, val.toDouble() );
2153 } else if(paramNameStr == TOP_LEVEL_PROP) {
2154 aListOfMap[viewIndex].insert( TRANSPARENCY_PROP, val == "1" ? Standard_True : Standard_False );
2156 } else if(paramNameStr == DISPLAY_MODE_PROP) {
2157 aListOfMap[viewIndex].insert( DISPLAY_MODE_PROP, val.toInt());
2159 } else if(paramNameStr == ISOS_PROP) {
2160 aListOfMap[viewIndex].insert( ISOS_PROP, val);
2162 } else if(paramNameStr == COLOR_PROP) {
2163 QStringList rgb = val.split(DIGIT_SEPARATOR);
2164 if(rgb.count() == 3) {
2165 QColor c(int(rgb[0].toDouble()*255), int(rgb[1].toDouble()*255), int(rgb[2].toDouble()*255));
2166 aListOfMap[viewIndex].insert( COLOR_PROP, c);
2168 } else if(paramNameStr == VECTOR_MODE_PROP) {
2169 aListOfMap[viewIndex].insert( VECTOR_MODE_PROP, val.toInt());
2171 } else if(paramNameStr == DEFLECTION_COEFF_PROP) {
2172 aListOfMap[viewIndex].insert( DEFLECTION_COEFF_PROP, val.toDouble());
2173 } else if(paramNameStr == MARKER_TYPE_PROP) {
2174 aListOfMap[viewIndex].insert( MARKER_TYPE_PROP, val);
2175 } else if(paramNameStr == MATERIAL_PROP) {
2176 aListOfMap[viewIndex].insert( MATERIAL_PROP, val);
2177 } else if(paramNameStr == EDGE_WIDTH_PROP) {
2178 aListOfMap[viewIndex].insert( EDGE_WIDTH_PROP , val);
2179 } else if(paramNameStr == ISOS_WIDTH_PROP) {
2180 aListOfMap[viewIndex].insert( ISOS_WIDTH_PROP , val);
2185 } // for names/parameters iterator
2187 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2189 for (int index = 0; index < aListOfMap.count(); index++) {
2191 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
2193 //Get Visibility property of the current PropMap
2194 if (aListOfMap[index].value(VISIBILITY_PROP) == 1) {
2195 SUIT_ViewManager* vman = lst.at(index);
2196 SUIT_ViewModel* vmodel = vman->getViewModel();
2197 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
2201 } // for entries iterator
2203 // update all VTK and OCC views
2204 QList<SUIT_ViewManager*> lst;
2205 getApp()->viewManagers(lst);
2206 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
2207 SUIT_ViewModel* vmodel = (*it)->getViewModel();
2210 if (vmodel->getType() == SVTK_Viewer::Type()) {
2211 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
2212 vtkView->getRenderer()->ResetCameraClippingRange();
2215 else if (vmodel->getType() == SOCC_Viewer::Type()) {
2216 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
2217 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
2224 void GeometryGUI::onViewAboutToShow()
2226 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
2227 QAction* a = action( GEOMOp::OpSwitchVectors );
2229 a->setEnabled(true);
2230 bool vmode = window->property("VectorsMode").toBool();
2231 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
2233 a->setText ( tr("MEN_VECTOR_MODE_ON") );
2234 a->setEnabled(false);
2239 \brief Return action by id
2240 \param id identifier of the action
2243 QAction* GeometryGUI::getAction(const int id) {
2248 \brief Check if this object is can't be renamed in place
2250 This method can be re-implemented in the subclasses.
2251 Return true in case if object isn't reference or component (module root).
2253 \param entry column id
2254 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
2256 bool GeometryGUI::renameAllowed( const QString& entry) const {
2258 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
2259 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
2260 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
2262 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
2267 Rename object by entry.
2268 \param entry entry of the object
2269 \param name new name of the object
2270 \brief Return \c true if rename operation finished successfully, \c false otherwise.
2272 bool GeometryGUI::renameObject( const QString& entry, const QString& name) {
2274 bool result = false;
2276 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
2277 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
2282 _PTR(Study) aStudy = appStudy->studyDS();
2287 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
2289 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
2293 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
2294 _PTR(GenericAttribute) anAttr;
2296 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
2297 _PTR(AttributeName) aName (anAttr);
2299 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
2300 if (!CORBA::is_nil(anObj)) {
2301 aName->SetValue( name.toLatin1().data() ); // rename the SObject
2302 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object