[Insight-users] Courseware FLTK example question...

Bill Oliver billo@Radix.Net
Fri, 21 Mar 2003 16:27:25 -0500 (EST)


Thanks, Luis.

That pretty much did the trick.  Thanks!

A couple of quick things, though:

1) I could not find a FindFltkImageViewer.cmake
in my distribution, so I ended up still adding
the .a file to the Makefile by hand.  Obviously,
I still need to learn a little more about Cmake
in order to figure out how to get it in there
automagically.

2) I needed to add the line

reader->Update();

in order to get the image in.  This seems
a little odd, because I didn't have to do
that when using VTK.  Oh, well

Anyway, the thing displays fine now!!!

Thanks.


billo


PS:  For the purposes of the archives, this
is the code and the CMakeLists.txt.  Remember
that I still have to add the Application 2D Viewer .a
file to the Makefile by hand:



#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkImageToVTKImageFilter.h"
#include "itkCurvatureFlowImageFilter.h"
#include "FL/Fl.H"
#include "itkProcessObject.h"
#include "itkCommand.h"
#include "fltkImage2DViewer.h"
#include "fltkImage2DViewerWindow.h"


int main( int argc, char **argv ) {

  typedef float PixelType;
  typedef itk::Image< PixelType , 2 >                ImageType;
  typedef itk::ImageFileReader<ImageType>            ReaderType;
  typedef itk::CurvatureFlowImageFilter< ImageType, ImageType > SmoothingFilterType;

  typedef fltk::Image2DViewer< PixelType > ViewerType;
  ViewerType::Pointer viewer = ViewerType::New();
  ReaderType::Pointer reader = ReaderType::New();
  SmoothingFilterType::Pointer smoother = SmoothingFilterType::New();

  reader->SetFileName( argv[1] );
  reader->Update();

  smoother->SetInput( reader->GetOutput() );
  smoother->SetNumberOfIterations( 7 );
  smoother->SetTimeStep( 0.5 );

   viewer -> SetImage (reader->GetOutput() );
   viewer -> SetLabel("output");
   viewer -> Show();

   Fl::run();
   return 0;
}



ROJECT( tst )

INCLUDE (${CMAKE_ROOT}/Modules/FindITK.cmake)
IF ( USE_ITK_FILE )
INCLUDE(${USE_ITK_FILE})
ENDIF( USE_ITK_FILE )

INCLUDE (${CMAKE_ROOT}/Modules/FindVTK.cmake)
IF (   USE_VTK_FILE   )
         INCLUDE(  ${USE_VTK_FILE}  )
         ENDIF(   USE_VTK_FILE   )

FIND_PACKAGE(FLTK)
     IF(FLTK_FOUND)
     INCLUDE_DIRECTORIES(${FLTK_INCLUDE_DIR})
 ENDIF(FLTK_FOUND)


INCLUDE (${CMAKE_ROOT}/Modules/FindFLTK.cmake)

INCLUDE_DIRECTORIES( /home/oliver/InsightApplications-1.2.0/Auxiliary/vtk/
        /usr/local/include/
        /home/oliver/InsightApplications-1.2.0/Auxiliary/FltkImageViewer/
        /home/oliver/InsightApp/Auxiliary/FltkImageViewer/
                )

ADD_EXECUTABLE( tst   tst.cxx )

TARGET_LINK_LIBRARIES ( tst
         VXLNumerics   ITKCommon   ITKIO
         ITKMetaIO   png   z
         ITKBasicFilters
         vtkRendering  vtkGraphics vtkHybrid vtkImaging
         vtkIO vtkFiltering vtkCommon
         ${FLTK_LIBRARY}
         )







On Fri, 21 Mar 2003, Luis Ibanez wrote:

