diff --git a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkFiberBundleDeveloperView.cpp b/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkFiberBundleDeveloperView.cpp index 45e93fe15f..b29f2a0f40 100644 --- a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkFiberBundleDeveloperView.cpp +++ b/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkFiberBundleDeveloperView.cpp @@ -1,278 +1,276 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date: 2010-03-31 16:40:27 +0200 (Mi, 31 Mrz 2010) $ Version: $Revision: 21975 $ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ // Blueberry #include #include // Qmitk #include "QmitkFiberBundleDeveloperView.h" #include // Qt // VTK #include #include #include //not needed -#include -#include -#include -#include -#include +//#include +//#include +//#include +//#include +//#include const std::string QmitkFiberBundleDeveloperView::VIEW_ID = "org.mitk.views.fiberbundledeveloper"; const std::string id_DataManager = "org.mitk.views.datamanager"; using namespace berry; QmitkFiberBundleDeveloperView::QmitkFiberBundleDeveloperView() : QmitkFunctionality() , m_Controls( 0 ) , m_MultiWidget( NULL ) { } // Destructor QmitkFiberBundleDeveloperView::~QmitkFiberBundleDeveloperView() { } void QmitkFiberBundleDeveloperView::CreateQtPartControl( QWidget *parent ) { // build up qt view, unless already done in QtDesigner, etc. if ( !m_Controls ) { // create GUI widgets from the Qt Designer's .ui file m_Controls = new Ui::QmitkFiberBundleDeveloperViewControls; m_Controls->setupUi( parent ); connect( m_Controls->buttonGenerateFibers, SIGNAL(clicked()), this, SLOT(DoGenerateFibers()) ); } // Checkpoint for fiber ORIENTATION if ( m_DirectionRadios.empty() ) { m_DirectionRadios.insert(0, m_Controls->radioButton_directionRandom); m_DirectionRadios.insert(1, m_Controls->radioButton_directionX); m_DirectionRadios.insert(2, m_Controls->radioButton_directionY); m_DirectionRadios.insert(3, m_Controls->radioButton_directionZ); } } void QmitkFiberBundleDeveloperView::DoGenerateFibers() { // GET SELECTED FIBER DIRECTION QString fibDirection; //stores the object_name of selected radiobutton QVector::const_iterator i; for (i = m_DirectionRadios.begin(); i != m_DirectionRadios.end(); ++i) { QRadioButton* rdbtn = *i; if (rdbtn->isChecked()) fibDirection = rdbtn->objectName(); } vtkSmartPointer FiberPD; // FiberPD stores the generated PolyData if ( fibDirection == FIB_RADIOBUTTON_DIRECTION_RANDOM ) { // build polydata with random lines and fibers FiberPD = GenerateVtkFibersRandom(); } else if ( fibDirection == FIB_RADIOBUTTON_DIRECTION_X ) { // build polydata with XDirection fibers FiberPD = GenerateVtkFibersDirectionX(); } else if ( fibDirection == FIB_RADIOBUTTON_DIRECTION_Y ) { // build polydata with YDirection fibers FiberPD = GenerateVtkFibersDirectionY(); } else if ( fibDirection == FIB_RADIOBUTTON_DIRECTION_Z ) { // build polydata with ZDirection fibers FiberPD = GenerateVtkFibersDirectionZ(); } } /* * here we are using "dynamic" feeding of cell arrays */ vtkSmartPointer QmitkFiberBundleDeveloperView::GenerateVtkFibersRandom() { int numOfFibers = m_Controls->boxFiberNumbers->value(); int pntsPrFiber = m_Controls->boxPointsPerFiber->value(); int numOfPoints = numOfFibers * pntsPrFiber; MITK_INFO << "Numer of Fibers: " << numOfFibers << "\nPoints per Fiber: " << pntsPrFiber << "\nPoints Total: " << numOfPoints; vtkSmartPointer randomPoints = vtkSmartPointer::New(); randomPoints->SetCenter(0.0, 0.0, 0.0); randomPoints->SetNumberOfPoints(numOfPoints); randomPoints->SetRadius(pntsPrFiber); randomPoints->Update(); vtkPolyData* pntHost = randomPoints->GetOutput(); - //convert pointsourcce to vtkpoints -// BIG TO DO ... - vtkSmartPointer pointArray = vtkSmartPointer::New(); - pointArray->SetNumberOfPoints(numOfPoints); - -// for(int j=0; jSetPoint(j, randomPoints->) -// } - - // Set vtkPolyLines - //create new cell + vtkPoints* pnts = pntHost->GetPoints(); + + //checkpoint if requested amount of points equals generated amount + if (numOfPoints != pnts->GetNumberOfPoints()) { + MITK_INFO << "VTK POINT ERROR, WRONG AMOUNT OF GENRERATED POINTS"; + return 0; + } + + // Set Fibers vtkSmartPointer linesCell = vtkSmartPointer::New(); // iterate through points for (int i=0; i < numOfPoints; i+=pntsPrFiber) // e.g. i eqals 0, 50, 100, etc., I choose this cuz then its more easy to fill the lines with according points. { if (i%pntsPrFiber == 0) { vtkSmartPointer newFiber = vtkSmartPointer::New(); newFiber->GetPointIds()->SetNumberOfIds(pntsPrFiber); - + // construct the fiber for (int pc = 0; pc < pntsPrFiber; ++pc) { - newFiber->GetPointIds()->SetId(pc, pc+1); + newFiber->GetPointIds()->SetId(pc, pc+i); + MITK_INFO << linesCell->GetNumberOfCells() << ": " << pnts->GetPoint(pc+i)[0] << " " << pnts->GetPoint(pc+i)[1] << " " << pnts->GetPoint(pc+i)[2]; } linesCell->InsertNextCell(newFiber); // ================SHALL NEVER OCCUR================= } else { MITK_INFO << "LOGIC ERROR IN CREATING FIBERS...Check Values in QmitkFiberBundleDeveloperView.cpp"; } // =================================================== } vtkSmartPointer PDRandom = vtkSmartPointer::New(); -// PDRandom->SetPoints(randomPoints->GetOutputPort()); + PDRandom->SetPoints(pnts); PDRandom->SetLines(linesCell); // // Setup actor and mapper // vtkSmartPointer mapper = // vtkSmartPointer::New(); // mapper->SetInput(polyData); // // vtkSmartPointer actor = // vtkSmartPointer::New(); // actor->SetMapper(mapper); // // // Setup render window, renderer, and interactor // vtkSmartPointer renderer = // vtkSmartPointer::New(); // vtkSmartPointer renderWindow = // vtkSmartPointer::New(); // renderWindow->AddRenderer(renderer); // vtkSmartPointer renderWindowInteractor = // vtkSmartPointer::New(); // renderWindowInteractor->SetRenderWindow(renderWindow); // renderer->AddActor(actor); // // renderWindow->Render(); // renderWindowInteractor->Start(); // return PDRandom; } vtkSmartPointer QmitkFiberBundleDeveloperView::GenerateVtkFibersDirectionX() { vtkSmartPointer PDX = vtkSmartPointer::New(); //todo return PDX; } vtkSmartPointer QmitkFiberBundleDeveloperView::GenerateVtkFibersDirectionY() { vtkSmartPointer PDY = vtkSmartPointer::New(); //todo return PDY; } vtkSmartPointer QmitkFiberBundleDeveloperView::GenerateVtkFibersDirectionZ() { vtkSmartPointer PDZ = vtkSmartPointer::New(); //todo return PDZ; } void QmitkFiberBundleDeveloperView::StdMultiWidgetAvailable (QmitkStdMultiWidget &stdMultiWidget) { m_MultiWidget = &stdMultiWidget; } void QmitkFiberBundleDeveloperView::StdMultiWidgetNotAvailable() { m_MultiWidget = NULL; } /* OnSelectionChanged is registered to SelectionService, therefore no need to implement SelectionService Listener explicitly */ void QmitkFiberBundleDeveloperView::OnSelectionChanged( std::vector nodes ) { } void QmitkFiberBundleDeveloperView::Activated() { MITK_INFO << "FB OPerations ACTIVATED()"; }