Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members  

SIG_SimulationWidget.cpp

00001 #include "SIGEL_SlaveGUI/SIG_SimulationWidget.h"
00002 
00003 #include <qslider.h>
00004 #include <qspinbox.h>
00005 #include <qcheckbox.h>
00006 #include <qcombobox.h>
00007 #include <qpushbutton.h>
00008 #include <qmultilineedit.h>
00009 
00010 #include <cmath>
00011 
00012 #include "SIGEL_SlaveGUI/SIG_SimulationVisualisationWidget.h"
00013 
00014 namespace SIGEL_SlaveGUI
00015 {
00016 
00017   SIG_SimulationWidget::SIG_SimulationWidget( QWidget *parent=0,
00018                                               char const *name=0,
00019                                               WFlags f=0 )
00020     : SIG_SimulationWidgetBase( parent, name, f )
00021   {
00022     connect( yawSlider,
00023              SIGNAL(valueChanged(int)),
00024              SLOT(slotSetYaw(int)) );
00025 
00026     connect( pitchSlider,
00027              SIGNAL(valueChanged(int)),
00028              SLOT(slotSetPitch(int)) );
00029 
00030     connect( distanceSlider,
00031              SIGNAL(valueChanged(int)),
00032              SLOT(slotSetDistance(int)) );
00033 
00034     connect( visualisationWidget,
00035              SIGNAL(signalMouseRotation(int,int)),
00036              SLOT(slotMouseRotation(int,int)) );
00037 
00038     connect( visualisationWidget,
00039              SIGNAL(signalMouseZoom(int)),
00040              SLOT(slotMouseZoom(int)) );
00041 
00042     connect( visualisationWidget,
00043              SIGNAL(signalSimulationProgress(QTime)),
00044              SLOT(slotSetSimulationTime(QTime)) );
00045 
00046     connect( visualisationWidget,
00047              SIGNAL(signalPosition(DL_vector)),
00048              SLOT(slotSetPosition(DL_vector)) );
00049 
00050     connect( traceRobotCheckBox,
00051              SIGNAL(toggled(bool)),
00052              SLOT(slotSetTraceRobot(bool)) );
00053 
00054     QObject::connect( forwardPushButton,
00055                       SIGNAL(pressed()),
00056                       visualisationWidget,
00057                       SLOT(slotNavigateForward()) );
00058 
00059     QObject::connect( backwardPushButton,
00060                       SIGNAL(pressed()),
00061                       visualisationWidget,
00062                       SLOT(slotNavigateBackward()) );
00063 
00064     QObject::connect( rightPushButton,
00065                       SIGNAL(pressed()),
00066                       visualisationWidget,
00067                       SLOT(slotNavigateRight()) );
00068 
00069     QObject::connect( leftPushButton,
00070                       SIGNAL(pressed()),
00071                       visualisationWidget,
00072                       SLOT(slotNavigateLeft()) );
00073 
00074     QObject::connect( downPushButton,
00075                       SIGNAL(pressed()),
00076                       visualisationWidget,
00077                       SLOT(slotNavigateDown()) );
00078 
00079     QObject::connect( upPushButton,
00080                       SIGNAL(pressed()),
00081                       visualisationWidget,
00082                       SLOT(slotNavigateUp()) );
00083 
00084     QObject::connect( centerPushButton,
00085                       SIGNAL(pressed()),
00086                       visualisationWidget,
00087                       SLOT(slotNavigateCenter()) );
00088 
00089     QObject::connect( frameDelaySpinBox,
00090                       SIGNAL(valueChanged(int)),
00091                       visualisationWidget,
00092                       SLOT(slotSetFrameDelay(int)) );
00093 
00094     QObject::connect( showAncorPointsCheckBox,
00095                       SIGNAL(stateChanged(int)),
00096                       visualisationWidget,
00097                       SLOT(setShowAncorPoints(int)) );
00098 
00099     QObject::connect( renderModeComboBox,
00100                       SIGNAL(activated(const QString &)),
00101                       visualisationWidget,
00102                       SLOT(setRenderMode(const QString &)) );
00103 
00104     QObject::connect( traceRobotCheckBox,
00105                       SIGNAL(toggled(bool)),
00106                       visualisationWidget,
00107                       SLOT(slotSetTraceRobot(bool)) );
00108 
00109     QObject::connect( ambientLightingSlider,
00110                       SIGNAL(valueChanged(int)),
00111                       visualisationWidget,
00112                       SLOT(setAmbientLighting(int)) );
00113 
00114     QObject::connect( planecolorPushButton,
00115                       SIGNAL(clicked()),
00116                       visualisationWidget,
00117                       SLOT(choosePlaneColor()) );
00118 
00119     QObject::connect( showPlaneCheckBox,
00120                       SIGNAL(stateChanged(int)),
00121                       visualisationWidget,
00122                       SLOT(setShowPlane(int)) );
00123 
00124     QObject::connect( showGridCheckBox,
00125                       SIGNAL(stateChanged(int)),
00126                       visualisationWidget,
00127                       SLOT(setShowGrid(int)) );
00128 
00129     QObject::connect( showRobotPathCheckBox,
00130                       SIGNAL(stateChanged(int)),
00131                       visualisationWidget,
00132                       SLOT(setShowRobotPath(int)) );
00133   };
00134 
00135   SIG_SimulationWidget::~SIG_SimulationWidget()
00136   { };
00137 
00138   void SIG_SimulationWidget::slotSetYaw( int yaw )
00139   {
00140     visualisationWidget->setYaw( 360 - yaw );
00141   };
00142 
00143   void SIG_SimulationWidget::slotSetPitch( int pitch )
00144   {
00145     visualisationWidget->setPitch( pitch - 90 );
00146   };
00147 
00148   void SIG_SimulationWidget::slotSetDistance( int distance )
00149   {
00150     visualisationWidget->setDistance( static_cast<double>(distance) / 10 );
00151   };
00152 
00153   void SIG_SimulationWidget::slotMouseRotation( int deltaX, int deltaY )
00154   {
00155     int newYawValue = yawSlider->value() + deltaX;
00156     int newFittedYawValue = (newYawValue < 0) ? (360 - newYawValue % 360) : (newYawValue % 360);
00157     int newPitchValue = pitchSlider->value() + deltaY;
00158 
00159     yawSlider->setValue( newFittedYawValue );
00160     pitchSlider->setValue( newPitchValue );
00161   };
00162 
00163   void SIG_SimulationWidget::slotMouseZoom( int deltaY )
00164   {
00165     int newDistanceValue = distanceSlider->value() + deltaY;
00166 
00167     distanceSlider->setValue( newDistanceValue );
00168   };
00169 
00170   void SIG_SimulationWidget::slotSetSimulationTime( QTime simulationTime )
00171   {
00172     simulationTimeTextLabel->setText( simulationTime.toString() );
00173   };
00174 
00175   void SIG_SimulationWidget::visualizeThis(SIGEL_Robot::SIG_Robot const &robot,
00176                                            SIGEL_Environment::SIG_Environment const &environment,
00177                                            SIGEL_Simulation::SIG_SimulationParameters const &simulationParameters,
00178                                            SIGEL_Program::SIG_Program const &program)
00179   {
00180     visualisationWidget->visualizeThis(robot, environment, simulationParameters, program);
00181 
00182     slotSetYaw( yawSlider->value() );
00183     slotSetPitch ( pitchSlider->value() );
00184     slotSetDistance( distanceSlider->value() );
00185 
00186     visualisationWidget->slotSetTraceRobot( traceRobotCheckBox->isChecked() );
00187     visualisationWidget->setRenderMode( renderModeComboBox->currentText() );
00188     visualisationWidget->setAmbientLighting( ambientLightingSlider->value() );
00189 
00190     QString programCode;
00191     SIGEL_Program::SIG_Program &varProgram = const_cast< SIGEL_Program::SIG_Program& >( program );
00192     varProgram.printToString( programCode );
00193     robotProgramView->setText( programCode );
00194   };
00195 
00196   void SIG_SimulationWidget::slotSetTraceRobot( bool newValue )
00197   {
00198     bool manualNavigation = !newValue;
00199 
00200     downPushButton->setEnabled( manualNavigation );
00201     upPushButton->setEnabled( manualNavigation );
00202     rightPushButton->setEnabled( manualNavigation );
00203     leftPushButton->setEnabled( manualNavigation );
00204     backwardPushButton->setEnabled( manualNavigation );
00205     forwardPushButton->setEnabled( manualNavigation );
00206     centerPushButton->setEnabled( manualNavigation );
00207   };
00208 
00209   void SIG_SimulationWidget::slotSetPosition( DL_vector position )
00210   {
00211     QString xPosString = QString::number( position.get( 0 ) );
00212     QString yPosString = QString::number( position.get( 1 ) );
00213     QString zPosString = QString::number( position.get( 2 ) );
00214 
00215     xPosTextLabel->setText( xPosString );
00216     yPosTextLabel->setText( yPosString );
00217     zPosTextLabel->setText( zPosString );
00218   };
00219 
00220   void SIG_SimulationWidget::slotStopSimulation()
00221   {
00222     visualisationWidget->slotStopSimulation();
00223 
00224     slotSetYaw( yawSlider->value() );
00225     slotSetPitch ( pitchSlider->value() );
00226     slotSetDistance( distanceSlider->value() );
00227 
00228     visualisationWidget->slotSetTraceRobot( traceRobotCheckBox->isChecked() );
00229     visualisationWidget->setRenderMode( renderModeComboBox->currentText() );
00230 
00231     visualisationWidget->setShowPlane( showPlaneCheckBox->isChecked() ? 2 : 0 );
00232     visualisationWidget->setShowGrid( showGridCheckBox->isChecked() ? 2 : 0 );
00233     visualisationWidget->setShowRobotPath( showRobotPathCheckBox->isChecked() ? 2 : 0 );
00234 
00235     int showAnchorPointsState;
00236 
00237     switch (showAncorPointsCheckBox->state())
00238       {
00239       case QButton::Off:
00240         showAnchorPointsState = 0;
00241         break;
00242       case QButton::NoChange:
00243         showAnchorPointsState = 1;
00244         break;
00245       case QButton::On:
00246         showAnchorPointsState = 2;
00247         break;
00248       };
00249 
00250     visualisationWidget->setShowAncorPoints( showAnchorPointsState );
00251   };
00252 
00253 }

Generated at Mon Sep 3 01:32:33 2001 for PG 368 - SIGEL by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000