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::OpShowOnlyChildren
380 << GEOMOp::OpDiscloseChildren
381 << GEOMOp::OpConcealChildren
382 << GEOMOp::OpUnpublishObject
383 << GEOMOp::OpPublishObject
384 << GEOMOp::OpPointMarker;
385 if ( !ViewOCC && !ViewVTK && !NotViewerDependentCommands.contains( id ) )
388 // fix for IPAL9103, point 2
389 if ( CORBA::is_nil( GetGeomGen() ) ) {
390 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
395 // find corresponding GUI library
397 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
398 createOriginAndBaseVectors(); // internal operation
400 case GEOMOp::OpImport: // MENU FILE - IMPORT
401 case GEOMOp::OpExport: // MENU FILE - EXPORT
402 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
403 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
404 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
405 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
406 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
407 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
408 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
409 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
410 case GEOMOp::OpDelete: // MENU EDIT - DELETE
411 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
412 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
413 case GEOMOp::OpColor: // POPUP MENU - COLOR
414 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
415 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
416 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
417 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
418 case GEOMOp::OpIsos: // POPUP MENU - ISOS
419 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
420 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
421 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
422 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
423 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
424 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
425 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
426 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
427 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
428 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
429 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
430 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
431 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
432 case GEOMOp::OpClsBringToFront: //
433 libName = "GEOMToolsGUI";
435 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
436 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
437 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
438 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
439 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
440 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
441 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
442 case GEOMOp::OpHide: // MENU VIEW - ERASE
443 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
444 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
445 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
446 case GEOMOp::OpShading: // POPUP MENU - SHADING
447 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
448 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
449 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
450 libName = "DisplayGUI";
452 case GEOMOp::OpPoint: // MENU BASIC - POINT
453 case GEOMOp::OpLine: // MENU BASIC - LINE
454 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
455 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
456 case GEOMOp::OpArc: // MENU BASIC - ARC
457 case GEOMOp::OpVector: // MENU BASIC - VECTOR
458 case GEOMOp::OpPlane: // MENU BASIC - PLANE
459 case GEOMOp::OpCurve: // MENU BASIC - CURVE
460 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
461 libName = "BasicGUI";
463 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
464 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
465 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
466 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
467 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
468 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
469 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
470 libName = "PrimitiveGUI";
472 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
473 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
474 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
475 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
476 libName = "GenerationGUI";
478 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
479 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
480 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
482 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
484 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
485 libName = "EntityGUI";
487 case GEOMOp::OpEdge: // MENU BUILD - EDGE
488 case GEOMOp::OpWire: // MENU BUILD - WIRE
489 case GEOMOp::OpFace: // MENU BUILD - FACE
490 case GEOMOp::OpShell: // MENU BUILD - SHELL
491 case GEOMOp::OpSolid: // MENU BUILD - SOLID
492 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
493 libName = "BuildGUI";
495 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
496 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
497 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
498 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
499 libName = "BooleanGUI";
501 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
502 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
503 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
504 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
505 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
506 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
507 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
508 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
509 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
510 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
511 libName = "TransformationGUI";
513 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
514 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
515 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
516 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
517 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
518 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
519 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
520 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
521 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
522 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
523 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
524 libName = "OperationGUI";
526 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
527 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
528 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
529 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
530 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
531 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
532 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
533 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
534 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
535 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
536 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
537 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
538 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
539 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
540 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
541 libName = "RepairGUI";
543 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
544 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
545 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
546 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
547 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
548 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
549 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
550 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
551 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
552 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
553 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
554 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
555 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
556 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
557 libName = "MeasureGUI";
559 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
560 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
561 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
562 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
563 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
564 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
565 libName = "GroupGUI";
567 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
568 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
569 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
570 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
571 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
572 libName = "BlocksGUI";
574 case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
575 case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
576 // case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
577 case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
578 case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
579 //@@ 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 @@//
580 libName = "AdvancedGUI";
586 GEOMGUI* library = 0;
587 if ( !libName.isEmpty() ) {
589 libName = QString( "lib" ) + libName + ".so";
591 libName = libName + ".dll";
593 library = getLibrary( libName );
596 // call method of corresponding GUI library
598 library->OnGUIEvent( id, desk );
600 // Update a list of materials for "Preferences" dialog
601 if ( id == GEOMOp::OpMaterialProperties ) {
602 LightApp_Preferences* pref = preferences();
604 Material_ResourceMgr aMatResMgr;
605 setPreferenceProperty( pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true )->id(),
607 aMatResMgr.materials() );
612 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
615 //=================================================================================
616 // function : GeometryGUI::OnKeyPress()
617 // purpose : Called when any key is pressed by user [static]
618 //=================================================================================
619 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
621 if ( !application() )
623 foreach ( GEOMGUI* lib, myGUIMap )
624 lib->OnKeyPress( e, application()->desktop(), w );
627 //=================================================================================
628 // function : GeometryGUI::OnMouseMove()
629 // purpose : Manages mouse move events [static]
630 //=================================================================================
631 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
633 if ( !application() )
635 foreach ( GEOMGUI* lib, myGUIMap )
636 lib->OnMouseMove( e, application()->desktop(), w );
639 //=================================================================================
640 // function : GeometryGUI::OnMouseRelease()
641 // purpose : Manages mouse release events [static]
642 //=================================================================================
643 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
645 if ( !application() )
647 foreach ( GEOMGUI* lib, myGUIMap )
648 lib->OnMouseRelease( e, application()->desktop(), w );
651 //=================================================================================
652 // function : GeometryGUI::OnMousePress()
653 // purpose : Manage mouse press events [static]
654 //=================================================================================
655 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
657 if ( !application() )
659 foreach ( GEOMGUI* lib, myGUIMap )
660 lib->OnMousePress( e, application()->desktop(), w );
663 //=======================================================================
664 // function : createGeomAction
666 //=======================================================================
667 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
668 const int accel, const bool toggle, const QString& shortcutAction )
670 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
671 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
672 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
674 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
676 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
677 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
679 application()->desktop(),
681 this, SLOT( OnGUIEvent() ),
685 //=======================================================================
686 // function : createOriginAndBaseVectors
688 //=======================================================================
689 void GeometryGUI::createOriginAndBaseVectors()
691 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
693 _PTR(Study) studyDS = appStudy->studyDS();
694 if( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
695 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
696 if( !aBasicOperations->_is_nil() ) {
697 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
698 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
699 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
700 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
701 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
702 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
704 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
705 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
706 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
707 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
708 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
710 getApp()->updateObjectBrowser( false );
716 //=======================================================================
717 // function : GeometryGUI::initialize()
718 // purpose : Called when GEOM module is created
719 //=======================================================================
720 void GeometryGUI::initialize( CAM_Application* app )
722 SalomeApp_Module::initialize( app );
724 // ----- create actions --------------
726 createGeomAction( GEOMOp::OpImport, "IMPORT", "", Qt::ControlModifier + Qt::Key_I );
727 createGeomAction( GEOMOp::OpExport, "EXPORT", "", Qt::ControlModifier + Qt::Key_E );
729 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
731 createGeomAction( GEOMOp::OpPoint, "POINT" );
732 createGeomAction( GEOMOp::OpLine, "LINE" );
733 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
734 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
735 createGeomAction( GEOMOp::OpArc, "ARC" );
736 createGeomAction( GEOMOp::OpCurve, "CURVE" );
737 createGeomAction( GEOMOp::OpVector, "VECTOR" );
738 createGeomAction( GEOMOp::OpPlane, "PLANE" );
739 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
740 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
742 createGeomAction( GEOMOp::OpBox, "BOX" );
743 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
744 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
745 createGeomAction( GEOMOp::OpTorus, "TORUS" );
746 createGeomAction( GEOMOp::OpCone, "CONE" );
747 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
748 createGeomAction( GEOMOp::OpDisk, "DISK" );
750 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
751 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
752 createGeomAction( GEOMOp::OpFilling, "FILLING" );
753 createGeomAction( GEOMOp::OpPipe, "PIPE" );
755 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
756 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
757 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
758 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
759 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
761 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
763 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
764 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
766 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
767 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
768 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
770 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
772 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
774 createGeomAction( GEOMOp::OpEdge, "EDGE" );
775 createGeomAction( GEOMOp::OpWire, "WIRE" );
776 createGeomAction( GEOMOp::OpFace, "FACE" );
777 createGeomAction( GEOMOp::OpShell, "SHELL" );
778 createGeomAction( GEOMOp::OpSolid, "SOLID" );
779 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
781 createGeomAction( GEOMOp::OpFuse, "FUSE" );
782 createGeomAction( GEOMOp::OpCommon, "COMMON" );
783 createGeomAction( GEOMOp::OpCut, "CUT" );
784 createGeomAction( GEOMOp::OpSection, "SECTION" );
786 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
787 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
788 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
789 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
790 createGeomAction( GEOMOp::OpScale, "SCALE" );
791 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
792 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
793 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
794 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
796 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
797 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
798 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
799 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
800 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
801 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
802 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
803 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
804 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
805 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
806 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
808 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
809 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
810 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
812 createGeomAction( GEOMOp::OpSewing, "SEWING" );
813 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
814 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
815 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
816 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
817 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
818 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
819 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
820 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
821 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
822 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
823 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
824 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
825 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
826 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
828 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
829 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
830 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
831 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
832 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
833 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
834 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
835 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
837 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
838 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
839 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
840 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
841 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
842 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
844 #ifdef _DEBUG_ // PAL16821
845 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
848 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
849 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
850 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
851 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
852 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
853 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
854 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
855 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
856 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
857 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
858 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
859 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
860 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
861 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
862 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
863 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
864 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
865 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
866 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
867 createGeomAction( GEOMOp::OpHide, "ERASE" );
869 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
870 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
871 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
872 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
873 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
874 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
875 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
876 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
877 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
878 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
879 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
880 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
881 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
882 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
883 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
884 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
885 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
886 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
887 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
888 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
889 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
891 createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
893 // Create actions for increase/decrease transparency shortcuts
894 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
895 "Geometry:Increase transparency");
896 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
897 "Geometry:Decrease transparency");
899 // Create actions for increase/decrease number of isolines
900 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
901 "Geometry:Increase number of isolines");
902 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
903 "Geometry:Decrease number of isolines");
905 // createGeomAction( GEOMOp::OpPipeTShapeGroups, "PIPETSHAPEGROUPS" );
906 createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
907 createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
908 //@@ 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 @@//
910 // ---- create menus --------------------------
912 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
913 createMenu( separator(), fileId, 10 );
914 createMenu( GEOMOp::OpImport, fileId, 10 );
915 createMenu( GEOMOp::OpExport, fileId, 10 );
916 createMenu( separator(), fileId, -1 );
918 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
919 createMenu( GEOMOp::OpDelete, editId, -1 );
921 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
923 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
924 createMenu( GEOMOp::OpPoint, basicId, -1 );
925 createMenu( GEOMOp::OpLine, basicId, -1 );
926 createMenu( GEOMOp::OpCircle, basicId, -1 );
927 createMenu( GEOMOp::OpEllipse, basicId, -1 );
928 createMenu( GEOMOp::OpArc, basicId, -1 );
929 createMenu( GEOMOp::OpCurve, basicId, -1 );
930 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
931 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
932 createMenu( separator(), basicId, -1 );
933 createMenu( GEOMOp::OpVector, basicId, -1 );
934 createMenu( GEOMOp::OpPlane, basicId, -1 );
935 createMenu( GEOMOp::OpLCS, basicId, -1 );
936 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
938 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
939 createMenu( GEOMOp::OpBox, primId, -1 );
940 createMenu( GEOMOp::OpCylinder, primId, -1 );
941 createMenu( GEOMOp::OpSphere, primId, -1 );
942 createMenu( GEOMOp::OpTorus, primId, -1 );
943 createMenu( GEOMOp::OpCone, primId, -1 );
944 createMenu( GEOMOp::OpRectangle, primId, -1 );
945 createMenu( GEOMOp::OpDisk, primId, -1 );
946 createMenu( GEOMOp::OpPipeTShape,primId, -1 );
948 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
949 createMenu( GEOMOp::OpPrism, genId, -1 );
950 createMenu( GEOMOp::OpRevolution, genId, -1 );
951 createMenu( GEOMOp::OpFilling, genId, -1 );
952 createMenu( GEOMOp::OpPipe, genId, -1 );
954 // int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
956 //@@ 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 @@//
958 createMenu( separator(), newEntId, -1 );
960 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
961 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
962 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
963 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
964 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
965 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
967 createMenu( separator(), newEntId, -1 );
969 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
970 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
971 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
972 createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
973 createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
975 createMenu( separator(), newEntId, -1 );
977 createMenu( GEOMOp::OpExplode, newEntId, -1 );
979 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
980 createMenu( GEOMOp::OpEdge, buildId, -1 );
981 createMenu( GEOMOp::OpWire, buildId, -1 );
982 createMenu( GEOMOp::OpFace, buildId, -1 );
983 createMenu( GEOMOp::OpShell, buildId, -1 );
984 createMenu( GEOMOp::OpSolid, buildId, -1 );
985 createMenu( GEOMOp::OpCompound, buildId, -1 );
987 createMenu( separator(), newEntId, -1 );
989 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
991 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
994 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
996 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
997 createMenu( GEOMOp::OpFuse, boolId, -1 );
998 createMenu( GEOMOp::OpCommon, boolId, -1 );
999 createMenu( GEOMOp::OpCut, boolId, -1 );
1000 createMenu( GEOMOp::OpSection, boolId, -1 );
1002 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1003 createMenu( GEOMOp::OpTranslate, transId, -1 );
1004 createMenu( GEOMOp::OpRotate, transId, -1 );
1005 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1006 createMenu( GEOMOp::OpMirror, transId, -1 );
1007 createMenu( GEOMOp::OpScale, transId, -1 );
1008 createMenu( GEOMOp::OpOffset, transId, -1 );
1009 createMenu( GEOMOp::OpProjection, transId, -1 );
1010 createMenu( separator(), transId, -1 );
1011 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1012 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1014 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1015 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1016 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1017 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1019 createMenu( separator(), operId, -1 );
1021 createMenu( GEOMOp::OpPartition, operId, -1 );
1022 createMenu( GEOMOp::OpArchimede, operId, -1 );
1023 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1024 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1026 createMenu( separator(), operId, -1 );
1028 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1029 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1030 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1031 createMenu( GEOMOp::OpChamfer, operId, -1 );
1032 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1033 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1034 //createMenu( GEOMOp::OpClipping, operId, -1 );
1036 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1037 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1038 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1039 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1040 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1041 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1042 createMenu( GEOMOp::OpSewing, repairId, -1 );
1043 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1044 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1045 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1046 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1047 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1048 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1049 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1050 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1051 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1053 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1054 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1055 createMenu( GEOMOp::OpProperties, measurId, -1 );
1056 createMenu( separator(), measurId, -1 );
1057 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1058 createMenu( GEOMOp::OpInertia, measurId, -1 );
1059 createMenu( GEOMOp::OpNormale, measurId, -1 );
1060 createMenu( separator(), measurId, -1 );
1061 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1062 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1063 createMenu( separator(), measurId, -1 );
1065 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1066 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1067 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1068 createMenu( GEOMOp::OpAngle, dimId, -1 );
1070 createMenu( separator(), measurId, -1 );
1071 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1072 createMenu( separator(), measurId, -1 );
1073 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1074 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1075 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1076 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1077 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1079 #ifdef _DEBUG_ // PAL16821
1080 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1081 createMenu( separator(), toolsId, -1 );
1082 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1085 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1086 createMenu( separator(), viewId, -1 );
1088 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1089 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1090 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1091 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1092 createMenu( separator(), dispmodeId, -1 );
1093 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1095 createMenu( separator(), viewId, -1 );
1096 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1097 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1098 createMenu( separator(), viewId, -1 );
1099 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1100 createMenu( separator(), viewId, -1 );
1104 because of these items are accessible through object browser and viewers
1105 we have removed they from main menu
1107 createMenu( GEOMOp::OpShow, viewId, -1 );
1108 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1109 createMenu( GEOMOp::OpHide, viewId, -1 );
1112 // ---- create toolbars --------------------------
1114 int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1115 createTool( GEOMOp::OpPoint, basicTbId );
1116 createTool( GEOMOp::OpLine, basicTbId );
1117 createTool( GEOMOp::OpCircle, basicTbId );
1118 createTool( GEOMOp::OpEllipse, basicTbId );
1119 createTool( GEOMOp::OpArc, basicTbId );
1120 createTool( GEOMOp::OpCurve, basicTbId );
1121 createTool( GEOMOp::OpVector, basicTbId );
1122 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1123 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1124 createTool( GEOMOp::OpPlane, basicTbId );
1125 createTool( GEOMOp::OpLCS, basicTbId );
1126 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1128 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ) );
1129 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1130 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1132 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1133 createTool( GEOMOp::OpBox, primTbId );
1134 createTool( GEOMOp::OpCylinder, primTbId );
1135 createTool( GEOMOp::OpSphere, primTbId );
1136 createTool( GEOMOp::OpTorus, primTbId );
1137 createTool( GEOMOp::OpCone, primTbId );
1138 createTool( GEOMOp::OpRectangle, primTbId );
1139 createTool( GEOMOp::OpDisk, primTbId );
1140 createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1142 int blocksTbId = createTool( tr( "TOOL_BLOCKS" ) );
1143 createTool( GEOMOp::OpDividedDisk, blocksTbId );
1144 createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1146 // int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) ); //rnc
1147 // createTool( GEOMOp::OpPipeTShape, advancedTbId );
1149 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1150 createTool( GEOMOp::OpFuse, boolTbId );
1151 createTool( GEOMOp::OpCommon, boolTbId );
1152 createTool( GEOMOp::OpCut, boolTbId );
1153 createTool( GEOMOp::OpSection, boolTbId );
1155 int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1156 createTool( GEOMOp::OpPrism, genTbId );
1157 createTool( GEOMOp::OpRevolution, genTbId );
1158 createTool( GEOMOp::OpFilling, genTbId );
1159 createTool( GEOMOp::OpPipe, genTbId );
1161 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1162 createTool( GEOMOp::OpTranslate, transTbId );
1163 createTool( GEOMOp::OpRotate, transTbId );
1164 createTool( GEOMOp::OpChangeLoc, transTbId );
1165 createTool( GEOMOp::OpMirror, transTbId );
1166 createTool( GEOMOp::OpScale, transTbId );
1167 createTool( GEOMOp::OpOffset, transTbId );
1168 createTool( GEOMOp::OpProjection, transTbId );
1169 createTool( separator(), transTbId );
1170 createTool( GEOMOp::OpMultiTranslate, transTbId );
1171 createTool( GEOMOp::OpMultiRotate, transTbId );
1173 int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1174 createTool( GEOMOp::OpExplode, operTbId );
1175 createTool( GEOMOp::OpPartition, operTbId );
1176 createTool( GEOMOp::OpArchimede, operTbId );
1177 createTool( GEOMOp::OpShapesOnShape, operTbId );
1178 createTool( GEOMOp::OpSharedShapes, operTbId );
1180 int featTbId = createTool( tr( "TOOL_FEATURES" ) );
1181 createTool( GEOMOp::OpFillet1d, featTbId );
1182 createTool( GEOMOp::OpFillet2d, featTbId );
1183 createTool( GEOMOp::OpFillet3d, featTbId );
1184 createTool( GEOMOp::OpChamfer, featTbId );
1185 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1186 createTool( GEOMOp::OpExtrudedCut, featTbId );
1188 int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1189 createTool( GEOMOp::OpEdge, buildTbId );
1190 createTool( GEOMOp::OpWire, buildTbId );
1191 createTool( GEOMOp::OpFace, buildTbId );
1192 createTool( GEOMOp::OpShell, buildTbId );
1193 createTool( GEOMOp::OpSolid, buildTbId );
1194 createTool( GEOMOp::OpCompound, buildTbId );
1196 int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1197 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1198 createTool( GEOMOp::OpProperties, measureTbId );
1199 createTool( GEOMOp::OpCenterMass, measureTbId );
1200 createTool( GEOMOp::OpInertia, measureTbId );
1201 createTool( GEOMOp::OpNormale, measureTbId );
1202 createTool( separator(), measureTbId );
1203 createTool( GEOMOp::OpBoundingBox, measureTbId );
1204 createTool( GEOMOp::OpMinDistance, measureTbId );
1205 createTool( GEOMOp::OpAngle, measureTbId );
1206 createTool( GEOMOp::OpTolerance , measureTbId );
1207 createTool( separator(), measureTbId );
1208 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1209 createTool( GEOMOp::OpFreeFaces, measureTbId );
1210 createTool( separator(), measureTbId );
1211 createTool( GEOMOp::OpWhatIs, measureTbId );
1212 createTool( GEOMOp::OpCheckShape, measureTbId );
1213 createTool( GEOMOp::OpCheckCompound, measureTbId );
1214 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1215 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1217 int picturesTbId = createTool( tr( "TOOL_PICTURES" ) );
1218 createTool( GEOMOp::OpPictureImport, picturesTbId );
1220 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1223 // int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1225 //@@ 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 @@//
1227 // ---- create popup menus --------------------------
1229 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1230 QString clientOCC = "(client='OCCViewer')";
1231 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1232 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1234 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1235 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1236 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1237 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1239 QString autoColorPrefix =
1240 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1242 QtxPopupMgr* mgr = popupMgr();
1244 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1245 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
1246 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1247 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1248 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1249 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1251 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal shild items
1252 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1253 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1254 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1255 mgr->insert( separator(), -1, -1 ); // -----------
1257 #if OCC_VERSION_LARGE > 0x06050200
1258 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1259 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true";
1260 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1261 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule, QtxPopupMgr::VisibleRule );
1262 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1263 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1264 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC, QtxPopupMgr::VisibleRule );
1266 mgr->insert( separator(), -1, -1 ); // -----------
1267 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1268 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1269 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1270 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1271 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1272 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1273 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1274 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1275 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1276 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1277 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1278 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1279 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1280 mgr->insert( separator(), dispmodeId, -1 );
1281 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1282 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1283 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1284 mgr->insert( separator(), -1, -1 ); // -----------
1285 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1286 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1287 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1288 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1289 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1290 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1291 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1292 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1293 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1294 //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1295 mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1296 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 ); // material properties
1297 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'}) and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1298 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 ); // texture
1299 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1301 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1302 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1303 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1305 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1306 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1308 mgr->insert( separator(), -1, -1 ); // -----------
1309 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1310 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1311 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1312 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1313 mgr->insert( separator(), -1, -1 ); // -----------
1315 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1316 onlyComponent = "((type='Component') and selcount=1)",
1317 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1318 types = "'Shape' 'Group'";
1320 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1321 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1323 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1324 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1326 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1327 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1329 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1331 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1332 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1333 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1334 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1335 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1336 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1337 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1338 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1339 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1340 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1341 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1342 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1343 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1344 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1345 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1346 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1347 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1348 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1349 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1350 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1351 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1352 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1353 mgr->insert( separator(), selectonlyId, -1);
1354 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1355 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1356 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1357 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1358 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1359 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1360 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1362 mgr->insert( separator(), -1, -1 ); // -----------
1363 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1364 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
1367 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1368 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1370 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1371 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1373 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1376 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1378 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1379 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1380 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1384 //=======================================================================
1385 // function : GeometryGUI::activateModule()
1386 // purpose : Called when GEOM module is activated
1387 //=======================================================================
1388 bool GeometryGUI::activateModule( SUIT_Study* study )
1390 if ( CORBA::is_nil( myComponentGeom ) )
1393 bool res = SalomeApp_Module::activateModule( study );
1397 setMenuShown( true );
1398 setToolShown( true );
1400 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1401 PyGILState_STATE gstate = PyGILState_Ensure();
1402 PyObject* pluginsmanager=PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1403 if(pluginsmanager==NULL)
1407 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());
1412 PyGILState_Release(gstate);
1413 // end of GEOM plugins loading
1415 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1416 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1418 // Reset actions accelerator keys
1419 action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1420 action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1421 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1423 GUIMap::Iterator it;
1424 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1425 it.value()->activate( application()->desktop() );
1427 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1429 SUIT_ViewManager* vm;
1430 ViewManagerList OCCViewManagers, VTKViewManagers;
1432 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1433 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1434 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1435 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1437 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1438 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1439 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1440 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1443 SALOME_ListIO selected;
1444 sm->selectedObjects( selected );
1445 sm->clearSelected();
1447 // disable OCC selectors
1448 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1449 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1450 while ( itOCCSel.hasNext() )
1451 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1452 sr->setEnabled(true);
1454 // disable VTK selectors
1455 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1456 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1457 while ( itVTKSel.hasNext() )
1458 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1459 sr->setEnabled(true);
1461 sm->setSelectedObjects( selected, true ); //NPAL 19674
1463 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1465 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1467 // 0020836 (Basic vectors and origin)
1468 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1469 if( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1470 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1472 _PTR(Study) studyDS = appStudy->studyDS();
1474 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1475 if( !aSComponent ) // create objects automatically only if there is no GEOM component
1476 createOriginAndBaseVectors();
1485 //=======================================================================
1486 // function : GeometryGUI::deactivateModule()
1487 // purpose : Called when GEOM module is deactivated
1488 //=======================================================================
1489 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1491 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1493 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1495 setMenuShown( false );
1496 setToolShown( false );
1498 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1499 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1501 EmitSignalCloseAllDialogs();
1503 GUIMap::Iterator it;
1504 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1505 it.value()->deactivate();
1507 // Unset actions accelerator keys
1508 action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1509 action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1510 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1512 qDeleteAll(myOCCSelectors);
1513 myOCCSelectors.clear();
1514 getApp()->selectionMgr()->setEnabled( true, OCCViewer_Viewer::Type() );
1516 qDeleteAll(myVTKSelectors);
1517 myVTKSelectors.clear();
1518 getApp()->selectionMgr()->setEnabled( true, SVTK_Viewer::Type() );
1520 return SalomeApp_Module::deactivateModule( study );
1523 //=======================================================================
1524 // function : onWindowActivated()
1525 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1526 //=======================================================================
1527 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1532 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1533 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1535 // disable non-OCC viewframe menu commands
1536 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1537 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1538 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1539 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1540 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1541 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1542 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1544 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1545 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1547 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1550 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1552 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1553 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1556 void GeometryGUI::viewManagers( QStringList& lst ) const
1558 lst.append( OCCViewer_Viewer::Type() );
1561 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1563 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1565 qDebug( "connect" );
1566 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1567 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1568 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1569 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1570 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1571 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1572 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1573 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1575 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1576 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1578 // disable OCC selectors
1579 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1580 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1581 while ( itOCCSel.hasNext() )
1582 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1583 sr->setEnabled(true);
1585 else if ( vm->getType() == SVTK_Viewer::Type() )
1587 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1588 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1590 // disable VTK selectors
1591 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1592 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1593 while ( itVTKSel.hasNext() )
1594 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1595 sr->setEnabled(true);
1599 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1601 SUIT_ViewModel* viewer = vm->getViewModel();
1602 if ( vm->getType() == OCCViewer_Viewer::Type() )
1604 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1605 while ( itOCCSel.hasNext() )
1606 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1607 if ( sr->viewer() == viewer )
1609 delete myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1613 if ( vm->getType() == SVTK_Viewer::Type() )
1615 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1616 while ( itVTKSel.hasNext() )
1617 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1618 if ( sr->viewer() == viewer )
1620 delete myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1626 QString GeometryGUI::engineIOR() const
1628 if ( !CORBA::is_nil( GetGeomGen() ) )
1629 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
1633 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1634 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
1636 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
1638 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
1640 theWidth = theHeight = 0;
1642 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1643 Handle(TColStd_HArray1OfByte) aTexture;
1645 Handle(Graphic3d_HArray1OfBytes) aTexture;
1649 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
1650 aTexture = aTextureMap[ theId ];
1651 if ( aTexture.IsNull() ) {
1652 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
1653 if ( !aInsOp->_is_nil() ) {
1654 CORBA::Long aWidth, aHeight;
1655 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
1656 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
1658 theHeight = aHeight;
1660 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1661 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
1663 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
1666 for (int i = 0; i < aStream->length(); i++)
1667 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
1668 aTextureMap[ theId ] = aTexture;
1676 LightApp_Selection* GeometryGUI::createSelection() const
1678 return new GEOMGUI_Selection();
1681 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
1683 SalomeApp_Module::contextMenuPopup( client, menu, title );
1685 getApp()->selectionMgr()->selectedObjects( lst );
1686 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
1687 Handle(SALOME_InteractiveObject) io = lst.First();
1688 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1689 _PTR(Study) study = appStudy->studyDS();
1690 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
1692 QString aName = QString( obj->GetName().c_str() );
1693 aName.remove( QRegExp("\\s+$") );
1699 void GeometryGUI::createPreferences()
1701 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
1703 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
1704 setPreferenceProperty( genGroup, "columns", 2 );
1706 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
1707 LightApp_Preferences::Selector,
1708 "Geometry", "display_mode" );
1710 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
1711 LightApp_Preferences::Color, "Geometry", "shading_color" );
1713 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
1714 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
1716 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
1717 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
1719 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
1720 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
1722 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
1723 LightApp_Preferences::Color, "Geometry", "line_color" );
1725 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
1726 LightApp_Preferences::Color, "Geometry", "point_color" );
1728 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
1729 LightApp_Preferences::Color, "Geometry", "isos_color" );
1731 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
1732 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
1734 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
1735 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
1737 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
1738 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
1740 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
1741 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
1743 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
1744 LightApp_Preferences::Selector,
1745 "Geometry", "material" );
1751 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
1752 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
1754 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
1755 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
1757 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
1758 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
1760 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
1761 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
1763 for(int i = 0; i < nb; i++) {
1764 setPreferenceProperty( wd[i], "min", 1 );
1765 setPreferenceProperty( wd[i], "max", 5 );
1769 // Quantities with individual precision settings
1770 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
1771 setPreferenceProperty( precGroup, "columns", 2 );
1773 const int nbQuantities = 8;
1774 int prec[nbQuantities], ii = 0;
1775 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
1776 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
1777 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
1778 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
1779 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
1780 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
1781 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
1782 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
1783 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
1784 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
1785 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
1786 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
1787 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
1788 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
1789 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
1790 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
1792 // Set property for precision value for spinboxes
1793 for ( ii = 0; ii < nbQuantities; ii++ ){
1794 setPreferenceProperty( prec[ii], "min", -14 );
1795 setPreferenceProperty( prec[ii], "max", 14 );
1796 setPreferenceProperty( prec[ii], "precision", 2 );
1799 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
1800 setPreferenceProperty( VertexGroup, "columns", 2 );
1802 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
1803 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
1805 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
1806 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
1808 // Set property for default display mode
1809 QStringList aModesList;
1810 aModesList.append( tr("MEN_WIREFRAME") );
1811 aModesList.append( tr("MEN_SHADING") );
1812 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
1814 QList<QVariant> anIndexesList;
1815 anIndexesList.append(0);
1816 anIndexesList.append(1);
1817 anIndexesList.append(2);
1819 setPreferenceProperty( dispmode, "strings", aModesList );
1820 setPreferenceProperty( dispmode, "indexes", anIndexesList );
1823 // Set property for top level display mode
1824 QStringList aTopModesList;
1825 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
1826 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
1827 aTopModesList.append( tr("MEN_WIREFRAME") );
1828 aTopModesList.append( tr("MEN_SHADING") );
1829 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
1831 QList<QVariant> aTopIndexesList;
1832 aTopIndexesList.append(0);
1833 aTopIndexesList.append(1);
1834 aTopIndexesList.append(2);
1835 aTopIndexesList.append(3);
1836 aTopIndexesList.append(4);
1838 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
1839 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
1841 // Set property for step value for spinboxes
1842 setPreferenceProperty( step, "min", 1 );
1843 setPreferenceProperty( step, "max", 10000 );
1844 setPreferenceProperty( step, "precision", 3 );
1846 // Set property for deflection value for spinboxes
1847 setPreferenceProperty( defl, "min", DEFLECTION_MIN );
1848 setPreferenceProperty( defl, "max", 1.0 );
1849 setPreferenceProperty( defl, "step", 1.0e-04 );
1850 setPreferenceProperty( defl, "precision", 6 );
1852 // Set property for default material
1853 Material_ResourceMgr aMatResMgr;
1854 setPreferenceProperty( material, "strings", aMatResMgr.materials() );
1856 // Set property vertex marker type
1857 QList<QVariant> aMarkerTypeIndicesList;
1858 QList<QVariant> aMarkerTypeIconsList;
1860 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1861 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
1862 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
1863 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
1864 aMarkerTypeIndicesList << (i-1);
1865 aMarkerTypeIconsList << pixmap;
1868 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
1869 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
1871 // Set property for vertex marker scale
1872 QList<QVariant> aMarkerScaleIndicesList;
1873 QStringList aMarkerScaleValuesList;
1875 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
1876 aMarkerScaleIndicesList << iii;
1877 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
1880 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
1881 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
1883 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
1884 setPreferenceProperty( originGroup, "columns", 2 );
1886 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
1887 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
1888 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
1889 setPreferenceProperty( baseVectorsLength, "max", 1000 );
1891 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
1892 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
1895 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
1896 setPreferenceProperty( operationsGroup, "columns", 2 );
1898 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
1899 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
1902 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
1904 if (section == "Geometry") {
1905 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1906 if (param == QString("SettingsGeomStep")) {
1907 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
1908 EmitSignalDefaultStepValueChanged(spin_step);
1909 } else if(param == QString("toplevel_color")) {
1910 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1911 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1912 } else if(param == QString("toplevel_dm")) {
1913 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
1918 LightApp_Displayer* GeometryGUI::displayer()
1921 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
1925 void GeometryGUI::setLocalSelectionMode(const int mode)
1927 myLocalSelectionMode = mode;
1929 int GeometryGUI::getLocalSelectionMode() const
1931 return myLocalSelectionMode;
1934 const char gSeparator = '_'; // character used to separate parameter names
1935 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
1938 * \brief Store visual parameters
1940 * This method is called just before the study document is saved.
1941 * Store visual parameters in AttributeParameter attribute(s)
1943 void GeometryGUI::storeVisualParameters (int savePoint)
1945 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
1946 if ( !appStudy || !appStudy->studyDS() )
1948 _PTR(Study) studyDS = appStudy->studyDS();
1950 // componentName is used for encoding of entries when storing them in IParameters
1951 std::string componentName = myComponentGeom->ComponentDataType();
1952 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1953 //if (!aSComponent) return;
1956 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
1957 componentName.c_str(),
1959 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
1961 QList<SUIT_ViewManager*> lst;
1962 QList<SUIT_ViewManager*>::Iterator it;
1964 // main cycle to store parameters of displayed objects
1966 getApp()->viewManagers(lst);
1967 for (it = lst.begin(); it != lst.end(); it++) {
1968 SUIT_ViewManager* vman = *it;
1969 QString vType = vman->getType();
1970 int aMgrId = vman->getGlobalId();
1971 // saving VTK actors properties
1972 QVector<SUIT_ViewWindow*> views = vman->getViews();
1973 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
1974 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
1975 ObjMap::ConstIterator o_it = anObjects.begin();
1976 for (; o_it != anObjects.end(); o_it++) {
1977 const PropMap aProps = o_it.value();
1979 //Check that object exists in the study
1980 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
1981 if ( !obj || !(aProps.count() > 0))
1983 // entry is "encoded" = it does NOT contain component adress, since it is a
1984 // subject to change on next component loading
1986 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
1988 _PTR(GenericAttribute) anAttr;
1989 if( !obj->FindAttribute(anAttr, "AttributeIOR"))
1992 std::string param,occParam = vType.toLatin1().data();
1993 occParam += NAME_SEPARATOR;
1994 occParam += QString::number(aMgrId).toLatin1().data();
1995 occParam += NAME_SEPARATOR;
1997 if(aProps.contains(VISIBILITY_PROP)) {
1998 param = occParam + VISIBILITY_PROP;
1999 ip->setParameter(entry, param, aProps.value(VISIBILITY_PROP).toInt() == 1 ? "On" : "Off");
2002 if(aProps.contains(DISPLAY_MODE_PROP)) {
2003 param = occParam + DISPLAY_MODE_PROP;
2004 ip->setParameter(entry, param, QString::number(aProps.value(DISPLAY_MODE_PROP).toInt()).toLatin1().data());
2007 if(aProps.contains(COLOR_PROP)) {
2008 QColor c = aProps.value(COLOR_PROP).value<QColor>();
2009 QString colorStr = QString::number(c.red()/255.);
2010 colorStr += DIGIT_SEPARATOR; colorStr += QString::number(c.green()/255.);
2011 colorStr += DIGIT_SEPARATOR; colorStr += QString::number(c.blue()/255.);
2012 param = occParam + COLOR_PROP;
2013 ip->setParameter(entry, param, colorStr.toLatin1().data());
2016 if(vType == SVTK_Viewer::Type()) {
2017 if(aProps.contains(OPACITY_PROP)) {
2018 param = occParam + OPACITY_PROP;
2019 ip->setParameter(entry, param, QString::number(1. - aProps.value(TRANSPARENCY_PROP).toDouble()).toLatin1().data());
2021 } else if (vType == SOCC_Viewer::Type()) {
2022 if(aProps.contains(TRANSPARENCY_PROP)) {
2023 param = occParam + TRANSPARENCY_PROP;
2024 ip->setParameter(entry, param, QString::number(aProps.value(TRANSPARENCY_PROP).toDouble()).toLatin1().data());
2027 if(aProps.contains(TOP_LEVEL_PROP)) {
2028 param = occParam + TOP_LEVEL_PROP;
2029 Standard_Boolean val = aProps.value(TOP_LEVEL_PROP).value<Standard_Boolean>();
2030 if (val == Standard_True)
2031 ip->setParameter(entry, param, "1");
2035 if(aProps.contains(ISOS_PROP)) {
2036 param = occParam + ISOS_PROP;
2037 ip->setParameter(entry, param, aProps.value(ISOS_PROP).toString().toLatin1().data());
2040 if(aProps.contains(VECTOR_MODE_PROP)) {
2041 param = occParam + VECTOR_MODE_PROP;
2042 ip->setParameter(entry, param, QString::number(aProps.value(VECTOR_MODE_PROP).toInt()).toLatin1().data());
2045 if(aProps.contains(DEFLECTION_COEFF_PROP)) {
2046 param = occParam + DEFLECTION_COEFF_PROP;
2047 ip->setParameter(entry, param, QString::number(aProps.value(DEFLECTION_COEFF_PROP).toDouble()).toLatin1().data());
2050 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2051 if(aProps.contains(MARKER_TYPE_PROP)) {
2052 param = occParam + MARKER_TYPE_PROP;
2053 ip->setParameter(entry, param, aProps.value(MARKER_TYPE_PROP).toString().toLatin1().data());
2056 if(aProps.contains(MATERIAL_PROP)) {
2057 param = occParam + MATERIAL_PROP;
2058 ip->setParameter(entry, param, aProps.value(MATERIAL_PROP).toString().toLatin1().data());
2061 if(aProps.contains( EDGE_WIDTH_PROP )) {
2062 param = occParam + EDGE_WIDTH_PROP;
2063 ip->setParameter(entry, param, aProps.value(EDGE_WIDTH_PROP).toString().toLatin1().data());
2066 if(aProps.contains( ISOS_WIDTH_PROP )) {
2067 param = occParam + ISOS_WIDTH_PROP;
2068 ip->setParameter(entry, param, aProps.value(ISOS_WIDTH_PROP).toString().toLatin1().data());
2070 } // object iterator
2072 } // for (viewManagers)
2076 * \brief Restore visual parameters
2078 * This method is called after the study document is opened.
2079 * Restore visual parameters from AttributeParameter attribute(s)
2081 void GeometryGUI::restoreVisualParameters (int savePoint)
2083 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2084 if (!appStudy || !appStudy->studyDS())
2086 _PTR(Study) studyDS = appStudy->studyDS();
2088 // componentName is used for encoding of entries when storing them in IParameters
2089 std::string componentName = myComponentGeom->ComponentDataType();
2090 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2091 //if (!aSComponent) return;
2094 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2095 componentName.c_str(),
2097 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2099 std::vector<std::string> entries = ip->getEntries();
2101 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2103 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2104 QString entry (ip->decodeEntry(*entIt).c_str());
2106 // Check that the entry corresponds to a real object in the Study
2107 // as the object may be deleted or modified after the visual state is saved.
2108 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2109 if (!so) continue; //Skip the not existent entry
2111 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2112 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2114 std::vector<std::string>::iterator namesIt = paramNames.begin();
2115 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2117 // actors are stored in a map after displaying of them for
2118 // quicker access in the future: map < viewID to actor >
2119 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2120 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2122 QString viewerTypStr;
2123 QString viewIndexStr;
2125 QVector<PropMap> aListOfMap;
2127 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2129 // visual parameters are stored in strings as follows: ViewerType_ViewIndex_ParamName.
2130 // '_' is used as separator and should not be used in viewer type or parameter names.
2131 QStringList lst = QString((*namesIt).c_str()).split(NAME_SEPARATOR, QString::SkipEmptyParts);
2132 if (lst.size() != 3)
2135 viewerTypStr = lst[0];
2136 viewIndexStr = lst[1];
2137 QString paramNameStr = lst[2];
2140 viewIndex = viewIndexStr.toUInt(&ok);
2141 if (!ok) // bad conversion of view index to integer
2144 if((viewIndex + 1) > aListOfMap.count()) {
2145 aListOfMap.resize(viewIndex + 1);
2148 QString val((*valuesIt).c_str());
2149 if(paramNameStr == VISIBILITY_PROP){
2150 aListOfMap[viewIndex].insert(VISIBILITY_PROP, val == "On" ? 1 : 0);
2152 } else if(paramNameStr == OPACITY_PROP) {
2153 aListOfMap[viewIndex].insert(TRANSPARENCY_PROP, 1. - val.toDouble());
2155 } else if(paramNameStr == TRANSPARENCY_PROP) {
2156 aListOfMap[viewIndex].insert( TRANSPARENCY_PROP, val.toDouble() );
2158 } else if(paramNameStr == TOP_LEVEL_PROP) {
2159 aListOfMap[viewIndex].insert( TRANSPARENCY_PROP, val == "1" ? Standard_True : Standard_False );
2161 } else if(paramNameStr == DISPLAY_MODE_PROP) {
2162 aListOfMap[viewIndex].insert( DISPLAY_MODE_PROP, val.toInt());
2164 } else if(paramNameStr == ISOS_PROP) {
2165 aListOfMap[viewIndex].insert( ISOS_PROP, val);
2167 } else if(paramNameStr == COLOR_PROP) {
2168 QStringList rgb = val.split(DIGIT_SEPARATOR);
2169 if(rgb.count() == 3) {
2170 QColor c(int(rgb[0].toDouble()*255), int(rgb[1].toDouble()*255), int(rgb[2].toDouble()*255));
2171 aListOfMap[viewIndex].insert( COLOR_PROP, c);
2173 } else if(paramNameStr == VECTOR_MODE_PROP) {
2174 aListOfMap[viewIndex].insert( VECTOR_MODE_PROP, val.toInt());
2176 } else if(paramNameStr == DEFLECTION_COEFF_PROP) {
2177 aListOfMap[viewIndex].insert( DEFLECTION_COEFF_PROP, val.toDouble());
2178 } else if(paramNameStr == MARKER_TYPE_PROP) {
2179 aListOfMap[viewIndex].insert( MARKER_TYPE_PROP, val);
2180 } else if(paramNameStr == MATERIAL_PROP) {
2181 aListOfMap[viewIndex].insert( MATERIAL_PROP, val);
2182 } else if(paramNameStr == EDGE_WIDTH_PROP) {
2183 aListOfMap[viewIndex].insert( EDGE_WIDTH_PROP , val);
2184 } else if(paramNameStr == ISOS_WIDTH_PROP) {
2185 aListOfMap[viewIndex].insert( ISOS_WIDTH_PROP , val);
2190 } // for names/parameters iterator
2192 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2194 for (int index = 0; index < aListOfMap.count(); index++) {
2196 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
2198 //Get Visibility property of the current PropMap
2199 if (aListOfMap[index].value(VISIBILITY_PROP) == 1) {
2200 SUIT_ViewManager* vman = lst.at(index);
2201 SUIT_ViewModel* vmodel = vman->getViewModel();
2202 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
2206 } // for entries iterator
2208 // update all VTK and OCC views
2209 QList<SUIT_ViewManager*> lst;
2210 getApp()->viewManagers(lst);
2211 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
2212 SUIT_ViewModel* vmodel = (*it)->getViewModel();
2215 if (vmodel->getType() == SVTK_Viewer::Type()) {
2216 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
2217 vtkView->getRenderer()->ResetCameraClippingRange();
2220 else if (vmodel->getType() == SOCC_Viewer::Type()) {
2221 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
2222 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
2229 void GeometryGUI::onViewAboutToShow()
2231 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
2232 QAction* a = action( GEOMOp::OpSwitchVectors );
2234 a->setEnabled(true);
2235 bool vmode = window->property("VectorsMode").toBool();
2236 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
2238 a->setText ( tr("MEN_VECTOR_MODE_ON") );
2239 a->setEnabled(false);
2244 \brief Return action by id
2245 \param id identifier of the action
2248 QAction* GeometryGUI::getAction(const int id) {
2253 \brief Check if this object is can't be renamed in place
2255 This method can be re-implemented in the subclasses.
2256 Return true in case if object isn't reference or component (module root).
2258 \param entry column id
2259 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
2261 bool GeometryGUI::renameAllowed( const QString& entry) const {
2263 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
2264 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
2265 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
2267 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
2272 Rename object by entry.
2273 \param entry entry of the object
2274 \param name new name of the object
2275 \brief Return \c true if rename operation finished successfully, \c false otherwise.
2277 bool GeometryGUI::renameObject( const QString& entry, const QString& name) {
2279 bool result = false;
2281 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
2282 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
2287 _PTR(Study) aStudy = appStudy->studyDS();
2292 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
2294 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
2298 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
2299 _PTR(GenericAttribute) anAttr;
2301 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
2302 _PTR(AttributeName) aName (anAttr);
2304 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
2305 if (!CORBA::is_nil(anObj)) {
2306 aName->SetValue( name.toLatin1().data() ); // rename the SObject
2307 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object