]> Creatis software - creaMaracasVisu.git/blobdiff - lib/maracasVisuLib/src/interface/wxWindows/widgets/manualContour/manualViewBaseContour.cpp
#3058 creaMaracasVisu Feature New Normal - optimizing of manualContourView of a...
[creaMaracasVisu.git] / lib / maracasVisuLib / src / interface / wxWindows / widgets / manualContour / manualViewBaseContour.cpp
index e7e0bea99c93935d46a54d0ed684d997f52a815d..79011538b27779b299a7955c9521820a5b6dad53 100644 (file)
@@ -1,3 +1,28 @@
+/*# ---------------------------------------------------------------------
+#
+# 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 "manualViewBaseContour.h"
 
 
@@ -60,6 +85,7 @@ int manualViewBaseContour::GetType() // virtual
 //int manualViewCircle::GetType()                      3;
 //int manualViewStar::GetType()                                4;
 //int manualViewLine::GetType()                                6;
+//int manualViewPoints::GetType()                      7;
 
 
        return 0;
@@ -83,11 +109,13 @@ void manualViewBaseContour :: AddCompleteContourActor(  bool ifControlPoints )
         /*vtkRenderer * theRenderer = */  _wxvtkbaseview->GetRenderer();  // JPRx ??
         //Adding the spline
         AddSplineActor();
-
         AddTextActor();
+
         //Adding each control point
         if( ifControlPoints )
+        {
                AddControlPoints();
+        }
         RefreshContour();
         Refresh();
 }
@@ -185,12 +213,20 @@ void manualViewBaseContour::AddControlPoints()
 // ----------------------------------------------------------------------------
 void manualViewBaseContour::AddTextActor()
 {
-       _wxvtkbaseview->GetRenderer()->AddActor2D( _textActor );
+       if(_show_text)
+       {
+               _wxvtkbaseview->GetRenderer()->AddActor2D( _textActor );
+               _wxvtkbaseview->GetRenderer()->AddActor2D( _textActor2 );
+       }
 }
 // ----------------------------------------------------------------------------
 void manualViewBaseContour::RemoveTextActor()
 {
-       _wxvtkbaseview->GetRenderer()->RemoveActor2D( _textActor );
+       if(_show_text)
+       {
+               _wxvtkbaseview->GetRenderer()->RemoveActor2D( _textActor );
+               _wxvtkbaseview->GetRenderer()->RemoveActor2D( _textActor2 );
+       }
 }
 // ----------------------------------------------------------------------------
 void manualViewBaseContour::DeleteVtkObjects()
