1 // Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // File : GeometryGUI.cxx
23 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
25 #include <Standard_math.hxx> // E.A. must be included before Python.h to fix compilation on windows
27 #undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
30 #include "GeometryGUI.h"
31 #include "GeometryGUI_Operations.h"
32 #include "GEOMPluginGUI.h"
33 #include "GEOMGUI_XmlHandler.h"
34 #include "GEOMGUI_OCCSelector.h"
35 #include "GEOMGUI_Selection.h"
36 #include "GEOMGUI_CreationInfoWdg.h"
37 #include "GEOMGUI_DimensionProperty.h"
38 #include "GEOM_Constants.h"
39 #include "GEOM_Displayer.h"
40 #include "GEOM_AISShape.hxx"
42 #include "GEOM_Actor.h"
44 #include <Material_ResourceMgr.h>
45 #include <Material_Model.h>
47 #include <SUIT_Desktop.h>
48 #include <SUIT_MessageBox.h>
49 #include <SUIT_ResourceMgr.h>
50 #include <SUIT_Session.h>
51 #include <SUIT_ViewManager.h>
53 #include <PyInterp_Interp.h>
55 #include <OCCViewer_ViewWindow.h>
56 #include <OCCViewer_ViewPort3d.h>
57 #include <OCCViewer_ViewModel.h>
58 #include <OCCViewer_ViewManager.h>
60 #include <SOCC_ViewModel.h>
61 #include <SOCC_ViewWindow.h>
63 #include <SVTK_ViewWindow.h>
64 #include <SVTK_RenderWindowInteractor.h>
65 #include <SVTK_InteractorStyle.h>
66 #include <SVTK_ViewModel.h>
68 #include <SalomeApp_Application.h>
69 #include <SalomeApp_DataObject.h>
70 #include <SalomeApp_Study.h>
71 #include <SalomeApp_Tools.h>
73 #include <LightApp_SelectionMgr.h>
74 #include <LightApp_VTKSelector.h>
75 #include <LightApp_DataObject.h>
76 #include <LightApp_Preferences.h>
78 #include <SALOME_LifeCycleCORBA.hxx>
79 // #include <SALOME_ListIO.hxx>
80 #include <SALOME_ListIteratorOfListIO.hxx>
82 #include <SALOMEDSClient_ClientFactory.hxx>
83 #include <SALOMEDSClient_IParameters.hxx>
85 #include <SALOMEDS_SObject.hxx>
87 #include <Basics_OCCTVersion.hxx>
98 #include <QSignalMapper>
100 #include <AIS_Drawer.hxx>
101 #include <AIS_ListOfInteractive.hxx>
102 #include <AIS_ListIteratorOfListOfInteractive.hxx>
103 #include <Prs3d_Drawer.hxx>
104 #include <Prs3d_IsoAspect.hxx>
105 #include <Aspect_TypeOfMarker.hxx>
106 #include <OSD_SharedLibrary.hxx>
107 #include <NCollection_DataMap.hxx>
109 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
110 #include <TColStd_HArray1OfByte.hxx>
112 #include <Graphic3d_HArray1OfBytes.hxx>
115 #include <utilities.h>
117 #include <vtkCamera.h>
118 #include <vtkRenderer.h>
120 #include <Standard_Failure.hxx>
121 #include <Standard_ErrorHandler.hxx>
123 #include "GEOM_version.h"
124 #include "GEOMImpl_Types.hxx" // dangerous hxx (defines short-name macros) - include after all
127 Standard_EXPORT CAM_Module* createModule() {
128 return new GeometryGUI();
131 Standard_EXPORT char* getModuleVersion() {
132 return (char*)GEOM_VERSION_STR;
136 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
138 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
140 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
142 // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
143 if (CORBA::is_nil(myComponentGeom))
145 return GeometryGUI::myComponentGeom;
148 bool GeometryGUI::InitGeomGen()
151 if ( CORBA::is_nil( myComponentGeom ) ) return false;
155 //=======================================================================
156 // function : ClientSObjectToObject
158 //=======================================================================
159 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
161 _PTR(GenericAttribute) anAttr;
162 CORBA::Object_var anObj;
164 std::string aValue = theSObject->GetIOR();
165 if (strcmp(aValue.c_str(), "") != 0) {
166 CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
167 anObj = anORB->string_to_object(aValue.c_str());
170 INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
172 return anObj._retn();
175 //=======================================================================
176 // function : ClientStudyToStudy
178 //=======================================================================
179 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
181 SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
182 CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
183 SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
184 int aStudyID = theStudy->StudyId();
185 SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
186 return aDSStudy._retn();
189 void GeometryGUI::Modified (bool theIsUpdateActions)
191 if ( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
192 if ( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
193 appStudy->Modified();
194 if ( theIsUpdateActions )
195 app->updateActions();
200 //=======================================================================
201 // function : GeometryGUI::GeometryGUI()
202 // purpose : Constructor
203 //=======================================================================
204 GeometryGUI::GeometryGUI() :
205 SalomeApp_Module( "GEOM" ),
208 if ( CORBA::is_nil( myComponentGeom ) )
210 Engines::EngineComponent_var comp =
211 SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
212 myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
215 myActiveDialogBox = 0;
217 gp_Pnt origin = gp_Pnt(0., 0., 0.);
218 gp_Dir direction = gp_Dir(0., 0., 1.);
219 myWorkingPlane = gp_Ax3(origin, direction);
222 myLocalSelectionMode = GEOM_ALLOBJECTS;
224 myCreationInfoWdg = 0;
226 connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
228 Q_INIT_RESOURCE( GEOMGUI );
231 //=======================================================================
232 // function : GeometryGUI::~GeometryGUI()
233 // purpose : Destructor
234 //=======================================================================
235 GeometryGUI::~GeometryGUI()
237 while (!myOCCSelectors.isEmpty())
238 delete myOCCSelectors.takeFirst();
240 while (!myVTKSelectors.isEmpty())
241 delete myVTKSelectors.takeFirst();
243 qDeleteAll(myGUIMap);
246 //=======================================================================
247 // function : GeometryGUI::getLibrary()
248 // purpose : get or load GUI library by name [ internal ]
249 //=======================================================================
250 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
251 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
253 if ( !myGUIMap.contains( libraryName ) ) {
254 // try to load library if it is not loaded yet
256 QString dirs = getenv( "LD_LIBRARY_PATH" );
259 QString dirs = getenv( "PATH" );
262 if ( !dirs.isEmpty() ) {
263 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
264 QListIterator<QString> it( dirList ); it.toBack();
265 while ( it.hasPrevious() ) {
266 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
268 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
269 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
271 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
272 continue; // continue search further
274 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
275 if ( osdF != NULL ) {
276 LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
277 GEOMGUI* libGUI = (*func)( this );
279 myGUIMap[ libraryName ] = libGUI;
280 break; // found and loaded!
287 return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
290 //=======================================================================
291 // function : GeometryGUI::getPluginLibrary()
292 // purpose : get or load GUI Plugin library by name [ internal ]
293 //=======================================================================
294 typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
295 GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
297 if ( !myGUIMap.contains( libraryName ) ) {
298 // try to load library if it is not loaded yet
300 QString dirs = getenv( "LD_LIBRARY_PATH" );
303 QString dirs = getenv( "PATH" );
306 if ( !dirs.isEmpty() ) {
307 QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
308 QListIterator<QString> it( dirList ); it.toBack();
309 while ( it.hasPrevious() ) {
310 QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
312 OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
313 bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
315 MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
316 continue; // continue search further
318 OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
319 if ( osdF != NULL ) {
320 PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
321 GEOMPluginGUI* libGUI = (*func)( this );
323 myGUIMap[ libraryName ] = libGUI;
324 break; // found and loaded!
331 return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
334 //=======================================================================
335 // function : GeometryGUI::ActiveWorkingPlane()
336 // purpose : Activate Working Plane View
337 //=======================================================================
338 void GeometryGUI::ActiveWorkingPlane()
340 gp_Dir DZ = myWorkingPlane.Direction();
341 gp_Dir DY = myWorkingPlane.YDirection();
343 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
344 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
345 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
348 OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
350 Handle(V3d_View) view3d = vw->getViewPort()->getView();
352 view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
353 view3d->SetUp(DY.X(), DY.Y(), DY.Z());
357 else if ( ViewVTK ) {
358 SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
360 vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
362 camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
363 camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
364 camera->SetFocalPoint(0,0,0);
371 //=======================================================================
372 // function : GeometryGUI::SetActiveDialogBox()
373 // purpose : Set active dialog box
374 //=======================================================================
375 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
377 myActiveDialogBox = (QDialog*)aDlg;
380 //=======================================================================
381 // function : GeometryGUI::EmitSignalDeactivateDialog()
382 // purpose : Emit a signal to deactivate the active dialog Box
383 //=======================================================================
384 void GeometryGUI::EmitSignalDeactivateDialog()
386 emit SignalDeactivateActiveDialog();
389 //=======================================================================
390 // function : GeometryGUI::EmitSignalCloseAllDialogs()
391 // purpose : Emit a signal to close all non modal dialogs box
392 //=======================================================================
393 void GeometryGUI::EmitSignalCloseAllDialogs()
395 emit SignalCloseAllDialogs();
398 //=======================================================================
399 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
400 // purpose : Emit a signal to inform that default real spin box step has
402 //=======================================================================
403 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
405 emit SignalDefaultStepValueChanged(newVal);
408 //=======================================================================
409 // function : GeometryGUI::OnGUIEvent()
410 // purpose : common slot for all menu/toolbar actions
411 //=======================================================================
412 void GeometryGUI::OnGUIEvent()
414 const QObject* obj = sender();
415 if ( !obj || !obj->inherits( "QAction" ) )
417 int id = actionId((QAction*)obj);
422 //=======================================================================
423 // function : GeometryGUI::OnGUIEvent()
424 // purpose : manage all events on GUI [static]
425 //=======================================================================
426 void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
428 SUIT_Application* anApp = application();
430 SUIT_Desktop* desk = anApp->desktop();
432 // check type of the active viewframe
433 SUIT_ViewWindow* window = desk->activeWindow();
434 bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
435 bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
436 // if current viewframe is not of OCC and not of VTK type - return immediately
437 // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
438 QList<int> NotViewerDependentCommands;
439 NotViewerDependentCommands << GEOMOp::OpDelete
441 << GEOMOp::OpShowOnly
442 << GEOMOp::OpShowOnlyChildren
443 << GEOMOp::OpDiscloseChildren
444 << GEOMOp::OpConcealChildren
445 << GEOMOp::OpUnpublishObject
446 << GEOMOp::OpPublishObject
447 << GEOMOp::OpPointMarker
448 << GEOMOp::OpCreateFolder
449 << GEOMOp::OpSortChildren;
450 if ( !ViewOCC && !ViewVTK && !NotViewerDependentCommands.contains( id ) ) {
451 // activate OCC viewer
452 getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
455 // fix for IPAL9103, point 2
456 if ( CORBA::is_nil( GetGeomGen() ) ) {
457 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
462 // find corresponding GUI library
464 case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
465 createOriginAndBaseVectors(); // internal operation
467 case GEOMOp::OpImport: // MENU FILE - IMPORT
468 case GEOMOp::OpExport: // MENU FILE - EXPORT
469 case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX
470 case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE
471 case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE
472 case GEOMOp::OpSelectFace: // POPUP MENU - SELECT ONLY - FACE
473 case GEOMOp::OpSelectShell: // POPUP MENU - SELECT ONLY - SHELL
474 case GEOMOp::OpSelectSolid: // POPUP MENU - SELECT ONLY - SOLID
475 case GEOMOp::OpSelectCompound: // POPUP MENU - SELECT ONLY - COMPOUND
476 case GEOMOp::OpSelectAll: // POPUP MENU - SELECT ONLY - SELECT ALL
477 case GEOMOp::OpDelete: // MENU EDIT - DELETE
478 case GEOMOp::OpCheckGeom: // MENU TOOLS - CHECK GEOMETRY
479 case GEOMOp::OpMaterialsLibrary: // MENU TOOLS - MATERIALS LIBRARY
480 case GEOMOp::OpDeflection: // POPUP MENU - DEFLECTION COEFFICIENT
481 case GEOMOp::OpColor: // POPUP MENU - COLOR
482 case GEOMOp::OpSetTexture: // POPUP MENU - SETTEXTURE
483 case GEOMOp::OpTransparency: // POPUP MENU - TRANSPARENCY
484 case GEOMOp::OpIncrTransparency: // SHORTCUT - INCREASE TRANSPARENCY
485 case GEOMOp::OpDecrTransparency: // SHORTCUT - DECREASE TRANSPARENCY
486 case GEOMOp::OpIsos: // POPUP MENU - ISOS
487 case GEOMOp::OpIncrNbIsos: // SHORTCUT - INCREASE NB ISOS
488 case GEOMOp::OpDecrNbIsos: // SHORTCUT - DECREASE NB ISOS
489 case GEOMOp::OpAutoColor: // POPUP MENU - AUTO COLOR
490 case GEOMOp::OpNoAutoColor: // POPUP MENU - DISABLE AUTO COLOR
491 case GEOMOp::OpDiscloseChildren: // POPUP MENU - DISCLOSE CHILD ITEMS
492 case GEOMOp::OpConcealChildren: // POPUP MENU - CONCEAL CHILD ITEMS
493 case GEOMOp::OpUnpublishObject: // POPUP MENU - UNPUBLISH
494 case GEOMOp::OpPublishObject: // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
495 case GEOMOp::OpPointMarker: // POPUP MENU - POINT MARKER
496 case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
497 case GEOMOp::OpPredefMaterial: // POPUP MENU - <SOME MATERIAL>
498 case GEOMOp::OpPredefMaterCustom: // POPUP MENU - MATERIAL PROPERTIES - CUSTOM...
499 case GEOMOp::OpEdgeWidth: // POPUP MENU - LINE WIDTH - EDGE WIDTH
500 case GEOMOp::OpIsosWidth: // POPUP MENU - LINE WIDTH - ISOS WIDTH
501 case GEOMOp::OpBringToFront: // POPUP MENU - BRING TO FRONT
502 case GEOMOp::OpClsBringToFront: //
503 case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER
504 case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS
505 case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE
506 case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY
507 libName = "GEOMToolsGUI";
509 case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
510 case GEOMOp::OpDMShading: // MENU VIEW - SHADING
511 case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
512 case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
513 case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
514 case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
515 case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
516 case GEOMOp::OpHideAll: // MENU VIEW - ERASE ALL
517 case GEOMOp::OpHide: // MENU VIEW - ERASE
518 case GEOMOp::OpShow: // MENU VIEW - DISPLAY
519 case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
520 case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME
521 case GEOMOp::OpShading: // POPUP MENU - SHADING
522 case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES
523 case GEOMOp::OpTexture: // POPUP MENU - TEXTURE
524 case GEOMOp::OpVectors: // POPUP MENU - VECTORS
525 libName = "DisplayGUI";
527 case GEOMOp::OpPoint: // MENU BASIC - POINT
528 case GEOMOp::OpLine: // MENU BASIC - LINE
529 case GEOMOp::OpCircle: // MENU BASIC - CIRCLE
530 case GEOMOp::OpEllipse: // MENU BASIC - ELLIPSE
531 case GEOMOp::OpArc: // MENU BASIC - ARC
532 case GEOMOp::OpVector: // MENU BASIC - VECTOR
533 case GEOMOp::OpPlane: // MENU BASIC - PLANE
534 case GEOMOp::OpCurve: // MENU BASIC - CURVE
535 case GEOMOp::OpLCS: // MENU BASIC - LOCAL COORDINATE SYSTEM
536 libName = "BasicGUI";
538 case GEOMOp::OpBox: // MENU PRIMITIVE - BOX
539 case GEOMOp::OpCylinder: // MENU PRIMITIVE - CYLINDER
540 case GEOMOp::OpSphere: // MENU PRIMITIVE - SPHERE
541 case GEOMOp::OpTorus: // MENU PRIMITIVE - TORUS
542 case GEOMOp::OpCone: // MENU PRIMITIVE - CONE
543 case GEOMOp::OpRectangle: // MENU PRIMITIVE - FACE
544 case GEOMOp::OpDisk: // MENU PRIMITIVE - DISK
545 libName = "PrimitiveGUI";
547 case GEOMOp::OpPrism: // MENU GENERATION - PRISM
548 case GEOMOp::OpRevolution: // MENU GENERATION - REVOLUTION
549 case GEOMOp::OpFilling: // MENU GENERATION - FILLING
550 case GEOMOp::OpPipe: // MENU GENERATION - PIPE
551 case GEOMOp::OpPipePath: // MENU GENERATION - RESTORE PATH
552 libName = "GenerationGUI";
554 case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER
555 case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER
556 case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE
557 case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE
559 case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION
561 case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
562 case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD
563 case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD
564 case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD
565 libName = "EntityGUI";
567 case GEOMOp::OpEdge: // MENU BUILD - EDGE
568 case GEOMOp::OpWire: // MENU BUILD - WIRE
569 case GEOMOp::OpFace: // MENU BUILD - FACE
570 case GEOMOp::OpShell: // MENU BUILD - SHELL
571 case GEOMOp::OpSolid: // MENU BUILD - SOLID
572 case GEOMOp::OpCompound: // MENU BUILD - COMPUND
573 libName = "BuildGUI";
575 case GEOMOp::OpFuse: // MENU BOOLEAN - FUSE
576 case GEOMOp::OpCommon: // MENU BOOLEAN - COMMON
577 case GEOMOp::OpCut: // MENU BOOLEAN - CUT
578 case GEOMOp::OpSection: // MENU BOOLEAN - SECTION
579 libName = "BooleanGUI";
581 case GEOMOp::OpTranslate: // MENU TRANSFORMATION - TRANSLATION
582 case GEOMOp::OpRotate: // MENU TRANSFORMATION - ROTATION
583 case GEOMOp::OpChangeLoc: // MENU TRANSFORMATION - LOCATION
584 case GEOMOp::OpMirror: // MENU TRANSFORMATION - MIRROR
585 case GEOMOp::OpScale: // MENU TRANSFORMATION - SCALE
586 case GEOMOp::OpOffset: // MENU TRANSFORMATION - OFFSET
587 case GEOMOp::OpProjection: // MENU TRANSFORMATION - PROJECTION
588 case GEOMOp::OpMultiTranslate: // MENU TRANSFORMATION - MULTI-TRANSLATION
589 case GEOMOp::OpMultiRotate: // MENU TRANSFORMATION - MULTI-ROTATION
590 case GEOMOp::OpReimport: // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
591 libName = "TransformationGUI";
593 case GEOMOp::OpPartition: // MENU OPERATION - PARTITION
594 case GEOMOp::OpArchimede: // MENU OPERATION - ARCHIMEDE
595 case GEOMOp::OpFillet3d: // MENU OPERATION - FILLET
596 case GEOMOp::OpChamfer: // MENU OPERATION - CHAMFER
597 case GEOMOp::OpClipping: // MENU OPERATION - CLIPPING RANGE
598 case GEOMOp::OpShapesOnShape: // MENU OPERATION - GET SHAPES ON SHAPE
599 case GEOMOp::OpFillet2d: // MENU OPERATION - FILLET 2D
600 case GEOMOp::OpFillet1d: // MENU OPERATION - FILLET 1D
601 case GEOMOp::OpSharedShapes: // MENU OPERATION - GET SHARED SHAPES
602 case GEOMOp::OpExtrudedBoss: // MENU OPERATION - EXTRUDED BOSS
603 case GEOMOp::OpExtrudedCut: // MENU OPERATION - EXTRUDED CUT
604 #ifdef DEBUG_CURVE_CREATOR
605 // for debug purposes, to be removed
606 case GEOMOp::OpCurveCreator: // MENU OPERATION - CURVE CREATOR
608 libName = "OperationGUI";
610 case GEOMOp::OpSewing: // MENU REPAIR - SEWING
611 case GEOMOp::OpSuppressFaces: // MENU REPAIR - SUPPRESS FACES
612 case GEOMOp::OpSuppressHoles: // MENU REPAIR - SUPPRESS HOLE
613 case GEOMOp::OpShapeProcess: // MENU REPAIR - SHAPE PROCESSING
614 case GEOMOp::OpCloseContour: // MENU REPAIR - CLOSE CONTOUR
615 case GEOMOp::OpRemoveIntWires: // MENU REPAIR - REMOVE INTERNAL WIRES
616 case GEOMOp::OpAddPointOnEdge: // MENU REPAIR - ADD POINT ON EDGE
617 case GEOMOp::OpFreeBoundaries: // MENU MEASURE - FREE BOUNDARIES
618 case GEOMOp::OpFreeFaces: // MENU MEASURE - FREE FACES
619 case GEOMOp::OpOrientation: // MENU REPAIR - CHANGE ORIENTATION
620 case GEOMOp::OpGlueFaces: // MENU REPAIR - GLUE FACES
621 case GEOMOp::OpGlueEdges: // MENU REPAIR - GLUE EDGES
622 case GEOMOp::OpLimitTolerance: // MENU REPAIR - LIMIT TOLERANCE
623 case GEOMOp::OpRemoveWebs: // MENU REPAIR - REMOVE INTERNAL FACES
624 case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
625 case GEOMOp::OpFuseEdges: // MENU REPAIR - FUSE COLLINEAR EDGES
626 case GEOMOp::OpUnionFaces: // MENU REPAIR - UNION FACES
627 libName = "RepairGUI";
629 case GEOMOp::OpProperties: // MENU MEASURE - PROPERTIES
630 case GEOMOp::OpCenterMass: // MENU MEASURE - CDG
631 case GEOMOp::OpInertia: // MENU MEASURE - INERTIA
632 case GEOMOp::OpNormale: // MENU MEASURE - NORMALE
633 case GEOMOp::OpBoundingBox: // MENU MEASURE - BOUNDING BOX
634 case GEOMOp::OpMinDistance: // MENU MEASURE - MIN DISTANCE
635 case GEOMOp::OpAngle: // MENU MEASURE - ANGLE
636 case GEOMOp::OpTolerance: // MENU MEASURE - TOLERANCE
637 case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
638 case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
639 case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
640 case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
641 case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
642 case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
643 case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS
644 case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS
645 case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS
646 libName = "MeasureGUI";
648 case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE
649 case GEOMOp::OpGroupCreatePopup: // POPUP MENU - CREATE GROUP
650 case GEOMOp::OpGroupEdit: // MENU GROUP - EDIT
651 case GEOMOp::OpGroupUnion: // MENU GROUP - UNION
652 case GEOMOp::OpGroupIntersect: // MENU GROUP - INTERSECT
653 case GEOMOp::OpGroupCut: // MENU GROUP - CUT
654 libName = "GroupGUI";
656 case GEOMOp::OpHexaSolid: // MENU BLOCKS - HEXAHEDRAL SOLID
657 case GEOMOp::OpMultiTransform: // MENU BLOCKS - MULTI-TRANSFORMATION
658 case GEOMOp::OpQuadFace: // MENU BLOCKS - QUADRANGLE FACE
659 case GEOMOp::OpPropagate: // MENU BLOCKS - PROPAGATE
660 case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
661 libName = "BlocksGUI";
663 case GEOMOp::OpExportXAO: // MENU NEW ENTITY - IMPORTEXPORT - EXPORTXAO
664 case GEOMOp::OpImportXAO: // MENU NEW ENTITY - IMPORTEXPORT - IMPORTXAO
665 libName = "ImportExportGUI";
667 //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
668 //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
669 //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
670 //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
671 //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
672 //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
673 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
674 //libName = "AdvancedGUI";
677 if (myPluginActions.contains(id)) {
678 libName = myPluginActions[id].first;
680 GEOMPluginGUI* library = 0;
681 if ( !libName.isEmpty() ) {
683 libName = QString( "lib" ) + libName + ".so";
685 libName = libName + ".dll";
687 library = getPluginLibrary( libName );
690 // call method of corresponding GUI library
692 //QString action ("%1");
693 //action = action.arg(id);
695 //if( !theParam.isValid() )
696 library->OnGUIEvent( myPluginActions[id].second, desk );
698 // library->OnGUIEvent( id, desk, theParam);
701 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
703 updateCreationInfo();
709 GEOMGUI* library = 0;
710 if ( !libName.isEmpty() ) {
712 libName = QString( "lib" ) + libName + ".so";
714 libName = libName + ".dll";
716 library = getLibrary( libName );
719 // call method of corresponding GUI library
721 if( !theParam.isValid() )
722 library->OnGUIEvent( id, desk );
724 library->OnGUIEvent( id, desk, theParam);
727 SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
729 updateCreationInfo();
732 //=================================================================================
733 // function : GeometryGUI::activateOperation()
735 //=================================================================================
736 bool GeometryGUI::activateOperation( int actionId )
738 OnGUIEvent(actionId);
742 //=================================================================================
743 // function : GeometryGUI::activateOperation()
745 //=================================================================================
746 bool GeometryGUI::activateOperation( const QString& actionId )
750 int id = actionId.toInt(&isOk);
757 //=================================================================================
758 // function : GeometryGUI::activateOperation()
760 //=================================================================================
761 bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
765 QString pluginLib = plugin;
766 // TODO: if <plugin> is a plugin name, find plugin library name
767 if (myPluginLibs.contains(plugin))
768 pluginLib = myPluginLibs[plugin];
770 QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
771 for (; actionsIter != myPluginActions.end(); ++actionsIter) {
772 const PluginAction& anAction = actionsIter.value();
773 if (anAction.first == pluginLib && anAction.second == actionId) {
774 // activate operation
775 OnGUIEvent(actionsIter.key());
783 //=================================================================================
784 // function : GeometryGUI::OnKeyPress()
785 // purpose : Called when any key is pressed by user [static]
786 //=================================================================================
787 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
789 if ( !application() )
791 foreach ( GEOMGUI* lib, myGUIMap )
792 lib->OnKeyPress( e, application()->desktop(), w );
795 //=================================================================================
796 // function : GeometryGUI::OnMouseMove()
797 // purpose : Manages mouse move events [static]
798 //=================================================================================
799 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
801 if ( !application() )
803 foreach ( GEOMGUI* lib, myGUIMap )
804 lib->OnMouseMove( e, application()->desktop(), w );
807 //=================================================================================
808 // function : GeometryGUI::OnMouseRelease()
809 // purpose : Manages mouse release events [static]
810 //=================================================================================
811 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
813 if ( !application() )
815 foreach ( GEOMGUI* lib, myGUIMap )
816 lib->OnMouseRelease( e, application()->desktop(), w );
819 //=================================================================================
820 // function : GeometryGUI::OnMousePress()
821 // purpose : Manage mouse press events [static]
822 //=================================================================================
823 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
825 if ( !application() )
827 foreach ( GEOMGUI* lib, myGUIMap )
828 lib->OnMousePress( e, application()->desktop(), w );
831 //=======================================================================
832 // function : createGeomAction
834 //=======================================================================
835 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
836 const int accel, const bool toggle, const QString& shortcutAction )
838 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
839 QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
840 : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
842 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
844 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
845 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
847 application()->desktop(),
849 this, SLOT( OnGUIEvent() ),
853 //=======================================================================
854 // function : createOriginAndBaseVectors
856 //=======================================================================
857 void GeometryGUI::createOriginAndBaseVectors()
859 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
860 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
862 SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
866 _PTR(Study) studyDS = appStudy->studyDS();
867 if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
868 GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
869 if ( !aBasicOperations->_is_nil() ) {
870 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
871 double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
872 GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
873 GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
874 GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
875 GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
877 SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
878 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
879 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
880 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
881 GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
883 getApp()->updateObjectBrowser( true );
889 //=======================================================================
890 // function : GeometryGUI::initialize()
891 // purpose : Called when GEOM module is created
892 //=======================================================================
893 void GeometryGUI::initialize( CAM_Application* app )
895 SalomeApp_Module::initialize( app );
897 // ----- create actions --------------
899 createGeomAction( GEOMOp::OpImport, "IMPORT", "", Qt::ControlModifier + Qt::Key_I );
900 createGeomAction( GEOMOp::OpExport, "EXPORT", "", Qt::ControlModifier + Qt::Key_E );
902 createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete );
904 createGeomAction( GEOMOp::OpPoint, "POINT" );
905 createGeomAction( GEOMOp::OpLine, "LINE" );
906 createGeomAction( GEOMOp::OpCircle, "CIRCLE" );
907 createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" );
908 createGeomAction( GEOMOp::OpArc, "ARC" );
909 createGeomAction( GEOMOp::OpCurve, "CURVE" );
910 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
911 createGeomAction( GEOMOp::OpVector, "VECTOR" );
912 createGeomAction( GEOMOp::OpPlane, "PLANE" );
913 createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" );
914 createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
916 createGeomAction( GEOMOp::OpBox, "BOX" );
917 createGeomAction( GEOMOp::OpCylinder, "CYLINDER" );
918 createGeomAction( GEOMOp::OpSphere, "SPHERE" );
919 createGeomAction( GEOMOp::OpTorus, "TORUS" );
920 createGeomAction( GEOMOp::OpCone, "CONE" );
921 createGeomAction( GEOMOp::OpRectangle, "RECTANGLE" );
922 createGeomAction( GEOMOp::OpDisk, "DISK" );
924 createGeomAction( GEOMOp::OpPrism, "EXTRUSION" );
925 createGeomAction( GEOMOp::OpRevolution, "REVOLUTION" );
926 createGeomAction( GEOMOp::OpFilling, "FILLING" );
927 createGeomAction( GEOMOp::OpPipe, "PIPE" );
928 createGeomAction( GEOMOp::OpPipePath, "PIPE_PATH" );
930 createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
931 createGeomAction( GEOMOp::OpGroupEdit, "GROUP_EDIT" );
932 createGeomAction( GEOMOp::OpGroupUnion, "GROUP_UNION" );
933 createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
934 createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
936 createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
937 createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
939 createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
941 createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
942 createGeomAction( GEOMOp::OpHexaSolid, "HEX_SOLID" );
944 createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" );
945 createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" );
946 createGeomAction( GEOMOp::OpIsoline, "ISOLINE" );
947 createGeomAction( GEOMOp::OpExplode, "EXPLODE" );
949 createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
951 createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
953 createGeomAction( GEOMOp::OpEdge, "EDGE" );
954 createGeomAction( GEOMOp::OpWire, "WIRE" );
955 createGeomAction( GEOMOp::OpFace, "FACE" );
956 createGeomAction( GEOMOp::OpShell, "SHELL" );
957 createGeomAction( GEOMOp::OpSolid, "SOLID" );
958 createGeomAction( GEOMOp::OpCompound, "COMPOUND" );
960 createGeomAction( GEOMOp::OpFuse, "FUSE" );
961 createGeomAction( GEOMOp::OpCommon, "COMMON" );
962 createGeomAction( GEOMOp::OpCut, "CUT" );
963 createGeomAction( GEOMOp::OpSection, "SECTION" );
965 createGeomAction( GEOMOp::OpTranslate, "TRANSLATION" );
966 createGeomAction( GEOMOp::OpRotate, "ROTATION" );
967 createGeomAction( GEOMOp::OpChangeLoc, "MODIFY_LOCATION" );
968 createGeomAction( GEOMOp::OpMirror, "MIRROR" );
969 createGeomAction( GEOMOp::OpScale, "SCALE" );
970 createGeomAction( GEOMOp::OpOffset, "OFFSET" );
971 createGeomAction( GEOMOp::OpProjection, "PROJECTION" );
972 createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
973 createGeomAction( GEOMOp::OpMultiRotate, "MUL_ROTATION" );
975 createGeomAction( GEOMOp::OpPartition, "PARTITION" );
976 createGeomAction( GEOMOp::OpArchimede, "ARCHIMEDE" );
977 createGeomAction( GEOMOp::OpFillet3d, "FILLET" );
978 createGeomAction( GEOMOp::OpChamfer, "CHAMFER" );
979 //createGeomAction( GEOMOp::OpClipping, "CLIPPING" );
980 createGeomAction( GEOMOp::OpShapesOnShape, "GET_SHAPES_ON_SHAPE" );
981 createGeomAction( GEOMOp::OpSharedShapes, "GET_SHARED_SHAPES" );
982 createGeomAction( GEOMOp::OpExtrudedCut, "EXTRUDED_CUT" );
983 createGeomAction( GEOMOp::OpExtrudedBoss, "EXTRUDED_BOSS" );
984 #ifdef DEBUG_CURVE_CREATOR
985 // for debug purposes, to be removed
986 createGeomAction( GEOMOp::OpCurveCreator, "CURVE_CREATOR" );
988 createGeomAction( GEOMOp::OpFillet1d, "FILLET_1D" );
989 createGeomAction( GEOMOp::OpFillet2d, "FILLET_2D" );
991 createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
992 createGeomAction( GEOMOp::OpExplodeBlock, "EXPLODE_BLOCKS" );
993 createGeomAction( GEOMOp::OpPropagate, "PROPAGATE" );
995 createGeomAction( GEOMOp::OpSewing, "SEWING" );
996 createGeomAction( GEOMOp::OpGlueFaces, "GLUE_FACES" );
997 createGeomAction( GEOMOp::OpGlueEdges, "GLUE_EDGES" );
998 createGeomAction( GEOMOp::OpLimitTolerance, "LIMIT_TOLERANCE" );
999 createGeomAction( GEOMOp::OpSuppressFaces, "SUPPRESS_FACES" );
1000 createGeomAction( GEOMOp::OpSuppressHoles, "SUPPERSS_HOLES" );
1001 createGeomAction( GEOMOp::OpShapeProcess, "SHAPE_PROCESS" );
1002 createGeomAction( GEOMOp::OpCloseContour, "CLOSE_CONTOUR" );
1003 createGeomAction( GEOMOp::OpRemoveIntWires, "SUPPRESS_INT_WIRES" );
1004 createGeomAction( GEOMOp::OpAddPointOnEdge, "POINT_ON_EDGE" );
1005 createGeomAction( GEOMOp::OpFreeBoundaries, "CHECK_FREE_BNDS" );
1006 createGeomAction( GEOMOp::OpFreeFaces, "CHECK_FREE_FACES" );
1007 createGeomAction( GEOMOp::OpOrientation, "CHANGE_ORIENTATION" );
1008 createGeomAction( GEOMOp::OpRemoveWebs, "REMOVE_WEBS" );
1009 createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
1010 createGeomAction( GEOMOp::OpFuseEdges, "FUSE_EDGES" );
1011 createGeomAction( GEOMOp::OpUnionFaces, "UNION_FACES" );
1013 createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
1014 createGeomAction( GEOMOp::OpProperties, "BASIC_PROPS" );
1015 createGeomAction( GEOMOp::OpCenterMass, "MASS_CENTER" );
1016 createGeomAction( GEOMOp::OpInertia, "INERTIA" );
1017 createGeomAction( GEOMOp::OpNormale, "NORMALE" );
1018 createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" );
1019 createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" );
1020 createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" );
1021 createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" );
1023 createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" );
1024 createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
1025 createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
1026 createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
1027 createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
1028 createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
1030 #ifdef _DEBUG_ // PAL16821
1031 createGeomAction( GEOMOp::OpCheckGeom, "CHECK_GEOMETRY" );
1034 createGeomAction( GEOMOp::OpMaterialsLibrary, "MATERIALS_LIBRARY" );
1035 createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
1036 createGeomAction( GEOMOp::OpDMShading, "SHADING" );
1037 createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
1038 createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
1039 createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
1040 createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
1041 createGeomAction( GEOMOp::OpShow, "DISPLAY" );
1042 createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
1043 createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true );
1044 createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true );
1045 createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true );
1046 createGeomAction( GEOMOp::OpSelectFace, "FACE_SEL_ONLY", "", 0, true );
1047 createGeomAction( GEOMOp::OpSelectShell, "SHELL_SEL_ONLY", "", 0, true );
1048 createGeomAction( GEOMOp::OpSelectSolid, "SOLID_SEL_ONLY", "", 0, true );
1049 createGeomAction( GEOMOp::OpSelectCompound, "COMPOUND_SEL_ONLY", "", 0, true );
1050 createGeomAction( GEOMOp::OpSelectAll, "ALL_SEL_ONLY", "", 0, true );
1051 createGeomAction( GEOMOp::OpShowOnly, "DISPLAY_ONLY" );
1052 createGeomAction( GEOMOp::OpShowOnlyChildren, "SHOW_ONLY_CHILDREN" );
1053 createGeomAction( GEOMOp::OpBringToFront, "BRING_TO_FRONT", "", 0, true );
1054 createGeomAction( GEOMOp::OpClsBringToFront, "CLS_BRING_TO_FRONT" );
1055 createGeomAction( GEOMOp::OpHide, "ERASE" );
1057 createGeomAction( GEOMOp::OpWireframe, "POP_WIREFRAME", "", 0, true );
1058 createGeomAction( GEOMOp::OpShading, "POP_SHADING", "", 0, true );
1059 createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
1060 createGeomAction( GEOMOp::OpTexture, "POP_TEXTURE", "", 0, true );
1061 createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH");
1062 createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
1063 createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
1064 createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
1065 createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
1066 createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
1067 createGeomAction( GEOMOp::OpTransparency, "POP_TRANSPARENCY" );
1068 createGeomAction( GEOMOp::OpIsos, "POP_ISOS" );
1069 createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
1070 createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
1071 createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
1072 createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
1073 createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
1074 createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
1075 createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
1076 createGeomAction( GEOMOp::OpPublishObject, "POP_PUBLISH_OBJ" );
1077 createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
1078 createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
1079 createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
1080 createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
1081 createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
1082 createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" );
1083 createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" );
1084 createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" );
1085 createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" );
1087 // Create actions for increase/decrease transparency shortcuts
1088 createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
1089 "Geometry:Increase transparency");
1090 createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
1091 "Geometry:Decrease transparency");
1093 // Create actions for increase/decrease number of isolines
1094 createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
1095 "Geometry:Increase number of isolines");
1096 createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
1097 "Geometry:Decrease number of isolines");
1099 // Import/Export XAO
1100 createGeomAction( GEOMOp::OpExportXAO, "EXPORTXAO" );
1101 createGeomAction( GEOMOp::OpImportXAO, "IMPORTXAO" );
1103 //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
1104 //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
1105 //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
1106 //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
1107 //@@ 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 @@//
1109 // ---- create menus --------------------------
1111 int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
1112 createMenu( separator(), fileId, 10 );
1113 createMenu( GEOMOp::OpImport, fileId, 10 );
1114 createMenu( GEOMOp::OpExport, fileId, 10 );
1115 int impexpId = createMenu( tr( "MEN_IMPORTEXPORT" ), fileId, -1, 10 );
1116 createMenu( GEOMOp::OpExportXAO, impexpId, -1 );
1117 createMenu( GEOMOp::OpImportXAO, impexpId, -1 );
1118 createMenu( separator(), fileId, -1 );
1120 int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
1121 createMenu( GEOMOp::OpDelete, editId, -1 );
1123 int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
1125 int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
1126 createMenu( GEOMOp::OpPoint, basicId, -1 );
1127 createMenu( GEOMOp::OpLine, basicId, -1 );
1128 createMenu( GEOMOp::OpCircle, basicId, -1 );
1129 createMenu( GEOMOp::OpEllipse, basicId, -1 );
1130 createMenu( GEOMOp::OpArc, basicId, -1 );
1131 createMenu( GEOMOp::OpCurve, basicId, -1 );
1132 createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
1133 createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
1134 createMenu( GEOMOp::OpIsoline, basicId, -1 );
1135 createMenu( separator(), basicId, -1 );
1136 createMenu( GEOMOp::OpVector, basicId, -1 );
1137 createMenu( GEOMOp::OpPlane, basicId, -1 );
1138 createMenu( GEOMOp::OpLCS, basicId, -1 );
1139 createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
1141 int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
1142 createMenu( GEOMOp::OpBox, primId, -1 );
1143 createMenu( GEOMOp::OpCylinder, primId, -1 );
1144 createMenu( GEOMOp::OpSphere, primId, -1 );
1145 createMenu( GEOMOp::OpTorus, primId, -1 );
1146 createMenu( GEOMOp::OpCone, primId, -1 );
1147 createMenu( GEOMOp::OpRectangle, primId, -1 );
1148 createMenu( GEOMOp::OpDisk, primId, -1 );
1149 //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
1151 int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
1152 createMenu( GEOMOp::OpPrism, genId, -1 );
1153 createMenu( GEOMOp::OpRevolution, genId, -1 );
1154 createMenu( GEOMOp::OpFilling, genId, -1 );
1155 createMenu( GEOMOp::OpPipe, genId, -1 );
1156 #if OCC_VERSION_LARGE > 0x06050300
1157 createMenu( GEOMOp::OpPipePath, genId, -1 );
1160 //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
1161 //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
1162 //@@ 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 @@//
1164 createMenu( separator(), newEntId, -1 );
1166 int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
1167 createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
1168 createMenu( GEOMOp::OpGroupEdit, groupId, -1 );
1169 createMenu( GEOMOp::OpGroupUnion, groupId, -1 );
1170 createMenu( GEOMOp::OpGroupIntersect, groupId, -1 );
1171 createMenu( GEOMOp::OpGroupCut, groupId, -1 );
1173 createMenu( separator(), newEntId, -1 );
1175 int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
1176 createMenu( GEOMOp::OpCreateField, fieldId, -1 );
1177 createMenu( GEOMOp::OpEditField, fieldId, -1 );
1179 createMenu( separator(), newEntId, -1 );
1181 int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
1182 createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
1183 createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
1184 //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
1185 //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
1187 createMenu( separator(), newEntId, -1 );
1189 createMenu( GEOMOp::OpExplode, newEntId, -1 );
1191 int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
1192 createMenu( GEOMOp::OpEdge, buildId, -1 );
1193 createMenu( GEOMOp::OpWire, buildId, -1 );
1194 createMenu( GEOMOp::OpFace, buildId, -1 );
1195 createMenu( GEOMOp::OpShell, buildId, -1 );
1196 createMenu( GEOMOp::OpSolid, buildId, -1 );
1197 createMenu( GEOMOp::OpCompound, buildId, -1 );
1199 createMenu( separator(), newEntId, -1 );
1201 createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
1203 createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
1206 int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
1208 int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
1209 createMenu( GEOMOp::OpFuse, boolId, -1 );
1210 createMenu( GEOMOp::OpCommon, boolId, -1 );
1211 createMenu( GEOMOp::OpCut, boolId, -1 );
1212 createMenu( GEOMOp::OpSection, boolId, -1 );
1214 int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
1215 createMenu( GEOMOp::OpTranslate, transId, -1 );
1216 createMenu( GEOMOp::OpRotate, transId, -1 );
1217 createMenu( GEOMOp::OpChangeLoc, transId, -1 );
1218 createMenu( GEOMOp::OpMirror, transId, -1 );
1219 createMenu( GEOMOp::OpScale, transId, -1 );
1220 createMenu( GEOMOp::OpOffset, transId, -1 );
1221 createMenu( GEOMOp::OpProjection, transId, -1 );
1222 createMenu( separator(), transId, -1 );
1223 createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
1224 createMenu( GEOMOp::OpMultiRotate, transId, -1 );
1226 int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
1227 createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
1228 createMenu( GEOMOp::OpExplodeBlock, blockId, -1 );
1229 createMenu( GEOMOp::OpPropagate, blockId, -1 );
1231 createMenu( separator(), operId, -1 );
1233 createMenu( GEOMOp::OpPartition, operId, -1 );
1234 createMenu( GEOMOp::OpArchimede, operId, -1 );
1235 createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1236 createMenu( GEOMOp::OpSharedShapes, operId, -1 );
1238 createMenu( separator(), operId, -1 );
1240 createMenu( GEOMOp::OpFillet1d, operId, -1 );
1241 createMenu( GEOMOp::OpFillet2d, operId, -1 );
1242 createMenu( GEOMOp::OpFillet3d, operId, -1 );
1243 createMenu( GEOMOp::OpChamfer, operId, -1 );
1244 createMenu( GEOMOp::OpExtrudedBoss, operId, -1 );
1245 createMenu( GEOMOp::OpExtrudedCut, operId, -1 );
1246 #ifdef DEBUG_CURVE_CREATOR
1247 // for debug purposes, to be removed
1248 createMenu( separator(), operId, -1 );
1249 createMenu( GEOMOp::OpCurveCreator, operId, -1 );
1251 //createMenu( GEOMOp::OpClipping, operId, -1 );
1253 int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1254 createMenu( GEOMOp::OpShapeProcess, repairId, -1 );
1255 createMenu( GEOMOp::OpSuppressFaces, repairId, -1 );
1256 createMenu( GEOMOp::OpCloseContour, repairId, -1 );
1257 createMenu( GEOMOp::OpRemoveIntWires, repairId, -1 );
1258 createMenu( GEOMOp::OpSuppressHoles, repairId, -1 );
1259 createMenu( GEOMOp::OpSewing, repairId, -1 );
1260 createMenu( GEOMOp::OpGlueFaces, repairId, -1 );
1261 createMenu( GEOMOp::OpGlueEdges, repairId, -1 );
1262 createMenu( GEOMOp::OpLimitTolerance, repairId, -1 );
1263 createMenu( GEOMOp::OpAddPointOnEdge, repairId, -1 );
1264 //createMenu( GEOMOp::OpFreeBoundaries, repairId, -1 );
1265 //createMenu( GEOMOp::OpFreeFaces, repairId, -1 );
1266 createMenu( GEOMOp::OpOrientation, repairId, -1 );
1267 createMenu( GEOMOp::OpRemoveWebs, repairId, -1 );
1268 createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1269 createMenu( GEOMOp::OpFuseEdges, repairId, -1 );
1270 createMenu( GEOMOp::OpUnionFaces, repairId, -1 );
1272 int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1273 createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1274 createMenu( GEOMOp::OpProperties, measurId, -1 );
1275 createMenu( separator(), measurId, -1 );
1276 createMenu( GEOMOp::OpCenterMass, measurId, -1 );
1277 createMenu( GEOMOp::OpInertia, measurId, -1 );
1278 createMenu( GEOMOp::OpNormale, measurId, -1 );
1279 createMenu( separator(), measurId, -1 );
1280 createMenu( GEOMOp::OpFreeBoundaries, measurId, -1 );
1281 createMenu( GEOMOp::OpFreeFaces, measurId, -1 );
1282 createMenu( separator(), measurId, -1 );
1284 int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1285 createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1286 createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1287 createMenu( GEOMOp::OpAngle, dimId, -1 );
1288 createMenu( GEOMOp::OpManageDimensions, dimId, -1 );
1290 createMenu( separator(), measurId, -1 );
1291 createMenu( GEOMOp::OpTolerance, measurId, -1 );
1292 createMenu( separator(), measurId, -1 );
1293 createMenu( GEOMOp::OpWhatIs, measurId, -1 );
1294 createMenu( GEOMOp::OpCheckShape, measurId, -1 );
1295 createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
1296 createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
1297 createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1299 int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1300 #if defined(_DEBUG_) || defined(_DEBUG) // PAL16821
1301 createMenu( separator(), toolsId, -1 );
1302 createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1305 createMenu( separator(), toolsId, -1 );
1306 createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
1307 createMenu( separator(), toolsId, -1 );
1309 int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1310 createMenu( separator(), viewId, -1 );
1312 int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1313 createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
1314 createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
1315 createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
1316 createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
1317 createMenu( separator(), dispmodeId, -1 );
1318 createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1320 createMenu( separator(), viewId, -1 );
1321 createMenu( GEOMOp::OpShowAll, viewId, -1 );
1322 createMenu( GEOMOp::OpHideAll, viewId, -1 );
1323 createMenu( separator(), viewId, -1 );
1324 createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1325 createMenu( separator(), viewId, -1 );
1329 because of these items are accessible through object browser and viewers
1330 we have removed they from main menu
1332 createMenu( GEOMOp::OpShow, viewId, -1 );
1333 createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1334 createMenu( GEOMOp::OpHide, viewId, -1 );
1337 // ---- create toolbars --------------------------
1339 int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1340 createTool( GEOMOp::OpPoint, basicTbId );
1341 createTool( GEOMOp::OpLine, basicTbId );
1342 createTool( GEOMOp::OpCircle, basicTbId );
1343 createTool( GEOMOp::OpEllipse, basicTbId );
1344 createTool( GEOMOp::OpArc, basicTbId );
1345 createTool( GEOMOp::OpCurve, basicTbId );
1346 createTool( GEOMOp::OpVector, basicTbId );
1347 createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1348 createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1349 createTool( GEOMOp::OpIsoline, basicTbId );
1350 createTool( GEOMOp::OpPlane, basicTbId );
1351 createTool( GEOMOp::OpLCS, basicTbId );
1352 createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1354 // int sketchTbId = createTool( tr( "TOOL_SKETCH" ) );
1355 // createTool( GEOMOp::Op2dSketcher, sketchTbId );
1356 // createTool( GEOMOp::Op3dSketcher, sketchTbId );
1358 int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1359 createTool( GEOMOp::OpBox, primTbId );
1360 createTool( GEOMOp::OpCylinder, primTbId );
1361 createTool( GEOMOp::OpSphere, primTbId );
1362 createTool( GEOMOp::OpTorus, primTbId );
1363 createTool( GEOMOp::OpCone, primTbId );
1364 createTool( GEOMOp::OpRectangle, primTbId );
1365 createTool( GEOMOp::OpDisk, primTbId );
1366 //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1368 //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ) );
1369 //createTool( GEOMOp::OpDividedDisk, blocksTbId );
1370 //createTool( GEOMOp::OpDividedCylinder, blocksTbId );
1372 int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1373 createTool( GEOMOp::OpFuse, boolTbId );
1374 createTool( GEOMOp::OpCommon, boolTbId );
1375 createTool( GEOMOp::OpCut, boolTbId );
1376 createTool( GEOMOp::OpSection, boolTbId );
1378 int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1379 createTool( GEOMOp::OpPrism, genTbId );
1380 createTool( GEOMOp::OpRevolution, genTbId );
1381 createTool( GEOMOp::OpFilling, genTbId );
1382 createTool( GEOMOp::OpPipe, genTbId );
1383 #if OCC_VERSION_LARGE > 0x06050300
1384 createTool( GEOMOp::OpPipePath, genTbId );
1387 int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1388 createTool( GEOMOp::OpTranslate, transTbId );
1389 createTool( GEOMOp::OpRotate, transTbId );
1390 createTool( GEOMOp::OpChangeLoc, transTbId );
1391 createTool( GEOMOp::OpMirror, transTbId );
1392 createTool( GEOMOp::OpScale, transTbId );
1393 createTool( GEOMOp::OpOffset, transTbId );
1394 createTool( GEOMOp::OpProjection, transTbId );
1395 createTool( separator(), transTbId );
1396 createTool( GEOMOp::OpMultiTranslate, transTbId );
1397 createTool( GEOMOp::OpMultiRotate, transTbId );
1399 int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1400 createTool( GEOMOp::OpExplode, operTbId );
1401 createTool( GEOMOp::OpPartition, operTbId );
1402 createTool( GEOMOp::OpArchimede, operTbId );
1403 createTool( GEOMOp::OpShapesOnShape, operTbId );
1404 createTool( GEOMOp::OpSharedShapes, operTbId );
1406 int featTbId = createTool( tr( "TOOL_FEATURES" ) );
1407 createTool( GEOMOp::OpFillet1d, featTbId );
1408 createTool( GEOMOp::OpFillet2d, featTbId );
1409 createTool( GEOMOp::OpFillet3d, featTbId );
1410 createTool( GEOMOp::OpChamfer, featTbId );
1411 createTool( GEOMOp::OpExtrudedBoss, featTbId );
1412 createTool( GEOMOp::OpExtrudedCut, featTbId );
1413 #ifdef DEBUG_CURVE_CREATOR
1414 // for debug purposes, to be removed
1415 createTool( GEOMOp::OpCurveCreator, featTbId );
1418 int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1419 createTool( GEOMOp::OpEdge, buildTbId );
1420 createTool( GEOMOp::OpWire, buildTbId );
1421 createTool( GEOMOp::OpFace, buildTbId );
1422 createTool( GEOMOp::OpShell, buildTbId );
1423 createTool( GEOMOp::OpSolid, buildTbId );
1424 createTool( GEOMOp::OpCompound, buildTbId );
1426 int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1427 createTool( GEOMOp::OpPointCoordinates, measureTbId );
1428 createTool( GEOMOp::OpProperties, measureTbId );
1429 createTool( GEOMOp::OpCenterMass, measureTbId );
1430 createTool( GEOMOp::OpInertia, measureTbId );
1431 createTool( GEOMOp::OpNormale, measureTbId );
1432 createTool( separator(), measureTbId );
1433 createTool( GEOMOp::OpBoundingBox, measureTbId );
1434 createTool( GEOMOp::OpMinDistance, measureTbId );
1435 createTool( GEOMOp::OpAngle, measureTbId );
1436 createTool( GEOMOp::OpTolerance , measureTbId );
1437 createTool( separator(), measureTbId );
1438 createTool( GEOMOp::OpFreeBoundaries, measureTbId );
1439 createTool( GEOMOp::OpFreeFaces, measureTbId );
1440 createTool( separator(), measureTbId );
1441 createTool( GEOMOp::OpWhatIs, measureTbId );
1442 createTool( GEOMOp::OpCheckShape, measureTbId );
1443 createTool( GEOMOp::OpCheckCompound, measureTbId );
1444 createTool( GEOMOp::OpGetNonBlocks, measureTbId );
1445 createTool( GEOMOp::OpCheckSelfInters, measureTbId );
1447 int picturesTbId = createTool( tr( "TOOL_PICTURES" ) );
1448 createTool( GEOMOp::OpPictureImport, picturesTbId );
1450 createTool( GEOMOp::OpFeatureDetect, picturesTbId );
1453 int impexpTbId = createTool( tr( "TOOL_IMPORTEXPORT" ) );
1454 createTool( GEOMOp::OpExportXAO, impexpTbId );
1455 createTool( GEOMOp::OpImportXAO, impexpTbId );
1457 //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1458 //createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
1459 //@@ 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 @@//
1461 // ---- create popup menus --------------------------
1463 QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1464 QString clientOCC = "(client='OCCViewer')";
1465 QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1466 QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1468 QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1469 QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1470 QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1471 QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1473 QString autoColorPrefix =
1474 "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1476 QtxPopupMgr* mgr = popupMgr();
1478 mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
1479 mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1480 mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1481 mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1482 mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
1483 mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
1484 mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
1485 mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
1487 mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
1488 mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
1489 mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
1490 mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1491 mgr->insert( separator(), -1, -1 ); // -----------
1493 #if OCC_VERSION_LARGE > 0x06050200
1494 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1495 QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true";
1496 mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1497 mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1498 mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1499 mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1500 mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
1502 mgr->insert( separator(), -1, -1 ); // -----------
1503 dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1504 mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1505 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1506 mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1507 mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1508 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1509 mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1510 mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1511 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1512 mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1513 mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1514 mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1515 mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1516 mgr->insert( separator(), dispmodeId, -1 );
1517 mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1518 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1519 mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1520 mgr->insert( separator(), -1, -1 ); // -----------
1522 mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
1523 mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
1524 mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
1525 mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1526 mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos
1527 mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1528 mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection
1529 mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1530 mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1531 //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1532 mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1534 // material properties
1535 mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
1536 mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1539 mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 );
1540 mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1542 int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1543 mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1544 mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1546 mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1547 mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1549 mgr->insert( separator(), -1, -1 ); // -----------
1550 mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1551 mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1552 mgr->insert( action( GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1553 mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1554 mgr->insert( separator(), -1, -1 ); // -----------
1556 QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1557 onlyComponent = "((type='Component') and selcount=1)",
1558 rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1559 types = "'Shape' 'Group' 'FieldStep'";
1561 mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
1562 mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1564 mgr->insert( action( GEOMOp::OpHide ), -1, -1 ); // erase
1565 mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1567 mgr->insert( action( GEOMOp::OpHideAll ), -1, -1 ); // erase All
1568 mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1570 QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1572 int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1); //select only menu
1573 mgr->insert( action(GEOMOp::OpSelectVertex), selectonlyId, -1); //Vertex
1574 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly, QtxPopupMgr::VisibleRule);
1575 mgr->setRule(action(GEOMOp::OpSelectVertex), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1576 mgr->insert( action(GEOMOp::OpSelectEdge), selectonlyId, -1); //Edge
1577 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly, QtxPopupMgr::VisibleRule);
1578 mgr->setRule(action(GEOMOp::OpSelectEdge), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1579 mgr->insert( action(GEOMOp::OpSelectWire), selectonlyId, -1); //Wire
1580 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly, QtxPopupMgr::VisibleRule);
1581 mgr->setRule(action(GEOMOp::OpSelectWire), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1582 mgr->insert( action(GEOMOp::OpSelectFace), selectonlyId, -1); //Face
1583 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly, QtxPopupMgr::VisibleRule);
1584 mgr->setRule(action(GEOMOp::OpSelectFace), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1585 mgr->insert( action(GEOMOp::OpSelectShell), selectonlyId, -1); //Shell
1586 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly, QtxPopupMgr::VisibleRule);
1587 mgr->setRule(action(GEOMOp::OpSelectShell), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1588 mgr->insert( action(GEOMOp::OpSelectSolid), selectonlyId, -1); //Solid
1589 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly, QtxPopupMgr::VisibleRule);
1590 mgr->setRule(action(GEOMOp::OpSelectSolid), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1591 mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1); //Compound
1592 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1593 mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1594 mgr->insert( separator(), selectonlyId, -1);
1595 mgr->insert( action(GEOMOp::OpSelectAll), selectonlyId, -1); //Clear selection filter
1596 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly, QtxPopupMgr::VisibleRule);
1597 mgr->setRule(action(GEOMOp::OpSelectAll), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1598 mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1599 mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1600 mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children
1601 mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule );
1603 QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1";
1605 mgr->insert( separator(), -1, -1 ); // -----------
1606 mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions
1607 mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule );
1608 mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions
1609 mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule );
1611 mgr->insert( separator(), -1, -1 ); // -----------
1612 mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1613 mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
1615 mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1616 mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1618 mgr->insert( action( GEOMOp::OpReimport ), -1, -1 ); // delete
1619 mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1621 mgr->insert( separator(), -1, -1 ); // -----------
1622 mgr->insert( action( GEOMOp::OpCreateFolder ), -1, -1 ); // Create Folder
1623 mgr->setRule( action( GEOMOp::OpCreateFolder ), QString("client='ObjectBrowser' and $component={'GEOM'} and (isComponent=true or isFolder=true)"), QtxPopupMgr::VisibleRule );
1625 mgr->insert( separator(), -1, -1 ); // -----------
1626 mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items
1627 mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule );
1629 mgr->insert( separator(), -1, -1 ); // -----------
1630 mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree
1631 mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1633 mgr->insert( separator(), -1, -1 ); // -----------
1634 mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study
1635 mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule );
1637 mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1639 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1641 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)resMgr->integerValue("Geometry", "toplevel_dm", 0));
1642 QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
1643 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
1646 // create plugin actions and menus
1650 //=======================================================================
1651 // function : GeometryGUI::addPluginActions()
1653 //=======================================================================
1654 void GeometryGUI::addPluginActions()
1657 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1658 if (!resMgr) return;
1660 // Find names of a resource XML files ("GEOMActions.xml" and others);
1662 char* cenv = getenv("GEOM_PluginsList");
1664 PluginsXml.sprintf("%s", cenv);
1666 QStringList PluginsXmlList = PluginsXml.split(":", QString::SkipEmptyParts);
1667 if (PluginsXmlList.count() == 0) return;
1669 // get full names of xml files from PluginsXmlList
1670 QStringList xmlFiles;
1671 xmlFiles.append(QDir::home().filePath("CustomGeomPlugins.xml")); // may be inexistent
1672 for (int i = 0; i < PluginsXmlList.count(); i++) {
1673 PluginsXml = PluginsXmlList[ i ];
1675 // Find full path to the resource XML file
1676 QString xmlFile = resMgr->path("resources", "GEOM", PluginsXml + ".xml");
1677 if ( xmlFile.isEmpty() ) // try PLUGIN resources
1678 xmlFile = resMgr->path("resources", PluginsXml, PluginsXml + ".xml");
1679 if ( !xmlFile.isEmpty() )
1680 xmlFiles.append( xmlFile );
1683 // create "Advanced Operations" menu and corresponding toolbar
1684 //int advancedMenuId = createMenu(tr("MEN_ADVANCED"), -1, -1, 10);
1685 //int advancedTbarId = createTool(tr("TOOL_ADVANCED"));
1686 int id = GEOMOp::OpLastOperationID; // TODO?
1689 QString aNoAccessFiles;
1690 for (int i = 0; i < xmlFiles.count(); i++) {
1691 QString xmlFile = xmlFiles[ i ];
1693 QFile file (xmlFile);
1694 if (file.exists() && file.open(QIODevice::ReadOnly)) {
1697 GEOMGUI_XmlHandler* aXmlHandler = new GEOMGUI_XmlHandler();
1698 ASSERT(aXmlHandler);
1700 QXmlInputSource source (&file);
1701 QXmlSimpleReader reader;
1702 reader.setContentHandler(aXmlHandler);
1703 reader.setErrorHandler(aXmlHandler);
1704 bool ok = reader.parse(source);
1708 // bind action lib and label to its ID for activateOperation() method proper work
1709 myPluginLibs[aXmlHandler->myPluginData.myName] = aXmlHandler->myPluginData.myClientLib;
1711 QListIterator<GEOMGUI_ActionData> anActionsIter (aXmlHandler->myPluginData.myListOfActions);
1712 while (anActionsIter.hasNext()) {
1713 GEOMGUI_ActionData anActionData = anActionsIter.next();
1715 //QPixmap icon = resMgr->loadPixmap("GEOM", tr(anActionData.myIcon.toLatin1().constData()));
1716 QPixmap icon = resMgr->loadPixmap(aXmlHandler->myPluginData.myName,
1717 anActionData.myIcon.toLatin1().constData());
1719 // path to action in menu
1720 QStringList smenus = anActionData.myMenu.split( "/" );
1721 QString actionName = smenus.last();
1722 actionName = actionName.toUpper().prepend("MEN_");
1723 smenus.removeLast();
1725 // path to action in toolbar
1726 QStringList stools = anActionData.myTooltip.split( "/" );
1727 QString actionTool = stools.last();
1728 actionTool = actionTool.toUpper().prepend("TOP_");
1729 stools.removeLast();
1731 QString actionStat = anActionData.myStatusBar;
1732 actionStat = actionStat.toUpper().prepend("STB_");
1734 createAction(id, // ~ anActionData.myLabel
1735 tr(actionTool.toLatin1().constData()),
1737 tr(actionName.toLatin1().constData()),
1738 tr(actionStat.toLatin1().constData()),
1740 application()->desktop(),
1742 this, SLOT(OnGUIEvent()),
1743 QString() /*shortcutAction*/);
1746 foreach (QString subMenu, smenus) {
1747 subMenu = subMenu.toUpper().prepend("MEN_");
1748 menuId = createMenu(tr(subMenu.toLatin1().constData()), menuId, -1);
1750 //createMenu(id, pluginMenuId, -1);
1751 createMenu(id, menuId, -1);
1753 QString subTool = stools[0];
1754 subTool = subTool.toUpper().prepend("TOOL_");
1755 int toolId = createTool(tr(subTool.toLatin1().constData()));
1756 //createTool(id, advancedTbarId);
1757 createTool(id, toolId);
1759 // add action id to map
1760 PluginAction anAction (aXmlHandler->myPluginData.myClientLib, anActionData.myLabel);
1761 myPluginActions[id] = anAction;
1767 SUIT_MessageBox::critical(application()->desktop(),
1768 tr("INF_PARSE_ERROR"),
1769 tr(aXmlHandler->errorProtocol().toLatin1().data()));
1773 else if ( i > 0 ) { // 1st is ~/CustomGeomPlugins.xml
1774 if (aNoAccessFiles.isEmpty())
1775 aNoAccessFiles = xmlFile;
1777 aNoAccessFiles += ", " + xmlFile;
1779 } // end loop on xmlFiles
1781 if (!aNoAccessFiles.isEmpty()) {
1782 QString aMess = QObject::tr("PLUGIN_FILE_CANT_OPEN") + " " + aNoAccessFiles + "\n";
1783 aMess += QObject::tr("PLUGIN_FILE_CHECK_VARIABLE");
1784 SUIT_MessageBox::warning(application()->desktop(), tr("GEOM_WRN_WARNING"), aMess);
1788 //=======================================================================
1789 // function : GeometryGUI::activateModule()
1790 // purpose : Called when GEOM module is activated
1791 //=======================================================================
1792 bool GeometryGUI::activateModule( SUIT_Study* study )
1794 if ( CORBA::is_nil( myComponentGeom ) )
1797 bool res = SalomeApp_Module::activateModule( study );
1801 setMenuShown( true );
1802 setToolShown( true );
1804 // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1805 PyGILState_STATE gstate = PyGILState_Ensure();
1806 PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1807 if ( !pluginsmanager ) {
1811 PyObjWrapper result =
1812 PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
1813 tr("MEN_NEW_ENTITY").toStdString().c_str(),
1814 tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1818 PyGILState_Release(gstate);
1819 // end of GEOM plugins loading
1821 connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1822 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1824 // Reset actions accelerator keys
1825 action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1826 action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1827 action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1829 GUIMap::Iterator it;
1830 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1831 it.value()->activate( application()->desktop() );
1833 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1835 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1836 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() ));
1837 connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1839 if ( !myCreationInfoWdg )
1840 myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() );
1841 getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg );
1842 getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1844 SUIT_ViewManager* vm;
1845 ViewManagerList OCCViewManagers, VTKViewManagers;
1847 application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1848 QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1849 while ( itOCC.hasNext() && (vm = itOCC.next()) )
1850 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1852 application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1853 QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1854 while ( itVTK.hasNext() && (vm = itVTK.next()) )
1855 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1858 SALOME_ListIO selected;
1859 sm->selectedObjects( selected );
1860 sm->clearSelected();
1862 // disable OCC selectors
1863 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1864 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1865 while ( itOCCSel.hasNext() )
1866 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1867 sr->setEnabled(true);
1869 // disable VTK selectors
1870 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1871 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1872 while ( itVTKSel.hasNext() )
1873 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1874 sr->setEnabled(true);
1876 sm->setSelectedObjects( selected, true ); //NPAL 19674
1878 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1880 connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1882 // 0020836 (Basic vectors and origin)
1883 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1884 if ( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1885 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1887 _PTR(Study) studyDS = appStudy->studyDS();
1889 _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1890 if ( !aSComponent ) // create objects automatically only if there is no GEOM component
1891 createOriginAndBaseVectors();
1899 //=======================================================================
1900 // function : GeometryGUI::deactivateModule()
1901 // purpose : Called when GEOM module is deactivated
1902 //=======================================================================
1903 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1905 QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1907 disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1909 setMenuShown( false );
1910 setToolShown( false );
1912 disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1913 this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1915 LightApp_SelectionMgr* selMrg = getApp()->selectionMgr();
1917 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() ));
1918 disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() ));
1919 getApp()->removeDockWindow( myCreationInfoWdg->getWinID() );
1920 myCreationInfoWdg = 0;
1922 EmitSignalCloseAllDialogs();
1924 GUIMap::Iterator it;
1925 for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1926 it.value()->deactivate();
1928 // Unset actions accelerator keys
1929 action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1930 action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1931 action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1933 qDeleteAll(myOCCSelectors);
1934 myOCCSelectors.clear();
1935 selMrg->setEnabled( true, OCCViewer_Viewer::Type() );
1937 qDeleteAll(myVTKSelectors);
1938 myVTKSelectors.clear();
1939 selMrg->setEnabled( true, SVTK_Viewer::Type() );
1941 return SalomeApp_Module::deactivateModule( study );
1944 //=======================================================================
1945 // function : onWindowActivated()
1946 // purpose : update menu items' status - disable non-OCC-viewer-compatible actions
1947 //=======================================================================
1948 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1953 const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1954 //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1956 // disable non-OCC viewframe menu commands
1957 // action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1958 action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1959 action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1960 action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1961 action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1962 action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1963 // action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1965 action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1966 action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1967 action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
1968 action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
1970 action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1973 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1975 mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1976 mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea );
1977 mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1978 if ( myCreationInfoWdg )
1979 mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea );
1982 void GeometryGUI::viewManagers( QStringList& lst ) const
1984 lst.append( OCCViewer_Viewer::Type() );
1987 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1989 if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1991 qDebug( "connect" );
1992 connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
1993 this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1994 connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1995 this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1996 connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1997 this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1998 connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1999 this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
2001 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2002 myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
2004 // disable OCC selectors
2005 getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
2006 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2007 while ( itOCCSel.hasNext() )
2008 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2009 sr->setEnabled(true);
2011 else if ( vm->getType() == SVTK_Viewer::Type() )
2013 LightApp_SelectionMgr* sm = getApp()->selectionMgr();
2014 myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
2016 // disable VTK selectors
2017 getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
2018 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2019 while ( itVTKSel.hasNext() )
2020 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2021 sr->setEnabled(true);
2025 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
2027 SUIT_ViewModel* viewer = vm->getViewModel();
2028 if ( vm->getType() == OCCViewer_Viewer::Type() )
2030 QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
2031 while ( itOCCSel.hasNext() )
2032 if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
2033 if ( sr->viewer() == viewer )
2035 /*delete*/ myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
2039 if ( vm->getType() == SVTK_Viewer::Type() )
2041 QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
2042 while ( itVTKSel.hasNext() )
2043 if ( LightApp_VTKSelector* sr = itVTKSel.next() )
2044 if ( sr->viewer() == viewer )
2046 /*delete*/ myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
2052 //================================================================================
2054 * \brief Slot called when selection changed. Shows creation info of a selected object
2056 //================================================================================
2058 void GeometryGUI::updateCreationInfo()
2060 if ( myCreationInfoWdg )
2061 myCreationInfoWdg->clear();
2063 // Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
2064 // if ( !myCreationInfoWdg->isVisible() )
2067 // look for a sole selected GEOM_Object
2068 GEOM::GEOM_BaseObject_var geomObj;
2070 SALOME_ListIO selected;
2071 getApp()->selectionMgr()->selectedObjects( selected );
2073 _PTR(Study) study = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() )->studyDS();
2074 SALOME_ListIteratorOfListIO selIt( selected );
2075 for ( ; selIt.More(); selIt.Next() )
2077 Handle(SALOME_InteractiveObject) io = selIt.Value();
2078 if ( !io->hasEntry() ) continue;
2079 _PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
2080 if ( !sobj ) continue;
2081 CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
2082 GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
2083 if ( !gobj->_is_nil() )
2085 if ( !geomObj->_is_nil() )
2086 return; // several GEOM objects selected
2090 if ( geomObj->_is_nil() ) return;
2092 // pass creation info of geomObj to myCreationInfoWdg
2094 if ( myCreationInfoWdg ) {
2096 QString operationName;
2097 myCreationInfoWdg->setOperation( icon, operationName );
2101 GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
2103 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2104 QString name = info->operationName.in();
2105 if ( !name.isEmpty() ) {
2106 icon = resMgr->loadPixmap( "GEOM", tr( ("ICO_"+name).toLatin1().constData() ), false );
2107 operationName = tr( ("MEN_"+name).toLatin1().constData() );
2108 if ( operationName.startsWith( "MEN_" ))
2109 operationName = name; // no translation
2110 myCreationInfoWdg->setOperation( icon, operationName );
2112 for ( size_t i = 0; i < info->params.length(); ++i )
2113 myCreationInfoWdg->addParam( info->params[i].name.in(),
2114 info->params[i].value.in() );
2123 void GeometryGUI::onAutoBringToFront()
2125 bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front" );
2126 if( !isAutoBringToFront )
2129 SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow();
2130 if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() )
2133 SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
2134 if (!appStudy) return;
2136 GEOM_Displayer displayer( appStudy );
2138 SALOME_View* window = displayer.GetActiveView();
2139 if ( !window ) return;
2141 int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId();
2143 SALOME_ListIO selected;
2144 getApp()->selectionMgr()->selectedObjects( selected );
2145 if (!myTopLevelIOList.IsEmpty())
2147 for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
2149 Handle( SALOME_InteractiveObject ) io = It.Value();
2150 bool isSelected = false;
2151 for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
2153 Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value();
2154 if( io->isSame( sel_io ) )
2157 if (!isSelected && appStudy->findObjectByEntry(io->getEntry()))
2159 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false );
2160 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2165 myTopLevelIOList.Assign(selected);
2166 for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
2168 Handle( SALOME_InteractiveObject ) io = It.Value();
2169 appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true );
2170 if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
2173 displayer.UpdateViewer();
2174 GeometryGUI::Modified();
2177 void GeometryGUI::updateFieldColorScale()
2179 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2181 GEOM_Displayer aDisplayer( aStudy );
2182 aDisplayer.UpdateColorScale();
2186 QString GeometryGUI::engineIOR() const
2188 if ( !CORBA::is_nil( GetGeomGen() ) )
2189 return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
2193 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2194 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
2196 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
2198 (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
2200 theWidth = theHeight = 0;
2202 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2203 Handle(TColStd_HArray1OfByte) aTexture;
2205 Handle(Graphic3d_HArray1OfBytes) aTexture;
2209 TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
2210 aTexture = aTextureMap[ theId ];
2211 if ( aTexture.IsNull() ) {
2212 GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
2213 if ( !aInsOp->_is_nil() ) {
2214 CORBA::Long aWidth, aHeight;
2215 SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
2216 if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
2218 theHeight = aHeight;
2220 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
2221 aTexture = new TColStd_HArray1OfByte (1, aStream->length());
2223 aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length());
2226 for (int i = 0; i < aStream->length(); i++)
2227 aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
2228 aTextureMap[ theId ] = aTexture;
2236 LightApp_Selection* GeometryGUI::createSelection() const
2238 return new GEOMGUI_Selection();
2241 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
2243 SalomeApp_Module::contextMenuPopup( client, menu, title );
2245 getApp()->selectionMgr()->selectedObjects( lst );
2247 //Add submenu for predefined materials
2248 bool isPredefMat = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "predef_materials" );
2249 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() > 0 ) {
2250 QtxPopupMgr* mgr = popupMgr();
2251 //get parrent for submenu
2252 QAction* act = mgr->action( mgr->actionId( action( GEOMOp::OpMaterialProperties ) ) );
2254 QMenu* oldMenu = act->menu() ;
2259 QMenu* matMenu = new QMenu();
2260 QSignalMapper* signalMapper = new QSignalMapper( matMenu );
2262 //Get current material model for the object
2264 LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
2265 if ( anApp && anApp->activeViewManager() ) {
2266 LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
2268 v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
2271 QString curModel = "";
2272 if ( v.canConvert<QString>() ) curModel = v.toString();
2273 // get list of all predefined materials
2274 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
2276 foreach ( QString material, materials )
2278 QAction* menAct = matMenu->addAction( material );
2279 connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
2280 signalMapper->setMapping( menAct, material );
2281 menAct->setCheckable( true );
2282 // Set checked if this material is current
2283 Material_Model aModel;
2284 aModel.fromResources( material );
2285 if ( !found && aModel.toProperties() == curModel ) {
2286 menAct->setChecked( true );
2290 matMenu->insertAction( matMenu->addSeparator(), action( GEOMOp::OpPredefMaterCustom ) );
2291 matMenu->insertSeparator( action( GEOMOp::OpPredefMaterCustom ) );
2292 connect( signalMapper, SIGNAL( mapped( const QString & ) ),
2293 this, SLOT( OnSetMaterial( const QString & ) ) );
2294 act->setMenu( matMenu );
2298 if ( ( client == "OCCViewer" || client == "VTKViewer" ) && lst.Extent() == 1 ) {
2299 Handle(SALOME_InteractiveObject) io = lst.First();
2300 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
2301 _PTR(Study) study = appStudy->studyDS();
2302 _PTR(SObject) obj = study->FindObjectID( io->getEntry() );
2304 QString aName = QString( obj->GetName().c_str() );
2305 aName.remove( QRegExp("\\s+$") );
2311 void GeometryGUI::OnSetMaterial(const QString& theName)
2313 OnGUIEvent( GEOMOp::OpPredefMaterial, QVariant( theName ) );
2317 void GeometryGUI::createPreferences()
2319 int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
2321 int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
2322 setPreferenceProperty( genGroup, "columns", 2 );
2324 int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
2325 LightApp_Preferences::Selector,
2326 "Geometry", "display_mode" );
2328 addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
2329 LightApp_Preferences::Color, "Geometry", "shading_color" );
2331 addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
2332 LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
2334 addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
2335 LightApp_Preferences::Color, "Geometry", "wireframe_color" );
2337 addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
2338 LightApp_Preferences::Color, "Geometry", "free_bound_color" );
2340 addPreference( tr( "PREF_LINE_COLOR"), genGroup,
2341 LightApp_Preferences::Color, "Geometry", "line_color" );
2343 addPreference( tr( "PREF_POINT_COLOR"), genGroup,
2344 LightApp_Preferences::Color, "Geometry", "point_color" );
2346 addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
2347 LightApp_Preferences::Color, "Geometry", "isos_color" );
2349 addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
2350 LightApp_Preferences::Color, "Geometry", "toplevel_color" );
2352 int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup,
2353 LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
2355 int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
2356 LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
2358 int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
2359 LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
2361 addPreference( tr( "PREF_PREDEF_MATERIALS" ), genGroup,
2362 LightApp_Preferences::Bool, "Geometry", "predef_materials" );
2364 int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
2365 LightApp_Preferences::Selector,
2366 "Geometry", "material" );
2368 addPreference( tr( "PREF_EDITGROUP_COLOR" ), genGroup,
2369 LightApp_Preferences::Color, "Geometry", "editgroup_color" );
2375 wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
2376 LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
2378 wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
2379 LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
2381 wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
2382 LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
2384 wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
2385 LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
2387 for (int i = 0; i < nb; i++) {
2388 setPreferenceProperty( wd[i], "min", 1 );
2389 setPreferenceProperty( wd[i], "max", 5 );
2392 addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup,
2393 LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" );
2395 int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId );
2396 setPreferenceProperty( aDimGroupId, "columns", 2 );
2398 addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId,
2399 LightApp_Preferences::Color, "Geometry", "dimensions_color" );
2401 int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId,
2402 LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" );
2404 setPreferenceProperty( aDimLineWidthId, "min", 1 );
2405 setPreferenceProperty( aDimLineWidthId, "max", 5 );
2407 int aDimFontHeightId = addPreference( tr( "PREF_DIMENSIONS_FONT_HEIGHT" ), aDimGroupId,
2408 LightApp_Preferences::DblSpin, "Geometry", "dimensions_font_height" );
2410 setPreferenceProperty( aDimFontHeightId, "min", 1e-9 );
2411 setPreferenceProperty( aDimFontHeightId, "max", 1e+9 );
2412 setPreferenceProperty( aDimFontHeightId, "precision", 9 );
2414 int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId,
2415 LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" );
2417 setPreferenceProperty( aDimArrLengthId, "min", 1e-9 );
2418 setPreferenceProperty( aDimArrLengthId, "max", 1e+9 );
2419 setPreferenceProperty( aDimArrLengthId, "precision", 9 );
2421 int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId,
2422 LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" );
2424 int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId,
2425 LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" );
2427 addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId,
2428 LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" );
2430 QStringList aListOfLengthUnits;
2431 aListOfLengthUnits << "m";
2432 aListOfLengthUnits << "cm";
2433 aListOfLengthUnits << "mm";
2434 aListOfLengthUnits << "in.";
2435 aListOfLengthUnits << "ft.";
2437 QStringList aListOfAngUnits;
2438 aListOfAngUnits << "rad";
2439 aListOfAngUnits << "deg";
2441 setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits );
2442 setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits );
2444 int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId,
2445 LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" );
2447 setPreferenceProperty( aDimDefFlyout, "min", 1e-9 );
2448 setPreferenceProperty( aDimDefFlyout, "max", 1e+9 );
2449 setPreferenceProperty( aDimDefFlyout, "precision", 9 );
2451 int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId );
2452 setPreferenceProperty( isoGroup, "columns", 2 );
2453 int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup,
2454 LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
2455 setPreferenceProperty( isoU, "min", 0 );
2456 setPreferenceProperty( isoU, "max", 100000 );
2457 int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
2458 LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
2459 setPreferenceProperty( isoV, "min", 0 );
2460 setPreferenceProperty( isoV, "max", 100000 );
2462 // Quantities with individual precision settings
2463 int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
2464 setPreferenceProperty( precGroup, "columns", 2 );
2466 const int nbQuantities = 8;
2467 int prec[nbQuantities], ii = 0;
2468 prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
2469 LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
2470 prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
2471 LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
2472 prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
2473 LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
2474 prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
2475 LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
2476 prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
2477 LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
2478 prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
2479 LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
2480 prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
2481 LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
2482 prec[ii ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
2483 LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
2485 // Set property for precision value for spinboxes
2486 for ( ii = 0; ii < nbQuantities; ii++ ){
2487 setPreferenceProperty( prec[ii], "min", -14 );
2488 setPreferenceProperty( prec[ii], "max", 14 );
2489 setPreferenceProperty( prec[ii], "precision", 2 );
2492 int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
2493 setPreferenceProperty( VertexGroup, "columns", 2 );
2495 int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
2496 LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
2498 int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
2499 LightApp_Preferences::Selector, "Geometry", "marker_scale" );
2501 // Set property for default display mode
2502 QStringList aModesList;
2503 aModesList.append( tr("MEN_WIREFRAME") );
2504 aModesList.append( tr("MEN_SHADING") );
2505 aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2506 aModesList.append( tr("MEN_TEXTURE") );
2508 QList<QVariant> anIndexesList;
2509 anIndexesList.append(0);
2510 anIndexesList.append(1);
2511 anIndexesList.append(2);
2512 anIndexesList.append(3);
2514 setPreferenceProperty( dispmode, "strings", aModesList );
2515 setPreferenceProperty( dispmode, "indexes", anIndexesList );
2517 // Set property for top level display mode
2518 QStringList aTopModesList;
2519 aTopModesList.append( tr("MEN_SHOW_ADD_WACTOR") );
2520 aTopModesList.append( tr("MEN_KEEP_CURRENT_DM") );
2521 aTopModesList.append( tr("MEN_WIREFRAME") );
2522 aTopModesList.append( tr("MEN_SHADING") );
2523 aTopModesList.append( tr("MEN_SHADING_WITH_EDGES") );
2525 QList<QVariant> aTopIndexesList;
2526 aTopIndexesList.append(0);
2527 aTopIndexesList.append(1);
2528 aTopIndexesList.append(2);
2529 aTopIndexesList.append(3);
2530 aTopIndexesList.append(4);
2532 setPreferenceProperty( top_lev_dm, "strings", aTopModesList );
2533 setPreferenceProperty( top_lev_dm, "indexes", aTopIndexesList );
2535 // Set property for step value for spinboxes
2536 setPreferenceProperty( step, "min", 1 );
2537 setPreferenceProperty( step, "max", 10000 );
2538 setPreferenceProperty( step, "precision", 3 );
2540 // Set property for deflection value for spinboxes
2541 setPreferenceProperty( defl, "min", GEOM::minDeflection() );
2542 setPreferenceProperty( defl, "max", 1.0 );
2543 setPreferenceProperty( defl, "step", 1.0e-04 );
2544 setPreferenceProperty( defl, "precision", 6 );
2546 // Set property for default material
2547 setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
2549 // Set property vertex marker type
2550 QList<QVariant> aMarkerTypeIndicesList;
2551 QList<QVariant> aMarkerTypeIconsList;
2553 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
2554 for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
2555 QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
2556 QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
2557 aMarkerTypeIndicesList << (i-1);
2558 aMarkerTypeIconsList << pixmap;
2561 setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
2562 setPreferenceProperty( typeOfMarker, "icons", aMarkerTypeIconsList );
2564 // Set property for vertex marker scale
2565 QList<QVariant> aMarkerScaleIndicesList;
2566 QStringList aMarkerScaleValuesList;
2568 for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
2569 aMarkerScaleIndicesList << iii;
2570 aMarkerScaleValuesList << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
2573 setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
2574 setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
2576 // Scalar bar for field step presentation
2577 int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId );
2578 setPreferenceProperty( scalarBarGroup, "columns", 2 );
2580 int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup,
2581 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" );
2582 setPreferenceProperty( sbXPosition, "min", 0 );
2583 setPreferenceProperty( sbXPosition, "max", 1 );
2584 setPreferenceProperty( sbXPosition, "step", 0.05 );
2586 int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup,
2587 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" );
2588 setPreferenceProperty( sbYPosition, "min", 0 );
2589 setPreferenceProperty( sbYPosition, "max", 1 );
2590 setPreferenceProperty( sbYPosition, "step", 0.05 );
2592 int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup,
2593 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" );
2594 setPreferenceProperty( sbWidth, "min", 0 );
2595 setPreferenceProperty( sbWidth, "max", 1 );
2596 setPreferenceProperty( sbWidth, "step", 0.05 );
2598 int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup,
2599 LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" );
2600 setPreferenceProperty( sbHeight, "min", 0 );
2601 setPreferenceProperty( sbHeight, "max", 1 );
2602 setPreferenceProperty( sbHeight, "step", 0.05 );
2604 int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup,
2605 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" );
2606 setPreferenceProperty( sbTextHeight, "min", 6 );
2607 setPreferenceProperty( sbTextHeight, "max", 24 );
2608 setPreferenceProperty( sbTextHeight, "step", 1 );
2610 int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup,
2611 LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" );
2612 setPreferenceProperty( sbNbIntervals, "min", 2 );
2613 setPreferenceProperty( sbNbIntervals, "max", 64 );
2614 setPreferenceProperty( sbNbIntervals, "step", 1 );
2616 int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
2617 setPreferenceProperty( originGroup, "columns", 2 );
2619 int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
2620 LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
2621 setPreferenceProperty( baseVectorsLength, "min", 0.01 );
2622 setPreferenceProperty( baseVectorsLength, "max", 1000 );
2624 addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
2625 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
2627 int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
2628 setPreferenceProperty( operationsGroup, "columns", 2 );
2630 addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
2631 LightApp_Preferences::Bool, "Geometry", "geom_preview" );
2633 int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) );
2635 int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId );
2637 int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup,
2638 LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" );
2640 QStringList aHierarchyTypeList;
2641 aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") );
2642 aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") );
2643 aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") );
2645 QList<QVariant> aHierarchyTypeIndexesList;
2646 aHierarchyTypeIndexesList.append(0);
2647 aHierarchyTypeIndexesList.append(1);
2648 aHierarchyTypeIndexesList.append(2);
2650 setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList );
2651 setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList );
2653 addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup,
2654 LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" );
2656 int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId );
2658 addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup,
2659 LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" );
2661 addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup,
2662 LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" );
2663 addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup,
2664 LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" );
2665 addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup,
2666 LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" );
2667 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup,
2668 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" );
2670 addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup,
2671 LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" );
2672 addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup,
2673 LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" );
2674 addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup,
2675 LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" );
2682 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
2684 if (section == "Geometry") {
2685 SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
2686 if (param == QString("SettingsGeomStep")) {
2687 double spin_step = aResourceMgr->doubleValue(section, param, 100.);
2688 EmitSignalDefaultStepValueChanged(spin_step);
2690 else if (param == QString("toplevel_color")) {
2691 QColor c = aResourceMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
2692 GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
2694 else if (param == QString("toplevel_dm")) {
2695 GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0));
2697 else if (param == QString("scalar_bar_x_position") ||
2698 param == QString("scalar_bar_y_position") ||
2699 param == QString("scalar_bar_width") ||
2700 param == QString("scalar_bar_height") ||
2701 param == QString("scalar_bar_text_height") ||
2702 param == QString("scalar_bar_nb_intervals")) {
2703 if( SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) )
2705 GEOM_Displayer aDisplayer( aStudy );
2706 bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals");
2707 aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true );
2710 else if ( param == QString("dimensions_color") ||
2711 param == QString("dimensions_line_width") ||
2712 param == QString("dimensions_font_height") ||
2713 param == QString("dimensions_arrow_length") ||
2714 param == QString("dimensions_show_units") ||
2715 param == QString("dimensions_length_units") ||
2716 param == QString("dimensions_angle_units") )
2718 SalomeApp_Application* anApp = getApp();
2724 SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
2730 GEOM_Displayer aDisplayer( aStudy );
2732 ViewManagerList aVMs;
2733 anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs );
2734 ViewManagerList::Iterator anIt = aVMs.begin();
2735 for ( ; anIt != aVMs.end(); ++anIt )
2737 SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>( (*anIt)->getViewModel() );
2743 SALOME_ListIO aVisible;
2744 aViewer->GetVisible( aVisible );
2745 aDisplayer.Redisplay( aVisible, false, aViewer );
2748 aDisplayer.UpdateViewer();
2750 else if ( param.startsWith( "dependency_tree") )
2751 emit SignalDependencyTreeParamChanged( section, param );
2755 LightApp_Displayer* GeometryGUI::displayer()
2758 myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
2762 void GeometryGUI::setLocalSelectionMode(const int mode)
2764 myLocalSelectionMode = mode;
2767 int GeometryGUI::getLocalSelectionMode() const
2769 return myLocalSelectionMode;
2772 const char gSeparator = '_'; // character used to separate parameter names
2773 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
2776 * \brief Store visual parameters
2778 * This method is called just before the study document is saved.
2779 * Store visual parameters in AttributeParameter attribute(s)
2781 void GeometryGUI::storeVisualParameters (int savePoint)
2783 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2784 if ( !appStudy || !appStudy->studyDS() )
2786 _PTR(Study) studyDS = appStudy->studyDS();
2788 // componentName is used for encoding of entries when storing them in IParameters
2789 std::string componentName = myComponentGeom->ComponentDataType();
2790 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2791 //if (!aSComponent) return;
2794 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2795 componentName.c_str(),
2797 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2799 QSet<QString> anEntriesToStoreShared;
2800 QList<SUIT_ViewManager*> lst;
2801 QList<SUIT_ViewManager*>::Iterator it;
2803 // main cycle to store parameters of displayed objects
2805 getApp()->viewManagers(lst);
2806 for (it = lst.begin(); it != lst.end(); it++) {
2807 SUIT_ViewManager* vman = *it;
2808 QString vType = vman->getType();
2809 int aMgrId = vman->getGlobalId();
2810 // saving VTK actors properties
2811 QVector<SUIT_ViewWindow*> views = vman->getViews();
2812 for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
2813 const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
2814 ObjMap::ConstIterator o_it = anObjects.begin();
2815 for (; o_it != anObjects.end(); o_it++) {
2816 const PropMap aProps = o_it.value();
2818 //Check that object exists in the study
2819 _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
2820 if ( !obj || !(aProps.count() > 0))
2822 // entry is "encoded" = it does NOT contain component adress, since it is a
2823 // subject to change on next component loading
2825 std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
2827 _PTR(GenericAttribute) anAttr;
2828 if (!obj->FindAttribute(anAttr, "AttributeIOR"))
2831 // remember entry of object to store shared GEOM properties
2832 // (e.g. dimension properties).
2833 if ( vType == OCCViewer_Viewer::Type() )
2835 anEntriesToStoreShared.insert( o_it.key() );
2838 QString param, occParam = vType;
2839 occParam += GEOM::sectionSeparator();
2840 occParam += QString::number(aMgrId);
2841 occParam += GEOM::sectionSeparator();
2843 if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
2844 param = occParam + GEOM::propertyName( GEOM::Visibility );
2845 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
2848 if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
2849 param = occParam + GEOM::propertyName( GEOM::DisplayMode );
2850 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
2853 if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
2854 QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
2856 val << QString::number(c.redF());
2857 val << QString::number(c.greenF());
2858 val << QString::number(c.blueF());
2859 param = occParam + GEOM::propertyName( GEOM::Color );
2860 ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
2863 if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
2864 param = occParam + GEOM::propertyName( GEOM::Texture );
2865 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
2868 if (vType == SVTK_Viewer::Type()) {
2869 if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
2870 param = occParam + GEOM::propertyName( GEOM::Opacity );
2871 ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
2873 } else if (vType == SOCC_Viewer::Type()) {
2874 if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
2875 param = occParam + GEOM::propertyName( GEOM::Transparency );
2876 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
2879 if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
2880 param = occParam + GEOM::propertyName( GEOM::TopLevel );
2881 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
2885 if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
2886 param = occParam + GEOM::propertyName( GEOM::NbIsos );
2887 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
2890 if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
2891 param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
2892 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
2895 if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) {
2896 param = occParam + GEOM::propertyName( GEOM::Deflection );
2897 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString());
2900 //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2901 if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
2902 param = occParam + GEOM::propertyName( GEOM::PointMarker );
2903 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
2906 if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
2907 param = occParam + GEOM::propertyName( GEOM::Material );
2908 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
2911 if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
2912 param = occParam + GEOM::propertyName( GEOM::LineWidth );
2913 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
2916 if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
2917 param = occParam + GEOM::propertyName( GEOM::IsosWidth );
2918 ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
2920 } // object iterator
2922 } // for (viewManagers)
2924 // store dimension attributes of objects:
2925 // since the displayed object always persists in property map, we remember the object entries
2926 // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree.
2927 QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions );
2928 QSet<QString>::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin();
2929 for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt )
2931 std::string aStudyEntry = (*aEntryIt).toLatin1().data();
2932 std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName);
2934 GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry );
2936 if ( aDimensions.GetNumber() == 0 )
2941 ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() );
2946 * \brief Restore visual parameters
2948 * This method is called after the study document is opened.
2949 * Restore visual parameters from AttributeParameter attribute(s)
2951 void GeometryGUI::restoreVisualParameters (int savePoint)
2953 SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2954 if (!appStudy || !appStudy->studyDS())
2956 _PTR(Study) studyDS = appStudy->studyDS();
2958 // componentName is used for encoding of entries when storing them in IParameters
2959 std::string componentName = myComponentGeom->ComponentDataType();
2960 //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2961 //if (!aSComponent) return;
2964 _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2965 componentName.c_str(),
2967 _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2969 std::vector<std::string> entries = ip->getEntries();
2971 for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2973 // entry is a normal entry - it should be "decoded" (setting base adress of component)
2974 QString entry (ip->decodeEntry(*entIt).c_str());
2976 // Check that the entry corresponds to a real object in the Study
2977 // as the object may be deleted or modified after the visual state is saved.
2978 _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2979 if (!so) continue; //Skip the not existent entry
2981 std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2982 std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2984 std::vector<std::string>::iterator namesIt = paramNames.begin();
2985 std::vector<std::string>::iterator valuesIt = paramValues.begin();
2987 // actors are stored in a map after displaying of them for
2988 // quicker access in the future: map < viewID to actor >
2989 NCollection_DataMap<int, GEOM_Actor* > vtkActors;
2990 NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2992 QString viewerTypStr;
2993 QString viewIndexStr;
2995 QVector<PropMap> aListOfMap;
2997 for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2999 // visual parameters are stored in strings as follows:
3000 // 1) ViewerType_ViewIndex_ParamName
3001 // 2) ViewerType_ParamName (shared for GEOM module)
3002 // '_' is used as separator and should not be used in viewer type or parameter names.
3003 QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
3005 bool isShared = lst.size() == 2;
3006 bool isViewer = lst.size() == 3;
3007 if ( !isShared && !isViewer )
3012 // shared visual parameters
3015 QString aParamNameStr( lst[1] );
3016 QString aValuesStr( (*valuesIt).c_str() );
3018 // shared dimension properties are stored as attribute
3019 if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) )
3021 GEOMGUI_DimensionProperty aDimensionProp( aValuesStr );
3022 aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() );
3028 // per view visual parameters
3029 viewerTypStr = lst[0];
3030 viewIndexStr = lst[1];
3031 QString paramNameStr = lst[2];
3034 viewIndex = viewIndexStr.toUInt(&ok);
3035 if (!ok) // bad conversion of view index to integer
3038 if ((viewIndex + 1) > aListOfMap.count()) {
3039 aListOfMap.resize(viewIndex + 1);
3042 QString val((*valuesIt).c_str());
3043 if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
3044 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
3045 } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
3046 aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
3047 } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
3048 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
3049 } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
3050 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val == "true" || val == "1");
3051 } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
3052 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
3053 } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
3054 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
3055 } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
3056 QStringList rgb = val.split(GEOM::subSectionSeparator());
3057 if (rgb.count() == 3) {
3058 QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
3059 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
3061 } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
3062 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
3063 } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
3064 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
3065 } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
3066 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
3067 } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
3068 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
3069 } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
3070 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
3071 } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
3072 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
3073 } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
3074 aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
3076 } // for names/parameters iterator
3078 QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
3080 for (int index = 0; index < aListOfMap.count(); index++) {
3082 appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
3084 //Get Visibility property of the current PropMap
3085 if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
3086 SUIT_ViewManager* vman = lst.at(index);
3087 SUIT_ViewModel* vmodel = vman->getViewModel();
3088 displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
3091 } // for entries iterator
3093 // update all VTK and OCC views
3094 QList<SUIT_ViewManager*> lst;
3095 getApp()->viewManagers(lst);
3096 for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
3097 SUIT_ViewModel* vmodel = (*it)->getViewModel();
3100 if (vmodel->getType() == SVTK_Viewer::Type()) {
3101 SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
3102 vtkView->getRenderer()->ResetCameraClippingRange();
3105 else if (vmodel->getType() == SOCC_Viewer::Type()) {
3106 //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
3107 SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
3114 void GeometryGUI::onViewAboutToShow()
3116 SUIT_ViewWindow* window = application()->desktop()->activeWindow();
3117 QAction* a = action( GEOMOp::OpSwitchVectors );
3119 a->setEnabled(true);
3120 bool vmode = window->property("VectorsMode").toBool();
3121 a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
3123 a->setText ( tr("MEN_VECTOR_MODE_ON") );
3124 a->setEnabled(false);
3129 \brief Return action by id
3130 \param id identifier of the action
3133 QAction* GeometryGUI::getAction(const int id) {
3138 \brief GEOM module message handler
3140 This method can be re-implemented in the subclasses.
3141 This is a GEOM module message handler.
3143 \param msg the message received.
3145 void GeometryGUI::message(const QString& msg)
3148 QStringList data = msg.split("/");
3149 const int nbStrings = data.count();
3151 if (nbStrings > 0) {
3152 if (data[0] == "modified") {
3154 QString anIOR = nbStrings > 1 ? data[1] : QString();
3156 if ( anIOR.isEmpty() ) {
3160 // Get the geom object.
3161 GEOM::GEOM_Object_ptr anObj = GeometryGUI::GetObjectFromIOR (anIOR);
3163 // Clear the shape buffer
3164 GeometryGUI::ClearShapeBuffer (anObj);
3170 \brief Clears the shape buffer.
3172 This is a static method. It clears the shape buffer.
3174 \param theObj the object
3176 void GeometryGUI::ClearShapeBuffer( GEOM::GEOM_Object_ptr theObj )
3178 if ( CORBA::is_nil( theObj ) )
3181 CORBA::String_var IOR = SalomeApp_Application::orb()->object_to_string( theObj );
3182 TCollection_AsciiString asciiIOR( (char *)IOR.in() );
3183 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3185 SALOMEDSClient_StudyManager *aManager = SalomeApp_Application::studyMgr();
3190 _PTR(Study) aStudy = aManager->GetStudyByID(theObj->GetStudyID());
3195 _PTR(SObject) aSObj ( aStudy->FindObjectIOR( std::string( IOR ) ) );
3199 _PTR(ChildIterator) anIt ( aStudy->NewChildIterator( aSObj ) );
3200 for ( anIt->InitEx( true ); anIt->More(); anIt->Next() ) {
3201 _PTR(GenericAttribute) anAttr;
3202 if ( anIt->Value()->FindAttribute(anAttr, "AttributeIOR") ) {
3203 _PTR(AttributeIOR) anIOR ( anAttr );
3204 TCollection_AsciiString asciiIOR( (char*)anIOR->Value().c_str() );
3205 GEOM_Client::get_client().RemoveShapeFromBuffer( asciiIOR );
3211 \brief Returns the object from IOR.
3213 This is a static method. It returns the object from its IOR.
3215 \param IOR object IOR
3216 \return GEOM object.
3218 GEOM::GEOM_Object_ptr GeometryGUI::GetObjectFromIOR( const QString& IOR )
3220 GEOM::GEOM_Object_var geomObj;
3221 if ( !IOR.isEmpty() ) {
3222 CORBA::Object_var corbaObj = SalomeApp_Application::orb()->string_to_object
3223 ( IOR.toLatin1().constData() );
3224 if ( !CORBA::is_nil( corbaObj ) )
3225 geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
3227 return geomObj._retn();
3231 \brief Returns IOR of the object.
3233 This is a static method. It returns the object's IOR.
3235 \param object the GEOM object.
3236 \return object's IOR.
3238 QString GeometryGUI::GetIORFromObject( GEOM::GEOM_Object_ptr object )
3241 if ( !CORBA::is_nil( object ) ) {
3242 CORBA::String_var anIOR =
3243 SalomeApp_Application::orb()->object_to_string( object );
3250 \brief Check if this object is can't be renamed in place
3252 This method can be re-implemented in the subclasses.
3253 Return true in case if object isn't reference or component (module root).
3255 \param entry column id
3256 \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
3258 bool GeometryGUI::renameAllowed( const QString& entry) const {
3260 SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
3261 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3262 SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
3264 return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
3268 Rename object by entry.
3269 \param entry entry of the object
3270 \param name new name of the object
3271 \brief Return \c true if rename operation finished successfully, \c false otherwise.
3273 bool GeometryGUI::renameObject( const QString& entry, const QString& name)
3275 bool result = false;
3277 SalomeApp_Application* app =
3278 dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
3279 SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
3284 _PTR(Study) aStudy = appStudy->studyDS();
3289 bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
3291 SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
3295 _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
3296 _PTR(GenericAttribute) anAttr;
3298 if ( obj->FindAttribute(anAttr, "AttributeName") ) {
3299 _PTR(AttributeName) aName (anAttr);
3301 aName->SetValue( name.toLatin1().data() ); // rename the SObject
3302 GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
3303 if (!CORBA::is_nil(anObj)) {
3304 anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object
3305 emit SignalDependencyTreeRenameObject( anObj->GetEntry() );
3313 void GeometryGUI::updateMaterials()
3315 LightApp_Preferences* pref = preferences();
3317 QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
3318 QString currentMaterial = SUIT_Session::session()->resourceMgr()->stringValue( "Geometry", "material" );
3319 if ( !materials.contains( currentMaterial ) )
3320 // user material set as default in the preferences, might be removed
3321 SUIT_Session::session()->resourceMgr()->setValue( "Geometry", "material", QString( "Plastic" ) );
3323 QtxPreferenceItem* prefItem = pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true );
3325 setPreferenceProperty( prefItem->id(),
3326 "strings", materials );
3327 prefItem->retrieve();
3333 \brief Check if the module allows "drag" operation of its objects.
3335 Overloaded from LightApp_Module class.
3337 This function is a part of the general drag-n-drop mechanism.
3338 The goal of this function is to check data object passed as a parameter
3339 and decide if it can be dragged or no.
3341 \param what data object being tested for drag operation
3342 \return \c true if module allows dragging of the specified object
3343 \sa isDropAccepted(), dropObjects()
3345 bool GeometryGUI::isDraggable( const SUIT_DataObject* what ) const
3347 // we allow dragging object under root and object from folder
3348 int aLevel = what->level();
3349 bool anObjectInFolder = false;
3351 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( what );
3353 _PTR(SObject) aSO = dataObj->object();
3355 _PTR(GenericAttribute) anAttr;
3356 _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
3357 if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3358 _PTR(AttributeLocalID) aLocalID( anAttr );
3359 anObjectInFolder = aLocalID->Value() == 999;
3364 return aLevel == 2 || anObjectInFolder;
3368 \brief Check if the module allows "drop" operation on the given object.
3370 Overloaded from LightApp_Module class.
3372 This function is a part of the general drag-n-drop mechanism.
3373 The goal of this function is to check data object passed as a parameter
3374 and decide if it can be used as a target for the "drop" operation.
3375 The processing of the drop operation itself is done in the dropObjects() function.
3377 \param where target data object
3378 \return \c true if module supports dropping on the \a where data object
3379 \sa isDraggable(), dropObjects()
3381 bool GeometryGUI::isDropAccepted( const SUIT_DataObject* where ) const
3383 // we allow dropping into folder and top-level GEOM object
3384 int aLevel = where->level();
3385 bool isFolder = false;
3387 const SalomeApp_DataObject* dataObj = dynamic_cast<const SalomeApp_DataObject*>( where );
3389 _PTR(SObject) aSO = dataObj->object();
3391 _PTR(GenericAttribute) anAttr;
3392 if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
3393 _PTR(AttributeLocalID) aLocalID( anAttr );
3394 isFolder = aLocalID->Value() == 999;
3399 return aLevel == 1 || isFolder;
3403 \brief Complete drag-n-drop operation.
3405 Overloaded from LightApp_Module class.
3407 This function is a part of the general drag-n-drop mechanism.
3408 Its goal is to handle dropping of the objects being dragged according
3409 to the chosen operation (move). The dropping is performed in the
3410 context of the parent data object \a where and the \a row (position in the
3411 children index) at which the data should be dropped. If \a row is equal to -1,
3412 this means that objects are added to the end of the children list.
3414 \param what objects being dropped
3415 \param where target data object
3416 \param row child index at which the drop operation is performed
3417 \param action drag-n-drop operation (Qt::DropAction) - move
3419 \sa isDraggable(), isDropAccepted()
3421 void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
3422 const int row, Qt::DropAction action )
3424 if (action != Qt::CopyAction && action != Qt::MoveAction)
3425 return; // unsupported action
3427 // get parent object
3428 SalomeApp_DataObject* dataObj = dynamic_cast<SalomeApp_DataObject*>( where );
3429 if ( !dataObj ) return; // wrong parent
3430 _PTR(SObject) parentObj = dataObj->object();
3432 // Find the current Study and StudyBuilder
3433 _PTR(Study) aStudy = parentObj->GetStudy();
3434 _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
3435 // collect all parents of the target node
3436 QStringList parentIDs;
3437 _PTR(SObject) parent = parentObj;
3438 while( !parent->IsNull() ) {
3439 parentIDs << parent->GetID().c_str();
3440 parent = aUseCaseBuilder->GetFather(parent);
3443 // collect objects being dropped
3444 GEOM::object_list_var objects = new GEOM::object_list();
3445 objects->length( what.count() );
3447 for ( int i = 0; i < what.count(); i++ ) {
3448 dataObj = dynamic_cast<SalomeApp_DataObject*>( what[i] );
3449 if ( !dataObj ) continue; // skip wrong objects
3450 _PTR(SObject) sobj = dataObj->object();
3451 // check that dropped object is not a parent of target object
3452 if ( parentIDs.contains( sobj->GetID().c_str() ) ) {
3453 return; // it's not allowed to move node into it's child
3455 objects[i] = _CAST(SObject, sobj)->GetSObject();
3458 objects->length( count );
3460 // call engine function
3461 GetGeomGen()->Move( objects.in(), // what
3462 _CAST(SObject, parentObj)->GetSObject(), // where
3465 // update Object browser
3466 getApp()->updateObjectBrowser( false );