diff --git a/Modules/US/USHardwareTelemed/mitkUSTelemedBModeControls.cpp b/Modules/US/USHardwareTelemed/mitkUSTelemedBModeControls.cpp index 89fbc7d653..27303955b4 100644 --- a/Modules/US/USHardwareTelemed/mitkUSTelemedBModeControls.cpp +++ b/Modules/US/USHardwareTelemed/mitkUSTelemedBModeControls.cpp @@ -1,261 +1,290 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "mitkUSTelemedBModeControls.h" #include "mitkUSTelemedDevice.h" #include #define TELEMED_FREQUENCY_FACTOR 1000000 mitk::USTelemedBModeControls::USTelemedBModeControls(itk::SmartPointer device) : mitk::USControlInterfaceBMode(device.GetPointer()), m_UsgDataView(0), m_PowerControl(0), m_FrequencyControl(0), m_DepthControl(0), m_GainControl(0), m_RejectionControl(0), m_DynamicRangeControl(0), m_Active(false), m_PowerSteps(new double[3]), m_GainSteps(new double[3]), m_RejectionSteps(new double[3]), - m_DynamicRangeSteps(new double[3]) + m_DynamicRangeSteps(new double[3]), + m_MixerControl(0) { + tagRECT *rectDim = new tagRECT(); + + //tagRECT* rectDim(*RECT{ 0,0,255,255 }); + rectDim->left = 0; + rectDim->top = 0; + rectDim->right = 255; + rectDim->bottom = 255; + + //Rectangle rect; + //Usgfw2Lib::tagRECT rect1; + //rect = ultrasound_panel->ClientRectangle; + //rect1.left = rect.Left; + //rect1.right = rect.Right; + //rect1.top = rect.Top; + //rect1.bottom = rect.Bottom; + //// set ultrasound output rectangle + + + + // Usgfw2Lib::IUsgScanMode* mode; + // get mixer control + //mode->GetMixerControl((unsigned int)Usgfw2Lib::tagScanMode::SCAN_MODE_B, 0, &m_MixerControl); + //m_MixerControl = Usgfw2Lib::IUsgDataStream::GetMixerControl(); + //auto USrect = m_MixerControl->SetOutputRect(rectDim); } mitk::USTelemedBModeControls::~USTelemedBModeControls() { this->ReleaseControls(); delete[] m_PowerSteps; delete[] m_GainSteps; delete[] m_RejectionSteps; delete[] m_DynamicRangeSteps; } void mitk::USTelemedBModeControls::SetUsgDataView( Usgfw2Lib::IUsgDataView* usgDataView) { m_UsgDataView = usgDataView; } void mitk::USTelemedBModeControls::ReinitializeControls( ) { this->ReleaseControls(); this->CreateControls(); } void mitk::USTelemedBModeControls::SetIsActive(bool active) { if (active) { HRESULT hr = m_UsgDataView->put_ScanState(Usgfw2Lib::SCAN_STATE_STOP); if (FAILED(hr)) { mitkThrow() << "Could not stop scanning (" << hr << ")."; } // make sure that current scan mode is b mode now hr = m_UsgDataView->put_ScanMode(Usgfw2Lib::SCAN_MODE_B); if (FAILED(hr)) { mitkThrow() << "Could not set scan mode b (" << hr << ")."; } hr = m_UsgDataView->put_ScanState(Usgfw2Lib::SCAN_STATE_RUN); if (FAILED(hr)) { mitkThrow() << "Could not start scanning (" << hr << ")."; } this->CreateControls(); m_Active = true; } else { this->ReleaseControls(); m_Active = false; } } bool mitk::USTelemedBModeControls::GetIsActive( ) { // get scan mode, because scan mode must be B mode // for this interface being active ULONG scanMode; HRESULT hr = m_UsgDataView->get_ScanMode(&scanMode); if (FAILED(hr)) { mitkThrow() << "Could not get scan mode (" << hr << ")."; } return m_Active && scanMode == Usgfw2Lib::SCAN_MODE_B; } double mitk::USTelemedBModeControls::GetScanningFrequencyAPI( ) { RETURN_TelemedValue(m_FrequencyControl); } double mitk::USTelemedBModeControls::GetScanningFrequency( ) { return this->GetScanningFrequencyAPI() / TELEMED_FREQUENCY_FACTOR; } void mitk::USTelemedBModeControls::OnSetScanningFrequency( double value ) { SET_TelemedValue(m_FrequencyControl, value * TELEMED_FREQUENCY_FACTOR); } std::vector mitk::USTelemedBModeControls::GetScanningFrequencyValues( ) { RETURN_TelemedAvailableValuesWithFactor(m_FrequencyControl, TELEMED_FREQUENCY_FACTOR); } double mitk::USTelemedBModeControls::GetScanningPower( ) { RETURN_TelemedValue(m_PowerControl); } void mitk::USTelemedBModeControls::OnSetScanningPower(double value) { SET_TelemedValue(m_PowerControl, value); } double mitk::USTelemedBModeControls::GetScanningPowerMin() { return m_PowerSteps[0]; } double mitk::USTelemedBModeControls::GetScanningPowerMax() { return m_PowerSteps[1]; } double mitk::USTelemedBModeControls::GetScanningPowerTick() { return m_PowerSteps[2]; } double mitk::USTelemedBModeControls::GetScanningDepth() { RETURN_TelemedValue(m_DepthControl); } void mitk::USTelemedBModeControls::OnSetScanningDepth(double value) { SET_TelemedValue(m_DepthControl,value); } std::vector mitk::USTelemedBModeControls::GetScanningDepthValues() { RETURN_TelemedAvailableValues(m_DepthControl); } double mitk::USTelemedBModeControls::GetScanningGain( ) { RETURN_TelemedValue(m_GainControl); } void mitk::USTelemedBModeControls::OnSetScanningGain(double value) { SET_TelemedValue(m_GainControl, value); } double mitk::USTelemedBModeControls::GetScanningGainMin() { return m_GainSteps[0]; } double mitk::USTelemedBModeControls::GetScanningGainMax() { return m_GainSteps[1]; } double mitk::USTelemedBModeControls::GetScanningGainTick() { return m_GainSteps[2]; } double mitk::USTelemedBModeControls::GetScanningRejection() { RETURN_TelemedValue(m_RejectionControl); } void mitk::USTelemedBModeControls::OnSetScanningRejection(double value) { SET_TelemedValue(m_RejectionControl, value); } double mitk::USTelemedBModeControls::GetScanningRejectionMin( ) { return m_RejectionSteps[0]; } double mitk::USTelemedBModeControls::GetScanningRejectionMax( ) { return m_RejectionSteps[1]; } double mitk::USTelemedBModeControls::GetScanningRejectionTick( ) { return m_RejectionSteps[2]; } double mitk::USTelemedBModeControls::GetScanningDynamicRange( ) { RETURN_TelemedValue(m_DynamicRangeControl); } void mitk::USTelemedBModeControls::OnSetScanningDynamicRange( double value ) { SET_TelemedValue(m_DynamicRangeControl, value); } double mitk::USTelemedBModeControls::GetScanningDynamicRangeMin( ) { return m_DynamicRangeSteps[0]; } double mitk::USTelemedBModeControls::GetScanningDynamicRangeMax( ) { return m_DynamicRangeSteps[1]; } double mitk::USTelemedBModeControls::GetScanningDynamicRangeTick( ) { return m_DynamicRangeSteps[2]; } void mitk::USTelemedBModeControls::CreateControls() { // create frequency control CREATE_TelemedControl(m_FrequencyControl, m_UsgDataView, Usgfw2Lib::IID_IUsgProbeFrequency2, Usgfw2Lib::IUsgProbeFrequency2, Usgfw2Lib::SCAN_MODE_B); // create power control CREATE_TelemedControl(m_PowerControl, m_UsgDataView, Usgfw2Lib::IID_IUsgPower, Usgfw2Lib::IUsgPower, Usgfw2Lib::SCAN_MODE_B); GETINOUTPUT_TelemedAvailableValuesBounds(m_PowerControl, m_PowerSteps); // get min, max and tick for gain // create B mode depth control CREATE_TelemedControl(m_DepthControl, m_UsgDataView, Usgfw2Lib::IID_IUsgDepth, Usgfw2Lib::IUsgDepth, Usgfw2Lib::SCAN_MODE_B); // create B mode gain control CREATE_TelemedControl(m_GainControl, m_UsgDataView, Usgfw2Lib::IID_IUsgGain, Usgfw2Lib::IUsgGain, Usgfw2Lib::SCAN_MODE_B); GETINOUTPUT_TelemedAvailableValuesBounds(m_GainControl, m_GainSteps); // get min, max and tick for gain // create B mode rejection control CREATE_TelemedControl(m_RejectionControl, m_UsgDataView, Usgfw2Lib::IID_IUsgRejection2, Usgfw2Lib::IUsgRejection2, Usgfw2Lib::SCAN_MODE_B); GETINOUTPUT_TelemedAvailableValuesBounds(m_RejectionControl, m_RejectionSteps); // get min, max and tick for rejection // create B mode dynamic range control CREATE_TelemedControl(m_DynamicRangeControl, m_UsgDataView, Usgfw2Lib::IID_IUsgDynamicRange, Usgfw2Lib::IUsgDynamicRange, Usgfw2Lib::SCAN_MODE_B); GETINOUTPUT_TelemedAvailableValuesBounds(m_DynamicRangeControl, m_DynamicRangeSteps); // get min, max and tick for dynamic range + + // create B mode mixer control + CREATE_TelemedControl(m_MixerControl, m_UsgDataView, Usgfw2Lib::IID_IUsgMixerControl, Usgfw2Lib::IUsgMixerControl, Usgfw2Lib::SCAN_MODE_B); + //GETINOUTPUT_TelemedAvailableValuesBounds(m_MixerControl, m_MixerControlSteps); // get min, max and tick for dynamic range } void mitk::USTelemedBModeControls::ReleaseControls() { // remove all controls and delete their objects SAFE_RELEASE(m_PowerControl); SAFE_RELEASE(m_FrequencyControl); SAFE_RELEASE(m_DepthControl); SAFE_RELEASE(m_GainControl); SAFE_RELEASE(m_RejectionControl); SAFE_RELEASE(m_DynamicRangeControl); } \ No newline at end of file diff --git a/Modules/US/USHardwareTelemed/mitkUSTelemedBModeControls.h b/Modules/US/USHardwareTelemed/mitkUSTelemedBModeControls.h index e355d042ae..663e39f249 100644 --- a/Modules/US/USHardwareTelemed/mitkUSTelemedBModeControls.h +++ b/Modules/US/USHardwareTelemed/mitkUSTelemedBModeControls.h @@ -1,115 +1,116 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #ifndef MITKUSTelemedBModeControls_H_HEADER_INCLUDED_ #define MITKUSTelemedBModeControls_H_HEADER_INCLUDED_ #include "mitkUSTelemedSDKHeader.h" #include "mitkUSControlInterfaceBMode.h" #include namespace mitk { class USTelemedDevice; /** * \brief Implementation of mitk::USControlInterfaceBMode for Telemed ultrasound devices. * See documentation of mitk::USControlInterfaceBMode for a description of the interface methods. */ class USTelemedBModeControls : public USControlInterfaceBMode { public: mitkClassMacro(USTelemedBModeControls, USControlInterfaceBMode); mitkNewMacro1Param(Self, itk::SmartPointer); /** * Scan mode is set to b mode when this controls are activated. * All necessary controls are created at the Telemed API. */ virtual void SetIsActive( bool ); /** * \return true if API controls are created and scan mode is set to b mode */ virtual bool GetIsActive( ); virtual double GetScanningFrequency( ); virtual void OnSetScanningFrequency( double frequency ); virtual std::vector GetScanningFrequencyValues( ); virtual double GetScanningPower( ); virtual void OnSetScanningPower( double power ); virtual double GetScanningPowerMin( ); virtual double GetScanningPowerMax( ); virtual double GetScanningPowerTick( ); virtual double GetScanningDepth( ); virtual void OnSetScanningDepth( double ); virtual std::vector GetScanningDepthValues( ); virtual double GetScanningGain( ); virtual void OnSetScanningGain( double ); virtual double GetScanningGainMin( ); virtual double GetScanningGainMax( ); virtual double GetScanningGainTick( ); virtual double GetScanningRejection( ); virtual void OnSetScanningRejection( double ); virtual double GetScanningRejectionMin( ); virtual double GetScanningRejectionMax( ); virtual double GetScanningRejectionTick( ); virtual double GetScanningDynamicRange( ); virtual void OnSetScanningDynamicRange( double ); virtual double GetScanningDynamicRangeMin( ); virtual double GetScanningDynamicRangeMax( ); virtual double GetScanningDynamicRangeTick( ); /** * \brief Setter for the IUsgDataView necesary for communicating with the Telemed API. * This method is just for internal use of the mitk::USTelemedDevice. */ void SetUsgDataView( Usgfw2Lib::IUsgDataView* ); void ReinitializeControls( ); protected: USTelemedBModeControls(itk::SmartPointer device); virtual ~USTelemedBModeControls(); void CreateControls( ); void ReleaseControls( ); double GetScanningFrequencyAPI( ); Usgfw2Lib::IUsgDataView* m_UsgDataView; // main SDK object for comminucating with the Telemed API Usgfw2Lib::IUsgPower* m_PowerControl; // control for scanning power Usgfw2Lib::IUsgProbeFrequency2* m_FrequencyControl; // control for scanning frequency Usgfw2Lib::IUsgDepth* m_DepthControl; // control for B mode scanning depth Usgfw2Lib::IUsgGain* m_GainControl; // control for B mode scanning gain Usgfw2Lib::IUsgRejection2* m_RejectionControl; // control for B mode scanning rejection Usgfw2Lib::IUsgDynamicRange* m_DynamicRangeControl; // control for B mode dynamic range + Usgfw2Lib::IUsgMixerControl* m_MixerControl; // control for B mode mixer control bool m_Active; double* m_PowerSteps; // array holding possible power values: [min, max, tick] double* m_GainSteps; // array holding possible gains: [min, max, tick] double* m_RejectionSteps; // array holding possible rejections: [min, max, tick] double* m_DynamicRangeSteps; // array holding possible dynamic range values: [min, max, tick] }; } // namespace mitk #endif // MITKUSTelemedBModeControls_H_HEADER_INCLUDED_ \ No newline at end of file