@@ -230,37 +266,48 @@ double manualViewBaseContour::GetWidthLine()
 // ----------------------------------------------------------------------------
 void manualViewBaseContour::ConstructVTKObjects()
 {
+
+
 //JSTG 29-02-08 -----------------------------------------------
        //int i , nps = _sizePointsContour;
        int i;
        int nps = _manContModel->GetNumberOfPointsSpline();
 //-------------------------------------------------------------
+
        DeleteVtkObjects();
        _pts = vtkPoints::New();
        _pts->SetNumberOfPoints(nps);
-
-       for (i=0 ; i<nps ; i++){
+       for (i=0 ; i<nps ; i++)
+       {
                _pts->SetPoint(i,       0       , 0     , 0 );
        }
        // This is for the boundaring inicialisation
 
 //EED 29Mars2009       
-       _pts->SetPoint(0,       0       , 0     , -1000 );
-       _pts->SetPoint(1,       0       , 0     ,  1000 );
-//     _pts->SetPoint(0,       -1000   , -1000 , -1000 );
-//     _pts->SetPoint(1,       1000    , 1000  , 1000  );
-
-
-       vtkCellArray *lines = vtkCellArray::New();
-       lines->InsertNextCell( nps /* +1 */ );
-       for ( i=0 ; i<nps+1 ; i++ ){
-               lines->InsertCellPoint(i % nps );
+       //_pts->SetPoint(0,     0       , 0     , -1000 );
+       //_pts->SetPoint(1,     0       , 0     ,  1000 );
+       _pts->SetPoint(0,       -1000   , -1000 , -1000 );
+       _pts->SetPoint(1,       1000    , 1000  , 1000  );
+
+       // This is the structure for the spline
+       _splineCell = vtkCellArray::New();
+       _splineCell->InsertNextCell( nps /* +1 */ );
+       for ( i=0 ; i<nps+1 ; i++ )
+       {
+               _splineCell->InsertCellPoint(i % nps );
        }
 
+       // This is the structure for the spline justo to points (line)
+       // This will be use in the refresh part, in case the spline have only 2 points
+       _lineCell = vtkCellArray::New();
+       _lineCell->InsertNextCell(2);
+       _lineCell->InsertCellPoint(0);
+       _lineCell->InsertCellPoint(1);
+
        _pd = vtkPolyData::New();
        _pd->SetPoints( _pts );
-       _pd->SetLines( lines );
-       lines->Delete();  //do not delete lines ??
+       _pd->SetLines( _splineCell );
+       // lines->Delete();  //do not delete lines ??
 
        _contourVtkActor        =       vtkActor::New();
     _bboxMapper                        =       vtkPolyDataMapper::New();
@@ -275,6 +322,23 @@ void manualViewBaseContour::ConstructVTKObjects()
 
        _pd->ComputeBounds();
 
+       InitTextActor();
+}
+
+// ----------------------------------------------------------------------------
+void manualViewBaseContour::SetCellArray(bool type)
+{
+       if (type==true)
+       {
+               _pd->SetLines( _splineCell );
+       } else {
+               _pd->SetLines( _lineCell );
+       }// if type
+}
+
+// ----------------------------------------------------------------------------
+void manualViewBaseContour::InitTextActor()
+{
        //      Text
        _textActor = vtkTextActor::New();
 //     _textActor->SetDisplayPosition(200, 200);
@@ -289,7 +353,25 @@ void manualViewBaseContour::ConstructVTKObjects()
        tprop->SetFontSize(14);
        tprop->SetFontFamilyToArial();
        tprop->SetColor(0, 0, 1);
+
+
+       //      Text 2
+       _textActor2 = vtkTextActor::New();
+//     _textActor->SetDisplayPosition(200, 200);
+       _textActor2->SetInput("00");
+       // Set coordinates to match the old vtkScaledTextActor default value
+//     _textActor2->GetPosition2Coordinate()->SetCoordinateSystemToNormalizedViewport();
+//     _textActor2->GetPosition2Coordinate()->SetValue( 0.2 , 0.2 );
+       _textActor2->GetPositionCoordinate()->SetCoordinateSystemToWorld ();
+//     _textActor2->GetPositionCoordinate()->SetValue( 0.8 , 0.8 );
+
+       vtkTextProperty *tprop2 = _textActor2->GetTextProperty();
+       tprop2->SetFontSize(14);
+       tprop2->SetFontFamilyToArial();
+       tprop2->SetColor(0, 0, 1);
+
 }
+
 // ----------------------------------------------------------------------------
 void manualViewBaseContour::CreateNewContour()
 {
@@ -495,11 +577,11 @@ bool manualViewBaseContour::SelectPosibleContour(int x, int y, int z)
        bool result=false;
        SetPosibleSelected(result);
     int id = GetIdPoint(x,y,z);
-               
+       
        if( !GetEditable() && !_selected && id!= -1)
        {
                result=true;
-               SetPosibleSelected(result);
+               _posibleSelected=true;          
        }
        else
        {
@@ -520,8 +602,6 @@ bool manualViewBaseContour::SelectPosibleContour(int x, int y, int z)
                                SetPosibleSelected(result);
                        }
                }
-
-
        }
        return result;
 }
@@ -548,7 +628,7 @@ void manualViewBaseContour::UnSelectAllPoints(){
        Refresh();
 }
 // ----------------------------------------------------------------------------
-void manualViewBaseContour::SetModel(manualContourModel *manContModel){
+void manualViewBaseContour::SetModel(manualBaseModel *manContModel){
        _manContModel=manContModel;
 }
 // ----------------------------------------------------------------------------
@@ -597,7 +677,8 @@ double* manualViewBaseContour::GetVectorPointsZManualContour()
 // ----------------------------------------------------------------------------
 void manualViewBaseContour::Refresh() // virtual
 {
-       if (_contourVtkActor!=NULL){
+       if (_contourVtkActor!=NULL)
+       {
                RefreshContour();
        }
        int i,size=_lstViewPoints.size();
@@ -624,7 +705,10 @@ void manualViewBaseContour::Refresh() // virtual
 void manualViewBaseContour::RefreshText()  // virtual
 {
        if( _textActor!=NULL)
+       {
                _textActor -> SetInput("00");
+               _textActor2 -> SetInput("00");
+       }
 }
 // ----------------------------------------------------------------------------
 void manualViewBaseContour::SetColorNormalContour(double r, double g, double b)
@@ -877,15 +961,18 @@ void manualViewBaseContour::SetVisible(bool ok)
        _contourVtkActor->GetProperty()->SetOpacity( opacity );
        _textActor->GetProperty()->SetOpacity( opacity );
        _textActor->SetInput("00");
+       _textActor2->GetProperty()->SetOpacity( opacity );
+       _textActor2->SetInput("00");
 
 }
 // ----------------------------------------------------------------------------
 void manualViewBaseContour::SetShowText(bool ok)
 {
        _show_text = ok;
-       if (_show_text==false)
+       if (_show_text==false && _textActor!=NULL)
        {
                _textActor->SetInput("00");
+               _textActor2->SetInput("00");
        }
 }
 // ----------------------------------------------------------------------------