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