X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMGUI%2FGeometryGUI.cxx;h=c7e69aec226daf19ba5ee7a8b50e9a7ac759beaf;hb=6f000dfe28cad33bcf7053913e1a2f24b3fa3e33;hp=2e88829e7779a47822a2a65153ecc9720cbbf54d;hpb=874aceefb02eadebc06684071882db16d561e1fd;p=modules%2Fgeom.git diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index 2e88829e7..c7e69aec2 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -6,7 +6,7 @@ // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -30,13 +30,14 @@ #include "GeometryGUI.h" #include "GeometryGUI_Operations.h" #include "GEOMPluginGUI.h" -#include "GEOMGUI_XmlHandler.h" #include "GEOMGUI_OCCSelector.h" #include "GEOMGUI_Selection.h" #include "GEOMGUI_CreationInfoWdg.h" +#include "GEOMGUI_DimensionProperty.h" #include "GEOM_Constants.h" #include "GEOM_Displayer.h" #include "GEOM_AISShape.hxx" +#include "GEOMUtils_XmlHandler.hxx" #include "GEOM_Actor.h" @@ -64,6 +65,8 @@ #include #include +#include + #include #include #include @@ -76,7 +79,6 @@ #include #include -#include #include #include @@ -87,6 +89,7 @@ // External includes #include +#include #include #include #include @@ -104,11 +107,7 @@ #include #include -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 #include -#else -#include -#endif #include @@ -200,7 +199,8 @@ void GeometryGUI::Modified (bool theIsUpdateActions) // purpose : Constructor //======================================================================= GeometryGUI::GeometryGUI() : - SalomeApp_Module( "GEOM" ) + SalomeApp_Module( "GEOM" ), + myTopLevelIOList() { if ( CORBA::is_nil( myComponentGeom ) ) { @@ -221,6 +221,8 @@ GeometryGUI::GeometryGUI() : myCreationInfoWdg = 0; connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) ); + + Q_INIT_RESOURCE( GEOMGUI ); } //======================================================================= @@ -428,6 +430,7 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam ) SUIT_ViewWindow* window = desk->activeWindow(); bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() ); bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() ); + bool ViewDep = ( window && window->getViewManager()->getType() == GraphicsView_Viewer::Type() ); // if current viewframe is not of OCC and not of VTK type - return immediately // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example) QList NotViewerDependentCommands; @@ -442,7 +445,7 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam ) << GEOMOp::OpPointMarker << GEOMOp::OpCreateFolder << GEOMOp::OpSortChildren; - if ( !ViewOCC && !ViewVTK && !NotViewerDependentCommands.contains( id ) ) { + if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) { // activate OCC viewer getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true); } @@ -459,8 +462,6 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam ) case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS createOriginAndBaseVectors(); // internal operation return; - case GEOMOp::OpImport: // MENU FILE - IMPORT - case GEOMOp::OpExport: // MENU FILE - EXPORT case GEOMOp::OpSelectVertex: // POPUP MENU - SELECT ONLY - VERTEX case GEOMOp::OpSelectEdge: // POPUP MENU - SELECT ONLY - EDGE case GEOMOp::OpSelectWire: // POPUP MENU - SELECT ONLY - WIRE @@ -497,11 +498,14 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam ) case GEOMOp::OpClsBringToFront: // case GEOMOp::OpCreateFolder: // POPUP MENU - CREATE FOLDER case GEOMOp::OpSortChildren: // POPUP MENU - SORT CHILD ITEMS + case GEOMOp::OpShowDependencyTree: // POPUP MENU - SHOW DEPENDENCY TREE + case GEOMOp::OpReduceStudy: // POPUP MENU - REDUCE STUDY libName = "GEOMToolsGUI"; break; case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME case GEOMOp::OpDMShading: // MENU VIEW - SHADING case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING + case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN @@ -509,11 +513,13 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam ) case GEOMOp::OpHide: // MENU VIEW - ERASE case GEOMOp::OpShow: // MENU VIEW - DISPLAY case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE + case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME case GEOMOp::OpShading: // POPUP MENU - SHADING case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES case GEOMOp::OpTexture: // POPUP MENU - TEXTURE case GEOMOp::OpVectors: // POPUP MENU - VECTORS + case GEOMOp::OpVertices: // POPUP MENU - VERTICES libName = "DisplayGUI"; break; case GEOMOp::OpPoint: // MENU BASIC - POINT @@ -545,6 +551,7 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam ) break; case GEOMOp::Op2dSketcher: // MENU ENTITY - SKETCHER case GEOMOp::Op3dSketcher: // MENU ENTITY - 3D SKETCHER + case GEOMOp::OpIsoline: // MENU BASIC - ISOLINE case GEOMOp::OpExplode: // MENU ENTITY - EXPLODE #ifdef WITH_OPENCV case GEOMOp::OpFeatureDetect: // MENU ENTITY - FEATURE DETECTION @@ -553,6 +560,7 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam ) case GEOMOp::OpCreateField: // MENU FIELD - CREATE FIELD case GEOMOp::OpEditField: // MENU FIELD - EDIT FIELD case GEOMOp::OpEditFieldPopup: // POPUP MENU - EDIT FIELD + case GEOMOp::Op2dPolylineEditor: // MENU BASIC - POLYLINE EDITOR libName = "EntityGUI"; break; case GEOMOp::OpEdge: // MENU BUILD - EDGE @@ -627,6 +635,9 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam ) case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS + case GEOMOp::OpManageDimensions: // MENU MEASURE - MANAGE DIMENSIONS + case GEOMOp::OpShowAllDimensions: // POPUP MENU - SHOW ALL DIMENSIONS + case GEOMOp::OpHideAllDimensions: // POPUP MENU - HIDE ALL DIMENSIONS libName = "MeasureGUI"; break; case GEOMOp::OpGroupCreate: // MENU GROUP - CREATE @@ -644,10 +655,6 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam ) case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS libName = "BlocksGUI"; break; - case GEOMOp::OpExportXAO: // MENU NEW ENTITY - IMPORTEXPORT - EXPORTXAO - case GEOMOp::OpImportXAO: // MENU NEW ENTITY - IMPORTEXPORT - IMPORTXAO - libName = "ImportExportGUI"; - break; //case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base) //case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE //case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS @@ -841,6 +848,11 @@ void GeometryGUI::createGeomAction( const int id, const QString& label, const QS void GeometryGUI::createOriginAndBaseVectors() { SalomeApp_Study* appStudy = dynamic_cast( application()->activeStudy() ); + bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked(); + if ( aLocked ) { + SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") ); + return; + } if ( appStudy ) { _PTR(Study) studyDS = appStudy->studyDS(); if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) { @@ -875,9 +887,6 @@ void GeometryGUI::initialize( CAM_Application* app ) // ----- create actions -------------- - createGeomAction( GEOMOp::OpImport, "IMPORT", "", Qt::ControlModifier + Qt::Key_I ); - createGeomAction( GEOMOp::OpExport, "EXPORT", "", Qt::ControlModifier + Qt::Key_E ); - createGeomAction( GEOMOp::OpDelete, "DELETE", "", Qt::Key_Delete ); createGeomAction( GEOMOp::OpPoint, "POINT" ); @@ -886,6 +895,7 @@ void GeometryGUI::initialize( CAM_Application* app ) createGeomAction( GEOMOp::OpEllipse, "ELLIPSE" ); createGeomAction( GEOMOp::OpArc, "ARC" ); createGeomAction( GEOMOp::OpCurve, "CURVE" ); + createGeomAction( GEOMOp::OpIsoline, "ISOLINE" ); createGeomAction( GEOMOp::OpVector, "VECTOR" ); createGeomAction( GEOMOp::OpPlane, "PLANE" ); createGeomAction( GEOMOp::OpLCS, "LOCAL_CS" ); @@ -921,11 +931,13 @@ void GeometryGUI::initialize( CAM_Application* app ) createGeomAction( GEOMOp::Op2dSketcher, "SKETCH" ); createGeomAction( GEOMOp::Op3dSketcher, "3DSKETCH" ); + createGeomAction( GEOMOp::OpIsoline, "ISOLINE" ); createGeomAction( GEOMOp::OpExplode, "EXPLODE" ); #ifdef WITH_OPENCV createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" ); #endif createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" ); + createGeomAction( GEOMOp::Op2dPolylineEditor, "CURVE_CREATOR" ); createGeomAction( GEOMOp::OpEdge, "EDGE" ); createGeomAction( GEOMOp::OpWire, "WIRE" ); @@ -991,6 +1003,7 @@ void GeometryGUI::initialize( CAM_Application* app ) createGeomAction( GEOMOp::OpBoundingBox, "BND_BOX" ); createGeomAction( GEOMOp::OpMinDistance, "MIN_DIST" ); createGeomAction( GEOMOp::OpAngle, "MEASURE_ANGLE" ); + createGeomAction( GEOMOp::OpManageDimensions, "MANAGE_DIMENSIONS" ); createGeomAction( GEOMOp::OpTolerance, "TOLERANCE" ); createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" ); @@ -1007,10 +1020,12 @@ void GeometryGUI::initialize( CAM_Application* app ) createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" ); createGeomAction( GEOMOp::OpDMShading, "SHADING" ); createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" ); + createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" ); createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" ); createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" ); createGeomAction( GEOMOp::OpShow, "DISPLAY" ); createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE"); + createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE"); createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true ); createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true ); createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true ); @@ -1032,6 +1047,7 @@ void GeometryGUI::initialize( CAM_Application* app ) createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH"); createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH"); createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true ); + createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true ); createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" ); createGeomAction( GEOMOp::OpColor, "POP_COLOR" ); createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" ); @@ -1050,6 +1066,10 @@ void GeometryGUI::initialize( CAM_Application* app ) createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" ); createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" ); createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" ); + createGeomAction( GEOMOp::OpShowDependencyTree, "POP_SHOW_DEPENDENCY_TREE" ); + createGeomAction( GEOMOp::OpReduceStudy, "POP_REDUCE_STUDY" ); + createGeomAction( GEOMOp::OpShowAllDimensions, "POP_SHOW_ALL_DIMENSIONS" ); + createGeomAction( GEOMOp::OpHideAllDimensions, "POP_HIDE_ALL_DIMENSIONS" ); // Create actions for increase/decrease transparency shortcuts createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false, @@ -1063,10 +1083,6 @@ void GeometryGUI::initialize( CAM_Application* app ) createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false, "Geometry:Decrease number of isolines"); - // Import/Export XAO - createGeomAction( GEOMOp::OpExportXAO, "EXPORTXAO" ); - createGeomAction( GEOMOp::OpImportXAO, "IMPORTXAO" ); - //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" ); //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" ); //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" ); @@ -1076,10 +1092,6 @@ void GeometryGUI::initialize( CAM_Application* app ) // ---- create menus -------------------------- int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 ); - createMenu( separator(), fileId, 10 ); - createMenu( GEOMOp::OpImport, fileId, 10 ); - createMenu( GEOMOp::OpExport, fileId, 10 ); - createMenu( separator(), fileId, -1 ); int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 ); createMenu( GEOMOp::OpDelete, editId, -1 ); @@ -1087,18 +1099,20 @@ void GeometryGUI::initialize( CAM_Application* app ) int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 ); int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 ); - createMenu( GEOMOp::OpPoint, basicId, -1 ); - createMenu( GEOMOp::OpLine, basicId, -1 ); - createMenu( GEOMOp::OpCircle, basicId, -1 ); - createMenu( GEOMOp::OpEllipse, basicId, -1 ); - createMenu( GEOMOp::OpArc, basicId, -1 ); - createMenu( GEOMOp::OpCurve, basicId, -1 ); - createMenu( GEOMOp::Op2dSketcher, basicId, -1 ); - createMenu( GEOMOp::Op3dSketcher, basicId, -1 ); - createMenu( separator(), basicId, -1 ); - createMenu( GEOMOp::OpVector, basicId, -1 ); - createMenu( GEOMOp::OpPlane, basicId, -1 ); - createMenu( GEOMOp::OpLCS, basicId, -1 ); + createMenu( GEOMOp::OpPoint, basicId, -1 ); + createMenu( GEOMOp::OpLine, basicId, -1 ); + createMenu( GEOMOp::OpCircle, basicId, -1 ); + createMenu( GEOMOp::OpEllipse, basicId, -1 ); + createMenu( GEOMOp::OpArc, basicId, -1 ); + createMenu( GEOMOp::OpCurve, basicId, -1 ); + createMenu( GEOMOp::Op2dSketcher, basicId, -1 ); + createMenu( GEOMOp::Op2dPolylineEditor, basicId, -1 ); + createMenu( GEOMOp::Op3dSketcher, basicId, -1 ); + createMenu( GEOMOp::OpIsoline, basicId, -1 ); + createMenu( separator(), basicId, -1 ); + createMenu( GEOMOp::OpVector, basicId, -1 ); + createMenu( GEOMOp::OpPlane, basicId, -1 ); + createMenu( GEOMOp::OpLCS, basicId, -1 ); createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 ); int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 ); @@ -1116,13 +1130,7 @@ void GeometryGUI::initialize( CAM_Application* app ) createMenu( GEOMOp::OpRevolution, genId, -1 ); createMenu( GEOMOp::OpFilling, genId, -1 ); createMenu( GEOMOp::OpPipe, genId, -1 ); -#if OCC_VERSION_LARGE > 0x06050300 createMenu( GEOMOp::OpPipePath, genId, -1 ); -#endif - - int impexpId = createMenu( tr( "MEN_IMPORTEXPORT" ), newEntId, -1 ); - createMenu( GEOMOp::OpExportXAO, impexpId, -1 ); - createMenu( GEOMOp::OpImportXAO, impexpId, -1 ); //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 ); //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 ); @@ -1244,9 +1252,10 @@ void GeometryGUI::initialize( CAM_Application* app ) createMenu( separator(), measurId, -1 ); int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 ); - createMenu( GEOMOp::OpBoundingBox, dimId, -1 ); - createMenu( GEOMOp::OpMinDistance, dimId, -1 ); - createMenu( GEOMOp::OpAngle, dimId, -1 ); + createMenu( GEOMOp::OpBoundingBox, dimId, -1 ); + createMenu( GEOMOp::OpMinDistance, dimId, -1 ); + createMenu( GEOMOp::OpAngle, dimId, -1 ); + createMenu( GEOMOp::OpManageDimensions, dimId, -1 ); createMenu( separator(), measurId, -1 ); createMenu( GEOMOp::OpTolerance, measurId, -1 ); @@ -1274,8 +1283,10 @@ void GeometryGUI::initialize( CAM_Application* app ) createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 ); createMenu( GEOMOp::OpDMShading, dispmodeId, -1 ); createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 ); + createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 ); createMenu( separator(), dispmodeId, -1 ); createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 ); + createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 ); createMenu( separator(), viewId, -1 ); createMenu( GEOMOp::OpShowAll, viewId, -1 ); @@ -1296,25 +1307,27 @@ void GeometryGUI::initialize( CAM_Application* app ) // ---- create toolbars -------------------------- - int basicTbId = createTool( tr( "TOOL_BASIC" ) ); - createTool( GEOMOp::OpPoint, basicTbId ); - createTool( GEOMOp::OpLine, basicTbId ); - createTool( GEOMOp::OpCircle, basicTbId ); - createTool( GEOMOp::OpEllipse, basicTbId ); - createTool( GEOMOp::OpArc, basicTbId ); - createTool( GEOMOp::OpCurve, basicTbId ); - createTool( GEOMOp::OpVector, basicTbId ); - createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc - createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc - createTool( GEOMOp::OpPlane, basicTbId ); - createTool( GEOMOp::OpLCS, basicTbId ); + int basicTbId = createTool( tr( "TOOL_BASIC" ), QString( "GEOMBasic" ) ); + createTool( GEOMOp::OpPoint, basicTbId ); + createTool( GEOMOp::OpLine, basicTbId ); + createTool( GEOMOp::OpCircle, basicTbId ); + createTool( GEOMOp::OpEllipse, basicTbId ); + createTool( GEOMOp::OpArc, basicTbId ); + createTool( GEOMOp::OpCurve, basicTbId ); + createTool( GEOMOp::OpVector, basicTbId ); + createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc + createTool( GEOMOp::Op2dPolylineEditor, basicTbId ); + createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc + createTool( GEOMOp::OpIsoline, basicTbId ); + createTool( GEOMOp::OpPlane, basicTbId ); + createTool( GEOMOp::OpLCS, basicTbId ); createTool( GEOMOp::OpOriginAndVectors, basicTbId ); -// int sketchTbId = createTool( tr( "TOOL_SKETCH" ) ); +// int sketchTbId = createTool( tr( "TOOL_SKETCH" ), QString( "GEOMSketch" ) ); // createTool( GEOMOp::Op2dSketcher, sketchTbId ); // createTool( GEOMOp::Op3dSketcher, sketchTbId ); - int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) ); + int primTbId = createTool( tr( "TOOL_PRIMITIVES" ), QString( "GEOMPrimitives" ) ); createTool( GEOMOp::OpBox, primTbId ); createTool( GEOMOp::OpCylinder, primTbId ); createTool( GEOMOp::OpSphere, primTbId ); @@ -1324,26 +1337,24 @@ void GeometryGUI::initialize( CAM_Application* app ) createTool( GEOMOp::OpDisk, primTbId ); //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc - //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ) ); + //int blocksTbId = createTool( tr( "TOOL_BLOCKS" ), QString( "GEOMBlocks" ) ); //createTool( GEOMOp::OpDividedDisk, blocksTbId ); //createTool( GEOMOp::OpDividedCylinder, blocksTbId ); - int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) ); + int boolTbId = createTool( tr( "TOOL_BOOLEAN" ), QString( "GEOMBooleanOperations" ) ); createTool( GEOMOp::OpFuse, boolTbId ); createTool( GEOMOp::OpCommon, boolTbId ); createTool( GEOMOp::OpCut, boolTbId ); createTool( GEOMOp::OpSection, boolTbId ); - int genTbId = createTool( tr( "TOOL_GENERATION" ) ); + int genTbId = createTool( tr( "TOOL_GENERATION" ), QString( "GEOMGeneration" ) ); createTool( GEOMOp::OpPrism, genTbId ); createTool( GEOMOp::OpRevolution, genTbId ); createTool( GEOMOp::OpFilling, genTbId ); createTool( GEOMOp::OpPipe, genTbId ); -#if OCC_VERSION_LARGE > 0x06050300 createTool( GEOMOp::OpPipePath, genTbId ); -#endif - int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) ); + int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ), QString( "GEOMTransformation" ) ); createTool( GEOMOp::OpTranslate, transTbId ); createTool( GEOMOp::OpRotate, transTbId ); createTool( GEOMOp::OpChangeLoc, transTbId ); @@ -1355,14 +1366,14 @@ void GeometryGUI::initialize( CAM_Application* app ) createTool( GEOMOp::OpMultiTranslate, transTbId ); createTool( GEOMOp::OpMultiRotate, transTbId ); - int operTbId = createTool( tr( "TOOL_OPERATIONS" ) ); + int operTbId = createTool( tr( "TOOL_OPERATIONS" ), QString( "GEOMOperations" ) ); createTool( GEOMOp::OpExplode, operTbId ); createTool( GEOMOp::OpPartition, operTbId ); createTool( GEOMOp::OpArchimede, operTbId ); createTool( GEOMOp::OpShapesOnShape, operTbId ); createTool( GEOMOp::OpSharedShapes, operTbId ); - int featTbId = createTool( tr( "TOOL_FEATURES" ) ); + int featTbId = createTool( tr( "TOOL_FEATURES" ), QString( "GEOMModification" ) ); createTool( GEOMOp::OpFillet1d, featTbId ); createTool( GEOMOp::OpFillet2d, featTbId ); createTool( GEOMOp::OpFillet3d, featTbId ); @@ -1370,7 +1381,7 @@ void GeometryGUI::initialize( CAM_Application* app ) createTool( GEOMOp::OpExtrudedBoss, featTbId ); createTool( GEOMOp::OpExtrudedCut, featTbId ); - int buildTbId = createTool( tr( "TOOL_BUILD" ) ); + int buildTbId = createTool( tr( "TOOL_BUILD" ), QString( "GEOMBuild" ) ); createTool( GEOMOp::OpEdge, buildTbId ); createTool( GEOMOp::OpWire, buildTbId ); createTool( GEOMOp::OpFace, buildTbId ); @@ -1378,7 +1389,7 @@ void GeometryGUI::initialize( CAM_Application* app ) createTool( GEOMOp::OpSolid, buildTbId ); createTool( GEOMOp::OpCompound, buildTbId ); - int measureTbId = createTool( tr( "TOOL_MEASURES" ) ); + int measureTbId = createTool( tr( "TOOL_MEASURES" ), QString( "GEOMMeasures" ) ); createTool( GEOMOp::OpPointCoordinates, measureTbId ); createTool( GEOMOp::OpProperties, measureTbId ); createTool( GEOMOp::OpCenterMass, measureTbId ); @@ -1399,16 +1410,12 @@ void GeometryGUI::initialize( CAM_Application* app ) createTool( GEOMOp::OpGetNonBlocks, measureTbId ); createTool( GEOMOp::OpCheckSelfInters, measureTbId ); - int picturesTbId = createTool( tr( "TOOL_PICTURES" ) ); + int picturesTbId = createTool( tr( "TOOL_PICTURES" ), QString( "GEOMPictures" ) ); createTool( GEOMOp::OpPictureImport, picturesTbId ); #ifdef WITH_OPENCV createTool( GEOMOp::OpFeatureDetect, picturesTbId ); #endif - int impexpTbId = createTool( tr( "TOOL_IMPORTEXPORT" ) ); - createTool( GEOMOp::OpExportXAO, impexpTbId ); - createTool( GEOMOp::OpImportXAO, impexpTbId ); - //int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) ); //createTool( GEOMOp::OpSmoothingSurface, advancedTbId ); //@@ 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 @@// @@ -1445,7 +1452,6 @@ void GeometryGUI::initialize( CAM_Application* app ) mgr->setRule( action( GEOMOp::OpGroupEdit ), QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule ); mgr->insert( separator(), -1, -1 ); // ----------- -#if OCC_VERSION_LARGE > 0x06050200 //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false"; QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true"; mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front @@ -1453,7 +1459,6 @@ void GeometryGUI::initialize( CAM_Application* app ) mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule ); mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule ); -#endif mgr->insert( separator(), -1, -1 ); // ----------- dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe @@ -1472,6 +1477,9 @@ void GeometryGUI::initialize( CAM_Application* app ) mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule ); mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule ); + mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices + mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule ); + mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule ); mgr->insert( separator(), -1, -1 ); // ----------- mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color @@ -1483,8 +1491,7 @@ void GeometryGUI::initialize( CAM_Application* app ) mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule ); mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker - //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule ); - mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule ); + mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule ); // material properties mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 ); @@ -1555,6 +1562,14 @@ void GeometryGUI::initialize( CAM_Application* app ) mgr->insert( action(GEOMOp::OpShowOnlyChildren ), -1, -1 ); // display only children mgr->setRule(action(GEOMOp::OpShowOnlyChildren ), (canDisplay + "and ($type in {%1}) and client='ObjectBrowser' and hasChildren=true").arg( types ), QtxPopupMgr::VisibleRule ); + QString aDimensionRule = "($component={'GEOM'}) and selcount=1 and isVisible and type='Shape' and %1"; + + mgr->insert( separator(), -1, -1 ); // ----------- + mgr->insert( action( GEOMOp::OpShowAllDimensions ), -1, -1 ); // show all dimensions + mgr->setRule( action( GEOMOp::OpShowAllDimensions ), aDimensionRule.arg( "hasHiddenDimensions" ), QtxPopupMgr::VisibleRule ); + mgr->insert( action( GEOMOp::OpHideAllDimensions ), -1, -1 ); // hide all dimensions + mgr->setRule( action( GEOMOp::OpHideAllDimensions ), aDimensionRule.arg( "hasVisibleDimensions" ), QtxPopupMgr::VisibleRule ); + mgr->insert( separator(), -1, -1 ); // ----------- mgr->insert( action( GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule ); @@ -1573,6 +1588,14 @@ void GeometryGUI::initialize( CAM_Application* app ) mgr->insert( action( GEOMOp::OpSortChildren ), -1, -1 ); // Sort child items mgr->setRule( action( GEOMOp::OpSortChildren ), QString("client='ObjectBrowser' and $component={'GEOM'} and nbChildren>1"), QtxPopupMgr::VisibleRule ); + mgr->insert( separator(), -1, -1 ); // ----------- + mgr->insert( action( GEOMOp::OpShowDependencyTree ), -1, -1 ); // Show dependency tree + mgr->setRule( action( GEOMOp::OpShowDependencyTree ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule ); + + mgr->insert( separator(), -1, -1 ); // ----------- + mgr->insert( action( GEOMOp::OpReduceStudy ), -1, -1 ); // Reduce Study + mgr->setRule( action( GEOMOp::OpReduceStudy ), clientOCCorVTKorOB + " and selcount>0 and ($component={'GEOM'}) and type='Shape'", QtxPopupMgr::VisibleRule ); + mgr->hide( mgr->actionId( action( myEraseAll ) ) ); SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); @@ -1596,131 +1619,77 @@ void GeometryGUI::addPluginActions() SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); if (!resMgr) return; - // Find names of a resource XML files ("GEOMActions.xml" and others); - QString PluginsXml; - char* cenv = getenv("GEOM_PluginsList"); - if (cenv) - PluginsXml.sprintf("%s", cenv); - - QStringList PluginsXmlList = PluginsXml.split(":", QString::SkipEmptyParts); - if (PluginsXmlList.count() == 0) return; - - // get full names of xml files from PluginsXmlList - QStringList xmlFiles; - xmlFiles.append(QDir::home().filePath("CustomGeomPlugins.xml")); // may be inexistent - for (int i = 0; i < PluginsXmlList.count(); i++) { - PluginsXml = PluginsXmlList[ i ]; - - // Find full path to the resource XML file - QString xmlFile = resMgr->path("resources", "GEOM", PluginsXml + ".xml"); - if ( xmlFile.isEmpty() ) // try PLUGIN resources - xmlFile = resMgr->path("resources", PluginsXml, PluginsXml + ".xml"); - if ( !xmlFile.isEmpty() ) - xmlFiles.append( xmlFile ); - } - - // create "Advanced Operations" menu and corresponding toolbar - //int advancedMenuId = createMenu(tr("MEN_ADVANCED"), -1, -1, 10); - //int advancedTbarId = createTool(tr("TOOL_ADVANCED")); - int id = GEOMOp::OpLastOperationID; // TODO? + SalomeApp_Study* appStudy = dynamic_cast( application()->activeStudy() ); + if (!appStudy) return; - // loop on xmlFiles - QString aNoAccessFiles; - for (int i = 0; i < xmlFiles.count(); i++) { - QString xmlFile = xmlFiles[ i ]; - - QFile file (xmlFile); - if (file.exists() && file.open(QIODevice::ReadOnly)) { - file.close(); - - GEOMGUI_XmlHandler* aXmlHandler = new GEOMGUI_XmlHandler(); - ASSERT(aXmlHandler); - - QXmlInputSource source (&file); - QXmlSimpleReader reader; - reader.setContentHandler(aXmlHandler); - reader.setErrorHandler(aXmlHandler); - bool ok = reader.parse(source); - file.close(); - - if (ok) { - // bind action lib and label to its ID for activateOperation() method proper work - myPluginLibs[aXmlHandler->myPluginData.myName] = aXmlHandler->myPluginData.myClientLib; - - QListIterator anActionsIter (aXmlHandler->myPluginData.myListOfActions); - while (anActionsIter.hasNext()) { - GEOMGUI_ActionData anActionData = anActionsIter.next(); - - //QPixmap icon = resMgr->loadPixmap("GEOM", tr(anActionData.myIcon.toLatin1().constData())); - QPixmap icon = resMgr->loadPixmap(aXmlHandler->myPluginData.myName, - anActionData.myIcon.toLatin1().constData()); - - // path to action in menu - QStringList smenus = anActionData.myMenu.split( "/" ); - QString actionName = smenus.last(); - actionName = actionName.toUpper().prepend("MEN_"); - smenus.removeLast(); - - // path to action in toolbar - QStringList stools = anActionData.myTooltip.split( "/" ); - QString actionTool = stools.last(); - actionTool = actionTool.toUpper().prepend("TOP_"); - stools.removeLast(); - - QString actionStat = anActionData.myStatusBar; - actionStat = actionStat.toUpper().prepend("STB_"); - - createAction(id, // ~ anActionData.myLabel - tr(actionTool.toLatin1().constData()), - icon, - tr(actionName.toLatin1().constData()), - tr(actionStat.toLatin1().constData()), - 0 /*accel*/, - application()->desktop(), - false /*toggle*/, - this, SLOT(OnGUIEvent()), - QString() /*shortcutAction*/); - - int menuId = -1; - foreach (QString subMenu, smenus) { - subMenu = subMenu.toUpper().prepend("MEN_"); - menuId = createMenu(tr(subMenu.toLatin1().constData()), menuId, -1); - } - //createMenu(id, pluginMenuId, -1); - createMenu(id, menuId, -1); + // Find names of a resource XML files ("AdvancedGEOM.xml" and others); - QString subTool = stools[0]; - subTool = subTool.toUpper().prepend("TOOL_"); - int toolId = createTool(tr(subTool.toLatin1().constData())); - //createTool(id, advancedTbarId); - createTool(id, toolId); + GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo(); - // add action id to map - PluginAction anAction (aXmlHandler->myPluginData.myClientLib, anActionData.myLabel); - myPluginActions[id] = anAction; + int id = GEOMOp::OpLastOperationID; // TODO? - id++; - } + // loop on plugins + GEOMUtils::PluginInfo::const_iterator it; + for ( it = plugins.begin(); it != plugins.end(); ++it ) { + // bind action lib and label to its ID for activateOperation() method proper work + GEOMUtils::PluginData pdata = (*it); + myPluginLibs[pdata.name.c_str()] = pdata.clientLib.c_str(); + std::list actions = (*it).actions; + std::list::const_iterator ait; + for ( ait = actions.begin(); ait != actions.end(); ++ait ) { + GEOMUtils::ActionData adata = (*ait); + // icon + QPixmap icon; + if ( !adata.icon.empty() ) + icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() ); + // menu text (path) + QStringList smenus = QString( adata.menuText.c_str() ).split( "/" ); + QString actionName = smenus.last(); + actionName = actionName.toUpper().prepend( "MEN_" ); + smenus.removeLast(); + + // path to action in toolbar + QStringList stools = QString( adata.toolTip.c_str() ).split( "/" ); + QString actionTool = stools.last(); + actionTool = actionTool.toUpper().prepend( "TOP_" ); + stools.removeLast(); + + QString actionStat = adata.statusText.c_str(); + actionStat = actionStat.toUpper().prepend( "STB_" ); + + createAction( id, // ~ adata.label + tr( actionTool.toLatin1().constData() ), + icon, + tr( actionName.toLatin1().constData() ), + tr( actionStat.toLatin1().constData() ), + QKeySequence( tr( adata.accel.c_str() ) ), + application()->desktop(), + false /*toggle*/, + this, SLOT( OnGUIEvent() ), + QString() /*shortcutAction*/ ); + + int menuId = -1; + foreach ( QString subMenu, smenus ) { + QStringList subMenuList = subMenu.split( ":" ); + QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" ); + int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1; + menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup ); } - else { - SUIT_MessageBox::critical(application()->desktop(), - tr("INF_PARSE_ERROR"), - tr(aXmlHandler->errorProtocol().toLatin1().data())); + createMenu( id, menuId, -1 ); + + if ( !stools.isEmpty() ) { + QString subTool = stools[0]; + subTool = subTool.toUpper().prepend( "TOOL_" ); + int toolId = createTool( tr( subTool.toLatin1().constData() ) ); + createTool(id, toolId); } - delete aXmlHandler; - } - else if ( i > 0 ) { // 1st is ~/CustomGeomPlugins.xml - if (aNoAccessFiles.isEmpty()) - aNoAccessFiles = xmlFile; - else - aNoAccessFiles += ", " + xmlFile; - } - } // end loop on xmlFiles - if (!aNoAccessFiles.isEmpty()) { - QString aMess = QObject::tr("PLUGIN_FILE_CANT_OPEN") + " " + aNoAccessFiles + "\n"; - aMess += QObject::tr("PLUGIN_FILE_CHECK_VARIABLE"); - SUIT_MessageBox::warning(application()->desktop(), tr("GEOM_WRN_WARNING"), aMess); + // add action id to map + PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() ); + myPluginActions[id] = anAction; + + id++; + } } } @@ -1761,8 +1730,6 @@ bool GeometryGUI::activateModule( SUIT_Study* study ) this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) ); // Reset actions accelerator keys - action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I - action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete GUIMap::Iterator it; @@ -1773,43 +1740,30 @@ bool GeometryGUI::activateModule( SUIT_Study* study ) connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() )); connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( onAutoBringToFront() )); + connect( sm, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() )); if ( !myCreationInfoWdg ) myCreationInfoWdg = new GEOMGUI_CreationInfoWdg( getApp() ); getApp()->insertDockWindow( myCreationInfoWdg->getWinID(), myCreationInfoWdg ); getApp()->placeDockWindow( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea ); + //NPAL 19674 + SALOME_ListIO selected; + sm->selectedObjects( selected ); + sm->clearSelected(); + SUIT_ViewManager* vm; ViewManagerList OCCViewManagers, VTKViewManagers; application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers ); QListIterator itOCC( OCCViewManagers ); while ( itOCC.hasNext() && (vm = itOCC.next()) ) - myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) ); + onViewManagerAdded(vm); application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers ); QListIterator itVTK( VTKViewManagers ); while ( itVTK.hasNext() && (vm = itVTK.next()) ) - myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast( vm->getViewModel() ), sm ) ); - - //NPAL 19674 - SALOME_ListIO selected; - sm->selectedObjects( selected ); - sm->clearSelected(); - - // disable OCC selectors - getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() ); - QListIterator itOCCSel( myOCCSelectors ); - while ( itOCCSel.hasNext() ) - if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() ) - sr->setEnabled(true); - - // disable VTK selectors - getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() ); - QListIterator itVTKSel( myVTKSelectors ); - while ( itVTKSel.hasNext() ) - if ( LightApp_VTKSelector* sr = itVTKSel.next() ) - sr->setEnabled(true); + onViewManagerAdded(vm); sm->setSelectedObjects( selected, true ); //NPAL 19674 @@ -1853,6 +1807,7 @@ bool GeometryGUI::deactivateModule( SUIT_Study* study ) LightApp_SelectionMgr* selMrg = getApp()->selectionMgr(); disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateCreationInfo() )); + disconnect( selMrg, SIGNAL( currentSelectionChanged() ), this, SLOT( updateFieldColorScale() )); getApp()->removeDockWindow( myCreationInfoWdg->getWinID() ); myCreationInfoWdg = 0; @@ -1863,8 +1818,6 @@ bool GeometryGUI::deactivateModule( SUIT_Study* study ) it.value()->deactivate(); // Unset actions accelerator keys - action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I - action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete qDeleteAll(myOCCSelectors); @@ -1910,6 +1863,7 @@ void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win ) void GeometryGUI::windows( QMap& mappa ) const { mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea ); + mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea ); mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea ); if ( myCreationInfoWdg ) mappa.insert( myCreationInfoWdg->getWinID(), Qt::LeftDockWidgetArea ); @@ -2039,15 +1993,22 @@ void GeometryGUI::updateCreationInfo() SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); QString name = info->operationName.in(); if ( !name.isEmpty() ) { - icon = resMgr->loadPixmap( "GEOM", tr( ("ICO_"+name).toLatin1().constData() ), false ); + + QString plugin_name; + for ( size_t i = 0; i < info->params.length(); ++i ) { + myCreationInfoWdg->addParam( info->params[i].name.in(), + info->params[i].value.in() ); + QString value = info->params[i].name.in(); + if( value == PLUGIN_NAME ) { + plugin_name = info->params[i].value.in(); + } + } + QString prefix = plugin_name.isEmpty() ? "GEOM" : plugin_name; + icon = resMgr->loadPixmap( prefix, tr( ("ICO_"+name).toLatin1().constData() ), false ); operationName = tr( ("MEN_"+name).toLatin1().constData() ); if ( operationName.startsWith( "MEN_" )) operationName = name; // no translation myCreationInfoWdg->setOperation( icon, operationName ); - - for ( size_t i = 0; i < info->params.length(); ++i ) - myCreationInfoWdg->addParam( info->params[i].name.in(), - info->params[i].value.in() ); } } } @@ -2058,10 +2019,10 @@ void GeometryGUI::updateCreationInfo() void GeometryGUI::onAutoBringToFront() { - bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front" ); + bool isAutoBringToFront = SUIT_Session::session()->resourceMgr()->booleanValue( "Geometry", "auto_bring_to_front", "false" ); if( !isAutoBringToFront ) return; - + SUIT_ViewWindow* SUIT_window = application()->desktop()->activeWindow(); if ( !SUIT_window || SUIT_window->getViewManager()->getType() != OCCViewer_Viewer::Type() ) return; @@ -2070,40 +2031,55 @@ void GeometryGUI::onAutoBringToFront() if (!appStudy) return; GEOM_Displayer displayer( appStudy ); - + SALOME_View* window = displayer.GetActiveView(); if ( !window ) return; - + int aMgrId = dynamic_cast< SUIT_ViewModel* >( window )->getViewManager()->getGlobalId(); - + SALOME_ListIO selected; getApp()->selectionMgr()->selectedObjects( selected ); - SALOME_ListIO allObjects; - window->GetVisible( allObjects ); - - for ( SALOME_ListIteratorOfListIO It( allObjects ); It.More(); It.Next() ) { - Handle( SALOME_InteractiveObject ) io = It.Value(); - bool isSelected = false; - for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { - Handle( SALOME_InteractiveObject ) ioSelected = It.Value(); - if( io->isSame( ioSelected ) ) - isSelected = true; - } - QVariant v = appStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), QVariant() ); - bool isTopLevel = v.isValid() ? v.toBool() : false; - if( isSelected && !isTopLevel ) { - appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true ); - if ( window->isVisible( io ) ) displayer.Redisplay( io, false ); - } - else if( !isSelected ) { - appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false ); - if ( window->isVisible( io ) ) displayer.Redisplay( io, false ); + if (!myTopLevelIOList.IsEmpty()) + { + for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() ) + { + Handle( SALOME_InteractiveObject ) io = It.Value(); + bool isSelected = false; + for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() ) + { + Handle( SALOME_InteractiveObject ) sel_io = It_sel.Value(); + if( io->isSame( sel_io ) ) + isSelected = true; + } + if (!isSelected && appStudy->findObjectByEntry(io->getEntry())) + { + appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), false ); + if ( window->isVisible( io ) ) displayer.Redisplay( io, false ); + } } } + + myTopLevelIOList.Assign(selected); + for( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) + { + Handle( SALOME_InteractiveObject ) io = It.Value(); + appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::TopLevel ), true ); + if ( window->isVisible( io ) ) displayer.Redisplay( io, false ); + } + displayer.UpdateViewer(); GeometryGUI::Modified(); } +void GeometryGUI::updateFieldColorScale() +{ + if( SalomeApp_Study* aStudy = dynamic_cast( getApp()->activeStudy() ) ) + { + GEOM_Displayer aDisplayer( aStudy ); + aDisplayer.UpdateColorScale(); + } +} + QString GeometryGUI::engineIOR() const { if ( !CORBA::is_nil( GetGeomGen() ) ) @@ -2111,20 +2087,12 @@ QString GeometryGUI::engineIOR() const return ""; } -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture -#else -Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture -#endif (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight) { theWidth = theHeight = 0; -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 Handle(TColStd_HArray1OfByte) aTexture; -#else - Handle(Graphic3d_HArray1OfBytes) aTexture; -#endif if (theStudy) { TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ]; @@ -2138,11 +2106,7 @@ Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture theWidth = aWidth; theHeight = aHeight; -#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 aTexture = new TColStd_HArray1OfByte (1, aStream->length()); -#else - aTexture = new Graphic3d_HArray1OfBytes (1, aStream->length()); -#endif for (int i = 0; i < aStream->length(); i++) aTexture->SetValue( i+1, (Standard_Byte)aStream[i] ); @@ -2273,8 +2237,8 @@ void GeometryGUI::createPreferences() int top_lev_dm = addPreference( tr( "PREF_TOPLEVEL_DM" ), genGroup, LightApp_Preferences::Selector, "Geometry", "toplevel_dm" ); - int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup, - LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" ); + int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup, + LightApp_Preferences::IntSpin, "Geometry", "transparency" ); int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup, LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" ); @@ -2310,9 +2274,68 @@ void GeometryGUI::createPreferences() setPreferenceProperty( wd[i], "max", 5 ); } + int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup, + LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" ); + addPreference( tr( "PREF_AUTO_BRING_TO_FRONT" ), genGroup, LightApp_Preferences::Bool, "Geometry", "auto_bring_to_front" ); + int aDimGroupId = addPreference( tr( "PREF_DIMENSIONS" ), tabId ); + setPreferenceProperty( aDimGroupId, "columns", 2 ); + + addPreference( tr( "PREF_DIMENSIONS_COLOR" ), aDimGroupId, + LightApp_Preferences::Color, "Geometry", "dimensions_color" ); + + int aDimLineWidthId = addPreference( tr( "PREF_DIMENSIONS_LINE_WIDTH" ), aDimGroupId, + LightApp_Preferences::IntSpin, "Geometry", "dimensions_line_width" ); + + setPreferenceProperty( aDimLineWidthId, "min", 1 ); + setPreferenceProperty( aDimLineWidthId, "max", 5 ); + + int aDimFontHeightId = addPreference( tr( "PREF_DIMENSIONS_FONT_HEIGHT" ), aDimGroupId, + LightApp_Preferences::DblSpin, "Geometry", "dimensions_font_height" ); + + setPreferenceProperty( aDimFontHeightId, "min", 1e-9 ); + setPreferenceProperty( aDimFontHeightId, "max", 1e+9 ); + setPreferenceProperty( aDimFontHeightId, "precision", 9 ); + + int aDimArrLengthId = addPreference( tr( "PREF_DIMENSIONS_ARROW_LENGTH" ), aDimGroupId, + LightApp_Preferences::DblSpin, "Geometry", "dimensions_arrow_length" ); + + setPreferenceProperty( aDimArrLengthId, "min", 1e-9 ); + setPreferenceProperty( aDimArrLengthId, "max", 1e+9 ); + setPreferenceProperty( aDimArrLengthId, "precision", 9 ); + + int aLengthUnitsId = addPreference( tr( "PREF_DIMENSIONS_LENGTH_UNITS" ), aDimGroupId, + LightApp_Preferences::Selector, "Geometry", "dimensions_length_units" ); + + int anAngUnitsId = addPreference( tr( "PREF_DIMENSIONS_ANGLE_UNITS" ), aDimGroupId, + LightApp_Preferences::Selector, "Geometry", "dimensions_angle_units" ); + + addPreference( tr( "PREF_DIMENSIONS_SHOW_UNITS" ), aDimGroupId, + LightApp_Preferences::Bool, "Geometry", "dimensions_show_units" ); + + QStringList aListOfLengthUnits; + aListOfLengthUnits << "m"; + aListOfLengthUnits << "cm"; + aListOfLengthUnits << "mm"; + aListOfLengthUnits << "in."; + aListOfLengthUnits << "ft."; + + QStringList aListOfAngUnits; + aListOfAngUnits << "rad"; + aListOfAngUnits << "deg"; + + setPreferenceProperty( aLengthUnitsId, "strings", aListOfLengthUnits ); + setPreferenceProperty( anAngUnitsId, "strings", aListOfAngUnits ); + + int aDimDefFlyout = addPreference( tr( "PREF_DIMENSIONS_DEFAULT_FLYOUT" ), aDimGroupId, + LightApp_Preferences::DblSpin, "Geometry", "dimensions_default_flyout" ); + + setPreferenceProperty( aDimDefFlyout, "min", 1e-9 ); + setPreferenceProperty( aDimDefFlyout, "max", 1e+9 ); + setPreferenceProperty( aDimDefFlyout, "precision", 9 ); + int isoGroup = addPreference( tr( "PREF_ISOS" ), tabId ); setPreferenceProperty( isoGroup, "columns", 2 ); int isoU = addPreference( tr( "PREF_ISOS_U" ), isoGroup, @@ -2368,11 +2391,13 @@ void GeometryGUI::createPreferences() aModesList.append( tr("MEN_WIREFRAME") ); aModesList.append( tr("MEN_SHADING") ); aModesList.append( tr("MEN_SHADING_WITH_EDGES") ); + aModesList.append( tr("MEN_TEXTURE") ); QList anIndexesList; anIndexesList.append(0); anIndexesList.append(1); anIndexesList.append(2); + anIndexesList.append(3); setPreferenceProperty( dispmode, "strings", aModesList ); setPreferenceProperty( dispmode, "indexes", anIndexesList ); @@ -2400,6 +2425,10 @@ void GeometryGUI::createPreferences() setPreferenceProperty( step, "max", 10000 ); setPreferenceProperty( step, "precision", 3 ); + // Set property for trandparency value for spinboxes + setPreferenceProperty( transparency, "min", 0 ); + setPreferenceProperty( transparency, "max", 100 ); + // Set property for deflection value for spinboxes setPreferenceProperty( defl, "min", GEOM::minDeflection() ); setPreferenceProperty( defl, "max", 1.0 ); @@ -2436,6 +2465,46 @@ void GeometryGUI::createPreferences() setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList ); setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList ); + // Scalar bar for field step presentation + int scalarBarGroup = addPreference( tr( "PREF_GROUP_SCALAR_BAR" ), tabId ); + setPreferenceProperty( scalarBarGroup, "columns", 2 ); + + int sbXPosition = addPreference( tr( "PREF_SCALAR_BAR_X_POSITION" ), scalarBarGroup, + LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_x_position" ); + setPreferenceProperty( sbXPosition, "min", 0 ); + setPreferenceProperty( sbXPosition, "max", 1 ); + setPreferenceProperty( sbXPosition, "step", 0.05 ); + + int sbYPosition = addPreference( tr( "PREF_SCALAR_BAR_Y_POSITION" ), scalarBarGroup, + LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_y_position" ); + setPreferenceProperty( sbYPosition, "min", 0 ); + setPreferenceProperty( sbYPosition, "max", 1 ); + setPreferenceProperty( sbYPosition, "step", 0.05 ); + + int sbWidth = addPreference( tr( "PREF_SCALAR_BAR_WIDTH" ), scalarBarGroup, + LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_width" ); + setPreferenceProperty( sbWidth, "min", 0 ); + setPreferenceProperty( sbWidth, "max", 1 ); + setPreferenceProperty( sbWidth, "step", 0.05 ); + + int sbHeight = addPreference( tr( "PREF_SCALAR_BAR_HEIGHT" ), scalarBarGroup, + LightApp_Preferences::DblSpin, "Geometry", "scalar_bar_height" ); + setPreferenceProperty( sbHeight, "min", 0 ); + setPreferenceProperty( sbHeight, "max", 1 ); + setPreferenceProperty( sbHeight, "step", 0.05 ); + + int sbTextHeight = addPreference( tr( "PREF_SCALAR_BAR_TEXT_HEIGHT" ), scalarBarGroup, + LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_text_height" ); + setPreferenceProperty( sbTextHeight, "min", 6 ); + setPreferenceProperty( sbTextHeight, "max", 24 ); + setPreferenceProperty( sbTextHeight, "step", 1 ); + + int sbNbIntervals = addPreference( tr( "PREF_SCALAR_BAR_NUMBER_OF_INTERVALS" ), scalarBarGroup, + LightApp_Preferences::IntSpin, "Geometry", "scalar_bar_nb_intervals" ); + setPreferenceProperty( sbNbIntervals, "min", 2 ); + setPreferenceProperty( sbNbIntervals, "max", 64 ); + setPreferenceProperty( sbNbIntervals, "step", 1 ); + int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId ); setPreferenceProperty( originGroup, "columns", 2 ); @@ -2452,6 +2521,54 @@ void GeometryGUI::createPreferences() addPreference( tr( "GEOM_PREVIEW" ), operationsGroup, LightApp_Preferences::Bool, "Geometry", "geom_preview" ); + + int DependencyViewId = addPreference( tr( "PREF_TAB_DEPENDENCY_VIEW" ) ); + + int treeGeneralGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), DependencyViewId ); + + int hierarchy_type = addPreference( tr( "PREF_HIERARCHY_TYPE" ), treeGeneralGroup, + LightApp_Preferences::Selector, "Geometry", "dependency_tree_hierarchy_type" ); + + QStringList aHierarchyTypeList; + aHierarchyTypeList.append( tr("MEN_BOTH_ASCENDANTS_DESCENDANTS") ); + aHierarchyTypeList.append( tr("MEN_ONLY_ASCENDANTS") ); + aHierarchyTypeList.append( tr("MEN_ONLY_DESCENDANTS") ); + + QList aHierarchyTypeIndexesList; + aHierarchyTypeIndexesList.append(0); + aHierarchyTypeIndexesList.append(1); + aHierarchyTypeIndexesList.append(2); + + setPreferenceProperty( hierarchy_type, "strings", aHierarchyTypeList ); + setPreferenceProperty( hierarchy_type, "indexes", aHierarchyTypeIndexesList ); + + addPreference( tr( "GEOM_MOVE_POSSIBILITY" ), treeGeneralGroup, + LightApp_Preferences::Bool, "Geometry", "dependency_tree_move_nodes" ); + + int treeColorGroup = addPreference( tr( "PREF_GROUP_DEPENDENCY_VIEW_COLOR" ), DependencyViewId ); + + addPreference( tr( "PREF_DEPENDENCY_VIEW_BACKGROUND_COLOR"), treeColorGroup, + LightApp_Preferences::Color, "Geometry", "dependency_tree_background_color" ); + + addPreference( tr( "PREF_DEPENDENCY_VIEW_NODE_COLOR"), treeColorGroup, + LightApp_Preferences::Color, "Geometry", "dependency_tree_node_color" ); + addPreference( tr( "PREF_DEPENDENCY_VIEW_MAIN_NODE_COLOR"), treeColorGroup, + LightApp_Preferences::Color, "Geometry", "dependency_tree_main_node_color" ); + addPreference( tr( "PREF_DEPENDENCY_VIEW_UNPUBLISH_NODE_COLOR"), treeColorGroup, + LightApp_Preferences::Color, "Geometry", "dependency_tree_unpublish_node_color" ); + addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_NODE_COLOR"), treeColorGroup, + LightApp_Preferences::Color, "Geometry", "dependency_tree_select_node_color" ); + + addPreference( tr( "PREF_DEPENDENCY_VIEW_ARROW_COLOR"), treeColorGroup, + LightApp_Preferences::Color, "Geometry", "dependency_tree_arrow_color" ); + addPreference( tr( "PREF_DEPENDENCY_VIEW_HIGHLIGHT_ARROW_COLOR"), treeColorGroup, + LightApp_Preferences::Color, "Geometry", "dependency_tree_highlight_arrow_color" ); + addPreference( tr( "PREF_DEPENDENCY_VIEW_SELECT_ARROW_COLOR"), treeColorGroup, + LightApp_Preferences::Color, "Geometry", "dependency_tree_select_arrow_color" ); + + + + } void GeometryGUI::preferencesChanged( const QString& section, const QString& param ) @@ -2469,6 +2586,61 @@ void GeometryGUI::preferencesChanged( const QString& section, const QString& par else if (param == QString("toplevel_dm")) { GEOM_AISShape::setTopLevelDisplayMode((GEOM_AISShape::TopLevelDispMode)aResourceMgr->integerValue("Geometry", "toplevel_dm", 0)); } + else if (param == QString("scalar_bar_x_position") || + param == QString("scalar_bar_y_position") || + param == QString("scalar_bar_width") || + param == QString("scalar_bar_height") || + param == QString("scalar_bar_text_height") || + param == QString("scalar_bar_nb_intervals")) { + if( SalomeApp_Study* aStudy = dynamic_cast( getApp()->activeStudy() ) ) + { + GEOM_Displayer aDisplayer( aStudy ); + bool anIsRedisplayFieldSteps = param == QString("scalar_bar_nb_intervals"); + aDisplayer.UpdateColorScale( anIsRedisplayFieldSteps, true ); + } + } + else if ( param == QString("dimensions_color") || + param == QString("dimensions_line_width") || + param == QString("dimensions_font_height") || + param == QString("dimensions_arrow_length") || + param == QString("dimensions_show_units") || + param == QString("dimensions_length_units") || + param == QString("dimensions_angle_units") ) + { + SalomeApp_Application* anApp = getApp(); + if ( !anApp ) + { + return; + } + + SalomeApp_Study* aStudy = dynamic_cast( anApp->activeStudy() ); + if ( !aStudy ) + { + return; + } + + GEOM_Displayer aDisplayer( aStudy ); + + ViewManagerList aVMs; + anApp->viewManagers( OCCViewer_Viewer::Type(), aVMs ); + ViewManagerList::Iterator anIt = aVMs.begin(); + for ( ; anIt != aVMs.end(); ++anIt ) + { + SOCC_Viewer* aViewer = dynamic_cast( (*anIt)->getViewModel() ); + if ( !aViewer ) + { + continue; + } + + SALOME_ListIO aVisible; + aViewer->GetVisible( aVisible ); + aDisplayer.Redisplay( aVisible, false, aViewer ); + } + + aDisplayer.UpdateViewer(); + } + else if ( param.startsWith( "dependency_tree") ) + emit SignalDependencyTreeParamChanged( section, param ); } } @@ -2516,6 +2688,7 @@ void GeometryGUI::storeVisualParameters (int savePoint) savePoint); _PTR(IParameters) ip = ClientFactory::getIParameters(ap); + QSet anEntriesToStoreShared; QList lst; QList::Iterator it; @@ -2529,10 +2702,10 @@ void GeometryGUI::storeVisualParameters (int savePoint) // saving VTK actors properties QVector views = vman->getViews(); for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) { - const ObjMap anObjects = appStudy->getObjectMap(aMgrId); + const ObjMap& anObjects = appStudy->getObjectProperties(aMgrId); ObjMap::ConstIterator o_it = anObjects.begin(); for (; o_it != anObjects.end(); o_it++) { - const PropMap aProps = o_it.value(); + const PropMap& aProps = o_it.value(); //Check that object exists in the study _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) ); @@ -2547,6 +2720,13 @@ void GeometryGUI::storeVisualParameters (int savePoint) if (!obj->FindAttribute(anAttr, "AttributeIOR")) continue; + // remember entry of object to store shared GEOM properties + // (e.g. dimension properties). + if ( vType == OCCViewer_Viewer::Type() ) + { + anEntriesToStoreShared.insert( o_it.key() ); + } + QString param, occParam = vType; occParam += GEOM::sectionSeparator(); occParam += QString::number(aMgrId); @@ -2571,6 +2751,11 @@ void GeometryGUI::storeVisualParameters (int savePoint) param = occParam + GEOM::propertyName( GEOM::Color ); ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString()); } + + if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) { + param = occParam + GEOM::propertyName( GEOM::Texture ); + ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString()); + } if (vType == SVTK_Viewer::Type()) { if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) { @@ -2599,6 +2784,11 @@ void GeometryGUI::storeVisualParameters (int savePoint) ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString()); } + if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) { + param = occParam + GEOM::propertyName( GEOM::Vertices ); + ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString()); + } + if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) { param = occParam + GEOM::propertyName( GEOM::Deflection ); ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString()); @@ -2627,6 +2817,26 @@ void GeometryGUI::storeVisualParameters (int savePoint) } // object iterator } // for (views) } // for (viewManagers) + + // store dimension attributes of objects: + // since the displayed object always persists in property map, we remember the object entries + // on the passes when we store viewer related properties - to avoid extra iterations on GEOM component tree. + QString aDimensionParam = OCCViewer_Viewer::Type() + GEOM::sectionSeparator() + GEOM::propertyName( GEOM::Dimensions ); + QSet::ConstIterator aEntryIt = anEntriesToStoreShared.constBegin(); + for ( ; aEntryIt != anEntriesToStoreShared.constEnd(); ++aEntryIt ) + { + std::string aStudyEntry = (*aEntryIt).toLatin1().data(); + std::string aStoreEntry = ip->encodeEntry( aStudyEntry, componentName); + + GEOMGUI_DimensionProperty aDimensions( appStudy, aStudyEntry ); + + if ( aDimensions.GetNumber() == 0 ) + { + continue; + } + + ip->setParameter( aStoreEntry, aDimensionParam.toStdString(), ((QString)aDimensions).toLatin1().data() ); + } } /*! @@ -2683,12 +2893,36 @@ void GeometryGUI::restoreVisualParameters (int savePoint) for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt) { - // visual parameters are stored in strings as follows: ViewerType_ViewIndex_ParamName. + // visual parameters are stored in strings as follows: + // 1) ViewerType_ViewIndex_ParamName + // 2) ViewerType_ParamName (shared for GEOM module) // '_' is used as separator and should not be used in viewer type or parameter names. QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts); - if (lst.size() != 3) + + bool isShared = lst.size() == 2; + bool isViewer = lst.size() == 3; + if ( !isShared && !isViewer ) + { continue; + } + + // shared visual parameters + if ( isShared ) + { + QString aParamNameStr( lst[1] ); + QString aValuesStr( (*valuesIt).c_str() ); + + // shared dimension properties are stored as attribute + if ( aParamNameStr == GEOM::propertyName( GEOM::Dimensions ) ) + { + GEOMGUI_DimensionProperty aDimensionProp( aValuesStr ); + aDimensionProp.SaveToAttribute( appStudy, entry.toLatin1().data() ); + } + continue; + } + + // per view visual parameters viewerTypStr = lst[0]; viewIndexStr = lst[1]; QString paramNameStr = lst[2]; @@ -2721,8 +2955,12 @@ void GeometryGUI::restoreVisualParameters (int savePoint) QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble()); aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c); } + } else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) { + aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val ); } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) { aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1"); + } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) { + aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1"); } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) { aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble()); } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) { @@ -2739,8 +2977,7 @@ void GeometryGUI::restoreVisualParameters (int savePoint) QList lst = getApp()->viewManagers(); for (int index = 0; index < aListOfMap.count(); index++) { - - appStudy->setObjectPropMap(index, entry, aListOfMap[index]); + appStudy->setObjectProperties(index, entry, aListOfMap[index]); //Get Visibility property of the current PropMap if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) { @@ -2776,13 +3013,19 @@ void GeometryGUI::onViewAboutToShow() { SUIT_ViewWindow* window = application()->desktop()->activeWindow(); QAction* a = action( GEOMOp::OpSwitchVectors ); + QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices ); if ( window ) { a->setEnabled(true); bool vmode = window->property("VectorsMode").toBool(); a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") ); + aVerticesAction->setEnabled(true); + vmode = window->property("VerticesMode").toBool(); + aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") ); } else { a->setText ( tr("MEN_VECTOR_MODE_ON") ); a->setEnabled(false); + aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") ); + aVerticesAction->setEnabled(false); } } @@ -2963,6 +3206,7 @@ bool GeometryGUI::renameObject( const QString& entry, const QString& name) GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj)); if (!CORBA::is_nil(anObj)) { anObj->SetName( name.toLatin1().data() ); // Rename the corresponding GEOM_Object + emit SignalDependencyTreeRenameObject( anObj->GetEntry() ); } result = true; }