-using namespace std;
-// File: VISU_ViewManager_i.cxx
-// Created: Wed Jan 22 17:53:23 2003
-// Author: Alexey PETROV
-// <apo@ivanox.nnov.matra-dtv.fr>
+// VISU OBJECT : interactive object for VISU entities implementation
+//
+// Copyright (C) 2003 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
+//
+//
+// File : VISU_ViewManager_i.cc
+// Author : Alexey PETROV
+// Module : VISU
#include "VISU_ViewManager_i.hh"
+
#include "VISU_PrsObject_i.hh"
+#include "VISU_Result_i.hh"
+#include "VISU_Gen_i.hh"
+
+#include "VISU_Prs3d_i.hh"
+#include "VISU_Mesh_i.hh"
+#include "VISU_ScalarMap_i.hh"
+#include "VISU_IsoSurfaces_i.hh"
+#include "VISU_DeformedShape_i.hh"
+#include "VISU_CutPlanes_i.hh"
+#include "VISU_CutLines_i.hh"
+#include "VISU_Vectors_i.hh"
+#include "VISU_StreamLines_i.hh"
+
#include "VISU_Table_i.hh"
#include "VISU_ScalarBarActor.hxx"
#include "VISU_Actor.h"
+#include "SALOME_Event.hxx"
+
#include "QAD_Application.h"
#include "QAD_Desktop.h"
#include "QAD_Tools.h"
#include "QAD_Study.h"
+#include "QAD_LeftFrame.h"
#include "QAD_RightFrame.h"
#include "QAD_StudyFrame.h"
+#include "QAD_PyEditor.h"
#include "VTKViewer_ViewFrame.h"
+#include "VTKViewer_RenderWindow.h"
#include "SALOMEGUI_TableDlg.h"
#include "Plot2d_CurveContainer.h"
#include "Plot2d_ViewFrame.h"
-//#include "SALOMEGUI_SetupCurveDlg.h"
-//#include "SALOMEGUI_SetupPlot2dDlg.h"
-#include <vtkTransformPolyDataFilter.h>
-#include <vtkDataSetMapper.h>
+#include <memory>
+
+#include <qstring.h>
+#include <qfileinfo.h>
+
#include <vtkRenderer.h>
#include <vtkCamera.h>
-#include <memory>
-#include <qstring.h>
+using namespace std;
-#ifdef DEBUG
-static int MYDEBUG = 1;
+#ifdef _DEBUG_
+static int MYDEBUG = 0;
#else
static int MYDEBUG = 0;
#endif
+static QFileInfo aFileInfo;
+
namespace VISU{
//===========================================================================
+ typedef TVoidMemFunEvent<QAD_StudyFrame> TFrameActionEvent;
+
+ template<class TObject>
+ class TSetBackgroundEvent: public SALOME_Event{
+ TObject* myView;
+ const SALOMEDS::Color& myColor;
+ public:
+ TSetBackgroundEvent(TObject* theView, const SALOMEDS::Color& theColor):
+ myView(theView), myColor(theColor)
+ {}
+ virtual void Execute(){
+ int aColor[3];
+ aColor[0] = int(255.0*myColor.R);
+ aColor[1] = int(255.0*myColor.G);
+ aColor[2] = int(255.0*myColor.B);
+ QColor aNewColor(aColor[0],aColor[1],aColor[2]);
+ myView->setBackgroundColor(aNewColor);
+ }
+ };
+
+ class TSetViewRepresentation: public SALOME_Event{
+ VISU::View::ViewRepresentation myViewRepr;
+ View_i* myView;
+ CORBA::Boolean myState;
+ public:
+ TSetViewRepresentation( View_i* aView,
+ VISU::View::ViewRepresentation ViewRepr,
+ CORBA::Boolean State ):
+ SALOME_Event(), myViewRepr( ViewRepr ), myView( aView ), myState( State )
+ {}
+ virtual void Execute(){
+
+ bool old = myView->IsPartShown( myViewRepr );
+
+ QAD_RightFrame* fr = myView->myStudyFrame->getRightFrame();
+
+ if( myView->myStudyFrame != NULL ){
+ switch( myViewRepr )
+ {
+ case VISU::View::OBJECTBROWSER:
+ if( myState!=old )
+ if( myState )
+ myView->myStudyFrame->unCompressLeft();
+ else
+ myView->myStudyFrame->compressLeft();
+ break;
+ case VISU::View::VIEWER:
+ if( myState!=old )
+ if( myState )
+ fr->unCompressUp();
+ else
+ fr->compressUp();
+ break;
+ case VISU::View::PYTHON:
+ if( myState!=old )
+ if( myState )
+ fr->unCompressLeft();
+ else
+ fr->compressLeft();
+ break;
+ case VISU::View::MESSAGES:
+ if( myState!=old )
+ if( myState )
+ fr->unCompressRight();
+ else
+ fr->compressRight();
+ break;
+ };
+ }
+ }
+};
+
+ class TGetViewRepresentation: public SALOME_Event
+ {
+ public:
+ typedef CORBA::Boolean TResult;
+ TResult myResult;
+ VISU::View::ViewRepresentation myPart;
+ View_i* myView;
+
+ TGetViewRepresentation( View_i* aView, VISU::View::ViewRepresentation Part ):
+ SALOME_Event(), myResult( false ), myPart( Part ), myView( aView )
+ {
+ }
+ virtual void Execute(){
+ switch( myPart )
+ {
+ case VISU::View::OBJECTBROWSER:
+ myResult = !myView->myStudyFrame->isCompressedLeft();
+ break;
+ case VISU::View::VIEWER:
+ myResult = !myView->myStudyFrame->getRightFrame()->isCompressedViewFrame();
+ break;
+ case VISU::View::PYTHON:
+ myResult = !myView->myStudyFrame->getRightFrame()->isCompressedPython();
+ break;
+ case VISU::View::MESSAGES:
+ myResult = !myView->myStudyFrame->getRightFrame()->isCompressedMessage();
+ }
+ }
+ };
+
+ class TSetViewWidthHeight: public SALOME_Event{
+ CORBA::Long mySize;
+ bool myIsWidth;
+ View_i* myView;
+ public:
+ TSetViewWidthHeight( View_i* aView, CORBA::Long Size, bool IsWidth ):
+ SALOME_Event(), mySize( Size ), myView( aView ), myIsWidth( IsWidth )
+ {}
+ virtual void Execute(){
+ if( myView->myStudyFrame != NULL ){
+ QWidget* aStudyParent = myView->myStudyFrame->parentWidget(true);
+ int aleft = aStudyParent->frameGeometry().left();
+ int atop = aStudyParent->frameGeometry().top();
+ int aheight = aStudyParent->frameGeometry().height();
+ int awidth = aStudyParent->frameGeometry().width();
+ QRect aQRect;
+ if( myIsWidth )
+ aQRect = QRect( aleft, atop, mySize, aheight );
+ else
+ aQRect = QRect( aleft, atop, awidth, mySize );
+
+ aStudyParent->setGeometry(aQRect);
+ }
+ }
+ };
+
+ class TGetViewWidthHeight: public SALOME_Event{
+ public:
+ typedef CORBA::Long TResult;
+ TResult myResult;
+ bool myIsWidth;
+ View_i* myView;
+ public:
+ TGetViewWidthHeight( View_i* aView, bool IsWidth ):
+ SALOME_Event(), myView( aView ), myIsWidth( IsWidth )
+ {}
+
+ virtual void Execute()
+ {
+ if( myView ) {
+ QWidget* aStudyParent = myView->myStudyFrame->parentWidget(true);
+ if( myIsWidth )
+ myResult = aStudyParent->frameGeometry().width();
+ else
+ myResult = aStudyParent->frameGeometry().height();
+ }
+ }
+ };
+
+ class TSetViewPositionHorizontal: public SALOME_Event{
+ VISU::View::ViewPosition myViewPos;
+ View_i* myView;
+ public:
+ TSetViewPositionHorizontal ( View_i* aView,
+ VISU::View::ViewPosition ViewPos ):
+ SALOME_Event(), myView( aView ), myViewPos(ViewPos)
+ {}
+ virtual void Execute(){
+ QWidget* aWorkspace = dynamic_cast <QWidget*> (myView->myStudy->getApp()->getDesktop()->getMainFrame());
+ QWidget* aStudy = dynamic_cast <QWidget*> (myView->myStudyFrame);
+ QWidget* aStudyParent = aStudy->parentWidget(true);
+ if ( aStudyParent != 0 )
+ if ( aWorkspace!=NULL || aStudy != NULL )
+ switch(myViewPos){
+ case VISU::View::LEFT:
+ QAD_Tools::alignWidget(aStudyParent,aWorkspace,Qt::AlignLeft);
+ break;
+ case VISU::View::CENTER:
+ QAD_Tools::alignWidget(aStudyParent,aWorkspace,Qt::AlignHCenter);
+ break;
+ case VISU::View::RIGHT:
+ QAD_Tools::alignWidget(aStudyParent,aWorkspace,Qt::AlignRight);
+ break;
+ }
+ }
+ };
+
+ class TSetViewPositionVertical: public SALOME_Event{
+ VISU::View::ViewPosition myViewPos;
+ View_i* myView;
+ public:
+ TSetViewPositionVertical ( View_i* aView,
+ VISU::View::ViewPosition ViewPos ):
+ SALOME_Event(), myView( aView ), myViewPos(ViewPos)
+ {}
+ virtual void Execute(){
+ QWidget* aWorkspace = dynamic_cast <QWidget*> (myView->myStudy->getApp()->getDesktop()->getMainFrame());
+ QWidget* aStudy = dynamic_cast <QWidget*>(myView->myStudyFrame);
+ QWidget* aStudyParent = aStudy->parentWidget(true);
+ if ( aStudyParent != 0 )
+ if ( aWorkspace!=NULL || aStudy != NULL )
+ switch(myViewPos){
+ case VISU::View::TOP:
+ QAD_Tools::alignWidget(aStudyParent,aWorkspace,Qt::AlignTop);
+ break;
+ case VISU::View::CENTER:
+ QAD_Tools::alignWidget(aStudyParent,aWorkspace,Qt::AlignVCenter);
+ break;
+ case VISU::View::BOTTOM:
+ QAD_Tools::alignWidget(aStudyParent,aWorkspace,Qt::AlignBottom);
+ break;
+ }
+ }
+ };
+
+ class TSetRelativePosition : public SALOME_Event
+ {
+ View_i* myView;
+ CORBA::Double myX, myY;
+ public:
+ TSetRelativePosition ( View_i* aView, CORBA::Double X, CORBA::Double Y ):
+ SALOME_Event(), myView( aView ), myX( X ), myY( Y )
+ {}
+ virtual void Execute(){
+ QWidget* aWorkspace = dynamic_cast <QWidget*> (myView->myStudy->getApp()->getDesktop()->getMainFrame());
+ if( aWorkspace )
+ {
+ QAD_StudyFrame* aFrame = myView->myStudyFrame;
+ QWidget* aStudyParent = aFrame->parentWidget(true);
+ aStudyParent->move( int( myX * aWorkspace->width() ), int( myY * aWorkspace->height() ) );
+ }
+ }
+ };
+
+ class TSetRelativeSize : public SALOME_Event
+ {
+ View_i* myView;
+ CORBA::Double myX, myY;
+ public:
+ TSetRelativeSize ( View_i* aView, CORBA::Double X, CORBA::Double Y ):
+ SALOME_Event(), myView( aView ), myX( X ), myY( Y )
+ {}
+ virtual void Execute(){
+ QWidget* aWorkspace = dynamic_cast <QWidget*> (myView->myStudy->getApp()->getDesktop()->getMainFrame());
+ if( aWorkspace )
+ {
+ QAD_StudyFrame* aFrame = myView->myStudyFrame;
+ QWidget* aStudyParent = aFrame->parentWidget(true);
+ aStudyParent->setGeometry( aStudyParent->x(), aStudyParent->y(),
+ int( myX * aWorkspace->width() ), int( myY * aWorkspace->height() ) );
+ }
+ }
+ };
+
+
+
+ class TSavePictureEvent: public SALOME_Event{
+ QWidget* myWidget;
+ const char* myFileName;
+ public:
+ typedef CORBA::Boolean TResult;
+ TResult myResult;
+ TSavePictureEvent(QWidget* theWidget, const char* theFileName):
+ myWidget(theWidget),
+ myFileName(theFileName),
+ myResult(false)
+ {}
+ virtual void Execute(){
+ if(myWidget){
+ QPixmap px = QPixmap::grabWindow(myWidget->winId());
+ if (!QString(myFileName).isNull()) {
+ QString fmt = QAD_Tools::getFileExtensionFromPath(myFileName).upper();
+ if (fmt.isEmpty())
+ fmt = QString("BMP"); // default format
+ if (fmt == "JPG")
+ fmt = "JPEG";
+ myResult = px.save(myFileName, fmt.latin1());
+ }
+ }
+ }
+ };
+
+
+ void RepaintView(QAD_StudyFrame* theStudyFrame);
+ class TRepaintViewEvent: public SALOME_Event{
+ QAD_StudyFrame* myStudyFrame;
+ public:
+ TRepaintViewEvent(QAD_StudyFrame* theStudyFrame):
+ myStudyFrame(theStudyFrame)
+ {}
+ virtual void Execute(){
+ RepaintView(myStudyFrame);
+ }
+ };
+
+
VTKViewer_ViewFrame* GetViewFrame(QAD_StudyFrame* theStudyFrame){
return dynamic_cast<VTKViewer_ViewFrame*>(theStudyFrame->getRightFrame()->getViewFrame());
}
vtkCamera* GetCamera(QAD_StudyFrame* theStudyFrame){
return GetRenderer(theStudyFrame)->GetActiveCamera();
}
+
+
+ void RepaintView(VTKViewer_ViewFrame* theViewFrame){
+ theViewFrame->getRenderer()->ResetCameraClippingRange();
+ theViewFrame->getRW()->getRenderWindow()->Render();
+ //GetViewFrame(theStudyFrame)->Repaint();
+ }
+
void RepaintView(QAD_StudyFrame* theStudyFrame){
- GetRenderer(theStudyFrame)->ResetCameraClippingRange();
- GetViewFrame(theStudyFrame)->Repaint();
+ RepaintView(GetViewFrame(theStudyFrame));
}
+
+
VISU_Actor* UpdateViewer(QAD_StudyFrame* theStudyFrame, int theDisplaing, Prs3d_i* thePrs){
VTKViewer_ViewFrame* vf = GetViewFrame(theStudyFrame);
if (!vf) return NULL;
vtkActorCollection *anActColl = aRen->GetActors();
vtkActor *anActor;
VISU_Actor *anVISUActor = NULL, *aResActor = NULL;
- void *aSrcAddr = thePrs != NULL? (void*)thePrs->GetMapper(): NULL;
- if(MYDEBUG) MESSAGE("UpdateViewer - aSrcAddr = "<<aSrcAddr);
- for(anActColl->InitTraversal(); (anActor = anActColl->GetNextActor()) != NULL; ){
+ for(anActColl->InitTraversal(); (anActor = anActColl->GetNextActor()) != NULL;){
if(anActor->IsA("VISU_Actor")){
anVISUActor = VISU_Actor::SafeDownCast(anActor);
- void* aCurrAddr = (void*)anVISUActor->GetMapper();
- if(MYDEBUG) MESSAGE("UpdateViewer - aCurrAddr = "<<aCurrAddr);
- if (aSrcAddr == aCurrAddr) {
- if(MYDEBUG) MESSAGE("UpdateViewer - aSrcAddr == aCurrAddr");
- aResActor = anVISUActor;
- if(theDisplaing < eErase){
+ if (thePrs == anVISUActor->GetPrs3d()) {
+ aResActor = anVISUActor->GetParent();
+ if(theDisplaing < eErase)
aResActor->VisibilityOn();
- if (aResActor->HasScalarBar()) aResActor->getScalarBar()->VisibilityOn();
- }else{
+ else
aResActor->VisibilityOff();
- if (aResActor->HasScalarBar()) aResActor->getScalarBar()->VisibilityOff();
- }
} else {
- if(theDisplaing > eDisplay){
+ if(theDisplaing > eDisplay)
anVISUActor->VisibilityOff();
- if (anVISUActor->HasScalarBar()) anVISUActor->getScalarBar()->VisibilityOff();
- }else{
+ else
anVISUActor->VisibilityOn();
- if (anVISUActor->HasScalarBar()) anVISUActor->getScalarBar()->VisibilityOn();
- }
}
}
}
return aResActor;
}
if(thePrs != NULL && theDisplaing < eErase){
- anVISUActor = thePrs->CreateActor();
- if (anVISUActor ) {
- if(MYDEBUG) MESSAGE("UpdateViewer - thePrs->CreateActor() = "<<anVISUActor->GetMapper());
+ try{
+ anVISUActor = thePrs->CreateActor();
vf->AddActor(anVISUActor);
- if(anVISUActor->HasScalarBar()){
- if(MYDEBUG) MESSAGE("UpdateViewer - anVISUActor->getScalarBar()");
- aRen->AddActor2D(anVISUActor->getScalarBar());
- }
- } else {
- MESSAGE ("Null actor is created");
+ }catch(std::runtime_error& exc){
+ INFOS(exc.what());
return NULL;
}
}
for ( int i = 0; i < clist.count(); i++ ) {
if ( theCurve && clist.at( i )->hasIO() && !strcmp( clist.at( i )->getIO()->getEntry(), theCurve->GetEntry() ) ) {
if(MYDEBUG) MESSAGE("UpdatePlot2d - displaying : curve - "<<clist.at( i ) );
- clist.at( i )->setHorTitle( strdup( theCurve->GetHorTitle().c_str() ) );
- clist.at( i )->setVerTitle( strdup( theCurve->GetVerTitle().c_str() ) );
- clist.at( i )->setHorUnits( strdup( theCurve->GetHorUnits().c_str() ) );
- clist.at( i )->setVerUnits( strdup( theCurve->GetVerUnits().c_str() ) );
- /* - DATA NOT UPDATED */
- if ( !clist.at( i )->isAutoAssign() ) {
+ clist.at( i )->setHorTitle( theCurve->GetHorTitle().c_str() );
+ clist.at( i )->setVerTitle( theCurve->GetVerTitle().c_str() );
+ clist.at( i )->setHorUnits( theCurve->GetHorUnits().c_str() );
+ clist.at( i )->setVerUnits( theCurve->GetVerUnits().c_str() );
+ double* xList = 0;
+ double* yList = 0;
+ int nbPoints = theCurve->GetData( xList, yList );
+ if ( nbPoints > 0 && xList && yList ) {
+ clist.at( i )->setData( xList, yList, nbPoints );
+ }
+ if ( !theCurve->IsAuto() ) {
clist.at( i )->setLine( (Plot2d_Curve::LineType)theCurve->GetLine(), theCurve->GetLineWidth() );
clist.at( i )->setMarker( (Plot2d_Curve::MarkerType)theCurve->GetMarker() );
SALOMEDS::Color color = theCurve->GetColor();
clist.at( i )->setColor( QColor( (int)(color.R*255.), (int)(color.G*255.), (int)(color.B*255.) ) );
- clist.at( i )->setAutoAssign( theCurve->IsAuto() );
}
+ clist.at( i )->setAutoAssign( theCurve->IsAuto() );
theView->displayCurve( clist.at( i ) );
bFound = true;
}
if ( !bFound ) {
Plot2d_Curve* crv = theCurve->CreatePresentation();
if(MYDEBUG) MESSAGE("UpdatePlot2d - displaying : curve (new) - "<<crv );
- if ( crv )
+ if ( crv ) {
theView->displayCurve( crv );
+ theCurve->SetLine( (VISU::Curve::LineType)crv->getLine(), crv->getLineWidth() );
+ theCurve->SetMarker( (VISU::Curve::MarkerType)crv->getMarker());
+ SALOMEDS::Color newColor;
+ newColor.R = crv->getColor().red()/255.;
+ newColor.G = crv->getColor().green()/255.;
+ newColor.B = crv->getColor().blue()/255.;
+ theCurve->SetColor( newColor );
+ crv->setAutoAssign( theCurve->IsAuto() );
+ }
}
}
else if ( theDisplaying == eDisplayOnly ) {
for ( int i = 0; i < clist.count(); i++ ) {
if ( theCurve && clist.at( i )->hasIO() && !strcmp( clist.at( i )->getIO()->getEntry(), theCurve->GetEntry() ) ) {
if(MYDEBUG) MESSAGE("UpdatePlot2d - displaying only : curve - "<<clist.at( i ) );
- clist.at( i )->setHorTitle( strdup( theCurve->GetHorTitle().c_str() ) );
- clist.at( i )->setVerTitle( strdup( theCurve->GetVerTitle().c_str() ) );
- clist.at( i )->setHorUnits( strdup( theCurve->GetHorUnits().c_str() ) );
- clist.at( i )->setVerUnits( strdup( theCurve->GetVerUnits().c_str() ) );
- /* - DATA NOT UPDATED */
- if ( !clist.at( i )->isAutoAssign() ) {
+ clist.at( i )->setHorTitle( theCurve->GetHorTitle().c_str() );
+ clist.at( i )->setVerTitle( theCurve->GetVerTitle().c_str() );
+ clist.at( i )->setHorUnits( theCurve->GetHorUnits().c_str() );
+ clist.at( i )->setVerUnits( theCurve->GetVerUnits().c_str() );
+ double* xList = 0;
+ double* yList = 0;
+ int nbPoints = theCurve->GetData( xList, yList );
+ if ( nbPoints > 0 && xList && yList ) {
+ clist.at( i )->setData( xList, yList, nbPoints );
+ }
+ if ( !theCurve->IsAuto() ) {
clist.at( i )->setLine( (Plot2d_Curve::LineType)theCurve->GetLine(), theCurve->GetLineWidth() );
clist.at( i )->setMarker( (Plot2d_Curve::MarkerType)theCurve->GetMarker() );
SALOMEDS::Color color = theCurve->GetColor();
clist.at( i )->setColor( QColor( (int)(color.R*255.), (int)(color.G*255.), (int)(color.B*255.) ) );
- clist.at( i )->setAutoAssign( theCurve->IsAuto() );
}
+ clist.at( i )->setAutoAssign( theCurve->IsAuto() );
theView->displayCurve( clist.at( i ) );
bFound = true;
}
if ( !bFound ) {
Plot2d_Curve* crv = theCurve->CreatePresentation();
if(MYDEBUG) MESSAGE("UpdatePlot2d - displaying only : curve (new) - "<<crv );
- if ( crv )
+ if ( crv ) {
theView->displayCurve( crv );
+ theCurve->SetLine( (VISU::Curve::LineType)crv->getLine(), crv->getLineWidth() );
+ theCurve->SetMarker( (VISU::Curve::MarkerType)crv->getMarker());
+ SALOMEDS::Color newColor;
+ newColor.R = crv->getColor().red()/255.;
+ newColor.G = crv->getColor().green()/255.;
+ newColor.B = crv->getColor().blue()/255.;
+ theCurve->SetColor( newColor );
+ crv->setAutoAssign( theCurve->IsAuto() );
+ }
+ }
+ }
+ }
+
+ QAD_Study* CheckStudy( SALOMEDS::Study_ptr theStudy ) {
+ QAD_Desktop* aDesktop = QAD_Application::getDesktop();
+ QAD_Study* aStudy = aDesktop->findStudy(theStudy);
+ if(!aStudy){
+ CORBA::String_var aName = theStudy->Name();
+ aFileInfo.setFile(aName.in());
+ if (aFileInfo.exists())
+ aStudy = aDesktop->loadStudy(aFileInfo.baseName());
+ else
+ aStudy = aDesktop->loadStudy(aName.in());
+ if (!aStudy) {
+ MESSAGE("CheckStudy()::ERROR: Can't load study");
}
}
+ return aStudy;
}
//===========================================================================
ViewManager_i::ViewManager_i(SALOMEDS::Study_ptr theStudy) {
if(MYDEBUG) MESSAGE("ViewManager_i::ViewManager_i");
- Mutex mt(myMutex,qApp);
myStudyDocument = SALOMEDS::Study::_duplicate(theStudy);
- /*
- CORBA::String_var aName = myStudyDocument->Name();
- if(QAD_Application::getDesktop()->getActiveApp()->isStudyOpened(aName.in()))
- QAD_Application::getDesktop()->getActiveApp()->loadStudy(aName.in());
- */
- }
- VISU::View3D_ptr ViewManager_i::Create3DView(){
- if(MYDEBUG) MESSAGE("ViewManager_i::Create3DView");
- VISU::View3D_i* pView = new View3D_i(myStudyDocument);
- if(pView->Create(1) != NULL)
- return VISU::View3D::_duplicate(pView->_this());
- return VISU::View3D::_nil();
}
- VISU::View_ptr ViewManager_i::GetCurrentView(){
- if(MYDEBUG) MESSAGE("ViewManager_i::GetCurrent3DView");
- QAD_Study* Study = QAD_Application::getDesktop()->findStudy( myStudyDocument );
- QAD_StudyFrame* StudyFrame;
- if ( Study && ( StudyFrame = Study->getActiveStudyFrame() ) ) {
- if ( StudyFrame->getTypeView() == VIEW_VTK ) {
- VISU::View3D_i* pView = new View3D_i(myStudyDocument);
- if(pView->Create(0) != NULL)
- return VISU::View3D::_duplicate(pView->_this());
+
+
+ class TGetCurrentViewEvent: public SALOME_Event{
+ SALOMEDS::Study_ptr myStudyDocument;
+ public:
+ TGetCurrentViewEvent( SALOMEDS::Study_ptr theStudy):
+ myStudyDocument(theStudy),
+ myResult(VISU::View::_nil())
+ {}
+ virtual void Execute(){
+ if(QAD_Study* aStudy = QAD_Application::getDesktop()->findStudy( myStudyDocument )){
+ if ( QAD_StudyFrame* aStudyFrame = aStudy->getActiveStudyFrame() ) {
+ if(MYDEBUG)
+ MESSAGE("GetCurrentView::Execute - TypeView = "<<aStudyFrame->getTypeView());
+ if ( aStudyFrame->getTypeView() == VIEW_VTK ) {
+ VISU::View3D_i* pView = new View3D_i(myStudyDocument);
+ if(pView->Create(0))
+ myResult = pView->_this();
+ } else if ( aStudyFrame->getTypeView() == VIEW_PLOT2D ) {
+ VISU::XYPlot_i* pView = new XYPlot_i(myStudyDocument);
+ if(pView->Create(0))
+ myResult = pView->_this();
+ }
+ }
}
- else if ( StudyFrame->getTypeView() == VIEW_PLOT2D ) {
- VISU::XYPlot_i* pView = new XYPlot_i(myStudyDocument);
- if(pView->Create(0) != NULL)
- return VISU::XYPlot::_duplicate(pView->_this());
+ }
+ typedef VISU::View_ptr TResult;
+ TResult myResult;
+ };
+
+ VISU::View_ptr ViewManager_i::GetCurrentView(){
+ return ProcessEvent(new TGetCurrentViewEvent( myStudyDocument ));
+ }
+
+
+ class TCreateViewEvent: public SALOME_Event{
+ public:
+ TCreateViewEvent( SALOMEDS::Study_ptr theStudy):
+ myStudyDocument(theStudy)
+ {};
+ protected:
+ SALOMEDS::Study_ptr myStudyDocument;
+ };
+
+
+ template<class TViewFrame>
+ class TCreateViewFrameEvent: public TCreateViewEvent{
+ public:
+ typedef typename TViewFrame::TInterface TInterface;
+ typedef typename TInterface::_ptr_type TResult;
+ TResult myResult;
+ TCreateViewFrameEvent(SALOMEDS::Study_ptr theStudy):
+ TCreateViewEvent(theStudy),
+ myResult(TInterface::_nil())
+ {}
+ virtual void Execute(){
+ if(CheckStudy(myStudyDocument)){
+ TViewFrame* pView = new TViewFrame(myStudyDocument);
+ if(pView->Create(1))
+ myResult = pView->_this();
}
}
- return VISU::View::_nil();
+ };
+
+
+ VISU::View3D_ptr ViewManager_i::Create3DView(){
+ if(MYDEBUG) MESSAGE("ViewManager_i::Create3DView");
+ return ProcessEvent(new TCreateViewFrameEvent<VISU::View3D_i>(myStudyDocument));
}
+
+
VISU::XYPlot_ptr ViewManager_i::CreateXYPlot(){
if(MYDEBUG) MESSAGE("ViewManager_i::CreateXYPlot");
- VISU::XYPlot_i* pView = new XYPlot_i(myStudyDocument);
- if(pView->Create(1) != NULL)
- return VISU::XYPlot::_duplicate(pView->_this());
- return VISU::XYPlot::_nil();
+ return ProcessEvent(new TCreateViewFrameEvent<VISU::XYPlot_i>(myStudyDocument));
}
+
+
+ class TCreateTableViewEvent: public TCreateViewEvent{
+ Table_ptr myTable;
+ public:
+ TCreateTableViewEvent(SALOMEDS::Study_ptr theStudy,
+ Table_ptr theTable):
+ TCreateViewEvent(theStudy),
+ myTable(theTable),
+ myResult(VISU::TableView::_nil())
+ {}
+ virtual void Execute(){
+ if ( CheckStudy( myStudyDocument ) ) {
+ VISU::TableView_i* pView = new TableView_i(myStudyDocument);
+ if(pView->Create(myTable) != NULL)
+ myResult = pView->_this();
+ }
+ }
+ typedef VISU::TableView_ptr TResult;
+ TResult myResult;
+ };
+
VISU::TableView_ptr ViewManager_i::CreateTableView(VISU::Table_ptr theTable){
if(MYDEBUG) MESSAGE("ViewManager_i::CreateTableView");
- VISU::TableView_i* pView = new TableView_i(myStudyDocument);
- if(pView->Create(VISU::Table::_duplicate(theTable)) != NULL)
- return VISU::TableView::_duplicate(pView->_this());
- return VISU::TableView::_nil();
+ return ProcessEvent(new TCreateTableViewEvent(myStudyDocument,theTable));
}
+
+
void ViewManager_i::Destroy(View_ptr theView){
- if(MYDEBUG) MESSAGE("ViewManager_i::Destroy - "<<theView->_is_nil());
- if(theView->_is_nil()) return;
- CORBA::Object_var aView = VISU::View::_narrow(theView);
- if(!CORBA::is_nil(aView)){
- if(MYDEBUG) MESSAGE("ViewManager_i::Destroy - VISU::View"<<(!CORBA::is_nil(aView)));
- VISU::View_i* pView = dynamic_cast<VISU::View_i*>(VISU::GetServant(aView));
- if(MYDEBUG) MESSAGE("ViewManager_i::Destroy - dynamic_cast"<<pView);
- if(pView) {
- pView->Close();
- pView->_remove_ref();
+ class TEvent: public SALOME_Event{
+ View_ptr myView;
+ public:
+ TEvent(View_ptr theView):
+ myView(theView)
+ {}
+ virtual void Execute(){
+ if(!CORBA::is_nil(myView)){
+ if(VISU::View_i* pView = dynamic_cast<VISU::View_i*>(VISU::GetServant(myView).in())) {
+ pView->Close();
+ pView->_remove_ref();
+ }
+ }
}
- //if(pView) delete pView;
- return;
- }
+ };
+ if(MYDEBUG) MESSAGE("ViewManager_i::Destroy - "<<theView->_is_nil());
+ ProcessVoidEvent(new TEvent(theView));
}
+
+
//===========================================================================
View_i::View_i(SALOMEDS::Study_ptr theStudy) {
+ myStudyFrame = NULL;
if(MYDEBUG) MESSAGE("View_i::View_i");
- Mutex mt(myMutex,qApp);
CORBA::String_var aName = theStudy->Name();
- myStudy = QAD_Application::getDesktop()->findStudy( theStudy );
- if(MYDEBUG) MESSAGE("View_i::View_i - isStudyOpened = "<<myStudy);
- if ( !myStudy )
- myStudy = myStudy = QAD_Application::getDesktop()->getActiveApp()->loadStudy(aName.in());
+ myStudy = CheckStudy(theStudy);
+ if(MYDEBUG) MESSAGE("View_i::View_i - isStudyOpened = "<<myStudy<<"; aName = "<<aName.in());
}
+
View_i::~View_i(){
if(MYDEBUG) MESSAGE("View_i::~View_i");
}
CORBA::Boolean View_i::SavePicture(const char* theFileName) { return false; }
const char* View_i::GetComment() const { return "";}
- void View_i::ToStream(ostrstream& theStr) {}
+ void View_i::ToStream(std::ostringstream& theStr) {}
- const char* View_i::GetEntry(){
+ string View_i::GetEntry(){
SALOMEDS::SObject_var aSObject = myStudy->getStudyDocument()->FindObjectIOR(GetID());
CORBA::String_var anEntry = aSObject->GetID();
- string aString(anEntry);
- if(MYDEBUG) MESSAGE("Result_i::GetEntry - "<<aString);
- return aString.c_str();
+ return string(anEntry.in());
}
+
+
//===========================================================================
XYPlot_i::XYPlot_i(SALOMEDS::Study_ptr theStudy) : View_i(theStudy) {
if(MYDEBUG) MESSAGE("XYPlot_i::XYPlot_i");
}
+
Storable* XYPlot_i::Create(int theNew){
- if(MYDEBUG) MESSAGE("XYPlot_i::Create");
- Mutex mt(myMutex,qApp);
if(theNew)
myStudyFrame = myStudy->newWindow3d("",VIEW_PLOT2D);
else
myStudyFrame = myStudy->getActiveStudyFrame();
myView = dynamic_cast<Plot2d_ViewFrame*>(myStudyFrame->getRightFrame()->getViewFrame());
- Update();
+ myView->Repaint();
return this;
}
+
+
void XYPlot_i::Update() {
- if(MYDEBUG) MESSAGE("XYPlot_i::Update");
- Mutex mt(myMutex,qApp);
- myName = myStudyFrame->title();
- myView->Repaint();
+ ProcessVoidEvent(new TVoidMemFunEvent<Plot2d_ViewFrame>(myView,&Plot2d_ViewFrame::Repaint));
}
+
+
void XYPlot_i::Close(){
- if(MYDEBUG) MESSAGE("XYPlot_i::Close");
- Mutex mt(myMutex,qApp);
myStudyFrame->close();
}
+
XYPlot_i::~XYPlot_i() {
if(MYDEBUG) MESSAGE("XYPlot_i::~XYPlot_i");
- Mutex mt(myMutex,qApp);
- myStudyFrame->close();
}
+
+
void XYPlot_i::SetTitle(const char* theTitle){
- if(MYDEBUG) MESSAGE("XYPlot_i::SetTitle");
- Mutex mt(myMutex,qApp);
- myName = theTitle;
- myStudyFrame->setCaption(myName.c_str());
+ ProcessVoidEvent(new TVoidMemFun1ArgEvent<QAD_StudyFrame,const QString&,QString>
+ (myStudyFrame,&QAD_StudyFrame::setCaption,QString(theTitle)));
}
char* XYPlot_i::GetTitle() {
- if(MYDEBUG) MESSAGE("XYPlot_i::GetTitle");
- Mutex mt(myMutex,qApp);
- myName = myStudyFrame->title();
- return CORBA::string_dup(myName.c_str());
+ return CORBA::string_dup(myStudyFrame->title().latin1());
}
+
void XYPlot_i::SetSubTitle(const char* theTitle){
- if(MYDEBUG) MESSAGE("XYPlot_i::SetSubTitle");
- Mutex mt(myMutex,qApp);
- myView->setTitle(theTitle);
+ ProcessVoidEvent(new TVoidMemFun1ArgEvent<Plot2d_ViewFrame,const QString&,QString>
+ (myView,&Plot2d_ViewFrame::setTitle,QString(theTitle)));
}
char* XYPlot_i::GetSubTitle() {
- if(MYDEBUG) MESSAGE("XYPlot_i::GetSubTitle");
- Mutex mt(myMutex,qApp);
return CORBA::string_dup(myView->getTitle());
}
+
void XYPlot_i::SetCurveType(VISU::XYPlot::CurveType theType){
- if(MYDEBUG) MESSAGE("XYPlot_i::SetCurveType");
- Mutex mt(myMutex,qApp);
- myView->setCurveType(theType);
+ ProcessVoidEvent(new TVoidMemFun2ArgEvent<Plot2d_ViewFrame,int,bool>
+ (myView,&Plot2d_ViewFrame::setCurveType,theType,true));
}
VISU::XYPlot::CurveType XYPlot_i::GetCurveType(){
- if(MYDEBUG) MESSAGE("XYPlot_i::GetCurveType");
- Mutex mt(myMutex,qApp);
return (VISU::XYPlot::CurveType)myView->getCurveType();
}
+
void XYPlot_i::SetMarkerSize(CORBA::Long theSize){
- if(MYDEBUG) MESSAGE("XYPlot_i::SetMarkerSize");
- Mutex mt(myMutex,qApp);
- myView->setMarkerSize(theSize);
+ ProcessVoidEvent(new TVoidMemFun2ArgEvent<Plot2d_ViewFrame,int,bool>
+ (myView,&Plot2d_ViewFrame::setMarkerSize,theSize,true));
}
CORBA::Long XYPlot_i::GetMarkerSize(){
- if(MYDEBUG) MESSAGE("XYPlot_i::GetMarkerSize");
- Mutex mt(myMutex,qApp);
return myView->getMarkerSize();
}
+
+ class TEnbleGridEvent: public SALOME_Event{
+ public:
+ typedef void (Plot2d_ViewFrame::* TFun)(bool, const int, bool, const int, bool = true);
+ TEnbleGridEvent(Plot2d_ViewFrame* theView, TFun theFun,
+ CORBA::Boolean theMajor, CORBA::Long theNumMajor,
+ CORBA::Boolean theMinor, CORBA::Long theNumMinor):
+ myView(theView), myFun(theFun),
+ myMajor(theMajor), myNumMajor(theNumMajor),
+ myMinor(theMinor), myNumMinor(theNumMinor)
+ {}
+ virtual void Execute(){
+ (myView->*myFun)(myMajor,myNumMajor,myMinor,myNumMinor);
+ }
+ protected:
+ Plot2d_ViewFrame* myView;
+ TFun myFun;
+ CORBA::Boolean myMajor, myNumMajor;
+ CORBA::Boolean myMinor, myNumMinor;
+ };
+
+
void XYPlot_i::EnableXGrid(CORBA::Boolean theMajor, CORBA::Long theNumMajor,
- CORBA::Boolean theMinor, CORBA::Long theNumMinor){
- if(MYDEBUG) MESSAGE("XYPlot_i::EnableXGrid");
- Mutex mt(myMutex,qApp);
- myView->setXGrid(theMajor,theNumMajor,theMinor,theNumMinor);
+ CORBA::Boolean theMinor, CORBA::Long theNumMinor)
+ {
+ ProcessVoidEvent(new TEnbleGridEvent(myView,&Plot2d_ViewFrame::setXGrid,
+ theMajor,theNumMajor,theMinor,theNumMinor));
}
void XYPlot_i::EnableYGrid(CORBA::Boolean theMajor, CORBA::Long theNumMajor,
- CORBA::Boolean theMinor, CORBA::Long theNumMinor){
- if(MYDEBUG) MESSAGE("XYPlot_i::EnableYGrid");
- Mutex mt(myMutex,qApp);
- myView->setYGrid(theMajor,theNumMajor,theMinor,theNumMinor);
+ CORBA::Boolean theMinor, CORBA::Long theNumMinor)
+ {
+ ProcessVoidEvent(new TEnbleGridEvent(myView,&Plot2d_ViewFrame::setYGrid,
+ theMajor,theNumMajor,theMinor,theNumMinor));
}
+
+ class TSetScaleModeEvent: public SALOME_Event{
+ public:
+ typedef void (Plot2d_ViewFrame::* TFun)(const int, bool = true);
+ TSetScaleModeEvent(Plot2d_ViewFrame* theView, TFun theFun, int theScaling):
+ myView(theView), myFun(theFun), myScaling(theScaling)
+ {}
+ virtual void Execute(){
+ (myView->*myFun)(myScaling);
+ }
+ protected:
+ Plot2d_ViewFrame* myView;
+ TFun myFun;
+ int myScaling;
+ };
+
+
void XYPlot_i::SetHorScaling(VISU::Scaling theScaling){
- if(MYDEBUG) MESSAGE("XYPlot_i::SetHorScaling");
- Mutex mt(myMutex,qApp);
- if(theScaling == VISU::LOGARITHMIC)
- myView->setHorScaleMode(1);
- else
- myView->setHorScaleMode(0);
+ ProcessVoidEvent(new TSetScaleModeEvent(myView,&Plot2d_ViewFrame::setHorScaleMode,
+ theScaling == VISU::LOGARITHMIC));
}
VISU::Scaling XYPlot_i::GetHorScaling(){
- if(MYDEBUG) MESSAGE("XYPlot_i::GetHorScaling");
- Mutex mt(myMutex,qApp);
return (VISU::Scaling)myView->getHorScaleMode();
}
+
void XYPlot_i::SetVerScaling(VISU::Scaling theScaling){
- if(MYDEBUG) MESSAGE("XYPlot_i::SetVerScaling");
- Mutex mt(myMutex,qApp);
- if(theScaling == VISU::LOGARITHMIC)
- myView->setVerScaleMode(1);
- else
- myView->setVerScaleMode(0);
+ ProcessVoidEvent(new TSetScaleModeEvent(myView,&Plot2d_ViewFrame::setVerScaleMode,
+ theScaling == VISU::LOGARITHMIC));
}
VISU::Scaling XYPlot_i::GetVerScaling(){
- if(MYDEBUG) MESSAGE("XYPlot_i::SetVerScaling");
- Mutex mt(myMutex,qApp);
return (VISU::Scaling)myView->getVerScaleMode();
}
+
+ class TSetTitleEvent: public SALOME_Event{
+ public:
+ typedef void (Plot2d_ViewFrame::* TFun)(bool, const QString&, bool = true);
+ TSetTitleEvent(Plot2d_ViewFrame* theView, TFun theFun, const char* theTitle):
+ myView(theView), myFun(theFun), myTitle(theTitle)
+ {}
+ virtual void Execute(){
+ (myView->*myFun)(true,myTitle);
+ }
+ protected:
+ Plot2d_ViewFrame* myView;
+ TFun myFun;
+ const char* myTitle;
+ };
+
+
void XYPlot_i::SetXTitle(const char* theTitle){
- if(MYDEBUG) MESSAGE("XYPlot_i::SetXTitle");
- Mutex mt(myMutex,qApp);
- myView->setXTitle(true,theTitle);
+ ProcessVoidEvent(new TSetTitleEvent(myView,&Plot2d_ViewFrame::setXTitle,theTitle));
}
char* XYPlot_i::GetXTitle() {
- if(MYDEBUG) MESSAGE("XYPlot_i::GetXTitle");
- Mutex mt(myMutex,qApp);
return CORBA::string_dup(myView->getXTitle());
}
+
void XYPlot_i::SetYTitle(const char* theTitle){
- if(MYDEBUG) MESSAGE("XYPlot_i::SetYTitle");
- Mutex mt(myMutex,qApp);
- myView->setYTitle(true,theTitle);
+ ProcessVoidEvent(new TSetTitleEvent(myView,&Plot2d_ViewFrame::setYTitle,theTitle));
}
char* XYPlot_i::GetYTitle() {
- if(MYDEBUG) MESSAGE("XYPlot_i::GetYTitle");
- Mutex mt(myMutex,qApp);
return CORBA::string_dup(myView->getYTitle());
}
+
void XYPlot_i::ShowLegend(CORBA::Boolean theShowing){
- if(MYDEBUG) MESSAGE("XYPlot_i::ShowLegend");
- Mutex mt(myMutex,qApp);
- myView->showLegend(theShowing);
+ ProcessVoidEvent(new TVoidMemFun2ArgEvent<Plot2d_ViewFrame,bool,bool>
+ (myView,&Plot2d_ViewFrame::showLegend,theShowing,true));
}
+
void XYPlot_i::SetBackground(const SALOMEDS::Color& theColor){
- if(MYDEBUG) MESSAGE("XYPlot_i::SetBackground");
- Mutex mt(myMutex,qApp);
- QColor aColor(255.0*theColor.R,255.0*theColor.G,255.0*theColor.B);
- myView->setBackgroundColor(aColor);
+ ProcessVoidEvent(new TSetBackgroundEvent<Plot2d_ViewFrame>(myView,theColor));
}
SALOMEDS::Color XYPlot_i::GetBackground() {
- if(MYDEBUG) MESSAGE("XYPlot_i::GetBackground");
- Mutex mt(myMutex,qApp);
SALOMEDS::Color aColor;
aColor.R = myView->backgroundColor().red()/255.0;
aColor.G = myView->backgroundColor().green()/255.0;
aColor.B = myView->backgroundColor().blue()/255.0;
return aColor;
}
+
void XYPlot_i::Minimize() {
- if(MYDEBUG) MESSAGE("XYPlot_i::Minimize");
- Mutex mt(myMutex,qApp);
- myStudyFrame->showMinimized();
+ ProcessVoidEvent(new TFrameActionEvent(myStudyFrame,&QAD_StudyFrame::showMinimized));
}
+
void XYPlot_i::Restore() {
- if(MYDEBUG) MESSAGE("XYPlot_i::Restore");
- Mutex mt(myMutex,qApp);
- myStudyFrame->showNormal();
+ ProcessVoidEvent(new TFrameActionEvent(myStudyFrame, &QAD_StudyFrame::showNormal));
}
+
void XYPlot_i::Maximize() {
- if(MYDEBUG) MESSAGE("XYPlot_i::Maximize");
- Mutex mt(myMutex,qApp);
- myStudyFrame->showMaximized();
+ ProcessVoidEvent(new TFrameActionEvent(myStudyFrame, &QAD_StudyFrame::showMaximized));
}
- void XYPlot_i::Display(PrsObject_ptr thePrsObj) {
- if(MYDEBUG) MESSAGE("View3D_i::Display");
- Mutex mt(myMutex,qApp);
- CORBA::Object_var anObj = thePrsObj;
- // is it Curve ?
- if(Curve_i* aCurve = dynamic_cast<Curve_i*>(VISU::GetServant(anObj))) {
- UpdatePlot2d(myView,eDisplay,aCurve);
- }
- // is it Container ?
- if(Container_i* aContainer = dynamic_cast<Container_i*>(VISU::GetServant(anObj))) {
- int nbCurves = aContainer->GetNbCurves();
- for ( int i = 1; i <= nbCurves; i++ ) {
- VISU::Curve_i* aCurve = aContainer->GetCurve( i );
- if ( aCurve && aCurve->IsValid() ) {
- UpdatePlot2d(myView,eDisplay,aCurve);
- }
+
+
+ class TXYPlotViewEvent: public SALOME_Event{
+ QAD_Study* myStudy;
+ Plot2d_ViewFrame* myView;
+ PrsObject_ptr myPrsObj;
+ int myDisplaing;
+ public:
+ TXYPlotViewEvent(QAD_Study* theStudy,
+ Plot2d_ViewFrame* theView,
+ PrsObject_ptr thePrsObj,
+ int theDisplaing):
+ myStudy(theStudy),
+ myView(theView),
+ myPrsObj(thePrsObj),
+ myDisplaing(theDisplaing)
+ {}
+ virtual void Execute(){
+ // is it Curve ?
+ if(Curve_i* aCurve = dynamic_cast<Curve_i*>(VISU::GetServant(myPrsObj).in())) {
+ UpdatePlot2d(myView,myDisplaing,aCurve);
}
- myView->Repaint();
- }
- // is it Table ?
- if(Table_i* aTable = dynamic_cast<Table_i*>(VISU::GetServant(anObj))) {
- SALOMEDS::SObject_var TableSO = myStudy->getStudyDocument()->FindObjectID( aTable->GetEntry() );
- if ( !TableSO->_is_nil() ) {
- SALOMEDS::ChildIterator_var Iter = myStudy->getStudyDocument()->NewChildIterator( TableSO );
- for ( ; Iter->More(); Iter->Next() ) {
- CORBA::Object_var childObject = VISU::SObjectToObject( Iter->Value() );
- if( !CORBA::is_nil( childObject ) ) {
- CORBA::Object_ptr aCurve = VISU::Curve::_narrow( childObject );
- if( !CORBA::is_nil( aCurve ) )
- UpdatePlot2d(myView,eDisplay,dynamic_cast<VISU::Curve_i*>( VISU::GetServant( aCurve ) ));
+ // is it Container ?
+ if(Container_i* aContainer = dynamic_cast<Container_i*>(VISU::GetServant(myPrsObj).in())) {
+ int nbCurves = aContainer->GetNbCurves();
+ for ( int i = 1; i <= nbCurves; i++ ) {
+ VISU::Curve_i* aCurve = aContainer->GetCurve( i );
+ if ( aCurve && aCurve->IsValid() ) {
+ UpdatePlot2d(myView,myDisplaing,aCurve);
}
}
myView->Repaint();
}
- }
- }
- void XYPlot_i::Erase(PrsObject_ptr thePrsObj) {
- if(MYDEBUG) MESSAGE("View3D_i::Display");
- Mutex mt(myMutex,qApp);
- CORBA::Object_var anObj = thePrsObj;
- // is it Curve ?
- if(Curve_i* aCurve = dynamic_cast<Curve_i*>(VISU::GetServant(anObj))) {
- UpdatePlot2d(myView,eErase,aCurve);
- }
- // is it Container ?
- if(Container_i* aContainer = dynamic_cast<Container_i*>(VISU::GetServant(anObj))) {
- int nbCurves = aContainer->GetNbCurves();
- for ( int i = 1; i <= nbCurves; i++ ) {
- VISU::Curve_i* aCurve = aContainer->GetCurve( i );
- if ( aCurve && aCurve->IsValid() ) {
- UpdatePlot2d(myView,eErase,aCurve);
- }
- }
- myView->Repaint();
- }
- // is it Table ?
- if(Table_i* aTable = dynamic_cast<Table_i*>(VISU::GetServant(anObj))) {
- SALOMEDS::SObject_var TableSO = myStudy->getStudyDocument()->FindObjectID( aTable->GetEntry() );
- if ( !TableSO->_is_nil() ) {
- SALOMEDS::ChildIterator_var Iter = myStudy->getStudyDocument()->NewChildIterator( TableSO );
+ // is it Table ?
+ if(Table_i* aTable = dynamic_cast<Table_i*>(VISU::GetServant(myPrsObj).in())) {
+ SALOMEDS::Study_var aStudy = myStudy->getStudyDocument();
+ SALOMEDS::SObject_var TableSO = aStudy->FindObjectID( aTable->GetEntry() );
+ if ( !TableSO->_is_nil() ) {
+ SALOMEDS::ChildIterator_var Iter = aStudy->NewChildIterator( TableSO );
for ( ; Iter->More(); Iter->Next() ) {
- CORBA::Object_var childObject = VISU::SObjectToObject( Iter->Value() );
- if( !CORBA::is_nil( childObject ) ) {
- CORBA::Object_ptr aCurve = VISU::Curve::_narrow( childObject );
- if( !CORBA::is_nil( aCurve ) )
- UpdatePlot2d(myView,eErase,dynamic_cast<VISU::Curve_i*>( VISU::GetServant( aCurve ) ));
+ CORBA::Object_var childObject = VISU::SObjectToObject( Iter->Value() );
+ if( !CORBA::is_nil( childObject ) ) {
+ CORBA::Object_ptr aCurve = VISU::Curve::_narrow( childObject );
+ if( !CORBA::is_nil( aCurve ) )
+ UpdatePlot2d(myView,myDisplaing,dynamic_cast<VISU::Curve_i*>( VISU::GetServant(aCurve).in()));
+ }
}
+ myView->Repaint();
}
- myView->Repaint();
}
}
+ };
+
+
+ void XYPlot_i::Display(PrsObject_ptr thePrsObj) {
+ ProcessVoidEvent(new TXYPlotViewEvent(myStudy,myView,thePrsObj,eDisplay));
}
- void XYPlot_i::EraseAll() {
- if(MYDEBUG) MESSAGE("XYPlot_i::EraseAll");
- Mutex mt(myMutex,qApp);
- myView->EraseAll();
+
+
+ void XYPlot_i::Erase(PrsObject_ptr thePrsObj) {
+ ProcessVoidEvent(new TXYPlotViewEvent(myStudy,myView,thePrsObj,eErase));
}
+
+
void XYPlot_i::DisplayOnly(PrsObject_ptr thePrsObj) {
- if(MYDEBUG) MESSAGE("View3D_i::Display");
- Mutex mt(myMutex,qApp);
- CORBA::Object_var anObj = thePrsObj;
- // is it Curve ?
- if(Curve_i* aCurve = dynamic_cast<Curve_i*>(VISU::GetServant(anObj))) {
- UpdatePlot2d(myView,eDisplayOnly,aCurve);
- }
- // is it Container ?
- if(Container_i* aContainer = dynamic_cast<Container_i*>(VISU::GetServant(anObj))) {
- int nbCurves = aContainer->GetNbCurves();
- for ( int i = 1; i <= nbCurves; i++ ) {
- VISU::Curve_i* aCurve = aContainer->GetCurve( i );
- if ( aCurve && aCurve->IsValid() ) {
- UpdatePlot2d(myView,eDisplayOnly,aCurve);
- }
- }
- myView->Repaint();
- }
- // is it Table ?
- if(Table_i* aTable = dynamic_cast<Table_i*>(VISU::GetServant(anObj))) {
- SALOMEDS::SObject_var TableSO = myStudy->getStudyDocument()->FindObjectID( aTable->GetEntry() );
- if ( !TableSO->_is_nil() ) {
- SALOMEDS::ChildIterator_var Iter = myStudy->getStudyDocument()->NewChildIterator( TableSO );
- for ( ; Iter->More(); Iter->Next() ) {
- CORBA::Object_var childObject = VISU::SObjectToObject( Iter->Value() );
- if( !CORBA::is_nil( childObject ) ) {
- CORBA::Object_ptr aCurve = VISU::Curve::_narrow( childObject );
- if( !CORBA::is_nil( aCurve ) )
- UpdatePlot2d(myView,eDisplayOnly,dynamic_cast<VISU::Curve_i*>( VISU::GetServant( aCurve ) ));
- }
- }
- myView->Repaint();
- }
- }
+ ProcessVoidEvent(new TXYPlotViewEvent(myStudy,myView,thePrsObj,eDisplayOnly));
+ }
+
+
+ void XYPlot_i::EraseAll() {
+ ProcessVoidEvent(new TVoidMemFunEvent<Plot2d_ViewFrame>(myView,&Plot2d_ViewFrame::EraseAll));
}
+
+
void XYPlot_i::FitAll() {
- if(MYDEBUG) MESSAGE("XYPlot_i::FitAll");
- Mutex mt(myMutex,qApp);
- myView->fitAll();
+ ProcessVoidEvent(new TVoidMemFunEvent<Plot2d_ViewFrame>(myView,&Plot2d_ViewFrame::fitAll));
}
+
+
CORBA::Boolean XYPlot_i::SavePicture(const char* theFileName) {
- if(MYDEBUG) MESSAGE("XYPlot_i::SavePicture");
- Mutex mt(myMutex,qApp);
- if (!myView->getViewWidget())
- return false;
-
- QApplication::setOverrideCursor( Qt::waitCursor );
- QPixmap px = QPixmap::grabWindow(myView->getViewWidget()->winId());
- QApplication::restoreOverrideCursor();
-
- if (!QString(theFileName).isNull()) {
- QApplication::setOverrideCursor( Qt::waitCursor );
- QString fmt = QAD_Tools::getFileExtensionFromPath(theFileName).upper();
- if (fmt.isEmpty())
- fmt = QString("BMP"); // default format
- if (fmt == "JPG")
- fmt = "JPEG";
- bool bOk = px.save(theFileName, fmt.latin1());
- QApplication::restoreOverrideCursor();
- return bOk;
- }
- return false;
+ return ProcessEvent(new TSavePictureEvent(myView->getViewWidget(),theFileName));
}
+
//===========================================================================
TableView_i::TableView_i(SALOMEDS::Study_ptr theStudy) : View_i(theStudy) {}
- Storable* TableView_i::Create(VISU::Table_var theTable){
+ Storable* TableView_i::Create(VISU::Table_ptr theTable){
if(MYDEBUG) MESSAGE("TableView_i::Create - "<<(!theTable->_is_nil()));
- Mutex mt(myMutex,qApp);
if(!theTable->_is_nil()){
- VISU::Table_i* table = dynamic_cast<VISU::Table_i*>(VISU::GetServant(theTable.in()));
+ VISU::Table_i* table = dynamic_cast<VISU::Table_i*>(VISU::GetServant(theTable).in());
if(MYDEBUG) MESSAGE("TableView_i::Create - dynamic_cast = "<<table);
if(table != NULL) {
SALOMEDS::SObject_var aSObject = myStudy->getStudyDocument()->FindObjectID(table->GetObjectEntry());
if(!aSObject->_is_nil()) {
- myView = new SALOMEGUI_TableDlg(QAD_Application::getDesktop(),aSObject);
+ myView = new SALOMEGUI_TableDlg(QAD_Application::getDesktop(),
+ aSObject,
+ false,
+ SALOMEGUI_TableDlg::ttAuto,
+ Qt::Vertical);
myView->show();
- myName = (myView->caption()).latin1();
return this;
}
}
}
return NULL;
}
+
+
+ TableView_i::~TableView_i() {
+ if(MYDEBUG) MESSAGE("TableView_i::~TableView_i");
+ delete myView;
+ }
+
+
void TableView_i::SetTitle(const char* theTitle){
- if(MYDEBUG) MESSAGE("TableView_i::SetTitle");
- Mutex mt(myMutex,qApp);
- myName = theTitle;
- myView->setCaption(myName.c_str());
+ ProcessVoidEvent(new TVoidMemFun1ArgEvent<SALOMEGUI_TableDlg,const QString&,QString>
+ (myView,&SALOMEGUI_TableDlg::setCaption,QString(theTitle)));
}
+
+
char* TableView_i::GetTitle() {
- if(MYDEBUG) MESSAGE("TableView_i::GetTitle");
- Mutex mt(myMutex,qApp);
- myName = (myView->caption()).latin1();
- return CORBA::string_dup(myName.c_str());
+ return CORBA::string_dup(myView->caption().latin1());
}
+
+
void TableView_i::Close(){
- if(MYDEBUG) MESSAGE("TableView_i::Close");
- Mutex mt(myMutex,qApp);
myView->close();
}
- TableView_i::~TableView_i() {
- if(MYDEBUG) MESSAGE("TableView_i::~TableView_i");
- Mutex mt(myMutex,qApp);
- Close();
- delete myView;
- }
+
+
//===========================================================================
int View3D_i::myNbViewParams = 0;
const string View3D_i::myComment = "VIEW3D";
const char* View3D_i::GetComment() const { return myComment.c_str();}
- const char* View3D_i::GenerateViewParamsName() {
+ QString View3D_i::GenerateViewParamsName() {
return VISU::GenerateName( "ViewParams", ++myNbViewParams );
}
Storable* View3D_i::Create(int theNew){
if(MYDEBUG) MESSAGE("View3D_i::Create");
- Mutex mt(myMutex,qApp);
if(theNew)
myStudyFrame = myStudy->newWindow3d("",VIEW_VTK);
else
myStudyFrame = myStudy->getActiveStudyFrame();
-
- VTKViewer_NonIsometricTransform *NITr = GetViewFrame(myStudyFrame)->getNonIsometricTransform();
- myScaleFactor[0] = NITr->GetCoeff(AxisFunction::XAxis);
- myScaleFactor[1] = NITr->GetCoeff(AxisFunction::YAxis);
- myScaleFactor[2] = NITr->GetCoeff(AxisFunction::ZAxis);
-
- return Build(false);
- }
-
- Storable* View3D_i::Build(int theRestoring){
- if(MYDEBUG) MESSAGE("View3D_i::Build");
- if(theRestoring){
- myStudyFrame->setTitle(myName.c_str());
- SetBackground(myColor);
- SetPointOfView(myPosition);
- SetViewUp(myViewUp);
- SetFocalPoint(myFocalPnt);
- SetParallelScale(myParallelScale);
- ScaleView(VISU::View3D::XAxis,myScaleFactor[0]);
- ScaleView(VISU::View3D::YAxis,myScaleFactor[1]);
- ScaleView(VISU::View3D::ZAxis,myScaleFactor[2]);
- RepaintView(myStudyFrame);
- }else{
- Update();
- /*
- SALOMEDS::SComponent_var aSComponent = FindOrCreateVisuComponent(myStudyDocument);
- CORBA::String_var aSComponentEntry = aSComponent->GetID(), anIOR(GetID());
- string anEntry = CreateAttributes(myStudyDocument,aSComponentEntry,"",anIOR,myName.c_str(),"",GetComment());
- */
- }
return this;
}
+
void View3D_i::Update(){
- if(MYDEBUG) MESSAGE("View3D_i::Update");
- Mutex mt(myMutex,qApp);
- myName = myStudyFrame->title();
- myColor = GetBackground();
- GetCamera(myStudyFrame)->GetPosition(myPosition);
- GetCamera(myStudyFrame)->GetViewUp(myViewUp);
- GetCamera(myStudyFrame)->GetFocalPoint(myFocalPnt);
- myParallelScale = GetCamera(myStudyFrame)->GetParallelScale();
- RepaintView(myStudyFrame);
-
- VTKViewer_NonIsometricTransform *NITr = GetViewFrame(myStudyFrame)->getNonIsometricTransform();
- myScaleFactor[0] = NITr->GetCoeff(AxisFunction::XAxis);
- myScaleFactor[1] = NITr->GetCoeff(AxisFunction::YAxis);
- myScaleFactor[2] = NITr->GetCoeff(AxisFunction::ZAxis);
+ class TEvent: public SALOME_Event{
+ QAD_StudyFrame* myStudyFrame;
+ public:
+ TEvent(QAD_StudyFrame* theStudyFrame):
+ myStudyFrame(theStudyFrame)
+ {}
+ virtual void Execute(){
+ VTKViewer_ViewFrame* vf = GetViewFrame(myStudyFrame);
+ vtkRenderer* Renderer = vf->getRenderer();
+ vtkActorCollection* theActors = Renderer->GetActors();
+ theActors->InitTraversal();
+ while(vtkActor *anAct = theActors->GetNextActor()){
+ if(VISU_Actor* anActor = dynamic_cast<VISU_Actor*>(anAct)){
+ VISU::Prs3d_i* aPrs3d = anActor->GetPrs3d();
+ if(anActor->GetVisibility() && aPrs3d){
+ aPrs3d->Update();
+ aPrs3d->UpdateActor(anActor);
+ }
+ }
+ }
+ RepaintView(myStudyFrame);
+ }
+ };
+ ProcessVoidEvent(new TEvent(myStudyFrame));
}
+
CORBA::Boolean View3D_i::SavePicture(const char* theFileName) {
- if(MYDEBUG) MESSAGE("View3D_i::SavePicture");
- Mutex mt(myMutex,qApp);
- if (!myStudyFrame->getRightFrame()->getViewFrame()->getViewWidget())
- return false;
-
- QApplication::setOverrideCursor( Qt::waitCursor );
- QPixmap px = QPixmap::grabWindow(myStudyFrame->getRightFrame()->getViewFrame()->getViewWidget()->winId());
- QApplication::restoreOverrideCursor();
-
- if (!QString(theFileName).isNull()) {
- QApplication::setOverrideCursor( Qt::waitCursor );
- QString fmt = QAD_Tools::getFileExtensionFromPath(theFileName).upper();
- if (fmt.isEmpty())
- fmt = QString("BMP"); // default format
- if (fmt == "JPG")
- fmt = "JPEG";
- bool bOk = px.save(theFileName, fmt.latin1());
- QApplication::restoreOverrideCursor();
- return bOk;
- }
- return false;
+ return ProcessEvent(new TSavePictureEvent(myStudyFrame->getRightFrame()->getViewFrame()->getViewWidget(),theFileName));
}
- CORBA::Boolean View3D_i::SaveViewParams(const char* theName){
- if(MYDEBUG) MESSAGE("View3D_i::SaveViewPoint");
- Mutex mt(myMutex,qApp);
+
+ bool View3D_i::SaveViewParams(QAD_StudyFrame* theStudyFrame, const char* theName){
+ QAD_Study* aStudy = theStudyFrame->getStudy();
+ SALOMEDS::Study_var aStudyDoc = aStudy->getStudyDocument();
if ( theName ) {
SALOMEDS::Study::ListOfSObject_var aList =
- myStudy->getStudyDocument()->FindObjectByName(theName,"VISU");
+ aStudyDoc->FindObjectByName(theName,"VISU");
SALOMEDS::GenericAttribute_var anAttr;
int iEnd = aList->length();
for(int i = 0; i < iEnd; i++){
SALOMEDS::SObject_var anObj = aList[i];
CORBA::String_var aString = anObj->GetID();
string anEntry(aString);
- if(MYDEBUG) MESSAGE("View3D_i::SaveViewPoint - anEntry = "<<anEntry);
+ if(MYDEBUG) MESSAGE("View3D_i::SaveViewParams - anEntry = "<<anEntry);
if(anObj->FindAttribute(anAttr, "AttributeComment")){
SALOMEDS::AttributeComment_var aCmnt = SALOMEDS::AttributeComment::_narrow(anAttr);
aString = aCmnt->Value();
string aComm(aString);
if(MYDEBUG) MESSAGE("View3D_i::SaveViewPoint - aComm = "<<aComm);
if(aComm.compare(View3D_i::myComment) >= 0){
- aCmnt->SetValue(ToString().c_str());
- return 1;
+ aCmnt->SetValue(ToString(theStudyFrame).c_str());
+ return true;
}
}
}
}
- QString newName;
- if ( theName )
- newName = QString( theName );
- else
- newName = QString( GenerateViewParamsName() );
- SALOMEDS::SComponent_var aSComponent =
- FindOrCreateVisuComponent(myStudy->getStudyDocument());
- CORBA::String_var aSComponentEntry = aSComponent->GetID(), anIOR(GetID());
- string anEntry = CreateAttributes(myStudy->getStudyDocument(),aSComponentEntry,"","",newName.latin1(),"",ToString().c_str());
- return 1;
+ SALOMEDS::SComponent_var aSComponent = FindOrCreateVisuComponent(aStudyDoc);
+ CORBA::String_var aSComponentEntry = aSComponent->GetID();
+ string anEntry = CreateAttributes(aStudyDoc,aSComponentEntry.in(),"","",theName,"",ToString(theStudyFrame).c_str());
+ return true;
+ }
+ CORBA::Boolean View3D_i::SaveViewParams(const char* theName){
+ return SaveViewParams(myStudyFrame,theName);
}
- CORBA::Boolean View3D_i::RestoreViewParams(const char* theName){
- if(MYDEBUG) MESSAGE("View3D_i::RestoreViewPoint - "<<theName);
- Mutex mt(myMutex,qApp);
+
+ bool View3D_i::RestoreViewParams(QAD_StudyFrame* theStudyFrame, const char* theName){
SALOMEDS::Study::ListOfSObject_var aList =
- myStudy->getStudyDocument()->FindObjectByName(theName,"VISU");
+ theStudyFrame->getStudy()->getStudyDocument()->FindObjectByName(theName,"VISU");
SALOMEDS::GenericAttribute_var anAttr;
int iEnd = aList->length();
if(MYDEBUG) MESSAGE("View3D_i::RestoreViewPoint - iEnd = "<<iEnd);
Storable::StrToMap(strIn,aMap);
if ( Storable::FindValue( aMap,"myComment").compare( View3D_i::myComment.c_str() ) >= 0 ) {
if(MYDEBUG) MESSAGE("View3D_i::RestoreViewPoint - aComm = "<<strIn);
- return Restore( aMap ) != NULL;
+ Restore(theStudyFrame,aMap);
+ return true;
}
}
}
- return 0;
+ return false;
}
-#define RESTORE(MAP,ARG,FMT) ARG = VISU::Storable::FindValue(MAP,#ARG).FMT()
- Storable* View3D_i::Restore(const Storable::TRestoringMap& theMap) throw(std::logic_error&) {
- if(MYDEBUG) MESSAGE("View3D_i::Restore");
- //RESTORE(theMap,myName,latin1);
-
- RESTORE(theMap,myColor.R,toDouble);
- RESTORE(theMap,myColor.G,toDouble);
- RESTORE(theMap,myColor.B,toDouble);
-
- RESTORE(theMap,myPosition[0],toDouble);
- RESTORE(theMap,myPosition[1],toDouble);
- RESTORE(theMap,myPosition[2],toDouble);
+ class TRestoreViewParamsEvent: public SALOME_Event{
+ QAD_StudyFrame* myStudyFrame;
+ const char* myName;
+ public:
+ TRestoreViewParamsEvent(QAD_StudyFrame* theStudyFrame,
+ const char* theName):
+ myStudyFrame(theStudyFrame),
+ myName(theName)
+ {}
+ virtual void Execute(){
+ myResult = View3D_i::RestoreViewParams(myStudyFrame,myName);
+ }
+ typedef CORBA::Boolean TResult;
+ TResult myResult;
+ };
+
+ CORBA::Boolean View3D_i::RestoreViewParams(const char* theName){
+ return ProcessEvent(new TRestoreViewParamsEvent(myStudyFrame,theName));
+ }
+
+
+ void View3D_i::Restore(QAD_StudyFrame* theStudyFrame, const Storable::TRestoringMap& theMap){
+ SALOMEDS::Color aColor;
+ aColor.R = VISU::Storable::FindValue(theMap,"myColor.R").toDouble();
+ aColor.G = VISU::Storable::FindValue(theMap,"myColor.G").toDouble();
+ aColor.B = VISU::Storable::FindValue(theMap,"myColor.B").toDouble();
- RESTORE(theMap,myFocalPnt[0],toDouble);
- RESTORE(theMap,myFocalPnt[1],toDouble);
- RESTORE(theMap,myFocalPnt[2],toDouble);
+ double aPosition[3];
+ aPosition[0] = VISU::Storable::FindValue(theMap,"myPosition[0]").toDouble();
+ aPosition[1] = VISU::Storable::FindValue(theMap,"myPosition[1]").toDouble();
+ aPosition[2] = VISU::Storable::FindValue(theMap,"myPosition[2]").toDouble();
- RESTORE(theMap,myViewUp[0],toDouble);
- RESTORE(theMap,myViewUp[1],toDouble);
- RESTORE(theMap,myViewUp[2],toDouble);
+ double aFocalPnt[3];
+ aFocalPnt[0] = VISU::Storable::FindValue(theMap,"myFocalPnt[0]").toDouble();
+ aFocalPnt[1] = VISU::Storable::FindValue(theMap,"myFocalPnt[1]").toDouble();
+ aFocalPnt[2] = VISU::Storable::FindValue(theMap,"myFocalPnt[2]").toDouble();
- RESTORE(theMap,myParallelScale,toDouble);
+ double aViewUp[3];
+ aViewUp[0] = VISU::Storable::FindValue(theMap,"myViewUp[0]").toDouble();
+ aViewUp[1] = VISU::Storable::FindValue(theMap,"myViewUp[1]").toDouble();
+ aViewUp[2] = VISU::Storable::FindValue(theMap,"myViewUp[2]").toDouble();
- RESTORE(theMap,myScaleFactor[0],toDouble);
- RESTORE(theMap,myScaleFactor[1],toDouble);
- RESTORE(theMap,myScaleFactor[2],toDouble);
+ double aParallelScale = VISU::Storable::FindValue(theMap,"myParallelScale").toDouble();
+
+ double aScaleFactor[3];
+ aScaleFactor[0] = VISU::Storable::FindValue(theMap,"myScaleFactor[0]").toDouble();
+ aScaleFactor[1] = VISU::Storable::FindValue(theMap,"myScaleFactor[1]").toDouble();
+ aScaleFactor[2] = VISU::Storable::FindValue(theMap,"myScaleFactor[2]").toDouble();
- return Build(true);
+ SetBackground(theStudyFrame,aColor);
+ SetPointOfView(theStudyFrame,aPosition);
+ SetViewUp(theStudyFrame,aViewUp);
+ SetFocalPoint(theStudyFrame,aFocalPnt);
+ SetParallelScale(theStudyFrame,aParallelScale);
+ ScaleView(theStudyFrame,VISU::View3D::XAxis,aScaleFactor[0]);
+ ScaleView(theStudyFrame,VISU::View3D::YAxis,aScaleFactor[1]);
+ ScaleView(theStudyFrame,VISU::View3D::ZAxis,aScaleFactor[2]);
}
-#undef RESTORE
- void View3D_i::ToStream(ostrstream& theStr) {
- if(MYDEBUG) MESSAGE(GetComment());
- Update();
+ string View3D_i::ToString(QAD_StudyFrame* theStudyFrame){
+ ostringstream strOut;
+ Storable::DataToStream( strOut, "myComment", myComment.c_str() );
+ ToStream(theStudyFrame,strOut);
+ strOut<<ends;
+ if(MYDEBUG) MESSAGE("View3D_i::ToString - "<<strOut.str());
+ return strOut.str();
+ }
+ void View3D_i::ToStream(QAD_StudyFrame* theStudyFrame, std::ostringstream& theStr) {
Storable::DataToStream(theStr,"myType",VISU::TVIEW3D);
+
+ float backint[3];
+ GetRenderer(theStudyFrame)->GetBackground(backint);
+ Storable::DataToStream(theStr,"myColor.R",backint[0]);
+ Storable::DataToStream(theStr,"myColor.G",backint[1]);
+ Storable::DataToStream(theStr,"myColor.B",backint[2]);
+
+ double aPosition[3];
+ GetPointOfView(theStudyFrame,aPosition);
+ Storable::DataToStream(theStr,"myPosition[0]",aPosition[0]);
+ Storable::DataToStream(theStr,"myPosition[1]",aPosition[1]);
+ Storable::DataToStream(theStr,"myPosition[2]",aPosition[2]);
+
+ double aFocalPnt[3];
+ GetFocalPoint(theStudyFrame,aFocalPnt);
+ Storable::DataToStream(theStr,"myFocalPnt[0]",aFocalPnt[0]);
+ Storable::DataToStream(theStr,"myFocalPnt[1]",aFocalPnt[1]);
+ Storable::DataToStream(theStr,"myFocalPnt[2]",aFocalPnt[2]);
+
+ double aViewUp[3];
+ GetCamera(theStudyFrame)->GetViewUp(aViewUp);
+ Storable::DataToStream(theStr,"myViewUp[0]",aViewUp[0]);
+ Storable::DataToStream(theStr,"myViewUp[1]",aViewUp[1]);
+ Storable::DataToStream(theStr,"myViewUp[2]",aViewUp[2]);
+
+ Storable::DataToStream(theStr,"myParallelScale",GetParallelScale(theStudyFrame));
+
+ double aScaleFactor[3];
+ GetViewFrame(theStudyFrame)->GetScale(aScaleFactor);
+ Storable::DataToStream(theStr,"myScaleFactor[0]",aScaleFactor[0]);
+ Storable::DataToStream(theStr,"myScaleFactor[1]",aScaleFactor[1]);
+ Storable::DataToStream(theStr,"myScaleFactor[2]",aScaleFactor[2]);
+ }
+ void View3D_i::ToStream(std::ostringstream& theStr) {
+ ToStream(myStudyFrame,theStr);
+ }
- Storable::DataToStream(theStr,"myColor.R",myColor.R);
- Storable::DataToStream(theStr,"myColor.G",myColor.G);
- Storable::DataToStream(theStr,"myColor.B",myColor.B);
- Storable::DataToStream(theStr,"myPosition[0]",myPosition[0]);
- Storable::DataToStream(theStr,"myPosition[1]",myPosition[1]);
- Storable::DataToStream(theStr,"myPosition[2]",myPosition[2]);
+ void View3D_i::Close(){
+ myStudyFrame->close();
+ }
- Storable::DataToStream(theStr,"myFocalPnt[0]",myFocalPnt[0]);
- Storable::DataToStream(theStr,"myFocalPnt[1]",myFocalPnt[1]);
- Storable::DataToStream(theStr,"myFocalPnt[2]",myFocalPnt[2]);
+ View3D_i::~View3D_i() {
+ if(MYDEBUG) MESSAGE("View3D_i::~View3D_i");
+ }
- Storable::DataToStream(theStr,"myViewUp[0]",myViewUp[0]);
- Storable::DataToStream(theStr,"myViewUp[1]",myViewUp[1]);
- Storable::DataToStream(theStr,"myViewUp[2]",myViewUp[2]);
+ //-------------------- View interface --------------------
- Storable::DataToStream(theStr,"myParallelScale",myParallelScale);
+ void View_i::ShowPart( VISU::View::ViewRepresentation ViewRepr, CORBA::Boolean state ) {
+ ProcessVoidEvent( new TSetViewRepresentation( this, ViewRepr, state ) );
+ Update();
+ }
- Storable::DataToStream(theStr,"myScaleFactor[0]",myScaleFactor[0]);
- Storable::DataToStream(theStr,"myScaleFactor[1]",myScaleFactor[1]);
- Storable::DataToStream(theStr,"myScaleFactor[2]",myScaleFactor[2]);
+ CORBA::Boolean View_i::IsPartShown( VISU::View::ViewRepresentation Part )
+ {
+ return ProcessEvent( new TGetViewRepresentation( this, Part ) );
}
- Storable* VISU::View3DRestore(SALOMEDS::SComponent_var& theSComponent, SALOMEDS::Study_var& theStudy,
- const char* thePrefix, const Storable::TRestoringMap& theMap)
- {
- try{
- View3D_i* pView3D = new View3D_i(theStudy);
- return pView3D->Restore(theMap);
- }catch(std::logic_error& exc){
- MESSAGE("Follow exception was accured :\n"<<exc.what());
- }catch(...){
- MESSAGE("Unknown exception was accured!");
- }
- return NULL;
- }
+ void View_i::SetViewWidth(CORBA::Long Width){
+ ProcessVoidEvent( new TSetViewWidthHeight( this, Width, true ) );
+ }
- void View3D_i::Close(){
- if(MYDEBUG) MESSAGE("View3D_i::Close");
- Mutex mt(myMutex,qApp);
- myStudyFrame->close();
+ void View_i::SetViewHeight(CORBA::Long Height){
+ ProcessVoidEvent( new TSetViewWidthHeight( this, Height, false ) );
+ }
+
+ CORBA::Long View_i::GetViewWidth()
+ {
+ return ProcessEvent( new TGetViewWidthHeight( this, true ) );
}
- View3D_i::~View3D_i() {
- if(MYDEBUG) MESSAGE("View3D_i::~View3D_i");
- Mutex mt(myMutex,qApp);
- myStudyFrame->close();
+ CORBA::Long View_i::GetViewHeight()
+ {
+ return ProcessEvent( new TGetViewWidthHeight( this, false ) );
}
-
- //-------------------- View interface --------------------
+
+ void View_i::SetViewPositionHorizontal( VISU::View::ViewPosition ViewPosHor ){
+ ProcessVoidEvent( new TSetViewPositionHorizontal( this, ViewPosHor ) );
+ }
+
+ void View_i::SetViewPositionVertical( VISU::View::ViewPosition ViewPosVer ){
+ ProcessVoidEvent( new TSetViewPositionVertical( this, ViewPosVer ) );
+ }
+
+ void View_i::SetRelativePosition( CORBA::Double x, CORBA::Double y )
+ {
+ ProcessVoidEvent( new TSetRelativePosition( this, x, y ) );
+ }
+
+ void View_i::SetRelativeSize( CORBA::Double x, CORBA::Double y )
+ {
+ ProcessVoidEvent( new TSetRelativeSize( this, x, y ) );
+ }
+
+
+
+
void View3D_i::SetTitle(const char* theTitle){
- if(MYDEBUG) MESSAGE("View3D_i::SetTitle");
- Mutex mt(myMutex,qApp);
- myName = theTitle;
- /*
- SALOMEDS::SObject_var aSObject =
- myStudy->getStudyDocument()->FindObjectID(GetEntry());
- SALOMEDS::GenericAttribute_var anAttr;
- if(aSObject->FindAttribute(anAttr,"AttributeName")){
- SALOMEDS::AttributeName_ptr aName = SALOMEDS::AttributeName::_narrow(anAttr);
- aName->SetValue(myName.c_str());
- }
- */
- myStudyFrame->setTitle(myName.c_str());
+ ProcessVoidEvent(new TVoidMemFun1ArgEvent<QAD_StudyFrame,const QString&,QString>
+ (myStudyFrame,&QAD_StudyFrame::setTitle,QString(theTitle)));
}
char* View3D_i::GetTitle() {
- if(MYDEBUG) MESSAGE("View3D_i::GetTitle");
- Mutex mt(myMutex,qApp);
- myName = myStudyFrame->title();
- return CORBA::string_dup(myName.c_str());
+ return CORBA::string_dup(myStudyFrame->title().latin1());
+ }
+
+
+ void View3D_i::SetBackground(QAD_StudyFrame* theStudyFrame, const SALOMEDS::Color& theColor) {
+ int aColor[3];
+ aColor[0] = int(255.0*theColor.R);
+ aColor[1] = int(255.0*theColor.G);
+ aColor[2] = int(255.0*theColor.B);
+ QColor aNewColor(aColor[0],aColor[1],aColor[2]);
+ GetViewFrame(theStudyFrame)->setBackgroundColor(aNewColor);
}
void View3D_i::SetBackground(const SALOMEDS::Color& theColor) {
- if(MYDEBUG) MESSAGE("View3D_i::SetBackground");
- Mutex mt(myMutex,qApp);
- myColor.R = theColor.R;
- myColor.G = theColor.G;
- myColor.B = theColor.B;
- QColor aColor(255.0*myColor.R,255.0*myColor.G,255.0*myColor.B);
- GetViewFrame(myStudyFrame)->setBackgroundColor(aColor);
+ ProcessVoidEvent(new TSetBackgroundEvent<VTKViewer_ViewFrame>(GetViewFrame(myStudyFrame),theColor));
+ }
+
+
+ SALOMEDS::Color View3D_i::GetBackground(QAD_StudyFrame* theStudyFrame) {
+ SALOMEDS::Color aColor;
+ float backint[3];
+ GetRenderer(theStudyFrame)->GetBackground(backint);
+ aColor.R = backint[0]; aColor.G = backint[1]; aColor.B = backint[2];
+ return aColor;
}
SALOMEDS::Color View3D_i::GetBackground() {
- if(MYDEBUG) MESSAGE("View3D_i::GetBackground");
- Mutex mt(myMutex,qApp);
- float backint[3];
- GetRenderer(myStudyFrame)->GetBackground(backint);
- myColor.R = backint[0];
- myColor.G = backint[1];
- myColor.B = backint[2];
- return myColor;
+ return GetBackground(myStudyFrame);
}
+
+
void View3D_i::Minimize() {
- if(MYDEBUG) MESSAGE("View3D_i::Minimize");
- Mutex mt(myMutex,qApp);
- myStudyFrame->showMinimized();
+ ProcessVoidEvent(new TFrameActionEvent(myStudyFrame,&QAD_StudyFrame::showMinimized));
}
void View3D_i::Restore() {
- if(MYDEBUG) MESSAGE("View3D_i::Restore");
- Mutex mt(myMutex,qApp);
- myStudyFrame->showNormal();
+ ProcessVoidEvent(new TFrameActionEvent(myStudyFrame, &QAD_StudyFrame::showNormal));
}
void View3D_i::Maximize() {
- if(MYDEBUG) MESSAGE("View3D_i::Maximize");
- Mutex mt(myMutex,qApp);
- myStudyFrame->showMaximized();
+ ProcessVoidEvent(new TFrameActionEvent(myStudyFrame, &QAD_StudyFrame::showMaximized));
}
+
+
//===========================================================================
+ class TUpdateViewerEvent: public SALOME_Event{
+ QAD_StudyFrame* myStudyFrame;
+ Prs3d_i* myPrs3d;
+ int myDisplaing;
+ public:
+ TUpdateViewerEvent(QAD_StudyFrame* theStudyFrame,
+ Prs3d_i* thePrs3d,
+ int theDisplaing):
+ myStudyFrame(theStudyFrame),
+ myPrs3d(thePrs3d),
+ myDisplaing(theDisplaing)
+ {}
+ virtual void Execute(){
+ UpdateViewer(myStudyFrame,myDisplaing,myPrs3d);
+ }
+ };
+
void View3D_i::EraseAll() {
if(MYDEBUG) MESSAGE("View3D_i::EraseAll");
- Mutex mt(myMutex,qApp);
- UpdateViewer(myStudyFrame,eEraseAll);
+ ProcessVoidEvent(new TUpdateViewerEvent(myStudyFrame,NULL,eEraseAll));
}
+
void View3D_i::DisplayAll() {
if(MYDEBUG) MESSAGE("View3D_i::DisplayAll");
- Mutex mt(myMutex,qApp);
- UpdateViewer(myStudyFrame,eDisplayAll);
+ ProcessVoidEvent(new TUpdateViewerEvent(myStudyFrame,NULL,eDisplayAll));
}
+
void View3D_i::Erase(PrsObject_ptr thePrsObj) {
if(MYDEBUG) MESSAGE("View3D_i::Erase");
- Mutex mt(myMutex,qApp);
- CORBA::Object_var anObj = thePrsObj;
- if(Prs3d_i* aPrs = dynamic_cast<Prs3d_i*>(VISU::GetServant(anObj)))
- UpdateViewer(myStudyFrame,eErase,aPrs);
+ CORBA::Object_ptr anObj = thePrsObj;
+ if(Prs3d_i* aPrs = dynamic_cast<Prs3d_i*>(VISU::GetServant(anObj).in())){
+ ProcessVoidEvent(new TUpdateViewerEvent(myStudyFrame,aPrs,eErase));
+ }
}
+
void View3D_i::Display(PrsObject_ptr thePrsObj) {
if(MYDEBUG) MESSAGE("View3D_i::Display");
- Mutex mt(myMutex,qApp);
- CORBA::Object_var anObj = thePrsObj;
- if(Prs3d_i* aPrs = dynamic_cast<Prs3d_i*>(VISU::GetServant(anObj)))
- UpdateViewer(myStudyFrame,eDisplay,aPrs);
+ CORBA::Object_ptr anObj = thePrsObj;
+ if(Prs3d_i* aPrs = dynamic_cast<Prs3d_i*>(VISU::GetServant(anObj).in())){
+ ProcessVoidEvent(new TUpdateViewerEvent(myStudyFrame,aPrs,eDisplay));
+ }
}
+
void View3D_i::DisplayOnly(PrsObject_ptr thePrsObj) {
if(MYDEBUG) MESSAGE("View3D_i::DisplayOnly");
- Mutex mt(myMutex,qApp);
- CORBA::Object_var anObj = thePrsObj;
- if(Prs3d_i* aPrs = dynamic_cast<Prs3d_i*>(VISU::GetServant(anObj)))
- UpdateViewer(myStudyFrame,eDisplayOnly,aPrs);
+ CORBA::Object_ptr anObj = thePrsObj;
+ if(Prs3d_i* aPrs = dynamic_cast<Prs3d_i*>(VISU::GetServant(anObj).in())){
+ ProcessVoidEvent(new TUpdateViewerEvent(myStudyFrame,aPrs,eDisplayOnly));
+ }
}
//-------------------- View3D interface --------------------
void View3D_i::FitAll() {
- if(MYDEBUG) MESSAGE("View3D_i::FitAll");
- Mutex mt(myMutex,qApp);
- GetViewFrame(myStudyFrame)->onViewFitAll();
+ ProcessVoidEvent(new TVoidMemFunEvent<VTKViewer_ViewFrame>(GetViewFrame(myStudyFrame),&VTKViewer_ViewFrame::onViewFitAll));
Update();
}
+
+
void View3D_i::SetView(VISU::View3D::ViewType theType) {
- if(MYDEBUG) MESSAGE("View3D_i::SetView");
- Mutex mt(myMutex,qApp);
switch(theType){
- case VISU::View3D::FRONT : GetViewFrame(myStudyFrame)->onViewFront(); break;
- case VISU::View3D::BACK : GetViewFrame(myStudyFrame)->onViewBack(); break;
- case VISU::View3D::LEFT : GetViewFrame(myStudyFrame)->onViewLeft(); break;
- case VISU::View3D::RIGHT : GetViewFrame(myStudyFrame)->onViewRight(); break;
- case VISU::View3D::TOP : GetViewFrame(myStudyFrame)->onViewTop(); break;
- case VISU::View3D::BOTTOM : GetViewFrame(myStudyFrame)->onViewBottom(); break;
+ case VISU::View3D::FRONT :
+ ProcessVoidEvent(new TVoidMemFunEvent<VTKViewer_ViewFrame>(GetViewFrame(myStudyFrame),&VTKViewer_ViewFrame::onViewFront));
+ break;
+ case VISU::View3D::BACK :
+ ProcessVoidEvent(new TVoidMemFunEvent<VTKViewer_ViewFrame>(GetViewFrame(myStudyFrame),&VTKViewer_ViewFrame::onViewBack));
+ break;
+ case VISU::View3D::LEFT :
+ ProcessVoidEvent(new TVoidMemFunEvent<VTKViewer_ViewFrame>(GetViewFrame(myStudyFrame),&VTKViewer_ViewFrame::onViewLeft));
+ break;
+ case VISU::View3D::RIGHT :
+ ProcessVoidEvent(new TVoidMemFunEvent<VTKViewer_ViewFrame>(GetViewFrame(myStudyFrame),&VTKViewer_ViewFrame::onViewRight));
+ break;
+ case VISU::View3D::TOP :
+ ProcessVoidEvent(new TVoidMemFunEvent<VTKViewer_ViewFrame>(GetViewFrame(myStudyFrame),&VTKViewer_ViewFrame::onViewTop));
+ break;
+ case VISU::View3D::BOTTOM :
+ ProcessVoidEvent(new TVoidMemFunEvent<VTKViewer_ViewFrame>(GetViewFrame(myStudyFrame),&VTKViewer_ViewFrame::onViewBottom));
+ break;
}
Update();
}
- void View3D_i::SetPointOfView(const VISU::View3D::XYZ theCoord) {
+
+ class TSet3DViewParamEvent: public SALOME_Event{
+ public:
+ typedef void (*TFun)(QAD_StudyFrame* theStudyFrame, const CORBA::Double theParam[3]);
+ TSet3DViewParamEvent(TFun theFun,
+ QAD_StudyFrame* theStudyFrame,
+ const CORBA::Double theParam[3]):
+ myFun(theFun),
+ myStudyFrame(theStudyFrame),
+ myParam(theParam)
+ {}
+ virtual void Execute(){
+ myFun(myStudyFrame,myParam);
+ }
+ private:
+ TFun myFun;
+ QAD_StudyFrame* myStudyFrame;
+ const CORBA::Double* myParam;
+ };
+
+
+ void View3D_i::SetPointOfView(QAD_StudyFrame* theStudyFrame, const CORBA::Double thePosition[3]) {
+ GetCamera(theStudyFrame)->SetPosition(thePosition);
+ }
+ void View3D_i::SetPointOfView(const VISU::View3D::XYZ thePosition) {
if(MYDEBUG) MESSAGE("View3D_i::SetPointOfView");
- Mutex mt(myMutex,qApp);
- VISU::View3D::XYZ_copy(myPosition,theCoord);
- GetCamera(myStudyFrame)->SetPosition(myPosition);
+ ProcessVoidEvent(new TSet3DViewParamEvent(&SetPointOfView,myStudyFrame,thePosition));
+ }
+
+
+ void View3D_i::GetPointOfView(QAD_StudyFrame* theStudyFrame, CORBA::Double thePosition[3]) {
+ GetCamera(theStudyFrame)->GetPosition(thePosition);
}
VISU::View3D::XYZ_slice* View3D_i::GetPointOfView() {
if(MYDEBUG) MESSAGE("View3D_i::GetPointOfView");
- Mutex mt(myMutex,qApp);
- GetCamera(myStudyFrame)->GetPosition(myPosition);
- return VISU::View3D::XYZ_dup(myPosition);
+ CORBA::Double aPosition[3];
+ GetPointOfView(myStudyFrame,aPosition);
+ return VISU::View3D::XYZ_dup(aPosition);
}
- void View3D_i::SetViewUp(const VISU::View3D::XYZ theDir) {
+
+ void View3D_i::SetViewUp(QAD_StudyFrame* theStudyFrame, const CORBA::Double theViewUp[3]) {
+ GetCamera(theStudyFrame)->SetViewUp(theViewUp);
+ }
+ void View3D_i::SetViewUp(const VISU::View3D::XYZ theViewUp) {
if(MYDEBUG) MESSAGE("View3D_i::SetViewUp");
- Mutex mt(myMutex,qApp);
- VISU::View3D::XYZ_copy(myViewUp,theDir);
- GetCamera(myStudyFrame)->SetViewUp(myViewUp);
+ ProcessVoidEvent(new TSet3DViewParamEvent(&SetViewUp,myStudyFrame,theViewUp));
+ }
+
+
+ void View3D_i::GetViewUp(QAD_StudyFrame* theStudyFrame, CORBA::Double theViewUp[3]) {
+ GetCamera(theStudyFrame)->GetViewUp(theViewUp);
}
VISU::View3D::XYZ_slice* View3D_i::GetViewUp() {
if(MYDEBUG) MESSAGE("View3D_i::GetViewUp");
- Mutex mt(myMutex,qApp);
- GetCamera(myStudyFrame)->GetViewUp(myViewUp);
- return VISU::View3D::XYZ_dup(myViewUp);
+ CORBA::Double aViewUp[3];
+ GetCamera(myStudyFrame)->GetViewUp(aViewUp);
+ return VISU::View3D::XYZ_dup(aViewUp);
}
+
+ void View3D_i::SetFocalPoint(QAD_StudyFrame* theStudyFrame, const CORBA::Double theFocalPnt[3]) {
+ GetCamera(theStudyFrame)->SetFocalPoint(theFocalPnt);
+ }
void View3D_i::SetFocalPoint(const VISU::View3D::XYZ theCoord) {
if(MYDEBUG) MESSAGE("View3D_i::SetFocalPoint");
- Mutex mt(myMutex,qApp);
- VISU::View3D::XYZ_copy(myFocalPnt,theCoord);
- GetCamera(myStudyFrame)->SetFocalPoint(myFocalPnt);
+ ProcessVoidEvent(new TSet3DViewParamEvent(&SetFocalPoint,myStudyFrame,theCoord));
+ }
+
+
+ void View3D_i::GetFocalPoint(QAD_StudyFrame* theStudyFrame, CORBA::Double theFocalPnt[3]) {
+ GetCamera(theStudyFrame)->GetFocalPoint(theFocalPnt);
}
VISU::View3D::XYZ_slice* View3D_i::GetFocalPoint() {
if(MYDEBUG) MESSAGE("View3D_i::GetFocalPoint");
- Mutex mt(myMutex,qApp);
- GetCamera(myStudyFrame)->GetFocalPoint(myFocalPnt);
- return VISU::View3D::XYZ_dup(myFocalPnt);
+ CORBA::Double aFocalPnt[3];
+ GetFocalPoint(myStudyFrame,aFocalPnt);
+ return VISU::View3D::XYZ_dup(aFocalPnt);
}
+
+ class TSetViewParamEvent: public SALOME_Event{
+ public:
+ typedef void (*TFun)(QAD_StudyFrame* theStudyFrame, CORBA::Double theParam);
+ TSetViewParamEvent(TFun theFun,
+ QAD_StudyFrame* theStudyFrame,
+ CORBA::Double theParam):
+ myFun(theFun),
+ myStudyFrame(theStudyFrame),
+ myParam(theParam)
+ {}
+ virtual void Execute(){
+ myFun(myStudyFrame,myParam);
+ }
+ private:
+ TFun myFun;
+ QAD_StudyFrame* myStudyFrame;
+ CORBA::Double myParam;
+ };
+
+
+ void View3D_i::SetParallelScale(QAD_StudyFrame* theStudyFrame, CORBA::Double theScale) {
+ GetCamera(theStudyFrame)->SetParallelScale(theScale);
+ }
void View3D_i::SetParallelScale(CORBA::Double theScale) {
if(MYDEBUG) MESSAGE("View3D_i::SetParallelScale");
- Mutex mt(myMutex,qApp);
- myParallelScale = theScale;
- GetCamera(myStudyFrame)->SetParallelScale(myParallelScale);
+ ProcessVoidEvent(new TSetViewParamEvent(&SetParallelScale,myStudyFrame,theScale));
+ }
+
+
+ CORBA::Double View3D_i::GetParallelScale(QAD_StudyFrame* theStudyFrame) {
+ return GetCamera(theStudyFrame)->GetParallelScale();
}
CORBA::Double View3D_i::GetParallelScale() {
if(MYDEBUG) MESSAGE("View3D_i::GetParallelScale");
- Mutex mt(myMutex,qApp);
- return myParallelScale = GetCamera(myStudyFrame)->GetParallelScale();
+ return GetParallelScale(myStudyFrame);
}
+ void View3D_i::ScaleView(QAD_StudyFrame* theStudyFrame, VISU::View3D::Axis theAxis, CORBA::Double theParam) {
+ VTKViewer_ViewFrame* aViewFrame = GetViewFrame(theStudyFrame);
+ double aScaleFactor[3];
+ aViewFrame->GetScale(aScaleFactor);
+ aScaleFactor[theAxis] = theParam;
+ aViewFrame->SetScale(aScaleFactor);
+ }
+
+ void SetScaleView(QAD_StudyFrame* theStudyFrame, const CORBA::Double theScale[3]){
+ double aScale[3] = {theScale[0], theScale[1], theScale[2]};
+ GetViewFrame(theStudyFrame)->SetScale(aScale);
+ }
void View3D_i::ScaleView(VISU::View3D::Axis theAxis, CORBA::Double theParam) {
- Mutex mt(myMutex,qApp);
- bool changed = false;
- VTKViewer_ViewFrame* vf = GetViewFrame(myStudyFrame);
- VTKViewer_NonIsometricTransform *aTransform = vf->getNonIsometricTransform();
- static double EPS =1.0E-3;
- VTKViewer_NonIsometricTransform::Function
- aFunction = (fabs(theParam - 1.0) < EPS?
- VTKViewer_NonIsometricTransform::Identical:
- VTKViewer_NonIsometricTransform::Linear);
- AxisFunction::Axis anAxis;
- if(theAxis == VISU::View3D::XAxis){
- myScaleFactor[0] = theParam;
- anAxis = AxisFunction::XAxis;
- }else if(theAxis == VISU::View3D::YAxis){
- myScaleFactor[1] = theParam;
- anAxis = AxisFunction::YAxis;
- }else{
- myScaleFactor[2] = theParam;
- anAxis = AxisFunction::ZAxis;
- }
- if(MYDEBUG)
- MESSAGE("View3D_i::ScaleView - theParam = "<<theParam<<"; aFunction = "<<aFunction);
- vtkRenderer* Renderer = vf->getRenderer();
- vtkActorCollection* theActors = Renderer->GetActors();
- theActors->InitTraversal();
- vtkActor *actor = theActors->GetNextActor();
- while(actor){
- //SALOME_Actor* pSA = dynamic_cast<SALOME_Actor*> (actor);
- SALOME_Actor* pSA = dynamic_cast<VISU_Actor*> (actor);
- if(pSA){
- vtkPolyDataMapper* mapper = NULL;
- vtkMapper* initialMapper = pSA->GetInitialMapper();
- if ( initialMapper == NULL )
- initialMapper = actor->GetMapper();
- if ( initialMapper->IsA("vtkDataSetMapper") )
- mapper = vtkDataSetMapper::SafeDownCast( initialMapper )->GetPolyDataMapper ();
- else
- mapper = vtkPolyDataMapper::SafeDownCast( initialMapper );
- if(mapper){
- //create transformation
- if(MYDEBUG) MESSAGE("View3D_i::ScaleView - theActors->GetNextActor()");
- aTransform->SetFunction(anAxis,aFunction,theParam);
- //create Filter
- vtkTransformPolyDataFilter *aTransformFilter = vtkTransformPolyDataFilter::New();
- aTransformFilter->SetInput ( mapper->GetInput() );
- aTransformFilter->SetTransform (aTransform);
-
- //create new mapper
- vtkMapper* aIMapper = pSA->GetInitialMapper();
- if ((aIMapper != NULL) && aIMapper->IsA("vtkDataSetMapper")) {
- vtkDataSetMapper* aMapper = vtkDataSetMapper::New();
- aMapper->SetInput (aTransformFilter->GetOutput());
- aMapper->ShallowCopy ( actor->GetMapper());
- actor->SetMapper (aMapper);
- aMapper->Delete();
- } else {
- vtkPolyDataMapper *aMapper = vtkPolyDataMapper::New();
- aMapper->SetInput (aTransformFilter->GetOutput());
- aMapper->ShallowCopy ( actor->GetMapper());
- actor->SetMapper (aMapper);
- aMapper->Delete();
+ if(MYDEBUG) MESSAGE("View3D_i::ScaleView");
+ double aScale[3];
+ GetViewFrame(myStudyFrame)->GetScale(aScale);
+ aScale[theAxis] = theParam;
+ ProcessVoidEvent(new TSet3DViewParamEvent(&SetScaleView,myStudyFrame,aScale));
+ }
+ void View3D_i::RemoveScale() {
+ if(MYDEBUG) MESSAGE("View3D_i::RemoveScale");
+ double aScale[3] = {1.0, 1.0, 1.0};
+ ProcessVoidEvent(new TSet3DViewParamEvent(&SetScaleView,myStudyFrame,aScale));
+ }
+ //===========================================================================
+
+
+ VISU_Actor* GetActor(VISU::Prs3d_i* thePrs3d, VTKViewer_ViewFrame* theVTKFrame){
+ vtkActorCollection *anActColl = theVTKFrame->getRenderer()->GetActors();
+ anActColl->InitTraversal();
+ while(vtkActor *anActor = anActColl->GetNextActor())
+ if(VISU_Actor* anVISUActor = dynamic_cast<VISU_Actor*>(anActor))
+ if(thePrs3d == anVISUActor->GetPrs3d())
+ return anVISUActor->GetParent();
+ return NULL;
+ }
+
+
+ void DeletePrs3d(Prs3d_ptr thePrs3d){
+ if(Prs3d_i* aPrs3d = dynamic_cast<Prs3d_i*>(GetServant(thePrs3d).in())){
+ SALOMEDS::SObject_var aSObject = aPrs3d->GetSObject();
+ SALOMEDS::Study_var aStudyDocument = aSObject->GetStudy();
+ if(QAD_Desktop* aDesktop = QAD_Application::getDesktop()){
+ if(QAD_Study* aStudy = aDesktop->findStudy(aStudyDocument)){
+ aStudy->unHighlightAll();
+ int aNbStudyFrames = aStudy->getStudyFramesCount();
+ for(int aFrameId = 0; aFrameId < aNbStudyFrames; aFrameId++){
+ if(QAD_StudyFrame* aFrame = aStudy->getStudyFrame(aFrameId)){
+ QAD_ViewFrame* aViewFrame = aFrame->getRightFrame()->getViewFrame();
+ if(VTKViewer_ViewFrame* aVTKFrame = dynamic_cast<VTKViewer_ViewFrame*>(aViewFrame)){
+ if(VISU_Actor* anActor = VISU::GetActor(aPrs3d,aVTKFrame)){
+ aVTKFrame->RemoveActor(anActor);
+ anActor->Delete();
+ }
+ aVTKFrame->unHighlightAll();
+ }
+ }
}
- aTransformFilter->Delete();
- changed = true;
+
+ aPrs3d->RemoveFromStudy();
+ aPrs3d->Destroy();
+
+ aStudy->updateObjBrowser(); //update Object browser
}
}
- actor = theActors->GetNextActor();
}
- if(MYDEBUG)
- MESSAGE("View3D_i::ScaleView - myScaleFactor = "<<
- myScaleFactor[0]<<"; "<<myScaleFactor[1]<<"; "<<myScaleFactor[2]);
- if (changed)
- RepaintView(myStudyFrame);
}
- void View3D_i::RemoveScale() {
- if(MYDEBUG) MESSAGE("View3D_i::RemoveScale");
- Mutex mt(myMutex,qApp);
- ScaleView(VISU::View3D::XAxis,1.0);
- ScaleView(VISU::View3D::YAxis,1.0);
- ScaleView(VISU::View3D::ZAxis,1.0);
+
+
+ void VISU_Gen_i::DeleteResult(Result_ptr theResult)
+ {
+ class TEvent: public SALOME_Event{
+ Result_ptr myResult;
+ public:
+ TEvent(Result_ptr theResult): myResult(theResult) {}
+ virtual void Execute(){
+ if(Result_i* aResult = dynamic_cast<Result_i*>(GetServant(myResult).in())){
+ SALOMEDS::SObject_var aSObject = aResult->GetSObject();
+ SALOMEDS::Study_var aStudyDocument = aSObject->GetStudy();
+ SALOMEDS::ChildIterator_var aChildIter = aStudyDocument->NewChildIterator(aSObject);
+ for(aChildIter->InitEx(true); aChildIter->More(); aChildIter->Next()){
+ SALOMEDS::SObject_var aChildSObject = aChildIter->Value();
+ CORBA::Object_var aChildObj = VISU::SObjectToObject(aChildSObject);
+ if(CORBA::is_nil(aChildObj)) continue;
+ VISU::Prs3d_var aPrs3d = VISU::Prs3d::_narrow(aChildObj);
+ if(CORBA::is_nil(aPrs3d)) continue;
+ VISU::DeletePrs3d(aPrs3d);
+ }
+
+ aResult->RemoveFromStudy();
+ aResult->Destroy();
+
+ if(QAD_Desktop* aDesktop = QAD_Application::getDesktop())
+ if(QAD_Study* aStudy = aDesktop->findStudy(aStudyDocument))
+ aStudy->updateObjBrowser(); //update Object browser
+ }
+ }
+ };
+
+ ProcessVoidEvent(new TEvent(theResult));
}
- //===========================================================================
+
+
+ void VISU_Gen_i::DeletePrs3d(Prs3d_ptr thePrs3d)
+ {
+ class TEvent: public SALOME_Event{
+ Prs3d_ptr myPrs3d;
+ public:
+ TEvent(Prs3d_ptr thePrs3d): myPrs3d(thePrs3d) {}
+ virtual void Execute(){
+ VISU::DeletePrs3d(myPrs3d);
+ }
+ };
+
+ ProcessVoidEvent(new TEvent(thePrs3d));
+ }
+
}