diff --git a/Modules/DiffusionImaging/Rendering/mitkFiberBundleXMapper2D.cpp b/Modules/DiffusionImaging/Rendering/mitkFiberBundleXMapper2D.cpp index 4cd1c22508..36123598ea 100644 --- a/Modules/DiffusionImaging/Rendering/mitkFiberBundleXMapper2D.cpp +++ b/Modules/DiffusionImaging/Rendering/mitkFiberBundleXMapper2D.cpp @@ -1,312 +1,313 @@ /* * mitkFiberBundleMapper2D.cpp * mitk-all * * Created by HAL9000 on 1/17/11. * Copyright 2011 __MyCompanyName__. All rights reserved. * */ #include "mitkFiberBundleXMapper2D.h" #include #include #include #include #include //#include //#include #include #include #include #include #include #include #include #include //#include #include #include #include #include #include #include #include mitk::FiberBundleXMapper2D::FiberBundleXMapper2D() { } mitk::FiberBundleXMapper2D::~FiberBundleXMapper2D() { } mitk::FiberBundleX* mitk::FiberBundleXMapper2D::GetInput() { return dynamic_cast< mitk::FiberBundleX * > ( GetData() ); } void mitk::FiberBundleXMapper2D::Update(mitk::BaseRenderer * renderer) { if ( !this->IsVisible( renderer ) ) { return; } // Calculate time step of the input data for the specified renderer (integer value) // this method is implemented in mitkMapper this->CalculateTimeStep( renderer ); //check if updates occured in the node or on the display FBXLocalStorage *localStorage = m_LSH.GetLocalStorage(renderer); const DataNode *node = this->GetDataNode(); if ( (localStorage->m_LastUpdateTime < node->GetMTime()) || (localStorage->m_LastUpdateTime < node->GetPropertyList()->GetMTime()) //was a property modified? || (localStorage->m_LastUpdateTime < node->GetPropertyList(renderer)->GetMTime()) ) { // MITK_INFO << "UPDATE NEEDED FOR _ " << renderer->GetName(); this->GenerateDataForRenderer( renderer ); } if ((localStorage->m_LastUpdateTime < renderer->GetDisplayGeometry()->GetMTime()) ) //was the display geometry modified? e.g. zooming, panning) { this->UpdateShaderParameter(renderer); } } void mitk::FiberBundleXMapper2D::UpdateShaderParameter(mitk::BaseRenderer * renderer) { FBXLocalStorage *localStorage = m_LSH.GetLocalStorage(renderer); // MITK_INFO << "uSERWAAAAAAAS, da shader brauchat a poor neue zoin"; //get information about current position of views mitk::SliceNavigationController::Pointer sliceContr = renderer->GetSliceNavigationController(); mitk::PlaneGeometry::ConstPointer planeGeo = sliceContr->GetCurrentPlaneGeometry(); //generate according cutting planes based on the view position float sliceN[3], planeOrigin[3]; // since shader uses camera coordinates, transform origin and normal from worldcoordinates to cameracoordinates planeOrigin[0] = (float) planeGeo->GetOrigin()[0]; planeOrigin[1] = (float) planeGeo->GetOrigin()[1]; planeOrigin[2] = (float) planeGeo->GetOrigin()[2]; sliceN[0] = planeGeo->GetNormal()[0]; sliceN[1] = planeGeo->GetNormal()[1]; sliceN[2] = planeGeo->GetNormal()[2]; float tmp1 = planeOrigin[0] * sliceN[0]; float tmp2 = planeOrigin[1] * sliceN[1]; float tmp3 = planeOrigin[2] * sliceN[2]; float d1 = tmp1 + tmp2 + tmp3; //attention, correct normalvector float plane1[4]; plane1[0] = sliceN[0]; plane1[1] = sliceN[1]; plane1[2] = sliceN[2]; plane1[3] = d1; float thickness = 2.0; if(!this->GetDataNode()->GetPropertyValue("Fiber2DSliceThickness",thickness)) MITK_INFO << "FIBER2D SLICE THICKNESS PROPERTY ERROR"; bool fiberfading = false; if(!this->GetDataNode()->GetPropertyValue("Fiber2DfadeEFX",fiberfading)) MITK_INFO << "FIBER2D SLICE FADE EFX PROPERTY ERROR"; int fiberfading_i = 1; if (!fiberfading) fiberfading_i = 0; localStorage->m_PointActor->GetProperty()->AddShaderVariable("slicingPlane",4, plane1); localStorage->m_PointActor->GetProperty()->AddShaderVariable("fiberThickness",1, &thickness); localStorage->m_PointActor->GetProperty()->AddShaderVariable("fiberFadingON",1, &fiberfading_i); } // ALL RAW DATA FOR VISUALIZATION IS GENERATED HERE. // vtkActors and Mappers are feeded here void mitk::FiberBundleXMapper2D::GenerateDataForRenderer(mitk::BaseRenderer *renderer) { //the handler of local storage gets feeded in this method with requested data for related renderwindow FBXLocalStorage *localStorage = m_LSH.GetLocalStorage(renderer); //this procedure is depricated, //not needed after initializaton anymore mitk::DataNode* node = this->GetDataNode(); if ( node == NULL ) { MITK_INFO << "check DATANODE: ....[Fail] "; return; } /////////////////////////////////// -///THIS GET INPUT + ///THIS GET INPUT mitk::FiberBundleX* fbx = this->GetInput(); vtkSmartPointer lut = vtkLookupTable::New(); lut->Build(); localStorage->m_PointMapper->SetScalarModeToUsePointFieldData(); - //m_VtkFiberDataMapperGL->SelectColorArray("FaColors"); - localStorage->m_PointMapper->SelectColorArray("ColorValues"); + + localStorage->m_PointMapper->SelectColorArray(fbx->GetCurrentColorCoding() ); + localStorage->m_PointMapper->SetLookupTable(lut); //apply the properties after the slice was set // feed the vtk fiber mapper with point data ...TODO do in constructor localStorage->m_PointMapper->SetInput(fbx->GetFiberPolyData()); localStorage->m_PointActor->SetMapper(localStorage->m_PointMapper); localStorage->m_PointActor->GetProperty()->ShadingOn(); // Applying shading properties { //Superclass::ApplyProperties( ls->m_Actor, renderer ) ; // VTK Properties //ApplyMitkPropertiesToVtkProperty( this->GetDataNode(), ls->m_Actor->GetProperty(), renderer ); // Shaders mitk::ShaderRepository::GetGlobalShaderRepository()->ApplyProperties(this->GetDataNode(),localStorage->m_PointActor,renderer, localStorage->m_LastUpdateTime); } this->UpdateShaderParameter(renderer); // We have been modified => save this for next Update() localStorage->m_LastUpdateTime.Modified(); } vtkProp* mitk::FiberBundleXMapper2D::GetVtkProp(mitk::BaseRenderer *renderer) { //MITK_INFO << "FiberBundleMapper2D GetVtkProp(renderer)"; this->Update(renderer); return m_LSH.GetLocalStorage(renderer)->m_PointActor; } void mitk::FiberBundleXMapper2D::SetDefaultProperties(mitk::DataNode* node, mitk::BaseRenderer* renderer, bool overwrite) { //add shader to datano //####### load shader from file ######### QString applicationDir = QCoreApplication::applicationDirPath(); if (applicationDir.endsWith("bin")) applicationDir.append("/"); else if (applicationDir.endsWith("MacOS")) { //on osx, check if path for installer or MITK development is needed applicationDir.append("/"); QFile f( applicationDir+"FiberTrackingLUTBaryCoords.bin" ); if( !f.exists() ) // if file does not exist, then look in MITK development build directory applicationDir.append("../../../"); }else applicationDir.append("\\..\\"); mitk::StandardFileLocations::GetInstance()->AddDirectoryForSearch( applicationDir.toStdString().c_str(), false ); mitk::ShaderRepository::Pointer shaderRepository = mitk::ShaderRepository::GetGlobalShaderRepository(); shaderRepository->LoadShader(mitk::StandardFileLocations::GetInstance()->FindFile("mitkShaderFiberClipping.xml")); //#################################################################### node->SetProperty("shader",mitk::ShaderProperty::New("mitkShaderFiberClipping")); mitk::ShaderRepository::GetGlobalShaderRepository()->AddDefaultProperties(node,renderer,overwrite); //add other parameters to propertylist node->AddProperty( "Fiber2DSliceThickness", mitk::FloatProperty::New(2.0f), renderer, overwrite ); node->AddProperty( "Fiber2DfadeEFX", mitk::BoolProperty::New(true), renderer, overwrite ); Superclass::SetDefaultProperties(node, renderer, overwrite); } // following methods are essential, they actually call the GetVtkProp() method // which returns the desired actors void mitk::FiberBundleXMapper2D::MitkRenderOverlay(BaseRenderer* renderer) { // MITK_INFO << "FiberBundleMapper2D MitkRenderOVerlay(renderer)"; if ( this->IsVisible(renderer)==false ) return; if ( this->GetVtkProp(renderer)->GetVisibility() ) { this->GetVtkProp(renderer)->RenderOverlay(renderer->GetVtkRenderer()); } } void mitk::FiberBundleXMapper2D::MitkRenderOpaqueGeometry(BaseRenderer* renderer) { // MITK_INFO << "FiberBundleMapper2D MitkRenderOpaqueGeometry(renderer)"; if ( this->IsVisible( renderer )==false ) return; if ( this->GetVtkProp(renderer)->GetVisibility() ) this->GetVtkProp(renderer)->RenderOpaqueGeometry( renderer->GetVtkRenderer() ); } void mitk::FiberBundleXMapper2D::MitkRenderTranslucentGeometry(BaseRenderer* renderer) { // MITK_INFO << "FiberBundleMapper2D MitkRenderTranslucentGeometry(renderer)"; if ( this->IsVisible(renderer)==false ) return; //TODO is it possible to have a visible BaseRenderer AND an invisible VtkRenderer??? if ( this->GetVtkProp(renderer)->GetVisibility() ) this->GetVtkProp(renderer)->RenderTranslucentPolygonalGeometry(renderer->GetVtkRenderer()); } void mitk::FiberBundleXMapper2D::MitkRenderVolumetricGeometry(BaseRenderer* renderer) { // MITK_INFO << "FiberBundleMapper2D MitkRenderVolumentricGeometry(renderer)"; if(IsVisible(renderer)==false) return; //TODO is it possible to have a visible BaseRenderer AND an invisible VtkRenderer??? if ( GetVtkProp(renderer)->GetVisibility() ) this->GetVtkProp(renderer)->RenderVolumetricGeometry(renderer->GetVtkRenderer()); } mitk::FiberBundleXMapper2D::FBXLocalStorage::FBXLocalStorage() { m_PointActor = vtkSmartPointer::New(); m_PointMapper = vtkSmartPointer::New(); } diff --git a/Modules/DiffusionImaging/Rendering/mitkFiberBundleXMapper3D.cpp b/Modules/DiffusionImaging/Rendering/mitkFiberBundleXMapper3D.cpp index fba72ddc12..5bf7cc304b 100644 --- a/Modules/DiffusionImaging/Rendering/mitkFiberBundleXMapper3D.cpp +++ b/Modules/DiffusionImaging/Rendering/mitkFiberBundleXMapper3D.cpp @@ -1,205 +1,197 @@ /*========================================================================= - + Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date: 2009-05-12 19:56:03 +0200 (Di, 12 Mai 2009) $ Version: $Revision: 17179 $ 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. =========================================================================*/ #include "mitkFiberBundleXMapper3D.h" #include //#include //#include #include #include #include #include //not essential for mapper #include mitk::FiberBundleXMapper3D::FiberBundleXMapper3D() -:m_FiberMapperGLSP(vtkSmartPointer::New()), - m_FiberMapperGLWP(vtkOpenGLPolyDataMapper::New()), - m_FiberActorSP(vtkSmartPointer::New()), - m_FiberActorWP(vtkOpenGLActor::New()), - m_FiberAssembly(vtkPropAssembly::New()) + :m_FiberMapperGLSP(vtkSmartPointer::New()), + m_FiberMapperGLWP(vtkOpenGLPolyDataMapper::New()), + m_FiberActorSP(vtkSmartPointer::New()), + m_FiberActorWP(vtkOpenGLActor::New()), + m_FiberAssembly(vtkPropAssembly::New()) { } mitk::FiberBundleXMapper3D::~FiberBundleXMapper3D() { - m_FiberAssembly->Delete(); + m_FiberAssembly->Delete(); } const mitk::FiberBundleX* mitk::FiberBundleXMapper3D::GetInput() { - MITK_INFO << "FiberBundleXxXXMapper3D() GetInput()"; - return static_cast ( GetData() ); + MITK_INFO << "FiberBundleXxXXMapper3D() GetInput()"; + return static_cast ( GetData() ); } /* - This method is called once the mapper gets new input, - for UI rotation or changes in colorcoding this method is NOT called + This method is called once the mapper gets new input, + for UI rotation or changes in colorcoding this method is NOT called */ void mitk::FiberBundleXMapper3D::GenerateData() { - //MITK_INFO << "GENERATE DATA FOR FBX :)"; - //=====timer measurement==== - QTime myTimer; - myTimer.start(); - //========================== - -// mitk::FiberBundleX::Pointer FBX = dynamic_cast< mitk::FiberBundleX* > (this->GetData()); - - mitk::FiberBundleX* FBX = dynamic_cast (this->GetData()); - if (FBX == NULL) { - return; - } - //todo smartpointer - vtkPolyData* FiberData = FBX->GetFiberPolyData(); - - if (FiberData == NULL) { - return; - } - - - m_FiberMapperGLSP->SetInput(FiberData); - // m_FiberMapperGLWP->SetInput(FiberData); - - - if ( FiberData->GetPointData()->GetNumberOfArrays() > 0 ) - { - if ( FiberData->GetPointData()->HasArray(FiberBundleX::COLORCODING_ORIENTATION_BASED) ) + //MITK_INFO << "GENERATE DATA FOR FBX :)"; + //=====timer measurement==== + QTime myTimer; + myTimer.start(); + //========================== + + // mitk::FiberBundleX::Pointer FBX = dynamic_cast< mitk::FiberBundleX* > (this->GetData()); + + mitk::FiberBundleX* FBX = dynamic_cast (this->GetData()); + if (FBX == NULL) { + return; + } + //todo smartpointer + vtkPolyData* FiberData = FBX->GetFiberPolyData(); + + if (FiberData == NULL) { + return; + } + + + m_FiberMapperGLSP->SetInput(FiberData); + // m_FiberMapperGLWP->SetInput(FiberData); + + + if ( FiberData->GetPointData()->GetNumberOfArrays() > 0 ) { - m_FiberMapperGLSP->SelectColorArray(FiberBundleX::COLORCODING_ORIENTATION_BASED); - // m_FiberMapperGLWP->SelectColorArray(FiberBundleX::COLORCODING_ORIENTATION_BASED); - } else { - // iterate through polydata array and take the first best -but valid- array - - //===ToDo=== - //check of componentsize as well, if it is not RGB or RGBA (ie. size 3 or 4), then check if it is a scalar - // if scalar then create lookuptable for that. + + m_FiberMapperGLSP->SelectColorArray( FBX->GetCurrentColorCoding() ); } m_FiberMapperGLSP->ScalarVisibilityOn(); // m_FiberMapperGLWP->ScalarVisibilityOn(); m_FiberMapperGLSP->SetScalarModeToUsePointFieldData(); // m_FiberMapperGLWP->SetScalarModeToUsePointFieldData(); - } - - - m_FiberActorSP->SetMapper(m_FiberMapperGLSP); - // m_FiberActorWP->SetMapper(m_FiberMapperGLWP); - - m_FiberActorSP->GetProperty()->SetOpacity(1.0); - // m_FiberActorWP->GetProperty()->SetOpacity(1.0); - - if (FBX->GetCurrentColorCoding() != NULL){ - m_FiberMapperGLSP->SelectColorArray(FBX->GetCurrentColorCoding()); - MITK_INFO << "MapperFBX: " << FBX->GetCurrentColorCoding(); - } - m_FiberAssembly->AddPart(m_FiberActorSP); - - //since this method is called after generating all necessary data for fiber visualization, all modifications are represented so far. - FBX->setFBXModificationDone(); - //====timer measurement======== - MITK_INFO << "Execution Time GenerateData() (nmiliseconds): " << myTimer.elapsed(); - //============================= - + + + + m_FiberActorSP->SetMapper(m_FiberMapperGLSP); + // m_FiberActorWP->SetMapper(m_FiberMapperGLWP); + + m_FiberActorSP->GetProperty()->SetOpacity(1.0); + // m_FiberActorWP->GetProperty()->SetOpacity(1.0); + + if (FBX->GetCurrentColorCoding() != NULL){ + m_FiberMapperGLSP->SelectColorArray(FBX->GetCurrentColorCoding()); + MITK_INFO << "MapperFBX: " << FBX->GetCurrentColorCoding(); + } + m_FiberAssembly->AddPart(m_FiberActorSP); + + //since this method is called after generating all necessary data for fiber visualization, all modifications are represented so far. + FBX->setFBXModificationDone(); + //====timer measurement======== + MITK_INFO << "Execution Time GenerateData() (nmiliseconds): " << myTimer.elapsed(); + //============================= + } void mitk::FiberBundleXMapper3D::GenerateDataForRenderer( mitk::BaseRenderer *renderer ) { - if ( !this->IsVisible( renderer ) ) - { - return; - } - - //MITK_INFO << "FiberBundleXxXXMapper3D()DataForRenderer"; - //ToDo do update checks - mitk::FiberBundleX* FBX = dynamic_cast (this->GetData()); - if(FBX->isFiberBundleXModified()) - this->GenerateData(); + if ( !this->IsVisible( renderer ) ) + { + return; + } + + //MITK_INFO << "FiberBundleXxXXMapper3D()DataForRenderer"; + //ToDo do update checks + mitk::FiberBundleX* FBX = dynamic_cast (this->GetData()); + if(FBX->isFiberBundleXModified()) + this->GenerateData(); } void mitk::FiberBundleXMapper3D::SetDefaultProperties(mitk::DataNode* node, mitk::BaseRenderer* renderer, bool overwrite) { - -// MITK_INFO << "FiberBundleXxXXMapper3D()SetDefaultProperties"; - - - //MITK_INFO << "FiberBundleMapperX3D SetDefault Properties(...)"; - // node->AddProperty( "DisplayChannel", mitk::IntProperty::New( true ), renderer, overwrite ); - // node->AddProperty( "LineWidth", mitk::IntProperty::New( true ), renderer, overwrite ); - // node->AddProperty( "ColorCoding", mitk::IntProperty::New( 0 ), renderer, overwrite); - // node->AddProperty( "VertexOpacity_1", mitk::BoolProperty::New( false ), renderer, overwrite); - // node->AddProperty( "Set_FA_VertexAlpha", mitk::BoolProperty::New( false ), renderer, overwrite); - // node->AddProperty( "pointSize", mitk::FloatProperty::New(0.5), renderer, overwrite); - // node->AddProperty( "setShading", mitk::IntProperty::New(1), renderer, overwrite); - // node->AddProperty( "Xmove", mitk::IntProperty::New( 0 ), renderer, overwrite); - // node->AddProperty( "Ymove", mitk::IntProperty::New( 0 ), renderer, overwrite); - // node->AddProperty( "Zmove", mitk::IntProperty::New( 0 ), renderer, overwrite); - // node->AddProperty( "RepPoints", mitk::BoolProperty::New( false ), renderer, overwrite); - // node->AddProperty( "TubeSides", mitk::IntProperty::New( 8 ), renderer, overwrite); - // node->AddProperty( "TubeRadius", mitk::FloatProperty::New( 0.15 ), renderer, overwrite); - // node->AddProperty( "TubeOpacity", mitk::FloatProperty::New( 1.0 ), renderer, overwrite); - - node->AddProperty( "pickable", mitk::BoolProperty::New( true ), renderer, overwrite); - - Superclass::SetDefaultProperties(node, renderer, overwrite); - - - + + // MITK_INFO << "FiberBundleXxXXMapper3D()SetDefaultProperties"; + + + //MITK_INFO << "FiberBundleMapperX3D SetDefault Properties(...)"; + // node->AddProperty( "DisplayChannel", mitk::IntProperty::New( true ), renderer, overwrite ); + // node->AddProperty( "LineWidth", mitk::IntProperty::New( true ), renderer, overwrite ); + // node->AddProperty( "ColorCoding", mitk::IntProperty::New( 0 ), renderer, overwrite); + // node->AddProperty( "VertexOpacity_1", mitk::BoolProperty::New( false ), renderer, overwrite); + // node->AddProperty( "Set_FA_VertexAlpha", mitk::BoolProperty::New( false ), renderer, overwrite); + // node->AddProperty( "pointSize", mitk::FloatProperty::New(0.5), renderer, overwrite); + // node->AddProperty( "setShading", mitk::IntProperty::New(1), renderer, overwrite); + // node->AddProperty( "Xmove", mitk::IntProperty::New( 0 ), renderer, overwrite); + // node->AddProperty( "Ymove", mitk::IntProperty::New( 0 ), renderer, overwrite); + // node->AddProperty( "Zmove", mitk::IntProperty::New( 0 ), renderer, overwrite); + // node->AddProperty( "RepPoints", mitk::BoolProperty::New( false ), renderer, overwrite); + // node->AddProperty( "TubeSides", mitk::IntProperty::New( 8 ), renderer, overwrite); + // node->AddProperty( "TubeRadius", mitk::FloatProperty::New( 0.15 ), renderer, overwrite); + // node->AddProperty( "TubeOpacity", mitk::FloatProperty::New( 1.0 ), renderer, overwrite); + + node->AddProperty( "pickable", mitk::BoolProperty::New( true ), renderer, overwrite); + + Superclass::SetDefaultProperties(node, renderer, overwrite); + + + } vtkProp* mitk::FiberBundleXMapper3D::GetVtkProp(mitk::BaseRenderer *renderer) { - //MITK_INFO << "FiberBundleXxXXMapper3D()GetVTKProp"; - //this->GenerateData(); - return m_FiberAssembly; - + //MITK_INFO << "FiberBundleXxXXMapper3D()GetVTKProp"; + //this->GenerateData(); + return m_FiberAssembly; + } void mitk::FiberBundleXMapper3D::ApplyProperties(mitk::BaseRenderer* renderer) { -// MITK_INFO << "FiberBundleXXXXMapper3D ApplyProperties(renderer)"; + // MITK_INFO << "FiberBundleXXXXMapper3D ApplyProperties(renderer)"; } void mitk::FiberBundleXMapper3D::UpdateVtkObjects() { -// MITK_INFO << "FiberBundleXxxXMapper3D UpdateVtkObjects()"; - - + // MITK_INFO << "FiberBundleXxxXMapper3D UpdateVtkObjects()"; + + } void mitk::FiberBundleXMapper3D::SetVtkMapperImmediateModeRendering(vtkMapper *) { - - - + + + }