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 b29f2a0f40..6b4264d792 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,276 +1,288 @@ /*========================================================================= 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 + vtkSmartPointer output; // FiberPD stores the generated PolyData if ( fibDirection == FIB_RADIOBUTTON_DIRECTION_RANDOM ) { // build polydata with random lines and fibers - FiberPD = GenerateVtkFibersRandom(); + output = GenerateVtkFibersRandom(); } else if ( fibDirection == FIB_RADIOBUTTON_DIRECTION_X ) { // build polydata with XDirection fibers - FiberPD = GenerateVtkFibersDirectionX(); + output = GenerateVtkFibersDirectionX(); } else if ( fibDirection == FIB_RADIOBUTTON_DIRECTION_Y ) { // build polydata with YDirection fibers - FiberPD = GenerateVtkFibersDirectionY(); + output = GenerateVtkFibersDirectionY(); } else if ( fibDirection == FIB_RADIOBUTTON_DIRECTION_Z ) { // build polydata with ZDirection fibers - FiberPD = GenerateVtkFibersDirectionZ(); + output = GenerateVtkFibersDirectionZ(); } + //mitkFiberBundleX::New() } /* - * here we are using "dynamic" feeding of cell arrays + * Generate polydata of random fibers */ 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; - + // 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(); 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+i); - MITK_INFO << linesCell->GetNumberOfCells() << ": " << pnts->GetPoint(pc+i)[0] << " " << pnts->GetPoint(pc+i)[1] << " " << pnts->GetPoint(pc+i)[2]; +// 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(pnts); + PDRandom->SetLines(linesCell); - 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 + int numOfFibers = m_Controls->boxFiberNumbers->value(); + int pntsPrFiber = m_Controls->boxPointsPerFiber->value(); + int numOfPoints = numOfFibers * pntsPrFiber; + vtkSmartPointer linesCell = vtkSmartPointer::New(); + vtkSmartPointer points = vtkSmartPointer::New(); + + //insert Origin point, this point has index 0 in point array + double originX = 0.0; + double originY = 0.0; + double originZ = 0.0; + + //after each iteration the origin of the new fiber increases + //here you set which direction is affected + double increaseX = 0.0; + double increaseY = 1.0; + double increaseZ = 0.0; + + //walk along X axis + //length of fibers increases in each iteration + for (int i=0; iInsertNextPoint(originX + (double)i * increaseX , originY + (double)i * increaseY, originZ + (double)i * increaseZ); + + MITK_INFO << i << ": OP " << points->GetPoint(points->GetNumberOfPoints()-1)[0] << " " << points->GetPoint(points->GetNumberOfPoints()-1)[1] << " " << points->GetPoint(points->GetNumberOfPoints()-1)[2]; + + + //insert remaining points for fiber + for (int pj=0; pj<=i ; ++pj) + { //generate next point + points->InsertNextPoint( originX + (double)pj+1 * increaseX , originY + (double)pj+1 * increaseY, originZ + (double)pj+1 * increaseZ ); + + + } + + vtkSmartPointer newFiber = vtkSmartPointer::New(); + newFiber->GetPointIds()->SetNumberOfIds(i+2); + newFiber->GetPointIds()->SetId(0,0); + + + linesCell->InsertNextCell(newFiber); + } + vtkSmartPointer PDX = vtkSmartPointer::New(); 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()"; } diff --git a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkFiberBundleDeveloperViewControls.ui b/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkFiberBundleDeveloperViewControls.ui index 8d1a8f0e97..452831205b 100644 --- a/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkFiberBundleDeveloperViewControls.ui +++ b/Modules/Bundles/org.mitk.gui.qt.diffusionimaging/src/internal/QmitkFiberBundleDeveloperViewControls.ui @@ -1,535 +1,614 @@ QmitkFiberBundleDeveloperViewControls 0 0 - 372 + 382 691 Form 12 50 false 0 0 0 - 348 - 601 + 358 + 360 Fiber Generator - - - - Qt::Horizontal - - - - - - Fiber Parameters - - - - - - - 10 - - - - 999999999 - - - 100 - - - - - - - - 11 - - - - Points per Fiber - - - - - - - - 11 - - - - Number of Fibers - - - - - - - - 10 - - - - 2 - - - 999999999 - - - 50 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - groupBox - labelFibersTotal - label - boxPointsPerFiber - boxFiberNumbers - horizontalSpacer_3 - - - - - - - 11 - - - - FA Values - - - - - - const value - - - - - - - false - - - - 10 - - - - 1.000000000000000 - - - 0.100000000000000 - - - 1.000000000000000 - - - - - - - random range - - - - - - - false - - - - 10 - - - - 1.000000000000000 - - - 0.100000000000000 - - - - - - - no values - - - true - - - - - - - false - - - - 10 - - - - 1.000000000000000 - - - 0.100000000000000 - - - - - - - - - - Generate Fiberbundle + + + 2 + + + Fiber Bundles + + + + + + Generate Fiberbundle + + + + + + + + 11 + + + + Fiber Orientation + + + + + + along Z Axis + + + + + + + along X Axis + + + + + + + random + + + true + + + + + + + along Y Axis + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + Fiber Parameters + + + + + + + 10 + + + + 999999999 + + + 100 + + + + + + + + 11 + + + + Points per Fiber + + + + + + + + 11 + + + + Number of Fibers + + + + + + + + 10 + + + + 2 + + + 999999999 + + + 50 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + labelFibersTotal + label + boxPointsPerFiber + boxFiberNumbers + horizontalSpacer_3 + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + DWI Values + + + + + + GA Values + + + + + + no values + + + true + + + + + + + nothing yet implemented + + + + + + + + + + + 11 + + + + FA Values + + + + + + const value + + + + + + + false + + + + 10 + + + + 1.000000000000000 + + + 0.100000000000000 + + + 1.000000000000000 + + + + + + + random range + + + + + + + false + + + + 10 + + + + 1.000000000000000 + + + 0.100000000000000 + + + + + + + no values + + + true + + + + + + + false + + + + 10 + + + + 1.000000000000000 + + + 0.100000000000000 + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + Page + + + + + + Select a FiberBundle in Datamanager + + + + + - - - - 11 - - - - Fiber Orientation + + + Qt::Vertical - - - - - along X Axis - - - - - - - random - - - true - - - - - - - along Z Axis - - - - - - - along Y Axis - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - GA Values + + + 20 + 40 + - - - - - no values - - - true - - - - - - - nothing yet implemented - - - - - + 0 0 - 348 - 601 + 308 + 409 Fiber Processor 2 Colors Fiber Coloring Color Fibers Qt::Vertical 20 40 Shape Qt::Vertical 20 40 Fiber Smoothing Smooth Fibers QFrame::StyledPanel QFrame::Raised static value relative in% false 10 none true false 10 9999 Qt::Horizontal 40 20 vtkFilters Tubes vtkDecimatePro vtkSmoothPolyDataFilter Cutting + + + + Qt::Vertical + + + + 20 + 40 + + + +