Personal tools
You are here: Home cmgui Wiki Adding filters to zinc
Views
FrontPage >> Peters notes >>

Adding filters to zinc

last edited 1 year ago by pbier

Find the itk filter you require

The insight tool kit has a large number of filters already written. Rather than reinvent the wheel, use one of their filters if it will do the job you want. You should get a copy of the ITK software guide. This is a large book available in pdf form that documents many of the itk filters available. The latest copy is available online at http://www.itk.org/ItkSoftwareGuide.pdf Find the filter you want and read up about it.

Write the cmgui wrapper to use the itk filter

Two files need to be written, a .h header file and a .cpp source file. These will be placed in the directory:

    $CMISS_ROOT/cmgui/source/image_processing

The easiest way to write these files is to start by copying an existing filter and modifying it accordingly. A nice simple one to look at is computed_field_binaryThresholdFilter.cpp

Add the wrappers into the main cmiss program

Edit the file #CMISS_ROOT/cmgui/source/command/cmiss.c

Search the file for USE_ITK and you will find the two spots where code needs to be added. Add a link to include your header:

  #include "image_processing/computed_field_binaryThresholdFilter.h"

and also add a line later to register the filter type:

     Computed_field_register_types_binaryThresholdFilter(command_data->computed_field_package); 

Add api support (optional)

If you wish to use your field from an XPCOM object much of the code for the XPCOM object can be generated automatically from the xpidl compiler if certain conventions are followed. Using the following conventions will allow you to call the get and set type routines in a javascript implementation of your XPCOM object simply by adding them into the idl file.

Edit the .h and .cpp files for your cmgui wrapper and replace any float parameters with doubles and any int parameters with longs.

The .h file for your cmgui wrapper also needs to have some code added to allow api access. Edit $CMISS_ROOT/cmgui/source/image_processing/computed_field_my_image_filter.h

Add the following lines above the function definitions:

    #include "api/cmiss_computed_field.h"

    /* API functions are prefixed with Cmiss */
    #define Computed_field_set_type_my_image_filter \
       Cmiss_Computed_field_set_type_my_image_filter
    #define Computed_field_get_type_my_image_filter \
       Cmiss_Computed_field_get_type_my_image_filter

Edit the file $CMISS_ROOT/cmgui/source/api/cmiss_computed_field.h

Add the function headers for the get and set routines for your filter. Eg:

    int Cmiss_computed_field_get_type_binary_threshold_image_filter(struct Computed_field *field, struct Computed_field **source_field, double *lower_threshold, double *upper_threshold);

    int Cmiss_computed_field_set_type_binary_threshold_image_filter(struct Computed_field *field, struct Computed_field *source_field, double lower_threshold, double upper_threshold);

Edit the cmgui.Makefile

Edit the makefile $CMISS_ROOT/source/cmgui.Makefile

To find where to edit it do a search on IMAGE_PROCESSING and add in your .cpp file to the list of source files:

   image_processing/computed_field_binaryThresholdFilter.cpp\

Build cmgui

To build the version you require for zinc type:

    cd $CMISS_ROOT/cmgui
    make cmgui-gtk-gtkmain-debug-static-lib

Build zinc

To build a new version of the zinc plugin type:

    cd $CMISS_ROOT/zinc
    make zinc

IMPORTANT: make sure you are not in the directory $CMISS_ROOT/zinc/zinc as make will also run there but will not build the entire application.

Install your new plugin

Open the file zinc.xpi that will have been built in $CMISS_ROOT/zinc/zinc/install

Wait a few seconds and then click install. You will then need to restart your browser.

Using your new filter

The above process with enable you to define your new filter with gfx commands and executed them through the commandData.executeCommand syntax. If you have a debug version of the zinc plugin you can try typing gfx commands directly into the command window.

It is also possible to add an XPCOM object for your filter into mozilla which will deal with opening a dialog and allowing options to be set for the filter. If you want to do this then I recommend adding the optional code for the api as described above.


comments:

Nice tip. --stevens, Wed, 21 Feb 2007 23:09:20 +1300 reply
This is a good general cmgui development note, thanks. It might be worth also noting that the MPL (license cmgui is distributed under) requires that such changes are committed to the repository if you distribute your modified version.

Contributing to this site

Please add to the wiki any relevant information that you think might be useful to other users of this website. For example, you might like to contribute your experiences, questions and answers.

You are encouraged to contribute to this site regardless of your level of experience. Contributions are welcomed from new and regular visitors.

If you ask a question and receive an answer from a developer you should record it in the wiki. This information is extremely useful and can help other users overcome the same problem.

See how to add and edit pages for more information.