X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcreaVtk%2FvtkTensorsVisu.cpp;h=182f1d734cefcb6145d9b87b5849cceab0e3c117;hb=8b897e95b16fec9d4da9e687b750101f6f16e173;hp=046b0a5bbd5c35bf1bf1342175c7b54da34b7d7b;hpb=562222204bce7de0a24fac67cb4e5acc05b20f5d;p=creaVtk.git diff --git a/lib/creaVtk/vtkTensorsVisu.cpp b/lib/creaVtk/vtkTensorsVisu.cpp index 046b0a5..182f1d7 100644 --- a/lib/creaVtk/vtkTensorsVisu.cpp +++ b/lib/creaVtk/vtkTensorsVisu.cpp @@ -28,17 +28,21 @@ #include "vtkTensorsVisu.h" #include "vtkProperty.h" +#include "vtkDoubleArray.h" + //------------------------------------------------------------------------ vtkTensorsVisu::vtkTensorsVisu() : vtkVectorsTensorsVisuBase() { ss = vtkSphereSource::New(); - superquadratic = vtkSuperquadricSource::New(); + superquadratic = vtkSuperquadricSource::New(); cs = vtkCubeSource::New(); - tg = vtkTensorGlyph::New(); - pdn = vtkPolyDataNormals::New(); + + tg = NULL; + + pdn = vtkPolyDataNormals::New(); pd = vtkPolyData::New(); - pod = vtkPointData::New(); + pod = vtkPointData::New(); } //------------------------------------------------------------------------ @@ -50,157 +54,186 @@ vtkTensorsVisu::~vtkTensorsVisu() //------------------------------------------------------------------------ void vtkTensorsVisu::Process() { -printf("EED vtkTensorsVisu::Process Start\n"); - - if (_active==true) { - if(GetTypeForm()==2) // source superquadratic { + if (tg==NULL) { tg = vtkTensorGlyph::New(); } + superquadratic->SetThetaResolution(20); superquadratic->SetPhiResolution(20); +#if VTK_MAJOR_VERSION <= 5 tg->SetSource(superquadratic->GetOutput()); +#else + superquadratic->Update(); + tg->SetSourceData(superquadratic->GetOutput()); +#endif } else if(GetTypeForm()==1) { // source sphere +#if VTK_MAJOR_VERSION <= 5 tg->SetSource(ss->GetOutput()); +#else + ss->Update(); + tg->SetSourceData(ss->GetOutput()); +#endif } else { // source cube +#if VTK_MAJOR_VERSION <= 5 tg->SetSource(cs->GetOutput()); +#else + cs->Update(); + tg->SetSourceData(cs->GetOutput()); +#endif } - +#if VTK_MAJOR_VERSION <= 5 tg->SetInput( GetDataObject() ); +#else + tg->SetInputData( GetDataObject() ); +#endif // tg->ScalingOn(); // tg->SetScaling(25); - //if(isfromcal) tg->SetScaleFactor( GetScaleFactor() ); - tg->ScalingOn( ); - //else - // //tg->SetScaleFactor(2); - // tg->SetScaleFactor(scale_factor); -//EED tg->Update(); //The normals are needed to generate the right colors and if // not used some of the glyphs are black. +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 pdn->SetInput(tg->GetOutput()); -//EED pdn->Update(); - - - //EED================================ - //pdm->SetInput( tg->GetOutput()); - //pdm->SetScalarRange( range ); - - //vtkPolyData *pd = tg->GetOutput(); - //vtkPointData *pointdata = pd->GetPointData(); - //vtkDataArray *da = pointdata->GetVectors(); - - //vtkDataArray *nda = vtkFloatArray::New(); - //nda->DeepCopy(da); - - //pointdata->AddArray( nda ); - //reader->GetOutput()->GetPointData()->AddArray( nda ); - - //pdm->SetInput(pdn->GetOutput()); - //pdm->ScalarVisibilityOn(); - //pdm->SetLookupTable(vLutEED); - //pdm->SetColorModeToMapScalars(); - //pdm->SelectColorArray("color"); - //pdm->SetScalarModeToUsePointFieldData(); - //pdm->ImmediateModeRenderingOn(); - //===================================== - _pdm->SetInput( pdn->GetOutput() ); - _pdm->ImmediateModeRenderingOn(); - - _pdm->ScalarVisibilityOn(); - _pdm->SetScalarModeToUsePointFieldData(); - - -//EED _pdm->Update(); - +#else + pdn->SetInputData(tg->GetOutput()); + pdn->Update(); + _pdm->SetInputData( pdn->GetOutput() ); + _pdm->Update(); +#endif _actor->SetMapper( _pdm ); _actor->GetProperty()->SetOpacity( GetOpacity() ); - tg->ColorGlyphsOn(); -// tg->ExtractEigenvaluesOn(); - tg->SetColorModeToEigenvalues(); - - _pdm->SetLookupTable( _LutEED ); - _pdm->SelectColorArray( "Normals" ); - + tg->SetColorModeToEigenvalues(); +// tg->SetColorModeToScalars(); + tg->Update(); - //int tcg = tg->GetColorGlyphs(); -// tg->SetColorGlyphs(10); -// tg->SetColorModeToScalars(); - //tg->ThreeGlyphsOn(); - - - //vtkDataArray* da = vtkDataArray::New(); +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 pd = tg->GetOutput(); pd->Update(); +#else + tg->Update(); + pd = tg->GetOutput(); +#endif + pod = pd->GetPointData(); pod->Update(); -//EED1 if(pod->GetScalars()) -//EED1 { -//EED1 _pdm->SetScalarRange(pod->GetScalars()->GetRange()); -//EED1 } - //pdm->SelectColorArray("GlyphVector"); - -//EED _pdm->Update(); - - - - tg->Print( std::cout ); - printf("EED vtkTensorsVisu::Process ------------------------------------------\n"); - pd->Print( std::cout ); - tg->Update(); - vtkPolyData *pd = pdn->GetOutput(); - vtkPointData *pointdata = pd->GetPointData(); - - - printf("EED vtkTensorsVisu::Process XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx\n"); - pointdata->Print( std::cout ); - - - int aa = pd->GetNumberOfPieces (); - int bb = pd->GetNumberOfVerts (); - int cc = pd->GetNumberOfLines (); - int dd = pd->GetNumberOfPolys (); - int ee = pd->GetNumberOfStrips (); - int ff = pd->GetNumberOfCells(); - - printf("EED vtkTensorsVisu::Process %d %d %d %d %d %d \n", aa,bb,cc,dd,ee,ff); - - vtkPolyData *ttt = (vtkPolyData *)GetDataObject(); - int numPnts = ttt->GetNumberOfPoints(); - printf("EED vtkTensorsVisu::Process numPnts %d \n", numPnts ); - - - vtkIdType numSourcePts, numSourceCells; - vtkPoints *sourcePts; - sourcePts = tg->GetSource()->GetPoints(); - numSourcePts = sourcePts->GetNumberOfPoints(); - numSourceCells = tg->GetSource()->GetNumberOfCells(); - printf("EED vtkTensorsVisu::Process numSourcePts %d numSourceCells %d\n", numSourcePts, numSourceCells); + vtkPolyData *pd_pdn = pdn->GetOutput(); + vtkPointData *pointdata_pdn = pd_pdn->GetPointData(); + + vtkPolyData *pd_tg = tg->GetOutput(); + vtkPointData *pointdata_tg = pd_tg->GetPointData(); + + vtkPolyData *pd_do = (vtkPolyData*)GetDataObject(); + vtkPointData *pointdata_do = pd_do->GetPointData(); + + int numPnts = ((vtkPolyData *)GetDataObject())->GetNumberOfPoints(); + + vtkIdType numSourcePts; +// vtkIdType numSourceCells; + + vtkPoints *sourcePts = tg->GetSource()->GetPoints(); + + + numSourcePts = sourcePts->GetNumberOfPoints(); +// numSourceCells = tg->GetSource()->GetNumberOfCells(); + + vtkDataArray *tensorsArray = pointdata_do->GetArray("tensors"); + if (tensorsArray) + { + vtkDoubleArray *newScalarArray = vtkDoubleArray::New(); + newScalarArray->SetName( "NormalsEED" ); + newScalarArray->SetNumberOfComponents(3); + int iNumPts,iNumSourcePts; + int iNormalsEED=0; + double *normalValue; + double sumEigenvalue,sumEigenvalue1,sumEigenvalue2,sumEigenvalue3; + unsigned char dirx,diry,dirz; + int idEigen; + for (iNumPts=0;iNumPtsGetTuple9(iNumPts); + sumEigenvalue1 = sqrt (normalValue[0]*normalValue[0] + normalValue[1]*normalValue[1] + normalValue[2]*normalValue[2]); + sumEigenvalue2 = sqrt (normalValue[3]*normalValue[3] + normalValue[4]*normalValue[4] + normalValue[5]*normalValue[5]); + sumEigenvalue3 = sqrt (normalValue[6]*normalValue[6] + normalValue[7]*normalValue[7] + normalValue[8]*normalValue[8]); + + if ((sumEigenvalue1>=sumEigenvalue2) && (sumEigenvalue1>=sumEigenvalue3)) + { + sumEigenvalue=sumEigenvalue1; + idEigen=0; + } + if ((sumEigenvalue2>sumEigenvalue1) && (sumEigenvalue2>=sumEigenvalue3)) + { + sumEigenvalue=sumEigenvalue2; + idEigen=3; + } + if ((sumEigenvalue3>=sumEigenvalue1) && (sumEigenvalue3>=sumEigenvalue2)) + { + sumEigenvalue=sumEigenvalue3; + idEigen=6; + } + dirx = (unsigned char)( 255*fabs(normalValue[idEigen+0]/sumEigenvalue) ); + diry = (unsigned char)( 255*fabs(normalValue[idEigen+1]/sumEigenvalue) ); + dirz = (unsigned char)( 255*fabs(normalValue[idEigen+2]/sumEigenvalue) ); + for (iNumSourcePts=0;iNumSourcePtsInsertTuple3( iNormalsEED, dirx,diry,dirz); + newScalarArray->InsertTuple3( iNormalsEED, normalValue[idEigen+0],normalValue[idEigen+1],normalValue[idEigen+2] ); + iNormalsEED++; + } // for iNumSourcePts + + } // for iNumPts + + + pointdata_tg->RemoveArray( "NormalsEED" ); + pointdata_tg->AddArray( newScalarArray ); +// pointdata_pdn->Update(); + tg->Update(); + } // if tensorsArray + + _pdm->ScalarVisibilityOn(); + _pdm->SetColorModeToMapScalars(); + //_pdm->SetColorModeToDefault(); + // _pdm->SetColorModeToDirectScalars(); // NOT compile + _pdm->SetScalarModeToUsePointFieldData(); + +//EED2021-09-03 Deprecated. Removed in vtk 8.1 +// _pdm->ImmediateModeRenderingOn(); + + _LutEED->SetVectorModeToComponent(); + //_LutEED->SetVectorModeToRGBColors(); + //_LutEED->SetVectorModeToMagnitud(); + _pdm->SetLookupTable( _LutEED ); + _pdm->SelectColorArray( "NormalsEED" ); + +//EED 2017-01-01 Migration VTK7 +#if VTK_MAJOR_VERSION <= 5 + //... +#else + _pdm->Update(); +#endif - int i,sizeDa = pointdata->GetNumberOfArrays(); +/* + int i,sizeDa = pointdata_tg->GetNumberOfArrays(); printf("EED vtkTensorsVisu::Process sizeDa %d \n", sizeDa ); for (i=0;iGetArray(i)->GetSize() / numPnts; - printf("EED vtkTensorsVisu::Process-name %d, %s, size=%d %d \n", i, pointdata->GetArrayName(i) , pointdata->GetArray(i)->GetSize(), faces ); - } - - - + int faces = pointdata_tg->GetArray(i)->GetSize() / numPnts; +//pointdata_pdn->GetArray(i)->Print( std::cout ); + printf("EED vtkTensorsVisu::Process-name %d, %s, size=%d %d \n", i, pointdata_tg->GetArrayName(i) , pointdata_tg->GetArray(i)->GetSize(), faces ); + } +*/ } // _active - - VisibilityActor(); - -printf("EED vtkTensorsVisu::Process End.\n"); + VisibilityActor(); }