X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=bbtk%2Fsrc%2FbbcreaMaracasVisuTubeFilter.cxx;h=c25e3e5bb8411b9c2b0be0849a7609223cf93bf2;hb=b8c5a565c70ac0def1f21518afa2d847a9582d79;hp=2c191be0f6b902e63fa83dfe5a3c7b304b30c2c5;hpb=7673025235c97a2fded5c1a8190028f21bd9930a;p=creaMaracasVisu.git diff --git a/bbtk/src/bbcreaMaracasVisuTubeFilter.cxx b/bbtk/src/bbcreaMaracasVisuTubeFilter.cxx index 2c191be..c25e3e5 100644 --- a/bbtk/src/bbcreaMaracasVisuTubeFilter.cxx +++ b/bbtk/src/bbcreaMaracasVisuTubeFilter.cxx @@ -1,3 +1,28 @@ +/*# --------------------------------------------------------------------- +# +# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image +# pour la Sant�) +# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton +# Previous Authors : Laurent Guigues, Jean-Pierre Roux +# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil +# +# This software is governed by the CeCILL-B license under French law and +# abiding by the rules of distribution of free software. You can use, +# modify and/ or redistribute the software under the terms of the CeCILL-B +# license as circulated by CEA, CNRS and INRIA at the following URL +# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +# or in the file LICENSE.txt. +# +# As a counterpart to the access to the source code and rights to copy, +# modify and redistribute granted by the license, users are provided only +# with a limited warranty and the software's author, the holder of the +# economic rights, and the successive licensors have only limited +# liability. +# +# The fact that you are presently reading this means that you have had +# knowledge of the CeCILL-B license and that you accept its terms. +# ------------------------------------------------------------------------ */ + //===== // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) //===== @@ -17,12 +42,10 @@ #include #include #include -#include #include #include #include -#include namespace bbcreaMaracasVisu @@ -31,37 +54,65 @@ namespace bbcreaMaracasVisu MaracasTubeFilter::MaracasTubeFilter() { } + + MaracasTubeFilter::~MaracasTubeFilter() + { + // Interface Update + if (renderer!=NULL ) + { + renderer->RemoveActor(actor); + } + + } + void MaracasTubeFilter::SetvtkRenderer(vtkRenderer *render) { this->renderer = render; } + + void MaracasTubeFilter::SetlstPoints( std::vector lstPointX , std::vector lstPointY , std::vector lstPointZ ) { - this->lstPointX=lstPointX; - this->lstPointY=lstPointY; - this->lstPointZ=lstPointZ; + this->lstPointX = lstPointX; + this->lstPointY = lstPointY; + this->lstPointZ = lstPointZ; } + + void MaracasTubeFilter::SetlstColour( std::vector lstColour ) + { + this->lstColour=lstColour; + } + + void MaracasTubeFilter::SetlstRadius( std::vector lstRadius ) { - this->lstRadius=lstRadius; + this->lstRadius = lstRadius; + } + + void MaracasTubeFilter::SetOpacity(double opacity) + { + this->opacity = opacity; + } + + void MaracasTubeFilter::SetTransform( vtkLinearTransform* transform ) + { + this->transform = transform; } + vtkActor *MaracasTubeFilter::GetActor() + { + return actor; + } void MaracasTubeFilter::Run() { - // Spiral tube -// double vX, vY, vZ; -// unsigned int nV = 256; // No. of vertices -// unsigned int nCyc = 5; // No. of spiral cycles -// double rT1 = 0.1, rT2 = 0.5;// Start/end tube radii -// double rS = 2; // Spiral radius -// double h = 10; // Height - unsigned int nTv = 8; // No. of surface elements for each tube vertex + unsigned int i; + unsigned int nTv = 8; // No. of surface elements for each tube vertex // Create points and cells vtkSmartPointer points = vtkSmartPointer::New(); @@ -70,63 +121,102 @@ namespace bbcreaMaracasVisu points->InsertPoint(i, lstPointX[i], lstPointY[i], lstPointZ[i]); } - vtkSmartPointer lines = - vtkSmartPointer::New(); + vtkSmartPointer lines = vtkSmartPointer::New(); lines->InsertNextCell( lstPointX.size() ); for (i = 0; i < lstPointX.size(); i++) { lines->InsertCellPoint(i); } - vtkSmartPointer polyData = - vtkSmartPointer::New(); + vtkSmartPointer polyData = vtkSmartPointer::New(); polyData->SetPoints(points); polyData->SetLines(lines); - + double radio; // Varying tube radius using sine-function - vtkSmartPointer tubeRadius = - vtkSmartPointer::New(); + vtkSmartPointer tubeRadius = vtkSmartPointer::New(); tubeRadius->SetName("TubeRadius"); - tubeRadius->SetNumberOfTuples( lstRadius.size() ); - for (i=0 ;iSetNumberOfTuples( lstPointX.size() ); + for (i=0 ;iSetTuple1(i, lstRadius[i] ); + if (lstRadius.size()==0) + { + radio=1; + } else if (i=lstRadius.size()) { + radio= lstRadius[ lstRadius.size()-1 ]; + } + + tubeRadius->SetTuple1(i, radio ); } polyData->GetPointData()->AddArray(tubeRadius); polyData->GetPointData()->SetActiveScalars("TubeRadius"); // RBG array (could add Alpha channel too I guess...) // Varying from blue to red - vtkSmartPointer colors = - vtkSmartPointer::New(); + vtkSmartPointer colors = vtkSmartPointer::New(); colors->SetName("Colors"); colors->SetNumberOfComponents(3); colors->SetNumberOfTuples( lstPointX.size() ); + int numberOfColours = lstColour.size()/3; + int indexcolour; for (i = 0; i < lstPointX.size() ;i++) - { - colors->InsertTuple3(i, 255 , 0.0 , 0.0 ); - } + { + if (numberOfColours==0){ + colors->InsertTuple3(i, 1 , 1 , 1 ); + } else { + if (iInsertTuple3(i, 255*lstColour[indexcolour+0] , 255*lstColour[indexcolour+1] , 255*lstColour[indexcolour+2] ); + } + } // for polyData->GetPointData()->AddArray(colors); - vtkSmartPointer tube - = vtkSmartPointer::New(); + vtkSmartPointer tube = vtkSmartPointer::New(); + tube->CappingOn(); tube->SetInput(polyData); tube->SetNumberOfSides(nTv); tube->SetVaryRadiusToVaryRadiusByAbsoluteScalar(); - vtkSmartPointer mapper = - vtkSmartPointer::New(); + vtkSmartPointer mapper = vtkSmartPointer::New(); mapper->SetInputConnection(tube->GetOutputPort()); +// mapper->ScalarVisibilityOn(); +// mapper->SetScalarModeToUsePointFieldData(); + mapper->ScalarVisibilityOn(); + +// mapper->SetScalarModeToUseCellData(); +// mapper->SetScalarModeToUseCellFieldData(); +// mapper->SetScalarModeToUseFieldData(); +// mapper->SetScalarModeToUsePointData(); mapper->SetScalarModeToUsePointFieldData(); + + mapper->SetColorModeToDefault(); +// mapper->SetColorModeToMapScalars(); + + mapper->SelectColorArray("Colors"); - vtkSmartPointer actor = - vtkSmartPointer::New(); + // vtkSmartPointer actor =vtkSmartPointer::New(); + actor = vtkSmartPointer::New(); actor->SetMapper(mapper); + actor->GetProperty()->SetOpacity( opacity ); + + if ( transform!=NULL ) + { + actor->SetUserTransform( transform ); + } - renderer->AddActor(actor); + // Interface Update + if (renderer!=NULL ) + { + renderer->AddActor(actor); + } + } @@ -154,51 +244,76 @@ void TubeFilter::Process() printf("EED TubeFilter::Process start \n"); + if (tubefilter!=NULL) + { + delete tubefilter; + } + + tubefilter = new MaracasTubeFilter(); tubefilter->SetvtkRenderer( bbGetInputRenderer() ); tubefilter->SetlstPoints( bbGetInputlstPointX(), bbGetInputlstPointY(), bbGetInputlstPointZ() ); + + // Sets the default value for radius to 1 everywhere, if the radius input vevctor is empty. + if (bbGetInputlstRadio().size() == 0) + { + std::vector radio; + radio.resize(bbGetInputlstPointX().size(), 1.); + bbSetInputlstRadio(radio); + } tubefilter->SetlstRadius( bbGetInputlstRadio() ); + tubefilter->SetOpacity( bbGetInputOpacity() ); + tubefilter->SetTransform( bbGetInputTransform() ); + tubefilter->SetlstColour( bbGetInputColour() ); tubefilter->Run(); - bbSetOutputOutAxis( NULL ); - + bbSetOutputOutAxis( tubefilter->GetActor() ); printf("EED TubeFilter::Process end \n"); } + //===== // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) //===== void TubeFilter::bbUserSetDefaultValues() { - // SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX // Here we initialize the input 'In' to 0 -// bbSetInputIn(0); - + bbSetInputOpacity(1); + bbSetInputTransform(NULL); + + std::vector colour; + // 0- gray + colour.push_back(1.0); + colour.push_back(0.0); + colour.push_back(0.0); + bbSetInputColour(colour); + + std::vector lstRadius; + lstRadius.push_back(1); + bbSetInputColour(lstRadius); } + //===== // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) //===== void TubeFilter::bbUserInitializeProcessing() { - // THE INITIALIZATION METHOD BODY : // Here does nothing // but this is where you should allocate the internal/output pointers -// if any - - tubefilter = new MaracasTubeFilter(); - +// if any + tubefilter = NULL; } + //===== // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost) //===== void TubeFilter::bbUserFinalizeProcessing() { - // THE FINALIZATION METHOD BODY : // Here does nothing // but this is where you should desallocate the internal/output pointers // if any - } + } // EO namespace bbcreaMaracasVisu