From 861a197c1b09b6164ea53cdb45f8226bf64388b1 Mon Sep 17 00:00:00 2001 From: ouv Date: Wed, 31 Mar 2010 08:00:36 +0000 Subject: [PATCH] Issue 0020665: [CEA 388] VISU2D :: right Y axis --- .../gui/VISU/images/axis_bottom_left.png | Bin 0 -> 193 bytes .../gui/VISU/images/axis_bottom_right.png | Bin 0 -> 190 bytes doc/salome/gui/VISU/images/createcurves.png | Bin 16725 -> 24145 bytes doc/salome/gui/VISU/input/creating_curves.doc | 16 +- idl/VISU_Gen.idl | 23 ++- src/ENGINE/VISU_Engine_i.cc | 8 + src/ENGINE/VISU_Engine_i.hh | 2 + src/VISUGUI/VisuGUI.cxx | 18 +- src/VISUGUI/VisuGUI_SetupPlot2dDlg.cxx | 182 +++++++++++++----- src/VISUGUI/VisuGUI_SetupPlot2dDlg.h | 7 +- src/VISU_I/VISU_DumpPython.cc | 13 +- src/VISU_I/VISU_Gen_i.cc | 18 +- src/VISU_I/VISU_Gen_i.hh | 15 +- src/VISU_I/VISU_Table_i.cc | 11 +- src/VISU_I/VISU_Table_i.hh | 5 +- src/VISU_SWIG/Makefile.am | 3 +- src/VISU_SWIG/VISU_Example_09.py | 89 +++++++++ src/VISU_SWIG/visu.py | 22 +++ 18 files changed, 358 insertions(+), 74 deletions(-) create mode 100644 doc/salome/gui/VISU/images/axis_bottom_left.png create mode 100644 doc/salome/gui/VISU/images/axis_bottom_right.png create mode 100644 src/VISU_SWIG/VISU_Example_09.py diff --git a/doc/salome/gui/VISU/images/axis_bottom_left.png b/doc/salome/gui/VISU/images/axis_bottom_left.png new file mode 100644 index 0000000000000000000000000000000000000000..97a9a279adcc271f9e0a957b65476fa890f4d555 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&kwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwMS&o-k_nmEU0Z_=#)5S4FVGDo)Q@fK?Nx&lpR@O1TaS?83{1OReYIvoH2 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/VISU/images/axis_bottom_right.png b/doc/salome/gui/VISU/images/axis_bottom_right.png new file mode 100644 index 0000000000000000000000000000000000000000..a7d1f1565e3bab17f4a509394f8cda26abd4fbcc GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&kwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwMS&o;*IJ)@96`+u}r;B5V#`&oe9k~uLa2$@h`G5bM zxh#?|wwNzm7{&Wy(GTMrX}n8zIvLJn^cH&15~XnVzGX>>4||`(-O5Xsw_cn!vH!N3 fOYXxd8?JKaAJ-HQJ#t13Xe@)LtDnm{r-UW|Q};h9 literal 0 HcmV?d00001 diff --git a/doc/salome/gui/VISU/images/createcurves.png b/doc/salome/gui/VISU/images/createcurves.png index 20b93a3873fd2eda3e8b9f33149874f7126b37d5..6ae91d76dc3d6376a32249ccd93b722da2891998 100644 GIT binary patch literal 24145 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 literal 16725 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 A8UO$Q diff --git a/doc/salome/gui/VISU/input/creating_curves.doc b/doc/salome/gui/VISU/input/creating_curves.doc index 040eb240..71c6d5d0 100644 --- a/doc/salome/gui/VISU/input/creating_curves.doc +++ b/doc/salome/gui/VISU/input/creating_curves.doc @@ -24,12 +24,22 @@ the data table by checking them in the \b Axis part of the dialog box:
  • \b H (horisontal) - the values of this column will correspond to X-coordinates of the curve.
  • -
  • \b V (vertical) - the values of this column will correspond to -Y-coordinates of the curve.
  • +
  • \b V (vertical left) - the values of this column will correspond to +Y-coordinates of the curve to be attached to the left vertical axis of +the Plot2d viewer.
  • +
  • \b V2 (vertical right) - the values of this column will correspond to +Y-coordinates of the curve to be attached to the right vertical axis of +the Plot2d viewer.
  • +\note If there are several curves attached both to left and right +vertical axes, they will be indicated by the following icons in the +legend: +\image html axis_bottom_left.png +
    +\image html axis_bottom_right.png
