]> Creatis software - bbtkGEditor.git/blobdiff - lib/EditorGraphicBBS/bbsVtkGUIEditorGraphic/vtkGBoxView.cxx
#3084 bbGEditor Bug New Normal - Color refresh for inputs and outputs
[bbtkGEditor.git] / lib / EditorGraphicBBS / bbsVtkGUIEditorGraphic / vtkGBoxView.cxx
index b60742e1f4ff459a654d75371eebdeacce7274fc..a8789d779f407038f2ff23a1107a7667307b8a75 100644 (file)
@@ -60,6 +60,8 @@ Version:   $Revision$
 
 
 #include "vtkGBoxView.h"
+#include "vtkUnsignedCharArray.h"
+#include "vtkCellData.h"
 
 namespace bbtk
 {
@@ -78,40 +80,117 @@ namespace bbtk
        //=========================================================================
        void vtkGBoxView::update(int idController,int command)
        {
-               updateColors();
-               
+               updateColors();         
                double xInic, yInic,zInic,xFin, yFin,zFin;
                _model->getInicPoint(xInic,yInic,zInic);
                _model->getFinalPoint(xFin, yFin,zFin);
-
                // RaC In the actual version, zInic=zFin=GPOSITION_Z
-
                _pts->SetPoint(0, xInic, yInic, zInic );
                _pts->SetPoint(1, xInic, yFin, zInic );
                _pts->SetPoint(2, xFin, yFin, zFin );
                _pts->SetPoint(3, xFin, yInic, zFin );
-
+               _pts->Modified();
                updatePorts();
-
-               _borderPolyMapper->Modified();
+//             _borderPolyMapper->Modified();
                _fillPolyMapper->Modified();
-               //-----------
-
-               //-----------
                setRefreshWaiting();
        }
 
+
+       //=========================================================================
+//EED2017
+       void vtkGBoxView::createVtkInputOutputPorts()
+       {
+               ///************************* Inputs Fill (triangles) *************************
+               float rgb[3];
+               GBoxModel* boxModel                     =(GBoxModel*)_model;
+               int numberOfTriangles                   = boxModel->getNumInputPorts();
+               _TrianglesInputsPts                             = vtkPoints::New();
+               _TrianglesInputsPts->SetNumberOfPoints( 3*numberOfTriangles );
+
+               vtkCellArray *stripTrianglesInputs = vtkCellArray::New();
+               vtkPolyData *pdTrianglesInputs  = vtkPolyData::New();
+               _TrianglesInputsPolyMapper              = vtkPolyDataMapper::New();
+               _TrianglesInputsActor                   = vtkActor::New();
+               // RaC In the actual version, zInic=zFin=GPOSITION_Z
+               for (int i=0 ; i<numberOfTriangles; i++)
+               {
+                               stripTrianglesInputs->InsertNextCell( 3 );
+                               stripTrianglesInputs->InsertCellPoint(i*3+0);
+                               stripTrianglesInputs->InsertCellPoint(i*3+1);
+                               stripTrianglesInputs->InsertCellPoint(i*3+2);
+               }
+
+               // Create cell data
+               _cellDataInputTriangles = vtkUnsignedCharArray::New();
+               _cellDataInputTriangles->SetNumberOfComponents(3);
+               _cellDataInputTriangles->SetNumberOfTuples(numberOfTriangles);
+               for (int i = 0; i < numberOfTriangles; i++)
+               {
+                       rgb[0] = 100;
+                       rgb[1] = 100;
+                       rgb[2] = 100;
+                       _cellDataInputTriangles->SetTuple(i, rgb);
+               } // for colors  
+               pdTrianglesInputs->GetCellData()->SetScalars( _cellDataInputTriangles );
+
+               pdTrianglesInputs->SetPoints( _TrianglesInputsPts );
+               pdTrianglesInputs->SetStrips( stripTrianglesInputs );
+               _TrianglesInputsPolyMapper->SetInput( pdTrianglesInputs );
+               _TrianglesInputsActor->SetMapper(_TrianglesInputsPolyMapper);
+               _TrianglesInputsPolyMapper->Modified();
+
+
+               ///************************* Inputs Fill (triangles) *************************
+
+               ///************************* Outputs Fill (triangles) *************************
+               numberOfTriangles                                               = boxModel->getNumOutputPorts();
+               _TrianglesOutputsPts                                    = vtkPoints::New();
+               _TrianglesOutputsPts->SetNumberOfPoints( 3*numberOfTriangles );
+
+               vtkCellArray *stripTrianglesOutputs     = vtkCellArray::New();
+               vtkPolyData *pdTrianglesOutputs                 = vtkPolyData::New();
+               _TrianglesOutputsPolyMapper                             = vtkPolyDataMapper::New();
+               _TrianglesOutputsActor                                  = vtkActor::New();
+               // RaC In the actual version, zInic=zFin=GPOSITION_Z
+               for (int i=0 ; i<numberOfTriangles; i++)
+               {
+                       stripTrianglesOutputs->InsertNextCell( 3 );
+                       stripTrianglesOutputs->InsertCellPoint(i*3+0);
+                       stripTrianglesOutputs->InsertCellPoint(i*3+1);
+                       stripTrianglesOutputs->InsertCellPoint(i*3+2);
+               } // for
+               // Create cell data
+               _cellDataOutputTriangles = vtkUnsignedCharArray::New();
+               _cellDataOutputTriangles->SetNumberOfComponents(3);
+               _cellDataOutputTriangles->SetNumberOfTuples(numberOfTriangles);
+               for (int i = 0; i < numberOfTriangles; i++)
+               {
+                       rgb[0] = 000;
+                       rgb[1] = 255;
+                       rgb[2] = 255;
+                       _cellDataOutputTriangles->SetTuple(i, rgb);
+               } // for colors  
+               pdTrianglesOutputs->GetCellData()->SetScalars( _cellDataOutputTriangles );
+               pdTrianglesOutputs->SetPoints( _TrianglesOutputsPts );
+               pdTrianglesOutputs->SetStrips( stripTrianglesOutputs );
+               _TrianglesOutputsPolyMapper->SetInput( pdTrianglesOutputs );
+               _TrianglesOutputsActor->SetMapper(_TrianglesOutputsPolyMapper);
+               _TrianglesOutputsPolyMapper->Modified();
+               ///************************* Inputs Fill (triangles) *************************
+       }
+
+
        //=========================================================================
 
        void vtkGBoxView::createVtkObjects() //virtual
        {
-
                //------------
                _pts                            = vtkPoints::New();     
-               vtkCellArray *lines = vtkCellArray::New();
-               vtkPolyData *_pd        = vtkPolyData::New();
-               _borderPolyMapper       = vtkPolyDataMapper::New();
-               _borderObjectActor      = vtkActor::New();
+//             vtkCellArray *lines = vtkCellArray::New();
+//             vtkPolyData *_pd        = vtkPolyData::New();
+//             _borderPolyMapper       = vtkPolyDataMapper::New();
+//             _borderObjectActor      = vtkActor::New();
                                
                _pts->SetNumberOfPoints(4);
 
@@ -126,26 +205,23 @@ namespace bbtk
 //EED          _pts->SetPoint(2, xFin, yFin, zFin );
 //EED          _pts->SetPoint(3, xFin, yInic, zFin );
 
-               _pts->SetPoint(0, -1000, -1000, -1000 );
-               _pts->SetPoint(1, xInic, yFin, zInic );
-               _pts->SetPoint(2, 1000, 1000, 1000 );
-               _pts->SetPoint(3, xFin, yInic, zFin );
-               
-               
-               
-               lines->InsertNextCell(5);
-               lines->InsertCellPoint(0);
-               lines->InsertCellPoint(1);
-               lines->InsertCellPoint(2);
-               lines->InsertCellPoint(3);
-               lines->InsertCellPoint(0);
-                       
-               _pd->SetPoints( _pts );
-               _pd->SetLines( lines );
-
-               _borderPolyMapper->SetInput(_pd);
-               _borderObjectActor->SetMapper(_borderPolyMapper);
-               _borderPolyMapper->Modified();
+//EED 2017-03-02
+//             _pts->SetPoint(0, -1000, -1000, -1000 );
+//             _pts->SetPoint(1, xInic, yFin, zInic );
+//             _pts->SetPoint(2, 1000, 1000, 1000 );
+//             _pts->SetPoint(3, xFin, yInic, zFin );
+                               
+//             lines->InsertNextCell(5);
+//             lines->InsertCellPoint(0);
+//             lines->InsertCellPoint(1);
+//             lines->InsertCellPoint(2);
+//             lines->InsertCellPoint(3);
+//             lines->InsertCellPoint(0);                      
+//             _pd->SetPoints( _pts );
+//             _pd->SetLines( lines );
+//             _borderPolyMapper->SetInput(_pd);
+//             _borderObjectActor->SetMapper(_borderPolyMapper);
+//             _borderPolyMapper->Modified();
 
                
                ///************************* FILL *************************
@@ -172,22 +248,25 @@ namespace bbtk
                _fillPolyMapper->Modified();
 
                ///************************* FILL *************************
-
        }
 
        //=========================================================================
 
        void vtkGBoxView::addVtkActors()//virtual
        {
-               _baseView->GetRenderer()->AddActor(_borderObjectActor);
+//             _baseView->GetRenderer()->AddActor(_borderObjectActor);
                vtkGObjectView::addVtkActors();
+               _baseView->GetRenderer()->AddActor(_TrianglesInputsActor);
+               _baseView->GetRenderer()->AddActor(_TrianglesOutputsActor);
        }
 
        //=========================================================================
 
        void vtkGBoxView::removeVtkActors()//virtual
        {
-               _baseView->GetRenderer()->RemoveActor(_borderObjectActor);
+//             _baseView->GetRenderer()->RemoveActor(_borderObjectActor);
+               _baseView->GetRenderer()->RemoveActor(_TrianglesInputsActor);
+               _baseView->GetRenderer()->RemoveActor(_TrianglesOutputsActor);
                vtkGObjectView::removeVtkActors();
        }
 
@@ -195,45 +274,125 @@ namespace bbtk
 
        void vtkGBoxView::updateColors()
        {
+               printf("EED vtkGBoxView::updateColors\n");
                _fillObjectActor->GetProperty()->SetAmbient(0.6);
 
                if(_state==NOTHING_HAPPENS)
                {
-                       _borderObjectActor->GetProperty()->SetLineWidth(1);
-                       _borderObjectActor->GetProperty()->SetColor(BOXBORDER_NH_R,BOXBORDER_NH_G,BOXBORDER_NH_B);
+//                     _borderObjectActor->GetProperty()->SetLineWidth(1);
+//                     _borderObjectActor->GetProperty()->SetColor(BOXBORDER_NH_R,BOXBORDER_NH_G,BOXBORDER_NH_B);
                        _fillObjectActor->GetProperty()->SetColor(BOXFILL_NH_R,BOXFILL_NH_G,BOXFILL_NH_B);
                        
                }
                else if(_state==HIGHLIGHTED)
                {
-                       _borderObjectActor->GetProperty()->SetLineWidth(2);
-                       
-                       _borderObjectActor->GetProperty()->SetColor(BOXBORDER_HIGHLIGHTED_R,BOXBORDER_HIGHLIGHTED_G,BOXBORDER_HIGHLIGHTED_B);
+//                     _borderObjectActor->GetProperty()->SetLineWidth(2);                     
+//                     _borderObjectActor->GetProperty()->SetColor(BOXBORDER_HIGHLIGHTED_R,BOXBORDER_HIGHLIGHTED_G,BOXBORDER_HIGHLIGHTED_B);
                        _fillObjectActor->GetProperty()->SetColor(BOXFILL_HIGHLIGHTED_R,BOXFILL_HIGHLIGHTED_G,BOXFILL_HIGHLIGHTED_B);
                }
                else if(_state==DRAG)
                {
-                       _borderObjectActor->GetProperty()->SetLineWidth(1.2);
-                       _borderObjectActor->GetProperty()->SetColor(BOXBORDER_DRAG_R,BOXBORDER_DRAG_G,BOXBORDER_DRAG_B);
+//                     _borderObjectActor->GetProperty()->SetLineWidth(1.2);
+//                     _borderObjectActor->GetProperty()->SetColor(BOXBORDER_DRAG_R,BOXBORDER_DRAG_G,BOXBORDER_DRAG_B);
                        _fillObjectActor->GetProperty()->SetColor(BOXFILL_DRAG_R,BOXFILL_DRAG_G,BOXFILL_DRAG_B);
                }
                else if(_state==SELECTED)
                {
-                       _borderObjectActor->GetProperty()->SetLineWidth(2);
-                       _borderObjectActor->GetProperty()->SetColor(BOXBORDER_SELECTED_R,BOXBORDER_SELECTED_G,BOXBORDER_SELECTED_B);
+//                     _borderObjectActor->GetProperty()->SetLineWidth(2);
+//                     _borderObjectActor->GetProperty()->SetColor(BOXBORDER_SELECTED_R,BOXBORDER_SELECTED_G,BOXBORDER_SELECTED_B);
                        _fillObjectActor->GetProperty()->SetColor(BOXFILL_SELECTED_R,BOXFILL_SELECTED_G,BOXFILL_SELECTED_B);
-               }
+               } // if state box
+
+               updateColorsPorts();
        }
 
