OPTION(BUILD_V2 "Build Version 2 ?" OFF)
IF (BUILD_V2)
+ SET(LIBNAME creaImageIO2)
INCLUDE_DIRECTORIES(
${PROJECT_BINARY_DIR}
${PROJECT_SOURCE_DIR}/src2
)
SUBDIRS(src2)
ELSE (BUILD_V2)
+ SET(LIBNAME creaImageIO)
INCLUDE_DIRECTORIES(
${PROJECT_BINARY_DIR}
${PROJECT_SOURCE_DIR}/src
wxInitAllImageHandlers();
- creaImageIO::SetGimmickMessageLevel(9);
- creaImageIO::SetGimmickDebugMessageLevel(9);
+ creaImageIO::SetGimmickMessageLevel(5);
+ creaImageIO::SetGimmickDebugMessageLevel(5);
int threads = 1;
#===========================================================================
# THE xml SOURCES OF THE PACKAGE
# EITHER UNCOMMENT NEXT LINE TO bbfy ALL .xml OF THE src DIRECTORY :
-SET(${BBTK_PACKAGE_NAME}_COMPILE_ALL_XML ON)
+#SET(${BBTK_PACKAGE_NAME}_COMPILE_ALL_XML ON)
# ... OR LIST THE FILES TO COMPILE MANUALLY :
-#SET(${BBTK_PACKAGE_NAME}_XML_SOURCES
+SET(${BBTK_PACKAGE_NAME}_XML_SOURCES
# LIST HERE THE FILES TO bbfy TO BUILD THE LIB
# E.G. TO bbfy "toto.xml" ADD "toto" (NO EXTENSION)
# THE PATH MUST BE RELATIVE TO THE src FOLDER
-# )
+${CMAKE_CURRENT_BINARY_DIR}/src/bbcreaImageIOGimmick.xml
+ )
#===========================================================================
#===========================================================================
SET(${BBTK_PACKAGE_NAME}_LIBS
# LIST HERE THE ADDITIONAL LIBS TO LINK AGAINST
# EXCEPT : the same libs than for INCLUDE_DIRS
- creaImageIO
+ ${LIBNAME}
)
#===========================================================================
+
+IF (BUILD_V2)
+ CONFIGURE_FILE(bbcreaImageIOGimmick.xml_v2
+ ${CMAKE_CURRENT_BINARY_DIR}/bbcreaImageIOGimmick.xml
+ COPYONLY)
+ELSE (BUILD_V2)
+ CONFIGURE_FILE(bbcreaImageIOGimmick.xml_v1
+ ${CMAKE_CURRENT_BINARY_DIR}/bbcreaImageIOGimmick.xml
+ COPYONLY)
+ENDIF (BUILD_V2)
+
+INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} )
+
#---------------------------------------------------------------------------
# Include src configuration cmake script
INCLUDE(${BBTK_CMAKE_DIR}/BBTKConfigurePackage_src.cmake)
<input name="Title" type="std::string" description="Title of the dialog"/>
<input name="ImageDimension" type="int" description="The maximal dimensionality of the image to be selected, e.g. 2 for a 2D image, 3 for a 3D image,..."/>
- <output name="Out", type="vtkImageData*" description="The selected image"/>
+ <input name="Output" type="int" description="What to output ? 0(default)=image and filenames/1=only filenames"/>
+ <typedef><PRE>typedef std::vector<std::string> OutputFilesType;</PRE></typedef>
+ <typedef><PRE>typedef std::vector<vtkImageData*> OutputImagesType;</PRE></typedef>
+
+ <output name="Out" type="vtkImageData*" description="The first selected image"/>
+ <output name="Out2" type="OutputImagesType" description="The selected images"/>
+ <output name="Files" type="OutputFilesType" description="The selected files"/>
<!--========================================================================
PROCESS section -->
if (w.GetReturnCode() == wxID_OK)
{
- std::vector<vtkImageData*> images;
- w.GetSelectedImages(images);
- bbSetOutputOut(images[0]);
+ if (bbGetInputOutput()==0)
+ {
+ std::vector<vtkImageData*> images;
+ w.GetSelectedImages(images);
+ bbSetOutputOut(images[0]);
+ bbSetOutputOut2(images);
+ }
+ std::vector<std::string> files;
+ w.GetSelectedFiles(files);
+ bbSetOutputFiles(files);
}
else if (w.GetReturnCode() == wxID_CANCEL)
{
<constructor><PRE>
bbSetInputImageDimension(3);
bbSetInputTitle("Select image(s)");
+ bbSetInputOutput(0);
bbSetOutputOut(0);
</PRE>
</constructor>
- <!-- THE COPY-CONSTRUCTION METHOD BODY :
- Here does nothing
- But this is where you should allocate the output pointers if any
- and copy the pointed values (to avoid bug caused by multiple references) -->
+ <!-- THE COPY-CONSTRUCTION METHOD BODY : -->
<copyconstructor>
<PRE>
bbSetOutputOut(0);
</PRE>
</copyconstructor>
- <!-- THE DESTRUCTION METHOD BODY :
- Here does nothing
- but this is where you should desallocate the output pointers if any -->
+ <!-- THE DESTRUCTION METHOD BODY -->
<destructor>
<PRE>
- if (bbGetOutputOut()!=0) bbGetOutputOut()->Delete();
+ std::vector<vtkImageData*>::iterator i;
+ for (i=bbGetOutputOut2().begin();i!=bbGetOutputOut2().end();++i) (*i)->Delete();
</PRE>
</destructor>
--- /dev/null
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!--==========================================================================
+ STARTS THE DESCRIPTION OF THE BLACK BOX -->
+<blackbox name="Gimmick">
+ <!--========================================================================
+ THE BOX DOCUMENTATION -->
+ <author>laurent.guigues@creatis.insa-lyon.fr</author>
+ <description>Gimmick! (Gimme my medical images quick!) is a medical image reader widget. It handles DICOM,jpg,tif,png,bmp and mhd. Images read are stored in sqlite3 databases and thus retrieved very quick next time. Screenshot : <img src=Gimmick1.jpg></img>"</description>
+ <category>image;reader;dicom</category>
+
+<!--========================================================================
+ #include directives to be put in the .h generated
+ There must be one tag per file to include -->
+<include>creaImageIOWxGimmickReaderDialog.h</include>
+ <!--========================================================================
+ INPUTS/OUTPUTS DECLARATION -->
+
+ <input name="Title" type="std::string" description="Title of the dialog"/>
+ <input name="ImageMinDimension" type="int" description="The minimal dimensionality of the image to be selected, e.g. 2 for a 2D image, 3 for a 3D image,..."/>
+ <input name="ImageMaxDimension" type="int" description="The maximal dimensionality of the image to be selected, e.g. 2 for a 2D image, 3 for a 3D image,..."/>
+ <input name="ImageOutputDimension" type="int" description="The dimensionality of the output image, e.g. 2 for a 2D image, 3 for a 3D image,..."/>
+ <input name="Output" type="int" description="What to output ? 0(default)=image and filenames/1=only filenames"/>
+ <typedef><PRE>typedef std::vector<std::string> OutputFilesType;</PRE></typedef>
+ <typedef><PRE>typedef std::vector<vtkImageData*> OutputImagesType;</PRE></typedef>
+
+ <output name="Out" type="vtkImageData*" description="The first selected image"/>
+ <output name="Out2" type="OutputImagesType" description="The selected images"/>
+ <output name="Files" type="OutputFilesType" description="The selected files"/>
+
+ <!--========================================================================
+ PROCESS section -->
+
+ <process><PRE>
+ int threads = 1;
+
+ creaImageIO::WxGimmickReaderDialog w(0,
+ -1,
+ crea::std2wx(bbGetInputTitle()),
+ wxDefaultPosition,
+ wxSize(1200,800),
+ bbGetInputImageMinDimension(),
+ bbGetInputImageMaxDimension(),
+ bbGetInputImageOutputDimension(),
+ threads);
+ w.ShowModal();
+
+ if (w.GetReturnCode() == wxID_OK)
+ {
+ if (bbGetInputOutput()==0)
+ {
+ std::vector<vtkImageData*> images;
+ w.GetSelectedImages(images,bbGetInputImageOutputDimension());
+ bbSetOutputOut(images[0]);
+ bbSetOutputOut2(images);
+ }
+ std::vector<std::string> files;
+ w.GetSelectedFiles(files);
+ bbSetOutputFiles(files);
+ }
+ else if (w.GetReturnCode() == wxID_CANCEL)
+ {
+// if (bbGetOutputOut()!=0)
+// {
+ // bbGetOutputOut()->Delete();
+// bbSetOutputOut(0);
+// }
+ }
+ </PRE></process>
+
+ <!--======================================================================
+ CONSTRUCTORS / DESTRUCTORS (OPTIONAL) -->
+
+ <constructor><PRE>
+ bbSetInputImageMinDimension(2);
+ bbSetInputImageMaxDimension(3);
+ bbSetInputImageOutputDimension(3);
+ bbSetInputTitle("Select image(s)");
+ bbGetInputOutput(0);
+ bbSetOutputOut(0);
+ </PRE>
+ </constructor>
+
+
+ <!-- THE COPY-CONSTRUCTION METHOD BODY : -->
+ <copyconstructor>
+ <PRE>
+ bbSetOutputOut(0);
+ </PRE>
+ </copyconstructor>
+
+ <!-- THE DESTRUCTION METHOD BODY : -->
+ <destructor>
+ <PRE>
+ std::vector<vtkImageData*>::iterator i;
+ for (i=bbGetOutputOut2().begin();i!=bbGetOutputOut2().end();++i) (*i)->Delete();
+ </PRE>
+ </destructor>
+
+
+
+</blackbox>
+
: //mDoNotSignal(false),
mReader(0),
mTotalMem(0),
- mTotalMemMax(100000)
+ mTotalMemMax(1500000)
{
// std::cout << "#### MultiThreadImageReader::MultiThreadImageReader("
// << " #threads= " << number_of_threads <<" )"<<std::endl;