]> Creatis software - bbtkGEditor.git/blobdiff - lib/EditorGraphicBBS/bbsKernelEditorGraphic/GConnectorModel.cxx
Feature #1771 Add licence terms for all files.
[bbtkGEditor.git] / lib / EditorGraphicBBS / bbsKernelEditorGraphic / GConnectorModel.cxx
index 05ce3b8863b881b15cd139e877997468bacf571f..a0ea7347b5e5422cd70ee5b638f6261075eb84e3 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
+#
+#  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.
+# ------------------------------------------------------------------------  
+*/
+
 /*=========================================================================                                                                               
 Program:   bbtk
 Module:    $RCSfile$
@@ -43,8 +68,8 @@ namespace bbtk
 
        GConnectorModel::GConnectorModel()
        {               
-               //_startPort = NULL;
-               //_endPort = NULL;
+               _startPort = NULL;
+               _endPort = NULL;
        }
 
        //=========================================================================
@@ -58,6 +83,7 @@ namespace bbtk
        void GConnectorModel::setStartPort(GPortModel* startPort)
        {
                _startPort = startPort;
+               startPort->setConnected(true);
                
                double xCenter,yCenter,zCenter;
                startPort->getCenter(xCenter,yCenter,zCenter);
@@ -72,6 +98,7 @@ namespace bbtk
        void GConnectorModel::setEndPort(GPortModel* endPort)
        {
                _endPort = endPort;
+               endPort->setConnected(true);
 
                double xCenter,yCenter,zCenter;         
                endPort->getCenter(xCenter,yCenter,zCenter);
@@ -79,6 +106,10 @@ namespace bbtk
                endPort->getInicPoint(xIport,yIport,zIport);
 
                setFinalPoint(xCenter,yIport,zCenter);
+
+               // Sets the last point of the contour model in the position of the end input port
+               manualPoint* point = _model->GetManualPoint(_model->GetSizeLstPoints()-1);
+               point->SetPoint(xCenter,yIport,zCenter);
        }
 
        //=========================================================================
@@ -111,6 +142,112 @@ namespace bbtk
 
        //=========================================================================
 
+       void GConnectorModel::updateStartEndPoints()
+       {
+               
+               //back point
+               double bsx,bsy; // back start for x and y
+               double nsx,nsy;
+               double bex,bey; // new start for x and y
+               double nex,ney;
+               
+               //Start Point
+               double xCenter,yCenter,zCenter;         
+               _startPort->getCenter(xCenter,yCenter,zCenter);
+               double xport,yport,zport;
+               _startPort->getFinalPoint(xport,yport,zport);
+
+               // Refresh the position of the contourModel first point with the data of the connector model
+               manualPoint* point = _model->GetManualPoint(0);
+               bsx=point->GetX(); 
+               bsy=point->GetY(); 
+               point->SetPoint(xCenter,yport,zCenter);
+               nsx=xCenter;
+               nsy=yport;
+               
+               //End Point     
+               _endPort->getCenter(xCenter,yCenter,zCenter);
+               _endPort->getInicPoint(xport,yport,zport);
+
+               // Refresh the position of the contourModel last point with the data of the connector model
+               point = _model->GetManualPoint(_model->GetSizeLstPoints()-1);
+               bex=point->GetX(); 
+               bey=point->GetY(); 
+               point->SetPoint(xCenter,yport,zCenter);
+               nex=xCenter;
+               ney=yport;
+
+               
+               // moving point of the spline connection
+               if ( ((bsx!=nsx)&&(bex!=nex)) ||  ((bsy!=nsy)&&(bey!=ney)) )
+               {
+                       double difx=bsx-nsx; 
+                       double dify=bey-ney;
+                       double tmpX, tmpY, tmpZ;
+                       int i,size=_model->GetSizeLstPoints();
+                       if (size>2)
+                       {
+                               for (i=1;i<size-1;i++)
+                               {
+                                       point = _model->GetManualPoint(i);
+                                       tmpX = point->GetX();
+                                       tmpY = point->GetY();
+                                       tmpZ = point->GetZ();
+                                       point->SetPoint(tmpX-difx,tmpY-dify,tmpZ);
+                               } // for i
+                       }// if size
+               } // if bsx nsx  bex nex   bsy nsy bey ney 
+       }
+
+       //=========================================================================
+
+       void GConnectorModel::disconnectConnection()
+       {
+               if(_startPort!=NULL)
+               {
+                       _startPort->setConnected(false);                        
+               }
+
+               if(_endPort!=NULL)
+               {
+                       _endPort->setConnected(false);
+               }
+       }
+
+       //=========================================================================
+
+       void GConnectorModel::save(std::string &content)
+       {
+               char buffer[50];
+
+               content+="CONNECTION\n";
+
+               // Connection info
+               content+=_startPort->getParentBox()->getBBTKName();
+               content+=":";
+               content+=_startPort->getBBTKName();
+               content+=":";
+               content+=_endPort->getParentBox()->getBBTKName();
+               content+=":";
+               content+=_endPort->getBBTKName();
+               content+="\n";
+               
+               int i,sizeLstPoints = _model->GetSizeLstPoints()-2;
+               content+="NumberOfControlPoints:";
+               sprintf (buffer, "%d", sizeLstPoints );
+               content+=buffer;
+               content+="\n";
+               
+               for (i=0;i<sizeLstPoints;i++)
+               {
+                       manualPoint *mp = _model->GetManualPoint(i+1);
+                       sprintf (buffer, "%f:%f:%f\n", (float)mp->GetX(),(float)mp->GetY(),(float)mp->GetZ() );
+                       content+=buffer;
+               }               
+       }
+
+       //=========================================================================
+
 }  // EO namespace bbtk
 
 // EOF