]> Creatis software - creaMaracasVisu.git/blobdiff - bbtk/src/bbmaracasvisuDrawAxisTree3D.cxx
#2809 creaMaracas Visu Feature New Normal - update UnitLayerPaint DrawAxisTree
[creaMaracasVisu.git] / bbtk / src / bbmaracasvisuDrawAxisTree3D.cxx
index 0e2d99d9005851634c62277576d6264860e5b470..fec824099408a2b00eace62478298500b02845c7 100644 (file)
@@ -1,7 +1,39 @@
+/*# ---------------------------------------------------------------------
+#
+# 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.
+# ------------------------------------------------------------------------ */
+
 #include "bbmaracasvisuDrawAxisTree3D.h"
 #include "bbcreaMaracasVisuPackage.h"
 #include "vtkLinearTransform.h"
 
+#include "vtkUnsignedCharArray.h"
+#include "vtkCellData.h"
+#include "vtkPolyLine.h"
+#include "vtkLine.h"
+
+
+
 namespace bbcreaMaracasVisu
 {
 
@@ -16,6 +48,7 @@ void DrawAxisTree3D::DrawOneAxis(int iGeneral,int numPoints, int iAxis)
        vtkPolyDataMapper       *polydatamapper = vtkPolyDataMapper::New();
        vtkActor                        *vtkactor               = vtkActor::New();
 
+//     polydatamapper->ScalarVisibilityOff();
        polydatamapper->SetInput(polydata);
        vtkactor->SetMapper(polydatamapper);
 
@@ -35,8 +68,9 @@ void DrawAxisTree3D::DrawOneAxis(int iGeneral,int numPoints, int iAxis)
 
        if( lstpointsXsize>0 ){
                vtkPoints* allPoints            = vtkPoints::New( );
+vtkPolyLine *polyline = vtkPolyLine::New();
                vtkCellArray* allTopology       = vtkCellArray::New( );
-               allTopology->InsertNextCell( numPoints );
+//             allTopology->InsertNextCell( numPoints );
 
                size=iGeneral+numPoints;
                for (i=iGeneral;i<size;i++)
@@ -47,10 +81,37 @@ void DrawAxisTree3D::DrawOneAxis(int iGeneral,int numPoints, int iAxis)
                                                                                bbGetInputlstPointY()[i]*spc[1],
                                                                                bbGetInputlstPointZ()[i]*spc[2] );
 //                     printf("DrawAxisTree3D::DrawOneAxis point  %d -> %f, %f, %f \n", i,  bbGetInputlstPointX()[i], bbGetInputlstPointY()[i], bbGetInputlstPointZ()[i] );
-                       allTopology->InsertCellPoint( i-iGeneral );
+
+polyline->GetPointIds()->InsertNextId(i-iGeneral);
+
+//                     allTopology->InsertCellPoint( i-iGeneral );
                } // rof
+  allTopology->InsertNextCell(polyline);
+
+ // create cell array for edges
+  vtkCellArray *edges = vtkCellArray::New();
+
+// connect edge's and vertexes point ids
+  for(vtkIdType i = iGeneral; i < size-1; i++)
+  {
+    vtkLine *edge = vtkLine::New();
+    edge->GetPointIds()->SetId(0, i-iGeneral);
+    edge->GetPointIds()->SetId(1, (i-iGeneral+1) );
+    edges->InsertNextCell(edge);
+    edge->Delete();
+//    vtkSmartPointer<vtkVertex> vertex = vtkSmartPointer<vtkVertex>::New();
+//    vertex->GetPointIds()->SetId(0, i);
+//    vertexes->InsertNextCell(vertex);
+  }
+
                polydata->SetPoints( allPoints );
-               polydata->SetLines( allTopology );
+ polydata->SetLines(edges);
+//             polydata->SetLines( allTopology );
+
+
+ // polydata->SetPolys( allTopology );
+
+               edges->Delete();
                allPoints->Delete();
                allTopology->Delete();
        }
@@ -58,19 +119,55 @@ void DrawAxisTree3D::DrawOneAxis(int iGeneral,int numPoints, int iAxis)
        // color
        double r,g,b;
 
