bicotiFrame

     Clases

bicotiFrame
bicotiFrame2D
bicotiFrame3D
bicotiFrame2DInternal
bicotiFrame2DExternal
bicotiFrame3DInternal
bicotiFrame3DExternal

     Templates Clases

PixelType


class bicotiFrame < class PixelType >         ( Abstracta )



 Public Methods

virtual  ~bicotiFrame (  )
virtual void First (  ) = 0
virtual void Next (  ) = 0
PixelType& CurrentPixel (  )
bool IsDone (  )
int GetFrameSize (  )



~bicotiFrame ( )

        Desstrutor. A pesar de ser virtual, las clases bases necesitan tener definidos destructores virtuales, que no hacen nada, para que se llame al constructor de los correspondientes hijos, cuando se hace algo del
tipo :

                bicotiFrame< int > * ptr_frame;   // declaro un puntero a la clase base
                ptr_frame = new bicotiFrame2DInternal< int >( 3 );  // creo un objeto concreto
                                            .
                                            .
                delete ptr_frame;       // libero la memoria



void First ( )

        Esta es una de las funciones típicas de la interfáz de "Iteradores", ver Dessign Patterns, las que proveen una forma estandar de recorrer al Frame, independientemente de su dimensión. Esta función simplemente coloca el iterador en el primer lugar del frame, el que tendría índices ( 0 , 0 , .., 0 ).
Por ejemplo si tenemos un Frame2D 3x3 , como el de la figura.

Si pensamos en el iterador como un puntero interno a algún pixel del Frame, la función First, lo pondría apuntando al primer lugar, el extremo superior izquierdo en el caso de 2D.

Obs : En esta clase la función es virtual pura, se declara porque es parte de la interfáz estándar, es decir
         que todo Frame dede tener declarada la función First ( )



void Next ( )

        Esta es una otra de las funciones típicas de la interfáz de "Iteradores", ver Dessign Patterns.
        Lo que hace es mover el "puntero" al siguiente pixel.
        Por ejemplo si tenemos :

                         bicotiFrame2DInternal< int >  frame( 3 );
                                                    .
                                                    .
                         frame.First()
                         frame.Next()

        Pasaría algo como se indica en la figura :

El sentido del movimiento es siempre tal que se incrementa el primer ídice hasta llegar al final y luego se incrementa el siguiente.
Es decir en este caso de Frame 2D.  La función First( ) pone el "puntero" en el lugar ( 0, 0 ) , el llamado
de Next( ) produciría un movimiento a ( 1 , 0 ) , un nuevo llamado a ( 2 , 0 ) y otro a ( 0 , 1 ) y así sucesivamente hasta llegar al último punto , el de índices ( 2 , 2 ).
Si llamamos a Next( ) en el último punto, el puntero NO se moverá.

Obs : En esta clase la función es virtual pura, se declara porque es parte de la interfáz estándar, es decir
         que todo Frame dede tener declarada la función Next ( )



PixelType & CurrentPixel ( )

        Esta es una otra de las funciones típicas de la interfáz de "Iteradores", ver Dessign Patterns.
        Esta función sirve para setear o leer el pixel actualmente apuntado por el iterador.

          Si en el ejemplo de la figura , hago :

                               pix = frame.CurrentPixel();

        obtendría pix = 3 , y si hago :

                               frame.CurrentPixel() = 6;

        pongo un 6 en el lugar actual, como se muestra en la figura.

Obs :  Al ser esta función parte de la interfáz estándar,
         todo Frame dede tener declarada la función CurrentPixel ( )



bool IsDone ( )

        Esta es una otra de las funciones típicas de la interfáz de "Iteradores", ver Dessign Patterns.
        La función devuelve "true" ( verdadero ) cuando el iterador está apuntando al último lugar
        del Frame e intento moverme un lugar más, llamando nuevamente a Next( ).
        Por ejemplo, si estuvieramos en el caso de la figura :

          Inicialmente estoy apuntando al pixel ubicado en  ( 1 , 2 ) , si hago:

                                is_done = frame.IsDone();

        obtengo is_done = false
        Luego hago :

                                 frame.Next();
                                is_done = frame.IsDone();

        quedo apuntando al último lugar pero aún btengo is_done = false.
        Si vuelvo a hacer :

                                 frame.Next();
                                is_done = frame.IsDone();

        ahora el iterador no se moverá , porque estoy en el último lugar , y obtengo is_done = true.

Obs :  Es importante aclarar que si el Frame es n x n x...x n , el primer lugar es el de índices
         ( 0 , 0 , ... , 0 ) y el último el de índices ( n-1 , n-1 , ... , n-1 ).

Obs :  Al ser esta función parte de la interfáz estándar,
         todo Frame dede tener declarada la función IsDone ( )



int GetFrameSize ( )

        Esta es una otra de las funciones típicas de la interfáz de "Iteradores", ver Dessign Patterns.
          Devuelve el tamaño del frame, es decir si tenemos por ejemplo un frame 2D 3x3 o uno 3D 3x3x3,
        GetFrameSize( ) devuelve 3.

Obs :  Al ser esta función parte de la interfáz estándar,
         todo Frame dede tener declarada la función GetFrameSize ( )