From 2899b7ce41fe696d2e750adec73ff794c09d3a20 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 19 Jul 2013 15:32:17 -0400 Subject: [PATCH 1/6] Added Map seeding option in Ui. Not functional --- src/dataset/RTTFibers.cpp | 109 +++++++++++++-- src/dataset/RTTFibers.h | 14 +- src/dataset/RTTrackingHelper.cpp | 1 + src/dataset/RTTrackingHelper.h | 3 + src/gui/TrackingWindow.cpp | 222 +++++++++++++++++++++---------- src/gui/TrackingWindow.h | 6 +- 6 files changed, 265 insertions(+), 90 deletions(-) diff --git a/src/dataset/RTTFibers.cpp b/src/dataset/RTTFibers.cpp index 3397d117..4b8c7ca8 100644 --- a/src/dataset/RTTFibers.cpp +++ b/src/dataset/RTTFibers.cpp @@ -38,7 +38,6 @@ RTTFibers::RTTFibers() m_minFiberLength( 10 ), m_maxFiberLength( 200 ), m_isHARDI( false ), - m_usingMap( false ), m_trackActionStep(std::numeric_limits::max()), m_timerStep( 0 ) { @@ -47,6 +46,30 @@ RTTFibers::RTTFibers() readTex = 1; } +void RTTFibers::setSeedMapInfo(Anatomy *info) +{ + m_pSeedMapInfo = info; + if( m_pSeedMapInfo != NULL ) + { + int cols = DatasetManager::getInstance()->getColumns(); + int rows = DatasetManager::getInstance()->getRows(); + int frames = DatasetManager::getInstance()->getFrames(); + + for( int f = 0; f < frames; ++f ) + { + for( int r = 0; r < rows; ++r ) + { + for( int c = 0; c < cols; ++c ) + { + if ( m_pSeedMapInfo->at(f * rows * cols + r * cols + c) > 0.0f) + { + m_pSeedMap.push_back( Vector(c, r, f) ); + } + } + } + } + } +} /////////////////////////////////////////////////////////////////////////// // Generate random seeds /////////////////////////////////////////////////////////////////////////// @@ -81,6 +104,18 @@ float RTTFibers::getShellSeedNb() return pts; } /////////////////////////////////////////////////////////////////////////// +// Returns the nb of seeds for Map seeding +/////////////////////////////////////////////////////////////////////////// +float RTTFibers::getSeedMapNb() +{ + float pts = m_nbSeed*m_nbSeed*m_nbSeed; + if( m_pSeedMapInfo != NULL ) + { + pts *= m_pSeedMap.size(); + } + return pts; +} +/////////////////////////////////////////////////////////////////////////// // Generate seeds and tracks /////////////////////////////////////////////////////////////////////////// void RTTFibers::seed() @@ -96,7 +131,7 @@ void RTTFibers::seed() SelectionTree::SelectionObjectVector selObjs = SceneManager::getInstance()->getSelectionTree().getAllObjects(); //Evenly distanced seeds - if( !RTTrackingHelper::getInstance()->isShellSeeds() ) + if( !RTTrackingHelper::getInstance()->isShellSeeds() && !RTTrackingHelper::getInstance()->isSeedMap()) { for( unsigned int b = 0; b < selObjs.size(); b++ ) { @@ -116,6 +151,63 @@ void RTTFibers::seed() float ystep = selObjs[b]->getSize().y * yVoxel / float( m_nbSeed - 1.0f ); float zstep = selObjs[b]->getSize().z * zVoxel / float( m_nbSeed - 1.0f ); + for( float x = minCorner.x; x < maxCorner.x + xstep/2.0f; x+= xstep ) + { + for( float y = minCorner.y; y < maxCorner.y + ystep/2.0f; y+= ystep ) + { + for( float z = minCorner.z; z < maxCorner.z + zstep/2.0f; z+= zstep ) + { + vector pointsF; // Points to be rendered Forward + vector colorF; //Color (local directions)Forward + vector pointsB; // Points to be rendered Backward + vector colorB; //Color (local directions) Backward + + if(m_isHARDI) + { + //Track both sides + performHARDIRTT( Vector(x,y,z), 1, pointsF, colorF); //First pass + performHARDIRTT( Vector(x,y,z), -1, pointsB, colorB); //Second pass + } + else + { + //Track both sides + performDTIRTT( Vector(x,y,z), 1, pointsF, colorF); //First pass + performDTIRTT( Vector(x,y,z), -1, pointsB, colorB); //Second pass + } + + if( (pointsF.size() + pointsB.size()) * getStep() > getMinFiberLength() && (pointsF.size() + pointsB.size()) * getStep() < getMaxFiberLength() ) + { + m_fibersRTT.push_back( pointsF ); + m_colorsRTT.push_back( colorF ); + m_fibersRTT.push_back( pointsB ); + m_colorsRTT.push_back( colorB ); + } + + //glColor3f(1,0,0); + //SceneManager::getInstance()->getScene()->drawSphere( x, y ,z, 0.2 ); + + } + } + } + } + } + else if ( RTTrackingHelper::getInstance()->isSeedMap()) + { + for( unsigned int s = 0; s < m_pSeedMap.size(); s++ ) + { + Vector val = m_pSeedMap[s]; + + minCorner.x = val.x * xVoxel / 2.0f; + minCorner.y = val.y * yVoxel / 2.0f; + minCorner.z = val.z * zVoxel / 2.0f; + maxCorner.x = val.x * xVoxel / 2.0f + xVoxel; + maxCorner.y = val.y * yVoxel / 2.0f + yVoxel; + maxCorner.z = val.z * zVoxel / 2.0f + zVoxel; + + float xstep = xVoxel / float( m_nbSeed - 1.0f ); + float ystep = yVoxel / float( m_nbSeed - 1.0f ); + float zstep = zVoxel / float( m_nbSeed - 1.0f ); + for( float x = minCorner.x; x < maxCorner.x + xstep/2.0f; x+= xstep ) { for( float y = minCorner.y; y < maxCorner.y + ystep/2.0f; y+= ystep ) @@ -420,7 +512,7 @@ Vector RTTFibers::advecIntegrateHARDI( Vector vin, const std::vector &sti float angleMin = 360.0f; float angle = 0.0f; float puncture = m_vinvout; - float fa = m_pMapInfo->at(s_number); + float fa = m_pMaskInfo->at(s_number); vin.normalize(); for(unsigned int i=0; i < sticks.size()/3; i++) @@ -763,15 +855,10 @@ std::vector RTTFibers::pickDirection(std::vector initialPeaks) /////////////////////////////////////////////////////////////////////////// bool RTTFibers::withinMapThreshold(unsigned int sticksNumber) { - bool isOk = true; - - if(m_usingMap) + bool isOk = false; + if(m_pMaskInfo->at(sticksNumber) > m_FAThreshold) { - isOk = false; - if(m_pMapInfo->at(sticksNumber) > m_FAThreshold) - { - isOk = true; - } + isOk = true; } return isOk; diff --git a/src/dataset/RTTFibers.h b/src/dataset/RTTFibers.h index f2012c13..0c66a669 100644 --- a/src/dataset/RTTFibers.h +++ b/src/dataset/RTTFibers.h @@ -20,7 +20,7 @@ class RTTFibers { public: RTTFibers(); //Constructor - ~RTTFibers(); //Destructor + ~RTTFibers(); //Destructor //RTT functions void seed(); @@ -54,13 +54,15 @@ class RTTFibers void setTensorsInfo( Tensors* info ) { m_pTensorsInfo = info; } void setHARDIInfo( Maximas* info ) { m_pMaximasInfo = info; } void setShellInfo( DatasetInfo* info ) { m_pShellInfo = info; } - void setMapInfo( Anatomy* info ) { m_pMapInfo = info; m_usingMap = true; } + void setMaskInfo( Anatomy* info ) { m_pMaskInfo = info; } + void setSeedMapInfo( Anatomy* info ); float getFAThreshold() { return m_FAThreshold; } float getAngleThreshold() { return m_angleThreshold; } float getStep() { return m_step; } float getNbMeshPoint() { return m_nbMeshPt; } - float getShellSeedNb(); + float getShellSeedNb(); + float getSeedMapNb(); float getPuncture() { return m_puncture; } float getVinVout() { return m_vinvout; } @@ -80,6 +82,7 @@ class RTTFibers unsigned int m_trackActionStep; float m_timerStep; + std::vector m_pSeedMap; @@ -138,11 +141,12 @@ class RTTFibers float m_minFiberLength; float m_maxFiberLength; bool m_isHARDI; - bool m_usingMap; Tensors *m_pTensorsInfo; Maximas *m_pMaximasInfo; DatasetInfo *m_pShellInfo; - Anatomy *m_pMapInfo; + Anatomy *m_pMaskInfo; + Anatomy *m_pSeedMapInfo; + std::vector< FMatrix > m_tensorsMatrix; diff --git a/src/dataset/RTTrackingHelper.cpp b/src/dataset/RTTrackingHelper.cpp index c078a89a..a8a57b70 100644 --- a/src/dataset/RTTrackingHelper.cpp +++ b/src/dataset/RTTrackingHelper.cpp @@ -8,6 +8,7 @@ RTTrackingHelper::RTTrackingHelper() : m_interpolateTensors( false ), m_isFileSelected( false ), m_isShellSeeds( false ), + m_isSeedMap( false ), m_isRTTActive( false ), m_isRTTDirty( false ), m_isRTTReady( false ), diff --git a/src/dataset/RTTrackingHelper.h b/src/dataset/RTTrackingHelper.h index fc55d87a..cd0a276a 100644 --- a/src/dataset/RTTrackingHelper.h +++ b/src/dataset/RTTrackingHelper.h @@ -10,6 +10,7 @@ class RTTrackingHelper bool isFileSelected() const { return m_isFileSelected; } bool isShellSeeds() const { return m_isShellSeeds; } + bool isSeedMap() const { return m_isSeedMap; } bool isRTTReady() const { return m_isRTTReady; } bool isRTTDirty() const { return m_isRTTDirty; } bool isRTTActive() const { return m_isRTTActive; } @@ -23,6 +24,7 @@ class RTTrackingHelper bool toggleInterpolateTensors() { return m_interpolateTensors = !m_interpolateTensors; } bool toggleShellSeeds() { return m_isShellSeeds = !m_isShellSeeds; } + bool toggleSeedMap() { return m_isSeedMap = !m_isSeedMap; } bool toggleRTTReady() { return m_isRTTReady = !m_isRTTReady; } bool togglePlayStop() { return m_isPaused = !m_isPaused; } @@ -45,6 +47,7 @@ class RTTrackingHelper bool m_interpolateTensors; bool m_isFileSelected; bool m_isShellSeeds; + bool m_isSeedMap; bool m_isRTTActive; bool m_isRTTDirty; bool m_isRTTReady; diff --git a/src/gui/TrackingWindow.cpp b/src/gui/TrackingWindow.cpp index 579390e5..8bbab811 100644 --- a/src/gui/TrackingWindow.cpp +++ b/src/gui/TrackingWindow.cpp @@ -160,88 +160,100 @@ TrackingWindow::TrackingWindow( wxWindow *pParent, MainFrame *pMf, wxWindowID id pBoxRow2->Add( m_pToggleShell, 0, wxALIGN_CENTER | wxALL, 1); m_pTrackingSizer->Add( pBoxRow2, 0, wxFIXED_MINSIZE | wxALL, 2 ); - m_pBtnSelectMap = new wxButton( this, wxID_ANY,wxT("Map not selected"), wxPoint(30,60), wxSize(230, -1) ); - Connect( m_pBtnSelectMap->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TrackingWindow::OnSelectMap) ); - m_pBtnSelectMap->SetBackgroundColour(wxColour( 255, 147, 147 )); + m_pBtnSelectSeed = new wxButton( this, wxID_ANY,wxT("Seed not selected"), wxPoint(30,60), wxSize(115, -1) ); + Connect( m_pBtnSelectSeed->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TrackingWindow::OnSelectSeedMap) ); + + m_pToggleSeedMap = new wxToggleButton( this, wxID_ANY,wxT("Seed Map OFF"), wxPoint(130,60), wxSize(115, -1) ); + Connect( m_pToggleSeedMap->GetId(), wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TrackingWindow::OnMapSeeding) ); + m_pToggleSeedMap->Enable(false); wxBoxSizer *pBoxRow3 = new wxBoxSizer( wxHORIZONTAL ); - pBoxRow3->Add( m_pBtnSelectMap, 0, wxALIGN_CENTER | wxALL, 1 ); + pBoxRow3->Add( m_pBtnSelectSeed, 0, wxALIGN_CENTER | wxALL, 1 ); + pBoxRow3->Add( m_pToggleSeedMap, 0, wxALIGN_CENTER | wxALL, 1); m_pTrackingSizer->Add( pBoxRow3, 0, wxFIXED_MINSIZE | wxALL, 2 ); - m_pTextFA = new wxStaticText( this, wxID_ANY, wxT("Min Map"), wxPoint(0,90), wxSize(70, -1), wxALIGN_CENTER ); - m_pSliderFA = new MySlider( this, wxID_ANY, 0, 1, 50, wxPoint(60,90), wxSize(100, -1), wxSL_HORIZONTAL | wxSL_AUTOTICKS ); + m_pBtnSelectMap = new wxButton( this, wxID_ANY,wxT("Mask not selected"), wxPoint(30,90), wxSize(230, -1) ); + Connect( m_pBtnSelectMap->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TrackingWindow::OnSelectMask) ); + m_pBtnSelectMap->SetBackgroundColour(wxColour( 255, 147, 147 )); + + wxBoxSizer *pBoxRow4 = new wxBoxSizer( wxHORIZONTAL ); + pBoxRow4->Add( m_pBtnSelectMap, 0, wxALIGN_CENTER | wxALL, 1 ); + m_pTrackingSizer->Add( pBoxRow4, 0, wxFIXED_MINSIZE | wxALL, 2 ); + + m_pTextFA = new wxStaticText( this, wxID_ANY, wxT("Min Mask"), wxPoint(0,120), wxSize(70, -1), wxALIGN_CENTER ); + m_pSliderFA = new MySlider( this, wxID_ANY, 0, 1, 50, wxPoint(60,120), wxSize(100, -1), wxSL_HORIZONTAL | wxSL_AUTOTICKS ); m_pSliderFA->SetValue( 10 ); Connect( m_pSliderFA->GetId(), wxEVT_COMMAND_SLIDER_UPDATED, wxCommandEventHandler(TrackingWindow::OnSliderFAMoved) ); - m_pTxtFABox = new wxTextCtrl( this, wxID_ANY, wxT("0.10"), wxPoint(190,90), wxSize(55, -1), wxTE_CENTRE | wxTE_READONLY ); + m_pTxtFABox = new wxTextCtrl( this, wxID_ANY, wxT("0.10"), wxPoint(190,120), wxSize(55, -1), wxTE_CENTRE | wxTE_READONLY ); m_pTextFA->Enable(false); m_pSliderFA->Enable(false); m_pTxtFABox->Enable(false); - wxBoxSizer *pBoxRow4 = new wxBoxSizer( wxHORIZONTAL ); - pBoxRow4->Add( m_pTextFA, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL | wxALL, 1 ); - pBoxRow4->Add( m_pSliderFA, 0, wxALIGN_LEFT | wxEXPAND | wxALL, 1); - pBoxRow4->Add( m_pTxtFABox, 0, wxALIGN_LEFT | wxALL, 1); - m_pTrackingSizer->Add( pBoxRow4, 0, wxFIXED_MINSIZE | wxEXPAND, 0 ); + wxBoxSizer *pBoxRow5 = new wxBoxSizer( wxHORIZONTAL ); + pBoxRow5->Add( m_pTextFA, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL | wxALL, 1 ); + pBoxRow5->Add( m_pSliderFA, 0, wxALIGN_LEFT | wxEXPAND | wxALL, 1); + pBoxRow5->Add( m_pTxtFABox, 0, wxALIGN_LEFT | wxALL, 1); + m_pTrackingSizer->Add( pBoxRow5, 0, wxFIXED_MINSIZE | wxEXPAND, 0 ); - m_pTextAngle = new wxStaticText( this, wxID_ANY, wxT("Max angle"), wxPoint(0,120), wxSize(70, -1), wxALIGN_CENTER ); - m_pSliderAngle = new MySlider( this, wxID_ANY, 0, 1, 90, wxPoint(60,120), wxSize(100, -1), wxSL_HORIZONTAL | wxSL_AUTOTICKS ); + m_pTextAngle = new wxStaticText( this, wxID_ANY, wxT("Max angle"), wxPoint(0,150), wxSize(70, -1), wxALIGN_CENTER ); + m_pSliderAngle = new MySlider( this, wxID_ANY, 0, 1, 90, wxPoint(60,150), wxSize(100, -1), wxSL_HORIZONTAL | wxSL_AUTOTICKS ); m_pSliderAngle->SetValue( 35 ); Connect( m_pSliderAngle->GetId(), wxEVT_COMMAND_SLIDER_UPDATED, wxCommandEventHandler(TrackingWindow::OnSliderAngleMoved) ); - m_pTxtAngleBox = new wxTextCtrl( this, wxID_ANY, wxT("35.0 "), wxPoint(190,120), wxSize(55, -1), wxTE_CENTRE | wxTE_READONLY ); + m_pTxtAngleBox = new wxTextCtrl( this, wxID_ANY, wxT("35.0 "), wxPoint(190,150), wxSize(55, -1), wxTE_CENTRE | wxTE_READONLY ); - wxBoxSizer *pBoxRow5 = new wxBoxSizer( wxHORIZONTAL ); - pBoxRow5->Add( m_pTextAngle, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL | wxALL, 1 ); - pBoxRow5->Add( m_pSliderAngle, 0, wxALIGN_LEFT | wxEXPAND | wxALL, 1); - pBoxRow5->Add( m_pTxtAngleBox, 0, wxALIGN_LEFT | wxALL, 1); - m_pTrackingSizer->Add( pBoxRow5, 0, wxFIXED_MINSIZE | wxEXPAND, 0 ); + wxBoxSizer *pBoxRow6 = new wxBoxSizer( wxHORIZONTAL ); + pBoxRow6->Add( m_pTextAngle, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL | wxALL, 1 ); + pBoxRow6->Add( m_pSliderAngle, 0, wxALIGN_LEFT | wxEXPAND | wxALL, 1); + pBoxRow6->Add( m_pTxtAngleBox, 0, wxALIGN_LEFT | wxALL, 1); + m_pTrackingSizer->Add( pBoxRow6, 0, wxFIXED_MINSIZE | wxEXPAND, 0 ); - m_pTextStep = new wxStaticText( this, wxID_ANY, wxT("Step"), wxPoint(0,150), wxSize(70, -1), wxALIGN_CENTER ); - m_pSliderStep = new MySlider( this, wxID_ANY, 0, 5, 20, wxPoint(60,150), wxSize(100, -1), wxSL_HORIZONTAL | wxSL_AUTOTICKS ); + m_pTextStep = new wxStaticText( this, wxID_ANY, wxT("Step"), wxPoint(0,180), wxSize(70, -1), wxALIGN_CENTER ); + m_pSliderStep = new MySlider( this, wxID_ANY, 0, 5, 20, wxPoint(60,180), wxSize(100, -1), wxSL_HORIZONTAL | wxSL_AUTOTICKS ); m_pSliderStep->SetValue( 10 ); Connect( m_pSliderStep->GetId(), wxEVT_COMMAND_SLIDER_UPDATED, wxCommandEventHandler(TrackingWindow::OnSliderStepMoved) ); - m_pTxtStepBox = new wxTextCtrl( this, wxID_ANY, wxT("1.0 mm"), wxPoint(190,150), wxSize(55, -1), wxTE_CENTRE | wxTE_READONLY ); + m_pTxtStepBox = new wxTextCtrl( this, wxID_ANY, wxT("1.0 mm"), wxPoint(190,180), wxSize(55, -1), wxTE_CENTRE | wxTE_READONLY ); - wxBoxSizer *pBoxRow6 = new wxBoxSizer( wxHORIZONTAL ); - pBoxRow6->Add( m_pTextStep, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL | wxALL, 1 ); - pBoxRow6->Add( m_pSliderStep, 0, wxALIGN_LEFT | wxEXPAND | wxALL, 1); - pBoxRow6->Add( m_pTxtStepBox, 0, wxALIGN_LEFT | wxALL, 1); - m_pTrackingSizer->Add( pBoxRow6, 0, wxFIXED_MINSIZE | wxEXPAND, 0 ); + wxBoxSizer *pBoxRow7 = new wxBoxSizer( wxHORIZONTAL ); + pBoxRow7->Add( m_pTextStep, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL | wxALL, 1 ); + pBoxRow7->Add( m_pSliderStep, 0, wxALIGN_LEFT | wxEXPAND | wxALL, 1); + pBoxRow7->Add( m_pTxtStepBox, 0, wxALIGN_LEFT | wxALL, 1); + m_pTrackingSizer->Add( pBoxRow7, 0, wxFIXED_MINSIZE | wxEXPAND, 0 ); - m_pTextPuncture = new wxStaticText( this, wxID_ANY, wxT("Vin-Vout"), wxPoint(0,180), wxSize(70, -1), wxALIGN_CENTER ); - m_pSliderPuncture = new MySlider( this, wxID_ANY, 0, 1, 99, wxPoint(60,180), wxSize(100, -1), wxSL_HORIZONTAL | wxSL_AUTOTICKS ); + m_pTextPuncture = new wxStaticText( this, wxID_ANY, wxT("g"), wxPoint(0,210), wxSize(70, -1), wxALIGN_CENTER ); + m_pSliderPuncture = new MySlider( this, wxID_ANY, 0, 1, 99, wxPoint(60,210), wxSize(100, -1), wxSL_HORIZONTAL | wxSL_AUTOTICKS ); m_pSliderPuncture->SetValue( 20 ); Connect( m_pSliderPuncture->GetId(), wxEVT_COMMAND_SLIDER_UPDATED, wxCommandEventHandler(TrackingWindow::OnSliderPunctureMoved) ); - m_pTxtPunctureBox = new wxTextCtrl( this, wxID_ANY, wxT("0.20"), wxPoint(190,180), wxSize(55, -1), wxTE_CENTRE | wxTE_READONLY ); + m_pTxtPunctureBox = new wxTextCtrl( this, wxID_ANY, wxT("0.20"), wxPoint(190,210), wxSize(55, -1), wxTE_CENTRE | wxTE_READONLY ); - wxBoxSizer *pBoxRow7 = new wxBoxSizer( wxHORIZONTAL ); - pBoxRow7->Add( m_pTextPuncture, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL | wxALL, 1 ); - pBoxRow7->Add( m_pSliderPuncture, 0, wxALIGN_LEFT | wxEXPAND | wxALL, 1); - pBoxRow7->Add( m_pTxtPunctureBox, 0, wxALIGN_LEFT | wxALL, 1); - m_pTrackingSizer->Add( pBoxRow7, 0, wxFIXED_MINSIZE | wxEXPAND, 0 ); + wxBoxSizer *pBoxRow8 = new wxBoxSizer( wxHORIZONTAL ); + pBoxRow8->Add( m_pTextPuncture, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL | wxALL, 1 ); + pBoxRow8->Add( m_pSliderPuncture, 0, wxALIGN_LEFT | wxEXPAND | wxALL, 1); + pBoxRow8->Add( m_pTxtPunctureBox, 0, wxALIGN_LEFT | wxALL, 1); + m_pTrackingSizer->Add( pBoxRow8, 0, wxFIXED_MINSIZE | wxEXPAND, 0 ); - m_pTextMinLength = new wxStaticText( this, wxID_ANY, wxT("Min length"), wxPoint(0,210), wxSize(70, -1), wxALIGN_CENTER ); - m_pSliderMinLength = new MySlider( this, wxID_ANY, 0, 0, 400, wxPoint(60,210), wxSize(100, -1), wxSL_HORIZONTAL | wxSL_AUTOTICKS ); + m_pTextMinLength = new wxStaticText( this, wxID_ANY, wxT("Min length"), wxPoint(0,240), wxSize(70, -1), wxALIGN_CENTER ); + m_pSliderMinLength = new MySlider( this, wxID_ANY, 0, 0, 400, wxPoint(60,240), wxSize(100, -1), wxSL_HORIZONTAL | wxSL_AUTOTICKS ); m_pSliderMinLength->SetValue( 10 ); Connect( m_pSliderMinLength->GetId(), wxEVT_COMMAND_SLIDER_UPDATED, wxCommandEventHandler(TrackingWindow::OnSliderMinLengthMoved) ); - m_pTxtMinLengthBox = new wxTextCtrl( this, wxID_ANY, wxT("10 mm"), wxPoint(190,210), wxSize(55, -1), wxTE_CENTRE | wxTE_READONLY ); + m_pTxtMinLengthBox = new wxTextCtrl( this, wxID_ANY, wxT("10 mm"), wxPoint(190,240), wxSize(55, -1), wxTE_CENTRE | wxTE_READONLY ); - wxBoxSizer *pBoxRow8 = new wxBoxSizer( wxHORIZONTAL ); - pBoxRow8->Add( m_pTextMinLength, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL | wxALL, 1 ); - pBoxRow8->Add( m_pSliderMinLength, 0, wxALIGN_LEFT | wxEXPAND | wxALL, 1); - pBoxRow8->Add( m_pTxtMinLengthBox, 0, wxALIGN_LEFT | wxALL, 1); - m_pTrackingSizer->Add( pBoxRow8, 0, wxFIXED_MINSIZE | wxEXPAND, 0 ); + wxBoxSizer *pBoxRow9 = new wxBoxSizer( wxHORIZONTAL ); + pBoxRow9->Add( m_pTextMinLength, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL | wxALL, 1 ); + pBoxRow9->Add( m_pSliderMinLength, 0, wxALIGN_LEFT | wxEXPAND | wxALL, 1); + pBoxRow9->Add( m_pTxtMinLengthBox, 0, wxALIGN_LEFT | wxALL, 1); + m_pTrackingSizer->Add( pBoxRow9, 0, wxFIXED_MINSIZE | wxEXPAND, 0 ); - m_pTextMaxLength = new wxStaticText( this, wxID_ANY, wxT("Max length"), wxPoint(0,240), wxSize(70, -1), wxALIGN_CENTER ); - m_pSliderMaxLength = new MySlider( this, wxID_ANY, 0, 0, 300, wxPoint(60,240), wxSize(100, -1), wxSL_HORIZONTAL | wxSL_AUTOTICKS ); + m_pTextMaxLength = new wxStaticText( this, wxID_ANY, wxT("Max length"), wxPoint(0,270), wxSize(70, -1), wxALIGN_CENTER ); + m_pSliderMaxLength = new MySlider( this, wxID_ANY, 0, 0, 300, wxPoint(60,270), wxSize(100, -1), wxSL_HORIZONTAL | wxSL_AUTOTICKS ); m_pSliderMaxLength->SetValue( 200 ); Connect( m_pSliderMaxLength->GetId(), wxEVT_COMMAND_SLIDER_UPDATED, wxCommandEventHandler(TrackingWindow::OnSliderMaxLengthMoved) ); - m_pTxtMaxLengthBox = new wxTextCtrl( this, wxID_ANY, wxT("200 mm"), wxPoint(190,240), wxSize(55, -1), wxTE_CENTRE | wxTE_READONLY ); + m_pTxtMaxLengthBox = new wxTextCtrl( this, wxID_ANY, wxT("200 mm"), wxPoint(190,270), wxSize(55, -1), wxTE_CENTRE | wxTE_READONLY ); - wxBoxSizer *pBoxRow9 = new wxBoxSizer( wxHORIZONTAL ); - pBoxRow9->Add( m_pTextMaxLength, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL | wxALL, 1 ); - pBoxRow9->Add( m_pSliderMaxLength, 0, wxALIGN_LEFT | wxEXPAND | wxALL, 1); - pBoxRow9->Add( m_pTxtMaxLengthBox, 0, wxALIGN_LEFT | wxALL, 1); - m_pTrackingSizer->Add( pBoxRow9, 0, wxFIXED_MINSIZE | wxEXPAND, 0 ); + wxBoxSizer *pBoxRow10 = new wxBoxSizer( wxHORIZONTAL ); + pBoxRow10->Add( m_pTextMaxLength, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL | wxALL, 1 ); + pBoxRow10->Add( m_pSliderMaxLength, 0, wxALIGN_LEFT | wxEXPAND | wxALL, 1); + pBoxRow10->Add( m_pTxtMaxLengthBox, 0, wxALIGN_LEFT | wxALL, 1); + m_pTrackingSizer->Add( pBoxRow10, 0, wxFIXED_MINSIZE | wxEXPAND, 0 ); // //wxToggleButton *m_pToggleRandom = new wxToggleButton( this, wxID_ANY,wxT("Use random seeds"), wxPoint(50,240), wxSize(140, -1) ); // //Connect( m_pToggleRandom->GetId(), wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TrackingWindow::OnRandomSeeding) ); @@ -249,35 +261,35 @@ TrackingWindow::TrackingWindow( wxWindow *pParent, MainFrame *pMf, wxWindowID id // //wxToggleButton *m_pToggleInterp = new wxToggleButton( m_pTrackingWindow, wxID_ANY,wxT("Interpolation"), wxPoint(0,270), wxSize(140, -1) ); // //m_pTrackingWindow->Connect( m_pToggleInterp->GetId(), wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TrackingWindow::OnInterpolate) ); - m_pTextAxisSeedNb = new wxStaticText( this, wxID_ANY, wxT("Seed/axis"), wxPoint(0,270), wxSize(70, -1), wxALIGN_CENTER ); - m_pSliderAxisSeedNb = new MySlider( this, wxID_ANY, 0, 1, 15, wxPoint(60,270), wxSize(100, -1), wxSL_HORIZONTAL | wxSL_AUTOTICKS ); + m_pTextAxisSeedNb = new wxStaticText( this, wxID_ANY, wxT("Seed/axis"), wxPoint(0,300), wxSize(70, -1), wxALIGN_CENTER ); + m_pSliderAxisSeedNb = new MySlider( this, wxID_ANY, 0, 1, 15, wxPoint(60,300), wxSize(100, -1), wxSL_HORIZONTAL | wxSL_AUTOTICKS ); m_pSliderAxisSeedNb->SetValue( 10 ); Connect( m_pSliderAxisSeedNb->GetId(), wxEVT_COMMAND_SLIDER_UPDATED, wxCommandEventHandler(TrackingWindow::OnSliderAxisSeedNbMoved) ); - m_pTxtAxisSeedNbBox = new wxTextCtrl( this, wxID_ANY, wxT("10"), wxPoint(190,270), wxSize(55, -1), wxTE_CENTRE | wxTE_READONLY ); + m_pTxtAxisSeedNbBox = new wxTextCtrl( this, wxID_ANY, wxT("10"), wxPoint(190,300), wxSize(55, -1), wxTE_CENTRE | wxTE_READONLY ); - wxBoxSizer *pBoxRow10 = new wxBoxSizer( wxHORIZONTAL ); - pBoxRow10->Add( m_pTextAxisSeedNb, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL | wxALL, 1 ); - pBoxRow10->Add( m_pSliderAxisSeedNb, 0, wxALIGN_LEFT | wxEXPAND | wxALL, 1); - pBoxRow10->Add( m_pTxtAxisSeedNbBox, 0, wxALIGN_LEFT | wxALL, 1); - m_pTrackingSizer->Add( pBoxRow10, 0, wxFIXED_MINSIZE | wxEXPAND, 0 ); + wxBoxSizer *pBoxRow11 = new wxBoxSizer( wxHORIZONTAL ); + pBoxRow11->Add( m_pTextAxisSeedNb, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL | wxALL, 1 ); + pBoxRow11->Add( m_pSliderAxisSeedNb, 0, wxALIGN_LEFT | wxEXPAND | wxALL, 1); + pBoxRow11->Add( m_pTxtAxisSeedNbBox, 0, wxALIGN_LEFT | wxALL, 1); + m_pTrackingSizer->Add( pBoxRow11, 0, wxFIXED_MINSIZE | wxEXPAND, 0 ); - m_pTextTotalSeedNb = new wxStaticText( this, wxID_ANY, wxT("Number of current seeds"), wxPoint(7,300), wxSize(170, -1), wxALIGN_LEFT ); - m_pTxtTotalSeedNbBox = new wxTextCtrl( this, wxID_ANY, wxT("1000"), wxPoint(190,300), wxSize(55, -1), wxTE_CENTRE | wxTE_READONLY ); + m_pTextTotalSeedNb = new wxStaticText( this, wxID_ANY, wxT("Number of current seeds"), wxPoint(7,330), wxSize(170, -1), wxALIGN_LEFT ); + m_pTxtTotalSeedNbBox = new wxTextCtrl( this, wxID_ANY, wxT("1000"), wxPoint(190,330), wxSize(55, -1), wxTE_CENTRE | wxTE_READONLY ); - wxBoxSizer *pBoxRow11 = new wxBoxSizer( wxHORIZONTAL ); - pBoxRow11->Add( m_pTextTotalSeedNb, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL | wxALL, 1 ); - pBoxRow11->Add( m_pTxtTotalSeedNbBox, 0, wxALIGN_LEFT | wxALL, 1); - m_pTrackingSizer->Add( pBoxRow11, 0, wxFIXED_MINSIZE | wxEXPAND, 0 ); + wxBoxSizer *pBoxRow12 = new wxBoxSizer( wxHORIZONTAL ); + pBoxRow12->Add( m_pTextTotalSeedNb, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL | wxALL, 1 ); + pBoxRow12->Add( m_pTxtTotalSeedNbBox, 0, wxALIGN_LEFT | wxALL, 1); + m_pTrackingSizer->Add( pBoxRow12, 0, wxFIXED_MINSIZE | wxEXPAND, 0 ); - m_pBtnConvert = new wxButton( this, wxID_ANY,wxT("Convert Fibers"), wxPoint(50,330), wxSize(230, 30) ); + m_pBtnConvert = new wxButton( this, wxID_ANY,wxT("Convert Fibers"), wxPoint(50,350), wxSize(230, 30) ); Connect( m_pBtnConvert->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TrackingWindow::OnConvertToFibers) ); m_pTrackingSizer->Add( m_pBtnConvert, 0, wxALL, 2 ); /*-----------------------ANIMATION SECTION -----------------------------------*/ - m_pLineSeparator = new wxStaticLine( this, wxID_ANY, wxPoint(0,370), wxSize(230,-1),wxHORIZONTAL,wxT("Separator")); + m_pLineSeparator = new wxStaticLine( this, wxID_ANY, wxPoint(0,390), wxSize(230,-1),wxHORIZONTAL,wxT("Separator")); - wxTextCtrl *animationZone = new wxTextCtrl( this, wxID_ANY, wxT("Animation"), wxPoint(50,380), wxSize(150, -1), wxTE_CENTER | wxTE_READONLY ); + wxTextCtrl *animationZone = new wxTextCtrl( this, wxID_ANY, wxT("Animation"), wxPoint(50,400), wxSize(150, -1), wxTE_CENTER | wxTE_READONLY ); animationZone->SetBackgroundColour( *wxLIGHT_GREY ); wxFont font = animationZone->GetFont(); font.SetPointSize( 10 ); @@ -294,10 +306,10 @@ TrackingWindow::TrackingWindow( wxWindow *pParent, MainFrame *pMf, wxWindowID id wxImage bmpStop(MyApp::iconsPath+ wxT("stop.png"), wxBITMAP_TYPE_PNG); - m_pPlayPause = new wxBitmapButton( this, wxID_ANY,m_bmpPlay, wxPoint(50,410), wxSize(50, -1) ); + m_pPlayPause = new wxBitmapButton( this, wxID_ANY,m_bmpPlay, wxPoint(50,440), wxSize(50, -1) ); Connect( m_pPlayPause->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TrackingWindow::OnPlay) ); - m_pBtnStop = new wxBitmapButton( this, wxID_ANY, bmpStop, wxPoint(100,410), wxSize(50, -1) ); + m_pBtnStop = new wxBitmapButton( this, wxID_ANY, bmpStop, wxPoint(100,440), wxSize(50, -1) ); Connect( m_pBtnStop->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TrackingWindow::OnStop) ); wxBoxSizer *pBoxRowAnim = new wxBoxSizer( wxHORIZONTAL ); @@ -523,7 +535,71 @@ void TrackingWindow::OnSelectShell( wxCommandEvent& WXUNUSED(event) ) } } -void TrackingWindow::OnSelectMap( wxCommandEvent& WXUNUSED(event) ) +void TrackingWindow::OnSelectSeedMap( wxCommandEvent& WXUNUSED(event) ) +{ + //Select map for threshold seeding + long item = m_pMainFrame->getCurrentListIndex(); + Anatomy* pSeedMap = (Anatomy*)DatasetManager::getInstance()->getDataset (MyApp::frame->m_pListCtrl->GetItem( item )); + + if( pSeedMap != NULL && pSeedMap->getBands() == 1 ) + { + m_pBtnSelectSeed->SetLabel( pSeedMap->getName() ); + m_pMainFrame->m_pMainGL->m_pRealTimeFibers->setSeedMapInfo( (Anatomy *)DatasetManager::getInstance()->getDataset( m_pMainFrame->m_pListCtrl->GetItem( item ) ) ); + + m_pToggleSeedMap->Enable(true); + m_pToggleSeedMap->SetValue(true); + + RTTrackingHelper::getInstance()->toggleSeedMap(); + RTTrackingHelper::getInstance()->setRTTDirty( true ); + float sliderValue = m_pSliderAxisSeedNb->GetValue(); + + //Set nb of seeds depending on the seeding mode + if( !RTTrackingHelper::getInstance()->isSeedMap() ) + { + m_pSliderAxisSeedNb->SetValue( sliderValue ); + m_pTxtTotalSeedNbBox->SetValue(wxString::Format( wxT( "%.1f"), sliderValue*sliderValue*sliderValue) ); + m_pToggleSeedMap->SetLabel(wxT("Seed map OFF")); + } + else + { + m_pSliderAxisSeedNb->SetValue( 1 ); + m_pTxtAxisSeedNbBox->SetValue(wxString::Format( wxT( "%.1f"), 1.0f) ); + m_pMainFrame->m_pMainGL->m_pRealTimeFibers->setNbSeed( 1 ); + float seedMapNb = m_pMainFrame->m_pMainGL->m_pRealTimeFibers->getSeedMapNb(); + m_pTxtTotalSeedNbBox->SetValue(wxString::Format( wxT( "%.1f"), seedMapNb) ); + m_pToggleSeedMap->SetLabel(wxT( "Seed map ON")); + } + } +} + +void TrackingWindow::OnMapSeeding( wxCommandEvent& WXUNUSED(event) ) +{ + RTTrackingHelper::getInstance()->toggleSeedMap(); + RTTrackingHelper::getInstance()->setRTTDirty( true ); + float sliderValue = m_pSliderAxisSeedNb->GetValue(); + m_pBtnStart->Enable( true ); + + //Set nb of seeds depending on the seeding mode + if( !RTTrackingHelper::getInstance()->isSeedMap() ) + { + m_pSliderAxisSeedNb->SetValue( 10 ); + m_pTxtTotalSeedNbBox->SetValue(wxString::Format( wxT( "%.1f"), 1000.0f) ); + m_pMainFrame->m_pMainGL->m_pRealTimeFibers->setNbSeed( 1000.0f ); + m_pTxtAxisSeedNbBox->SetValue( wxString::Format( wxT( "%.1f"), 10.0f) ); + m_pToggleSeedMap->SetLabel(wxT( "Seed map OFF")); + } + else + { + m_pSliderAxisSeedNb->SetValue( 1 ); + m_pTxtAxisSeedNbBox->SetValue(wxString::Format( wxT( "%.1f"), 1.0f) ); + m_pMainFrame->m_pMainGL->m_pRealTimeFibers->setNbSeed( 1 ); + float seedMapNb = m_pMainFrame->m_pMainGL->m_pRealTimeFibers->getSeedMapNb(); + m_pTxtTotalSeedNbBox->SetValue(wxString::Format( wxT( "%.1f"), seedMapNb) ); + m_pToggleSeedMap->SetLabel(wxT( "Seed map ON")); + } +} + +void TrackingWindow::OnSelectMask( wxCommandEvent& WXUNUSED(event) ) { //Select map for threshold seeding long item = m_pMainFrame->getCurrentListIndex(); @@ -533,7 +609,7 @@ void TrackingWindow::OnSelectMap( wxCommandEvent& WXUNUSED(event) ) { m_pBtnSelectMap->SetLabel( pMap->getName() ); m_pBtnSelectMap->SetBackgroundColour(wxNullColour); - m_pMainFrame->m_pMainGL->m_pRealTimeFibers->setMapInfo( (Anatomy *)DatasetManager::getInstance()->getDataset( m_pMainFrame->m_pListCtrl->GetItem( item ) ) ); + m_pMainFrame->m_pMainGL->m_pRealTimeFibers->setMaskInfo( (Anatomy *)DatasetManager::getInstance()->getDataset( m_pMainFrame->m_pListCtrl->GetItem( item ) ) ); m_pTextFA->Enable(true); m_pSliderFA->Enable(true); m_pTxtFABox->Enable(true); diff --git a/src/gui/TrackingWindow.h b/src/gui/TrackingWindow.h index a07f38e2..b8ac0d32 100644 --- a/src/gui/TrackingWindow.h +++ b/src/gui/TrackingWindow.h @@ -44,13 +44,15 @@ class TrackingWindow: public wxScrolledWindow void OnSelectFileHARDI ( wxCommandEvent& event ); void OnRandomSeeding ( wxCommandEvent& event ); void OnShellSeeding ( wxCommandEvent& event ); - void OnSelectMap ( wxCommandEvent& event ); + void OnSelectMask ( wxCommandEvent& event ); void OnInterpolate ( wxCommandEvent& event ); void OnSliderPunctureMoved ( wxCommandEvent& event ); void OnSliderMinLengthMoved ( wxCommandEvent& event ); void OnSliderMaxLengthMoved ( wxCommandEvent& event ); void OnConvertToFibers ( wxCommandEvent& event ); void OnSliderAxisSeedNbMoved ( wxCommandEvent& event ); + void OnMapSeeding ( wxCommandEvent& event ); + void OnSelectSeedMap ( wxCommandEvent& event ); void OnPlay ( wxCommandEvent& event ); void OnStop ( wxCommandEvent& event ); @@ -77,6 +79,8 @@ class TrackingWindow: public wxScrolledWindow wxButton *m_pBtnSelectFile; wxButton *m_pBtnSelectShell; wxToggleButton *m_pToggleShell; + wxButton *m_pBtnSelectSeed; + wxToggleButton *m_pToggleSeedMap; wxButton *m_pBtnSelectMap; wxStaticText *m_pTextMinLength; wxSlider *m_pSliderMinLength; From 6feda93e6c90491925bc28b2aa7a0f6677939b02 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 19 Jul 2013 15:59:45 -0400 Subject: [PATCH 2/6] Now working quite well. Bug to fix: Turn OFF map Seeding crash, and check when selecting another map, the number of voxels is erroneous --- src/dataset/RTTFibers.cpp | 12 ++++++------ src/dataset/RTTrackingHelper.h | 2 ++ src/gui/TrackingWindow.cpp | 11 ++++++++--- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/dataset/RTTFibers.cpp b/src/dataset/RTTFibers.cpp index 4b8c7ca8..eb94890f 100644 --- a/src/dataset/RTTFibers.cpp +++ b/src/dataset/RTTFibers.cpp @@ -197,12 +197,12 @@ void RTTFibers::seed() { Vector val = m_pSeedMap[s]; - minCorner.x = val.x * xVoxel / 2.0f; - minCorner.y = val.y * yVoxel / 2.0f; - minCorner.z = val.z * zVoxel / 2.0f; - maxCorner.x = val.x * xVoxel / 2.0f + xVoxel; - maxCorner.y = val.y * yVoxel / 2.0f + yVoxel; - maxCorner.z = val.z * zVoxel / 2.0f + zVoxel; + minCorner.x = val.x * xVoxel; + minCorner.y = val.y * yVoxel; + minCorner.z = val.z * zVoxel; + maxCorner.x = val.x * xVoxel + xVoxel; + maxCorner.y = val.y * yVoxel + yVoxel; + maxCorner.z = val.z * zVoxel + zVoxel; float xstep = xVoxel / float( m_nbSeed - 1.0f ); float ystep = yVoxel / float( m_nbSeed - 1.0f ); diff --git a/src/dataset/RTTrackingHelper.h b/src/dataset/RTTrackingHelper.h index cd0a276a..36fe98d1 100644 --- a/src/dataset/RTTrackingHelper.h +++ b/src/dataset/RTTrackingHelper.h @@ -32,6 +32,8 @@ class RTTrackingHelper bool isTrackActionPaused() const { return m_isPaused;} void setTrackAction(bool enabled) {m_isTrackActionPlaying = enabled;} void setTrackActionPause(bool paused) {m_isPaused = paused;} + void setShellSeed(bool enabled) {m_isShellSeeds = enabled;} + void setSeedMap(bool enabled) {m_isSeedMap = enabled;} protected: diff --git a/src/gui/TrackingWindow.cpp b/src/gui/TrackingWindow.cpp index 8bbab811..e13a0186 100644 --- a/src/gui/TrackingWindow.cpp +++ b/src/gui/TrackingWindow.cpp @@ -516,7 +516,7 @@ void TrackingWindow::OnSelectShell( wxCommandEvent& WXUNUSED(event) ) m_pToggleShell->Enable(true); m_pToggleShell->SetValue(true); - RTTrackingHelper::getInstance()->toggleShellSeeds(); + RTTrackingHelper::getInstance()->setShellSeed(true); RTTrackingHelper::getInstance()->setRTTDirty( true ); float sliderValue = m_pSliderAxisSeedNb->GetValue(); @@ -549,7 +549,7 @@ void TrackingWindow::OnSelectSeedMap( wxCommandEvent& WXUNUSED(event) ) m_pToggleSeedMap->Enable(true); m_pToggleSeedMap->SetValue(true); - RTTrackingHelper::getInstance()->toggleSeedMap(); + RTTrackingHelper::getInstance()->setSeedMap(true); RTTrackingHelper::getInstance()->setRTTDirty( true ); float sliderValue = m_pSliderAxisSeedNb->GetValue(); @@ -662,10 +662,15 @@ void TrackingWindow::OnSliderAxisSeedNbMoved( wxCommandEvent& WXUNUSED(event) ) m_pMainFrame->m_pMainGL->m_pRealTimeFibers->setNbSeed( sliderValue ); m_pTxtAxisSeedNbBox->SetValue(wxString::Format( wxT( "%.1f"), sliderValue) ); - if( !RTTrackingHelper::getInstance()->isShellSeeds() ) + if( !RTTrackingHelper::getInstance()->isShellSeeds() && !RTTrackingHelper::getInstance()->isSeedMap()) { m_pTxtTotalSeedNbBox->SetValue(wxString::Format( wxT( "%.1f"), sliderValue*sliderValue*sliderValue) ); } + else if( RTTrackingHelper::getInstance()->isSeedMap()) + { + float mapSeedNb = m_pMainFrame->m_pMainGL->m_pRealTimeFibers->getSeedMapNb(); + m_pTxtTotalSeedNbBox->SetValue(wxString::Format( wxT( "%.1f"), mapSeedNb) ); + } else { float shellSeedNb = m_pMainFrame->m_pMainGL->m_pRealTimeFibers->getNbMeshPoint(); From c1609dcb4175716c9130da29d7088e616910786c Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 22 Jul 2013 10:47:35 -0400 Subject: [PATCH 3/6] Added new functionality to work on: Drawctography. Fibers now appears when drawing on anatomy in a real-time fashion --- src/dataset/RTTFibers.cpp | 11 +++++++++++ src/dataset/RTTFibers.h | 1 + src/gui/MainCanvas.cpp | 14 ++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/src/dataset/RTTFibers.cpp b/src/dataset/RTTFibers.cpp index eb94890f..b937f370 100644 --- a/src/dataset/RTTFibers.cpp +++ b/src/dataset/RTTFibers.cpp @@ -103,6 +103,17 @@ float RTTFibers::getShellSeedNb() } return pts; } + +void RTTFibers::insert(std::vector pointsF, std::vector pointsB, std::vector colorF, std::vector colorB) +{ + if( (pointsF.size() + pointsB.size()) * getStep() > getMinFiberLength() && (pointsF.size() + pointsB.size()) * getStep() < getMaxFiberLength() ) + { + m_fibersRTT.push_back( pointsF ); + m_colorsRTT.push_back( colorF ); + m_fibersRTT.push_back( pointsB ); + m_colorsRTT.push_back( colorB ); + } +} /////////////////////////////////////////////////////////////////////////// // Returns the nb of seeds for Map seeding /////////////////////////////////////////////////////////////////////////// diff --git a/src/dataset/RTTFibers.h b/src/dataset/RTTFibers.h index 0c66a669..53a53327 100644 --- a/src/dataset/RTTFibers.h +++ b/src/dataset/RTTFibers.h @@ -68,6 +68,7 @@ class RTTFibers float getVinVout() { return m_vinvout; } float getMinFiberLength() { return m_minFiberLength; } float getMaxFiberLength() { return m_maxFiberLength; } + void insert(std::vector pointsF, std::vector pointsB, std::vector colorF, std::vector colorB); bool isHardiSelected() { return m_isHARDI;} diff --git a/src/gui/MainCanvas.cpp b/src/gui/MainCanvas.cpp index 5dcb2d11..a3f9a375 100644 --- a/src/gui/MainCanvas.cpp +++ b/src/gui/MainCanvas.cpp @@ -1193,7 +1193,21 @@ void MainCanvas::drawOnAnatomy() if( DRAWMODE_PEN == MyApp::frame->getDrawMode() ) { + float x = xClick * DatasetManager::getInstance()->getVoxelX() ; + float y = yClick * DatasetManager::getInstance()->getVoxelY() ; + float z = zClick * DatasetManager::getInstance()->getVoxelZ() ; + l_currentAnatomy->writeVoxel(xClick, yClick, zClick, layer, MyApp::frame->getDrawSize(), MyApp::frame->canDrawRound(), MyApp::frame->canDraw3D(), MyApp::frame->getDrawColor() ); + vector pointsF; // Points to be rendered Forward + vector colorF; //Color (local directions)Forward + vector pointsB; // Points to be rendered Backward + vector colorB; //Color (local directions) Backward + m_pRealTimeFibers->performHARDIRTT(Vector(x,y,z),1,pointsF,colorF); + m_pRealTimeFibers->performHARDIRTT(Vector(x,y,z),-1,pointsB,colorB); + m_pRealTimeFibers->insert(pointsF, pointsB, colorF, colorB); + m_pRealTimeFibers->renderRTTFibers(false); + RTTrackingHelper::getInstance()->setRTTDirty( true ); + } else if( DRAWMODE_ERASER == MyApp::frame->getDrawMode() ) { From 80ec8b3bb3ba336b5ba0c8461a1a3e78a8a02a57 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 22 Jul 2013 12:40:33 -0400 Subject: [PATCH 4/6] Fixed a bug that occured when Map Seeding was turned off. The number of seed per axis is now reset to its default value --- src/gui/MainCanvas.cpp | 18 +++++++++--------- src/gui/TrackingWindow.cpp | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/gui/MainCanvas.cpp b/src/gui/MainCanvas.cpp index a3f9a375..9155721c 100644 --- a/src/gui/MainCanvas.cpp +++ b/src/gui/MainCanvas.cpp @@ -1198,15 +1198,15 @@ void MainCanvas::drawOnAnatomy() float z = zClick * DatasetManager::getInstance()->getVoxelZ() ; l_currentAnatomy->writeVoxel(xClick, yClick, zClick, layer, MyApp::frame->getDrawSize(), MyApp::frame->canDrawRound(), MyApp::frame->canDraw3D(), MyApp::frame->getDrawColor() ); - vector pointsF; // Points to be rendered Forward - vector colorF; //Color (local directions)Forward - vector pointsB; // Points to be rendered Backward - vector colorB; //Color (local directions) Backward - m_pRealTimeFibers->performHARDIRTT(Vector(x,y,z),1,pointsF,colorF); - m_pRealTimeFibers->performHARDIRTT(Vector(x,y,z),-1,pointsB,colorB); - m_pRealTimeFibers->insert(pointsF, pointsB, colorF, colorB); - m_pRealTimeFibers->renderRTTFibers(false); - RTTrackingHelper::getInstance()->setRTTDirty( true ); + //vector pointsF; // Points to be rendered Forward + //vector colorF; //Color (local directions)Forward + //vector pointsB; // Points to be rendered Backward + //vector colorB; //Color (local directions) Backward + //m_pRealTimeFibers->performHARDIRTT(Vector(x,y,z),1,pointsF,colorF); + //m_pRealTimeFibers->performHARDIRTT(Vector(x,y,z),-1,pointsB,colorB); + //m_pRealTimeFibers->insert(pointsF, pointsB, colorF, colorB); + //m_pRealTimeFibers->renderRTTFibers(false); + //RTTrackingHelper::getInstance()->setRTTDirty( true ); } else if( DRAWMODE_ERASER == MyApp::frame->getDrawMode() ) diff --git a/src/gui/TrackingWindow.cpp b/src/gui/TrackingWindow.cpp index e13a0186..66d11dc1 100644 --- a/src/gui/TrackingWindow.cpp +++ b/src/gui/TrackingWindow.cpp @@ -584,8 +584,8 @@ void TrackingWindow::OnMapSeeding( wxCommandEvent& WXUNUSED(event) ) { m_pSliderAxisSeedNb->SetValue( 10 ); m_pTxtTotalSeedNbBox->SetValue(wxString::Format( wxT( "%.1f"), 1000.0f) ); - m_pMainFrame->m_pMainGL->m_pRealTimeFibers->setNbSeed( 1000.0f ); - m_pTxtAxisSeedNbBox->SetValue( wxString::Format( wxT( "%.1f"), 10.0f) ); + m_pMainFrame->m_pMainGL->m_pRealTimeFibers->setNbSeed( 10 ); + m_pTxtAxisSeedNbBox->SetValue( wxString::Format( wxT( "%.1f"), 10.0f) ); m_pToggleSeedMap->SetLabel(wxT( "Seed map OFF")); } else From 8d9d22333641ee12a20ff27f44a8ef2495631a47 Mon Sep 17 00:00:00 2001 From: chamberm Date: Wed, 24 Jul 2013 15:11:15 -0400 Subject: [PATCH 5/6] Select alternate seed map now works fine. Also, cleared some comments in trackinWindow and RTTFiber. Issues 79 and 93 will be closed by this. --- src/dataset/RTTFibers.cpp | 327 +------------------------------------ src/dataset/RTTFibers.h | 48 ------ src/gui/TrackingWindow.cpp | 48 ------ 3 files changed, 1 insertion(+), 422 deletions(-) diff --git a/src/dataset/RTTFibers.cpp b/src/dataset/RTTFibers.cpp index b937f370..e8a73d5b 100644 --- a/src/dataset/RTTFibers.cpp +++ b/src/dataset/RTTFibers.cpp @@ -41,13 +41,11 @@ RTTFibers::RTTFibers() m_trackActionStep(std::numeric_limits::max()), m_timerStep( 0 ) { - //GPGPU - writeTex = 0; - readTex = 1; } void RTTFibers::setSeedMapInfo(Anatomy *info) { + m_pSeedMap.clear(); m_pSeedMapInfo = info; if( m_pSeedMapInfo != NULL ) { @@ -193,10 +191,6 @@ void RTTFibers::seed() m_fibersRTT.push_back( pointsB ); m_colorsRTT.push_back( colorB ); } - - //glColor3f(1,0,0); - //SceneManager::getInstance()->getScene()->drawSphere( x, y ,z, 0.2 ); - } } } @@ -250,10 +244,6 @@ void RTTFibers::seed() m_fibersRTT.push_back( pointsB ); m_colorsRTT.push_back( colorB ); } - - //glColor3f(1,0,0); - //SceneManager::getInstance()->getScene()->drawSphere( x, y ,z, 0.2 ); - } } } @@ -1008,321 +998,6 @@ void RTTFibers::performHARDIRTT(Vector seed, int bwdfwd, vector& points, } } -/////////////////////////////////////////////////////////////////////////// -////////////// GPU-GPU SECTION - NOT IMPLEMENTED /////////////////////// -/////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////// -// GPGPU: Init FBO -/////////////////////////////////////////////////////////////////////////// -void RTTFibers::initFBO() -{ - // create FBO (off-screen framebuffer) - glGenFramebuffersEXT(1, &fb); - // bind offscreen framebuffer (that is, skip the window-specific render target) - glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb); - - //BUG IS HERE - - //glGetIntegerv( GL_VIEWPORT,m_pDatasetHelper->m_mainFrame->m_pMainGL->m_viewport ); - //viewport for 1:1 pixel=texture mapping - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, texSize, 0, texSize); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glViewport(0, 0, texSize, texSize); -} - -/////////////////////////////////////////////////////////////////////////// -// GPGPU: Create Textures -/////////////////////////////////////////////////////////////////////////// -void RTTFibers::createTextures(void) -{ - // create textures - // y gets two textures, alternatingly read-only and write-only, - // x is just read-only - glGenTextures (2, yTexID); - glGenTextures (1, &xTexID); - // set up textures - setupTexture (yTexID[readTex]); - transferToTexture(seeds,yTexID[readTex]); - setupTexture (yTexID[writeTex]); - transferToTexture(seeds,yTexID[writeTex]); - - setupTexture (xTexID); - transferToTexture(xValues,xTexID); - // set texenv mode from modulate (the default) to replace - glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - - // check if something went completely wrong - checkGLErrors ("createFBOandTextures()"); -} - -/////////////////////////////////////////////////////////////////////////// -// GPGPU: Computation -/////////////////////////////////////////////////////////////////////////// -void RTTFibers::performComputation(void) -{ - // attach two textures to FBO - glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, attachmentpoints[writeTex], GL_TEXTURE_RECTANGLE_ARB, yTexID[writeTex], 0); - glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, attachmentpoints[readTex], GL_TEXTURE_RECTANGLE_ARB, yTexID[readTex], 0); - // check if that worked - if (!checkFramebufferStatus()) - { - printf("glFramebufferTexture2DEXT():\t [FAIL]\n"); - exit (-5); - } - - // enable GLSL program - ShaderHelper::getInstance()->getRTTShader()->bind(); - - glActiveTexture(GL_TEXTURE1); - glBindTexture(GL_TEXTURE_RECTANGLE_ARB,xTexID); - ShaderHelper::getInstance()->getRTTShader()->setUniSampler("xValues", 1); - glFinish(); - - for (int i=0; i<1; i++) - { - // set render destination - glDrawBuffer (attachmentpoints[writeTex]); - // enable texture y_old (read-only) - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_RECTANGLE_ARB,yTexID[readTex]); - - - ShaderHelper::getInstance()->getRTTShader()->setUniSampler("inSeed", 0); - ShaderHelper::getInstance()->getRTTShader()->setUniInt("color", 1); - // and render multitextured viewport-sized quad - // depending on the texture target, switch between - // normalised ([0,1]^2) and unnormalised ([0,w]x[0,h]) - // texture coordinates - - // make quad filled to hit every pixel/texel - // (should be default but we never know) - glPolygonMode(GL_FRONT,GL_FILL); - - // render with unnormalized texcoords - glBegin(GL_QUADS); - glTexCoord2f(0.0, 0.0); - glVertex2f(-1, -1); - glTexCoord2f(texSize, 0.0); - glVertex2f(1, -1); - glTexCoord2f(texSize,texSize ); - glVertex2f(1, 1); - glTexCoord2f(0.0, texSize); - glVertex2f(-1, 1); - glEnd(); - - // swap role of the two textures (read-only source becomes - // write-only target and the other way round): - //compareResults(); - swap(); - } - // done, stop timer, calc MFLOP/s if neccessary - - // done, just do some checks if everything went smoothly. - checkFramebufferStatus(); - checkGLErrors("render()"); -} - -/////////////////////////////////////////////////////////////////////////// -// GPGPU: Compare -/////////////////////////////////////////////////////////////////////////// -void RTTFibers::compareResults() -{ - transferFromTexture (result); - //std::cout << "AFTER: " << result[0] << " " << result[1] << " " << result[2] << " " << result[3] << "\n"; - for(int k=0; k<4*N; k+=4) - { - std::cout << "AFTER: " << result[k] << " " << result[k+1] << " " << result[k+2] << " " << result[k+3] << "\n"; - } -} - -/////////////////////////////////////////////////////////////////////////// -// GPGPU: Textures Functions -/////////////////////////////////////////////////////////////////////////// -void RTTFibers::transferFromTexture(float* data) -{ - // version (a): texture is attached - // recommended on both NVIDIA and ATI - glReadBuffer(attachmentpoints[readTex]); - glReadPixels(0, 0, texSize, texSize,GL_RGBA,GL_FLOAT,data); - // version b: texture is not necessarily attached - //glBindTexture(GL_TEXTURE_RECTANGLE_ARB,yTexID[readTex]); - //glGetTexImage(GL_TEXTURE_RECTANGLE_ARB,0,GL_RGBA,GL_FLOAT,data); -} - -void RTTFibers::transferToTexture (float* data, GLuint texID) { - // version (a): HW-accelerated on NVIDIA - glBindTexture(GL_TEXTURE_RECTANGLE_ARB, texID); - glTexSubImage2D(GL_TEXTURE_RECTANGLE_ARB,0,0,0,texSize,texSize,GL_RGBA,GL_FLOAT,data); - // version (b): HW-accelerated on ATI - //glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_RECTANGLE_ARB, texID, 0); - //glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT); - //glRasterPos2i(0,0); - //glDrawPixels(texSize,texSize*texSize,GL_RGBA,GL_FLOAT,data); - //glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_RECTANGLE_ARB, 0, 0); -} - -void RTTFibers::setupTexture (const GLuint texID) -{ - // make active and bind - glBindTexture(GL_TEXTURE_RECTANGLE_ARB,texID); - // turn off filtering and wrap modes - glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP); - // define texture with floating point format - glTexImage2D(GL_TEXTURE_RECTANGLE_ARB,0,GL_RGBA32F_ARB,texSize,texSize,0,GL_RGBA,GL_FLOAT,0); - // check if that worked - if (glGetError() != GL_NO_ERROR) - { - printf("glTexImage2D():\t\t\t [FAIL]\n"); - exit (-3); - } -} - -/////////////////////////////////////////////////////////////////////////// -// GPGPU -/////////////////////////////////////////////////////////////////////////// -void RTTFibers::setupALL() -{ - attachmentpoints[0] = GL_COLOR_ATTACHMENT0_EXT; - attachmentpoints[1] = GL_COLOR_ATTACHMENT1_EXT; - - // init offscreen framebuffer - initFBO(); - - //FgeOffscreen fbo( texSize, texSize, false ); - - //fbo.setClearColor( 1.0f, 1.0f, 1.0f); - - -/* glMatrixMode( GL_PROJECTION ); - glLoadIdentity(); - gluOrtho2D(0.0, texSize, 0.0, texSize); - - - glViewport( 0, 0, texSize, texSize );*/ - - - // create textures for vectors - createTextures(); - - // init shader runtime - // and start computation - performComputation(); - - // compare results - compareResults(); - - // and clean up - ShaderHelper::getInstance()->getRTTShader()->release(); - - //fbo.deactivate(); - glDeleteFramebuffersEXT(1,&fb); - - - - ////ROUNDTRIP BACK - //for(int j = 0; j < 4*texSize*texSize*texSize; j+=4) - //{ - // glColor3f(1.0,1.0,0.0); - // m_pDatasetHelper->m_theScene->drawSphere( result[j], result[j+1], result[j+2], 0.2); - // // glBegin( GL_LINES ); - // // glVertex3f( seeds[j], seeds[j+1],seeds[j+2]); - // // glVertex3f( result[j], result[j+1], result[j+2]); - // //glEnd(); - //} - - - free(seeds); - free(result); - free(xValues); - glDeleteTextures(2,yTexID); - glDeleteTextures (1,&xTexID); - - - //Restore Matrix parameters - //glMatrixMode( GL_PROJECTION ); - //glLoadIdentity(); - //glOrtho( -m_pDatasetHelper->m_mainFrame->m_pMainGL->m_orthoModX, m_pDatasetHelper->m_mainFrame->m_pMainGL->m_orthoSizeNormal + m_pDatasetHelper->m_mainFrame->m_pMainGL->m_orthoModX, - // -m_pDatasetHelper->m_mainFrame->m_pMainGL->m_orthoModY, m_pDatasetHelper->m_mainFrame->m_pMainGL->m_orthoSizeNormal + m_pDatasetHelper->m_mainFrame->m_pMainGL->m_orthoModY, -500, 500 ); - - //glViewport(m_pDatasetHelper->m_mainFrame->m_pMainGL->m_viewport[0], m_pDatasetHelper->m_mainFrame->m_pMainGL->m_viewport[1], m_pDatasetHelper->m_mainFrame->m_pMainGL->m_viewport[2], m_pDatasetHelper->m_mainFrame->m_pMainGL->m_viewport[3]); -} - -/** - * Checks framebuffer status. - * Copied directly out of the spec, modified to deliver a return value. - */ -bool RTTFibers::checkFramebufferStatus() { - GLenum status; - status = (GLenum) glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); - switch(status) { - case GL_FRAMEBUFFER_COMPLETE_EXT: - return true; - case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT: - printf("Framebuffer incomplete, incomplete attachment\n"); - return false; - case GL_FRAMEBUFFER_UNSUPPORTED_EXT: - printf("Unsupported framebuffer format\n"); - return false; - case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT: - printf("Framebuffer incomplete, missing attachment\n"); - return false; - case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT: - printf("Framebuffer incomplete, attached images must have same dimensions\n"); - return false; - case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT: - printf("Framebuffer incomplete, attached images must have same format\n"); - return false; - case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT: - printf("Framebuffer incomplete, missing draw buffer\n"); - return false; - case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT: - printf("Framebuffer incomplete, missing read buffer\n"); - return false; - } - return false; -} - - -void RTTFibers::checkGLErrors( const char *label ) -{ - Logger::getInstance()->printIfGLError( wxString( label, wxConvUTF8 ) ); -// GLenum errCode; -// const GLubyte *errStr; -// -// if ((errCode = glGetError()) != GL_NO_ERROR) -// { -// errStr = gluErrorString(errCode); -// printf("OpenGL ERROR: "); -// printf((char*)errStr); -// printf("(Label: "); -// printf(label); -// printf(")\n."); -// } -} - -/////////////////////////////////////////////////////////////////////////// -// GPGPU swap framebuffers -/////////////////////////////////////////////////////////////////////////// -void RTTFibers::swap(void) -{ - if (writeTex == 0) - { - writeTex = 1; - readTex = 0; - } - else - { - writeTex = 0; - readTex = 1; - } -} - ////////////////////////////////////////// /*Destructor*/ ////////////////////////////////////////// diff --git a/src/dataset/RTTFibers.h b/src/dataset/RTTFibers.h index 53a53327..144a98d9 100644 --- a/src/dataset/RTTFibers.h +++ b/src/dataset/RTTFibers.h @@ -85,52 +85,6 @@ class RTTFibers float m_timerStep; std::vector m_pSeedMap; - - - //GPGPU functions - bool checkFramebufferStatus(void); - void checkGLErrors(const char *label); - void compareResults(void); - void createTextures(void); - void createAllTextureParameters(void); - void initGLSL(void); - void initFBO(void); - void initGLEW(void); - void initGLUT(int argc, char** argv); - void performComputation(void); - void printProgramInfoLog(GLuint obj); - void printShaderInfoLog(GLuint obj); - void printVector(const float *p, const int N); - void setupTexture(const GLuint texID); - void swap(void); - void transferFromTexture(float* data); - void transferToTexture(float* data, GLuint texID); - void setupALL(); - - //GPGPU vars - // problem size, texture size, number of iterations (set from command line) - int N; - int texSize; - int numIterations; - - // texture identifiers - GLuint yTexID[2]; - GLuint xTexID; - // ping pong management vars - int writeTex; - int readTex; - GLenum attachmentpoints[2]; - - - // FBO identifier - GLuint fb; - GLint yParam; - GLuint fbo; - - float* seeds; - float* result; - float* xValues; - private: float m_FAThreshold; float m_angleThreshold; @@ -148,8 +102,6 @@ class RTTFibers Anatomy *m_pMaskInfo; Anatomy *m_pSeedMapInfo; - - std::vector< FMatrix > m_tensorsMatrix; std::vector< F::FVector > m_tensorsEV; std::vector m_tensorsFA; diff --git a/src/gui/TrackingWindow.cpp b/src/gui/TrackingWindow.cpp index 66d11dc1..e6ebebd8 100644 --- a/src/gui/TrackingWindow.cpp +++ b/src/gui/TrackingWindow.cpp @@ -23,8 +23,6 @@ IMPLEMENT_DYNAMIC_CLASS( TrackingWindow, wxScrolledWindow ) BEGIN_EVENT_TABLE( TrackingWindow, wxScrolledWindow ) -//EVT_PAINT( TrackingWindow::OnPaint ) -//EVT_SIZE( TrackingWindow::OnSize ) END_EVENT_TABLE() @@ -33,7 +31,6 @@ TrackingWindow::TrackingWindow( wxWindow *pParent, MainFrame *pMf, wxWindowID id m_pMainFrame( pMf ) { SetBackgroundColour( *wxLIGHT_GREY ); - //SetCursor( wxCursor( wxCURSOR_HAND ) ); m_pTrackingSizer = new wxBoxSizer( wxVERTICAL ); SetSizer( m_pTrackingSizer ); SetAutoLayout( true ); @@ -49,10 +46,6 @@ TrackingWindow::TrackingWindow( wxWindow *pParent, MainFrame *pMf, wxWindowID id Connect( m_pBtnStart->GetId(), wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TrackingWindow::OnStartTracking) ); m_pBtnStart->Enable(false); - //wxImage bmpDelete(MyApp::iconsPath+ wxT("delete.png" ), wxBITMAP_TYPE_PNG); - //wxBitmapButton *m_pbtnDelete = new wxBitmapButton(this, wxID_ANY, bmpDelete, wxPoint(170,30), wxSize(60,-1)); - //Connect(m_pbtnDelete->GetId(),wxEVT_COMMAND_BUTTON_CLICKED, wxTreeEventHandler(TrackingWindow::OnClearBox)); - m_pBtnSelectShell = new wxButton( this, wxID_ANY,wxT("Shell not selected"), wxPoint(30,30), wxSize(100, -1) ); Connect( m_pBtnSelectShell->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TrackingWindow::OnSelectShell) ); @@ -66,7 +59,6 @@ TrackingWindow::TrackingWindow( wxWindow *pParent, MainFrame *pMf, wxWindowID id Connect( m_pSliderFA->GetId(), wxEVT_COMMAND_SLIDER_UPDATED, wxCommandEventHandler(TrackingWindow::OnSliderFAMoved) ); m_pTxtFABox = new wxTextCtrl( this, wxID_ANY, wxT("0.10"), wxPoint(190,60), wxSize(55, -1), wxTE_CENTRE | wxTE_READONLY ); - m_pTextAngle = new wxStaticText( this, wxID_ANY, wxT("Max angle"), wxPoint(0,90), wxSize(60, -1), wxALIGN_CENTER ); m_pSliderAngle = new MySlider( this, wxID_ANY, 0, 1, 90, wxPoint(60,90), wxSize(130, -1), wxSL_HORIZONTAL | wxSL_AUTOTICKS ); m_pSliderAngle->SetValue( 60 ); @@ -97,12 +89,6 @@ TrackingWindow::TrackingWindow( wxWindow *pParent, MainFrame *pMf, wxWindowID id Connect( m_pSliderMaxLength->GetId(), wxEVT_COMMAND_SLIDER_UPDATED, wxCommandEventHandler(TrackingWindow::OnSliderMaxLengthMoved) ); m_pTxtMaxLengthBox = new wxTextCtrl( this, wxID_ANY, wxT("200 mm"), wxPoint(190,210), wxSize(55, -1), wxTE_CENTRE | wxTE_READONLY ); - //wxToggleButton *m_pToggleRandom = new wxToggleButton( this, wxID_ANY,wxT("Use random seeds"), wxPoint(50,240), wxSize(140, -1) ); - //Connect( m_pToggleRandom->GetId(), wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TrackingWindow::OnRandomSeeding) ); - - //wxToggleButton *m_pToggleInterp = new wxToggleButton( m_pTrackingWindow, wxID_ANY,wxT("Interpolation"), wxPoint(0,270), wxSize(140, -1) ); - //m_pTrackingWindow->Connect( m_pToggleInterp->GetId(), wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TrackingWindow::OnInterpolate) ); - m_pTextAxisSeedNb = new wxStaticText( this, wxID_ANY, wxT("Seed/axis"), wxPoint(0,240), wxSize(60, -1), wxALIGN_CENTER ); m_pSliderAxisSeedNb = new MySlider( this, wxID_ANY, 0, 1, 15, wxPoint(60,240), wxSize(130, -1), wxSL_HORIZONTAL | wxSL_AUTOTICKS ); m_pSliderAxisSeedNb->SetValue( 10 ); @@ -122,7 +108,6 @@ TrackingWindow::TrackingWindow( wxWindow *pParent, MainFrame *pMf, wxWindowID id m_pMainFrame( pMf ) { SetBackgroundColour( *wxLIGHT_GREY ); - //SetCursor( wxCursor( wxCURSOR_HAND ) ); m_pTrackingSizer = new wxBoxSizer( wxVERTICAL ); SetSizer( m_pTrackingSizer ); SetAutoLayout( true ); @@ -143,11 +128,6 @@ TrackingWindow::TrackingWindow( wxWindow *pParent, MainFrame *pMf, wxWindowID id pBoxRow1->Add( m_pBtnStart, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, 1); m_pTrackingSizer->Add( pBoxRow1, 0, wxFIXED_MINSIZE | wxALL, 2 ); - - //wxImage bmpDelete(MyApp::iconsPath+ wxT("delete.png" ), wxBITMAP_TYPE_PNG); - //wxBitmapButton *m_pbtnDelete = new wxBitmapButton(this, wxID_ANY, bmpDelete, wxPoint(170,30), wxSize(60,-1)); - //Connect(m_pbtnDelete->GetId(),wxEVT_COMMAND_BUTTON_CLICKED, wxTreeEventHandler(TrackingWindow::OnClearBox)); - m_pBtnSelectShell = new wxButton( this, wxID_ANY,wxT("Shell not selected"), wxPoint(30,30), wxSize(115, -1) ); Connect( m_pBtnSelectShell->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(TrackingWindow::OnSelectShell) ); @@ -255,12 +235,6 @@ TrackingWindow::TrackingWindow( wxWindow *pParent, MainFrame *pMf, wxWindowID id pBoxRow10->Add( m_pTxtMaxLengthBox, 0, wxALIGN_LEFT | wxALL, 1); m_pTrackingSizer->Add( pBoxRow10, 0, wxFIXED_MINSIZE | wxEXPAND, 0 ); - // //wxToggleButton *m_pToggleRandom = new wxToggleButton( this, wxID_ANY,wxT("Use random seeds"), wxPoint(50,240), wxSize(140, -1) ); - // //Connect( m_pToggleRandom->GetId(), wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TrackingWindow::OnRandomSeeding) ); - - // //wxToggleButton *m_pToggleInterp = new wxToggleButton( m_pTrackingWindow, wxID_ANY,wxT("Interpolation"), wxPoint(0,270), wxSize(140, -1) ); - // //m_pTrackingWindow->Connect( m_pToggleInterp->GetId(), wxEVT_COMMAND_TOGGLEBUTTON_CLICKED, wxCommandEventHandler(TrackingWindow::OnInterpolate) ); - m_pTextAxisSeedNb = new wxStaticText( this, wxID_ANY, wxT("Seed/axis"), wxPoint(0,300), wxSize(70, -1), wxALIGN_CENTER ); m_pSliderAxisSeedNb = new MySlider( this, wxID_ANY, 0, 1, 15, wxPoint(60,300), wxSize(100, -1), wxSL_HORIZONTAL | wxSL_AUTOTICKS ); m_pSliderAxisSeedNb->SetValue( 10 ); @@ -349,19 +323,6 @@ void TrackingWindow::OnStartTracking( wxCommandEvent& WXUNUSED(event) ) { m_pBtnStart->SetLabel(wxT("Stop tracking")); } - - //RTTrackingHelper::getInstance()->setTrackAction(true); - // RTTrackingHelper::getInstance()->togglePlayStop(); - // if(!RTTrackingHelper::getInstance()->isTrackActionPaused()) - // { - // m_pPlayPause->SetBitmapLabel(m_bmpPause); - // m_pMainFrame->setTimerSpeed(); - // } - // else - // { - // m_pPlayPause->SetBitmapLabel(m_bmpPlay); - // m_pMainFrame->setTimerSpeed(); - // } } void TrackingWindow::OnClearBox( wxTreeEvent& event ) @@ -440,10 +401,6 @@ void TrackingWindow::OnSelectFileDTI( wxCommandEvent& WXUNUSED(event) ) //Set Step float step = DatasetManager::getInstance()->getVoxelX() / 2.0f; - //m_pSliderStep->SetValue( step * 10.0f ); - //m_pTxtStepBox->SetValue( wxString::Format( wxT( "%.1f mm"), step) ); - //m_pMainFrame->m_pMainGL->m_pRealTimeFibers->setStep( step ); - m_pMainFrame->m_pMainGL->m_pRealTimeFibers->setTensorsInfo( (Tensors *)DatasetManager::getInstance()->getDataset( m_pMainFrame->m_pListCtrl->GetItem( item ) ) ); if(SceneManager::getInstance()->getSelectionTree().isEmpty()) @@ -479,10 +436,6 @@ void TrackingWindow::OnSelectFileHARDI( wxCommandEvent& WXUNUSED(event) ) //Set Step float step = DatasetManager::getInstance()->getVoxelX() / 2.0f; - //m_pSliderStep->SetValue( step * 10.0f ); - //m_pTxtStepBox->SetValue( wxString::Format( wxT( "%.1f mm"), step) ); - //m_pMainFrame->m_pMainGL->m_pRealTimeFibers->setStep( step ); - m_pMainFrame->m_pMainGL->m_pRealTimeFibers->setIsHardi( true ); m_pMainFrame->m_pMainGL->m_pRealTimeFibers->setHARDIInfo( (Maximas *)DatasetManager::getInstance()->getDataset( m_pMainFrame->m_pListCtrl->GetItem( item ) ) ); @@ -683,7 +636,6 @@ void TrackingWindow::OnConvertToFibers( wxCommandEvent& WXUNUSED(event) ) { //Convert fibers DatasetIndex index = DatasetManager::getInstance()->createFibers( m_pMainFrame->m_pMainGL->m_pRealTimeFibers->getRTTFibers() ); - //DatasetInfo *pDataset = DatasetManager::getInstance()->getDataset( index ); if( !DatasetManager::getInstance()->isFibersGroupLoaded() ) { From 911620e5ac541069981f08851b77bf8e4a4eca2a Mon Sep 17 00:00:00 2001 From: chamberm Date: Wed, 24 Jul 2013 16:16:17 -0400 Subject: [PATCH 6/6] fixed anatomy reloading from drawing --- src/dataset/Anatomy.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/dataset/Anatomy.cpp b/src/dataset/Anatomy.cpp index c0470aa1..5f28fd1e 100755 --- a/src/dataset/Anatomy.cpp +++ b/src/dataset/Anatomy.cpp @@ -146,6 +146,10 @@ Anatomy::Anatomy( const int type ) m_columns = DatasetManager::getInstance()->getColumns(); m_rows = DatasetManager::getInstance()->getRows(); m_frames = DatasetManager::getInstance()->getFrames(); + + m_voxelSizeX = DatasetManager::getInstance()->getVoxelX(); + m_voxelSizeY = DatasetManager::getInstance()->getVoxelY(); + m_voxelSizeZ = DatasetManager::getInstance()->getVoxelZ(); if(type == RGB) {