/* # --------------------------------------------------------------------- # # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image # pour la Sante) # 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. # ------------------------------------------------------------------------ */ #include "vtkStreamLineCreateColorInfo.h" #include "vtkIdList.h" #include "vtkCellArray.h" #include "vtkCharArray.h" #include "vtkDoubleArray.h" #include "vtkPointData.h" vtkStreamLineCreateColorInfo::vtkStreamLineCreateColorInfo() { _StreamLinesIn = NULL; _vtkidlist = vtkIdList::New(); } vtkStreamLineCreateColorInfo::~vtkStreamLineCreateColorInfo() { } //--------------------------------------------- void vtkStreamLineCreateColorInfo::SetStreamLinesIn(vtkPolyData* streamlinein) { _StreamLinesIn = streamlinein; } //--------------------------------------------- vtkPolyData *vtkStreamLineCreateColorInfo::GetStreamLinesOut() { return _StreamLinesIn; } //--------------------------------------------- void vtkStreamLineCreateColorInfo::Run() { vtkCellArray *vtkcellarray = _StreamLinesIn->GetLines(); long int nLinesCell = vtkcellarray->GetNumberOfCells(); long int numberofids; long int ii,jj,iLine; double point1[3]; double point2[3]; long int id,id1,id2; double vx,vy,vz,mag; double colorDirX,colorDirY,colorDirZ; _StreamLinesIn->Update(); vtkCharArray *mask = vtkCharArray::New(); vtkDoubleArray *magnitud = vtkDoubleArray::New(); vtkDoubleArray *velocity = vtkDoubleArray::New(); vtkDoubleArray *colorDirection = vtkDoubleArray::New(); mask->SetName("creaMask"); // ... fill the colors array mask->SetNumberOfComponents(1); //3d normals (ie x,y,z) mask->SetNumberOfTuples(_StreamLinesIn->GetNumberOfPoints()); magnitud->SetName("creaMagnitud"); // ... fill the colors array magnitud->SetNumberOfComponents(1); //3d normals (ie x,y,z) magnitud->SetNumberOfTuples(_StreamLinesIn->GetNumberOfPoints()); velocity->SetName("creaVelocity"); // ... fill the colors array velocity->SetNumberOfComponents(3); //3d normals (ie x,y,z) velocity->SetNumberOfTuples(_StreamLinesIn->GetNumberOfPoints()); colorDirection->SetName("creaColorDirection"); // ... fill the colors array colorDirection->SetNumberOfComponents(3); //3d normals (ie x,y,z) colorDirection->SetNumberOfTuples(_StreamLinesIn->GetNumberOfPoints()); for (ii=0;ii<_StreamLinesIn->GetNumberOfPoints();ii++) { mask->SetTuple1 (ii, 0); magnitud->SetTuple1 (ii, 0); velocity->SetTuple3 (ii, 0, 0, 0); colorDirection->SetTuple3 (ii, 0, 0, 0); } // FOR EACH LINE ii=0; for ( iLine=0 ; iLineGetCell(ii, _vtkidlist ); numberofids = _vtkidlist->GetNumberOfIds(); for (jj=0;jjGetId(jj); if (jj-1>=0) { id1 = _vtkidlist->GetId(jj-1); } else {id1=id;} if (jj+1GetId(jj+1);} else {id2=id;} _StreamLinesIn->GetPoint( id1 ,point1); _StreamLinesIn->GetPoint( id2 ,point2); vx= point1[0]-point2[0]; vy= point1[1]-point2[1]; vz= point1[2]-point2[2]; mag= sqrt( vx*vx +vy*vy + vz*vz ); colorDirX=fabs(vx/mag); colorDirY=fabs(vy/mag); colorDirZ=fabs(vz/mag); mask->SetTuple1 (id, 1); magnitud->SetTuple1 (id, mag); velocity->SetTuple3 (id, vx,vy,vz); colorDirection->SetTuple3 (id, colorDirX,colorDirY,colorDirZ); } ii=ii+numberofids+1; } // for iLine _StreamLinesIn->GetPointData()->AddArray( mask ); _StreamLinesIn->GetPointData()->AddArray( magnitud ); _StreamLinesIn->GetPointData()->AddArray( velocity ); _StreamLinesIn->GetPointData()->AddArray( colorDirection ); } //--------------------------------------------- void vtkStreamLineCreateColorInfo::Process() { if (_StreamLinesIn!=NULL) { Run(); } }