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 316faeccde..45e93fe15f 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,224 +1,278 @@ /*========================================================================= 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 + + 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(); + 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 PDRandom = vtkSmartPointer::New(); + 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 + vtkSmartPointer linesCell = vtkSmartPointer::New(); + // iterate through points - int lineId = 0; 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) { - MITK_INFO << "====== Start New LINE: =======" << ++lineId; vtkSmartPointer newFiber = vtkSmartPointer::New(); + newFiber->GetPointIds()->SetNumberOfIds(pntsPrFiber); - for (int pc = 0; pc < pntsPrFiber; ++pc) { - MITK_INFO << "feeding idx: " << pc << " with point id: " << pc+i; + // construct the fiber + for (int pc = 0; pc < pntsPrFiber; ++pc) + { + newFiber->GetPointIds()->SetId(pc, pc+1); } + linesCell->InsertNextCell(newFiber); - //fill the fiber with points -// ================SHALL NEVER OCCUR================= + // ================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->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()"; }