The column \b Assigned allows to represent the values assigned to the -points of the curve (possible for V-rows only). Any row, even +points of the curve (possible for V- and V2-rows only). Any row, even coinciding with the current or empty (no values assigned), can be represented. All values are indicated with tool tips over the corresponding curve points in the Plot2d viewer. diff --git a/idl/VISU_Gen.idl b/idl/VISU_Gen.idl index c5e40f34..544dad9b 100644 --- a/idl/VISU_Gen.idl +++ b/idl/VISU_Gen.idl @@ -2478,8 +2478,8 @@ module VISU { /*! * Creates a curve on the basis of points, whose values are taken from the table. * \param theTable Table containing the data for construction of curves. - * \param HRow Index of the row in the table: abscissa of the point. - * \param VRow Index of the row in the table: ordinate of the point. + * \param theHRow Index of the row in the table: abscissa of the point. + * \param theVRow Index of the row in the table: ordinate of the point. */ Curve CreateCurve(in Table theTable, in long theHRow, in long theVRow); @@ -2487,12 +2487,25 @@ module VISU { * Creates a curve on the basis of points, whose values are taken from the table. * Each point has also assigned value, that will be shown as tooltip in Plot2d * \param theTable Table containing the data for construction of curves. - * \param HRow Index of the row in the table: abscissa of the point. - * \param VRow Index of the row in the table: ordinate of the point. - * \param ZRow Index of the row in the table: assigned value (so-called as Z). + * \param theHRow Index of the row in the table: abscissa of the point. + * \param theVRow Index of the row in the table: ordinate of the point. + * \param theZRow Index of the row in the table: assigned value (so-called as Z). */ Curve CreateCurveWithZ( in Table theTable, in long theHRow, in long theVRow, in long theZRow ); + /*! + * Creates a curve on the basis of points, whose values are taken from the table. + * Each point has also assigned value, that will be shown as tooltip in Plot2d. + * The curve can be displayed using right axis of Plot2d view. + * \param theTable Table containing the data for construction of curves. + * \param theHRow Index of the row in the table: abscissa of the point. + * \param theVRow Index of the row in the table: ordinate of the point. + * \param theZRow Index of the row in the table: assigned value (so-called as Z). + * \param theIsV2 Flag allowed to display the curve using right axis of Plot2d view. + */ + Curve CreateCurveWithZExt( in Table theTable, in long theHRow, in long theVRow, in long theZRow, + in boolean theIsV2 ); + /*! * Creates a presentation form containing an array of references to the curves. */ diff --git a/src/ENGINE/VISU_Engine_i.cc b/src/ENGINE/VISU_Engine_i.cc index 291258e4..ef22469f 100644 --- a/src/ENGINE/VISU_Engine_i.cc +++ b/src/ENGINE/VISU_Engine_i.cc @@ -406,6 +406,14 @@ namespace VISU{ return myVisuGen->CreateCurveWithZ(theTable,theHRow,theVRow,theZRow); } + Curve_ptr VISU_Gen_i::CreateCurveWithZExt(Table_ptr theTable, + CORBA::Long theHRow, + CORBA::Long theVRow, + CORBA::Long theZRow, + CORBA::Boolean theIsV2) + { + return myVisuGen->CreateCurveWithZExt(theTable,theHRow,theVRow,theZRow,theIsV2); + } Container_ptr VISU_Gen_i::CreateContainer(){ return myVisuGen->CreateContainer(); diff --git a/src/ENGINE/VISU_Engine_i.hh b/src/ENGINE/VISU_Engine_i.hh index ecf428c2..d921aa37 100644 --- a/src/ENGINE/VISU_Engine_i.hh +++ b/src/ENGINE/VISU_Engine_i.hh @@ -188,6 +188,8 @@ namespace VISU virtual Table_ptr CreateTable(const char* theTableEntry); virtual Curve_ptr CreateCurve(Table_ptr theTable, CORBA::Long theHRow, CORBA::Long theVRow); virtual Curve_ptr CreateCurveWithZ(Table_ptr theTable, CORBA::Long theHRow, CORBA::Long theVRow, CORBA::Long theZRow); + virtual Curve_ptr CreateCurveWithZExt(Table_ptr theTable, CORBA::Long theHRow, CORBA::Long theVRow, CORBA::Long theZRow, + CORBA::Boolean theIsV2); virtual Container_ptr CreateContainer(); virtual Animation_ptr CreateAnimation(View3D_ptr theView3d); virtual Evolution_ptr CreateEvolution(XYPlot_ptr theXYPlot); diff --git a/src/VISUGUI/VisuGUI.cxx b/src/VISUGUI/VisuGUI.cxx index 330f6317..febb52c1 100644 --- a/src/VISUGUI/VisuGUI.cxx +++ b/src/VISUGUI/VisuGUI.cxx @@ -1744,14 +1744,16 @@ VisuGUI // if study is not locked - create new container, create curves and insert them // into container, then plot container if current viewer is of VIEW_PLOT2D type int horIndex; - QList verIndices, zIndices; - aDlg->getCurvesSource( horIndex, verIndices, zIndices ); + QList verIndices, ver1Indices, ver2Indices, zIndices; + aDlg->getCurvesSource( horIndex, ver1Indices, ver2Indices, zIndices ); + verIndices = ver1Indices + ver2Indices; if( horIndex >= 0 && verIndices.count() > 0 ){ CORBA::Object_var aContainerObj = GetVisuGen(this)->CreateContainer(); if(VISU::Container_i* aContainer = dynamic_cast(VISU::GetServant(aContainerObj).in())){ for( int i = 0; i < verIndices.count(); i++ ){ + bool isV2 = ver2Indices.contains(verIndices[i]); VISU::Curve_var aCurveObject = - GetVisuGen(this)->CreateCurveWithZ(aTable->_this(), horIndex+1, verIndices[i]+1, zIndices[i]+1 ); + GetVisuGen(this)->CreateCurveWithZExt(aTable->_this(), horIndex+1, verIndices[i]+1, zIndices[i]+1, isV2 ); if(VISU::Curve_i* aCurve = dynamic_cast(VISU::GetServant(aCurveObject).in())){ bool isAuto; int marker, line, lineWidth; @@ -1807,16 +1809,18 @@ VisuGUI // if study is not locked - create new table and container objects, create curves // and insert them into container, then plot container if current viewer is of VIEW_PLOT2D type int horIndex; - QList verIndices, zIndices; - aDlg->getCurvesSource( horIndex, verIndices, zIndices ); + QList verIndices, ver1Indices, ver2Indices, zIndices; + aDlg->getCurvesSource( horIndex, verIndices, ver2Indices, zIndices ); + verIndices = ver1Indices + ver2Indices; if ( horIndex >= 0 && verIndices.count() > 0 ) { VISU::Table_var aTableObject = GetVisuGen(this)->CreateTable(aSObject->GetID().c_str()); if(!CORBA::is_nil(aTableObject)){ VISU::Container_var aContainerObject = GetVisuGen(this)->CreateContainer(); VISU::Container_i* aContainer = dynamic_cast(VISU::GetServant(aContainerObject).in()); for ( int i = 0; i < verIndices.count(); i++ ) { - VISU::Curve_var aCurveObject = GetVisuGen(this)->CreateCurveWithZ - ( aTableObject, horIndex+1, verIndices[i]+1, zIndices[i]+1 ); + bool isV2 = ver2Indices.contains(verIndices[i]); + VISU::Curve_var aCurveObject = GetVisuGen(this)->CreateCurveWithZExt + ( aTableObject, horIndex+1, verIndices[i]+1, zIndices[i]+1, isV2 ); if(VISU::Curve_i* aCurve = dynamic_cast(VISU::GetServant(aCurveObject).in())){ bool isAuto; int marker, line, lineWidth; diff --git a/src/VISUGUI/VisuGUI_SetupPlot2dDlg.cxx b/src/VISUGUI/VisuGUI_SetupPlot2dDlg.cxx index a12fad46..2ac7f567 100644 --- a/src/VISUGUI/VisuGUI_SetupPlot2dDlg.cxx +++ b/src/VISUGUI/VisuGUI_SetupPlot2dDlg.cxx @@ -108,24 +108,24 @@ VisuGUI_SetupPlot2dDlg::VisuGUI_SetupPlot2dDlg( _PTR(SObject) object, QWidget* p labUnit->setFont( font ); labAttr->setFont( font ); - frameLayout->addWidget( labAxis, 0, 0, 1, 2 ); + frameLayout->addWidget( labAxis, 0, 0, 1, 3 ); lin = new QFrame( frame ); lin->setFrameStyle( QFrame::VLine | QFrame::Sunken ); - frameLayout->addWidget( lin, 0, 2 ); + frameLayout->addWidget( lin, 0, 3 ); - frameLayout->addWidget( labAssigned, 0, 3 ); + frameLayout->addWidget( labAssigned, 0, 4 ); lin = new QFrame( frame ); lin->setFrameStyle( QFrame::VLine | QFrame::Sunken ); - frameLayout->addWidget( lin, 0, 4 ); + frameLayout->addWidget( lin, 0, 5 ); - frameLayout->addWidget( labData, 0, 5 ); + frameLayout->addWidget( labData, 0, 6 ); lin = new QFrame( frame ); lin->setFrameStyle( QFrame::VLine | QFrame::Sunken ); - frameLayout->addWidget( lin, 0, 6 ); - frameLayout->addWidget( labUnit, 0, 7 ); + frameLayout->addWidget( lin, 0, 7 ); + frameLayout->addWidget( labUnit, 0, 8 ); lin = new QFrame( frame ); lin->setFrameStyle( QFrame::VLine | QFrame::Sunken ); - frameLayout->addWidget( lin, 0, 8 ); - frameLayout->addWidget( labAttr, 0, 9, 1, 5 ); - //frameLayout->setColStretch( 14, 5 ); + frameLayout->addWidget( lin, 0, 9 ); + frameLayout->addWidget( labAttr, 0, 10, 1, 5 ); + //frameLayout->setColStretch( 15, 5 ); lin = new QFrame( frame ); lin->setFrameStyle( QFrame::HLine | QFrame::Sunken ); - frameLayout->addWidget( lin, 1, 0, 1, 15 ); + frameLayout->addWidget( lin, 1, 0, 1, 16 ); int row = 2; _PTR(GenericAttribute) anAttr; @@ -149,21 +149,23 @@ VisuGUI_SetupPlot2dDlg::VisuGUI_SetupPlot2dDlg( _PTR(SObject) object, QWidget* p item->createWidgets( frame, rows ); frameLayout->addWidget( item->myHBtn, row, 0 ); frameLayout->addWidget( item->myVBtn, row, 1 ); - frameLayout->addWidget( item->myAssigned, row, 3 ); + frameLayout->addWidget( item->myV2Btn, row, 2 ); + frameLayout->addWidget( item->myAssigned, row, 4 ); - frameLayout->addWidget( item->myTitleLab, row, 5 ); + frameLayout->addWidget( item->myTitleLab, row, 6 ); if ( rowTitles.size() > 0 ) item->myTitleLab->setText( QString( rowTitles[ i ].c_str() ) ); - frameLayout->addWidget( item->myUnitLab, row, 7 ); + frameLayout->addWidget( item->myUnitLab, row, 8 ); if ( rowUnits.size() > 0 ) item->myUnitLab->setText( QString( rowUnits[ i ].c_str() ) ); - frameLayout->addWidget( item->myAutoCheck, row, 9 ); - frameLayout->addWidget( item->myLineCombo, row, 10 ); - frameLayout->addWidget( item->myLineSpin, row, 11 ); - frameLayout->addWidget( item->myMarkerCombo, row, 12 ); - frameLayout->addWidget( item->myColorBtn, row, 13 ); + frameLayout->addWidget( item->myAutoCheck, row, 10 ); + frameLayout->addWidget( item->myLineCombo, row, 11 ); + frameLayout->addWidget( item->myLineSpin, row, 12 ); + frameLayout->addWidget( item->myMarkerCombo, row, 13 ); + frameLayout->addWidget( item->myColorBtn, row, 14 ); connect( item, SIGNAL( horToggled( bool ) ), this, SLOT( onHBtnToggled( bool ) ) ); connect( item, SIGNAL( verToggled( bool ) ), this, SLOT( onVBtnToggled( bool ) ) ); + connect( item, SIGNAL( ver2Toggled( bool ) ), this, SLOT( onV2BtnToggled( bool ) ) ); myItems.append( item ); row++; } @@ -190,21 +192,23 @@ VisuGUI_SetupPlot2dDlg::VisuGUI_SetupPlot2dDlg( _PTR(SObject) object, QWidget* p item->createWidgets( frame, rows ); frameLayout->addWidget( item->myHBtn, row, 0 ); frameLayout->addWidget( item->myVBtn, row, 1 ); - frameLayout->addWidget( item->myAssigned, row, 3 ); + frameLayout->addWidget( item->myV2Btn, row, 2 ); + frameLayout->addWidget( item->myAssigned, row, 4 ); - frameLayout->addWidget( item->myTitleLab, row, 5 ); + frameLayout->addWidget( item->myTitleLab, row, 6 ); if ( rowTitles.size() > 0 ) item->myTitleLab->setText( QString( rowTitles[ i ].c_str() ) ); - frameLayout->addWidget( item->myUnitLab, row, 7 ); + frameLayout->addWidget( item->myUnitLab, row, 8 ); if ( rowUnits.size() > 0 ) item->myUnitLab->setText( QString( rowUnits[ i ].c_str() ) ); - frameLayout->addWidget( item->myAutoCheck, row, 9 ); - frameLayout->addWidget( item->myLineCombo, row, 10 ); - frameLayout->addWidget( item->myLineSpin, row, 11 ); - frameLayout->addWidget( item->myMarkerCombo, row, 12 ); - frameLayout->addWidget( item->myColorBtn, row, 13 ); + frameLayout->addWidget( item->myAutoCheck, row, 10 ); + frameLayout->addWidget( item->myLineCombo, row, 11 ); + frameLayout->addWidget( item->myLineSpin, row, 12 ); + frameLayout->addWidget( item->myMarkerCombo, row, 13 ); + frameLayout->addWidget( item->myColorBtn, row, 14 ); connect( item, SIGNAL( horToggled( bool ) ), this, SLOT( onHBtnToggled( bool ) ) ); connect( item, SIGNAL( verToggled( bool ) ), this, SLOT( onVBtnToggled( bool ) ) ); + connect( item, SIGNAL( ver2Toggled( bool ) ), this, SLOT( onV2BtnToggled( bool ) ) ); myItems.append( item ); row++; } @@ -215,11 +219,11 @@ VisuGUI_SetupPlot2dDlg::VisuGUI_SetupPlot2dDlg( _PTR(SObject) object, QWidget* p } } lin = new QFrame( frame ); lin->setFrameStyle( QFrame::VLine | QFrame::Sunken ); - frameLayout->addWidget( lin, 2, 2, row, 1 ); + frameLayout->addWidget( lin, 2, 3, row, 1 ); lin = new QFrame( frame ); lin->setFrameStyle( QFrame::VLine | QFrame::Sunken ); - frameLayout->addWidget( lin, 2, 4, row, 1 ); + frameLayout->addWidget( lin, 2, 5, row, 1 ); lin = new QFrame( frame ); lin->setFrameStyle( QFrame::VLine | QFrame::Sunken ); - frameLayout->addWidget( lin, 2, 6, row, 1 ); + frameLayout->addWidget( lin, 2, 7, row, 1 ); //frameLayout->setRowStretch( row+1, 5 ); myView->setWidget( frame ); @@ -263,7 +267,7 @@ VisuGUI_SetupPlot2dDlg::~VisuGUI_SetupPlot2dDlg() Gets curves info ( indexes of row data in the table for horizontal and verical axes ) */ void VisuGUI_SetupPlot2dDlg::getCurvesSource( int& horIndex, QList& verIndexes, - QList& zIndices ) + QList& ver2Indexes, QList& zIndices ) { /* collecting horizontal and vertical axis items */ horIndex = -1; @@ -272,11 +276,15 @@ void VisuGUI_SetupPlot2dDlg::getCurvesSource( int& horIndex, QList& verInde if ( myItems.at( i )->isHorizontalOn() ) { horIndex = i; } - else if ( myItems.at( i )->isVerticalOn() ) { - verIndexes.append( i ); + else { + if ( myItems.at( i )->isVerticalOn() ) { + verIndexes.append( i ); + } + else if ( myItems.at( i )->isVertical2On() ) { + ver2Indexes.append( i ); + } zIndices.append( myItems.at( i )->assigned() ); } - } } /*! @@ -314,9 +322,9 @@ void VisuGUI_SetupPlot2dDlg::getCurves( QList& container ) /* collecting horizontal and vertical axis items */ int horIndex; int i, j; - QList verIndex, zIndices; - getCurvesSource( horIndex, verIndex, zIndices ); - if ( horIndex < 0 || verIndex.isEmpty() ) /* no curves can be created */ + QList verIndex, ver2Index, zIndices; + getCurvesSource( horIndex, verIndex, ver2Index, zIndices ); + if ( horIndex < 0 || verIndex.isEmpty() && ver2Index.isEmpty() ) /* no curves can be created */ return; /* Try table of integer */ @@ -484,6 +492,48 @@ void VisuGUI_SetupPlot2dDlg::onVBtnToggled( bool on ) } enableControls(); } +/*! + Slot, called when any button is clicked +*/ +void VisuGUI_SetupPlot2dDlg::onV2BtnToggled( bool on ) +{ + VisuGUI_ItemContainer* item = ( VisuGUI_ItemContainer* )sender(); + QList itemList; + //itemList.setAutoDelete( false ); + item->myAssigned->setEnabled( on ); + int i; + if ( on ) { + int totalOn = 0; + for ( i = 0; i < myItems.count(); i++ ) { + if ( myItems.at( i ) != item && !myItems.at( i )->isHorizontalOn() ) { + if ( myItems.at( i )->myUnitLab->text() == item->myUnitLab->text() ) { + if ( myItems.at( i )->isVertical2On() ) + totalOn++; + else + itemList.append( myItems.at( i ) ); + } + else { + myItems.at( i )->setVertical2On( false ); + } + } + } + if ( totalOn == 0 && !itemList.isEmpty() && + SUIT_MessageBox::information( this, + this->windowTitle(), + tr( "QUE_WANT_SAME_UNITS" ), + tr( "BUT_YES" ), + tr( "BUT_NO" ), + 1, 1 ) == 0 ) + { + for ( i = 0; i < itemList.count(); i++ ) { + itemList.at( i )->blockSignals( true ); + itemList.at( i )->setVertical2On( true ); + itemList.at( i )->blockSignals( false ); + } + } + } + enableControls(); +} /*! Slot, called when button is clicked */ @@ -522,9 +572,10 @@ void VisuGUI_SetupPlot2dDlg::enableControls() } } for ( int i = 0; i < myItems.count(); i++ ) { - if ( myItems.at( i )->isVerticalOn() ) + bool isVOn = myItems.at( i )->isVerticalOn() || myItems.at( i )->isVertical2On(); + if ( isVOn ) bVSet = true; - myItems.at( i )->enableWidgets( bHSet && myItems.at( i )->isVerticalOn() ); + myItems.at( i )->enableWidgets( bHSet && isVOn ); } myOkBtn->setEnabled( bHSet && bVSet ); } @@ -569,6 +620,11 @@ void VisuGUI_ItemContainer::createWidgets( QWidget* parentWidget, const QStringL myVBtn->setCheckable( true ); myVBtn->setChecked( false ); + myV2Btn = new QToolButton( parentWidget ); + myV2Btn->setText( tr( "V2" ) ); + myV2Btn->setCheckable( true ); + myV2Btn->setChecked( false ); + myTitleLab = new QLabel( parentWidget ); myUnitLab = new QLabel( parentWidget ); myUnitLab->setAlignment( Qt::AlignCenter); @@ -618,6 +674,7 @@ void VisuGUI_ItemContainer::createWidgets( QWidget* parentWidget, const QStringL //connect( myColorBtn, SIGNAL( clicked() ), this, SLOT( onColorChanged() ) ); connect( myHBtn, SIGNAL( toggled( bool ) ), this, SLOT( onHVToggled( bool ) ) ); connect( myVBtn, SIGNAL( toggled( bool ) ), this, SLOT( onHVToggled( bool ) ) ); + connect( myV2Btn, SIGNAL( toggled( bool ) ), this, SLOT( onHVToggled( bool ) ) ); setColor( QColor( 0, 0, 0 ) ); updateState(); } @@ -644,19 +701,33 @@ bool VisuGUI_ItemContainer::isHorizontalOn() const return myHBtn->isChecked(); } /*! - Sets vertical button's state on + Sets first vertical button's state on */ void VisuGUI_ItemContainer::setVerticalOn( bool on ) { myVBtn->setChecked( on ); } /*! - Gets vertical button's state + Gets first vertical button's state */ bool VisuGUI_ItemContainer::isVerticalOn() const { return myVBtn->isChecked(); } +/*! + Sets second vertical button's state on +*/ +void VisuGUI_ItemContainer::setVertical2On( bool on ) +{ + myV2Btn->setChecked( on ); +} +/*! + Gets second vertical button's state +*/ +bool VisuGUI_ItemContainer::isVertical2On() const +{ + return myV2Btn->isChecked(); +} /*! Sets item AutoAssign flag state */ @@ -764,21 +835,46 @@ void VisuGUI_ItemContainer::onHVToggled( bool on ) if ( myVBtn->isChecked() ) { // blockSignals( true ); myVBtn->setChecked( false ); +// blockSignals( false ); + } + else if ( myV2Btn->isChecked() ) { +// blockSignals( true ); + myV2Btn->setChecked( false ); // blockSignals( false ); } } emit horToggled( on ); } - else { + else if ( snd == myVBtn ) { if ( on ) { if ( myHBtn->isChecked() ) { // blockSignals( true ); myHBtn->setChecked( false ); +// blockSignals( false ); + } + else if ( myV2Btn->isChecked() ) { +// blockSignals( true ); + myV2Btn->setChecked( false ); // blockSignals( false ); } } emit verToggled( on ); } + else { + if ( on ) { + if ( myHBtn->isChecked() ) { +// blockSignals( true ); + myHBtn->setChecked( false ); +// blockSignals( false ); + } + else if ( myVBtn->isChecked() ) { +// blockSignals( true ); + myVBtn->setChecked( false ); +// blockSignals( false ); + } + } + emit ver2Toggled( on ); + } } /*! @@ -786,7 +882,7 @@ void VisuGUI_ItemContainer::onHVToggled( bool on ) */ int VisuGUI_ItemContainer::assigned() const { - if( isVerticalOn() ) + if( isVerticalOn() || isVertical2On() ) return myAssigned->currentIndex()-1; else return -1; diff --git a/src/VISUGUI/VisuGUI_SetupPlot2dDlg.h b/src/VISUGUI/VisuGUI_SetupPlot2dDlg.h index 985c34f7..d530402e 100644 --- a/src/VISUGUI/VisuGUI_SetupPlot2dDlg.h +++ b/src/VISUGUI/VisuGUI_SetupPlot2dDlg.h @@ -57,7 +57,7 @@ public: ~VisuGUI_SetupPlot2dDlg(); void getCurves( QList& container ); - void getCurvesSource( int& horIndex, QList& verIndexes, QList& zIndexes ); + void getCurvesSource( int& horIndex, QList& verIndexes, QList& ver2Indexes, QList& zIndexes ); bool getCurveAttributes( const int vIndex, bool& isAuto, int& marker, int& line, int& lineWidth, QColor& color); private: @@ -66,6 +66,7 @@ private: private slots: void onHBtnToggled( bool ); void onVBtnToggled( bool ); + void onV2BtnToggled( bool ); void onHelp(); void enableControls(); @@ -93,6 +94,8 @@ public: bool isHorizontalOn() const; void setVerticalOn( bool on ); bool isVerticalOn() const; + void setVertical2On( bool on ); + bool isVertical2On() const; bool isAutoAssign() const; void setAutoAssign( bool on ); void setLine( const int line, const int width ); @@ -111,6 +114,7 @@ signals: void autoClicked(); void horToggled( bool ); void verToggled( bool ); + void ver2Toggled( bool ); public slots: void onAutoChanged(); @@ -121,6 +125,7 @@ public: bool myEnabled; QToolButton* myHBtn; QToolButton* myVBtn; + QToolButton* myV2Btn; QLabel* myTitleLab; QLabel* myUnitLab; QCheckBox* myAutoCheck; diff --git a/src/VISU_I/VISU_DumpPython.cc b/src/VISU_I/VISU_DumpPython.cc index 6ef7dee1..aafb1b5e 100644 --- a/src/VISU_I/VISU_DumpPython.cc +++ b/src/VISU_I/VISU_DumpPython.cc @@ -1560,16 +1560,21 @@ namespace VISU if(Curve_i* aServant = dynamic_cast(GetServant(anObj).in())) { bool withZ = aServant->GetZRow()>0; + bool isV2 = aServant->GetIsV2(); theStr << thePrefix << "aName2ObjectMap['" << aName << "'] = visu.CreateCurve"; - if( withZ ) + if( isV2 ) + theStr << "WithZExt"; + else if( withZ ) theStr << "WithZ"; theStr << "(" << theArgumentName<< // table - ", "<GetHRow()<< // H row - ", "<GetVRow(); // V row - if( withZ ) + ", "<GetHRow()<< // H row + ", "<GetVRow(); // V row + if( withZ || isV2 ) theStr << ", " << aServant->GetZRow(); // Z row + if( isV2 ) + theStr << ", " << aServant->GetIsV2(); // right axis theStr << ", '"<GetTitle()<<"'"; // title SALOMEDS::Color aColor = aServant->GetColor(); diff --git a/src/VISU_I/VISU_Gen_i.cc b/src/VISU_I/VISU_Gen_i.cc index 657ab889..c61da4cd 100644 --- a/src/VISU_I/VISU_Gen_i.cc +++ b/src/VISU_I/VISU_Gen_i.cc @@ -1435,7 +1435,7 @@ namespace VISU CORBA::Long theHRow, CORBA::Long theVRow) { - return CreateCurveWithZ( theTable, theHRow, theVRow, 0 ); + return CreateCurveWithZExt( theTable, theHRow, theVRow, 0, false ); } @@ -1446,13 +1446,26 @@ namespace VISU CORBA::Long theHRow, CORBA::Long theVRow, CORBA::Long theZRow) + { + return CreateCurveWithZExt( theTable, theHRow, theVRow, theZRow, false ); + } + + + //--------------------------------------------------------------- + Curve_ptr + VISU_Gen_i + ::CreateCurveWithZExt(Table_ptr theTable, + CORBA::Long theHRow, + CORBA::Long theVRow, + CORBA::Long theZRow, + CORBA::Boolean theIsV2) { if(myStudyDocument->GetProperties()->IsLocked()) return Curve::_nil(); Mutex mt(myMutex); PortableServer::POA_ptr aPOA = GetPOA(); Table_i* pTable = dynamic_cast(aPOA->reference_to_servant(theTable)); - Curve_i* pPresent = new Curve_i(myStudyDocument,pTable,theHRow,theVRow,theZRow); + Curve_i* pPresent = new Curve_i(myStudyDocument,pTable,theHRow,theVRow,theZRow,theIsV2); if(pPresent->Create() != NULL) return pPresent->_this(); else{ @@ -1462,7 +1475,6 @@ namespace VISU } - //--------------------------------------------------------------- Container_ptr VISU_Gen_i diff --git a/src/VISU_I/VISU_Gen_i.hh b/src/VISU_I/VISU_Gen_i.hh index 216f0601..b66db20a 100644 --- a/src/VISU_I/VISU_Gen_i.hh +++ b/src/VISU_I/VISU_Gen_i.hh @@ -273,12 +273,21 @@ namespace VISU CreateCurve(Table_ptr theTable, CORBA::Long theHRow, CORBA::Long theVRow); + virtual Curve_ptr CreateCurveWithZ(Table_ptr theTable, - CORBA::Long theHRow, - CORBA::Long theVRow, - CORBA::Long theZRow); + CORBA::Long theHRow, + CORBA::Long theVRow, + CORBA::Long theZRow); + + virtual + Curve_ptr + CreateCurveWithZExt(Table_ptr theTable, + CORBA::Long theHRow, + CORBA::Long theVRow, + CORBA::Long theZRow, + CORBA::Boolean theIsV2); virtual Container_ptr diff --git a/src/VISU_I/VISU_Table_i.cc b/src/VISU_I/VISU_Table_i.cc index bad23432..530704d8 100644 --- a/src/VISU_I/VISU_Table_i.cc +++ b/src/VISU_I/VISU_Table_i.cc @@ -388,9 +388,9 @@ const char* VISU::Curve_i::GetComment() const */ VISU::Curve_i::Curve_i( SALOMEDS::Study_ptr theStudy, Table_i* theTable, CORBA::Long theHRow, CORBA::Long theVRow, - CORBA::Long theZRow ) + CORBA::Long theZRow, CORBA::Boolean theIsV2 ) : PrsObject_i(theStudy), myTable( theTable ), myHRow( theHRow ), - myVRow( theVRow ), myZRow( theZRow ) + myVRow( theVRow ), myZRow( theZRow ), myIsV2( theIsV2 ) { myAuto = true; myLine = VISU::Curve::SOLIDLINE; @@ -777,6 +777,7 @@ int VISU::Curve_i::GetData( double*& theHorList, double*& theVerList, QStringLis SPlot2d_Curve* VISU::Curve_i::CreatePresentation() { SPlot2d_Curve* crv = new SPlot2d_Curve(); + crv->setYAxis( myIsV2 ? QwtPlot::yRight : QwtPlot::yLeft ); crv->setHorTitle( GetHorTitle().c_str() ); string tlt = GetTitle(); if ( tlt.length() <= 0 ) @@ -821,6 +822,9 @@ VISU::Storable* VISU::Curve_i::Restore( const Storable::TRestoringMap& theMap, S bool ok = false; QString z_str = VISU::Storable::FindValue(theMap,"myZRow", &ok); myZRow = ok ? z_str.toInt() : 0; + ok = false; + QString v2_str = VISU::Storable::FindValue(theMap,"myIsV2", &ok); + myIsV2 = ok ? v2_str.toInt() : false; myColor.R = VISU::Storable::FindValue(theMap,"myColor.R").toDouble(); myColor.G = VISU::Storable::FindValue(theMap,"myColor.G").toDouble(); @@ -840,6 +844,7 @@ void VISU::Curve_i::ToStream( std::ostringstream& theStr ) Storable::DataToStream( theStr, "myHRow", myHRow ); Storable::DataToStream( theStr, "myVRow", myVRow ); Storable::DataToStream( theStr, "myZRow", myZRow ); + Storable::DataToStream( theStr, "myIsV2", myIsV2 ); Storable::DataToStream( theStr, "myColor.R", myColor.R ); Storable::DataToStream( theStr, "myColor.G", myColor.G ); Storable::DataToStream( theStr, "myColor.B", myColor.B ); @@ -865,7 +870,7 @@ VISU::Storable* VISU::Curve_i::StorableEngine(SALOMEDS::SObject_ptr theSObject, SALOMEDS::Study_var aStudy = theSObject->GetStudy(); VISU::Table_i* pTable = GetTable(aStudy, theSObject->GetFather()); if( pTable != NULL ) { - VISU::Curve_i* pResent = new VISU::Curve_i( aStudy, pTable, 0, 0, 0 ); + VISU::Curve_i* pResent = new VISU::Curve_i( aStudy, pTable, 0, 0, 0, false ); return pResent->Restore( theMap, theSObject); } return NULL; diff --git a/src/VISU_I/VISU_Table_i.hh b/src/VISU_I/VISU_Table_i.hh index 78c6776a..ca35887d 100644 --- a/src/VISU_I/VISU_Table_i.hh +++ b/src/VISU_I/VISU_Table_i.hh @@ -96,7 +96,8 @@ namespace VISU{ Curve_i( const Curve_i& ); public: Curve_i( SALOMEDS::Study_ptr theStudy, Table_i* theTable, - CORBA::Long theHRow, CORBA::Long theVRow, CORBA::Long theZRow ); + CORBA::Long theHRow, CORBA::Long theVRow, CORBA::Long theZRow, + CORBA::Boolean theIsV2 ); virtual ~Curve_i(); virtual VISU::VISUType GetType() { return VISU::TCURVE;}; @@ -125,6 +126,7 @@ namespace VISU{ int myHRow; int myVRow; int myZRow; + bool myIsV2; struct SALOMEDS::Color myColor; VISU::Curve::MarkerType myMarker; VISU::Curve::LineType myLine; @@ -139,6 +141,7 @@ namespace VISU{ int GetHRow() const { return myHRow;} int GetVRow() const { return myVRow;} int GetZRow() const { return myZRow;} + int GetIsV2() const { return myIsV2;} virtual Storable* Restore( const Storable::TRestoringMap& theMap, SALOMEDS::SObject_ptr theSO); diff --git a/src/VISU_SWIG/Makefile.am b/src/VISU_SWIG/Makefile.am index db0513ea..c093a267 100644 --- a/src/VISU_SWIG/Makefile.am +++ b/src/VISU_SWIG/Makefile.am @@ -63,7 +63,8 @@ dist_salomescript_DATA = batchmode_visu.py batchmode_visu_table.py batchmode_vis visu_succcessive_animation.py visu_apply_properties.py visu_apply_properties_successive.py \ batchmode_visu_view.py visu_cache.py visu_pointmap3d.py visu_view3d_parameters.py visu_evolution.py \ VISU_Example_01.py VISU_Example_02.py VISU_Example_03.py VISU_Example_04.py \ - VISU_Example_05.py VISU_Example_06.py VISU_Example_07.py VISU_Example_08.py + VISU_Example_05.py VISU_Example_06.py VISU_Example_07.py VISU_Example_08.py \ + VISU_Example_09.py nodist_salomescript_DATA = libVISU_Swig.py diff --git a/src/VISU_SWIG/VISU_Example_09.py b/src/VISU_SWIG/VISU_Example_09.py new file mode 100644 index 00000000..8e588018 --- /dev/null +++ b/src/VISU_SWIG/VISU_Example_09.py @@ -0,0 +1,89 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2007-2008 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. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# Displaying curves attached to different Y axes of Plot2d view +# +import salome +import time +import SALOMEDS +import VISU + +sleep_delay = 1 + +# >>> Getting study builder +myStudy = salome.myStudy +myBuilder = myStudy.NewBuilder() + +# >>> Getting (loading) VISU component +myVisu = salome.lcc.FindOrLoadComponent("FactoryServer", "VISU") +myComponent = myStudy.FindComponent("VISU") +myVisu.SetCurrentStudy(myStudy) +if not myComponent: + myComponent = myBuilder.NewComponent("VISU") + aName = myBuilder.FindOrCreateAttribute(myComponent, "AttributeName") + aName.SetValue( salome.sg.getComponentUserName("VISU") ) + + A2 = myBuilder.FindOrCreateAttribute(myComponent, "AttributePixMap"); + aPixmap = A2._narrow(SALOMEDS.AttributePixMap); + aPixmap.SetPixMap( "ICON_OBJBROWSER_Visu" ); + + myBuilder.DefineComponentInstance(myComponent,myVisu) + +# >>> Creating object with Table +aTableObject = myBuilder.NewObject(myComponent) +aTableName = myBuilder.FindOrCreateAttribute(aTableObject, "AttributeName") +aTableName.SetValue("TestTable") +aTable = myBuilder.FindOrCreateAttribute(aTableObject, "AttributeTableOfReal") + +aTable.AddRow([0,1,2,3,4,5,6,7,8,9,10]) +aTable.AddRow([2000,1900,1800,1700,1600,1500,1400,1300,1200,1100,1000]) +aTable.AddRow([1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0]) +aTable.SetTitle("Test table") +aTable.SetRowTitle(1,"Time") +aTable.SetRowUnit(1,"s") +aTable.SetRowTitle(2,"Mass") +aTable.SetRowUnit(2,"kg") +aTable.SetRowTitle(3,"Temperature") +aTable.SetRowUnit(3,"K") + +# >>> Create table of integer +aVisuTable = myVisu.CreateTable(aTableObject.GetID()) + +# >>> Create curve attached to the left axis +aCurve1 = myVisu.CreateCurveWithZExt(aVisuTable, 1, 2, 0, False) + +# >>> Create curve attached to the right axis +aCurve2 = myVisu.CreateCurveWithZExt(aVisuTable, 1, 3, 1, True) + +# >>> Create container and insert curves +aContainer = myVisu.CreateContainer() +aContainer.AddCurve(aCurve1) +aContainer.AddCurve(aCurve2) + +# >>> Create XY plot and display container +myViewManager = myVisu.GetViewManager(); +myView = myViewManager.CreateXYPlot(); +myView.SetTitle("The viewer for curves") +myView.Display(aContainer) + +# >>> Update Object Browser +salome.sg.updateObjBrowser(1) diff --git a/src/VISU_SWIG/visu.py b/src/VISU_SWIG/visu.py index 50a3aea7..ba3f2422 100644 --- a/src/VISU_SWIG/visu.py +++ b/src/VISU_SWIG/visu.py @@ -1181,3 +1181,25 @@ def CreateCurve( theTable, theHRow, theVRow, theTitle, theColor, theMarker, theL curve.SetLine( theLineType, theLineWidth ) pass return curve + +def CreateCurveWithZ( theTable, theHRow, theVRow, theZRow, theTitle, theColor, theMarker, theLineType, theLineWidth ): + if theTitle is None: return + curve = myLocalVisu.CreateCurveWithZ( theTable, theHRow, theVRow, theZRow ); + if curve: + curve.SetTitle( theTitle ) + curve.SetColor( theColor ) + curve.SetMarker( theMarker ) + curve.SetLine( theLineType, theLineWidth ) + pass + return curve + +def CreateCurveWithZExt( theTable, theHRow, theVRow, theZRow, theIsV2, theTitle, theColor, theMarker, theLineType, theLineWidth ): + if theTitle is None: return + curve = myLocalVisu.CreateCurveWithZExt( theTable, theHRow, theVRow, theZRow, theIsV2 ); + if curve: + curve.SetTitle( theTitle ) + curve.SetColor( theColor ) + curve.SetMarker( theMarker ) + curve.SetLine( theLineType, theLineWidth ) + pass + return curve -- 2.39.2