-       if ( (iAxis*3+1) < (int)(bbGetInputColour().size()) )
+       if (bbGetInputColourLaw()==1)  // the same color for all 
        {
+               r = bbGetInputColour()[0];
+               g = bbGetInputColour()[1];
+               b = bbGetInputColour()[2];
+               vtkactor->GetProperty()->SetColor( r,g,b );
+       } // Law 1  color for all
+
+       if (bbGetInputColourLaw()==2) // different colors for each segment
+       {
+               if ( (iAxis*3+1) < (int)(bbGetInputColour().size()) )   
+               {
                        r = bbGetInputColour()[0+iAxis*3];
                        g = bbGetInputColour()[1+iAxis*3];
                        b = bbGetInputColour()[2+iAxis*3];
-       } else {
+               } else {
                        r = (rand() % 100) / 100.0;
                        g = (rand() % 100) / 100.0;
                        b = (rand() % 100) / 100.0;
-       }
+               }
+               vtkactor->GetProperty()->SetColor( r,g,b );
+       }  // Law 2  color for each segment
+
+
+       if (bbGetInputColourLaw()==3)  // color for each point 
+       {
+               // Setup the colors array
+               vtkUnsignedCharArray *colors = vtkUnsignedCharArray::New();
+               colors->SetNumberOfComponents(3);
+               colors->SetName("Colors");
+//             colors->SetName("vertex color");
+               int iPoint,pointSize=iGeneral+numPoints;
+
 
-       vtkactor->GetProperty()->SetColor( r,g,b );
-       vtkactor->GetProperty()->SetLineWidth( 0.5 );
+               for (iPoint=iGeneral; iPoint<pointSize; iPoint++)
+               {
+                       r = bbGetInputColour()[0+iPoint*3]*255.0;
+                       g = bbGetInputColour()[1+iPoint*3]*255.0;
+                       b = bbGetInputColour()[2+iPoint*3]*255.0;
+                       //colors->SetTuple3(iPoint,r,g,b);
+                       colors->InsertNextTuple3(r,g,b);
+               }
+               polydata->GetCellData()->SetScalars(colors);
+               polydata->Modified();
+       }  // Law 3 color for each point
+
+
+       vtkactor->GetProperty()->SetLineWidth( bbGetInputLineWidth() );
        vtkactor->GetProperty()->SetOpacity( bbGetInputOpacity() );
 
        if ( bbGetInputTransform()!=NULL )
@@ -95,9 +192,9 @@ void DrawAxisTree3D::Process()
     int iActor,sizeActors = vecVtkActors.size();
        int numPoints;
 
-    if (oldLstSize!=sizeLstAxis)
-        {
-        oldLstSize=sizeLstAxis;
+//    if (oldLstSize!=sizeLstAxis)
+//      {
+//        oldLstSize=sizeLstAxis;
          for (iActor=0 ; iActor<sizeActors; iActor++)
          {
             if (bbGetInputRenderer()!=NULL )
@@ -106,8 +203,8 @@ void DrawAxisTree3D::Process()
                 vecVtkPolyData[iActor]->Delete();
                 vecVtkPolyDataMaper[iActor]->Delete();
                 vecVtkActors[iActor]->Delete();
-            }
-         }
+            } // if
+         } // for iActor
          vecVtkPolyData.clear();
          vecVtkPolyDataMaper.clear();
          vecVtkActors.clear();
@@ -123,21 +220,22 @@ void DrawAxisTree3D::Process()
     //                 printf("EED  DrawAxisTree3D::Process  %d/%d\n", iAxis,sizeLstAxis );
     //         }
 
-        }
+        } // for iAxis
 
         if ( bbGetInputiAxis() < (int)(vecVtkActors.size()-1) )
         {
             bbSetOutputOutAxis( vecVtkActors[ bbGetInputiAxis() ] );
         } else         {
-            printf("TubeTreeFilter .ERROR. missing index vector...\n");
-        }
+            printf("DrawAxisTree3D .ERROR. missing index vector...\n");
+        } // if 
 
-    } else {// if oldLstSize
//   } else {// if oldLstSize
         for (iActor=0 ; iActor<sizeActors; iActor++)
         {
             vecVtkActors[iActor]->GetProperty()->SetOpacity( bbGetInputOpacity() );
+           vecVtkActors[iActor]->GetProperty()->SetLineWidth( bbGetInputLineWidth() );
         }
-    }
+//    } // if oldLstSize
 
        printf("EED DrawAxisTree3D::Process end \n");
 
@@ -176,6 +274,7 @@ void DrawAxisTree3D::bbUserSetDefaultValues()
 
      bbSetInputColour(colour);
      bbSetInputOpacity(1);
+     bbSetInputLineWidth(0.5);
      bbSetInputColourLaw(1);
 
 }