+
        //=========================================================================
+       void vtkGBoxView::updateColorsPorts()
+       {
+               // Input ports
+               float rgb[3];
+               vtkGPortView    *portView;
+               GBoxModel               *boxModel       = (GBoxModel*)_model;
+               int numberOfTriangles           = boxModel->getNumInputPorts();
+               for (int i=0 ; i<numberOfTriangles; i++)
+               {
+                       portView = _inputsG[i];
+                       portView->getColors(rgb);
+                       rgb[0]=rgb[0]*255;
+                       rgb[1]=rgb[1]*255;
+                       rgb[2]=rgb[2]*255;
+                       _cellDataInputTriangles->SetTuple(i, rgb);
+               } // for
+
+               numberOfTriangles               = boxModel->getNumOutputPorts();
+               for (int i=0 ; i<numberOfTriangles; i++)
+               {
+                       portView = _outputsG[i];
+                       portView->getColors(rgb);
+                       rgb[0]=rgb[0]*255;
+                       rgb[1]=rgb[1]*255;
+                       rgb[2]=rgb[2]*255;
+                       _cellDataOutputTriangles->SetTuple(i, rgb);
+               } // for
+       }
+
 
+       //=========================================================================
        void vtkGBoxView::updatePorts()
        {
-               GBoxModel* bmod =(GBoxModel*)_model;
-               bmod->updatePorts();
+               double xInic, yInic,zInic,xFin, yFin,zFin;
+
+               GBoxModel* boxModel = (GBoxModel*)_model;
+               boxModel->updatePorts();
+
+// update position for one Actor that represents all InputPorts
+               GPortModel              *portModel;
+               int numberOfTriangles                   = boxModel->getNumInputPorts();
+               for (int i=0;i<numberOfTriangles;i++)
+               {
+                       portModel = boxModel->getInputPort(i);
+               portModel->getInicPoint( xInic , yInic , zInic ) ;
+               portModel->getFinalPoint( xFin , yFin , zFin ) ;
+               // RaC In the actual version, zInic=zFin=GPOSITION_Z
+                       _TrianglesInputsPts->SetPoint(i*3+0, xInic                                      , yInic , zInic );
+                       _TrianglesInputsPts->SetPoint(i*3+1, ( xInic + xFin ) / 2       , yFin  , zInic );
+                       _TrianglesInputsPts->SetPoint(i*3+2, xFin                                       , yInic , zFin );
+               }
+               _TrianglesInputsPts->Modified();
+        _TrianglesInputsPolyMapper->Modified( ) ;
+
+// update position for one Actor that represents all OutputPorts
+               numberOfTriangles                       = boxModel->getNumOutputPorts();
+               for (int i=0;i<numberOfTriangles;i++)
+               {
+                       portModel= boxModel->getOutputPort(i);
+               portModel->getInicPoint( xInic , yInic , zInic ) ;
+               portModel->getFinalPoint( xFin , yFin , zFin ) ;
+               // RaC In the actual version, zInic=zFin=GPOSITION_Z
+                       _TrianglesOutputsPts->SetPoint(i*3+0, xInic                                     , yInic , zInic );
+                       _TrianglesOutputsPts->SetPoint(i*3+1, ( xInic + xFin ) / 2      , yFin  , zInic );
+                       _TrianglesOutputsPts->SetPoint(i*3+2, xFin                                      , yInic , zFin );
+               }
+               _TrianglesOutputsPts->Modified();
+        _TrianglesOutputsPolyMapper->Modified( ) ;
+
+
+
        }
 
        //=========================================================================
+       void vtkGBoxView::addInputPort(vtkGPortView *inputport)
+       {
+               _inputsG.push_back(inputport);
+       }
+
+       //=========================================================================
+       void vtkGBoxView::addOutputPort(vtkGPortView *outputport)
+       {
+               _outputsG.push_back(outputport);
+       }
+
 
 }  // EO namespace bbtk