> From: Luis Ibanez <luis.ibanez@kitware.com>
>
>
> Hi Bill,
>
> 1) You are right, the first line in my code
>     was missing a 'typedef'.
>
> 2) You are missing to link with FLTK.
>     the fltkImageViewer requires you to
>     link with the fltk libraries.
>     (e.g. fltk.a fltk_gl.a, fltk_forms.a, fltk_images.a)
>
>     You may want to take advantage of the
>     files
>
>      FindFLTK.cmake
>      FindFltkImageViewer.cmake
>
>     modules in InsightApplications
>
>     They will help you to set up all the
>     libraries in the link line.
>
>
> 3) In your CMakeLists.txt file you should add
>
>       FIND_PACKAGE(FLTK)
>       IF(FLTK_FOUND)
>          INCLUDE_DIRECTORIES(${FLTK_INCLUDE_DIR})
>       ENDIF(FLTK_FOUND)
>
>    This will look for FindFLTK.cmake
>
>
>
>
> Regards,
>
>
>     Luis
>
>
>
> ---------------------------------------------
>
> Bill Oliver wrote:
> >
> >>An easy fix is to replace the plain Fl_Window
> >>with the more useful class : Image2DViewer
> >>
> >>
> >
> >
> > Luis,
> >
> > Thanks for the pointer.  Unfortunately, I'm getting
> > more and more lost.
> >
> > First, I assume that the code you provided should
> > actually start with :
> >
> > typedef fltk::Image2DViewer< PixelType > ViewerType;
> >
> > rather than
> >
> > fltk::Image2DViewer< PixelType > ViewerType;
> >
> >
> > In any case, I'm having a hard time getting everything
> > to link.  I tried manually including
> > InsightApps/Auxiliary/FltkImageViewer/libITKFltkImageViewer.a
> > in the Makefile (since I couldn't figure out how to do it in the
> > CMakeLists.txt file).  InsightApps is the InsightApplications
> > build directory.  However, I still get lots
> > of undefined stuff such as:
> >
> > /home/oliver/InsightApp/Auxiliary/FltkImageViewer/
> > libITKFltkImageViewer.a(fltkImage2DViewerGUI.o)(.text+0x300):
> > In function `fltkImage2DViewerGUI::fltkImage2DViewerGUI[not-in-charge]()':
> > : undefined reference to `Fl_Value_Slider::Fl_Value_Slider[in-charge]
> > (int, int, int, int, char const*)'
> >
> > and
> >
> >
> > /home/oliver/InsightApp/Auxiliary/FltkImageViewer/
> > libITKFltkImageViewer.a(fltkGlWindow.o)(.text+0x2ed):
> > In function `fltk::GlWindow::GlWindow[in-charge]
> > (int, int, int, int, char const*)': : undefined reference to
> > `Fl_Gl_Window::~Fl_Gl_Window [not-in-charge]()'
> >
> > etc.
> >
> > Clearly, I'm not including some stuff I should be including,
> > but I don't know what to include, and I don't know where to
> > look to find out.  I thought I had included the fl_gl etc.
> > stuff which should cover it, but I guess not.
> >
> >
> > Here's my CMakeLists.txt file.  I know there's excess
> > vtk stuff, but that's because I was modifying it as I
> > followed the coursware...
> >
> > PROJECT( tst )
> >
> > INCLUDE (${CMAKE_ROOT}/Modules/FindITK.cmake)
> > IF ( USE_ITK_FILE )
> > INCLUDE(${USE_ITK_FILE})
> > ENDIF( USE_ITK_FILE )
> >
> > INCLUDE (${CMAKE_ROOT}/Modules/FindVTK.cmake)
> > IF (   USE_VTK_FILE   )
> >          INCLUDE(  ${USE_VTK_FILE}  )
> >          ENDIF(   USE_VTK_FILE   )
> >
> > INCLUDE (${CMAKE_ROOT}/Modules/FindFLTK.cmake)
> >
> > INCLUDE_DIRECTORIES( /home/oliver/InsightApplications-1.2.0/Auxiliary/vtk/
> >         /usr/local/include/
> >         /home/oliver/InsightApplications-1.2.0/Auxiliary/FltkImageViewer/
> >         /home/oliver/InsightApp/Auxiliary/FltkImageViewer/
> >                 )
> >
> > ADD_EXECUTABLE( tst   tst.cxx )
> >
> > TARGET_LINK_LIBRARIES ( tst
> >          VXLNumerics   ITKCommon   ITKIO
> >          ITKMetaIO   png   z
> >          ITKBasicFilters
> >          vtkRendering  vtkGraphics vtkHybrid vtkImaging
> >          vtkIO vtkFiltering vtkCommon
> >          ${FLTK_LIBRARY}
> >          )
> >
> > And here's the code:
> >
> > nclude "itkImage.h"
> > #include "itkImageFileReader.h"
> > #include "itkImageToVTKImageFilter.h"
> > #include "itkCurvatureFlowImageFilter.h"
> > #include "vtkImageViewer.h"
> > #include "vtkRenderWindowInteractor.h"
> > #include "FL/Fl.H"
> > #include "itkProcessObject.h"
> > #include "itkCommand.h"
> > #include "fltkImage2DViewer.h"
> > #include "fltkImage2DViewerWindow.h"
> >
> >
> > int main( int argc, char **argv ) {
> >
> >   typedef float PixelType;
> >   typedef itk::Image< float , 2 >            ImageType;
> >   typedef itk::ImageFileReader<ImageType>            ReaderType;
> >   typedef itk::CurvatureFlowImageFilter< ImageType, ImageType > SmoothingFilterType;
> >
> >   typedef fltk::Image2DViewer< PixelType > ViewerType;
> >   ViewerType::Pointer viewer = ViewerType::New();
> >   ReaderType::Pointer reader = ReaderType::New();
> >   SmoothingFilterType::Pointer smoother = SmoothingFilterType::New();
> >
> >   reader->SetFileName( argv[1] );
> >
> >   smoother->SetInput( reader->GetOutput() );
> >   smoother->SetNumberOfIterations( 7 );
> >   smoother->SetTimeStep( 0.5 );
> >
> >    viewer -> SetImage (smoother->GetOutput() );
> >    viewer -> SetLabel("output");
> >    viewer -> Show();
> >
> >    return 0;
> > }
> >
> >
> >
> > billo
> >
> >
>
>
>
> _______________________________________________
> Insight-users mailing list
> Insight-users@public.kitware.com
> http://public.kitware.com/mailman/listinfo/insight-users
>