-// 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
// 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
#include "Python.h"
#include "GeometryGUI.h"
#include "GeometryGUI_Operations.h"
+#include "GEOMPluginGUI.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"
#include <SUIT_Session.h>
#include <SUIT_ViewManager.h>
+#include <PyInterp_Interp.h>
+
#include <OCCViewer_ViewWindow.h>
#include <OCCViewer_ViewPort3d.h>
#include <OCCViewer_ViewModel.h>
#include <SVTK_InteractorStyle.h>
#include <SVTK_ViewModel.h>
+#include <GraphicsView_Viewer.h>
+
#include <SalomeApp_Application.h>
#include <SalomeApp_DataObject.h>
#include <SalomeApp_Study.h>
#include <SALOME_LifeCycleCORBA.hxx>
#include <SALOME_ListIO.hxx>
-#include <SALOME_ListIteratorOfListIO.hxx>
#include <SALOMEDSClient_ClientFactory.hxx>
#include <SALOMEDSClient_IParameters.hxx>
#include <Basics_OCCTVersion.hxx>
// External includes
+#include <QDir>
+#include <QSet>
#include <QMenu>
#include <QTime>
#include <QAction>
#include <OSD_SharedLibrary.hxx>
#include <NCollection_DataMap.hxx>
-#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
#include <TColStd_HArray1OfByte.hxx>
-#else
-#include <Graphic3d_HArray1OfBytes.hxx>
-#endif
#include <utilities.h>
// purpose : Constructor
//=======================================================================
GeometryGUI::GeometryGUI() :
- SalomeApp_Module( "GEOM" )
+ SalomeApp_Module( "GEOM" ),
+ myTopLevelIOList()
{
if ( CORBA::is_nil( myComponentGeom ) )
{
myCreationInfoWdg = 0;
connect( Material_ResourceMgr::resourceMgr(), SIGNAL( changed() ), this, SLOT( updateMaterials() ) );
+
+ Q_INIT_RESOURCE( GEOMGUI );
}
//=======================================================================
{
if ( !myGUIMap.contains( libraryName ) ) {
// try to load library if it is not loaded yet
-#ifndef WNT
+#ifndef WIN32
QString dirs = getenv( "LD_LIBRARY_PATH" );
QString sep = ":";
#else
return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
}
+//=======================================================================
+// function : GeometryGUI::getPluginLibrary()
+// purpose : get or load GUI Plugin library by name [ internal ]
+//=======================================================================
+typedef GEOMPluginGUI* (*PluginLibraryGUI)( GeometryGUI* );
+GEOMPluginGUI* GeometryGUI::getPluginLibrary( const QString& libraryName )
+{
+ if ( !myGUIMap.contains( libraryName ) ) {
+ // try to load library if it is not loaded yet
+#ifndef WIN32
+ QString dirs = getenv( "LD_LIBRARY_PATH" );
+ QString sep = ":";
+#else
+ QString dirs = getenv( "PATH" );
+ QString sep = ";";
+#endif
+ if ( !dirs.isEmpty() ) {
+ QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
+ QListIterator<QString> it( dirList ); it.toBack();
+ while ( it.hasPrevious() ) {
+ QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
+ if ( fi.exists() ) {
+ OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
+ bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
+ if ( !res ) {
+ MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
+ continue; // continue search further
+ }
+ OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
+ if ( osdF != NULL ) {
+ PluginLibraryGUI func = (GEOMPluginGUI* (*) (GeometryGUI*))osdF;
+ GEOMPluginGUI* libGUI = (*func)( this );
+ if ( libGUI ) {
+ myGUIMap[ libraryName ] = libGUI;
+ break; // found and loaded!
+ }
+ }
+ }
+ }
+ }
+ }
+ return myGUIMap.contains( libraryName ) ? (GEOMPluginGUI*)myGUIMap[ libraryName ] : 0;
+}
+
//=======================================================================
// function : GeometryGUI::ActiveWorkingPlane()
// purpose : Activate Working Plane View
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<int> NotViewerDependentCommands;
<< GEOMOp::OpPointMarker
<< GEOMOp::OpCreateFolder
<< GEOMOp::OpSortChildren;
- if ( !ViewOCC && !ViewVTK && !NotViewerDependentCommands.contains( id ) )
- return;
+ if ( !ViewOCC && !ViewVTK && !ViewDep && !NotViewerDependentCommands.contains( id ) ) {
+ // activate OCC viewer
+ getApp()->getViewManager(OCCViewer_Viewer::Type(), /*create=*/true);
+ }
// fix for IPAL9103, point 2
if ( CORBA::is_nil( GetGeomGen() ) ) {
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
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
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
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
#endif
case GEOMOp::OpPictureImport: // MENU ENTITY - IMPORT PICTURE IN VIEWER
+ 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
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
case GEOMOp::OpExplodeBlock: // MENU BLOCKS - EXPLODE ON BLOCKS
libName = "BlocksGUI";
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
- case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
- case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
- case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
- //@@ 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 @@//
- libName = "AdvancedGUI";
- 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
+ //case GEOMOp::OpDividedDisk: // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
+ //case GEOMOp::OpDividedCylinder: // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
+ //case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
+ //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
+ //libName = "AdvancedGUI";
+ //break;
default:
+ if (myPluginActions.contains(id)) {
+ libName = myPluginActions[id].first;
+
+ GEOMPluginGUI* library = 0;
+ if ( !libName.isEmpty() ) {
+#ifndef WIN32
+ libName = QString( "lib" ) + libName + ".so";
+#else
+ libName = libName + ".dll";
+#endif
+ library = getPluginLibrary( libName );
+ }
+
+ // call method of corresponding GUI library
+ if ( library ) {
+ //QString action ("%1");
+ //action = action.arg(id);
+
+ //if( !theParam.isValid() )
+ library->OnGUIEvent( myPluginActions[id].second, desk );
+ //else
+ // library->OnGUIEvent( id, desk, theParam);
+ }
+ else
+ SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
+
+ updateCreationInfo();
+ return;
+ }
break;
}
GEOMGUI* library = 0;
if ( !libName.isEmpty() ) {
-#ifndef WNT
+#ifndef WIN32
libName = QString( "lib" ) + libName + ".so";
#else
libName = libName + ".dll";
updateCreationInfo();
}
+//=================================================================================
+// function : GeometryGUI::activateOperation()
+// purpose :
+//=================================================================================
+bool GeometryGUI::activateOperation( int actionId )
+{
+ OnGUIEvent(actionId);
+ return true;
+}
+
+//=================================================================================
+// function : GeometryGUI::activateOperation()
+// purpose :
+//=================================================================================
+bool GeometryGUI::activateOperation( const QString& actionId )
+{
+ bool isOk = false;
+
+ int id = actionId.toInt(&isOk);
+ if (isOk)
+ OnGUIEvent(id);
+
+ return isOk;
+}
+
+//=================================================================================
+// function : GeometryGUI::activateOperation()
+// purpose :
+//=================================================================================
+bool GeometryGUI::activateOperation( const QString& actionId, const QString& plugin )
+{
+ bool isOk = false;
+
+ QString pluginLib = plugin;
+ // TODO: if <plugin> is a plugin name, find plugin library name
+ if (myPluginLibs.contains(plugin))
+ pluginLib = myPluginLibs[plugin];
+
+ QMap<int, PluginAction>::iterator actionsIter = myPluginActions.begin();
+ for (; actionsIter != myPluginActions.end(); ++actionsIter) {
+ const PluginAction& anAction = actionsIter.value();
+ if (anAction.first == pluginLib && anAction.second == actionId) {
+ // activate operation
+ OnGUIEvent(actionsIter.key());
+ isOk = true;
+ }
+ }
+
+ return isOk;
+}
+
//=================================================================================
// function : GeometryGUI::OnKeyPress()
// purpose : Called when any key is pressed by user [static]
void GeometryGUI::createOriginAndBaseVectors()
{
SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( 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() ) ) {
// ----- 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" );
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" );
createGeomAction( GEOMOp::OpGroupIntersect, "GROUP_INTERSECT" );
createGeomAction( GEOMOp::OpGroupCut, "GROUP_CUT" );
+ createGeomAction( GEOMOp::OpCreateField, "FIELD_CREATE" );
+ createGeomAction( GEOMOp::OpEditField, "FIELD_EDIT" );
+
createGeomAction( GEOMOp::OpReimport, "RELOAD_IMPORTED" );
createGeomAction( GEOMOp::OpQuadFace, "Q_FACE" );
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" );
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" );
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 );
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" );
createGeomAction( GEOMOp::OpAutoColor, "POP_AUTO_COLOR" );
createGeomAction( GEOMOp::OpNoAutoColor, "POP_DISABLE_AUTO_COLOR" );
createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
+ createGeomAction( GEOMOp::OpEditFieldPopup, "POP_EDIT_FIELD" );
createGeomAction( GEOMOp::OpDiscloseChildren, "POP_DISCLOSE_CHILDREN" );
createGeomAction( GEOMOp::OpConcealChildren, "POP_CONCEAL_CHILDREN" );
createGeomAction( GEOMOp::OpUnpublishObject, "POP_UNPUBLISH_OBJ" );
createGeomAction( GEOMOp::OpPredefMaterCustom, "POP_PREDEF_MATER_CUSTOM" );
createGeomAction( GEOMOp::OpCreateFolder, "POP_CREATE_FOLDER" );
createGeomAction( GEOMOp::OpSortChildren, "POP_SORT_CHILD_ITEMS" );
-
- createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
+ 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,
createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
"Geometry:Decrease number of isolines");
-// createGeomAction( GEOMOp::OpPipeTShapeGroups, "PIPETSHAPEGROUPS" );
- createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
- createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
- createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
+ //createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
+ //createGeomAction( GEOMOp::OpDividedDisk, "DIVIDEDDISK" );
+ //createGeomAction( GEOMOp::OpDividedCylinder, "DIVIDEDCYLINDER" );
+ //createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
//@@ 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 @@//
// ---- 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 );
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 );
createMenu( GEOMOp::OpCone, primId, -1 );
createMenu( GEOMOp::OpRectangle, primId, -1 );
createMenu( GEOMOp::OpDisk, primId, -1 );
- createMenu( GEOMOp::OpPipeTShape,primId, -1 );
+ //createMenu( GEOMOp::OpPipeTShape,primId, -1 );
int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
createMenu( GEOMOp::OpPrism, genId, -1 );
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 advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
- createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
- //@@ 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 @@//
+ //int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
+ //createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
+ //@@ 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 @@//
createMenu( separator(), newEntId, -1 );
createMenu( separator(), newEntId, -1 );
+ int fieldId = createMenu( tr( "MEN_FIELD" ), newEntId, -1 );
+ createMenu( GEOMOp::OpCreateField, fieldId, -1 );
+ createMenu( GEOMOp::OpEditField, fieldId, -1 );
+
+ createMenu( separator(), newEntId, -1 );
+
int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
createMenu( GEOMOp::OpQuadFace, blocksId, -1 );
createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
- createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
- createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
+ //createMenu( GEOMOp::OpDividedDisk, blocksId, -1 );
+ //createMenu( GEOMOp::OpDividedCylinder, blocksId, -1 );
createMenu( separator(), newEntId, -1 );
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 );
createMenu( separator(), toolsId, -1 );
createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
#endif
-
+
createMenu( separator(), toolsId, -1 );
createMenu( GEOMOp::OpMaterialsLibrary, toolsId, -1 );
createMenu( separator(), toolsId, -1 );
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 );
// ---- 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 );
createTool( GEOMOp::OpCone, primTbId );
createTool( GEOMOp::OpRectangle, primTbId );
createTool( GEOMOp::OpDisk, primTbId );
- createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
-
- int blocksTbId = createTool( tr( "TOOL_BLOCKS" ) );
- createTool( GEOMOp::OpDividedDisk, blocksTbId );
- createTool( GEOMOp::OpDividedCylinder, blocksTbId );
+ //createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
-// int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) ); //rnc
-// createTool( GEOMOp::OpPipeTShape, advancedTbId );
+ //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 );
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 );
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 );
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 );
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
+#ifdef WITH_OPENCV
+ createTool( GEOMOp::OpFeatureDetect, picturesTbId );
+#endif
- int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
- createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
+ //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 @@//
// ---- create popup menus --------------------------
QtxPopupMgr* mgr = popupMgr();
mgr->insert( action( GEOMOp::OpDelete ), -1, -1 ); // delete
- mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder'} and selcount>0"), QtxPopupMgr::VisibleRule );
+ mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group' 'Folder' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
mgr->insert( action( GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
+ mgr->insert( action( GEOMOp::OpEditFieldPopup ), -1, -1 ); // edit field
+ mgr->setRule( action( GEOMOp::OpEditFieldPopup ), QString("(type='Field' or type='FieldStep') and isOCC=true"), QtxPopupMgr::VisibleRule );
mgr->insert( action( GEOMOp::OpDiscloseChildren ), -1, -1 ); // disclose child items
mgr->setRule( action( GEOMOp::OpDiscloseChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasConcealedChildren=true"), QtxPopupMgr::VisibleRule );
- mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal shild items
+ mgr->insert( action( GEOMOp::OpConcealChildren ), -1, -1 ); // conceal child items
mgr->setRule( action( GEOMOp::OpConcealChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasDisclosedChildren=true"), QtxPopupMgr::VisibleRule );
mgr->insert( action( GEOMOp::OpGroupEdit ), -1, -1 ); // edit group
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
- mgr->setRule(action(GEOMOp::OpBringToFront), bringRule, QtxPopupMgr::VisibleRule );
+ mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
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, QtxPopupMgr::VisibleRule );
-#endif
+ mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC + " and autoBringToFront = false", QtxPopupMgr::VisibleRule );
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
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
mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency
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 );
+ mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 );
mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
// texture
QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
onlyComponent = "((type='Component') and selcount=1)",
rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
- types = "'Shape' 'Group'";
+ types = "'Shape' 'Group' 'FieldStep'";
mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display
mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
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'} and selcount>0"), QtxPopupMgr::VisibleRule );
+ mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0"), QtxPopupMgr::VisibleRule );
mgr->insert( action( GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
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();
QColor c = resMgr->colorValue( "Geometry", "toplevel_color", QColor( 170, 85, 0 ) );
GEOM_AISShape::setTopLevelColor(SalomeApp_Tools::color(c));
}
+
+ // create plugin actions and menus
+ addPluginActions();
+}
+
+//=======================================================================
+// function : GeometryGUI::addPluginActions()
+// purpose :
+//=======================================================================
+void GeometryGUI::addPluginActions()
+{
+ // Resource manager
+ SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+ if (!resMgr) return;
+
+ SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
+ if (!appStudy) return;
+
+ // Find names of a resource XML files ("AdvancedGEOM.xml" and others);
+
+ GEOMUtils::PluginInfo plugins = GEOMUtils::ReadPluginInfo();
+
+ int id = GEOMOp::OpLastOperationID; // TODO?
+
+ // 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<GEOMUtils::ActionData> actions = (*it).actions;
+ std::list<GEOMUtils::ActionData>::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 );
+ }
+ 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);
+ }
+
+ // add action id to map
+ PluginAction anAction( pdata.clientLib.c_str(), adata.label.c_str() );
+ myPluginActions[id] = anAction;
+
+ id++;
+ }
+ }
}
//=======================================================================
// import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
PyGILState_STATE gstate = PyGILState_Ensure();
- PyObject* pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
- if (pluginsmanager == NULL)
+ PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
+ if ( !pluginsmanager ) {
PyErr_Print();
+ }
else {
- PyObject* result =
+ PyObjWrapper result =
PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
tr("MEN_NEW_ENTITY").toStdString().c_str(),
tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
- if (result == NULL)
+ if ( !result )
PyErr_Print();
- Py_XDECREF(result);
}
PyGILState_Release(gstate);
// end of GEOM plugins loading
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;
LightApp_SelectionMgr* sm = getApp()->selectionMgr();
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<SUIT_ViewManager*> 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<SUIT_ViewManager*> itVTK( VTKViewManagers );
while ( itVTK.hasNext() && (vm = itVTK.next()) )
- myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
-
- //NPAL 19674
- SALOME_ListIO selected;
- sm->selectedObjects( selected );
- sm->clearSelected();
-
- // disable OCC selectors
- getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
- QListIterator<GEOMGUI_OCCSelector*> 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<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
- while ( itVTKSel.hasNext() )
- if ( LightApp_VTKSelector* sr = itVTKSel.next() )
- sr->setEnabled(true);
+ onViewManagerAdded(vm);
sm->setSelectedObjects( selected, true ); //NPAL 19674
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;
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);
action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
+ action( GEOMOp::OpCreateField )->setEnabled( ViewOCC ); // Create Field
+ action( GEOMOp::OpEditField )->setEnabled( ViewOCC ); // Edit Field
action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
}
void GeometryGUI::windows( QMap<int, int>& 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 );
//================================================================================
/*!
- * \brief Slot called when selection changed. Shows creation info of a selected object
+ * \brief Slot called when selection changed. Shows creation info of a selected object
*/
//================================================================================
void GeometryGUI::updateCreationInfo()
{
- myCreationInfoWdg->clear();
+ if ( myCreationInfoWdg )
+ myCreationInfoWdg->clear();
// Code below is commented to have myCreationInfoWdg filled as soon as it is shown again
// if ( !myCreationInfoWdg->isVisible() )
// return;
// look for a sole selected GEOM_Object
- GEOM::GEOM_Object_var geomObj;
+ GEOM::GEOM_BaseObject_var geomObj;
SALOME_ListIO selected;
getApp()->selectionMgr()->selectedObjects( selected );
if ( !io->hasEntry() ) continue;
_PTR(SObject) sobj = study->FindObjectID( io->getEntry() );
if ( !sobj ) continue;
- CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
- GEOM::GEOM_Object_var gobj = GEOM::GEOM_Object::_narrow( obj );
+ CORBA::Object_var obj = GeometryGUI::ClientSObjectToObject( sobj );
+ GEOM::GEOM_BaseObject_var gobj = GEOM::GEOM_BaseObject::_narrow( obj );
if ( !gobj->_is_nil() )
{
if ( !geomObj->_is_nil() )
// pass creation info of geomObj to myCreationInfoWdg
- QPixmap icon;
- QString operationName;
- myCreationInfoWdg->setOperation( icon, operationName );
+ if ( myCreationInfoWdg ) {
+ QPixmap icon;
+ QString operationName;
+ myCreationInfoWdg->setOperation( icon, operationName );
+
+ try {
+ OCC_CATCH_SIGNALS;
+ GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
+ if ( &info.in() ) {
+ SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+ QString name = info->operationName.in();
+ if ( !name.isEmpty() ) {
+
+ 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 );
+ }
+ }
+ }
+ catch (...) {
+ }
+ }
+}
+
+void GeometryGUI::onAutoBringToFront()
+{
+ 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;
+
+ SalomeApp_Study* appStudy = dynamic_cast< SalomeApp_Study* >( getApp()->activeStudy() );
+ if (!appStudy) return;
- try
+ 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 );
+ if (!myTopLevelIOList.IsEmpty())
{
- OCC_CATCH_SIGNALS;
- GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
- if ( &info.in() )
+ for( SALOME_ListIteratorOfListIO It( myTopLevelIOList ); It.More(); It.Next() )
{
- SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
- QString name = info->operationName.in();
- if ( !name.isEmpty() )
+ Handle( SALOME_InteractiveObject ) io = It.Value();
+ bool isSelected = false;
+ for( SALOME_ListIteratorOfListIO It_sel( selected ); It_sel.More(); It_sel.Next() )
{
- icon = resMgr->loadPixmap( "GEOM", 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() );
+ 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 );
}
}
}
- catch (...)
+
+ 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<SalomeApp_Study*>( getApp()->activeStudy() ) )
{
+ GEOM_Displayer aDisplayer( aStudy );
+ aDisplayer.UpdateColorScale();
}
}
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() ];
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] );
if( isPredefMat ){
QMenu* matMenu = new QMenu();
QSignalMapper* signalMapper = new QSignalMapper( matMenu );
-
+
//Get current material model for the object
QVariant v;
LightApp_Application* anApp = dynamic_cast<LightApp_Application*>( getApp() );
// get list of all predefined materials
QStringList materials = Material_ResourceMgr::resourceMgr()->materials();
bool found = false;
- foreach ( QString material, materials )
+ foreach ( QString material, materials )
{
QAction* menAct = matMenu->addAction( material );
connect(menAct, SIGNAL( toggled( bool ) ), signalMapper, SLOT( map() ) );
signalMapper->setMapping( menAct, material );
menAct->setCheckable( true );
- // Set checked if this material is current
+ // Set checked if this material is current
Material_Model aModel;
aModel.fromResources( material );
if ( !found && aModel.toProperties() == curModel ) {
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" );
setPreferenceProperty( wd[i], "min", 1 );
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,
- LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
+ LightApp_Preferences::IntSpin, "Geometry", "iso_number_u" );
setPreferenceProperty( isoU, "min", 0 );
setPreferenceProperty( isoU, "max", 100000 );
int isoV = addPreference( tr( "PREF_ISOS_V" ), isoGroup,
- LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
+ LightApp_Preferences::IntSpin, "Geometry", "iso_number_v" );
setPreferenceProperty( isoV, "min", 0 );
setPreferenceProperty( isoV, "max", 100000 );
aModesList.append( tr("MEN_WIREFRAME") );
aModesList.append( tr("MEN_SHADING") );
aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
+ aModesList.append( tr("MEN_TEXTURE") );
QList<QVariant> anIndexesList;
anIndexesList.append(0);
anIndexesList.append(1);
anIndexesList.append(2);
+ anIndexesList.append(3);
setPreferenceProperty( dispmode, "strings", aModesList );
setPreferenceProperty( dispmode, "indexes", anIndexesList );
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 );
// Set property for default material
setPreferenceProperty( material, "strings", Material_ResourceMgr::resourceMgr()->materials() );
-
+
// Set property vertex marker type
QList<QVariant> aMarkerTypeIndicesList;
QList<QVariant> aMarkerTypeIconsList;
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 );
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<QVariant> 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 )
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<SalomeApp_Study*>( 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<SalomeApp_Study*>( 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<SOCC_Viewer*>( (*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 );
}
}
savePoint);
_PTR(IParameters) ip = ClientFactory::getIParameters(ap);
+ QSet<QString> anEntriesToStoreShared;
QList<SUIT_ViewManager*> lst;
QList<SUIT_ViewManager*>::Iterator it;
// saving VTK actors properties
QVector<SUIT_ViewWindow*> 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() ) );
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);
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 ))) {
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());
} // 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<QString>::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() );
+ }
}
/*!
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];
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 )) {
QList<SUIT_ViewManager*> 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) {
{
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);
}
}
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;
}
if ( dataObj ) {
_PTR(SObject) aSO = dataObj->object();
if ( aSO ) {
- _PTR(GenericAttribute) anAttr;
- _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
- if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
- _PTR(AttributeLocalID) aLocalID( anAttr );
- anObjectInFolder = aLocalID->Value() == 999;
- }
+ _PTR(GenericAttribute) anAttr;
+ _PTR(SObject) aFatherSO = aSO->GetStudy()->GetUseCaseBuilder()->GetFather( aSO );
+ if ( aFatherSO && aFatherSO->FindAttribute(anAttr, "AttributeLocalID") ) {
+ _PTR(AttributeLocalID) aLocalID( anAttr );
+ anObjectInFolder = aLocalID->Value() == 999;
+ }
}
}
}
if ( dataObj ) {
_PTR(SObject) aSO = dataObj->object();
if ( aSO ) {
- _PTR(GenericAttribute) anAttr;
- if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
- _PTR(AttributeLocalID) aLocalID( anAttr );
- isFolder = aLocalID->Value() == 999;
- }
+ _PTR(GenericAttribute) anAttr;
+ if ( aSO->FindAttribute(anAttr, "AttributeLocalID") ) {
+ _PTR(AttributeLocalID) aLocalID( anAttr );
+ isFolder = aLocalID->Value() == 999;
+ }
}
}
}
\sa isDraggable(), isDropAccepted()
*/
void GeometryGUI::dropObjects( const DataObjectList& what, SUIT_DataObject* where,
- const int row, Qt::DropAction action )
+ const int row, Qt::DropAction action )
{
if (action != Qt::CopyAction && action != Qt::MoveAction)
return; // unsupported action
// call engine function
GetGeomGen()->Move( objects.in(), // what
- _CAST(SObject, parentObj)->GetSObject(), // where
- row ); // row
+ _CAST(SObject, parentObj)->GetSObject(), // where
+ row ); // row
// update Object browser
getApp()->updateObjectBrowser( false );