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 libName = "GroupGUI";
562 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
563 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
564 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
565 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
566 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
567 libName = "BlocksGUI";
569 case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
570 case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
571 // case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
572 case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
573 case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
574 //@@ 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 @@//
575 libName = "AdvancedGUI";
581 GEOMGUI* library = 0;
582 if ( !libName.isEmpty() ) {
584 libName = QString( "lib" ) + libName + ".so";
586 libName = libName + ".dll";
588 library = getLibrary( libName );
591 // call method of corresponding GUI library
593 library->OnGUIEvent( id, desk );
595 // Update a list of materials for "Preferences" dialog
596 if ( id == GEOMOp::OpMaterialProperties ) {
597 LightApp_Preferences* pref = preferences();
599 Material_ResourceMgr aMatResMgr;
600 setPreferenceProperty( pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true )->id(),
602 aMatResMgr.materials() );
607 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
610 //=================================================================================
611 // function : GeometryGUI::OnKeyPress()
612 // purpose : Called when any key is pressed by user [static]
613 //=================================================================================
614 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
616 if ( !application() )
618 foreach ( GEOMGUI* lib, myGUIMap )
619 lib->OnKeyPress( e, application()->desktop(), w );
622 //=================================================================================
623 // function : GeometryGUI::OnMouseMove()
624 // purpose : Manages mouse move events [static]
625 //=================================================================================
626 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
628 if ( !application() )
630 foreach ( GEOMGUI* lib, myGUIMap )
631 lib->OnMouseMove( e, application()->desktop(), w );
634 //=================================================================================
635 // function : GeometryGUI::OnMouseRelease()
636 // purpose : Manages mouse release events [static]
637 //=================================================================================
638 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
640 if ( !application() )
642 foreach ( GEOMGUI* lib, myGUIMap )
643 lib->OnMouseRelease( e, application()->desktop(), w );
646 //=================================================================================
647 // function : GeometryGUI::OnMousePress()
648 // purpose : Manage mouse press events [static]
649 //=================================================================================
650 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
652 if ( !application() )
654 foreach ( GEOMGUI* lib, myGUIMap )
655 lib->OnMousePress( e, application()->desktop(), w );
658 //=======================================================================
659 // function : createGeomAction
661 //=======================================================================
662 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
663 const int accel, const bool toggle, const QString& shortcutAction )
665 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
666 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
667 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
669 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
671 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
672 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
674 application()->desktop(),
676 this, SLOT( OnGUIEvent() ),
680 //=======================================================================
681 // function : createOriginAndBaseVectors
683 //=======================================================================
684 void GeometryGUI::createOriginAndBaseVectors()
686 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
688 _PTR(Study) studyDS = appStudy->studyDS();
689 if( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
690 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
691 if( !aBasicOperations->_is_nil() ) {
692 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
693 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
694 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
695 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
696 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
697 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
699 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
700 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
701 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
702 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
703 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
705 getApp()->updateObjectBrowser( false );
711 //=======================================================================
712 // function : GeometryGUI::initialize()
713 // purpose : Called when GEOM module is created
714 //=======================================================================
715 void GeometryGUI::initialize( CAM_Application* app )
717 SalomeApp_Module::initialize( app );
719 // ----- create actions --------------
721 createGeomAction( GEOMOp::OpImport, "IMPORT", "", Qt::ControlModifier + Qt::Key_I );
722 createGeomAction( GEOMOp::OpExport, "EXPORT", "", Qt::ControlModifier + Qt::Key_E );
724 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
726 createGeomAction( GEOMOp::OpPoint, "POINT" );
727 createGeomAction( GEOMOp::OpLine, "LINE" );
728 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
729 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
730 createGeomAction( GEOMOp::OpArc, "ARC" );
731 createGeomAction( GEOMOp::OpCurve, "CURVE" );
732 createGeomAction( GEOMOp::OpVector, "VECTOR" );
733 createGeomAction( GEOMOp::OpPlane, "PLANE" );
734 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
735 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
737 createGeomAction( GEOMOp::OpBox, "BOX" );
738 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
739 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
740 createGeomAction( GEOMOp::OpTorus, "TORUS" );
741 createGeomAction( GEOMOp::OpCone, "CONE" );
742 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
743 createGeomAction( GEOMOp::OpDisk, "DISK" );
745 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
746 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
747 createGeomAction( GEOMOp::OpFilling, "FILLING" );
748 createGeomAction( GEOMOp::OpPipe, "PIPE" );
750 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
751 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
753 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
755 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
756 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
758 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
759 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
760 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
762 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
764 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
766 createGeomAction( GEOMOp::OpEdge, "EDGE" );
767 createGeomAction( GEOMOp::OpWire, "WIRE" );
768 createGeomAction( GEOMOp::OpFace, "FACE" );
769 createGeomAction( GEOMOp::OpShell, "SHELL" );
770 createGeomAction( GEOMOp::OpSolid, "SOLID" );
771 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
773 createGeomAction( GEOMOp::OpFuse, "FUSE" );
774 createGeomAction( GEOMOp::OpCommon, "COMMON" );
775 createGeomAction( GEOMOp::OpCut, "CUT" );
776 createGeomAction( GEOMOp::OpSection, "SECTION" );
778 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
779 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
780 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
781 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
782 createGeomAction( GEOMOp::OpScale, "SCALE" );
783 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
784 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
785 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
786 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
788 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
789 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
790 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
791 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
792 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
793 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
794 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
795 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
796 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
797 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
798 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
800 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
801 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
802 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
804 createGeomAction( GEOMOp::OpSewing, "SEWING" );
805 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
806 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
807 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
808 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
809 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
810 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
811 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
812 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
813 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
814 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
815 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
816 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
817 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
818 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
820 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
821 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
822 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
823 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
824 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
825 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
826 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
827 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
829 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
830 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
831 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
832 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
833 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
834 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
836 #ifdef _DEBUG_ // PAL16821
837 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
840 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
841 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
842 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
843 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
844 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
845 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
846 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
847 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
848 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
849 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
850 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
851 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
852 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
853 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
854 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
855 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
856 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
857 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
858 createGeomAction( GEOMOp::OpHide, "ERASE" );
860 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
861 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
862 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
863 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
864 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
865 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
866 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
867 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
868 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
869 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
870 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
871 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
872 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
873 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
874 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
875 createGeomAction( GEOMOp::OpShowChildren, "POP_SHOW_CHILDREN" );
876 createGeomAction( GEOMOp::OpHideChildren, "POP_HIDE_CHILDREN" );
877 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
878 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
879 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
880 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
882 createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
884 // Create actions for increase/decrease transparency shortcuts
885 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
886 "Geometry:Increase transparency");
887 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
888 "Geometry:Decrease transparency");
890 // Create actions for increase/decrease number of isolines
891 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
892 "Geometry:Increase number of isolines");
893 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
894 "Geometry:Decrease number of isolines");
896 // createGeomAction( GEOMOp::OpPipeTShapeGroups, "PIPETSHAPEGROUPS" );
897 createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
898 createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
899 //@@ 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 @@//
901 // ---- create menus --------------------------
903 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
904 createMenu( separator(), fileId, 10 );
905 createMenu( GEOMOp::OpImport, fileId, 10 );
906 createMenu( GEOMOp::OpExport, fileId, 10 );
907 createMenu( separator(), fileId, -1 );
909 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
910 createMenu( GEOMOp::OpDelete, editId, -1 );
912 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
914 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
915 createMenu( GEOMOp::OpPoint, basicId, -1 );
916 createMenu( GEOMOp::OpLine, basicId, -1 );
917 createMenu( GEOMOp::OpCircle, basicId, -1 );
918 createMenu( GEOMOp::OpEllipse, basicId, -1 );
919 createMenu( GEOMOp::OpArc, basicId, -1 );
920 createMenu( GEOMOp::OpCurve, basicId, -1 );
921 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
922 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
923 createMenu( separator(), basicId, -1 );
924 createMenu( GEOMOp::OpVector, basicId, -1 );
925 createMenu( GEOMOp::OpPlane, basicId, -1 );
926 createMenu( GEOMOp::OpLCS, basicId, -1 );
927 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
929 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
930 createMenu( GEOMOp::OpBox, primId, -1 );
931 createMenu( GEOMOp::OpCylinder, primId, -1 );
932 createMenu( GEOMOp::OpSphere, primId, -1 );
933 createMenu( GEOMOp::OpTorus, primId, -1 );
934 createMenu( GEOMOp::OpCone, primId, -1 );
935 createMenu( GEOMOp::OpRectangle, primId, -1 );
936 createMenu( GEOMOp::OpDisk, primId, -1 );
937 createMenu( GEOMOp::OpPipeTShape,primId, -1 );
939 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
940 createMenu( GEOMOp::OpPrism, genId, -1 );
941 createMenu( GEOMOp::OpRevolution, genId, -1 );
942 createMenu( GEOMOp::OpFilling, genId, -1 );
943 createMenu( GEOMOp::OpPipe, genId, -1 );
945 // int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
947 //@@ 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 @@//
949 createMenu( separator(), newEntId, -1 );
951 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
952 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
953 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
955 createMenu( separator(), newEntId, -1 );
957 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
958 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
959 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
960 createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
961 createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
963 createMenu( separator(), newEntId, -1 );
965 createMenu( GEOMOp::OpExplode, newEntId, -1 );
967 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
968 createMenu( GEOMOp::OpEdge, buildId, -1 );
969 createMenu( GEOMOp::OpWire, buildId, -1 );
970 createMenu( GEOMOp::OpFace, buildId, -1 );
971 createMenu( GEOMOp::OpShell, buildId, -1 );
972 createMenu( GEOMOp::OpSolid, buildId, -1 );
973 createMenu( GEOMOp::OpCompound, buildId, -1 );
975 createMenu( separator(), newEntId, -1 );
977 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
979 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
982 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
984 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
985 createMenu( GEOMOp::OpFuse, boolId, -1 );
986 createMenu( GEOMOp::OpCommon, boolId, -1 );
987 createMenu( GEOMOp::OpCut, boolId, -1 );
988 createMenu( GEOMOp::OpSection, boolId, -1 );
990 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
991 createMenu( GEOMOp::OpTranslate, transId, -1 );
992 createMenu( GEOMOp::OpRotate, transId, -1 );
993 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
994 createMenu( GEOMOp::OpMirror, transId, -1 );
995 createMenu( GEOMOp::OpScale, transId, -1 );
996 createMenu( GEOMOp::OpOffset, transId, -1 );
997 createMenu( GEOMOp::OpProjection, transId, -1 );
998 createMenu( separator(), transId, -1 );
999 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1000 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1002 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1003 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1004 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1005 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1007 createMenu( separator(), operId, -1 );
1009 createMenu( GEOMOp::OpPartition, operId, -1 );
1010 createMenu( GEOMOp::OpArchimede, operId, -1 );
1011 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1012 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1014 createMenu( separator(), operId, -1 );
1016 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1017 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1018 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1019 createMenu( GEOMOp::OpChamfer, operId, -1 );
1020 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1021 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1022 //createMenu( GEOMOp::OpClipping, operId, -1 );
1024 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1025 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1026 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1027 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1028 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1029 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1030 createMenu( GEOMOp::OpSewing, repairId, -1 );
1031 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1032 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1033 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1034 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1035 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1036 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1037 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1038 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1039 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1041 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1042 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1043 createMenu( GEOMOp::OpProperties, measurId, -1 );
1044 createMenu( separator(), measurId, -1 );
1045 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1046 createMenu( GEOMOp::OpInertia, measurId, -1 );
1047 createMenu( GEOMOp::OpNormale, measurId, -1 );
1048 createMenu( separator(), measurId, -1 );
1049 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1050 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1051 createMenu( separator(), measurId, -1 );
1053 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1054 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1055 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1056 createMenu( GEOMOp::OpAngle, dimId, -1 );
1058 createMenu( separator(), measurId, -1 );
1059 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1060 createMenu( separator(), measurId, -1 );
1061 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1062 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1063 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1064 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1065 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1067 #ifdef _DEBUG_ // PAL16821
1068 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1069 createMenu( separator(), toolsId, -1 );
1070 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1073 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1074 createMenu( separator(), viewId, -1 );
1076 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1077 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1078 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1079 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1080 createMenu( separator(), dispmodeId, -1 );
1081 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1083 createMenu( separator(), viewId, -1 );
1084 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1085 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1086 createMenu( separator(), viewId, -1 );
1087 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1088 createMenu( separator(), viewId, -1 );
1092 because of these items are accessible through object browser and viewers
1093 we have removed they from main menu
1095 createMenu( GEOMOp::OpShow, viewId, -1 );
1096 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1097 createMenu( GEOMOp::OpHide, viewId, -1 );
1100 // ---- create toolbars --------------------------
1102 int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1103 createTool( GEOMOp::OpPoint, basicTbId );
1104 createTool( GEOMOp::OpLine, basicTbId );
1105 createTool( GEOMOp::OpCircle, basicTbId );
1106 createTool( GEOMOp::OpEllipse, basicTbId );
1107 createTool( GEOMOp::OpArc, basicTbId );
1108 createTool( GEOMOp::OpCurve, basicTbId );
1109 createTool( GEOMOp::OpVector, basicTbId );
1110 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1111 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1112 createTool( GEOMOp::OpPlane, basicTbId );
1113 createTool( GEOMOp::OpLCS, basicTbId );
1114 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1116 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ) );
1117 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1118 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1120 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1121 createTool( GEOMOp::OpBox, primTbId );
1122 createTool( GEOMOp::OpCylinder, primTbId );
1123 createTool( GEOMOp::OpSphere, primTbId );
1124 createTool( GEOMOp::OpTorus, primTbId );
1125 createTool( GEOMOp::OpCone, primTbId );
1126 createTool( GEOMOp::OpRectangle, primTbId );
1127 createTool( GEOMOp::OpDisk, primTbId );
1128 createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1130 int blocksTbId = createTool( tr( "TOOL_BLOCKS" ) );
1131 createTool( GEOMOp::OpDividedDisk, blocksTbId );
1132 createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1134 // int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) ); //rnc
1135 // createTool( GEOMOp::OpPipeTShape, advancedTbId );
1137 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1138 createTool( GEOMOp::OpFuse, boolTbId );
1139 createTool( GEOMOp::OpCommon, boolTbId );
1140 createTool( GEOMOp::OpCut, boolTbId );
1141 createTool( GEOMOp::OpSection, boolTbId );
1143 int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1144 createTool( GEOMOp::OpPrism, genTbId );
1145 createTool( GEOMOp::OpRevolution, genTbId );
1146 createTool( GEOMOp::OpFilling, genTbId );
1147 createTool( GEOMOp::OpPipe, genTbId );
1149 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1150 createTool( GEOMOp::OpTranslate, transTbId );
1151 createTool( GEOMOp::OpRotate, transTbId );
1152 createTool( GEOMOp::OpChangeLoc, transTbId );
1153 createTool( GEOMOp::OpMirror, transTbId );
1154 createTool( GEOMOp::OpScale, transTbId );
1155 createTool( GEOMOp::OpOffset, transTbId );
1156 createTool( GEOMOp::OpProjection, transTbId );
1157 createTool( separator(), transTbId );
1158 createTool( GEOMOp::OpMultiTranslate, transTbId );
1159 createTool( GEOMOp::OpMultiRotate, transTbId );
1161 int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1162 createTool( GEOMOp::OpExplode, operTbId );
1163 createTool( GEOMOp::OpPartition, operTbId );
1164 createTool( GEOMOp::OpArchimede, operTbId );
1165 createTool( GEOMOp::OpShapesOnShape, operTbId );
1166 createTool( GEOMOp::OpSharedShapes, operTbId );
1168 int featTbId = createTool( tr( "TOOL_FEATURES" ) );
1169 createTool( GEOMOp::OpFillet1d, featTbId );
1170 createTool( GEOMOp::OpFillet2d, featTbId );
1171 createTool( GEOMOp::OpFillet3d, featTbId );
1172 createTool( GEOMOp::OpChamfer, featTbId );
1173 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1174 createTool( GEOMOp::OpExtrudedCut, featTbId );
1176 int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1177 createTool( GEOMOp::OpEdge, buildTbId );
1178 createTool( GEOMOp::OpWire, buildTbId );
1179 createTool( GEOMOp::OpFace, buildTbId );
1180 createTool( GEOMOp::OpShell, buildTbId );
1181 createTool( GEOMOp::OpSolid, buildTbId );
1182 createTool( GEOMOp::OpCompound, buildTbId );
1184 int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1185 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1186 createTool( GEOMOp::OpProperties, measureTbId );
1187 createTool( GEOMOp::OpCenterMass, measureTbId );
1188 createTool( GEOMOp::OpInertia, measureTbId );
1189 createTool( GEOMOp::OpNormale, measureTbId );
1190 createTool( separator(), measureTbId );
1191 createTool( GEOMOp::OpBoundingBox, measureTbId );
1192 createTool( GEOMOp::OpMinDistance, measureTbId );
1193 createTool( GEOMOp::OpAngle, measureTbId );
1194 createTool( GEOMOp::OpTolerance , measureTbId );
1195 createTool( separator(), measureTbId );
1196 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1197 createTool( GEOMOp::OpFreeFaces, measureTbId );
1198 createTool( separator(), measureTbId );
1199 createTool( GEOMOp::OpWhatIs, measureTbId );
1200 createTool( GEOMOp::OpCheckShape, measureTbId );
1201 createTool( GEOMOp::OpCheckCompound, measureTbId );
1202 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1203 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1205 int picturesTbId = createTool( tr( "TOOL_PICTURES" ) );
1206 createTool( GEOMOp::OpPictureImport, picturesTbId );
1208 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1211 // int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1213 //@@ 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 @@//
1215 // ---- create popup menus --------------------------
1217 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1218 QString clientOCC = "(client='OCCViewer')";
1219 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1220 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1222 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1223 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1224 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1225 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1227 QString autoColorPrefix =
1228 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1230 QtxPopupMgr* mgr = popupMgr();
1232 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1233 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
1234 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1235 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1236 mgr->insert( action( GEOMOp::OpShowChildren ), -1, -1 ); // show children
1237 mgr->setRule( action( GEOMOp::OpShowChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasHiddenChildren=true"), QtxPopupMgr::VisibleRule );
1239 mgr->insert( action( GEOMOp::OpHideChildren ), -1, -1 ); // hide children
1240 mgr->setRule( action( GEOMOp::OpHideChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasShownChildren=true"), QtxPopupMgr::VisibleRule );
1241 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1242 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1243 mgr->insert( separator(), -1, -1 ); // -----------
1245 #if OCC_VERSION_LARGE > 0x06050200
1246 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1247 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true";
1248 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1249 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule, QtxPopupMgr::VisibleRule );
1250 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1251 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1252 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC, QtxPopupMgr::VisibleRule );
1254 mgr->insert( separator(), -1, -1 ); // -----------
1255 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1256 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1257 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1258 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1259 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1260 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1261 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1262 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1263 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1264 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1265 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1266 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1267 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1268 mgr->insert( separator(), dispmodeId, -1 );
1269 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1270 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1271 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1272 mgr->insert( separator(), -1, -1 ); // -----------
1273 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1274 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1275 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1276 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1277 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1278 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1279 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1280 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1281 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1282 //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1283 mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1284 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 ); // material properties
1285 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'}) and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1286 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 ); // texture
1287 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1289 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1290 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1291 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1293 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1294 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1296 mgr->insert( separator(), -1, -1 ); // -----------
1297 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1298 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1299 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1300 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1301 mgr->insert( separator(), -1, -1 ); // -----------
1303 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1304 onlyComponent = "((type='Component') and selcount=1)",
1305 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1306 types = "'Shape' 'Group'";
1308 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1309 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1311 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1312 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1314 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1315 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1317 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1319 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1320 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1321 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1322 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1323 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1324 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1325 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1326 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1327 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1328 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1329 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1330 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1331 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1332 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1333 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1334 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1335 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1336 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1337 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1338 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1339 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1340 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1341 mgr->insert( separator(), selectonlyId, -1);
1342 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1343 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1344 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1345 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1346 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1348 mgr->insert( separator(), -1, -1 ); // -----------
1349 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1350 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
1353 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1354 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1356 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1357 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1359 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1362 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1364 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1365 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1366 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1370 //=======================================================================
1371 // function : GeometryGUI::activateModule()
1372 // purpose : Called when GEOM module is activated
1373 //=======================================================================
1374 bool GeometryGUI::activateModule( SUIT_Study* study )
1376 if ( CORBA::is_nil( myComponentGeom ) )
1379 bool res = SalomeApp_Module::activateModule( study );
1383 setMenuShown( true );
1384 setToolShown( true );
1386 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1387 PyGILState_STATE gstate = PyGILState_Ensure();
1388 PyObject* pluginsmanager=PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1389 if(pluginsmanager==NULL)
1393 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());
1398 PyGILState_Release(gstate);
1399 // end of GEOM plugins loading
1401 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1402 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1404 // Reset actions accelerator keys
1405 action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1406 action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1407 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1409 GUIMap::Iterator it;
1410 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1411 it.value()->activate( application()->desktop() );
1413 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1415 SUIT_ViewManager* vm;
1416 ViewManagerList OCCViewManagers, VTKViewManagers;
1418 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1419 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1420 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1421 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1423 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1424 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1425 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1426 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1429 SALOME_ListIO selected;
1430 sm->selectedObjects( selected );
1431 sm->clearSelected();
1433 // disable OCC selectors
1434 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1435 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1436 while ( itOCCSel.hasNext() )
1437 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1438 sr->setEnabled(true);
1440 // disable VTK selectors
1441 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1442 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1443 while ( itVTKSel.hasNext() )
1444 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1445 sr->setEnabled(true);
1447 sm->setSelectedObjects( selected, true ); //NPAL 19674
1449 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1451 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1453 // 0020836 (Basic vectors and origin)
1454 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1455 if( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1456 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1458 _PTR(Study) studyDS = appStudy->studyDS();
1460 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1461 if( !aSComponent ) // create objects automatically only if there is no GEOM component
1462 createOriginAndBaseVectors();
1471 //=======================================================================
1472 // function : GeometryGUI::deactivateModule()
1473 // purpose : Called when GEOM module is deactivated
1474 //=======================================================================
1475 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1477 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1479 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1481 setMenuShown( false );
1482 setToolShown( false );
1484 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1485 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1487 EmitSignalCloseAllDialogs();
1489 GUIMap::Iterator it;
1490 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1491 it.value()->deactivate();
1493 // Unset actions accelerator keys
1494 action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1495 action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1496 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1498 qDeleteAll(myOCCSelectors);
1499 myOCCSelectors.clear();
1500 getApp()->selectionMgr()->setEnabled( true, OCCViewer_Viewer::Type() );
1502 qDeleteAll(myVTKSelectors);
1503 myVTKSelectors.clear();
1504 getApp()->selectionMgr()->setEnabled( true, SVTK_Viewer::Type() );
1506 return SalomeApp_Module::deactivateModule( study );
1509 //=======================================================================
1510 // function : onWindowActivated()
1511 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1512 //=======================================================================
1513 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1518 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1519 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1521 // disable non-OCC viewframe menu commands
1522 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1523 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1524 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1525 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1526 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1527 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1528 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1530 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1531 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1533 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1536 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1538 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1539 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1542 void GeometryGUI::viewManagers( QStringList& lst ) const
1544 lst.append( OCCViewer_Viewer::Type() );
1547 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1549 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1551 qDebug( "connect" );
1552 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1553 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1554 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1555 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1556 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1557 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1558 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1559 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1561 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1562 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1564 // disable OCC selectors
1565 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1566 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1567 while ( itOCCSel.hasNext() )
1568 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1569 sr->setEnabled(true);
1571 else if ( vm->getType() == SVTK_Viewer::Type() )
1573 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1574 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1576 // disable VTK selectors
1577 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1578 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1579 while ( itVTKSel.hasNext() )
1580 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1581 sr->setEnabled(true);
1585 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1587 SUIT_ViewModel* viewer = vm->getViewModel();
1588 if ( vm->getType() == OCCViewer_Viewer::Type() )
1590 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1591 while ( itOCCSel.hasNext() )
1592 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1593 if ( sr->viewer() == viewer )
1595 delete myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1599 if ( vm->getType() == SVTK_Viewer::Type() )
1601 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1602 while ( itVTKSel.hasNext() )
1603 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1604 if ( sr->viewer() == viewer )
1606 delete myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1612 QString GeometryGUI::engineIOR() const
1614 if ( !CORBA::is_nil( GetGeomGen() ) )
1615 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
1619 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1620 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
1622 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
1624 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
1626 theWidth = theHeight = 0;
1628 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1629 Handle(TColStd_HArray1OfByte) aTexture;
1631 Handle(Graphic3d_HArray1OfBytes) aTexture;
1635 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
1636 aTexture = aTextureMap[ theId ];
1637 if ( aTexture.IsNull() ) {
1638 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
1639 if ( !aInsOp->_is_nil() ) {
1640 CORBA::Long aWidth, aHeight;
1641 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
1642 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
1644 theHeight = aHeight;
1646 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1647 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
1649 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
1652 for (int i = 0; i < aStream->length(); i++)
1653 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
1654 aTextureMap[ theId ] = aTexture;
1662 LightApp_Selection* GeometryGUI::createSelection() const
1664 return new GEOMGUI_Selection();
1667 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
1669 SalomeApp_Module::contextMenuPopup( client, menu, title );
1673 getApp()->selectionMgr()->selectedObjects(lst);
1674 if (lst.Extent() < 1)
1677 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
1678 _PTR(Study) study = appStudy->studyDS();
1680 bool isImported = true;
1681 SALOME_ListIteratorOfListIO anIt (lst);
1682 for (; anIt.More() && isImported; anIt.Next()) {
1683 Handle(SALOME_InteractiveObject) io = anIt.Value();
1684 _PTR(SObject) aSObj = study->FindObjectID(io->getEntry());
1686 if (lst.Extent() == 1) {
1687 // Set context menu title
1688 if (client == "OCCViewer" || client == "VTKViewer")
1689 title = QString(aSObj->GetName().c_str());
1692 CORBA::Object_var anObj = GeometryGUI::ClientSObjectToObject(aSObj);
1693 GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(anObj);
1694 if (CORBA::is_nil(aGeomObj) || aGeomObj->GetType() != GEOM_IMPORT)
1702 menu->addAction(action(GEOMOp::OpReimport)); // Reload imported shape
1707 void GeometryGUI::createPreferences()
1709 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
1711 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
1712 setPreferenceProperty( genGroup, "columns", 2 );
1714 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
1715 LightApp_Preferences::Selector,
1716 "Geometry", "display_mode" );
1718 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
1719 LightApp_Preferences::Color, "Geometry", "shading_color" );
1721 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
1722 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
1724 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
1725 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
1727 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
1728 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
1730 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
1731 LightApp_Preferences::Color, "Geometry", "line_color" );
1733 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
1734 LightApp_Preferences::Color, "Geometry", "point_color" );
1736 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
1737 LightApp_Preferences::Color, "Geometry", "isos_color" );
1739 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
1740 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
1742 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
1743 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
1745 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
1746 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
1748 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
1749 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
1751 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
1752 LightApp_Preferences::Selector,
1753 "Geometry", "material" );
1759 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
1760 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
1762 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
1763 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
1765 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
1766 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
1768 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
1769 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
1771 for(int i = 0; i < nb; i++) {
1772 setPreferenceProperty( wd[i], "min", 1 );
1773 setPreferenceProperty( wd[i], "max", 5 );
1777 // Quantities with individual precision settings
1778 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
1779 setPreferenceProperty( precGroup, "columns", 2 );
1781 const int nbQuantities = 8;
1782 int prec[nbQuantities], ii = 0;
1783 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
1784 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
1785 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
1786 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
1787 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
1788 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
1789 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
1790 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
1791 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
1792 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
1793 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
1794 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
1795 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
1796 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
1797 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
1798 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
1800 // Set property for precision value for spinboxes
1801 for ( ii = 0; ii < nbQuantities; ii++ ){
1802 setPreferenceProperty( prec[ii], "min", -14 );
1803 setPreferenceProperty( prec[ii], "max", 14 );
1804 setPreferenceProperty( prec[ii], "precision", 2 );
1807 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
1808 setPreferenceProperty( VertexGroup, "columns", 2 );
1810 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
1811 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
1813 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
1814 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
1816 // Set property for default display mode
1817 QStringList aModesList;
1818 aModesList.append( tr("MEN_WIREFRAME") );
1819 aModesList.append( tr("MEN_SHADING") );
1820 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
1822 QList<QVariant> anIndexesList;
1823 anIndexesList.append(0);
1824 anIndexesList.append(1);
1825 anIndexesList.append(2);
1827 setPreferenceProperty( dispmode, "strings", aModesList );
1828 setPreferenceProperty( dispmode, "indexes", anIndexesList );
1831 // Set property for top level display mode
1832 QStringList aTopModesList;
1833 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
1834 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
1835 aTopModesList.append( tr("MEN_WIREFRAME") );
1836 aTopModesList.append( tr("MEN_SHADING") );
1837 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
1839 QList<QVariant> aTopIndexesList;
1840 aTopIndexesList.append(0);
1841 aTopIndexesList.append(1);
1842 aTopIndexesList.append(2);
1843 aTopIndexesList.append(3);
1844 aTopIndexesList.append(4);
1846 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
1847 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
1849 // Set property for step value for spinboxes
1850 setPreferenceProperty( step, "min", 1 );
1851 setPreferenceProperty( step, "max", 10000 );
1852 setPreferenceProperty( step, "precision", 3 );
1854 // Set property for deflection value for spinboxes
1855 setPreferenceProperty( defl, "min", DEFLECTION_MIN );
1856 setPreferenceProperty( defl, "max", 1.0 );
1857 setPreferenceProperty( defl, "step", 1.0e-04 );
1858 setPreferenceProperty( defl, "precision", 6 );
1860 // Set property for default material
1861 Material_ResourceMgr aMatResMgr;
1862 setPreferenceProperty( material, "strings", aMatResMgr.materials() );
1864 // Set property vertex marker type
1865 QList<QVariant> aMarkerTypeIndicesList;
1866 QList<QVariant> aMarkerTypeIconsList;
1868 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1869 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
1870 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
1871 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
1872 aMarkerTypeIndicesList << (i-1);
1873 aMarkerTypeIconsList << pixmap;
1876 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
1877 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
1879 // Set property for vertex marker scale
1880 QList<QVariant> aMarkerScaleIndicesList;
1881 QStringList aMarkerScaleValuesList;
1883 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
1884 aMarkerScaleIndicesList << iii;
1885 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
1888 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
1889 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
1891 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
1892 setPreferenceProperty( originGroup, "columns", 2 );
1894 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
1895 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
1896 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
1897 setPreferenceProperty( baseVectorsLength, "max", 1000 );
1899 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
1900 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
1903 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
1904 setPreferenceProperty( operationsGroup, "columns", 2 );
1906 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
1907 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
1910 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
1912 if (section == "Geometry") {
1913 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1914 if (param == QString("SettingsGeomStep")) {
1915 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
1916 EmitSignalDefaultStepValueChanged(spin_step);
1917 } else if(param == QString("toplevel_color")) {
1918 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1919 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1920 } else if(param == QString("toplevel_dm")) {
1921 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
1926 LightApp_Displayer* GeometryGUI::displayer()
1929 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
1933 void GeometryGUI::setLocalSelectionMode(const int mode)
1935 myLocalSelectionMode = mode;
1937 int GeometryGUI::getLocalSelectionMode() const
1939 return myLocalSelectionMode;
1942 const char gSeparator = '_'; // character used to separate parameter names
1943 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
1946 * \brief Store visual parameters
1948 * This method is called just before the study document is saved.
1949 * Store visual parameters in AttributeParameter attribute(s)
1951 void GeometryGUI::storeVisualParameters (int savePoint)
1953 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
1954 if ( !appStudy || !appStudy->studyDS() )
1956 _PTR(Study) studyDS = appStudy->studyDS();
1958 // componentName is used for encoding of entries when storing them in IParameters
1959 std::string componentName = myComponentGeom->ComponentDataType();
1960 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1961 //if (!aSComponent) return;
1964 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
1965 componentName.c_str(),
1967 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
1969 QList<SUIT_ViewManager*> lst;
1970 QList<SUIT_ViewManager*>::Iterator it;
1972 // main cycle to store parameters of displayed objects
1974 getApp()->viewManagers(lst);
1975 for (it = lst.begin(); it != lst.end(); it++) {
1976 SUIT_ViewManager* vman = *it;
1977 QString vType = vman->getType();
1978 int aMgrId = vman->getGlobalId();
1979 // saving VTK actors properties
1980 QVector<SUIT_ViewWindow*> views = vman->getViews();
1981 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
1982 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
1983 ObjMap::ConstIterator o_it = anObjects.begin();
1984 for (; o_it != anObjects.end(); o_it++) {
1985 const PropMap aProps = o_it.value();
1987 //Check that object exists in the study
1988 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
1989 if ( !obj || !(aProps.count() > 0))
1991 // entry is "encoded" = it does NOT contain component adress, since it is a
1992 // subject to change on next component loading
1994 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
1996 _PTR(GenericAttribute) anAttr;
1997 if( !obj->FindAttribute(anAttr, "AttributeIOR"))
2000 std::string param,occParam = vType.toLatin1().data();
2001 occParam += NAME_SEPARATOR;
2002 occParam += QString::number(aMgrId).toLatin1().data();
2003 occParam += NAME_SEPARATOR;
2005 if(aProps.contains(VISIBILITY_PROP)) {
2006 param = occParam + VISIBILITY_PROP;
2007 ip->setParameter(entry, param, aProps.value(VISIBILITY_PROP).toInt() == 1 ? "On" : "Off");
2010 if(aProps.contains(DISPLAY_MODE_PROP)) {
2011 param = occParam + DISPLAY_MODE_PROP;
2012 ip->setParameter(entry, param, QString::number(aProps.value(DISPLAY_MODE_PROP).toInt()).toLatin1().data());
2015 if(aProps.contains(COLOR_PROP)) {
2016 QColor c = aProps.value(COLOR_PROP).value<QColor>();
2017 QString colorStr = QString::number(c.red()/255.);
2018 colorStr += DIGIT_SEPARATOR; colorStr += QString::number(c.green()/255.);
2019 colorStr += DIGIT_SEPARATOR; colorStr += QString::number(c.blue()/255.);
2020 param = occParam + COLOR_PROP;
2021 ip->setParameter(entry, param, colorStr.toLatin1().data());
2024 if(vType == SVTK_Viewer::Type()) {
2025 if(aProps.contains(OPACITY_PROP)) {
2026 param = occParam + OPACITY_PROP;
2027 ip->setParameter(entry, param, QString::number(1. - aProps.value(TRANSPARENCY_PROP).toDouble()).toLatin1().data());
2029 } else if (vType == SOCC_Viewer::Type()) {
2030 if(aProps.contains(TRANSPARENCY_PROP)) {
2031 param = occParam + TRANSPARENCY_PROP;
2032 ip->setParameter(entry, param, QString::number(aProps.value(TRANSPARENCY_PROP).toDouble()).toLatin1().data());
2035 if(aProps.contains(TOP_LEVEL_PROP)) {
2036 param = occParam + TOP_LEVEL_PROP;
2037 Standard_Boolean val = aProps.value(TOP_LEVEL_PROP).value<Standard_Boolean>();
2038 if (val == Standard_True)
2039 ip->setParameter(entry, param, "1");
2043 if(aProps.contains(ISOS_PROP)) {
2044 param = occParam + ISOS_PROP;
2045 ip->setParameter(entry, param, aProps.value(ISOS_PROP).toString().toLatin1().data());
2048 if(aProps.contains(VECTOR_MODE_PROP)) {
2049 param = occParam + VECTOR_MODE_PROP;
2050 ip->setParameter(entry, param, QString::number(aProps.value(VECTOR_MODE_PROP).toInt()).toLatin1().data());
2053 if(aProps.contains(DEFLECTION_COEFF_PROP)) {
2054 param = occParam + DEFLECTION_COEFF_PROP;
2055 ip->setParameter(entry, param, QString::number(aProps.value(DEFLECTION_COEFF_PROP).toDouble()).toLatin1().data());
2058 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2059 if(aProps.contains(MARKER_TYPE_PROP)) {
2060 param = occParam + MARKER_TYPE_PROP;
2061 ip->setParameter(entry, param, aProps.value(MARKER_TYPE_PROP).toString().toLatin1().data());
2064 if(aProps.contains(MATERIAL_PROP)) {
2065 param = occParam + MATERIAL_PROP;
2066 ip->setParameter(entry, param, aProps.value(MATERIAL_PROP).toString().toLatin1().data());
2069 if(aProps.contains( EDGE_WIDTH_PROP )) {
2070 param = occParam + EDGE_WIDTH_PROP;
2071 ip->setParameter(entry, param, aProps.value(EDGE_WIDTH_PROP).toString().toLatin1().data());
2074 if(aProps.contains( ISOS_WIDTH_PROP )) {
2075 param = occParam + ISOS_WIDTH_PROP;
2076 ip->setParameter(entry, param, aProps.value(ISOS_WIDTH_PROP).toString().toLatin1().data());
2078 } // object iterator
2080 } // for (viewManagers)
2084 * \brief Restore visual parameters
2086 * This method is called after the study document is opened.
2087 * Restore visual parameters from AttributeParameter attribute(s)
2089 void GeometryGUI::restoreVisualParameters (int savePoint)
2091 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2092 if (!appStudy || !appStudy->studyDS())
2094 _PTR(Study) studyDS = appStudy->studyDS();
2096 // componentName is used for encoding of entries when storing them in IParameters
2097 std::string componentName = myComponentGeom->ComponentDataType();
2098 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2099 //if (!aSComponent) return;
2102 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2103 componentName.c_str(),
2105 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2107 std::vector<std::string> entries = ip->getEntries();
2109 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2111 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2112 QString entry (ip->decodeEntry(*entIt).c_str());
2114 // Check that the entry corresponds to a real object in the Study
2115 // as the object may be deleted or modified after the visual state is saved.
2116 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2117 if (!so) continue; //Skip the not existent entry
2119 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2120 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2122 std::vector<std::string>::iterator namesIt = paramNames.begin();
2123 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2125 // actors are stored in a map after displaying of them for
2126 // quicker access in the future: map < viewID to actor >
2127 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2128 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2130 QString viewerTypStr;
2131 QString viewIndexStr;
2133 QVector<PropMap> aListOfMap;
2135 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2137 // visual parameters are stored in strings as follows: ViewerType_ViewIndex_ParamName.
2138 // '_' is used as separator and should not be used in viewer type or parameter names.
2139 QStringList lst = QString((*namesIt).c_str()).split(NAME_SEPARATOR, QString::SkipEmptyParts);
2140 if (lst.size() != 3)
2143 viewerTypStr = lst[0];
2144 viewIndexStr = lst[1];
2145 QString paramNameStr = lst[2];
2148 viewIndex = viewIndexStr.toUInt(&ok);
2149 if (!ok) // bad conversion of view index to integer
2152 if((viewIndex + 1) > aListOfMap.count()) {
2153 aListOfMap.resize(viewIndex + 1);
2156 QString val((*valuesIt).c_str());
2157 if(paramNameStr == VISIBILITY_PROP){
2158 aListOfMap[viewIndex].insert(VISIBILITY_PROP, val == "On" ? 1 : 0);
2160 } else if(paramNameStr == OPACITY_PROP) {
2161 aListOfMap[viewIndex].insert(TRANSPARENCY_PROP, 1. - val.toDouble());
2163 } else if(paramNameStr == TRANSPARENCY_PROP) {
2164 aListOfMap[viewIndex].insert( TRANSPARENCY_PROP, val.toDouble() );
2166 } else if(paramNameStr == TOP_LEVEL_PROP) {
2167 aListOfMap[viewIndex].insert( TRANSPARENCY_PROP, val == "1" ? Standard_True : Standard_False );
2169 } else if(paramNameStr == DISPLAY_MODE_PROP) {
2170 aListOfMap[viewIndex].insert( DISPLAY_MODE_PROP, val.toInt());
2172 } else if(paramNameStr == ISOS_PROP) {
2173 aListOfMap[viewIndex].insert( ISOS_PROP, val);
2175 } else if(paramNameStr == COLOR_PROP) {
2176 QStringList rgb = val.split(DIGIT_SEPARATOR);
2177 if(rgb.count() == 3) {
2178 QColor c(int(rgb[0].toDouble()*255), int(rgb[1].toDouble()*255), int(rgb[2].toDouble()*255));
2179 aListOfMap[viewIndex].insert( COLOR_PROP, c);
2181 } else if(paramNameStr == VECTOR_MODE_PROP) {
2182 aListOfMap[viewIndex].insert( VECTOR_MODE_PROP, val.toInt());
2184 } else if(paramNameStr == DEFLECTION_COEFF_PROP) {
2185 aListOfMap[viewIndex].insert( DEFLECTION_COEFF_PROP, val.toDouble());
2186 } else if(paramNameStr == MARKER_TYPE_PROP) {
2187 aListOfMap[viewIndex].insert( MARKER_TYPE_PROP, val);
2188 } else if(paramNameStr == MATERIAL_PROP) {
2189 aListOfMap[viewIndex].insert( MATERIAL_PROP, val);
2190 } else if(paramNameStr == EDGE_WIDTH_PROP) {
2191 aListOfMap[viewIndex].insert( EDGE_WIDTH_PROP , val);
2192 } else if(paramNameStr == ISOS_WIDTH_PROP) {
2193 aListOfMap[viewIndex].insert( ISOS_WIDTH_PROP , val);
2198 } // for names/parameters iterator
2200 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2202 for (int index = 0; index < aListOfMap.count(); index++) {
2204 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
2206 //Get Visibility property of the current PropMap
2207 if (aListOfMap[index].value(VISIBILITY_PROP) == 1) {
2208 SUIT_ViewManager* vman = lst.at(index);
2209 SUIT_ViewModel* vmodel = vman->getViewModel();
2210 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
2214 } // for entries iterator
2216 // update all VTK and OCC views
2217 QList<SUIT_ViewManager*> lst;
2218 getApp()->viewManagers(lst);
2219 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
2220 SUIT_ViewModel* vmodel = (*it)->getViewModel();
2223 if (vmodel->getType() == SVTK_Viewer::Type()) {
2224 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
2225 vtkView->getRenderer()->ResetCameraClippingRange();
2228 else if (vmodel->getType() == SOCC_Viewer::Type()) {
2229 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
2230 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
2237 void GeometryGUI::onViewAboutToShow()
2239 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
2240 QAction* a = action( GEOMOp::OpSwitchVectors );
2242 a->setEnabled(true);
2243 bool vmode = window->property("VectorsMode").toBool();
2244 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
2246 a->setText ( tr("MEN_VECTOR_MODE_ON") );
2247 a->setEnabled(false);
2252 \brief Return action by id
2253 \param id identifier of the action
2256 QAction* GeometryGUI::getAction(const int id) {
2261 \brief Check if this object is can't be renamed in place
2263 This method can be re-implemented in the subclasses.
2264 Return true in case if object isn't reference or component (module root).
2266 \param entry column id
2267 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
2269 bool GeometryGUI::renameAllowed( const QString& entry) const {
2271 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
2272 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
2273 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
2275 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
2280 Rename object by entry.
2281 \param entry entry of the object
2282 \param name new name of the object
2283 \brief Return \c true if rename operation finished successfully, \c false otherwise.
2285 bool GeometryGUI::renameObject( const QString& entry, const QString& name) {
2287 bool result = false;
2289 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
2290 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
2295 _PTR(Study) aStudy = appStudy->studyDS();
2300 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
2302 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
2306 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
2307 _PTR(GenericAttribute) anAttr;
2309 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
2310 _PTR(AttributeName) aName (anAttr);
2312 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
2313 if (!CORBA::is_nil(anObj)) {
2314 aName->SetValue( name.toLatin1().data() ); // rename the SObject
2315 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object