]> 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 5bfd80b857174e037f4925e28d75f4281e7b4d55..fec824099408a2b00eace62478298500b02845c7 100644 (file)
 #include "bbcreaMaracasVisuPackage.h"
 #include "vtkLinearTransform.h"
 
+#include "vtkUnsignedCharArray.h"
+#include "vtkCellData.h"
+#include "vtkPolyLine.h"
+#include "vtkLine.h"
+
+
+
 namespace bbcreaMaracasVisu
 {
 
@@ -41,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);
 
@@ -60,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++)
@@ -72,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();
        }
@@ -83,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 )
@@ -120,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 )
@@ -131,8 +203,8 @@ void DrawAxisTree3D::Process()
                 vecVtkPolyData[iActor]->Delete();
                 vecVtkPolyDataMaper[iActor]->Delete();
                 vecVtkActors[iActor]->Delete();
-            }
-         }
+            } // if
+         } // for iActor
          vecVtkPolyData.clear();
          vecVtkPolyDataMaper.clear();
          vecVtkActors.clear();
@@ -148,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");
 
@@ -201,6 +274,7 @@ void DrawAxisTree3D::bbUserSetDefaultValues()
 
      bbSetInputColour(colour);
      bbSetInputOpacity(1);
+     bbSetInputLineWidth(0.5);
      bbSetInputColourLaw(1);
 
 }