示例#1
0
//Createing the PartControl Signal-Slot principal
void QmitkToFUtilView::CreateQtPartControl( QWidget *parent )
{
  // build up qt view, unless already done
  if ( !m_Controls )
  {
    // create GUI widgets from the Qt Designer's .ui file
    m_Controls = new Ui::QmitkToFUtilViewControls;
    m_Controls->setupUi( parent );

    //Looking for Input and Defining reaction
    connect(m_Frametimer, SIGNAL(timeout()), this, SLOT(OnUpdateCamera()));

    connect( (QObject*)(m_Controls->m_ToFConnectionWidget), SIGNAL(KinectAcquisitionModeChanged()), this, SLOT(OnKinectAcquisitionModeChanged()) ); // Todo in Widget2
    connect( (QObject*)(m_Controls->m_ToFConnectionWidget), SIGNAL(ToFCameraConnected()), this, SLOT(OnToFCameraConnected()) );
    connect( (QObject*)(m_Controls->m_ToFConnectionWidget), SIGNAL(ToFCameraDisconnected()), this, SLOT(OnToFCameraDisconnected()) );
    connect( (QObject*)(m_Controls->m_ToFConnectionWidget), SIGNAL(ToFCameraSelected(const QString)), this, SLOT(OnToFCameraSelected(const QString)) );
    connect( (QObject*)(m_Controls->m_ToFRecorderWidget), SIGNAL(ToFCameraStarted()), this, SLOT(OnToFCameraStarted()) );
    connect( (QObject*)(m_Controls->m_ToFRecorderWidget), SIGNAL(ToFCameraStopped()), this, SLOT(OnToFCameraStopped()) );
    connect( (QObject*)(m_Controls->m_ToFRecorderWidget), SIGNAL(RecordingStarted()), this, SLOT(OnToFCameraStopped()) );
    connect( (QObject*)(m_Controls->m_ToFRecorderWidget), SIGNAL(RecordingStopped()), this, SLOT(OnToFCameraStarted()) );
    connect( (QObject*)(m_Controls->m_SurfaceCheckBox), SIGNAL(toggled(bool)), this, SLOT(OnSurfaceCheckboxChecked(bool)) );
    connect( (QObject*)(m_Controls->m_TextureCheckBox), SIGNAL(toggled(bool)), this, SLOT(OnTextureCheckBoxChecked(bool)) );
    connect( (QObject*)(m_Controls->m_KinectTextureCheckBox), SIGNAL(toggled(bool)), this, SLOT(OnKinectRGBTextureCheckBoxChecked(bool)) );

  }
示例#2
0
void QmitkToFUtilView::CreateQtPartControl( QWidget *parent )
{
  // build up qt view, unless already done
  if ( !m_Controls )
  {
    // create GUI widgets from the Qt Designer's .ui file
    m_Controls = new Ui::QmitkToFUtilViewControls;
    m_Controls->setupUi( parent );

    connect(m_Frametimer, SIGNAL(timeout()), this, SLOT(OnUpdateCamera()));
    connect( (QObject*)(m_Controls->m_ToFConnectionWidget), SIGNAL(ToFCameraConnected()), this, SLOT(OnToFCameraConnected()) );
    connect( (QObject*)(m_Controls->m_ToFConnectionWidget), SIGNAL(ToFCameraDisconnected()), this, SLOT(OnToFCameraDisconnected()) );
    connect( (QObject*)(m_Controls->m_ToFConnectionWidget), SIGNAL(ToFCameraStop()), this, SLOT(OnToFCameraStop()) );
    connect( (QObject*)(m_Controls->m_ToFConnectionWidget), SIGNAL(ToFCameraSelected(int)), this, SLOT(OnToFCameraSelected(int)) );
    connect( (QObject*)(m_Controls->m_ToFRecorderWidget), SIGNAL(ToFCameraStarted()), this, SLOT(OnToFCameraStarted()) );
    connect( (QObject*)(m_Controls->m_ToFRecorderWidget), SIGNAL(ToFCameraStopped()), this, SLOT(OnToFCameraStopped()) );
    connect( (QObject*)(m_Controls->m_SurfaceCheckBox), SIGNAL(toggled(bool)), this, SLOT(OnSurfaceCheckBoxChecked(bool)) );
    connect( (QObject*)(m_Controls->m_TextureCheckBox), SIGNAL(toggled(bool)), this, SLOT(OnTextureCheckBoxChecked(bool)) );
    connect( (QObject*)(m_Controls->m_VideoTextureCheckBox), SIGNAL(toggled(bool)), this, SLOT(OnVideoTextureCheckBoxChecked(bool)) );
  }
示例#3
0
//OnConnectCamera-Method; represents one of the main parts of ToFConnectionWidget2.
void QmitkToFConnectionWidget::OnConnectCamera()
{
  //After connecting a device
  if (m_Controls->m_ConnectCameraButton->text()=="Connect")
  {
    //Getting the device- and the slectedCamera-variables using the ServiceListWidget as we did it in the CameraSelect-Method
    mitk::ToFCameraDevice* device = m_Controls->m_DeviceList->GetSelectedService<mitk::ToFCameraDevice>();
    if (device)
    {
      QString tmpFileName("");
      QString fileFilter("");
      QString selectedCamera = QString::fromStdString(device->GetNameOfClass());

      emit ToFCameraSelected(selectedCamera);

      //Feeding it with the Info from ServiceListWidget
      this->m_ToFImageGrabber->SetCameraDevice(device);

      // Calling Alex FixForKinect, if the Kinect is selected
      if (selectedCamera.contains("Kinect") )
      {
        MITK_INFO<< "Kinect is connected here";
        //If the particular property is selected, the suitable data-node will be generated
        this->m_ToFImageGrabber->SetBoolProperty("RGB", m_Controls->m_KinectParameterWidget->IsAcquisitionModeRGB());//--------------------------------------------------------
        this->m_ToFImageGrabber->SetBoolProperty("IR", m_Controls->m_KinectParameterWidget->IsAcquisitionModeIR());
      }

      //Activation of "PlayerMode". If the selectedCamera String contains "Player", we start the Player Mode
      if (selectedCamera.contains("Player"))
      {
        //IF PMD-Player selected
        if (selectedCamera.contains("PMD"))
        {
          fileFilter.append("PMD Files (*.pmd)");   //And seting the corresponding fileFilter
        }
        else
        {
          fileFilter.append("NRRD Images (*.nrrd);;PIC Images - deprecated (*.pic)");
        }

        //open a QFileDialog to chose the corresponding file from the disc
        tmpFileName = QFileDialog::getOpenFileName(NULL, "Play Image From...", "", fileFilter);

        //If no fileName is returned by the Dialog,Button and Widget have to return to default(disconnected) + Opening a MessageBox
        if (tmpFileName.isEmpty())
        {
          m_Controls->m_ConnectCameraButton->setChecked(false);
          m_Controls->m_ConnectCameraButton->setEnabled(true);  //re-enabling the ConnectCameraButton
          m_Controls->m_DeviceList->setEnabled(true);           //Reactivating ServiceListWidget

          this->OnSelectCamera();       //Calling the OnSelctCamera-Method -> Hides all Widget and just activates the needed ones
          QMessageBox::information( this, "Template functionality", "Please select a valid image before starting some action.");
          return;
        }

        if(selectedCamera.contains("PMDPlayer"))  //If PMD-Player is selected, set ToFImageGrabberProperty correspondingly
        {
          this->m_ToFImageGrabber->SetStringProperty("PMDFileName", tmpFileName.toStdString().c_str() );
        }
        else    //Default action
        {
          std::string msg = "";
          try
          {
            //get 3 corresponding file names
            std::string dir = itksys::SystemTools::GetFilenamePath( tmpFileName.toStdString() );
            std::string baseFilename = itksys::SystemTools::GetFilenameWithoutLastExtension( tmpFileName.toStdString() );
            std::string extension = itksys::SystemTools::GetFilenameLastExtension( tmpFileName.toStdString() );

            //"Incorrect format"-warning while using .nrrd or .pic files
            if (extension != ".pic" && extension != ".nrrd")
            {
              msg = msg + "Invalid file format, please select a \".nrrd\"-file";
              throw std::logic_error(msg.c_str());
            }

            //Checking for npos. If available, check for the Amplitude-, Intensity- and RGBImage

            int found = baseFilename.rfind("_DistanceImage");  //Defining "found" variable+checking if baseFilname contains "_DistanceImage". If not, found == npos(0)

            if (found == std::string::npos)  //If found =0
            {
              found = baseFilename.rfind("_AmplitudeImage");  //If "_AmplitudeImage" is found, the found variable is 1-> the next if statment is false
            }

            if (found == std::string::npos)
            {
              found = baseFilename.rfind("_IntensityImage"); //found = true if baseFilename cotains "_IntesityImage"
            }

            if (found == std::string::npos)
            {
              found = baseFilename.rfind("_RGBImage");
            }

            if (found == std::string::npos) //If none of the Nodes is found, display an error
            {
              msg = msg + "Input file name must end with \"_DistanceImage\", \"_AmplitudeImage\", \"_IntensityImage\" or \"_RGBImage\"!";
              throw std::logic_error(msg.c_str());
            }

            std::string baseFilenamePrefix = baseFilename.substr(0,found);//Set the baseFilenamePrefix as a substring from baseFilname

            //Set corresponding FileNames
            std::string distanceImageFileName = dir + "/" + baseFilenamePrefix + "_DistanceImage" + extension; //Set the name as: directory+FilenamePrefix+""+extension
            std::string amplitudeImageFileName = dir + "/" + baseFilenamePrefix + "_AmplitudeImage" + extension;
            std::string intensityImageFileName = dir + "/" + baseFilenamePrefix + "_IntensityImage" + extension;
            std::string rgbImageFileName = dir + "/" + baseFilenamePrefix + "_RGBImage" + extension;


            if (!itksys::SystemTools::FileExists(distanceImageFileName.c_str(), true))
            {
              this->m_ToFImageGrabber->SetStringProperty("DistanceImageFileName", "");
            }
            else
            {
              this->m_ToFImageGrabber->SetStringProperty("DistanceImageFileName", distanceImageFileName.c_str());
            }
            if (!itksys::SystemTools::FileExists(amplitudeImageFileName.c_str(), true))
            {
            }
            else
            {
              this->m_ToFImageGrabber->SetStringProperty("AmplitudeImageFileName", amplitudeImageFileName.c_str());
            }
            if (!itksys::SystemTools::FileExists(intensityImageFileName.c_str(), true))
            {
              this->m_ToFImageGrabber->SetStringProperty("IntensityImageFileName", "");
            }
            else
            {
              this->m_ToFImageGrabber->SetStringProperty("IntensityImageFileName", intensityImageFileName.c_str());
            }
            if (!itksys::SystemTools::FileExists(rgbImageFileName.c_str(), true))
            {
              this->m_ToFImageGrabber->SetStringProperty("RGBImageFileName", "");
            }
            else
            {
              this->m_ToFImageGrabber->SetStringProperty("RGBImageFileName", rgbImageFileName.c_str());
            }
          }

          catch (std::exception &e)
          {
            MITK_ERROR << e.what();
            QMessageBox::critical( this, "Error", e.what() );
            m_Controls->m_ConnectCameraButton->setChecked(false);
            m_Controls->m_ConnectCameraButton->setEnabled(true);
            m_Controls->m_DeviceList->setEnabled(true);
            this->OnSelectCamera();
            return;
          }
        }
      }
      //End "PlayerMode"

      //Reset the ConnectCameraButton to disconnected
      m_Controls->m_ConnectCameraButton->setText("Disconnect");

      //if a connection could be established
      try
      {

        if (this->m_ToFImageGrabber->ConnectCamera())
        {
          this->m_Controls->m_PMDParameterWidget->SetToFImageGrabber(this->m_ToFImageGrabber);
          this->m_Controls->m_MESAParameterWidget->SetToFImageGrabber(this->m_ToFImageGrabber);
          this->m_Controls->m_KinectParameterWidget->SetToFImageGrabber(this->m_ToFImageGrabber);

          //Activating the respective widgets
          if (selectedCamera.contains("PMD"))
          {
            this->m_Controls->m_PMDParameterWidget->ActivateAllParameters();
          }
          else if (selectedCamera.contains("MESA"))
          {
            this->m_Controls->m_MESAParameterWidget->ActivateAllParameters();
          }
          else if (selectedCamera.contains("Kinect"))
          {
            this->m_Controls->m_KinectParameterWidget->ActivateAllParameters();
          }
          else
          {
            this->HideAllParameterWidgets();
          }
          // send connect signal to the caller functionality
          emit ToFCameraConnected();
        }
        else
          //##### TODO: Remove this else part once all controllers are throwing exceptions
          //if they cannot to any device!
        {
          //Throw an error if the Connection failed and reset the Widgets <- better catch an exception!
          QMessageBox::critical( this, "Error", "Connection failed. Check if you have installed the latest driver for your system." );
          m_Controls->m_ConnectCameraButton->setChecked(false);
          m_Controls->m_ConnectCameraButton->setEnabled(true);
          m_Controls->m_ConnectCameraButton->setText("Connect");
          m_Controls->m_DeviceList->setEnabled(true);           //Reactivating ServiceListWidget
          this->OnSelectCamera();
          return;
        }
      }catch(std::exception &e)
      {
        //catch exceptions of camera which cannot connect give a better reason
        QMessageBox::critical( this, "Connection failed.", e.what() );
        m_Controls->m_ConnectCameraButton->setChecked(false);
        m_Controls->m_ConnectCameraButton->setEnabled(true);
        m_Controls->m_ConnectCameraButton->setText("Connect");
        m_Controls->m_DeviceList->setEnabled(true);           //Reactivating ServiceListWidget
        this->OnSelectCamera();
        return;
      }
      m_Controls->m_ConnectCameraButton->setEnabled(true);

      // ask wether camera parameters (intrinsics, ...) should be loaded
      if (QMessageBox::question(this,"Camera parameters","Do you want to specify your own camera intrinsics?",QMessageBox::Yes,QMessageBox::No)==QMessageBox::Yes)
      {
        QString fileName = QFileDialog::getOpenFileName(this,"Open camera intrinsics","/","*.xml");
        mitk::CameraIntrinsics::Pointer cameraIntrinsics = mitk::CameraIntrinsics::New();
        cameraIntrinsics->FromXMLFile(fileName.toStdString());
        this->m_ToFImageGrabber->SetProperty("CameraIntrinsics",mitk::CameraIntrinsicsProperty::New(cameraIntrinsics));
      }
      ////Reset the status of some GUI-Elements
      m_Controls->m_DeviceList->setEnabled(false);          //Deactivating the Instance of QmitkServiceListWidget
      //repaint the widget
      this->repaint();
    }
    else
    {
      QMessageBox::information(this,"Camera connection","No camera selected, please select a range camera");
      m_Controls->m_ConnectCameraButton->setChecked(false);
    }
  }
  else if (m_Controls->m_ConnectCameraButton->text()=="Disconnect")
  {
    this->m_ToFImageGrabber->StopCamera();
    this->m_ToFImageGrabber->DisconnectCamera();
    m_Controls->m_ConnectCameraButton->setText("Connect");
    m_Controls->m_DeviceList->setEnabled(true);           //Reactivating ServiceListWidget
    this->OnSelectCamera();

    // send disconnect signal to the caller functionality
    emit ToFCameraDisconnected();
  }
}
示例#4
0
void QmitkToFConnectionWidget::OnConnectCamera()
{
  bool playerMode = false;

  if (m_Controls->m_ConnectCameraButton->text()=="Connect")
  {   
    //reset the status of the GUI buttons
    m_Controls->m_ConnectCameraButton->setEnabled(false);
    m_Controls->m_SelectCameraCombobox->setEnabled(false);
    //repaint the widget
    this->repaint();

    QString tmpFileName("");
    QString fileFilter("");

    //select the camera to connect with
    QString selectedCamera = m_Controls->m_SelectCameraCombobox->currentText();
    if (selectedCamera == "PMD CamCube 2.0/3.0")
    { //PMD CamCube
      this->m_ToFImageGrabber = mitk::ToFImageGrabberCreator::GetInstance()->GetPMDCamCubeImageGrabber();
    }
    else if (selectedCamera == "PMD CamCubeRaw 2.0/3.0")
    { //PMD CamCube
      this->m_ToFImageGrabber = mitk::ToFImageGrabberCreator::GetInstance()->GetPMDRawDataCamCubeImageGrabber();
    }
    else if (selectedCamera == "PMD CamBoard")
    { //PMD CamBoard
      this->m_ToFImageGrabber = mitk::ToFImageGrabberCreator::GetInstance()->GetPMDCamBoardImageGrabber();
    }
    else if (selectedCamera == "PMD CamBoardRaw")
    { //PMD CamBoard
      this->m_ToFImageGrabber = mitk::ToFImageGrabberCreator::GetInstance()->GetPMDRawDataCamBoardImageGrabber();
    }
    else if (selectedCamera == "PMD O3D")
    {//PMD O3
      this->m_ToFImageGrabber = mitk::ToFImageGrabberCreator::GetInstance()->GetPMDO3ImageGrabber();
    }
    else if (selectedCamera == "MESA Swissranger 4000")
    {//MESA SR4000
      this->m_ToFImageGrabber = mitk::ToFImageGrabberCreator::GetInstance()->GetMESASR4000ImageGrabber();
    }
    else if (selectedCamera == "PMD Player")
    {//PMD player
      playerMode = true;
      fileFilter.append("PMD Files (*.pmd)");
      this->m_ToFImageGrabber = mitk::ToFImageGrabberCreator::GetInstance()->GetPMDPlayerImageGrabber();
    }
    else if (selectedCamera == "PMD Raw Data Player")
    {//PMD MITK player
      playerMode = true;
      fileFilter.append("NRRD Images (*.nrrd);;PIC Images - deprecated (*.pic)");
      this->m_ToFImageGrabber = mitk::ToFImageGrabberCreator::GetInstance()->GetPMDMITKPlayerImageGrabber();
    }
    else if (selectedCamera == "MITK Player")
    {//MITK player
      playerMode = true;
      fileFilter.append("NRRD Images (*.nrrd);;PIC Images - deprecated (*.pic)");
      this->m_ToFImageGrabber = mitk::ToFImageGrabberCreator::GetInstance()->GetMITKPlayerImageGrabber();
    }

    // if a player was selected ...
    if (playerMode)
    { //... open a QFileDialog to chose the corresponding file from the disc
      tmpFileName = QFileDialog::getOpenFileName(NULL, "Play Image From...", "", fileFilter);
      if (tmpFileName.isEmpty())
      {
        m_Controls->m_ConnectCameraButton->setChecked(false);
        m_Controls->m_ConnectCameraButton->setEnabled(true);
        m_Controls->m_SelectCameraCombobox->setEnabled(true);
        this->OnSelectCamera(m_Controls->m_SelectCameraCombobox->currentText());
        QMessageBox::information( this, "Template functionality", "Please select a valid image before starting some action.");
        return;
      }
      if(selectedCamera == "PMD Player")
      { //set the PMD file name
        this->m_ToFImageGrabber->SetStringProperty("PMDFileName", tmpFileName.toStdString().c_str() );
      }
      if (selectedCamera == "PMD Raw Data Player" || selectedCamera == "MITK Player")
      {
        std::string msg = "";
        try
        {
          //get 3 corresponding file names
          std::string dir = itksys::SystemTools::GetFilenamePath( tmpFileName.toStdString() );
          std::string baseFilename = itksys::SystemTools::GetFilenameWithoutLastExtension( tmpFileName.toStdString() );
          std::string extension = itksys::SystemTools::GetFilenameLastExtension( tmpFileName.toStdString() );

          if (extension != ".pic" && extension != ".nrrd")
          {
            msg = msg + "Invalid file format, please select a \".nrrd\"-file";
            throw std::logic_error(msg.c_str());
          }
          int found = baseFilename.rfind("_DistanceImage");
          if (found == std::string::npos)
          {
            found = baseFilename.rfind("_AmplitudeImage");
          }
          if (found == std::string::npos)
          {
            found = baseFilename.rfind("_IntensityImage");
          }
          if (found == std::string::npos)
          {
            msg = msg + "Input file name must end with \"_DistanceImage.pic\", \"_AmplitudeImage.pic\" or \"_IntensityImage.pic\"!";
            throw std::logic_error(msg.c_str());
          }
          std::string baseFilenamePrefix = baseFilename.substr(0,found);

          std::string distanceImageFileName = dir + "/" + baseFilenamePrefix + "_DistanceImage" + extension;
          std::string amplitudeImageFileName = dir + "/" + baseFilenamePrefix + "_AmplitudeImage" + extension;
          std::string intensityImageFileName = dir + "/" + baseFilenamePrefix + "_IntensityImage" + extension;

          if (!itksys::SystemTools::FileExists(distanceImageFileName.c_str(), true))
          {
            msg = msg + "Inputfile not exist! " + distanceImageFileName;
            throw std::logic_error(msg.c_str());
          }
          if (!itksys::SystemTools::FileExists(amplitudeImageFileName.c_str(), true))
          {
            msg = msg + "Inputfile not exist! " + amplitudeImageFileName;
            throw std::logic_error(msg.c_str());
          }
          if (!itksys::SystemTools::FileExists(intensityImageFileName.c_str(), true))
          {
            msg = msg + "Inputfile not exist! " + intensityImageFileName;
            throw std::logic_error(msg.c_str());
          }
          //set the file names
          this->m_ToFImageGrabber->SetStringProperty("DistanceImageFileName", distanceImageFileName.c_str());
          this->m_ToFImageGrabber->SetStringProperty("AmplitudeImageFileName", amplitudeImageFileName.c_str());
          this->m_ToFImageGrabber->SetStringProperty("IntensityImageFileName", intensityImageFileName.c_str());

        }
        catch (std::exception &e)
        {
          MITK_ERROR << e.what();
          QMessageBox::critical( this, "Error", e.what() );
          m_Controls->m_ConnectCameraButton->setChecked(false);
          m_Controls->m_ConnectCameraButton->setEnabled(true);
          m_Controls->m_SelectCameraCombobox->setEnabled(true);
          this->OnSelectCamera(m_Controls->m_SelectCameraCombobox->currentText());
          return;
        }
      }

    }
    //if a connection could be established
    if (this->m_ToFImageGrabber->ConnectCamera())
    {
      this->m_Controls->m_PMDParameterWidget->SetToFImageGrabber(this->m_ToFImageGrabber);
      this->m_Controls->m_MESAParameterWidget->SetToFImageGrabber(this->m_ToFImageGrabber);

      if ((selectedCamera == "PMD CamCube 2.0/3.0")||(selectedCamera == "PMD CamBoard")||(selectedCamera=="PMD O3D")||
        (selectedCamera=="PMD CamBoardRaw")||(selectedCamera=="PMD CamCubeRaw 2.0/3.0"))
      {
        this->m_Controls->m_PMDParameterWidget->ActivateAllParameters();
      }
      else if (selectedCamera=="MESA Swissranger 4000")
      {
        this->m_Controls->m_MESAParameterWidget->ActivateAllParameters();
      }
      m_Controls->m_ConnectCameraButton->setText("Disconnect");

      // send connect signal to the caller functionality
      emit ToFCameraConnected();
    }
    else
    {
      QMessageBox::critical( this, "Error", "Connection failed. Check if you have installed the latest driver for your system." );
      m_Controls->m_ConnectCameraButton->setChecked(false);
      m_Controls->m_ConnectCameraButton->setEnabled(true);
      m_Controls->m_SelectCameraCombobox->setEnabled(true);
      this->OnSelectCamera(m_Controls->m_SelectCameraCombobox->currentText());
      return;

    }
    m_Controls->m_ConnectCameraButton->setEnabled(true);

  }
  else if (m_Controls->m_ConnectCameraButton->text()=="Disconnect")
  {
    this->m_ToFImageGrabber->StopCamera();
    this->m_ToFImageGrabber->DisconnectCamera();
    m_Controls->m_ConnectCameraButton->setText("Connect");
    m_Controls->m_SelectCameraCombobox->setEnabled(true);
    this->OnSelectCamera(m_Controls->m_SelectCameraCombobox->currentText());

    this->m_ToFImageGrabber = NULL;
    // send disconnect signal to the caller functionality
    emit ToFCameraDisconnected();

  }
}