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 <GraphicsView_Viewer.h>
70 #include <SalomeApp_Application.h>
71 #include <SalomeApp_DataObject.h>
72 #include <SalomeApp_Study.h>
73 #include <SalomeApp_Tools.h>
75 #include <LightApp_SelectionMgr.h>
76 #include <LightApp_VTKSelector.h>
77 #include <LightApp_DataObject.h>
78 #include <LightApp_Preferences.h>
80 #include <SALOME_LifeCycleCORBA.hxx>
81 // #include <SALOME_ListIO.hxx>
82 #include <SALOME_ListIteratorOfListIO.hxx>
84 #include <SALOMEDSClient_ClientFactory.hxx>
85 #include <SALOMEDSClient_IParameters.hxx>
87 #include <SALOMEDS_SObject.hxx>
89 #include <Basics_OCCTVersion.hxx>
100 #include <QSignalMapper>
102 #include <AIS_Drawer.hxx>
103 #include <AIS_ListOfInteractive.hxx>
104 #include <AIS_ListIteratorOfListOfInteractive.hxx>
105 #include <Prs3d_Drawer.hxx>
106 #include <Prs3d_IsoAspect.hxx>
107 #include <Aspect_TypeOfMarker.hxx>
108 #include <OSD_SharedLibrary.hxx>
109 #include <NCollection_DataMap.hxx>
111 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
112 #include <TColStd_HArray1OfByte.hxx>
114 #include <Graphic3d_HArray1OfBytes.hxx>
117 #include <utilities.h>
119 #include <vtkCamera.h>
120 #include <vtkRenderer.h>
122 #include <Standard_Failure.hxx>
123 #include <Standard_ErrorHandler.hxx>
125 #include "GEOM_version.h"
126 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
129 Standard_EXPORT CAM_Module* createModule() {
130 return new GeometryGUI();
133 Standard_EXPORT char* getModuleVersion() {
134 return (char*)GEOM_VERSION_STR;
138 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
140 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
142 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
144 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
145 if (CORBA::is_nil(myComponentGeom))
147 return GeometryGUI::myComponentGeom;
150 bool GeometryGUI::InitGeomGen()
153 if ( CORBA::is_nil( myComponentGeom ) ) return false;
157 //=======================================================================
158 // function : ClientSObjectToObject
160 //=======================================================================
161 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
163 _PTR(GenericAttribute) anAttr;
164 CORBA::Object_var anObj;
166 std::string aValue = theSObject->GetIOR();
167 if (strcmp(aValue.c_str(), "") != 0) {
168 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
169 anObj = anORB->string_to_object(aValue.c_str());
172 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
174 return anObj._retn();
177 //=======================================================================
178 // function : ClientStudyToStudy
180 //=======================================================================
181 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
183 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
184 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
185 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
186 int aStudyID = theStudy->StudyId();
187 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
188 return aDSStudy._retn();
191 void GeometryGUI::Modified (bool theIsUpdateActions)
193 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
194 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
195 appStudy->Modified();
196 if ( theIsUpdateActions )
197 app->updateActions();
202 //=======================================================================
203 // function : GeometryGUI::GeometryGUI()
204 // purpose : Constructor
205 //=======================================================================
206 GeometryGUI::GeometryGUI() :
207 SalomeApp_Module( "GEOM" ),
210 if ( CORBA::is_nil( myComponentGeom ) )
212 Engines::EngineComponent_var comp =
213 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
214 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
217 myActiveDialogBox = 0;
219 gp_Pnt origin = gp_Pnt(0., 0., 0.);
220 gp_Dir direction = gp_Dir(0., 0., 1.);
221 myWorkingPlane = gp_Ax3(origin, direction);
224 myLocalSelectionMode = GEOM_ALLOBJECTS;
226 myCreationInfoWdg = 0;
228 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
230 Q_INIT_RESOURCE( GEOMGUI );
233 //=======================================================================
234 // function : GeometryGUI::~GeometryGUI()
235 // purpose : Destructor
236 //=======================================================================
237 GeometryGUI::~GeometryGUI()
239 while (!myOCCSelectors.isEmpty())
240 delete myOCCSelectors.takeFirst();
242 while (!myVTKSelectors.isEmpty())
243 delete myVTKSelectors.takeFirst();
245 qDeleteAll(myGUIMap);
248 //=======================================================================
249 // function : GeometryGUI::getLibrary()
250 // purpose : get or load GUI library by name [ internal ]
251 //=======================================================================
252 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
253 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
255 if ( !myGUIMap.contains( libraryName ) ) {
256 // try to load library if it is not loaded yet
258 QString dirs = getenv( "LD_LIBRARY_PATH" );
261 QString dirs = getenv( "PATH" );
264 if ( !dirs.isEmpty() ) {
265 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
266 QListIterator<QString> it( dirList ); it.toBack();
267 while ( it.hasPrevious() ) {
268 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
270 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
271 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
273 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
274 continue; // continue search further
276 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
277 if ( osdF != NULL ) {
278 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
279 GEOMGUI* libGUI = (*func)( this );
281 myGUIMap[ libraryName ] = libGUI;
282 break; // found and loaded!
289 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
292 //=======================================================================
293 // function : GeometryGUI::getPluginLibrary()
294 // purpose : get or load GUI Plugin library by name [ internal ]
295 //=======================================================================
296 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
297 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
299 if ( !myGUIMap.contains( libraryName ) ) {
300 // try to load library if it is not loaded yet
302 QString dirs = getenv( "LD_LIBRARY_PATH" );
305 QString dirs = getenv( "PATH" );
308 if ( !dirs.isEmpty() ) {
309 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
310 QListIterator<QString> it( dirList ); it.toBack();
311 while ( it.hasPrevious() ) {
312 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
314 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
315 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
317 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
318 continue; // continue search further
320 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
321 if ( osdF != NULL ) {
322 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
323 GEOMPluginGUI* libGUI = (*func)( this );
325 myGUIMap[ libraryName ] = libGUI;
326 break; // found and loaded!
333 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
336 //=======================================================================
337 // function : GeometryGUI::ActiveWorkingPlane()
338 // purpose : Activate Working Plane View
339 //=======================================================================
340 void GeometryGUI::ActiveWorkingPlane()
342 gp_Dir DZ = myWorkingPlane.Direction();
343 gp_Dir DY = myWorkingPlane.YDirection();
345 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
346 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
347 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
350 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
352 Handle(V3d_View) view3d = vw->getViewPort()->getView();
354 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
355 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
359 else if ( ViewVTK ) {
360 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
362 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
364 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
365 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
366 camera->SetFocalPoint(0,0,0);
373 //=======================================================================
374 // function : GeometryGUI::SetActiveDialogBox()
375 // purpose : Set active dialog box
376 //=======================================================================
377 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
379 myActiveDialogBox = (QDialog*)aDlg;
382 //=======================================================================
383 // function : GeometryGUI::EmitSignalDeactivateDialog()
384 // purpose : Emit a signal to deactivate the active dialog Box
385 //=======================================================================
386 void GeometryGUI::EmitSignalDeactivateDialog()
388 emit SignalDeactivateActiveDialog();
391 //=======================================================================
392 // function : GeometryGUI::EmitSignalCloseAllDialogs()
393 // purpose : Emit a signal to close all non modal dialogs box
394 //=======================================================================
395 void GeometryGUI::EmitSignalCloseAllDialogs()
397 emit SignalCloseAllDialogs();
400 //=======================================================================
401 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
402 // purpose : Emit a signal to inform that default real spin box step has
404 //=======================================================================
405 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
407 emit SignalDefaultStepValueChanged(newVal);
410 //=======================================================================
411 // function : GeometryGUI::OnGUIEvent()
412 // purpose : common slot for all menu/toolbar actions
413 //=======================================================================
414 void GeometryGUI::OnGUIEvent()
416 const QObject* obj = sender();
417 if ( !obj || !obj->inherits( "QAction" ) )
419 int id = actionId((QAction*)obj);
424 //=======================================================================
425 // function : GeometryGUI::OnGUIEvent()
426 // purpose : manage all events on GUI [static]
427 //=======================================================================
428 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
430 SUIT_Application* anApp = application();
432 SUIT_Desktop* desk = anApp->desktop();
434 // check type of the active viewframe
435 SUIT_ViewWindow* window = desk->activeWindow();
436 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
437 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
438 bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() );
439 // if current viewframe is not of OCC and not of VTK type - return immediately
440 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
441 QList<int> NotViewerDependentCommands;
442 NotViewerDependentCommands << GEOMOp::OpDelete
444 << GEOMOp::OpShowOnly
445 << GEOMOp::OpShowOnlyChildren
446 << GEOMOp::OpDiscloseChildren
447 << GEOMOp::OpConcealChildren
448 << GEOMOp::OpUnpublishObject
449 << GEOMOp::OpPublishObject
450 << GEOMOp::OpPointMarker
451 << GEOMOp::OpCreateFolder
452 << GEOMOp::OpSortChildren;
453 if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) {
454 // activate OCC viewer
455 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
458 // fix for IPAL9103, point 2
459 if ( CORBA::is_nil( GetGeomGen() ) ) {
460 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
465 // find corresponding GUI library
467 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
468 createOriginAndBaseVectors(); // internal operation
470 case GEOMOp::OpImport: // MENU FILE - IMPORT
471 case GEOMOp::OpExport: // MENU FILE - EXPORT
472 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
473 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
474 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
475 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
476 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
477 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
478 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
479 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
480 case GEOMOp::OpDelete: // MENU EDIT - DELETE
481 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
482 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
483 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
484 case GEOMOp::OpColor: // POPUP MENU - COLOR
485 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
486 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
487 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
488 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
489 case GEOMOp::OpIsos: // POPUP MENU - ISOS
490 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
491 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
492 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
493 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
494 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
495 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
496 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
497 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
498 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
499 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
500 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
501 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
502 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
503 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
504 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
505 case GEOMOp::OpClsBringToFront: //
506 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
507 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
508 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
509 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
510 libName = "GEOMToolsGUI";
512 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
513 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
514 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
515 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
516 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
517 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
518 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
519 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
520 case GEOMOp::OpHide: // MENU VIEW - ERASE
521 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
522 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
523 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
524 case GEOMOp::OpShading: // POPUP MENU - SHADING
525 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
526 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
527 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
528 libName = "DisplayGUI";
530 case GEOMOp::OpPoint: // MENU BASIC - POINT
531 case GEOMOp::OpLine: // MENU BASIC - LINE
532 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
533 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
534 case GEOMOp::OpArc: // MENU BASIC - ARC
535 case GEOMOp::OpVector: // MENU BASIC - VECTOR
536 case GEOMOp::OpPlane: // MENU BASIC - PLANE
537 case GEOMOp::OpCurve: // MENU BASIC - CURVE
538 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
539 libName = "BasicGUI";
541 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
542 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
543 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
544 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
545 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
546 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
547 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
548 libName = "PrimitiveGUI";
550 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
551 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
552 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
553 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
554 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
555 libName = "GenerationGUI";
557 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
558 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
559 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
560 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
562 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
564 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
565 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
566 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
567 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
568 libName = "EntityGUI";
570 case GEOMOp::OpEdge: // MENU BUILD - EDGE
571 case GEOMOp::OpWire: // MENU BUILD - WIRE
572 case GEOMOp::OpFace: // MENU BUILD - FACE
573 case GEOMOp::OpShell: // MENU BUILD - SHELL
574 case GEOMOp::OpSolid: // MENU BUILD - SOLID
575 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
576 libName = "BuildGUI";
578 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
579 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
580 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
581 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
582 libName = "BooleanGUI";
584 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
585 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
586 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
587 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
588 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
589 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
590 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
591 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
592 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
593 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
594 libName = "TransformationGUI";
596 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
597 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
598 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
599 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
600 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
601 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
602 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
603 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
604 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
605 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
606 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
607 #ifdef DEBUG_CURVE_CREATOR
608 // for debug purposes, to be removed
609 case GEOMOp::OpCurveCreator: // MENU OPERATION - CURVE CREATOR
611 libName = "OperationGUI";
613 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
614 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
615 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
616 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
617 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
618 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
619 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
620 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
621 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
622 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
623 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
624 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
625 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
626 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
627 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
628 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
629 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
630 libName = "RepairGUI";
632 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
633 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
634 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
635 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
636 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
637 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
638 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
639 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
640 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
641 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
642 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
643 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
644 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
645 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
646 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
647 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
648 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
649 libName = "MeasureGUI";
651 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
652 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
653 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
654 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
655 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
656 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
657 libName = "GroupGUI";
659 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
660 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
661 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
662 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
663 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
664 libName = "BlocksGUI";
666 case GEOMOp::OpExportXAO: // MENU NEW ENTITY - IMPORTEXPORT - EXPORTXAO
667 case GEOMOp::OpImportXAO: // MENU NEW ENTITY - IMPORTEXPORT - IMPORTXAO
668 libName = "ImportExportGUI";
670 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
671 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
672 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
673 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
674 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
675 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
676 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
677 //libName = "AdvancedGUI";
680 if (myPluginActions.contains(id)) {
681 libName = myPluginActions[id].first;
683 GEOMPluginGUI* library = 0;
684 if ( !libName.isEmpty() ) {
686 libName = QString( "lib" ) + libName + ".so";
688 libName = libName + ".dll";
690 library = getPluginLibrary( libName );
693 // call method of corresponding GUI library
695 //QString action ("%1");
696 //action = action.arg(id);
698 //if( !theParam.isValid() )
699 library->OnGUIEvent( myPluginActions[id].second, desk );
701 // library->OnGUIEvent( id, desk, theParam);
704 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
706 updateCreationInfo();
712 GEOMGUI* library = 0;
713 if ( !libName.isEmpty() ) {
715 libName = QString( "lib" ) + libName + ".so";
717 libName = libName + ".dll";
719 library = getLibrary( libName );
722 // call method of corresponding GUI library
724 if( !theParam.isValid() )
725 library->OnGUIEvent( id, desk );
727 library->OnGUIEvent( id, desk, theParam);
730 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
732 updateCreationInfo();
735 //=================================================================================
736 // function : GeometryGUI::activateOperation()
738 //=================================================================================
739 bool GeometryGUI::activateOperation( int actionId )
741 OnGUIEvent(actionId);
745 //=================================================================================
746 // function : GeometryGUI::activateOperation()
748 //=================================================================================
749 bool GeometryGUI::activateOperation( const QString& actionId )
753 int id = actionId.toInt(&isOk);
760 //=================================================================================
761 // function : GeometryGUI::activateOperation()
763 //=================================================================================
764 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
768 QString pluginLib = plugin;
769 // TODO: if <plugin> is a plugin name, find plugin library name
770 if (myPluginLibs.contains(plugin))
771 pluginLib = myPluginLibs[plugin];
773 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
774 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
775 const PluginAction& anAction = actionsIter.value();
776 if (anAction.first == pluginLib && anAction.second == actionId) {
777 // activate operation
778 OnGUIEvent(actionsIter.key());
786 //=================================================================================
787 // function : GeometryGUI::OnKeyPress()
788 // purpose : Called when any key is pressed by user [static]
789 //=================================================================================
790 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
792 if ( !application() )
794 foreach ( GEOMGUI* lib, myGUIMap )
795 lib->OnKeyPress( e, application()->desktop(), w );
798 //=================================================================================
799 // function : GeometryGUI::OnMouseMove()
800 // purpose : Manages mouse move events [static]
801 //=================================================================================
802 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
804 if ( !application() )
806 foreach ( GEOMGUI* lib, myGUIMap )
807 lib->OnMouseMove( e, application()->desktop(), w );
810 //=================================================================================
811 // function : GeometryGUI::OnMouseRelease()
812 // purpose : Manages mouse release events [static]
813 //=================================================================================
814 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
816 if ( !application() )
818 foreach ( GEOMGUI* lib, myGUIMap )
819 lib->OnMouseRelease( e, application()->desktop(), w );
822 //=================================================================================
823 // function : GeometryGUI::OnMousePress()
824 // purpose : Manage mouse press events [static]
825 //=================================================================================
826 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
828 if ( !application() )
830 foreach ( GEOMGUI* lib, myGUIMap )
831 lib->OnMousePress( e, application()->desktop(), w );
834 //=======================================================================
835 // function : createGeomAction
837 //=======================================================================
838 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
839 const int accel, const bool toggle, const QString& shortcutAction )
841 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
842 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
843 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
845 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
847 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
848 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
850 application()->desktop(),
852 this, SLOT( OnGUIEvent() ),
856 //=======================================================================
857 // function : createOriginAndBaseVectors
859 //=======================================================================
860 void GeometryGUI::createOriginAndBaseVectors()
862 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
863 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
865 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
869 _PTR(Study) studyDS = appStudy->studyDS();
870 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
871 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
872 if ( !aBasicOperations->_is_nil() ) {
873 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
874 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
875 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
876 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
877 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
878 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
880 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
881 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
882 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
883 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
884 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
886 getApp()->updateObjectBrowser( true );
892 //=======================================================================
893 // function : GeometryGUI::initialize()
894 // purpose : Called when GEOM module is created
895 //=======================================================================
896 void GeometryGUI::initialize( CAM_Application* app )
898 SalomeApp_Module::initialize( app );
900 // ----- create actions --------------
902 createGeomAction( GEOMOp::OpImport, "IMPORT", "", Qt::ControlModifier + Qt::Key_I );
903 createGeomAction( GEOMOp::OpExport, "EXPORT", "", Qt::ControlModifier + Qt::Key_E );
905 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
907 createGeomAction( GEOMOp::OpPoint, "POINT" );
908 createGeomAction( GEOMOp::OpLine, "LINE" );
909 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
910 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
911 createGeomAction( GEOMOp::OpArc, "ARC" );
912 createGeomAction( GEOMOp::OpCurve, "CURVE" );
913 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
914 createGeomAction( GEOMOp::OpVector, "VECTOR" );
915 createGeomAction( GEOMOp::OpPlane, "PLANE" );
916 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
917 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
919 createGeomAction( GEOMOp::OpBox, "BOX" );
920 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
921 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
922 createGeomAction( GEOMOp::OpTorus, "TORUS" );
923 createGeomAction( GEOMOp::OpCone, "CONE" );
924 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
925 createGeomAction( GEOMOp::OpDisk, "DISK" );
927 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
928 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
929 createGeomAction( GEOMOp::OpFilling, "FILLING" );
930 createGeomAction( GEOMOp::OpPipe, "PIPE" );
931 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
933 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
934 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
935 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
936 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
937 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
939 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
940 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
942 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
944 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
945 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
947 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
948 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
949 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
950 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
952 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
954 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
956 createGeomAction( GEOMOp::OpEdge, "EDGE" );
957 createGeomAction( GEOMOp::OpWire, "WIRE" );
958 createGeomAction( GEOMOp::OpFace, "FACE" );
959 createGeomAction( GEOMOp::OpShell, "SHELL" );
960 createGeomAction( GEOMOp::OpSolid, "SOLID" );
961 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
963 createGeomAction( GEOMOp::OpFuse, "FUSE" );
964 createGeomAction( GEOMOp::OpCommon, "COMMON" );
965 createGeomAction( GEOMOp::OpCut, "CUT" );
966 createGeomAction( GEOMOp::OpSection, "SECTION" );
968 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
969 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
970 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
971 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
972 createGeomAction( GEOMOp::OpScale, "SCALE" );
973 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
974 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
975 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
976 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
978 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
979 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
980 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
981 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
982 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
983 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
984 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
985 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
986 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
987 #ifdef DEBUG_CURVE_CREATOR
988 // for debug purposes, to be removed
989 createGeomAction( GEOMOp::OpCurveCreator, "CURVE_CREATOR" );
991 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
992 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
994 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
995 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
996 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
998 createGeomAction( GEOMOp::OpSewing, "SEWING" );
999 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
1000 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
1001 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
1002 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
1003 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
1004 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
1005 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
1006 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
1007 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
1008 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
1009 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
1010 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1011 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1012 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1013 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1014 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1016 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1017 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1018 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1019 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1020 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1021 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1022 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1023 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1024 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1026 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1027 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1028 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1029 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1030 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1031 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1033 #ifdef _DEBUG_ // PAL16821
1034 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1037 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1038 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1039 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1040 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1041 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1042 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1043 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1044 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1045 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1046 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1047 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1048 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1049 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1050 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1051 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1052 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1053 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1054 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1055 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1056 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1057 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1058 createGeomAction( GEOMOp::OpHide, "ERASE" );
1060 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1061 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1062 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1063 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1064 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1065 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1066 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1067 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1068 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1069 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1070 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1071 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1072 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1073 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1074 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1075 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1076 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1077 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1078 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1079 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1080 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1081 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1082 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1083 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1084 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1085 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1086 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1087 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1088 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1090 // Create actions for increase/decrease transparency shortcuts
1091 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1092 "Geometry:Increase transparency");
1093 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1094 "Geometry:Decrease transparency");
1096 // Create actions for increase/decrease number of isolines
1097 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1098 "Geometry:Increase number of isolines");
1099 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1100 "Geometry:Decrease number of isolines");
1102 // Import/Export XAO
1103 createGeomAction( GEOMOp::OpExportXAO, "EXPORTXAO" );
1104 createGeomAction( GEOMOp::OpImportXAO, "IMPORTXAO" );
1106 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1107 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1108 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1109 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1110 //@@ 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 @@//
1112 // ---- create menus --------------------------
1114 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1115 createMenu( separator(), fileId, 10 );
1116 createMenu( GEOMOp::OpImport, fileId, 10 );
1117 createMenu( GEOMOp::OpExport, fileId, 10 );
1118 int impexpId = createMenu( tr( "MEN_IMPORTEXPORT" ), fileId, -1, 10 );
1119 createMenu( GEOMOp::OpExportXAO, impexpId, -1 );
1120 createMenu( GEOMOp::OpImportXAO, impexpId, -1 );
1121 createMenu( separator(), fileId, -1 );
1123 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1124 createMenu( GEOMOp::OpDelete, editId, -1 );
1126 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1128 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1129 createMenu( GEOMOp::OpPoint, basicId, -1 );
1130 createMenu( GEOMOp::OpLine, basicId, -1 );
1131 createMenu( GEOMOp::OpCircle, basicId, -1 );
1132 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1133 createMenu( GEOMOp::OpArc, basicId, -1 );
1134 createMenu( GEOMOp::OpCurve, basicId, -1 );
1135 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1136 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1137 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1138 createMenu( separator(), basicId, -1 );
1139 createMenu( GEOMOp::OpVector, basicId, -1 );
1140 createMenu( GEOMOp::OpPlane, basicId, -1 );
1141 createMenu( GEOMOp::OpLCS, basicId, -1 );
1142 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1144 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1145 createMenu( GEOMOp::OpBox, primId, -1 );
1146 createMenu( GEOMOp::OpCylinder, primId, -1 );
1147 createMenu( GEOMOp::OpSphere, primId, -1 );
1148 createMenu( GEOMOp::OpTorus, primId, -1 );
1149 createMenu( GEOMOp::OpCone, primId, -1 );
1150 createMenu( GEOMOp::OpRectangle, primId, -1 );
1151 createMenu( GEOMOp::OpDisk, primId, -1 );
1152 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1154 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1155 createMenu( GEOMOp::OpPrism, genId, -1 );
1156 createMenu( GEOMOp::OpRevolution, genId, -1 );
1157 createMenu( GEOMOp::OpFilling, genId, -1 );
1158 createMenu( GEOMOp::OpPipe, genId, -1 );
1159 #if OCC_VERSION_LARGE > 0x06050300
1160 createMenu( GEOMOp::OpPipePath, genId, -1 );
1163 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1164 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1165 //@@ 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 @@//
1167 createMenu( separator(), newEntId, -1 );
1169 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1170 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1171 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1172 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1173 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1174 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1176 createMenu( separator(), newEntId, -1 );
1178 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1179 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1180 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1182 createMenu( separator(), newEntId, -1 );
1184 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1185 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1186 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1187 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1188 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1190 createMenu( separator(), newEntId, -1 );
1192 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1194 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1195 createMenu( GEOMOp::OpEdge, buildId, -1 );
1196 createMenu( GEOMOp::OpWire, buildId, -1 );
1197 createMenu( GEOMOp::OpFace, buildId, -1 );
1198 createMenu( GEOMOp::OpShell, buildId, -1 );
1199 createMenu( GEOMOp::OpSolid, buildId, -1 );
1200 createMenu( GEOMOp::OpCompound, buildId, -1 );
1202 createMenu( separator(), newEntId, -1 );
1204 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1206 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1209 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1211 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1212 createMenu( GEOMOp::OpFuse, boolId, -1 );
1213 createMenu( GEOMOp::OpCommon, boolId, -1 );
1214 createMenu( GEOMOp::OpCut, boolId, -1 );
1215 createMenu( GEOMOp::OpSection, boolId, -1 );
1217 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1218 createMenu( GEOMOp::OpTranslate, transId, -1 );
1219 createMenu( GEOMOp::OpRotate, transId, -1 );
1220 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1221 createMenu( GEOMOp::OpMirror, transId, -1 );
1222 createMenu( GEOMOp::OpScale, transId, -1 );
1223 createMenu( GEOMOp::OpOffset, transId, -1 );
1224 createMenu( GEOMOp::OpProjection, transId, -1 );
1225 createMenu( separator(), transId, -1 );
1226 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1227 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1229 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1230 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1231 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1232 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1234 createMenu( separator(), operId, -1 );
1236 createMenu( GEOMOp::OpPartition, operId, -1 );
1237 createMenu( GEOMOp::OpArchimede, operId, -1 );
1238 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1239 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1241 createMenu( separator(), operId, -1 );
1243 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1244 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1245 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1246 createMenu( GEOMOp::OpChamfer, operId, -1 );
1247 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1248 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1249 #ifdef DEBUG_CURVE_CREATOR
1250 // for debug purposes, to be removed
1251 createMenu( separator(), operId, -1 );
1252 createMenu( GEOMOp::OpCurveCreator, operId, -1 );
1254 //createMenu( GEOMOp::OpClipping, operId, -1 );
1256 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1257 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1258 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1259 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1260 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1261 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1262 createMenu( GEOMOp::OpSewing, repairId, -1 );
1263 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1264 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1265 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1266 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1267 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1268 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1269 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1270 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1271 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1272 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1273 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1275 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1276 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1277 createMenu( GEOMOp::OpProperties, measurId, -1 );
1278 createMenu( separator(), measurId, -1 );
1279 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1280 createMenu( GEOMOp::OpInertia, measurId, -1 );
1281 createMenu( GEOMOp::OpNormale, measurId, -1 );
1282 createMenu( separator(), measurId, -1 );
1283 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1284 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1285 createMenu( separator(), measurId, -1 );
1287 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1288 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1289 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1290 createMenu( GEOMOp::OpAngle, dimId, -1 );
1291 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1293 createMenu( separator(), measurId, -1 );
1294 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1295 createMenu( separator(), measurId, -1 );
1296 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1297 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1298 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1299 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1300 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1302 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1303 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1304 createMenu( separator(), toolsId, -1 );
1305 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1308 createMenu( separator(), toolsId, -1 );
1309 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1310 createMenu( separator(), toolsId, -1 );
1312 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1313 createMenu( separator(), viewId, -1 );
1315 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1316 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1317 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1318 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1319 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1320 createMenu( separator(), dispmodeId, -1 );
1321 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1323 createMenu( separator(), viewId, -1 );
1324 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1325 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1326 createMenu( separator(), viewId, -1 );
1327 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1328 createMenu( separator(), viewId, -1 );
1332 because of these items are accessible through object browser and viewers
1333 we have removed they from main menu
1335 createMenu( GEOMOp::OpShow, viewId, -1 );
1336 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1337 createMenu( GEOMOp::OpHide, viewId, -1 );
1340 // ---- create toolbars --------------------------
1342 int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1343 createTool( GEOMOp::OpPoint, basicTbId );
1344 createTool( GEOMOp::OpLine, basicTbId );
1345 createTool( GEOMOp::OpCircle, basicTbId );
1346 createTool( GEOMOp::OpEllipse, basicTbId );
1347 createTool( GEOMOp::OpArc, basicTbId );
1348 createTool( GEOMOp::OpCurve, basicTbId );
1349 createTool( GEOMOp::OpVector, basicTbId );
1350 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1351 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1352 createTool( GEOMOp::OpIsoline, basicTbId );
1353 createTool( GEOMOp::OpPlane, basicTbId );
1354 createTool( GEOMOp::OpLCS, basicTbId );
1355 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1357 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ) );
1358 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1359 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1361 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1362 createTool( GEOMOp::OpBox, primTbId );
1363 createTool( GEOMOp::OpCylinder, primTbId );
1364 createTool( GEOMOp::OpSphere, primTbId );
1365 createTool( GEOMOp::OpTorus, primTbId );
1366 createTool( GEOMOp::OpCone, primTbId );
1367 createTool( GEOMOp::OpRectangle, primTbId );
1368 createTool( GEOMOp::OpDisk, primTbId );
1369 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1371 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ) );
1372 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1373 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1375 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1376 createTool( GEOMOp::OpFuse, boolTbId );
1377 createTool( GEOMOp::OpCommon, boolTbId );
1378 createTool( GEOMOp::OpCut, boolTbId );
1379 createTool( GEOMOp::OpSection, boolTbId );
1381 int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1382 createTool( GEOMOp::OpPrism, genTbId );
1383 createTool( GEOMOp::OpRevolution, genTbId );
1384 createTool( GEOMOp::OpFilling, genTbId );
1385 createTool( GEOMOp::OpPipe, genTbId );
1386 #if OCC_VERSION_LARGE > 0x06050300
1387 createTool( GEOMOp::OpPipePath, genTbId );
1390 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1391 createTool( GEOMOp::OpTranslate, transTbId );
1392 createTool( GEOMOp::OpRotate, transTbId );
1393 createTool( GEOMOp::OpChangeLoc, transTbId );
1394 createTool( GEOMOp::OpMirror, transTbId );
1395 createTool( GEOMOp::OpScale, transTbId );
1396 createTool( GEOMOp::OpOffset, transTbId );
1397 createTool( GEOMOp::OpProjection, transTbId );
1398 createTool( separator(), transTbId );
1399 createTool( GEOMOp::OpMultiTranslate, transTbId );
1400 createTool( GEOMOp::OpMultiRotate, transTbId );
1402 int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1403 createTool( GEOMOp::OpExplode, operTbId );
1404 createTool( GEOMOp::OpPartition, operTbId );
1405 createTool( GEOMOp::OpArchimede, operTbId );
1406 createTool( GEOMOp::OpShapesOnShape, operTbId );
1407 createTool( GEOMOp::OpSharedShapes, operTbId );
1409 int featTbId = createTool( tr( "TOOL_FEATURES" ) );
1410 createTool( GEOMOp::OpFillet1d, featTbId );
1411 createTool( GEOMOp::OpFillet2d, featTbId );
1412 createTool( GEOMOp::OpFillet3d, featTbId );
1413 createTool( GEOMOp::OpChamfer, featTbId );
1414 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1415 createTool( GEOMOp::OpExtrudedCut, featTbId );
1416 #ifdef DEBUG_CURVE_CREATOR
1417 // for debug purposes, to be removed
1418 createTool( GEOMOp::OpCurveCreator, featTbId );
1421 int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1422 createTool( GEOMOp::OpEdge, buildTbId );
1423 createTool( GEOMOp::OpWire, buildTbId );
1424 createTool( GEOMOp::OpFace, buildTbId );
1425 createTool( GEOMOp::OpShell, buildTbId );
1426 createTool( GEOMOp::OpSolid, buildTbId );
1427 createTool( GEOMOp::OpCompound, buildTbId );
1429 int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1430 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1431 createTool( GEOMOp::OpProperties, measureTbId );
1432 createTool( GEOMOp::OpCenterMass, measureTbId );
1433 createTool( GEOMOp::OpInertia, measureTbId );
1434 createTool( GEOMOp::OpNormale, measureTbId );
1435 createTool( separator(), measureTbId );
1436 createTool( GEOMOp::OpBoundingBox, measureTbId );
1437 createTool( GEOMOp::OpMinDistance, measureTbId );
1438 createTool( GEOMOp::OpAngle, measureTbId );
1439 createTool( GEOMOp::OpTolerance , measureTbId );
1440 createTool( separator(), measureTbId );
1441 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1442 createTool( GEOMOp::OpFreeFaces, measureTbId );
1443 createTool( separator(), measureTbId );
1444 createTool( GEOMOp::OpWhatIs, measureTbId );
1445 createTool( GEOMOp::OpCheckShape, measureTbId );
1446 createTool( GEOMOp::OpCheckCompound, measureTbId );
1447 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1448 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1450 int picturesTbId = createTool( tr( "TOOL_PICTURES" ) );
1451 createTool( GEOMOp::OpPictureImport, picturesTbId );
1453 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1456 int impexpTbId = createTool( tr( "TOOL_IMPORTEXPORT" ) );
1457 createTool( GEOMOp::OpExportXAO, impexpTbId );
1458 createTool( GEOMOp::OpImportXAO, impexpTbId );
1460 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1461 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1462 //@@ 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 @@//
1464 // ---- create popup menus --------------------------
1466 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1467 QString clientOCC = "(client='OCCViewer')";
1468 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1469 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1471 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1472 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1473 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1474 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1476 QString autoColorPrefix =
1477 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1479 QtxPopupMgr* mgr = popupMgr();
1481 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1482 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1483 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1484 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1485 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1486 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1487 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1488 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1490 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1491 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1492 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1493 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1494 mgr->insert( separator(), -1, -1 ); // -----------
1496 #if OCC_VERSION_LARGE > 0x06050200
1497 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1498 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1499 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1500 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1501 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1502 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1503 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1505 mgr->insert( separator(), -1, -1 ); // -----------
1506 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1507 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1508 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1509 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1510 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1511 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1512 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1513 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1514 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1515 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1516 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1517 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1518 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1519 mgr->insert( separator(), dispmodeId, -1 );
1520 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1521 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1522 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1523 mgr->insert( separator(), -1, -1 ); // -----------
1525 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1526 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1527 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1528 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1529 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1530 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1531 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1532 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1533 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1534 //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1535 mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1537 // material properties
1538 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1539 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1542 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1543 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1545 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1546 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1547 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1549 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1550 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1552 mgr->insert( separator(), -1, -1 ); // -----------
1553 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1554 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1555 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1556 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1557 mgr->insert( separator(), -1, -1 ); // -----------
1559 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1560 onlyComponent = "((type='Component') and selcount=1)",
1561 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1562 types = "'Shape' 'Group' 'FieldStep'";
1564 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1565 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1567 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1568 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1570 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1571 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1573 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1575 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1576 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1577 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1578 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1579 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1580 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1581 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1582 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1583 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1584 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1585 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1586 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1587 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1588 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1589 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1590 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1591 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1592 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1593 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1594 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1595 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1596 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1597 mgr->insert( separator(), selectonlyId, -1);
1598 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1599 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1600 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1601 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1602 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1603 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1604 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1606 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1608 mgr->insert( separator(), -1, -1 ); // -----------
1609 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1610 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1611 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1612 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1614 mgr->insert( separator(), -1, -1 ); // -----------
1615 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1616 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1618 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1619 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1621 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1622 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1624 mgr->insert( separator(), -1, -1 ); // -----------
1625 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1626 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1628 mgr->insert( separator(), -1, -1 ); // -----------
1629 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1630 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1632 mgr->insert( separator(), -1, -1 ); // -----------
1633 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1634 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1636 mgr->insert( separator(), -1, -1 ); // -----------
1637 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1638 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1640 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1642 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1644 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1645 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1646 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1649 // create plugin actions and menus
1653 //=======================================================================
1654 // function : GeometryGUI::addPluginActions()
1656 //=======================================================================
1657 void GeometryGUI::addPluginActions()
1660 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1661 if (!resMgr) return;
1663 // Find names of a resource XML files ("GEOMActions.xml" and others);
1665 char* cenv = getenv("GEOM_PluginsList");
1667 PluginsXml.sprintf("%s", cenv);
1669 QStringList PluginsXmlList = PluginsXml.split(":", QString::SkipEmptyParts);
1670 if (PluginsXmlList.count() == 0) return;
1672 // get full names of xml files from PluginsXmlList
1673 QStringList xmlFiles;
1674 xmlFiles.append(QDir::home().filePath("CustomGeomPlugins.xml")); // may be inexistent
1675 for (int i = 0; i < PluginsXmlList.count(); i++) {
1676 PluginsXml = PluginsXmlList[ i ];
1678 // Find full path to the resource XML file
1679 QString xmlFile = resMgr->path("resources", "GEOM", PluginsXml + ".xml");
1680 if ( xmlFile.isEmpty() ) // try PLUGIN resources
1681 xmlFile = resMgr->path("resources", PluginsXml, PluginsXml + ".xml");
1682 if ( !xmlFile.isEmpty() )
1683 xmlFiles.append( xmlFile );
1686 // create "Advanced Operations" menu and corresponding toolbar
1687 //int advancedMenuId = createMenu(tr("MEN_ADVANCED"), -1, -1, 10);
1688 //int advancedTbarId = createTool(tr("TOOL_ADVANCED"));
1689 int id = GEOMOp::OpLastOperationID; // TODO?
1692 QString aNoAccessFiles;
1693 for (int i = 0; i < xmlFiles.count(); i++) {
1694 QString xmlFile = xmlFiles[ i ];
1696 QFile file (xmlFile);
1697 if (file.exists() && file.open(QIODevice::ReadOnly)) {
1700 GEOMGUI_XmlHandler* aXmlHandler = new GEOMGUI_XmlHandler();
1701 ASSERT(aXmlHandler);
1703 QXmlInputSource source (&file);
1704 QXmlSimpleReader reader;
1705 reader.setContentHandler(aXmlHandler);
1706 reader.setErrorHandler(aXmlHandler);
1707 bool ok = reader.parse(source);
1711 // bind action lib and label to its ID for activateOperation() method proper work
1712 myPluginLibs[aXmlHandler->myPluginData.myName] = aXmlHandler->myPluginData.myClientLib;
1714 QListIterator<GEOMGUI_ActionData> anActionsIter (aXmlHandler->myPluginData.myListOfActions);
1715 while (anActionsIter.hasNext()) {
1716 GEOMGUI_ActionData anActionData = anActionsIter.next();
1718 //QPixmap icon = resMgr->loadPixmap("GEOM", tr(anActionData.myIcon.toLatin1().constData()));
1719 QPixmap icon = resMgr->loadPixmap(aXmlHandler->myPluginData.myName,
1720 anActionData.myIcon.toLatin1().constData());
1722 // path to action in menu
1723 QStringList smenus = anActionData.myMenu.split( "/" );
1724 QString actionName = smenus.last();
1725 actionName = actionName.toUpper().prepend("MEN_");
1726 smenus.removeLast();
1728 // path to action in toolbar
1729 QStringList stools = anActionData.myTooltip.split( "/" );
1730 QString actionTool = stools.last();
1731 actionTool = actionTool.toUpper().prepend("TOP_");
1732 stools.removeLast();
1734 QString actionStat = anActionData.myStatusBar;
1735 actionStat = actionStat.toUpper().prepend("STB_");
1737 createAction(id, // ~ anActionData.myLabel
1738 tr(actionTool.toLatin1().constData()),
1740 tr(actionName.toLatin1().constData()),
1741 tr(actionStat.toLatin1().constData()),
1743 application()->desktop(),
1745 this, SLOT(OnGUIEvent()),
1746 QString() /*shortcutAction*/);
1749 foreach (QString subMenu, smenus) {
1750 subMenu = subMenu.toUpper().prepend("MEN_");
1751 menuId = createMenu(tr(subMenu.toLatin1().constData()), menuId, -1);
1753 //createMenu(id, pluginMenuId, -1);
1754 createMenu(id, menuId, -1);
1756 QString subTool = stools[0];
1757 subTool = subTool.toUpper().prepend("TOOL_");
1758 int toolId = createTool(tr(subTool.toLatin1().constData()));
1759 //createTool(id, advancedTbarId);
1760 createTool(id, toolId);
1762 // add action id to map
1763 PluginAction anAction (aXmlHandler->myPluginData.myClientLib, anActionData.myLabel);
1764 myPluginActions[id] = anAction;
1770 SUIT_MessageBox::critical(application()->desktop(),
1771 tr("INF_PARSE_ERROR"),
1772 tr(aXmlHandler->errorProtocol().toLatin1().data()));
1776 else if ( i > 0 ) { // 1st is ~/CustomGeomPlugins.xml
1777 if (aNoAccessFiles.isEmpty())
1778 aNoAccessFiles = xmlFile;
1780 aNoAccessFiles += ", " + xmlFile;
1782 } // end loop on xmlFiles
1784 if (!aNoAccessFiles.isEmpty()) {
1785 QString aMess = QObject::tr("PLUGIN_FILE_CANT_OPEN") + " " + aNoAccessFiles + "\n";
1786 aMess += QObject::tr("PLUGIN_FILE_CHECK_VARIABLE");
1787 SUIT_MessageBox::warning(application()->desktop(), tr("GEOM_WRN_WARNING"), aMess);
1791 //=======================================================================
1792 // function : GeometryGUI::activateModule()
1793 // purpose : Called when GEOM module is activated
1794 //=======================================================================
1795 bool GeometryGUI::activateModule( SUIT_Study* study )
1797 if ( CORBA::is_nil( myComponentGeom ) )
1800 bool res = SalomeApp_Module::activateModule( study );
1804 setMenuShown( true );
1805 setToolShown( true );
1807 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1808 PyGILState_STATE gstate = PyGILState_Ensure();
1809 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1810 if ( !pluginsmanager ) {
1814 PyObjWrapper result =
1815 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1816 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1817 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1821 PyGILState_Release(gstate);
1822 // end of GEOM plugins loading
1824 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1825 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1827 // Reset actions accelerator keys
1828 action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1829 action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1830 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1832 GUIMap::Iterator it;
1833 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1834 it.value()->activate( application()->desktop() );
1836 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1838 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1839 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1840 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1842 if ( !myCreationInfoWdg )
1843 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1844 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1845 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1848 SALOME_ListIO selected;
1849 sm->selectedObjects( selected );
1850 sm->clearSelected();
1852 SUIT_ViewManager* vm;
1853 ViewManagerList OCCViewManagers, VTKViewManagers;
1855 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1856 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1857 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1858 onViewManagerAdded(vm);
1860 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1861 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1862 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1863 onViewManagerAdded(vm);
1865 sm->setSelectedObjects( selected, true ); //NPAL 19674
1867 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1869 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1871 // 0020836 (Basic vectors and origin)
1872 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1873 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1874 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1876 _PTR(Study) studyDS = appStudy->studyDS();
1878 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1879 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1880 createOriginAndBaseVectors();
1888 //=======================================================================
1889 // function : GeometryGUI::deactivateModule()
1890 // purpose : Called when GEOM module is deactivated
1891 //=======================================================================
1892 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1894 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1896 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1898 setMenuShown( false );
1899 setToolShown( false );
1901 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1902 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1904 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1906 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1907 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1908 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1909 myCreationInfoWdg = 0;
1911 EmitSignalCloseAllDialogs();
1913 GUIMap::Iterator it;
1914 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1915 it.value()->deactivate();
1917 // Unset actions accelerator keys
1918 action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1919 action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1920 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1922 qDeleteAll(myOCCSelectors);
1923 myOCCSelectors.clear();
1924 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1926 qDeleteAll(myVTKSelectors);
1927 myVTKSelectors.clear();
1928 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1930 return SalomeApp_Module::deactivateModule( study );
1933 //=======================================================================
1934 // function : onWindowActivated()
1935 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1936 //=======================================================================
1937 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1942 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1943 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1945 // disable non-OCC viewframe menu commands
1946 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1947 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1948 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1949 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1950 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1951 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1952 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1954 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1955 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1956 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1957 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1959 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1962 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1964 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1965 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
1966 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1967 if ( myCreationInfoWdg )
1968 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1971 void GeometryGUI::viewManagers( QStringList& lst ) const
1973 lst.append( OCCViewer_Viewer::Type() );
1976 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1978 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1980 qDebug( "connect" );
1981 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1982 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1983 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1984 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1985 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1986 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1987 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1988 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1990 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1991 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1993 // disable OCC selectors
1994 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1995 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1996 while ( itOCCSel.hasNext() )
1997 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1998 sr->setEnabled(true);
2000 else if ( vm->getType() == SVTK_Viewer::Type() )
2002 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2003 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
2005 // disable VTK selectors
2006 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
2007 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2008 while ( itVTKSel.hasNext() )
2009 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2010 sr->setEnabled(true);
2014 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
2016 SUIT_ViewModel* viewer = vm->getViewModel();
2017 if ( vm->getType() == OCCViewer_Viewer::Type() )
2019 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2020 while ( itOCCSel.hasNext() )
2021 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2022 if ( sr->viewer() == viewer )
2024 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
2028 if ( vm->getType() == SVTK_Viewer::Type() )
2030 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2031 while ( itVTKSel.hasNext() )
2032 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2033 if ( sr->viewer() == viewer )
2035 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2041 //================================================================================
2043 * \brief Slot called when selection changed. Shows creation info of a selected object
2045 //================================================================================
2047 void GeometryGUI::updateCreationInfo()
2049 if ( myCreationInfoWdg )
2050 myCreationInfoWdg->clear();
2052 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2053 // if ( !myCreationInfoWdg->isVisible() )
2056 // look for a sole selected GEOM_Object
2057 GEOM::GEOM_BaseObject_var geomObj;
2059 SALOME_ListIO selected;
2060 getApp()->selectionMgr()->selectedObjects( selected );
2062 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2063 SALOME_ListIteratorOfListIO selIt( selected );
2064 for ( ; selIt.More(); selIt.Next() )
2066 Handle(SALOME_InteractiveObject) io = selIt.Value();
2067 if ( !io->hasEntry() ) continue;
2068 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2069 if ( !sobj ) continue;
2070 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2071 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2072 if ( !gobj->_is_nil() )
2074 if ( !geomObj->_is_nil() )
2075 return; // several GEOM objects selected
2079 if ( geomObj->_is_nil() ) return;
2081 // pass creation info of geomObj to myCreationInfoWdg
2083 if ( myCreationInfoWdg ) {
2085 QString operationName;
2086 myCreationInfoWdg->setOperation( icon, operationName );
2090 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2092 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2093 QString name = info->operationName.in();
2094 if ( !name.isEmpty() ) {
2095 icon = resMgr->loadPixmap( "GEOM", tr( ("ICO_"+name).toLatin1().constData() ), false );
2096 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2097 if ( operationName.startsWith( "MEN_" ))
2098 operationName = name; // no translation
2099 myCreationInfoWdg->setOperation( icon, operationName );
2101 for ( size_t i = 0; i < info->params.length(); ++i )
2102 myCreationInfoWdg->addParam( info->params[i].name.in(),
2103 info->params[i].value.in() );
2112 void GeometryGUI::onAutoBringToFront()
2114 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front" );
2115 if( !isAutoBringToFront )
2118 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2119 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2122 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2123 if (!appStudy) return;
2125 GEOM_Displayer displayer( appStudy );
2127 SALOME_View* window = displayer.GetActiveView();
2128 if ( !window ) return;
2130 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2132 SALOME_ListIO selected;
2133 getApp()->selectionMgr()->selectedObjects( selected );
2134 if (!myTopLevelIOList.IsEmpty())
2136 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2138 Handle( SALOME_InteractiveObject ) io = It.Value();
2139 bool isSelected = false;
2140 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2142 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2143 if( io->isSame( sel_io ) )
2146 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2148 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2149 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2154 myTopLevelIOList.Assign(selected);
2155 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2157 Handle( SALOME_InteractiveObject ) io = It.Value();
2158 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2159 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2162 displayer.UpdateViewer();
2163 GeometryGUI::Modified();
2166 void GeometryGUI::updateFieldColorScale()
2168 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2170 GEOM_Displayer aDisplayer( aStudy );
2171 aDisplayer.UpdateColorScale();
2175 QString GeometryGUI::engineIOR() const
2177 if ( !CORBA::is_nil( GetGeomGen() ) )
2178 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2182 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2183 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2185 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
2187 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2189 theWidth = theHeight = 0;
2191 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2192 Handle(TColStd_HArray1OfByte) aTexture;
2194 Handle(Graphic3d_HArray1OfBytes) aTexture;
2198 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2199 aTexture = aTextureMap[ theId ];
2200 if ( aTexture.IsNull() ) {
2201 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2202 if ( !aInsOp->_is_nil() ) {
2203 CORBA::Long aWidth, aHeight;
2204 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2205 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2207 theHeight = aHeight;
2209 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2210 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2212 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
2215 for (int i = 0; i < aStream->length(); i++)
2216 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2217 aTextureMap[ theId ] = aTexture;
2225 LightApp_Selection* GeometryGUI::createSelection() const
2227 return new GEOMGUI_Selection();
2230 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2232 SalomeApp_Module::contextMenuPopup( client, menu, title );
2234 getApp()->selectionMgr()->selectedObjects( lst );
2236 //Add submenu for predefined materials
2237 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2238 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2239 QtxPopupMgr* mgr = popupMgr();
2240 //get parrent for submenu
2241 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2243 QMenu* oldMenu = act->menu() ;
2248 QMenu* matMenu = new QMenu();
2249 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2251 //Get current material model for the object
2253 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2254 if ( anApp && anApp->activeViewManager() ) {
2255 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2257 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2260 QString curModel = "";
2261 if ( v.canConvert<QString>() ) curModel = v.toString();
2262 // get list of all predefined materials
2263 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2265 foreach ( QString material, materials )
2267 QAction* menAct = matMenu->addAction( material );
2268 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2269 signalMapper->setMapping( menAct, material );
2270 menAct->setCheckable( true );
2271 // Set checked if this material is current
2272 Material_Model aModel;
2273 aModel.fromResources( material );
2274 if ( !found && aModel.toProperties() == curModel ) {
2275 menAct->setChecked( true );
2279 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2280 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2281 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2282 this, SLOT( OnSetMaterial( const QString & ) ) );
2283 act->setMenu( matMenu );
2287 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2288 Handle(SALOME_InteractiveObject) io = lst.First();
2289 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2290 _PTR(Study) study = appStudy->studyDS();
2291 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2293 QString aName = QString( obj->GetName().c_str() );
2294 aName.remove( QRegExp("\\s+$") );
2300 void GeometryGUI::OnSetMaterial(const QString& theName)
2302 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2306 void GeometryGUI::createPreferences()
2308 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2310 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2311 setPreferenceProperty( genGroup, "columns", 2 );
2313 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2314 LightApp_Preferences::Selector,
2315 "Geometry", "display_mode" );
2317 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2318 LightApp_Preferences::Color, "Geometry", "shading_color" );
2320 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2321 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2323 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2324 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2326 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2327 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2329 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2330 LightApp_Preferences::Color, "Geometry", "line_color" );
2332 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2333 LightApp_Preferences::Color, "Geometry", "point_color" );
2335 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2336 LightApp_Preferences::Color, "Geometry", "isos_color" );
2338 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2339 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2341 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2342 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2344 int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
2345 LightApp_Preferences::IntSpin, "Geometry", "transparency" );
2347 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2348 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2350 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2351 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2353 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2354 LightApp_Preferences::Selector,
2355 "Geometry", "material" );
2357 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2358 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2364 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2365 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2367 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2368 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2370 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2371 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2373 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2374 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2376 for (int i = 0; i < nb; i++) {
2377 setPreferenceProperty( wd[i], "min", 1 );
2378 setPreferenceProperty( wd[i], "max", 5 );
2381 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2382 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2384 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2385 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2387 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2388 setPreferenceProperty( aDimGroupId, "columns", 2 );
2390 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2391 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2393 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2394 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2396 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2397 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2399 int aDimFontHeightId = addPreference( tr( "PREF_DIMENSIONS_FONT_HEIGHT" ), aDimGroupId,
2400 LightApp_Preferences::DblSpin, "Geometry", "dimensions_font_height" );
2402 setPreferenceProperty( aDimFontHeightId, "min", 1e-9 );
2403 setPreferenceProperty( aDimFontHeightId, "max", 1e+9 );
2404 setPreferenceProperty( aDimFontHeightId, "precision", 9 );
2406 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2407 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2409 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2410 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2411 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2413 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2414 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2416 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2417 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2419 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2420 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2422 QStringList aListOfLengthUnits;
2423 aListOfLengthUnits << "m";
2424 aListOfLengthUnits << "cm";
2425 aListOfLengthUnits << "mm";
2426 aListOfLengthUnits << "in.";
2427 aListOfLengthUnits << "ft.";
2429 QStringList aListOfAngUnits;
2430 aListOfAngUnits << "rad";
2431 aListOfAngUnits << "deg";
2433 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2434 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2436 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2437 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2439 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2440 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2441 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2443 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2444 setPreferenceProperty( isoGroup, "columns", 2 );
2445 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2446 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2447 setPreferenceProperty( isoU, "min", 0 );
2448 setPreferenceProperty( isoU, "max", 100000 );
2449 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2450 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2451 setPreferenceProperty( isoV, "min", 0 );
2452 setPreferenceProperty( isoV, "max", 100000 );
2454 // Quantities with individual precision settings
2455 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2456 setPreferenceProperty( precGroup, "columns", 2 );
2458 const int nbQuantities = 8;
2459 int prec[nbQuantities], ii = 0;
2460 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2461 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2462 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2463 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2464 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2465 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2466 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2467 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2468 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2469 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2470 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2471 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2472 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2473 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2474 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2475 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2477 // Set property for precision value for spinboxes
2478 for ( ii = 0; ii < nbQuantities; ii++ ){
2479 setPreferenceProperty( prec[ii], "min", -14 );
2480 setPreferenceProperty( prec[ii], "max", 14 );
2481 setPreferenceProperty( prec[ii], "precision", 2 );
2484 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2485 setPreferenceProperty( VertexGroup, "columns", 2 );
2487 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2488 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2490 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2491 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2493 // Set property for default display mode
2494 QStringList aModesList;
2495 aModesList.append( tr("MEN_WIREFRAME") );
2496 aModesList.append( tr("MEN_SHADING") );
2497 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2498 aModesList.append( tr("MEN_TEXTURE") );
2500 QList<QVariant> anIndexesList;
2501 anIndexesList.append(0);
2502 anIndexesList.append(1);
2503 anIndexesList.append(2);
2504 anIndexesList.append(3);
2506 setPreferenceProperty( dispmode, "strings", aModesList );
2507 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2509 // Set property for top level display mode
2510 QStringList aTopModesList;
2511 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2512 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2513 aTopModesList.append( tr("MEN_WIREFRAME") );
2514 aTopModesList.append( tr("MEN_SHADING") );
2515 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2517 QList<QVariant> aTopIndexesList;
2518 aTopIndexesList.append(0);
2519 aTopIndexesList.append(1);
2520 aTopIndexesList.append(2);
2521 aTopIndexesList.append(3);
2522 aTopIndexesList.append(4);
2524 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2525 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2527 // Set property for step value for spinboxes
2528 setPreferenceProperty( step, "min", 1 );
2529 setPreferenceProperty( step, "max", 10000 );
2530 setPreferenceProperty( step, "precision", 3 );
2532 // Set property for trandparency value for spinboxes
2533 setPreferenceProperty( transparency, "min", 0 );
2534 setPreferenceProperty( transparency, "max", 100 );
2536 // Set property for deflection value for spinboxes
2537 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2538 setPreferenceProperty( defl, "max", 1.0 );
2539 setPreferenceProperty( defl, "step", 1.0e-04 );
2540 setPreferenceProperty( defl, "precision", 6 );
2542 // Set property for default material
2543 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2545 // Set property vertex marker type
2546 QList<QVariant> aMarkerTypeIndicesList;
2547 QList<QVariant> aMarkerTypeIconsList;
2549 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2550 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2551 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2552 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2553 aMarkerTypeIndicesList << (i-1);
2554 aMarkerTypeIconsList << pixmap;
2557 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2558 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2560 // Set property for vertex marker scale
2561 QList<QVariant> aMarkerScaleIndicesList;
2562 QStringList aMarkerScaleValuesList;
2564 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2565 aMarkerScaleIndicesList << iii;
2566 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2569 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2570 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2572 // Scalar bar for field step presentation
2573 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2574 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2576 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2577 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2578 setPreferenceProperty( sbXPosition, "min", 0 );
2579 setPreferenceProperty( sbXPosition, "max", 1 );
2580 setPreferenceProperty( sbXPosition, "step", 0.05 );
2582 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2583 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2584 setPreferenceProperty( sbYPosition, "min", 0 );
2585 setPreferenceProperty( sbYPosition, "max", 1 );
2586 setPreferenceProperty( sbYPosition, "step", 0.05 );
2588 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2589 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2590 setPreferenceProperty( sbWidth, "min", 0 );
2591 setPreferenceProperty( sbWidth, "max", 1 );
2592 setPreferenceProperty( sbWidth, "step", 0.05 );
2594 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2595 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2596 setPreferenceProperty( sbHeight, "min", 0 );
2597 setPreferenceProperty( sbHeight, "max", 1 );
2598 setPreferenceProperty( sbHeight, "step", 0.05 );
2600 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2601 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2602 setPreferenceProperty( sbTextHeight, "min", 6 );
2603 setPreferenceProperty( sbTextHeight, "max", 24 );
2604 setPreferenceProperty( sbTextHeight, "step", 1 );
2606 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2607 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2608 setPreferenceProperty( sbNbIntervals, "min", 2 );
2609 setPreferenceProperty( sbNbIntervals, "max", 64 );
2610 setPreferenceProperty( sbNbIntervals, "step", 1 );
2612 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2613 setPreferenceProperty( originGroup, "columns", 2 );
2615 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2616 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2617 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2618 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2620 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2621 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2623 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2624 setPreferenceProperty( operationsGroup, "columns", 2 );
2626 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2627 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2629 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2631 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2633 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2634 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2636 QStringList aHierarchyTypeList;
2637 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2638 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2639 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2641 QList<QVariant> aHierarchyTypeIndexesList;
2642 aHierarchyTypeIndexesList.append(0);
2643 aHierarchyTypeIndexesList.append(1);
2644 aHierarchyTypeIndexesList.append(2);
2646 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2647 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2649 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2650 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2652 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2654 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2655 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2657 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2658 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2659 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2660 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2661 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2662 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2663 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2664 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2666 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2667 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2668 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2669 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2670 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2671 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2678 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2680 if (section == "Geometry") {
2681 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2682 if (param == QString("SettingsGeomStep")) {
2683 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2684 EmitSignalDefaultStepValueChanged(spin_step);
2686 else if (param == QString("toplevel_color")) {
2687 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2688 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2690 else if (param == QString("toplevel_dm")) {
2691 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2693 else if (param == QString("scalar_bar_x_position") ||
2694 param == QString("scalar_bar_y_position") ||
2695 param == QString("scalar_bar_width") ||
2696 param == QString("scalar_bar_height") ||
2697 param == QString("scalar_bar_text_height") ||
2698 param == QString("scalar_bar_nb_intervals")) {
2699 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2701 GEOM_Displayer aDisplayer( aStudy );
2702 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2703 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2706 else if ( param == QString("dimensions_color") ||
2707 param == QString("dimensions_line_width") ||
2708 param == QString("dimensions_font_height") ||
2709 param == QString("dimensions_arrow_length") ||
2710 param == QString("dimensions_show_units") ||
2711 param == QString("dimensions_length_units") ||
2712 param == QString("dimensions_angle_units") )
2714 SalomeApp_Application* anApp = getApp();
2720 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2726 GEOM_Displayer aDisplayer( aStudy );
2728 ViewManagerList aVMs;
2729 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2730 ViewManagerList::Iterator anIt = aVMs.begin();
2731 for ( ; anIt != aVMs.end(); ++anIt )
2733 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2739 SALOME_ListIO aVisible;
2740 aViewer->GetVisible( aVisible );
2741 aDisplayer.Redisplay( aVisible, false, aViewer );
2744 aDisplayer.UpdateViewer();
2746 else if ( param.startsWith( "dependency_tree") )
2747 emit SignalDependencyTreeParamChanged( section, param );
2751 LightApp_Displayer* GeometryGUI::displayer()
2754 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2758 void GeometryGUI::setLocalSelectionMode(const int mode)
2760 myLocalSelectionMode = mode;
2763 int GeometryGUI::getLocalSelectionMode() const
2765 return myLocalSelectionMode;
2768 const char gSeparator = '_'; // character used to separate parameter names
2769 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2772 * \brief Store visual parameters
2774 * This method is called just before the study document is saved.
2775 * Store visual parameters in AttributeParameter attribute(s)
2777 void GeometryGUI::storeVisualParameters (int savePoint)
2779 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2780 if ( !appStudy || !appStudy->studyDS() )
2782 _PTR(Study) studyDS = appStudy->studyDS();
2784 // componentName is used for encoding of entries when storing them in IParameters
2785 std::string componentName = myComponentGeom->ComponentDataType();
2786 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2787 //if (!aSComponent) return;
2790 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2791 componentName.c_str(),
2793 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2795 QSet<QString> anEntriesToStoreShared;
2796 QList<SUIT_ViewManager*> lst;
2797 QList<SUIT_ViewManager*>::Iterator it;
2799 // main cycle to store parameters of displayed objects
2801 getApp()->viewManagers(lst);
2802 for (it = lst.begin(); it != lst.end(); it++) {
2803 SUIT_ViewManager* vman = *it;
2804 QString vType = vman->getType();
2805 int aMgrId = vman->getGlobalId();
2806 // saving VTK actors properties
2807 QVector<SUIT_ViewWindow*> views = vman->getViews();
2808 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2809 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
2810 ObjMap::ConstIterator o_it = anObjects.begin();
2811 for (; o_it != anObjects.end(); o_it++) {
2812 const PropMap aProps = o_it.value();
2814 //Check that object exists in the study
2815 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2816 if ( !obj || !(aProps.count() > 0))
2818 // entry is "encoded" = it does NOT contain component adress, since it is a
2819 // subject to change on next component loading
2821 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2823 _PTR(GenericAttribute) anAttr;
2824 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2827 // remember entry of object to store shared GEOM properties
2828 // (e.g. dimension properties).
2829 if ( vType == OCCViewer_Viewer::Type() )
2831 anEntriesToStoreShared.insert( o_it.key() );
2834 QString param, occParam = vType;
2835 occParam += GEOM::sectionSeparator();
2836 occParam += QString::number(aMgrId);
2837 occParam += GEOM::sectionSeparator();
2839 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2840 param = occParam + GEOM::propertyName( GEOM::Visibility );
2841 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2844 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2845 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2846 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2849 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2850 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2852 val << QString::number(c.redF());
2853 val << QString::number(c.greenF());
2854 val << QString::number(c.blueF());
2855 param = occParam + GEOM::propertyName( GEOM::Color );
2856 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2859 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2860 param = occParam + GEOM::propertyName( GEOM::Texture );
2861 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2864 if (vType == SVTK_Viewer::Type()) {
2865 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2866 param = occParam + GEOM::propertyName( GEOM::Opacity );
2867 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2869 } else if (vType == SOCC_Viewer::Type()) {
2870 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2871 param = occParam + GEOM::propertyName( GEOM::Transparency );
2872 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2875 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2876 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2877 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2881 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2882 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2883 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2886 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2887 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2888 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2891 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2892 param = occParam + GEOM::propertyName( GEOM::Deflection );
2893 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2896 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2897 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2898 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2899 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2902 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2903 param = occParam + GEOM::propertyName( GEOM::Material );
2904 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2907 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2908 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2909 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2912 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2913 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2914 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2916 } // object iterator
2918 } // for (viewManagers)
2920 // store dimension attributes of objects:
2921 // since the displayed object always persists in property map, we remember the object entries
2922 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
2923 QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
2924 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
2925 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
2927 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
2928 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName);
2930 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
2932 if ( aDimensions.GetNumber() == 0 )
2937 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
2942 * \brief Restore visual parameters
2944 * This method is called after the study document is opened.
2945 * Restore visual parameters from AttributeParameter attribute(s)
2947 void GeometryGUI::restoreVisualParameters (int savePoint)
2949 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2950 if (!appStudy || !appStudy->studyDS())
2952 _PTR(Study) studyDS = appStudy->studyDS();
2954 // componentName is used for encoding of entries when storing them in IParameters
2955 std::string componentName = myComponentGeom->ComponentDataType();
2956 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2957 //if (!aSComponent) return;
2960 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2961 componentName.c_str(),
2963 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2965 std::vector<std::string> entries = ip->getEntries();
2967 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2969 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2970 QString entry (ip->decodeEntry(*entIt).c_str());
2972 // Check that the entry corresponds to a real object in the Study
2973 // as the object may be deleted or modified after the visual state is saved.
2974 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2975 if (!so) continue; //Skip the not existent entry
2977 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2978 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2980 std::vector<std::string>::iterator namesIt = paramNames.begin();
2981 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2983 // actors are stored in a map after displaying of them for
2984 // quicker access in the future: map < viewID to actor >
2985 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2986 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2988 QString viewerTypStr;
2989 QString viewIndexStr;
2991 QVector<PropMap> aListOfMap;
2993 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2995 // visual parameters are stored in strings as follows:
2996 // 1) ViewerType_ViewIndex_ParamName
2997 // 2) ViewerType_ParamName (shared for GEOM module)
2998 // '_' is used as separator and should not be used in viewer type or parameter names.
2999 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
3001 bool isShared = lst.size() == 2;
3002 bool isViewer = lst.size() == 3;
3003 if ( !isShared && !isViewer )
3008 // shared visual parameters
3011 QString aParamNameStr( lst[1] );
3012 QString aValuesStr( (*valuesIt).c_str() );
3014 // shared dimension properties are stored as attribute
3015 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
3017 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
3018 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
3024 // per view visual parameters
3025 viewerTypStr = lst[0];
3026 viewIndexStr = lst[1];
3027 QString paramNameStr = lst[2];
3030 viewIndex = viewIndexStr.toUInt(&ok);
3031 if (!ok) // bad conversion of view index to integer
3034 if ((viewIndex + 1) > aListOfMap.count()) {
3035 aListOfMap.resize(viewIndex + 1);
3038 QString val((*valuesIt).c_str());
3039 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
3040 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
3041 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
3042 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
3043 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
3044 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
3045 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
3046 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
3047 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
3048 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
3049 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
3050 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
3051 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
3052 QStringList rgb = val.split(GEOM::subSectionSeparator());
3053 if (rgb.count() == 3) {
3054 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
3055 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
3057 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
3058 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
3059 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
3060 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
3061 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3062 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3063 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3064 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3065 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3066 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3067 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3068 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3069 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3070 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3072 } // for names/parameters iterator
3074 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3076 for (int index = 0; index < aListOfMap.count(); index++) {
3078 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
3080 //Get Visibility property of the current PropMap
3081 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3082 SUIT_ViewManager* vman = lst.at(index);
3083 SUIT_ViewModel* vmodel = vman->getViewModel();
3084 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
3087 } // for entries iterator
3089 // update all VTK and OCC views
3090 QList<SUIT_ViewManager*> lst;
3091 getApp()->viewManagers(lst);
3092 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3093 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3096 if (vmodel->getType() == SVTK_Viewer::Type()) {
3097 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3098 vtkView->getRenderer()->ResetCameraClippingRange();
3101 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3102 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3103 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3110 void GeometryGUI::onViewAboutToShow()
3112 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3113 QAction* a = action( GEOMOp::OpSwitchVectors );
3115 a->setEnabled(true);
3116 bool vmode = window->property("VectorsMode").toBool();
3117 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3119 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3120 a->setEnabled(false);
3125 \brief Return action by id
3126 \param id identifier of the action
3129 QAction* GeometryGUI::getAction(const int id) {
3134 \brief GEOM module message handler
3136 This method can be re-implemented in the subclasses.
3137 This is a GEOM module message handler.
3139 \param msg the message received.
3141 void GeometryGUI::message(const QString& msg)
3144 QStringList data = msg.split("/");
3145 const int nbStrings = data.count();
3147 if (nbStrings > 0) {
3148 if (data[0] == "modified") {
3150 QString anIOR = nbStrings > 1 ? data[1] : QString();
3152 if ( anIOR.isEmpty() ) {
3156 // Get the geom object.
3157 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3159 // Clear the shape buffer
3160 GeometryGUI::ClearShapeBuffer (anObj);
3166 \brief Clears the shape buffer.
3168 This is a static method. It clears the shape buffer.
3170 \param theObj the object
3172 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3174 if ( CORBA::is_nil( theObj ) )
3177 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3178 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3179 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3181 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3186 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3191 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3195 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3196 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3197 _PTR(GenericAttribute) anAttr;
3198 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3199 _PTR(AttributeIOR) anIOR ( anAttr );
3200 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3201 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3207 \brief Returns the object from IOR.
3209 This is a static method. It returns the object from its IOR.
3211 \param IOR object IOR
3212 \return GEOM object.
3214 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3216 GEOM::GEOM_Object_var geomObj;
3217 if ( !IOR.isEmpty() ) {
3218 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3219 ( IOR.toLatin1().constData() );
3220 if ( !CORBA::is_nil( corbaObj ) )
3221 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3223 return geomObj._retn();
3227 \brief Returns IOR of the object.
3229 This is a static method. It returns the object's IOR.
3231 \param object the GEOM object.
3232 \return object's IOR.
3234 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3237 if ( !CORBA::is_nil( object ) ) {
3238 CORBA::String_var anIOR =
3239 SalomeApp_Application::orb()->object_to_string( object );
3246 \brief Check if this object is can't be renamed in place
3248 This method can be re-implemented in the subclasses.
3249 Return true in case if object isn't reference or component (module root).
3251 \param entry column id
3252 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3254 bool GeometryGUI::renameAllowed( const QString& entry) const {
3256 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3257 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3258 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3260 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3264 Rename object by entry.
3265 \param entry entry of the object
3266 \param name new name of the object
3267 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3269 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3271 bool result = false;
3273 SalomeApp_Application* app =
3274 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3275 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3280 _PTR(Study) aStudy = appStudy->studyDS();
3285 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3287 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3291 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3292 _PTR(GenericAttribute) anAttr;
3294 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3295 _PTR(AttributeName) aName (anAttr);
3297 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3298 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3299 if (!CORBA::is_nil(anObj)) {
3300 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3301 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3309 void GeometryGUI::updateMaterials()
3311 LightApp_Preferences* pref = preferences();
3313 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3314 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3315 if ( !materials.contains( currentMaterial ) )
3316 // user material set as default in the preferences, might be removed
3317 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3319 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3321 setPreferenceProperty( prefItem->id(),
3322 "strings", materials );
3323 prefItem->retrieve();
3329 \brief Check if the module allows "drag" operation of its objects.
3331 Overloaded from LightApp_Module class.
3333 This function is a part of the general drag-n-drop mechanism.
3334 The goal of this function is to check data object passed as a parameter
3335 and decide if it can be dragged or no.
3337 \param what data object being tested for drag operation
3338 \return \c true if module allows dragging of the specified object
3339 \sa isDropAccepted(), dropObjects()
3341 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3343 // we allow dragging object under root and object from folder
3344 int aLevel = what->level();
3345 bool anObjectInFolder = false;
3347 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3349 _PTR(SObject) aSO = dataObj->object();
3351 _PTR(GenericAttribute) anAttr;
3352 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3353 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3354 _PTR(AttributeLocalID) aLocalID( anAttr );
3355 anObjectInFolder = aLocalID->Value() == 999;
3360 return aLevel == 2 || anObjectInFolder;
3364 \brief Check if the module allows "drop" operation on the given object.
3366 Overloaded from LightApp_Module class.
3368 This function is a part of the general drag-n-drop mechanism.
3369 The goal of this function is to check data object passed as a parameter
3370 and decide if it can be used as a target for the "drop" operation.
3371 The processing of the drop operation itself is done in the dropObjects() function.
3373 \param where target data object
3374 \return \c true if module supports dropping on the \a where data object
3375 \sa isDraggable(), dropObjects()
3377 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3379 // we allow dropping into folder and top-level GEOM object
3380 int aLevel = where->level();
3381 bool isFolder = false;
3383 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3385 _PTR(SObject) aSO = dataObj->object();
3387 _PTR(GenericAttribute) anAttr;
3388 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3389 _PTR(AttributeLocalID) aLocalID( anAttr );
3390 isFolder = aLocalID->Value() == 999;
3395 return aLevel == 1 || isFolder;
3399 \brief Complete drag-n-drop operation.
3401 Overloaded from LightApp_Module class.
3403 This function is a part of the general drag-n-drop mechanism.
3404 Its goal is to handle dropping of the objects being dragged according
3405 to the chosen operation (move). The dropping is performed in the
3406 context of the parent data object \a where and the \a row (position in the
3407 children index) at which the data should be dropped. If \a row is equal to -1,
3408 this means that objects are added to the end of the children list.
3410 \param what objects being dropped
3411 \param where target data object
3412 \param row child index at which the drop operation is performed
3413 \param action drag-n-drop operation (Qt::DropAction) - move
3415 \sa isDraggable(), isDropAccepted()
3417 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3418 const int row, Qt::DropAction action )
3420 if (action != Qt::CopyAction && action != Qt::MoveAction)
3421 return; // unsupported action
3423 // get parent object
3424 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3425 if ( !dataObj ) return; // wrong parent
3426 _PTR(SObject) parentObj = dataObj->object();
3428 // Find the current Study and StudyBuilder
3429 _PTR(Study) aStudy = parentObj->GetStudy();
3430 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3431 // collect all parents of the target node
3432 QStringList parentIDs;
3433 _PTR(SObject) parent = parentObj;
3434 while( !parent->IsNull() ) {
3435 parentIDs << parent->GetID().c_str();
3436 parent = aUseCaseBuilder->GetFather(parent);
3439 // collect objects being dropped
3440 GEOM::object_list_var objects = new GEOM::object_list();
3441 objects->length( what.count() );
3443 for ( int i = 0; i < what.count(); i++ ) {
3444 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3445 if ( !dataObj ) continue; // skip wrong objects
3446 _PTR(SObject) sobj = dataObj->object();
3447 // check that dropped object is not a parent of target object
3448 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3449 return; // it's not allowed to move node into it's child
3451 objects[i] = _CAST(SObject, sobj)->GetSObject();
3454 objects->length( count );
3456 // call engine function
3457 GetGeomGen()->Move( objects.in(), // what
3458 _CAST(SObject, parentObj)->GetSObject(), // where
3461 // update Object browser
3462 getApp()->updateObjectBrowser( false );