1 // Copyright (C) 2007-2014 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, or (at your option) any later version.
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 "GEOMPluginGUI.h"
33 #include "GEOMGUI_XmlHandler.h"
34 #include "GEOMGUI_OCCSelector.h"
35 #include "GEOMGUI_Selection.h"
36 #include "GEOMGUI_CreationInfoWdg.h"
37 #include "GEOMGUI_DimensionProperty.h"
38 #include "GEOM_Constants.h"
39 #include "GEOM_Displayer.h"
40 #include "GEOM_AISShape.hxx"
42 #include "GEOM_Actor.h"
44 #include <Material_ResourceMgr.h>
45 #include <Material_Model.h>
47 #include <SUIT_Desktop.h>
48 #include <SUIT_MessageBox.h>
49 #include <SUIT_ResourceMgr.h>
50 #include <SUIT_Session.h>
51 #include <SUIT_ViewManager.h>
53 #include <PyInterp_Interp.h>
55 #include <OCCViewer_ViewWindow.h>
56 #include <OCCViewer_ViewPort3d.h>
57 #include <OCCViewer_ViewModel.h>
58 #include <OCCViewer_ViewManager.h>
60 #include <SOCC_ViewModel.h>
61 #include <SOCC_ViewWindow.h>
63 #include <SVTK_ViewWindow.h>
64 #include <SVTK_RenderWindowInteractor.h>
65 #include <SVTK_InteractorStyle.h>
66 #include <SVTK_ViewModel.h>
68 #include <SalomeApp_Application.h>
69 #include <SalomeApp_DataObject.h>
70 #include <SalomeApp_Study.h>
71 #include <SalomeApp_Tools.h>
73 #include <LightApp_SelectionMgr.h>
74 #include <LightApp_VTKSelector.h>
75 #include <LightApp_DataObject.h>
76 #include <LightApp_Preferences.h>
78 #include <SALOME_LifeCycleCORBA.hxx>
79 // #include <SALOME_ListIO.hxx>
80 #include <SALOME_ListIteratorOfListIO.hxx>
82 #include <SALOMEDSClient_ClientFactory.hxx>
83 #include <SALOMEDSClient_IParameters.hxx>
85 #include <SALOMEDS_SObject.hxx>
87 #include <Basics_OCCTVersion.hxx>
98 #include <QSignalMapper>
100 #include <AIS_Drawer.hxx>
101 #include <AIS_ListOfInteractive.hxx>
102 #include <AIS_ListIteratorOfListOfInteractive.hxx>
103 #include <Prs3d_Drawer.hxx>
104 #include <Prs3d_IsoAspect.hxx>
105 #include <Aspect_TypeOfMarker.hxx>
106 #include <OSD_SharedLibrary.hxx>
107 #include <NCollection_DataMap.hxx>
109 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
110 #include <TColStd_HArray1OfByte.hxx>
112 #include <Graphic3d_HArray1OfBytes.hxx>
115 #include <utilities.h>
117 #include <vtkCamera.h>
118 #include <vtkRenderer.h>
120 #include <Standard_Failure.hxx>
121 #include <Standard_ErrorHandler.hxx>
123 #include "GEOM_version.h"
124 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
127 Standard_EXPORT CAM_Module* createModule() {
128 return new GeometryGUI();
131 Standard_EXPORT char* getModuleVersion() {
132 return (char*)GEOM_VERSION_STR;
136 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
138 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
140 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
142 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
143 if (CORBA::is_nil(myComponentGeom))
145 return GeometryGUI::myComponentGeom;
148 bool GeometryGUI::InitGeomGen()
151 if ( CORBA::is_nil( myComponentGeom ) ) return false;
155 //=======================================================================
156 // function : ClientSObjectToObject
158 //=======================================================================
159 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
161 _PTR(GenericAttribute) anAttr;
162 CORBA::Object_var anObj;
164 std::string aValue = theSObject->GetIOR();
165 if (strcmp(aValue.c_str(), "") != 0) {
166 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
167 anObj = anORB->string_to_object(aValue.c_str());
170 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
172 return anObj._retn();
175 //=======================================================================
176 // function : ClientStudyToStudy
178 //=======================================================================
179 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
181 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
182 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
183 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
184 int aStudyID = theStudy->StudyId();
185 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
186 return aDSStudy._retn();
189 void GeometryGUI::Modified (bool theIsUpdateActions)
191 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
192 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
193 appStudy->Modified();
194 if ( theIsUpdateActions )
195 app->updateActions();
200 //=======================================================================
201 // function : GeometryGUI::GeometryGUI()
202 // purpose : Constructor
203 //=======================================================================
204 GeometryGUI::GeometryGUI() :
205 SalomeApp_Module( "GEOM" ),
208 if ( CORBA::is_nil( myComponentGeom ) )
210 Engines::EngineComponent_var comp =
211 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
212 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
215 myActiveDialogBox = 0;
217 gp_Pnt origin = gp_Pnt(0., 0., 0.);
218 gp_Dir direction = gp_Dir(0., 0., 1.);
219 myWorkingPlane = gp_Ax3(origin, direction);
222 myLocalSelectionMode = GEOM_ALLOBJECTS;
224 myCreationInfoWdg = 0;
226 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
228 Q_INIT_RESOURCE( GEOMGUI );
231 //=======================================================================
232 // function : GeometryGUI::~GeometryGUI()
233 // purpose : Destructor
234 //=======================================================================
235 GeometryGUI::~GeometryGUI()
237 while (!myOCCSelectors.isEmpty())
238 delete myOCCSelectors.takeFirst();
240 while (!myVTKSelectors.isEmpty())
241 delete myVTKSelectors.takeFirst();
243 qDeleteAll(myGUIMap);
246 //=======================================================================
247 // function : GeometryGUI::getLibrary()
248 // purpose : get or load GUI library by name [ internal ]
249 //=======================================================================
250 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
251 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
253 if ( !myGUIMap.contains( libraryName ) ) {
254 // try to load library if it is not loaded yet
256 QString dirs = getenv( "LD_LIBRARY_PATH" );
259 QString dirs = getenv( "PATH" );
262 if ( !dirs.isEmpty() ) {
263 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
264 QListIterator<QString> it( dirList ); it.toBack();
265 while ( it.hasPrevious() ) {
266 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
268 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
269 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
271 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
272 continue; // continue search further
274 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
275 if ( osdF != NULL ) {
276 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
277 GEOMGUI* libGUI = (*func)( this );
279 myGUIMap[ libraryName ] = libGUI;
280 break; // found and loaded!
287 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
290 //=======================================================================
291 // function : GeometryGUI::getPluginLibrary()
292 // purpose : get or load GUI Plugin library by name [ internal ]
293 //=======================================================================
294 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
295 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
297 if ( !myGUIMap.contains( libraryName ) ) {
298 // try to load library if it is not loaded yet
300 QString dirs = getenv( "LD_LIBRARY_PATH" );
303 QString dirs = getenv( "PATH" );
306 if ( !dirs.isEmpty() ) {
307 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
308 QListIterator<QString> it( dirList ); it.toBack();
309 while ( it.hasPrevious() ) {
310 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
312 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
313 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
315 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
316 continue; // continue search further
318 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
319 if ( osdF != NULL ) {
320 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
321 GEOMPluginGUI* libGUI = (*func)( this );
323 myGUIMap[ libraryName ] = libGUI;
324 break; // found and loaded!
331 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
334 //=======================================================================
335 // function : GeometryGUI::ActiveWorkingPlane()
336 // purpose : Activate Working Plane View
337 //=======================================================================
338 void GeometryGUI::ActiveWorkingPlane()
340 gp_Dir DZ = myWorkingPlane.Direction();
341 gp_Dir DY = myWorkingPlane.YDirection();
343 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
344 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
345 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
348 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
350 Handle(V3d_View) view3d = vw->getViewPort()->getView();
352 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
353 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
357 else if ( ViewVTK ) {
358 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
360 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
362 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
363 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
364 camera->SetFocalPoint(0,0,0);
371 //=======================================================================
372 // function : GeometryGUI::SetActiveDialogBox()
373 // purpose : Set active dialog box
374 //=======================================================================
375 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
377 myActiveDialogBox = (QDialog*)aDlg;
380 //=======================================================================
381 // function : GeometryGUI::EmitSignalDeactivateDialog()
382 // purpose : Emit a signal to deactivate the active dialog Box
383 //=======================================================================
384 void GeometryGUI::EmitSignalDeactivateDialog()
386 emit SignalDeactivateActiveDialog();
389 //=======================================================================
390 // function : GeometryGUI::EmitSignalCloseAllDialogs()
391 // purpose : Emit a signal to close all non modal dialogs box
392 //=======================================================================
393 void GeometryGUI::EmitSignalCloseAllDialogs()
395 emit SignalCloseAllDialogs();
398 //=======================================================================
399 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
400 // purpose : Emit a signal to inform that default real spin box step has
402 //=======================================================================
403 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
405 emit SignalDefaultStepValueChanged(newVal);
408 //=======================================================================
409 // function : GeometryGUI::OnGUIEvent()
410 // purpose : common slot for all menu/toolbar actions
411 //=======================================================================
412 void GeometryGUI::OnGUIEvent()
414 const QObject* obj = sender();
415 if ( !obj || !obj->inherits( "QAction" ) )
417 int id = actionId((QAction*)obj);
422 //=======================================================================
423 // function : GeometryGUI::OnGUIEvent()
424 // purpose : manage all events on GUI [static]
425 //=======================================================================
426 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
428 SUIT_Application* anApp = application();
430 SUIT_Desktop* desk = anApp->desktop();
432 // check type of the active viewframe
433 SUIT_ViewWindow* window = desk->activeWindow();
434 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
435 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
436 // if current viewframe is not of OCC and not of VTK type - return immediately
437 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
438 QList<int> NotViewerDependentCommands;
439 NotViewerDependentCommands << GEOMOp::OpDelete
441 << GEOMOp::OpShowOnly
442 << GEOMOp::OpShowOnlyChildren
443 << GEOMOp::OpDiscloseChildren
444 << GEOMOp::OpConcealChildren
445 << GEOMOp::OpUnpublishObject
446 << GEOMOp::OpPublishObject
447 << GEOMOp::OpPointMarker
448 << GEOMOp::OpCreateFolder
449 << GEOMOp::OpSortChildren;
450 if ( !ViewOCC && !ViewVTK && !NotViewerDependentCommands.contains( id ) ) {
451 // activate OCC viewer
452 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
455 // fix for IPAL9103, point 2
456 if ( CORBA::is_nil( GetGeomGen() ) ) {
457 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
462 // find corresponding GUI library
464 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
465 createOriginAndBaseVectors(); // internal operation
467 case GEOMOp::OpImport: // MENU FILE - IMPORT
468 case GEOMOp::OpExport: // MENU FILE - EXPORT
469 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
470 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
471 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
472 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
473 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
474 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
475 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
476 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
477 case GEOMOp::OpDelete: // MENU EDIT - DELETE
478 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
479 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
480 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
481 case GEOMOp::OpColor: // POPUP MENU - COLOR
482 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
483 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
484 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
485 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
486 case GEOMOp::OpIsos: // POPUP MENU - ISOS
487 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
488 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
489 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
490 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
491 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
492 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
493 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
494 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
495 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
496 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
497 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
498 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
499 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
500 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
501 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
502 case GEOMOp::OpClsBringToFront: //
503 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
504 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
505 libName = "GEOMToolsGUI";
507 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
508 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
509 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
510 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
511 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
512 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
513 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
514 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
515 case GEOMOp::OpHide: // MENU VIEW - ERASE
516 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
517 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
518 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
519 case GEOMOp::OpShading: // POPUP MENU - SHADING
520 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
521 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
522 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
523 libName = "DisplayGUI";
525 case GEOMOp::OpPoint: // MENU BASIC - POINT
526 case GEOMOp::OpLine: // MENU BASIC - LINE
527 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
528 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
529 case GEOMOp::OpArc: // MENU BASIC - ARC
530 case GEOMOp::OpVector: // MENU BASIC - VECTOR
531 case GEOMOp::OpPlane: // MENU BASIC - PLANE
532 case GEOMOp::OpCurve: // MENU BASIC - CURVE
533 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
534 libName = "BasicGUI";
536 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
537 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
538 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
539 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
540 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
541 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
542 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
543 libName = "PrimitiveGUI";
545 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
546 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
547 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
548 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
549 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
550 libName = "GenerationGUI";
552 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
553 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
554 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
555 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
557 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
559 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
560 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
561 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
562 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
563 libName = "EntityGUI";
565 case GEOMOp::OpEdge: // MENU BUILD - EDGE
566 case GEOMOp::OpWire: // MENU BUILD - WIRE
567 case GEOMOp::OpFace: // MENU BUILD - FACE
568 case GEOMOp::OpShell: // MENU BUILD - SHELL
569 case GEOMOp::OpSolid: // MENU BUILD - SOLID
570 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
571 libName = "BuildGUI";
573 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
574 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
575 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
576 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
577 libName = "BooleanGUI";
579 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
580 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
581 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
582 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
583 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
584 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
585 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
586 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
587 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
588 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
589 libName = "TransformationGUI";
591 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
592 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
593 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
594 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
595 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
596 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
597 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
598 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
599 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
600 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
601 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
602 #ifdef DEBUG_CURVE_CREATOR
603 // for debug purposes, to be removed
604 case GEOMOp::OpCurveCreator: // MENU OPERATION - CURVE CREATOR
606 libName = "OperationGUI";
608 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
609 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
610 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
611 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
612 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
613 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
614 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
615 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
616 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
617 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
618 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
619 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
620 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
621 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
622 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
623 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
624 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
625 libName = "RepairGUI";
627 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
628 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
629 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
630 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
631 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
632 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
633 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
634 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
635 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
636 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
637 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
638 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
639 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
640 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
641 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
642 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
643 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
644 libName = "MeasureGUI";
646 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
647 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
648 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
649 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
650 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
651 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
652 libName = "GroupGUI";
654 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
655 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
656 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
657 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
658 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
659 libName = "BlocksGUI";
661 case GEOMOp::OpExportXAO: // MENU NEW ENTITY - IMPORTEXPORT - EXPORTXAO
662 case GEOMOp::OpImportXAO: // MENU NEW ENTITY - IMPORTEXPORT - IMPORTXAO
663 libName = "ImportExportGUI";
665 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
666 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
667 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
668 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
669 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
670 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
671 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
672 //libName = "AdvancedGUI";
675 if (myPluginActions.contains(id)) {
676 libName = myPluginActions[id].first;
678 GEOMPluginGUI* library = 0;
679 if ( !libName.isEmpty() ) {
681 libName = QString( "lib" ) + libName + ".so";
683 libName = libName + ".dll";
685 library = getPluginLibrary( libName );
688 // call method of corresponding GUI library
690 //QString action ("%1");
691 //action = action.arg(id);
693 //if( !theParam.isValid() )
694 library->OnGUIEvent( myPluginActions[id].second, desk );
696 // library->OnGUIEvent( id, desk, theParam);
699 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
701 updateCreationInfo();
707 GEOMGUI* library = 0;
708 if ( !libName.isEmpty() ) {
710 libName = QString( "lib" ) + libName + ".so";
712 libName = libName + ".dll";
714 library = getLibrary( libName );
717 // call method of corresponding GUI library
719 if( !theParam.isValid() )
720 library->OnGUIEvent( id, desk );
722 library->OnGUIEvent( id, desk, theParam);
725 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
727 updateCreationInfo();
730 //=================================================================================
731 // function : GeometryGUI::activateOperation()
733 //=================================================================================
734 bool GeometryGUI::activateOperation( int actionId )
736 OnGUIEvent(actionId);
740 //=================================================================================
741 // function : GeometryGUI::activateOperation()
743 //=================================================================================
744 bool GeometryGUI::activateOperation( const QString& actionId )
748 int id = actionId.toInt(&isOk);
755 //=================================================================================
756 // function : GeometryGUI::activateOperation()
758 //=================================================================================
759 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
763 QString pluginLib = plugin;
764 // TODO: if <plugin> is a plugin name, find plugin library name
765 if (myPluginLibs.contains(plugin))
766 pluginLib = myPluginLibs[plugin];
768 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
769 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
770 const PluginAction& anAction = actionsIter.value();
771 if (anAction.first == pluginLib && anAction.second == actionId) {
772 // activate operation
773 OnGUIEvent(actionsIter.key());
781 //=================================================================================
782 // function : GeometryGUI::OnKeyPress()
783 // purpose : Called when any key is pressed by user [static]
784 //=================================================================================
785 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
787 if ( !application() )
789 foreach ( GEOMGUI* lib, myGUIMap )
790 lib->OnKeyPress( e, application()->desktop(), w );
793 //=================================================================================
794 // function : GeometryGUI::OnMouseMove()
795 // purpose : Manages mouse move events [static]
796 //=================================================================================
797 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
799 if ( !application() )
801 foreach ( GEOMGUI* lib, myGUIMap )
802 lib->OnMouseMove( e, application()->desktop(), w );
805 //=================================================================================
806 // function : GeometryGUI::OnMouseRelease()
807 // purpose : Manages mouse release events [static]
808 //=================================================================================
809 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
811 if ( !application() )
813 foreach ( GEOMGUI* lib, myGUIMap )
814 lib->OnMouseRelease( e, application()->desktop(), w );
817 //=================================================================================
818 // function : GeometryGUI::OnMousePress()
819 // purpose : Manage mouse press events [static]
820 //=================================================================================
821 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
823 if ( !application() )
825 foreach ( GEOMGUI* lib, myGUIMap )
826 lib->OnMousePress( e, application()->desktop(), w );
829 //=======================================================================
830 // function : createGeomAction
832 //=======================================================================
833 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
834 const int accel, const bool toggle, const QString& shortcutAction )
836 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
837 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
838 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
840 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
842 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
843 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
845 application()->desktop(),
847 this, SLOT( OnGUIEvent() ),
851 //=======================================================================
852 // function : createOriginAndBaseVectors
854 //=======================================================================
855 void GeometryGUI::createOriginAndBaseVectors()
857 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
858 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
860 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
864 _PTR(Study) studyDS = appStudy->studyDS();
865 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
866 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
867 if ( !aBasicOperations->_is_nil() ) {
868 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
869 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
870 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
871 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
872 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
873 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
875 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
876 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
877 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
878 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
879 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
881 getApp()->updateObjectBrowser( true );
887 //=======================================================================
888 // function : GeometryGUI::initialize()
889 // purpose : Called when GEOM module is created
890 //=======================================================================
891 void GeometryGUI::initialize( CAM_Application* app )
893 SalomeApp_Module::initialize( app );
895 // ----- create actions --------------
897 createGeomAction( GEOMOp::OpImport, "IMPORT", "", Qt::ControlModifier + Qt::Key_I );
898 createGeomAction( GEOMOp::OpExport, "EXPORT", "", Qt::ControlModifier + Qt::Key_E );
900 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
902 createGeomAction( GEOMOp::OpPoint, "POINT" );
903 createGeomAction( GEOMOp::OpLine, "LINE" );
904 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
905 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
906 createGeomAction( GEOMOp::OpArc, "ARC" );
907 createGeomAction( GEOMOp::OpCurve, "CURVE" );
908 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
909 createGeomAction( GEOMOp::OpVector, "VECTOR" );
910 createGeomAction( GEOMOp::OpPlane, "PLANE" );
911 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
912 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
914 createGeomAction( GEOMOp::OpBox, "BOX" );
915 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
916 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
917 createGeomAction( GEOMOp::OpTorus, "TORUS" );
918 createGeomAction( GEOMOp::OpCone, "CONE" );
919 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
920 createGeomAction( GEOMOp::OpDisk, "DISK" );
922 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
923 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
924 createGeomAction( GEOMOp::OpFilling, "FILLING" );
925 createGeomAction( GEOMOp::OpPipe, "PIPE" );
926 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
928 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
929 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
930 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
931 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
932 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
934 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
935 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
937 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
939 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
940 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
942 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
943 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
944 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
945 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
947 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
949 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
951 createGeomAction( GEOMOp::OpEdge, "EDGE" );
952 createGeomAction( GEOMOp::OpWire, "WIRE" );
953 createGeomAction( GEOMOp::OpFace, "FACE" );
954 createGeomAction( GEOMOp::OpShell, "SHELL" );
955 createGeomAction( GEOMOp::OpSolid, "SOLID" );
956 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
958 createGeomAction( GEOMOp::OpFuse, "FUSE" );
959 createGeomAction( GEOMOp::OpCommon, "COMMON" );
960 createGeomAction( GEOMOp::OpCut, "CUT" );
961 createGeomAction( GEOMOp::OpSection, "SECTION" );
963 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
964 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
965 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
966 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
967 createGeomAction( GEOMOp::OpScale, "SCALE" );
968 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
969 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
970 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
971 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
973 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
974 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
975 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
976 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
977 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
978 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
979 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
980 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
981 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
982 #ifdef DEBUG_CURVE_CREATOR
983 // for debug purposes, to be removed
984 createGeomAction( GEOMOp::OpCurveCreator, "CURVE_CREATOR" );
986 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
987 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
989 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
990 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
991 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
993 createGeomAction( GEOMOp::OpSewing, "SEWING" );
994 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
995 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
996 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
997 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
998 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
999 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
1000 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
1001 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
1002 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
1003 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
1004 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
1005 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1006 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1007 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1008 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1009 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1011 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1012 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1013 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1014 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1015 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1016 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1017 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1018 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1019 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1021 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1022 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1023 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1024 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1025 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1026 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1028 #ifdef _DEBUG_ // PAL16821
1029 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1032 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1033 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1034 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1035 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1036 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1037 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1038 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1039 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1040 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1041 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1042 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1043 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1044 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1045 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1046 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1047 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1048 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1049 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1050 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1051 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1052 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1053 createGeomAction( GEOMOp::OpHide, "ERASE" );
1055 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1056 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1057 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1058 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1059 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1060 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1061 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1062 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1063 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1064 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1065 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1066 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1067 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1068 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1069 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1070 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1071 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1072 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1073 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1074 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1075 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1076 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1077 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1078 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1079 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1080 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1081 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1083 // Create actions for increase/decrease transparency shortcuts
1084 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1085 "Geometry:Increase transparency");
1086 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1087 "Geometry:Decrease transparency");
1089 // Create actions for increase/decrease number of isolines
1090 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1091 "Geometry:Increase number of isolines");
1092 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1093 "Geometry:Decrease number of isolines");
1095 // Import/Export XAO
1096 createGeomAction( GEOMOp::OpExportXAO, "EXPORTXAO" );
1097 createGeomAction( GEOMOp::OpImportXAO, "IMPORTXAO" );
1099 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1100 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1101 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1102 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1103 //@@ 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 @@//
1105 // ---- create menus --------------------------
1107 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1108 createMenu( separator(), fileId, 10 );
1109 createMenu( GEOMOp::OpImport, fileId, 10 );
1110 createMenu( GEOMOp::OpExport, fileId, 10 );
1111 int impexpId = createMenu( tr( "MEN_IMPORTEXPORT" ), fileId, -1, 10 );
1112 createMenu( GEOMOp::OpExportXAO, impexpId, -1 );
1113 createMenu( GEOMOp::OpImportXAO, impexpId, -1 );
1114 createMenu( separator(), fileId, -1 );
1116 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1117 createMenu( GEOMOp::OpDelete, editId, -1 );
1119 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1121 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1122 createMenu( GEOMOp::OpPoint, basicId, -1 );
1123 createMenu( GEOMOp::OpLine, basicId, -1 );
1124 createMenu( GEOMOp::OpCircle, basicId, -1 );
1125 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1126 createMenu( GEOMOp::OpArc, basicId, -1 );
1127 createMenu( GEOMOp::OpCurve, basicId, -1 );
1128 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1129 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1130 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1131 createMenu( separator(), basicId, -1 );
1132 createMenu( GEOMOp::OpVector, basicId, -1 );
1133 createMenu( GEOMOp::OpPlane, basicId, -1 );
1134 createMenu( GEOMOp::OpLCS, basicId, -1 );
1135 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1137 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1138 createMenu( GEOMOp::OpBox, primId, -1 );
1139 createMenu( GEOMOp::OpCylinder, primId, -1 );
1140 createMenu( GEOMOp::OpSphere, primId, -1 );
1141 createMenu( GEOMOp::OpTorus, primId, -1 );
1142 createMenu( GEOMOp::OpCone, primId, -1 );
1143 createMenu( GEOMOp::OpRectangle, primId, -1 );
1144 createMenu( GEOMOp::OpDisk, primId, -1 );
1145 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1147 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1148 createMenu( GEOMOp::OpPrism, genId, -1 );
1149 createMenu( GEOMOp::OpRevolution, genId, -1 );
1150 createMenu( GEOMOp::OpFilling, genId, -1 );
1151 createMenu( GEOMOp::OpPipe, genId, -1 );
1152 #if OCC_VERSION_LARGE > 0x06050300
1153 createMenu( GEOMOp::OpPipePath, genId, -1 );
1156 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1157 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1158 //@@ 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 @@//
1160 createMenu( separator(), newEntId, -1 );
1162 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1163 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1164 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1165 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1166 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1167 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1169 createMenu( separator(), newEntId, -1 );
1171 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1172 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1173 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1175 createMenu( separator(), newEntId, -1 );
1177 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1178 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1179 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1180 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1181 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1183 createMenu( separator(), newEntId, -1 );
1185 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1187 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1188 createMenu( GEOMOp::OpEdge, buildId, -1 );
1189 createMenu( GEOMOp::OpWire, buildId, -1 );
1190 createMenu( GEOMOp::OpFace, buildId, -1 );
1191 createMenu( GEOMOp::OpShell, buildId, -1 );
1192 createMenu( GEOMOp::OpSolid, buildId, -1 );
1193 createMenu( GEOMOp::OpCompound, buildId, -1 );
1195 createMenu( separator(), newEntId, -1 );
1197 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1199 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1202 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1204 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1205 createMenu( GEOMOp::OpFuse, boolId, -1 );
1206 createMenu( GEOMOp::OpCommon, boolId, -1 );
1207 createMenu( GEOMOp::OpCut, boolId, -1 );
1208 createMenu( GEOMOp::OpSection, boolId, -1 );
1210 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1211 createMenu( GEOMOp::OpTranslate, transId, -1 );
1212 createMenu( GEOMOp::OpRotate, transId, -1 );
1213 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1214 createMenu( GEOMOp::OpMirror, transId, -1 );
1215 createMenu( GEOMOp::OpScale, transId, -1 );
1216 createMenu( GEOMOp::OpOffset, transId, -1 );
1217 createMenu( GEOMOp::OpProjection, transId, -1 );
1218 createMenu( separator(), transId, -1 );
1219 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1220 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1222 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1223 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1224 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1225 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1227 createMenu( separator(), operId, -1 );
1229 createMenu( GEOMOp::OpPartition, operId, -1 );
1230 createMenu( GEOMOp::OpArchimede, operId, -1 );
1231 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1232 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1234 createMenu( separator(), operId, -1 );
1236 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1237 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1238 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1239 createMenu( GEOMOp::OpChamfer, operId, -1 );
1240 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1241 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1242 #ifdef DEBUG_CURVE_CREATOR
1243 // for debug purposes, to be removed
1244 createMenu( separator(), operId, -1 );
1245 createMenu( GEOMOp::OpCurveCreator, operId, -1 );
1247 //createMenu( GEOMOp::OpClipping, operId, -1 );
1249 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1250 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1251 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1252 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1253 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1254 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1255 createMenu( GEOMOp::OpSewing, repairId, -1 );
1256 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1257 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1258 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1259 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1260 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1261 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1262 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1263 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1264 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1265 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1266 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1268 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1269 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1270 createMenu( GEOMOp::OpProperties, measurId, -1 );
1271 createMenu( separator(), measurId, -1 );
1272 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1273 createMenu( GEOMOp::OpInertia, measurId, -1 );
1274 createMenu( GEOMOp::OpNormale, measurId, -1 );
1275 createMenu( separator(), measurId, -1 );
1276 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1277 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1278 createMenu( separator(), measurId, -1 );
1280 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1281 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1282 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1283 createMenu( GEOMOp::OpAngle, dimId, -1 );
1284 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1286 createMenu( separator(), measurId, -1 );
1287 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1288 createMenu( separator(), measurId, -1 );
1289 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1290 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1291 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1292 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1293 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1295 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1296 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1297 createMenu( separator(), toolsId, -1 );
1298 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1301 createMenu( separator(), toolsId, -1 );
1302 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1303 createMenu( separator(), toolsId, -1 );
1305 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1306 createMenu( separator(), viewId, -1 );
1308 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1309 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1310 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1311 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1312 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1313 createMenu( separator(), dispmodeId, -1 );
1314 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1316 createMenu( separator(), viewId, -1 );
1317 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1318 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1319 createMenu( separator(), viewId, -1 );
1320 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1321 createMenu( separator(), viewId, -1 );
1325 because of these items are accessible through object browser and viewers
1326 we have removed they from main menu
1328 createMenu( GEOMOp::OpShow, viewId, -1 );
1329 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1330 createMenu( GEOMOp::OpHide, viewId, -1 );
1333 // ---- create toolbars --------------------------
1335 int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1336 createTool( GEOMOp::OpPoint, basicTbId );
1337 createTool( GEOMOp::OpLine, basicTbId );
1338 createTool( GEOMOp::OpCircle, basicTbId );
1339 createTool( GEOMOp::OpEllipse, basicTbId );
1340 createTool( GEOMOp::OpArc, basicTbId );
1341 createTool( GEOMOp::OpCurve, basicTbId );
1342 createTool( GEOMOp::OpVector, basicTbId );
1343 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1344 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1345 createTool( GEOMOp::OpIsoline, basicTbId );
1346 createTool( GEOMOp::OpPlane, basicTbId );
1347 createTool( GEOMOp::OpLCS, basicTbId );
1348 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1350 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ) );
1351 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1352 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1354 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1355 createTool( GEOMOp::OpBox, primTbId );
1356 createTool( GEOMOp::OpCylinder, primTbId );
1357 createTool( GEOMOp::OpSphere, primTbId );
1358 createTool( GEOMOp::OpTorus, primTbId );
1359 createTool( GEOMOp::OpCone, primTbId );
1360 createTool( GEOMOp::OpRectangle, primTbId );
1361 createTool( GEOMOp::OpDisk, primTbId );
1362 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1364 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ) );
1365 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1366 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1368 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1369 createTool( GEOMOp::OpFuse, boolTbId );
1370 createTool( GEOMOp::OpCommon, boolTbId );
1371 createTool( GEOMOp::OpCut, boolTbId );
1372 createTool( GEOMOp::OpSection, boolTbId );
1374 int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1375 createTool( GEOMOp::OpPrism, genTbId );
1376 createTool( GEOMOp::OpRevolution, genTbId );
1377 createTool( GEOMOp::OpFilling, genTbId );
1378 createTool( GEOMOp::OpPipe, genTbId );
1379 #if OCC_VERSION_LARGE > 0x06050300
1380 createTool( GEOMOp::OpPipePath, genTbId );
1383 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1384 createTool( GEOMOp::OpTranslate, transTbId );
1385 createTool( GEOMOp::OpRotate, transTbId );
1386 createTool( GEOMOp::OpChangeLoc, transTbId );
1387 createTool( GEOMOp::OpMirror, transTbId );
1388 createTool( GEOMOp::OpScale, transTbId );
1389 createTool( GEOMOp::OpOffset, transTbId );
1390 createTool( GEOMOp::OpProjection, transTbId );
1391 createTool( separator(), transTbId );
1392 createTool( GEOMOp::OpMultiTranslate, transTbId );
1393 createTool( GEOMOp::OpMultiRotate, transTbId );
1395 int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1396 createTool( GEOMOp::OpExplode, operTbId );
1397 createTool( GEOMOp::OpPartition, operTbId );
1398 createTool( GEOMOp::OpArchimede, operTbId );
1399 createTool( GEOMOp::OpShapesOnShape, operTbId );
1400 createTool( GEOMOp::OpSharedShapes, operTbId );
1402 int featTbId = createTool( tr( "TOOL_FEATURES" ) );
1403 createTool( GEOMOp::OpFillet1d, featTbId );
1404 createTool( GEOMOp::OpFillet2d, featTbId );
1405 createTool( GEOMOp::OpFillet3d, featTbId );
1406 createTool( GEOMOp::OpChamfer, featTbId );
1407 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1408 createTool( GEOMOp::OpExtrudedCut, featTbId );
1409 #ifdef DEBUG_CURVE_CREATOR
1410 // for debug purposes, to be removed
1411 createTool( GEOMOp::OpCurveCreator, featTbId );
1414 int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1415 createTool( GEOMOp::OpEdge, buildTbId );
1416 createTool( GEOMOp::OpWire, buildTbId );
1417 createTool( GEOMOp::OpFace, buildTbId );
1418 createTool( GEOMOp::OpShell, buildTbId );
1419 createTool( GEOMOp::OpSolid, buildTbId );
1420 createTool( GEOMOp::OpCompound, buildTbId );
1422 int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1423 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1424 createTool( GEOMOp::OpProperties, measureTbId );
1425 createTool( GEOMOp::OpCenterMass, measureTbId );
1426 createTool( GEOMOp::OpInertia, measureTbId );
1427 createTool( GEOMOp::OpNormale, measureTbId );
1428 createTool( separator(), measureTbId );
1429 createTool( GEOMOp::OpBoundingBox, measureTbId );
1430 createTool( GEOMOp::OpMinDistance, measureTbId );
1431 createTool( GEOMOp::OpAngle, measureTbId );
1432 createTool( GEOMOp::OpTolerance , measureTbId );
1433 createTool( separator(), measureTbId );
1434 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1435 createTool( GEOMOp::OpFreeFaces, measureTbId );
1436 createTool( separator(), measureTbId );
1437 createTool( GEOMOp::OpWhatIs, measureTbId );
1438 createTool( GEOMOp::OpCheckShape, measureTbId );
1439 createTool( GEOMOp::OpCheckCompound, measureTbId );
1440 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1441 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1443 int picturesTbId = createTool( tr( "TOOL_PICTURES" ) );
1444 createTool( GEOMOp::OpPictureImport, picturesTbId );
1446 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1449 int impexpTbId = createTool( tr( "TOOL_IMPORTEXPORT" ) );
1450 createTool( GEOMOp::OpExportXAO, impexpTbId );
1451 createTool( GEOMOp::OpImportXAO, impexpTbId );
1453 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1454 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1455 //@@ 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 @@//
1457 // ---- create popup menus --------------------------
1459 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1460 QString clientOCC = "(client='OCCViewer')";
1461 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1462 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1464 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1465 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1466 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1467 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1469 QString autoColorPrefix =
1470 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1472 QtxPopupMgr* mgr = popupMgr();
1474 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1475 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1476 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1477 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1478 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1479 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1480 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1481 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1483 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1484 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1485 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1486 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1487 mgr->insert( separator(), -1, -1 ); // -----------
1489 #if OCC_VERSION_LARGE > 0x06050200
1490 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1491 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1492 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1493 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1494 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1495 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1496 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1498 mgr->insert( separator(), -1, -1 ); // -----------
1499 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1500 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1501 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1502 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1503 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1504 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1505 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1506 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1507 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1508 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1509 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1510 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1511 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1512 mgr->insert( separator(), dispmodeId, -1 );
1513 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1514 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1515 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1516 mgr->insert( separator(), -1, -1 ); // -----------
1518 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1519 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1520 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1521 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1522 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1523 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1524 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1525 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1526 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1527 //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1528 mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1530 // material properties
1531 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1532 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1535 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1536 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1538 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1539 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1540 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1542 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1543 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1545 mgr->insert( separator(), -1, -1 ); // -----------
1546 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1547 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1548 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1549 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1550 mgr->insert( separator(), -1, -1 ); // -----------
1552 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1553 onlyComponent = "((type='Component') and selcount=1)",
1554 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1555 types = "'Shape' 'Group' 'FieldStep'";
1557 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1558 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1560 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1561 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1563 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1564 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1566 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1568 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1569 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1570 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1571 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1572 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1573 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1574 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1575 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1576 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1577 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1578 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1579 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1580 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1581 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1582 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1583 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1584 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1585 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1586 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1587 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1588 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1589 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1590 mgr->insert( separator(), selectonlyId, -1);
1591 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1592 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1593 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1594 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1595 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1596 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1597 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1599 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1601 mgr->insert( separator(), -1, -1 ); // -----------
1602 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1603 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1604 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1605 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1607 mgr->insert( separator(), -1, -1 ); // -----------
1608 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1609 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1611 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1612 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1614 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1615 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1617 mgr->insert( separator(), -1, -1 ); // -----------
1618 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1619 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1621 mgr->insert( separator(), -1, -1 ); // -----------
1622 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1623 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1625 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1627 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1629 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1630 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1631 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1634 // create plugin actions and menus
1638 //=======================================================================
1639 // function : GeometryGUI::addPluginActions()
1641 //=======================================================================
1642 void GeometryGUI::addPluginActions()
1645 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1646 if (!resMgr) return;
1648 // Find names of a resource XML files ("GEOMActions.xml" and others);
1650 char* cenv = getenv("GEOM_PluginsList");
1652 PluginsXml.sprintf("%s", cenv);
1654 QStringList PluginsXmlList = PluginsXml.split(":", QString::SkipEmptyParts);
1655 if (PluginsXmlList.count() == 0) return;
1657 // get full names of xml files from PluginsXmlList
1658 QStringList xmlFiles;
1659 xmlFiles.append(QDir::home().filePath("CustomGeomPlugins.xml")); // may be inexistent
1660 for (int i = 0; i < PluginsXmlList.count(); i++) {
1661 PluginsXml = PluginsXmlList[ i ];
1663 // Find full path to the resource XML file
1664 QString xmlFile = resMgr->path("resources", "GEOM", PluginsXml + ".xml");
1665 if ( xmlFile.isEmpty() ) // try PLUGIN resources
1666 xmlFile = resMgr->path("resources", PluginsXml, PluginsXml + ".xml");
1667 if ( !xmlFile.isEmpty() )
1668 xmlFiles.append( xmlFile );
1671 // create "Advanced Operations" menu and corresponding toolbar
1672 //int advancedMenuId = createMenu(tr("MEN_ADVANCED"), -1, -1, 10);
1673 //int advancedTbarId = createTool(tr("TOOL_ADVANCED"));
1674 int id = GEOMOp::OpLastOperationID; // TODO?
1677 QString aNoAccessFiles;
1678 for (int i = 0; i < xmlFiles.count(); i++) {
1679 QString xmlFile = xmlFiles[ i ];
1681 QFile file (xmlFile);
1682 if (file.exists() && file.open(QIODevice::ReadOnly)) {
1685 GEOMGUI_XmlHandler* aXmlHandler = new GEOMGUI_XmlHandler();
1686 ASSERT(aXmlHandler);
1688 QXmlInputSource source (&file);
1689 QXmlSimpleReader reader;
1690 reader.setContentHandler(aXmlHandler);
1691 reader.setErrorHandler(aXmlHandler);
1692 bool ok = reader.parse(source);
1696 // bind action lib and label to its ID for activateOperation() method proper work
1697 myPluginLibs[aXmlHandler->myPluginData.myName] = aXmlHandler->myPluginData.myClientLib;
1699 QListIterator<GEOMGUI_ActionData> anActionsIter (aXmlHandler->myPluginData.myListOfActions);
1700 while (anActionsIter.hasNext()) {
1701 GEOMGUI_ActionData anActionData = anActionsIter.next();
1703 //QPixmap icon = resMgr->loadPixmap("GEOM", tr(anActionData.myIcon.toLatin1().constData()));
1704 QPixmap icon = resMgr->loadPixmap(aXmlHandler->myPluginData.myName,
1705 anActionData.myIcon.toLatin1().constData());
1707 // path to action in menu
1708 QStringList smenus = anActionData.myMenu.split( "/" );
1709 QString actionName = smenus.last();
1710 actionName = actionName.toUpper().prepend("MEN_");
1711 smenus.removeLast();
1713 // path to action in toolbar
1714 QStringList stools = anActionData.myTooltip.split( "/" );
1715 QString actionTool = stools.last();
1716 actionTool = actionTool.toUpper().prepend("TOP_");
1717 stools.removeLast();
1719 QString actionStat = anActionData.myStatusBar;
1720 actionStat = actionStat.toUpper().prepend("STB_");
1722 createAction(id, // ~ anActionData.myLabel
1723 tr(actionTool.toLatin1().constData()),
1725 tr(actionName.toLatin1().constData()),
1726 tr(actionStat.toLatin1().constData()),
1728 application()->desktop(),
1730 this, SLOT(OnGUIEvent()),
1731 QString() /*shortcutAction*/);
1734 foreach (QString subMenu, smenus) {
1735 subMenu = subMenu.toUpper().prepend("MEN_");
1736 menuId = createMenu(tr(subMenu.toLatin1().constData()), menuId, -1);
1738 //createMenu(id, pluginMenuId, -1);
1739 createMenu(id, menuId, -1);
1741 QString subTool = stools[0];
1742 subTool = subTool.toUpper().prepend("TOOL_");
1743 int toolId = createTool(tr(subTool.toLatin1().constData()));
1744 //createTool(id, advancedTbarId);
1745 createTool(id, toolId);
1747 // add action id to map
1748 PluginAction anAction (aXmlHandler->myPluginData.myClientLib, anActionData.myLabel);
1749 myPluginActions[id] = anAction;
1755 SUIT_MessageBox::critical(application()->desktop(),
1756 tr("INF_PARSE_ERROR"),
1757 tr(aXmlHandler->errorProtocol().toLatin1().data()));
1761 else if ( i > 0 ) { // 1st is ~/CustomGeomPlugins.xml
1762 if (aNoAccessFiles.isEmpty())
1763 aNoAccessFiles = xmlFile;
1765 aNoAccessFiles += ", " + xmlFile;
1767 } // end loop on xmlFiles
1769 if (!aNoAccessFiles.isEmpty()) {
1770 QString aMess = QObject::tr("PLUGIN_FILE_CANT_OPEN") + " " + aNoAccessFiles + "\n";
1771 aMess += QObject::tr("PLUGIN_FILE_CHECK_VARIABLE");
1772 SUIT_MessageBox::warning(application()->desktop(), tr("GEOM_WRN_WARNING"), aMess);
1776 //=======================================================================
1777 // function : GeometryGUI::activateModule()
1778 // purpose : Called when GEOM module is activated
1779 //=======================================================================
1780 bool GeometryGUI::activateModule( SUIT_Study* study )
1782 if ( CORBA::is_nil( myComponentGeom ) )
1785 bool res = SalomeApp_Module::activateModule( study );
1789 setMenuShown( true );
1790 setToolShown( true );
1792 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1793 PyGILState_STATE gstate = PyGILState_Ensure();
1794 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1795 if ( !pluginsmanager ) {
1799 PyObjWrapper result =
1800 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1801 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1802 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1806 PyGILState_Release(gstate);
1807 // end of GEOM plugins loading
1809 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1810 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1812 // Reset actions accelerator keys
1813 action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1814 action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1815 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1817 GUIMap::Iterator it;
1818 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1819 it.value()->activate( application()->desktop() );
1821 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1823 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1824 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1825 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1827 if ( !myCreationInfoWdg )
1828 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1829 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1830 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1832 SUIT_ViewManager* vm;
1833 ViewManagerList OCCViewManagers, VTKViewManagers;
1835 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1836 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1837 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1838 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1840 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1841 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1842 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1843 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1846 SALOME_ListIO selected;
1847 sm->selectedObjects( selected );
1848 sm->clearSelected();
1850 // disable OCC selectors
1851 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1852 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1853 while ( itOCCSel.hasNext() )
1854 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1855 sr->setEnabled(true);
1857 // disable VTK selectors
1858 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1859 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1860 while ( itVTKSel.hasNext() )
1861 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1862 sr->setEnabled(true);
1864 sm->setSelectedObjects( selected, true ); //NPAL 19674
1866 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1868 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1870 // 0020836 (Basic vectors and origin)
1871 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1872 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1873 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1875 _PTR(Study) studyDS = appStudy->studyDS();
1877 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1878 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1879 createOriginAndBaseVectors();
1887 //=======================================================================
1888 // function : GeometryGUI::deactivateModule()
1889 // purpose : Called when GEOM module is deactivated
1890 //=======================================================================
1891 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1893 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1895 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1897 setMenuShown( false );
1898 setToolShown( false );
1900 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1901 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1903 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1905 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1906 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1907 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1908 myCreationInfoWdg = 0;
1910 EmitSignalCloseAllDialogs();
1912 GUIMap::Iterator it;
1913 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1914 it.value()->deactivate();
1916 // Unset actions accelerator keys
1917 action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1918 action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1919 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1921 qDeleteAll(myOCCSelectors);
1922 myOCCSelectors.clear();
1923 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1925 qDeleteAll(myVTKSelectors);
1926 myVTKSelectors.clear();
1927 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1929 return SalomeApp_Module::deactivateModule( study );
1932 //=======================================================================
1933 // function : onWindowActivated()
1934 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1935 //=======================================================================
1936 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1941 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1942 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1944 // disable non-OCC viewframe menu commands
1945 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1946 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1947 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1948 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1949 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1950 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1951 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1953 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1954 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1955 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1956 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1958 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1961 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1963 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1964 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1965 if ( myCreationInfoWdg )
1966 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1969 void GeometryGUI::viewManagers( QStringList& lst ) const
1971 lst.append( OCCViewer_Viewer::Type() );
1974 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1976 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1978 qDebug( "connect" );
1979 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1980 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1981 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1982 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1983 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1984 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1985 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1986 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1988 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1989 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1991 // disable OCC selectors
1992 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1993 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1994 while ( itOCCSel.hasNext() )
1995 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1996 sr->setEnabled(true);
1998 else if ( vm->getType() == SVTK_Viewer::Type() )
2000 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2001 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
2003 // disable VTK selectors
2004 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
2005 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2006 while ( itVTKSel.hasNext() )
2007 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2008 sr->setEnabled(true);
2012 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
2014 SUIT_ViewModel* viewer = vm->getViewModel();
2015 if ( vm->getType() == OCCViewer_Viewer::Type() )
2017 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2018 while ( itOCCSel.hasNext() )
2019 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2020 if ( sr->viewer() == viewer )
2022 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
2026 if ( vm->getType() == SVTK_Viewer::Type() )
2028 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2029 while ( itVTKSel.hasNext() )
2030 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2031 if ( sr->viewer() == viewer )
2033 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2039 //================================================================================
2041 * \brief Slot called when selection changed. Shows creation info of a selected object
2043 //================================================================================
2045 void GeometryGUI::updateCreationInfo()
2047 if ( myCreationInfoWdg )
2048 myCreationInfoWdg->clear();
2050 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2051 // if ( !myCreationInfoWdg->isVisible() )
2054 // look for a sole selected GEOM_Object
2055 GEOM::GEOM_BaseObject_var geomObj;
2057 SALOME_ListIO selected;
2058 getApp()->selectionMgr()->selectedObjects( selected );
2060 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2061 SALOME_ListIteratorOfListIO selIt( selected );
2062 for ( ; selIt.More(); selIt.Next() )
2064 Handle(SALOME_InteractiveObject) io = selIt.Value();
2065 if ( !io->hasEntry() ) continue;
2066 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2067 if ( !sobj ) continue;
2068 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2069 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2070 if ( !gobj->_is_nil() )
2072 if ( !geomObj->_is_nil() )
2073 return; // several GEOM objects selected
2077 if ( geomObj->_is_nil() ) return;
2079 // pass creation info of geomObj to myCreationInfoWdg
2081 if ( myCreationInfoWdg ) {
2083 QString operationName;
2084 myCreationInfoWdg->setOperation( icon, operationName );
2088 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2090 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2091 QString name = info->operationName.in();
2092 if ( !name.isEmpty() ) {
2093 icon = resMgr->loadPixmap( "GEOM", tr( ("ICO_"+name).toLatin1().constData() ), false );
2094 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2095 if ( operationName.startsWith( "MEN_" ))
2096 operationName = name; // no translation
2097 myCreationInfoWdg->setOperation( icon, operationName );
2099 for ( size_t i = 0; i < info->params.length(); ++i )
2100 myCreationInfoWdg->addParam( info->params[i].name.in(),
2101 info->params[i].value.in() );
2110 void GeometryGUI::onAutoBringToFront()
2112 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front" );
2113 if( !isAutoBringToFront )
2116 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2117 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2120 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2121 if (!appStudy) return;
2123 GEOM_Displayer displayer( appStudy );
2125 SALOME_View* window = displayer.GetActiveView();
2126 if ( !window ) return;
2128 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2130 SALOME_ListIO selected;
2131 getApp()->selectionMgr()->selectedObjects( selected );
2132 if (!myTopLevelIOList.IsEmpty())
2134 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2136 Handle( SALOME_InteractiveObject ) io = It.Value();
2137 bool isSelected = false;
2138 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2140 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2141 if( io->isSame( sel_io ) )
2144 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2146 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2147 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2152 myTopLevelIOList.Assign(selected);
2153 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2155 Handle( SALOME_InteractiveObject ) io = It.Value();
2156 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2157 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2160 displayer.UpdateViewer();
2161 GeometryGUI::Modified();
2164 void GeometryGUI::updateFieldColorScale()
2166 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2168 GEOM_Displayer aDisplayer( aStudy );
2169 aDisplayer.UpdateColorScale();
2173 QString GeometryGUI::engineIOR() const
2175 if ( !CORBA::is_nil( GetGeomGen() ) )
2176 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2180 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2181 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2183 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
2185 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2187 theWidth = theHeight = 0;
2189 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2190 Handle(TColStd_HArray1OfByte) aTexture;
2192 Handle(Graphic3d_HArray1OfBytes) aTexture;
2196 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2197 aTexture = aTextureMap[ theId ];
2198 if ( aTexture.IsNull() ) {
2199 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2200 if ( !aInsOp->_is_nil() ) {
2201 CORBA::Long aWidth, aHeight;
2202 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2203 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2205 theHeight = aHeight;
2207 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2208 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2210 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
2213 for (int i = 0; i < aStream->length(); i++)
2214 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2215 aTextureMap[ theId ] = aTexture;
2223 LightApp_Selection* GeometryGUI::createSelection() const
2225 return new GEOMGUI_Selection();
2228 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2230 SalomeApp_Module::contextMenuPopup( client, menu, title );
2232 getApp()->selectionMgr()->selectedObjects( lst );
2234 //Add submenu for predefined materials
2235 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2236 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2237 QtxPopupMgr* mgr = popupMgr();
2238 //get parrent for submenu
2239 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2241 QMenu* oldMenu = act->menu() ;
2246 QMenu* matMenu = new QMenu();
2247 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2249 //Get current material model for the object
2251 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2252 if ( anApp && anApp->activeViewManager() ) {
2253 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2255 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2258 QString curModel = "";
2259 if ( v.canConvert<QString>() ) curModel = v.toString();
2260 // get list of all predefined materials
2261 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2263 foreach ( QString material, materials )
2265 QAction* menAct = matMenu->addAction( material );
2266 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2267 signalMapper->setMapping( menAct, material );
2268 menAct->setCheckable( true );
2269 // Set checked if this material is current
2270 Material_Model aModel;
2271 aModel.fromResources( material );
2272 if ( !found && aModel.toProperties() == curModel ) {
2273 menAct->setChecked( true );
2277 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2278 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2279 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2280 this, SLOT( OnSetMaterial( const QString & ) ) );
2281 act->setMenu( matMenu );
2285 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2286 Handle(SALOME_InteractiveObject) io = lst.First();
2287 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2288 _PTR(Study) study = appStudy->studyDS();
2289 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2291 QString aName = QString( obj->GetName().c_str() );
2292 aName.remove( QRegExp("\\s+$") );
2298 void GeometryGUI::OnSetMaterial(const QString& theName)
2300 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2304 void GeometryGUI::createPreferences()
2306 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2308 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2309 setPreferenceProperty( genGroup, "columns", 2 );
2311 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2312 LightApp_Preferences::Selector,
2313 "Geometry", "display_mode" );
2315 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2316 LightApp_Preferences::Color, "Geometry", "shading_color" );
2318 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2319 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2321 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2322 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2324 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2325 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2327 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2328 LightApp_Preferences::Color, "Geometry", "line_color" );
2330 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2331 LightApp_Preferences::Color, "Geometry", "point_color" );
2333 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2334 LightApp_Preferences::Color, "Geometry", "isos_color" );
2336 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2337 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2339 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2340 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2342 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2343 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2345 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2346 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2348 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2349 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2351 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2352 LightApp_Preferences::Selector,
2353 "Geometry", "material" );
2355 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2356 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2362 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2363 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2365 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2366 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2368 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2369 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2371 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2372 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2374 for (int i = 0; i < nb; i++) {
2375 setPreferenceProperty( wd[i], "min", 1 );
2376 setPreferenceProperty( wd[i], "max", 5 );
2379 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2380 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2382 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2383 setPreferenceProperty( aDimGroupId, "columns", 2 );
2385 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2386 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2388 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2389 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2391 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2392 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2394 int aDimFontHeightId = addPreference( tr( "PREF_DIMENSIONS_FONT_HEIGHT" ), aDimGroupId,
2395 LightApp_Preferences::DblSpin, "Geometry", "dimensions_font_height" );
2397 setPreferenceProperty( aDimFontHeightId, "min", 1e-9 );
2398 setPreferenceProperty( aDimFontHeightId, "max", 1e+9 );
2399 setPreferenceProperty( aDimFontHeightId, "precision", 9 );
2401 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2402 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2404 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2405 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2406 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2408 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2409 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2411 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2412 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2414 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2415 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2417 QStringList aListOfLengthUnits;
2418 aListOfLengthUnits << "m";
2419 aListOfLengthUnits << "cm";
2420 aListOfLengthUnits << "mm";
2421 aListOfLengthUnits << "in.";
2422 aListOfLengthUnits << "ft.";
2424 QStringList aListOfAngUnits;
2425 aListOfAngUnits << "rad";
2426 aListOfAngUnits << "deg";
2428 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2429 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2431 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2432 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2434 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2435 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2436 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2438 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2439 setPreferenceProperty( isoGroup, "columns", 2 );
2440 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2441 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2442 setPreferenceProperty( isoU, "min", 0 );
2443 setPreferenceProperty( isoU, "max", 100000 );
2444 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2445 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2446 setPreferenceProperty( isoV, "min", 0 );
2447 setPreferenceProperty( isoV, "max", 100000 );
2449 // Quantities with individual precision settings
2450 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2451 setPreferenceProperty( precGroup, "columns", 2 );
2453 const int nbQuantities = 8;
2454 int prec[nbQuantities], ii = 0;
2455 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2456 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2457 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2458 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2459 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2460 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2461 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2462 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2463 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2464 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2465 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2466 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2467 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2468 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2469 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2470 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2472 // Set property for precision value for spinboxes
2473 for ( ii = 0; ii < nbQuantities; ii++ ){
2474 setPreferenceProperty( prec[ii], "min", -14 );
2475 setPreferenceProperty( prec[ii], "max", 14 );
2476 setPreferenceProperty( prec[ii], "precision", 2 );
2479 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2480 setPreferenceProperty( VertexGroup, "columns", 2 );
2482 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2483 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2485 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2486 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2488 // Set property for default display mode
2489 QStringList aModesList;
2490 aModesList.append( tr("MEN_WIREFRAME") );
2491 aModesList.append( tr("MEN_SHADING") );
2492 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2493 aModesList.append( tr("MEN_TEXTURE") );
2495 QList<QVariant> anIndexesList;
2496 anIndexesList.append(0);
2497 anIndexesList.append(1);
2498 anIndexesList.append(2);
2499 anIndexesList.append(3);
2501 setPreferenceProperty( dispmode, "strings", aModesList );
2502 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2504 // Set property for top level display mode
2505 QStringList aTopModesList;
2506 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2507 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2508 aTopModesList.append( tr("MEN_WIREFRAME") );
2509 aTopModesList.append( tr("MEN_SHADING") );
2510 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2512 QList<QVariant> aTopIndexesList;
2513 aTopIndexesList.append(0);
2514 aTopIndexesList.append(1);
2515 aTopIndexesList.append(2);
2516 aTopIndexesList.append(3);
2517 aTopIndexesList.append(4);
2519 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2520 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2522 // Set property for step value for spinboxes
2523 setPreferenceProperty( step, "min", 1 );
2524 setPreferenceProperty( step, "max", 10000 );
2525 setPreferenceProperty( step, "precision", 3 );
2527 // Set property for deflection value for spinboxes
2528 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2529 setPreferenceProperty( defl, "max", 1.0 );
2530 setPreferenceProperty( defl, "step", 1.0e-04 );
2531 setPreferenceProperty( defl, "precision", 6 );
2533 // Set property for default material
2534 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2536 // Set property vertex marker type
2537 QList<QVariant> aMarkerTypeIndicesList;
2538 QList<QVariant> aMarkerTypeIconsList;
2540 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2541 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2542 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2543 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2544 aMarkerTypeIndicesList << (i-1);
2545 aMarkerTypeIconsList << pixmap;
2548 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2549 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2551 // Set property for vertex marker scale
2552 QList<QVariant> aMarkerScaleIndicesList;
2553 QStringList aMarkerScaleValuesList;
2555 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2556 aMarkerScaleIndicesList << iii;
2557 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2560 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2561 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2563 // Scalar bar for field step presentation
2564 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2565 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2567 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2568 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2569 setPreferenceProperty( sbXPosition, "min", 0 );
2570 setPreferenceProperty( sbXPosition, "max", 1 );
2571 setPreferenceProperty( sbXPosition, "step", 0.05 );
2573 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2574 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2575 setPreferenceProperty( sbYPosition, "min", 0 );
2576 setPreferenceProperty( sbYPosition, "max", 1 );
2577 setPreferenceProperty( sbYPosition, "step", 0.05 );
2579 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2580 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2581 setPreferenceProperty( sbWidth, "min", 0 );
2582 setPreferenceProperty( sbWidth, "max", 1 );
2583 setPreferenceProperty( sbWidth, "step", 0.05 );
2585 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2586 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2587 setPreferenceProperty( sbHeight, "min", 0 );
2588 setPreferenceProperty( sbHeight, "max", 1 );
2589 setPreferenceProperty( sbHeight, "step", 0.05 );
2591 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2592 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2593 setPreferenceProperty( sbTextHeight, "min", 6 );
2594 setPreferenceProperty( sbTextHeight, "max", 24 );
2595 setPreferenceProperty( sbTextHeight, "step", 1 );
2597 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2598 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2599 setPreferenceProperty( sbNbIntervals, "min", 2 );
2600 setPreferenceProperty( sbNbIntervals, "max", 64 );
2601 setPreferenceProperty( sbNbIntervals, "step", 1 );
2603 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2604 setPreferenceProperty( originGroup, "columns", 2 );
2606 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2607 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2608 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2609 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2611 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2612 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2614 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2615 setPreferenceProperty( operationsGroup, "columns", 2 );
2617 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2618 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2621 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2623 if (section == "Geometry") {
2624 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2625 if (param == QString("SettingsGeomStep")) {
2626 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2627 EmitSignalDefaultStepValueChanged(spin_step);
2629 else if (param == QString("toplevel_color")) {
2630 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2631 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2633 else if (param == QString("toplevel_dm")) {
2634 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2636 else if (param == QString("scalar_bar_x_position") ||
2637 param == QString("scalar_bar_y_position") ||
2638 param == QString("scalar_bar_width") ||
2639 param == QString("scalar_bar_height") ||
2640 param == QString("scalar_bar_text_height") ||
2641 param == QString("scalar_bar_nb_intervals")) {
2642 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2644 GEOM_Displayer aDisplayer( aStudy );
2645 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2646 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2649 else if ( param == QString("dimensions_color") ||
2650 param == QString("dimensions_line_width") ||
2651 param == QString("dimensions_font_height") ||
2652 param == QString("dimensions_arrow_length") ||
2653 param == QString("dimensions_show_units") ||
2654 param == QString("dimensions_length_units") ||
2655 param == QString("dimensions_angle_units") )
2657 SalomeApp_Application* anApp = getApp();
2663 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2669 GEOM_Displayer aDisplayer( aStudy );
2671 ViewManagerList aVMs;
2672 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2673 ViewManagerList::Iterator anIt = aVMs.begin();
2674 for ( ; anIt != aVMs.end(); ++anIt )
2676 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2682 SALOME_ListIO aVisible;
2683 aViewer->GetVisible( aVisible );
2684 aDisplayer.Redisplay( aVisible, false, aViewer );
2687 aDisplayer.UpdateViewer();
2692 LightApp_Displayer* GeometryGUI::displayer()
2695 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2699 void GeometryGUI::setLocalSelectionMode(const int mode)
2701 myLocalSelectionMode = mode;
2704 int GeometryGUI::getLocalSelectionMode() const
2706 return myLocalSelectionMode;
2709 const char gSeparator = '_'; // character used to separate parameter names
2710 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2713 * \brief Store visual parameters
2715 * This method is called just before the study document is saved.
2716 * Store visual parameters in AttributeParameter attribute(s)
2718 void GeometryGUI::storeVisualParameters (int savePoint)
2720 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2721 if ( !appStudy || !appStudy->studyDS() )
2723 _PTR(Study) studyDS = appStudy->studyDS();
2725 // componentName is used for encoding of entries when storing them in IParameters
2726 std::string componentName = myComponentGeom->ComponentDataType();
2727 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2728 //if (!aSComponent) return;
2731 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2732 componentName.c_str(),
2734 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2736 QSet<QString> anEntriesToStoreShared;
2737 QList<SUIT_ViewManager*> lst;
2738 QList<SUIT_ViewManager*>::Iterator it;
2740 // main cycle to store parameters of displayed objects
2742 getApp()->viewManagers(lst);
2743 for (it = lst.begin(); it != lst.end(); it++) {
2744 SUIT_ViewManager* vman = *it;
2745 QString vType = vman->getType();
2746 int aMgrId = vman->getGlobalId();
2747 // saving VTK actors properties
2748 QVector<SUIT_ViewWindow*> views = vman->getViews();
2749 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2750 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
2751 ObjMap::ConstIterator o_it = anObjects.begin();
2752 for (; o_it != anObjects.end(); o_it++) {
2753 const PropMap aProps = o_it.value();
2755 //Check that object exists in the study
2756 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2757 if ( !obj || !(aProps.count() > 0))
2759 // entry is "encoded" = it does NOT contain component adress, since it is a
2760 // subject to change on next component loading
2762 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2764 _PTR(GenericAttribute) anAttr;
2765 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2768 // remember entry of object to store shared GEOM properties
2769 // (e.g. dimension properties).
2770 if ( vType == OCCViewer_Viewer::Type() )
2772 anEntriesToStoreShared.insert( o_it.key() );
2775 QString param, occParam = vType;
2776 occParam += GEOM::sectionSeparator();
2777 occParam += QString::number(aMgrId);
2778 occParam += GEOM::sectionSeparator();
2780 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2781 param = occParam + GEOM::propertyName( GEOM::Visibility );
2782 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2785 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2786 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2787 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2790 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2791 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2793 val << QString::number(c.redF());
2794 val << QString::number(c.greenF());
2795 val << QString::number(c.blueF());
2796 param = occParam + GEOM::propertyName( GEOM::Color );
2797 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2800 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2801 param = occParam + GEOM::propertyName( GEOM::Texture );
2802 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2805 if (vType == SVTK_Viewer::Type()) {
2806 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2807 param = occParam + GEOM::propertyName( GEOM::Opacity );
2808 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2810 } else if (vType == SOCC_Viewer::Type()) {
2811 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2812 param = occParam + GEOM::propertyName( GEOM::Transparency );
2813 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2816 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2817 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2818 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2822 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2823 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2824 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2827 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2828 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2829 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2832 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2833 param = occParam + GEOM::propertyName( GEOM::Deflection );
2834 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2837 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2838 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2839 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2840 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2843 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2844 param = occParam + GEOM::propertyName( GEOM::Material );
2845 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2848 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2849 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2850 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2853 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2854 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2855 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2857 } // object iterator
2859 } // for (viewManagers)
2861 // store dimension attributes of objects:
2862 // since the displayed object always persists in property map, we remember the object entries
2863 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
2864 QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
2865 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
2866 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
2868 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
2869 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName);
2871 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
2873 if ( aDimensions.GetNumber() == 0 )
2878 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
2883 * \brief Restore visual parameters
2885 * This method is called after the study document is opened.
2886 * Restore visual parameters from AttributeParameter attribute(s)
2888 void GeometryGUI::restoreVisualParameters (int savePoint)
2890 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2891 if (!appStudy || !appStudy->studyDS())
2893 _PTR(Study) studyDS = appStudy->studyDS();
2895 // componentName is used for encoding of entries when storing them in IParameters
2896 std::string componentName = myComponentGeom->ComponentDataType();
2897 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2898 //if (!aSComponent) return;
2901 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2902 componentName.c_str(),
2904 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2906 std::vector<std::string> entries = ip->getEntries();
2908 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2910 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2911 QString entry (ip->decodeEntry(*entIt).c_str());
2913 // Check that the entry corresponds to a real object in the Study
2914 // as the object may be deleted or modified after the visual state is saved.
2915 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2916 if (!so) continue; //Skip the not existent entry
2918 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2919 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2921 std::vector<std::string>::iterator namesIt = paramNames.begin();
2922 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2924 // actors are stored in a map after displaying of them for
2925 // quicker access in the future: map < viewID to actor >
2926 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2927 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2929 QString viewerTypStr;
2930 QString viewIndexStr;
2932 QVector<PropMap> aListOfMap;
2934 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2936 // visual parameters are stored in strings as follows:
2937 // 1) ViewerType_ViewIndex_ParamName
2938 // 2) ViewerType_ParamName (shared for GEOM module)
2939 // '_' is used as separator and should not be used in viewer type or parameter names.
2940 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
2942 bool isShared = lst.size() == 2;
2943 bool isViewer = lst.size() == 3;
2944 if ( !isShared && !isViewer )
2949 // shared visual parameters
2952 QString aParamNameStr( lst[1] );
2953 QString aValuesStr( (*valuesIt).c_str() );
2955 // shared dimension properties are stored as attribute
2956 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
2958 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
2959 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
2965 // per view visual parameters
2966 viewerTypStr = lst[0];
2967 viewIndexStr = lst[1];
2968 QString paramNameStr = lst[2];
2971 viewIndex = viewIndexStr.toUInt(&ok);
2972 if (!ok) // bad conversion of view index to integer
2975 if ((viewIndex + 1) > aListOfMap.count()) {
2976 aListOfMap.resize(viewIndex + 1);
2979 QString val((*valuesIt).c_str());
2980 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
2981 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
2982 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
2983 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
2984 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
2985 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
2986 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
2987 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
2988 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
2989 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
2990 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
2991 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
2992 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
2993 QStringList rgb = val.split(GEOM::subSectionSeparator());
2994 if (rgb.count() == 3) {
2995 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
2996 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
2998 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
2999 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
3000 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
3001 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
3002 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3003 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3004 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3005 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3006 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3007 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3008 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3009 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3010 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3011 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3013 } // for names/parameters iterator
3015 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3017 for (int index = 0; index < aListOfMap.count(); index++) {
3019 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
3021 //Get Visibility property of the current PropMap
3022 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3023 SUIT_ViewManager* vman = lst.at(index);
3024 SUIT_ViewModel* vmodel = vman->getViewModel();
3025 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
3028 } // for entries iterator
3030 // update all VTK and OCC views
3031 QList<SUIT_ViewManager*> lst;
3032 getApp()->viewManagers(lst);
3033 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3034 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3037 if (vmodel->getType() == SVTK_Viewer::Type()) {
3038 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3039 vtkView->getRenderer()->ResetCameraClippingRange();
3042 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3043 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3044 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3051 void GeometryGUI::onViewAboutToShow()
3053 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3054 QAction* a = action( GEOMOp::OpSwitchVectors );
3056 a->setEnabled(true);
3057 bool vmode = window->property("VectorsMode").toBool();
3058 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3060 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3061 a->setEnabled(false);
3066 \brief Return action by id
3067 \param id identifier of the action
3070 QAction* GeometryGUI::getAction(const int id) {
3075 \brief GEOM module message handler
3077 This method can be re-implemented in the subclasses.
3078 This is a GEOM module message handler.
3080 \param msg the message received.
3082 void GeometryGUI::message(const QString& msg)
3085 QStringList data = msg.split("/");
3086 const int nbStrings = data.count();
3088 if (nbStrings > 0) {
3089 if (data[0] == "modified") {
3091 QString anIOR = nbStrings > 1 ? data[1] : QString();
3093 if ( anIOR.isEmpty() ) {
3097 // Get the geom object.
3098 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3100 // Clear the shape buffer
3101 GeometryGUI::ClearShapeBuffer (anObj);
3107 \brief Clears the shape buffer.
3109 This is a static method. It clears the shape buffer.
3111 \param theObj the object
3113 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3115 if ( CORBA::is_nil( theObj ) )
3118 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3119 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3120 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3122 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3127 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3132 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3136 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3137 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3138 _PTR(GenericAttribute) anAttr;
3139 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3140 _PTR(AttributeIOR) anIOR ( anAttr );
3141 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3142 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3148 \brief Returns the object from IOR.
3150 This is a static method. It returns the object from its IOR.
3152 \param IOR object IOR
3153 \return GEOM object.
3155 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3157 GEOM::GEOM_Object_var geomObj;
3158 if ( !IOR.isEmpty() ) {
3159 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3160 ( IOR.toLatin1().constData() );
3161 if ( !CORBA::is_nil( corbaObj ) )
3162 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3164 return geomObj._retn();
3168 \brief Returns IOR of the object.
3170 This is a static method. It returns the object's IOR.
3172 \param object the GEOM object.
3173 \return object's IOR.
3175 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3178 if ( !CORBA::is_nil( object ) ) {
3179 CORBA::String_var anIOR =
3180 SalomeApp_Application::orb()->object_to_string( object );
3187 \brief Check if this object is can't be renamed in place
3189 This method can be re-implemented in the subclasses.
3190 Return true in case if object isn't reference or component (module root).
3192 \param entry column id
3193 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3195 bool GeometryGUI::renameAllowed( const QString& entry) const {
3197 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3198 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3199 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3201 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3205 Rename object by entry.
3206 \param entry entry of the object
3207 \param name new name of the object
3208 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3210 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3212 bool result = false;
3214 SalomeApp_Application* app =
3215 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3216 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3221 _PTR(Study) aStudy = appStudy->studyDS();
3226 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3228 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3232 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3233 _PTR(GenericAttribute) anAttr;
3235 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3236 _PTR(AttributeName) aName (anAttr);
3238 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3239 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3240 if (!CORBA::is_nil(anObj)) {
3241 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3249 void GeometryGUI::updateMaterials()
3251 LightApp_Preferences* pref = preferences();
3253 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3254 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3255 if ( !materials.contains( currentMaterial ) )
3256 // user material set as default in the preferences, might be removed
3257 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3259 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3261 setPreferenceProperty( prefItem->id(),
3262 "strings", materials );
3263 prefItem->retrieve();
3269 \brief Check if the module allows "drag" operation of its objects.
3271 Overloaded from LightApp_Module class.
3273 This function is a part of the general drag-n-drop mechanism.
3274 The goal of this function is to check data object passed as a parameter
3275 and decide if it can be dragged or no.
3277 \param what data object being tested for drag operation
3278 \return \c true if module allows dragging of the specified object
3279 \sa isDropAccepted(), dropObjects()
3281 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3283 // we allow dragging object under root and object from folder
3284 int aLevel = what->level();
3285 bool anObjectInFolder = false;
3287 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3289 _PTR(SObject) aSO = dataObj->object();
3291 _PTR(GenericAttribute) anAttr;
3292 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3293 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3294 _PTR(AttributeLocalID) aLocalID( anAttr );
3295 anObjectInFolder = aLocalID->Value() == 999;
3300 return aLevel == 2 || anObjectInFolder;
3304 \brief Check if the module allows "drop" operation on the given object.
3306 Overloaded from LightApp_Module class.
3308 This function is a part of the general drag-n-drop mechanism.
3309 The goal of this function is to check data object passed as a parameter
3310 and decide if it can be used as a target for the "drop" operation.
3311 The processing of the drop operation itself is done in the dropObjects() function.
3313 \param where target data object
3314 \return \c true if module supports dropping on the \a where data object
3315 \sa isDraggable(), dropObjects()
3317 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3319 // we allow dropping into folder and top-level GEOM object
3320 int aLevel = where->level();
3321 bool isFolder = false;
3323 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3325 _PTR(SObject) aSO = dataObj->object();
3327 _PTR(GenericAttribute) anAttr;
3328 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3329 _PTR(AttributeLocalID) aLocalID( anAttr );
3330 isFolder = aLocalID->Value() == 999;
3335 return aLevel == 1 || isFolder;
3339 \brief Complete drag-n-drop operation.
3341 Overloaded from LightApp_Module class.
3343 This function is a part of the general drag-n-drop mechanism.
3344 Its goal is to handle dropping of the objects being dragged according
3345 to the chosen operation (move). The dropping is performed in the
3346 context of the parent data object \a where and the \a row (position in the
3347 children index) at which the data should be dropped. If \a row is equal to -1,
3348 this means that objects are added to the end of the children list.
3350 \param what objects being dropped
3351 \param where target data object
3352 \param row child index at which the drop operation is performed
3353 \param action drag-n-drop operation (Qt::DropAction) - move
3355 \sa isDraggable(), isDropAccepted()
3357 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3358 const int row, Qt::DropAction action )
3360 if (action != Qt::CopyAction && action != Qt::MoveAction)
3361 return; // unsupported action
3363 // get parent object
3364 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3365 if ( !dataObj ) return; // wrong parent
3366 _PTR(SObject) parentObj = dataObj->object();
3368 // Find the current Study and StudyBuilder
3369 _PTR(Study) aStudy = parentObj->GetStudy();
3370 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3371 // collect all parents of the target node
3372 QStringList parentIDs;
3373 _PTR(SObject) parent = parentObj;
3374 while( !parent->IsNull() ) {
3375 parentIDs << parent->GetID().c_str();
3376 parent = aUseCaseBuilder->GetFather(parent);
3379 // collect objects being dropped
3380 GEOM::object_list_var objects = new GEOM::object_list();
3381 objects->length( what.count() );
3383 for ( int i = 0; i < what.count(); i++ ) {
3384 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3385 if ( !dataObj ) continue; // skip wrong objects
3386 _PTR(SObject) sobj = dataObj->object();
3387 // check that dropped object is not a parent of target object
3388 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3389 return; // it's not allowed to move node into it's child
3391 objects[i] = _CAST(SObject, sobj)->GetSObject();
3394 objects->length( count );
3396 // call engine function
3397 GetGeomGen()->Move( objects.in(), // what
3398 _CAST(SObject, parentObj)->GetSObject(), // where
3401 // update Object browser
3402 getApp()->updateObjectBrowser( false );