From: jean-pierre roux Date: Thu, 3 Jul 2008 13:59:29 +0000 (+0000) Subject: Some comments updated X-Git-Tag: r0.6.0~15 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=439be4f386a34363bf4487cc1e95b360b36007fc;p=bbtk.git Some comments updated --- diff --git a/kernel/appli/bbfy/bbfy.cpp b/kernel/appli/bbfy/bbfy.cpp index 65b6c23..5ce52b7 100644 --- a/kernel/appli/bbfy/bbfy.cpp +++ b/kernel/appli/bbfy/bbfy.cpp @@ -20,8 +20,8 @@ public: //========================================================================== const std::string itkImageToImageFilterString = "ITK_ImageToImageFilter"; -const std::string vtkImageAlgorithmString = "VTK_ImageAlgorithm"; -const std::string vtkPolyDataAlgorithmString = "VTK_PolyDataAlgorithm"; +const std::string vtkImageAlgorithmString = "VTK_ImageAlgorithm"; +const std::string vtkPolyDataAlgorithmString = "VTK_PolyDataAlgorithm"; //========================================================================== class bbfy @@ -277,19 +277,19 @@ void bbfy::ParseXML() } // UserConstructor body - if (BB.nChildNode("userconstructor")) + if (BB.nChildNode("constructor")) { - bbtk::GetTextOrClear(BB.getChildNode("userconstructor"),mUserConstructor); + bbtk::GetTextOrClear(BB.getChildNode("constructor"),mUserConstructor); } // UserCopyConstructor body - if (BB.nChildNode("usercopyconstructor")) + if (BB.nChildNode("copyconstructor")) { - bbtk::GetTextOrClear(BB.getChildNode("usercopyconstructor"),mUserCopyConstructor); + bbtk::GetTextOrClear(BB.getChildNode("copyconstructor"),mUserCopyConstructor); } // UserDestructor body - if (BB.nChildNode("userdestructor")) + if (BB.nChildNode("destructor")) { - bbtk::GetTextOrClear(BB.getChildNode("userdestructor"),mUserDestructor); + bbtk::GetTextOrClear(BB.getChildNode("destructor"),mUserDestructor); } // Template parameters @@ -695,7 +695,6 @@ void bbfy::CreateHeader() } } - // Process if ((mType == STD)||(mProcess.size())) { @@ -724,8 +723,6 @@ void bbfy::CreateHeader() // EO black box declaration mFile << "};\n\n"; - - // BO black box description if (mTemplateParam.size()==0) { @@ -1043,12 +1040,12 @@ void bbfy::CreateCode() mFile << mCreateWidget << "\n"; mFile << "}\n"; } - // User constr / copy constr / destr implementation mFile <<"void "< bbCreatePackage -\end{verbatim} +Use the option \texttt{Create Package} of the menu \texttt{Tools}. + + +\begin{figure}[!ht] +\caption{\label{bb-Studio} bbStudio} +\begin{center} +\includegraphics[width=0.6\textwidth]{bbStudio.png} +\end{center} +\end{figure} + +You will be asked to choose the directory where you want to create the package, +then you'll get something like in fig. \ref{bbCreatePackage}. + + +\begin{figure}[!ht] +\caption{\label{bbCreatePackage} Create Package} +\begin{center} +\includegraphics[width=0.6\textwidth]{bbCreatePackage.png} +\end{center} +\end{figure} + + +That will creates the directory structure and the \texttt{cmake} +files necessary to build the project. You must then decide the name of your new package. -It will be the name used to load the package in \texttt{bbi}. +It will be the name used to load the package in \texttt{bbi}. +Fill up the form like in fig. \ref{bbFillUpPackageForm}. -For example, on linux, turn to an empty folder and type : -\begin{verbatim} -> bbCreatePackage pack1 -\end{verbatim} +\begin{figure}[!ht] +\caption{\label{bbFillUpPackageForm} Fill up the form} +\begin{center} +\includegraphics[width=0.6\textwidth]{bbFillUpPackageForm.png} +\end{center} +\end{figure} -you get : +Edit the file 'MyPackage/CMakeLists.txt' to customize your package -\begin{verbatim} ------ Creating new black box package in 'pack1' ----- --> Creating directory 'pack1' --> Creating file 'pack1/CMakeLists.txt' --> Creating directory 'pack1/cmake' --> Copying files in 'pack1/cmake' -Done ! -Edit the file 'pack1/CMakeLists.txt' to customize your package -\end{verbatim} the file tree obtained is : \begin{verbatim} -> tree pack1 -pack1/ -|-- CMakeLists.txt -`-- cmake +>tree myPackageFolder +myPackageFolder +`-- MyPackage + |-- CMakeLists.txt |-- Configure.cmake - |-- ConfigurePackage.cmake - |-- FindGTK2.cmake - |-- FindLibrary.cmake.in - |-- FindwxW.cmake - |-- GenerateLibraryConfig.cmake - |-- InstallLibrary.cmake - |-- LibraryConfig.cmake.in - |-- UseLibrary.cmake.in - |-- bbPackage.cxx.in - `-- bbPackage.h.in - -1 directory, 12 files + |-- PackageConfig.cmake.in + |-- README.txt + |-- UsePackage.cmake.in + |-- bbs + | |-- CMakeLists.txt + | |-- appli + | | `-- README.txt + | `-- boxes + | `-- README.txt + |-- data + | `-- CMakeLists.txt + |-- doc + | |-- CMakeLists.txt + | |-- bbdoc + | | |-- CMakeLists.txt + | | `-- header.html.in + | `-- doxygen + | |-- CMakeLists.txt + | |-- DoxyMainPage.txt.in + | `-- Doxyfile.txt.in + `-- src + `-- CMakeLists.txt + +9 directories, 16 files \end{verbatim} -The directory \texttt{pack1} is the directory of your new package, +The directory \texttt{MyPackage} is the directory of your new package, in which you will create the files describing your black boxes. But first, you have to customize your new package, by editing the file -\texttt{CMakeLists.txt} in the \texttt{pack1} directory. +\texttt{CMakeLists.txt} in the \texttt{MyPackage} directory. This file contains : -\begin{file}{pack1/CMakeLists.txt} +\begin{file}{MyPackage/CMakeLists.txt} \small \begin{verbatim} -#........................................................................... -# CMake configuration file for a bbtk package. -# Automatically generated by bbCreatePackage. -# - The lines which are between dotted comments (#...) must be left unchanged -# - The lines which are between dashed comments (#===) can be edited to customize the package -#........................................................................... +#=========================================================================== +# CMAKE SETTINGS FOR BUILDING A BBTK PACKAGE +#=========================================================================== -#........................................................................... -INCLUDE(cmake/Configure.cmake) -#........................................................................... +#=========================================================================== +# THE NAME OF THE BBTK PACKAGE +SET(BBTK_PACKAGE_NAME MyPackage) +#=========================================================================== +#=========================================================================== +# IF IT IS A STANDALONE PROJECT UNCOMMENT NEXT LINE TO DECLARE YOUR PROJECT +# PROJECT(bb${BBTK_PACKAGE_NAME}) +#=========================================================================== #=========================================================================== -# THE NAME OF THE PACKAGE -SET(PACKAGE_NAME Example) +# PACKAGE AUTHOR +# !!! NO COMMA ALLOWED !!! +SET(${BBTK_PACKAGE_NAME}_AUTHOR "myself") #=========================================================================== +#=========================================================================== +# PACKAGE DESCRIPTION +SET(${BBTK_PACKAGE_NAME}_DESCRIPTION "The kinkiest stuff you ve ever seen.") +#=========================================================================== -#........................................................................... -# DOES THE USER WANT TO BUILD THE PACKAGE ? -OPTION(BUILD_PACKAGE_${PACKAGE_NAME} - "Build the bbtk package ${PACKAGE_NAME}" ON) -#........................................................................... +#=========================================================================== +# PACKAGE VERSION NUMBER +SET(${BBTK_PACKAGE_NAME}_MAJOR_VERSION 1) +SET(${BBTK_PACKAGE_NAME}_MINOR_VERSION 0) +SET(${BBTK_PACKAGE_NAME}_BUILD_VERSION 0) +#=========================================================================== -#........................................................................... -# IF THE USER HAS CHOSEN TO BUILD THE PACKAGE -IF(BUILD_PACKAGE_${PACKAGE_NAME}) - #........................................................................... +#=========================================================================== +# UNCOMMENT EACH LIBRARY NEEDED (WILL BE FOUND AND USED AUTOMATICALLY) +# SET(${BBTK_PACKAGE_NAME}_USE_VTK ON) +# SET(${BBTK_PACKAGE_NAME}_USE_ITK ON) +# SET(${BBTK_PACKAGE_NAME}_USE_GDCM ON) +# SET(${BBTK_PACKAGE_NAME}_USE_GSMIS ON) +# SET(${BBTK_PACKAGE_NAME}_USE_WXWIDGETS ON) +#=========================================================================== +#=========================================================================== +# LIST HERE THE OTHER bbtk PACKAGES NEEDED +# (WILL BE FOUND AND USED AUTOMATICALLY) +SET(${BBTK_PACKAGE_NAME}_USE_PACKAGES + # std + # wx + # itk + # vtk + # ... + ) +#=========================================================================== - #=========================================================================== - # UNCOMMENT NEXT LINES IF THE PACKAGE USES THE VTK LIBRARY, THE ITK LIB, ETC. - # SET(${PACKAGE_NAME}_USE_VTK ON) - # SET(${PACKAGE_NAME}_USE_ITK ON) - # SET(${PACKAGE_NAME}_USE_GDCM ON) - # SET(${PACKAGE_NAME}_USE_GSMIS ON) - # SET(${PACKAGE_NAME}_USE_WXWIDGETS ON) - #=========================================================================== - - #=========================================================================== - # PACKAGE AUTHOR : PREFERABLY PROVIDE YOUR EMAIL ADDRESS - SET(PACKAGE_AUTHOR "foo.bar@creatis.insa-lyon.fr") - #=========================================================================== - - #=========================================================================== - # PACKAGE DESCRIPTION - SET(PACKAGE_DESCRIPTION "My marvelous black box package") - #=========================================================================== - - #=========================================================================== - # PACKAGE VERSION NUMBER - SET(PACKAGE_MAJOR_VERSION 1) - SET(PACKAGE_MINOR_VERSION 0) - SET(PACKAGE_BUILD_VERSION 0) - #=========================================================================== - - #=========================================================================== - # THE xml SOURCES OF THE PACKAGE - # EITHER UNCOMMENT NEXT LINE TO bbfy ALL .xml OF THE DIRECTORY : - SET(COMPILE_ALL_XML ON) - # ... OR LIST THE FILES TO COMPILE MANUALLY : - #SET(PACKAGE_XML_SOURCES - # LIST HERE THE FILES TO bbfy TO BUILD THE LIB - # E.G. TO bbfy "toto.xml" ADD "toto" (NO EXTENSION) - # ) - #=========================================================================== - - #=========================================================================== - # THE C++ SOURCES OF THE PACKAGE - # EITHER UNCOMMENT NEXT LINE TO COMPILE ALL .cxx OF THE DIRECTORY : - SET(COMPILE_ALL_CXX ON) - # ... OR LIST THE FILES TO COMPILE MANUALLY : - #SET(PACKAGE_CXX_SOURCES - # LIST HERE THE FILES TO COMPILE TO BUILD THE LIB - # E.G. TO COMPILE "toto.cxx" ADD "toto" (NO EXTENSION) - # ) - #=========================================================================== - - #=========================================================================== - INCLUDE_DIRECTORIES( - # LIST HERE YOUR ADDITIONAL INCLUDE DIRECTORIES (EXCEPT BBTK'S) - ) - #=========================================================================== - - #=========================================================================== - SET(PACKAGE_LIBS - # LIST HERE THE ADDITIONAL LIBS TO LINK AGAINST (EXCEPT BBTK'S) - ) - #=========================================================================== +#=========================================================================== +# THE SOURCES OF THE PACKAGE +# EITHER UNCOMMENT NEXT LINE TO COMPILE ALL .cxx OF THE src DIRECTORY : +SET(${BBTK_PACKAGE_NAME}_COMPILE_ALL_CXX ON) +# ... OR LIST THE FILES TO COMPILE MANUALLY : +#SET(${BBTK_PACKAGE_NAME}_SOURCES +# LIST HERE THE FILES TO COMPILE TO BUILD THE LIB +# E.G. TO COMPILE "toto.cxx" ADD "toto" (NO EXTENSION) +# THE PATH MUST BE RELATIVE TO THE src FOLDER +# ) +#=========================================================================== - - #........................................................................... - INCLUDE(cmake/ConfigurePackage.cmake) - #........................................................................... - -ENDIF(BUILD_PACKAGE_\${PACKAGE_NAME}) -#........................................................................... +#=========================================================================== +# 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) +# ... OR LIST THE FILES TO COMPILE MANUALLY : +#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 +# ) +#=========================================================================== + +#=========================================================================== +# THE SCRIPT-DEFINED BOXES OF THE PACKAGE (bbs) +# EITHER UNCOMMENT NEXT LINE TO INCLUDE ALL .bbs OF THE bbs/boxes DIRECTORY : +SET(${BBTK_PACKAGE_NAME}_INCLUDE_ALL_BBS_BOXES ON) +# ... OR LIST THE FILES TO INCLUDE MANUALLY : +# SET(${BBTK_PACKAGE_NAME}_BBS_BOXES +# LIST HERE THE bbs FILES TO INCLUDE +# E.G. TO INCLUDE "boxes/bbtoto.bbs" ADD "boxes/bbtoto" (NO EXTENSION) +# !! THE PATH MUST BE RELATIVE TO THE bbs FOLDER !! +#) +#=========================================================================== + +#=========================================================================== +# THE SCRIPT-DEFINED APPLICATIONS OF THE PACKAGE (bbs) +# EITHER UNCOMMENT NEXT LINE TO INCLUDE ALL .bbs OF THE bbs/appli DIRECTORY : +SET(${BBTK_PACKAGE_NAME}_INCLUDE_ALL_BBS_APPLI ON) +# ... OR LIST THE FILES TO INCLUDE MANUALLY : +# SET(${BBTK_PACKAGE_NAME}_BBS_APPLI +# LIST HERE THE bbs FILES TO INCLUDE +# E.G. TO INCLUDE "appli/testToto.bbs" ADD "appli/testToto" (NO EXTENSION) +# !! THE PATH MUST BE RELATIVE TO THE bbs FOLDER !! +#) +#=========================================================================== + +#=========================================================================== +SET(${BBTK_PACKAGE_NAME}_INCLUDE_DIRS + # LIST HERE YOUR ADDITIONAL INCLUDE DIRECTORIES + # EXCEPT : + # - src + # - bbtk dirs + # - automatically handled libraries or packages : wx, vtk... (see above) + # - the dirs automatically set by other libraries found by FIND_PACKAGE + ) +#=========================================================================== + +#=========================================================================== +SET(${BBTK_PACKAGE_NAME}_LIBS + # LIST HERE THE ADDITIONAL LIBS TO LINK AGAINST + # EXCEPT : the same libs than for INCLUDE_DIRS + ) +#=========================================================================== + +#=========================================================================== +# IF NEEDED : UNCOMMENT NEXT LINE +# AND LIST ADDITIONNAL DIRECTORIES +# IN WHICH TO LOOK FOR LIBRARIES TO LINK AGAINST +# LINK_DIRECTORIES() +#=========================================================================== + +#=========================================================================== +# SET TO TRUE TO HAVE INFORMATION ON LIBRARIES FOUND DURING CMAKE CONFIGURE +SET(FIND_PACKAGE_VERBOSE TRUE) +#=========================================================================== + +#=========================================================================== +# END OF USER SECTION +#=========================================================================== + +#=========================================================================== +# Include configuration script +INCLUDE(Configure.cmake) +#=========================================================================== + +#=========================================================================== # EOF -#........................................................................... +#=========================================================================== + \end{verbatim} \end{file} The comments in the file should be easily understandable ! You have to customize the lines which are enclosed between dashed comment lines. +In these sections, you can see some of the informations you supplied in previous step: +\begin{itemize} + \item The \textbf{name} of your package. This will be the name used to load it in \bbi. The shared library however will be called \texttt{bb}name hence on + \lin the object file will be called \texttt{libbb}name\texttt{.so} + and on \win it will be called \texttt{bb}name\texttt{.dll}. + \item The \textbf{author(s)} of the package. Preferably provide e-mail adresses. + \item A \textbf{description} of the package, which will appear in the help of your package or in its html documentation automatically generated by \bbdoc. +\end{itemize} + In these sections, you can set : \begin{itemize} -\item The \textbf{name} of your package. This will be the name used to load it in \bbi. The shared library however will be called \texttt{bb}name hence on -\lin the object file will be called \texttt{libbb}name\texttt{.so} -and on \win it will be called \texttt{bb}name\texttt{.dll}. + \item The \textbf{libraries used} by the package : \vtk, \itk, \gdcm, \gsmis, \wx. The mecanisms to find these libraries, their sources and to link against them are automatically handled by the \cmake files installed by \bbCreatePackage. You just have to uncomment a line to use one of these libraries. -\item The \textbf{author(s)} of the package. Preferably provide e-mail adresses. + \item A \textbf{description} of the package, which will appear in the help of your package or in its html documentation automatically generated by \bbdoc. \item The \textbf{version} of the package. -\item The \textbf{\xml sources} of the package : you can list each input \xml file explicitly or tell \cmake to include in the project all the \xml files of the directory. +\item The \textbf{\xml sources} of the package : you can list each input \xml file explicitly or tell \cmake to include in the project \emph{all} the \xml files of the directory. \item The \textbf{\CPP sources} of the package : you can list each input \CPP file explicitly or tell \cmake to include in the project all the \CPP files of the directory. \item \textbf{Additional include directories}. Set it if your package needs to include source files which are not in the package directory, typically if it depends on another library which is not one the libraries automatically handled (\vtk, \itk...). \item \textbf{Additional libraries} to link against. Set it if your package needs to link against another library which is not one the libraries automatically handled (\vtk, \itk...). @@ -358,27 +432,64 @@ as well as the procesing method of the black box to the processing method of the inherited processing class, very much like a callback mechanism. +\subsubsection{How to generate a Black Box skeleton} + +Run \texttt{bbStudio}, choose \texttt{Tools} in the menu bar, option +\texttt{Create Black Box}. +You will be shown something like in fig. \ref{bbCreateBlackbox} : + +\begin{figure}[!ht] +\caption{\label{bbCreateBlackbox}Create Black Box} +\begin{center} +\includegraphics[width=0.6\textwidth]{bbCreateBackbox.png} +\end{center} +\end{figure} + + \subsubsection{Informations to provide} Finally, to create a new black box, you will have to give : \begin{enumerate} -\item The {\bf name} of the box -\item The {\bf author} of the box -\item A {\bf description} of the box -\item The {\bf package} to which the box belongs (can we do it automatically ? LG : think about it) -\item Its {\bf parent black box}, either \texttt{bbtk::UserBlackBox} or \texttt{bbtk::WxBlackBox} -\item $[$Optional$]$ The additional {\bf include files} which are necessary for the code to compile (classes or functions declarations ...) -\item $[$Optional$]$ The other {\bf parent(s)} of the box (which must be known hence their header included) -\item $[$Optional$]$ The {\bf namespace} to which the box belongs -\item The box {\bf inputs} and {\bf outputs}, and for each one : -\begin{enumerate} -\item Its {\bf name} : the string which will identify the input or output -\item Its {\bf type} : any \CPP type, either a basic type or a user defined type (class ...) but which must be known, hence the necessary files must be included. -\item Its {\bf help} : a string describing the input / output -\end{enumerate} -\item Its {\bf processing} code, which can be a simple callback or an arbitrary complex code + \item The {\bf name} of the box + \item The {\bf package} to which the box belongs (can we do it automatically ? LG : think about it) + \item The {\bf author}(s) of the box + \item A {\bf description} of the box + + \item Its {\bf type}, either + \begin{enumerate} + \item a standard one (\texttt{std-template}) + \item a VTK Polydata Algorithm based box (\texttt{VTK\_PolydataAlgorithm-template}), + \item a VTK Image Algorithm based box (\texttt{VTK\_ImageaAlgorithm-template}), + \item if it uses the wxWidget Library (\texttt{widget-template}) + \end{enumerate} + + \item The output format of the file, either a C++ file or an XML file. + + %\item $[$Optional$]$ The additional {\bf include files} which are necessary for the code to compile (classes or functions declarations ...) + %\item $[$Optional$]$ The other {\bf parent(s)} of the box (which must be known hence their header included) + %\item $[$Optional$]$ The {\bf namespace} to which the box belongs + %\item The box {\bf inputs} and {\bf outputs}, and for each one : + %\begin{enumerate} + %\item Its {\bf name} : the string which will identify the input or output + %\item Its {\bf type} : any \CPP type, either a basic type or a user defined type (class ...) but which must be known, hence the necessary files must be included. + %\item Its {\bf help} : a string describing the input / output + %\end{enumerate} +%\item Its {\bf processing} code, which can be a simple callback or an arbitrary complex code \end{enumerate} +WARNING: +Under Linux, for reasons we shall not discuss here, you'll get an error message : + + \texttt{No such file or directory} + +Have a look at the console, you'll see a shell command (whose syntax is OK although there is is a lot of +quotes),something like : + + \texttt{ "/usr/local/bin/bbCreateBlackBox" "/home/jpr/Desktop/essai" MyPackage + myVtkPolydataBlackBox VTK-PolyDataAlgorithm C++ 'author1, author2' 'myVtkPolydataBlackBox description'} + + Just copy the command, and run it manually. + \subsubsection{Input and output accessors} When you encapsulate a processing class or a C function @@ -446,27 +557,30 @@ four distinct accessors are created : Let us examine the \texttt{xml} file describing the \texttt{Add} box of the \texttt{std} package : -\begin{file}{\texttt{src/packages/std/bbAdd.xml}} +\begin{file}{\texttt{packages/std/src/bbAdd.xml}} \small \begin{verbatim} - Adds its inputs - laurent.guigues@creatis.insa-lyon.fr - std - - bbtk::UserBlackBox - bbstd + laurent.guigues@creatis.insa-lyon.fr + Adds its inputs + math - First number to add - Second number to add - Result + + +
     bbSetOutputOut( bbGetInputIn1() + bbGetInputIn2() );
   
+ +
+    bbSetInputIn1(0);
+    bbSetInputIn2(0);
+    bbSetOutputOut(0);
+  
\end{verbatim} @@ -477,10 +591,8 @@ The tags and their role are easily understandable. As the box is not a widget, we inherit from \texttt{bbtk::UserBlackBox} (\texttt{parentblackbox} tag). -Note that we decided to include the generated class -into the namespace \texttt{bbstd}. -The only part of the file which demand a bit of explaination is +The only part of the file which needs a bit of explaination is the body of the \texttt{process} tag, which describes the actual code to execute in the box. This code must be enclosed in a \texttt{
} tag 
@@ -498,19 +610,17 @@ the code simply adds the values of the two inputs
 and sets the output \texttt{Out} with the resulting value.
 
 To describe your own black boxes in \xml code, 
-you can use the template \texttt{xml} file 
-\texttt{examples/TEMPLATE\_bbPackagenameBoxname.xml}.
+you must modify the xml file generated in previous step : 
 
-If \texttt{MyPack} is the name of your package and 
-\texttt{MyBox} the name of your box, then :
 \begin{enumerate}
-\item Copy this file in your package folder with 
-the normalised name \texttt{bbMyPackMyBox.xml} 
-\item Replace each occurrence of \$PACKAGENAME\$ by MyPack 
-and each occurrence of \$BOXNAME\$ by MyBox.
-\item Fill in the description and author tags
-\item Create your inputs and outputs
-\item Fill in the process tag 
+  \item Complete the description and author tags if you feel like.
+  \item add the '\#include' directives to be put in the generated .h file
+  \item Create your inputs and outputs
+  \item Fill in the process tag
+  \item Fill in the constructor tag
+  \item Fill in the copyconstructor tag
+  \item Fill in the destructor tag
+  \item Pray
 \end{enumerate} 
 
 
@@ -530,6 +640,7 @@ and each occurrence of \$BOXNAME\$ by MyBox.
 \subsubsection{\bbfy \texttt{xml} tags reference}
 % ==========================================
 
+  
 % ==========================================
 \begin{table}[!ht]
 \caption{\label{xml_tags}
@@ -543,14 +654,15 @@ Tag & Attributes & Condition & Multiplicity & Description
 \texttt{} & \texttt{name} & - & 1 & The name of the box \\ \hline
 		& \texttt{type} & - & 1 & The type of the box. In: 
 	\{\texttt{standard} (default), 
-\texttt{itkImageToImageFilter},
-\texttt{vtkImageAlgorithm},
-\texttt{vtkPolyDataAlgorithm}\} \\\hline
+\texttt{ITK\_ImageToImageFilter},
+\texttt{VTK\_ImageAlgorithm},
+\texttt{VTK\_PolyDataAlgorithm}\} \\\hline
 & \texttt{generic} & a) & 0-1 &
 Generate the generic filter (see text)\\ \hline 
 
 \texttt{} & - & - & 0-n &  The description of the box. Multiple occurrence are concatenated \\\hline 
 \texttt{} & - & - & 0-n &  The author of the box. Multiple occurrence are concatenated \\\hline 
+\texttt{} & - & - & 0-1 &  The box category (if more than one, they are separated with commas) see Tab \ref{categories}\\\hline 
 \texttt{} & - & - & 1 &  The parent black box of the box.
 In: \{\texttt{bbtk::BlackBox, bbtk::WxBlackBox, bbtk::WxContainerBlackBox}\}\\\hline 
 \texttt{} & - & - & 1 &  The package of the box \\\hline 
@@ -577,10 +689,11 @@ Use \texttt{bbPACKAGE}, where \texttt{PACKAGE} is the name of the package\\\hlin
 	 & \texttt{generic\_type} & c) & 0-1 & The ``generic'' type of the output (see text).\\\hline 
 
 \texttt{} & - & - & 0-1 & The code of the processing method of the box. Must be put between clear tags : \texttt{
} \\\hline 
-
-\end{tabular}
-\end{table}
-
+\texttt{} & - & - & 0-1 & The code of the user Constructor of the box (may contains default initialisations). Must be put between clear tags : \texttt{
} \\\hline 
+\texttt{} & - & - & 0-1 & The code of the user Copy Constructor of the box . Must be put between clear tags : \texttt{
} \\\hline
+\texttt{} & - & - & 0-1 & The code of the user Destructor of the box. Must be put between clear tags : \texttt{
} \\\hline
+ \end{tabular}
+ \end{table}
 % ==========================================
 \begin{table}[!ht]
 \caption{\label{xml_tags}
@@ -591,11 +704,66 @@ Use \texttt{bbPACKAGE}, where \texttt{PACKAGE} is the name of the package\\\hlin
 a) & \texttt{} \\ \hline
 b) & \texttt{} \\ \hline
 c) & \texttt{} and 
- 	\texttt{} is present. \\ \hline
+     \texttt{} is present. \\ \hline
 \end{tabular}
 \end{table}
 
 
+
+% ==========================================
+\begin{table}[!ht]
+\caption{\label{categories}
+\bbfy \texttt{Black Box} categories}
+\small
+\begin{tabular}{|ll|}
+\hline
+ \texttt{Categ name}     & : Meaning                                          \\ \hline \\ \hline
+ \texttt{adaptor}        & : Adaptor box                                      \\ \hline
+ \texttt{application}    & : Final application, end user intended             \\ \hline
+ \texttt{atomic box}     & : System category.
+	       Automatically assigned to Atomic Black Boxes (c++ defined)     \\ \hline
+ \texttt{complex box}    & : System category.
+	       Automatically assigned to Complex Black Boxes (script defined) \\ \hline  
+ \texttt{command line}   & : Script which defines a command line application (no embedded GUI, but command line imput parameters) \\ \hline
+ \texttt{demo}           & : Demonstration                             \\ \hline
+ \texttt{devel}          & : Developer tool (bbCreatePackage.bbs, ...) \\ \hline
+ \texttt{dicom}          & : DICOM aware box \\ \hline 
+ \texttt{example}        & : Example script showing a box use-case      \\ \hline
+ \texttt{filter}         & : Image processing box                       \\ \hline
+ \texttt{image}          & : Image processing related box               \\ \hline
+ \texttt{interaction}    & :  \\ \hline
+ \texttt{math}           & : Mathematical operations\\ \hline
+ \texttt{mesh}           & : Mesh processing related box \\ \hline
+ \texttt{misc}           & : A box that cannot be put in other category ! \\ \hline
+ \texttt{read/write}     & : Box that read or write data from or to disk  \\ \hline
+ \texttt{viewer}         & : Box which displays some data \\ \hline
+ \texttt{widget}         & : Piece of graphical interface  \\ \hline 
+ 
+ \texttt{3D object creator} & : Sophisticated 3D widget  \\ \hline  
+ \texttt{toolsbbtk}         & : Component of bbStudio    \\ \hline  
+\end{tabular}
+\end{table}
+
+
+% ==========================================
+\begin{table}[!ht]
+\caption{\label{kinds}
+\bbfy \texttt{Black Box} kinds}
+\small
+\begin{tabular}{|ll|}
+\hline
+ \texttt{Kind}     &  Use as :     \\ \hline \\ \hline
+ \texttt{ADAPTOR} & \\ \hline
+ \texttt{DEFAULT\_ADAPTOR} & \\ \hline 
+ \texttt{ADAPTOR} & \\ \hline 
+ \texttt{WIDGET\_ADAPTOR} & \\ \hline 
+ \texttt{DEFAULT\_WIDGET\_ADAPTOR} & \\ \hline
+ \texttt{GUI} & \\ \hline 
+ \texttt{DEFAULT\_GUI} & \\ \hline 
+ \texttt{ALL} & If kind='ALL' then sets the level for all kinds\\ \hline  
+\end{tabular}
+\end{table}
+
 % ==========================================
 \subsection{\CPP description of a box}
 % ==========================================
diff --git a/kernel/doc/bbtkUsersGuide/HelpOnAdd.png b/kernel/doc/bbtkUsersGuide/HelpOnAdd.png
new file mode 100644
index 0000000..e52e00d
Binary files /dev/null and b/kernel/doc/bbtkUsersGuide/HelpOnAdd.png differ
diff --git a/kernel/doc/bbtkUsersGuide/bbStudioCommand.png b/kernel/doc/bbtkUsersGuide/bbStudioCommand.png
new file mode 100644
index 0000000..2f8b9b2
Binary files /dev/null and b/kernel/doc/bbtkUsersGuide/bbStudioCommand.png differ
diff --git a/kernel/doc/bbtkUsersGuide/bbStudioFiles.png b/kernel/doc/bbtkUsersGuide/bbStudioFiles.png
new file mode 100644
index 0000000..6ee9ab4
Binary files /dev/null and b/kernel/doc/bbtkUsersGuide/bbStudioFiles.png differ
diff --git a/kernel/doc/bbtkUsersGuide/bbStudioMainPage.png b/kernel/doc/bbtkUsersGuide/bbStudioMainPage.png
new file mode 100644
index 0000000..1514903
Binary files /dev/null and b/kernel/doc/bbtkUsersGuide/bbStudioMainPage.png differ
diff --git a/kernel/doc/bbtkUsersGuide/bbtkUsersGuide.tex b/kernel/doc/bbtkUsersGuide/bbtkUsersGuide.tex
index 0ed6a91..9cd903e 100644
--- a/kernel/doc/bbtkUsersGuide/bbtkUsersGuide.tex
+++ b/kernel/doc/bbtkUsersGuide/bbtkUsersGuide.tex
@@ -38,7 +38,7 @@ I would add something very important to this definition :
 not only the inputs and outputs are of interest but also 
 \emph{what the box does} !
 Hence, I would say that a black box is any \emph{\bf documented} 
-component of a system, letting know the user 
+component of a system, letting the user know  
 \emph{\bf what} the box is supposed to do and 
 \emph{\bf how to use it}
 but not \emph{\bf how it does it}.
@@ -108,33 +108,44 @@ have been written by different persons, using different libraries, etc.
 % ==========================================
 \BBTK includes:
 \begin{itemize}
-\item A \CPP {\bf\emph{library}} - called \bbtk - which defines a framework 
-(abstract classes) to develop black boxes and to store them into 
-dynamic libraries, called black box \emph{packages}.
-\item Different {\bf\emph{black box packages}}:
-\begin{itemize}
-\item {\bf\emph{std}}: the 'standard' package including basic useful boxes.
-\item {\bf\emph{wx}}: basic graphical interface elements (widgets: sliders, buttons, etc. based on the \texttt{wxWidgets} library).  
-\item {\bf\emph{itk}}: the basic image processing package, based on the \texttt{itk} library.
-\item {\bf\emph{vtk}}: the basic image and surfaces processing package, based on the \texttt{vtk} library.
-\item {\bf\emph{wxvtk}}: widget boxes based on the \texttt{vtk} library.
-\item {\bf\emph{itkvtk}}: boxes to convert \texttt{itk} structures into \texttt{vtk} structures and conversally. 
+  \item A \CPP {\bf\emph{library}} - called \bbtk - which defines a framework 
+    (abstract classes) to develop black boxes and to store them into 
+    dynamic libraries, called black box \emph{packages}.
+  \item Different {\bf\emph{black box packages}}:
+    \begin{itemize}
+      \item {\bf\emph{std}}: the 'standard' package including basic useful boxes.
+      \item {\bf\emph{wx}}: basic graphical interface elements (widgets: sliders, buttons, etc. based on the \texttt{wxWidgets} library).  
+      \item {\bf\emph{itk}}: the basic image processing package, based on the \texttt{itk} library.
+      \item {\bf\emph{vtk}}: the basic image and surfaces processing package, based on the \texttt{vtk} library.
+      \item {\bf\emph{wxvtk}}: widget boxes based on the \texttt{vtk} library.
+      \item {\bf\emph{itkvtk}}: boxes to convert \texttt{itk} structures into \texttt{vtk} structures and conversally. 
+    \end{itemize}
+  \item A {\bf\emph{Developement environment}}, called bbStudio, which provides
+    \begin{itemize}
+      \item An online {\bf\emph{script editor}}, called bbed
+      \item A powerfull {\bf\emph{Help environment}}, called bbhelp
+        whith integrated
+        \begin{itemize}
+          \item Online documentation scaning
+          \item Retreiving boxes on various criterions
+          \item Checking Demo and examples
+        \end{itemize}
+
+      \item An {\bf\emph{interpreter}}, called \bbi, which allows to 
+          load black box packages and to define and execute 
+          processing chains by connecting various black boxes of the already loaded packages.
+      \item {\bf\emph{Utilities}}:
+         \begin{itemize}
+            \item \bbfy generates the \CPP code of a black box from a 
+               description file written in \texttt{xml}.
+                %\item \bbdoc generates the html documentation of a black box package 
+                %(author, description, description of its black boxes: 
+                %author, description, inputs, outputs, and so on).
+            \item \bbCreatePackage allows to create the basic file architecture 
+               to start the development of a new black box package.
+         \end{itemize} 
+    \end{itemize}
 \end{itemize}
-\item An {\bf\emph{interpreter}}, called \bbi, which allows to 
-load black box packages and to define and execute 
-processing chains by connecting various black boxes of the already loaded packages.
-\item {\bf\emph{Utilities}}:
-\begin{itemize}
-\item \bbfy generates the \CPP code of a black box from a 
-description file written in \texttt{xml}.
-%\item \bbdoc generates the html documentation of a black box package 
-%(author, description, description of its black boxes: 
-%author, description, inputs, outputs, and so on).
-\item \bbCreatePackage allows to create the basic file architecture 
-to start the development of a new black box package.
-\end{itemize} 
-\end{itemize}
-
 The general architecture of \BBTK 
 is shown in figure \ref{bb-architecture}.
 
@@ -149,19 +160,22 @@ is shown in figure \ref{bb-architecture}.
 \subsection{Structure of this guide}
 % ==========================================
 
-This guide is divided into two parts. 
+This guide is divided into three parts. 
 
-The first part (\ref{bbi}) 
+The first part (\ref{bbStudio}) is a brief presentation of the very intuitive Development
+environment, \bbStudio.
+
+The second part (\ref{bbi}) 
 is devoted to the use of the \emph{black box interpreter} \bbi. 
 This is the highest level of use of the toolkit, which 
 allows to create and execute processing chains by connecting 
 black boxes of existing packages. 
 
-The second part (\ref{cpp}) explains how to 
+The third part (\ref{cpp}) explains how to 
 use the black box toolkit framework in \CPP code, 
 typically to develop large applications which 
 involve complex graphical interfaces.
- 
+
 
 % ==========================================
 % ==========================================
@@ -170,15 +184,75 @@ involve complex graphical interfaces.
 % ==========================================
 % ==========================================
 \vspace{0.5cm}\hrule
-\section{The black box interpreter (bbi)}
-\label{bbi}
-% ==========================================
+\section{The Development environment (bbStudio)}
+\label{bbStudio}
+
+Just run it, typing in a console \texttt{bbed}.
+You'll get something like in figure 
+\ref{bbi-fig-bbStudio-gui}
+(the exact appearance of \bbStudio is system and \bbtk version dependent)
 
+\begin{figure}[!ht]
+\caption{\label{bbi-fig-bbStudio-gui}The bbStudio Development environment interface}
+\begin{center}
+\includegraphics[width=0.7\textwidth]{bbStudioMainPage.png}
+\end{center}
+\end{figure}
+
+All the entries of this Help 'bookmark' are self-explanatory :
+
+ \begin{itemize}
+   \item {\bf\emph{Wiki}}: Direct link to the bbtk Wiki (intranet only, right now, www
+   later).
+   \item {\bf\emph{Demo}}: Link to some demonstrations.
+   \item {\bf\emph{User's Guide}}: Step to step How-to for user who just wants to create his own
+   application, just using already existing boxes.
+   \item {\bf\emph{Package Developper's Guide}}: Step to step How-to for user who wants to create his own
+   black boxes.
+   \item {\bf\emph{Developper's Guide}}: Sorry, not yet written.
+   \item {\bf\emph{Reference Manual}}: Sorry, not yet written. 
+   \item {\bf\emph{Doxygen Documentation}}: Doxygen source browser.
+   \item {\bf\emph{Boxes}}: Box retrieving on various criterions :
+      \begin{itemize}
+      \item {\bf\emph{By name}}
+      \item {\bf\emph{By package}}
+      \item {\bf\emph{By category}}
+      \end{itemize}
+ \end{itemize}
+
+% ==========================================
+% ==========================================
 % ==========================================
-%\subsection{Structure of this part}
 % ==========================================
+% ==========================================
+% ==========================================
+\vspace{0.5cm}\hrule
+\section{The script manager}
+\label{bb0}
+% ==========================================
+
+ Call it with the bookmark \emph{File}.
+ 
+
+\begin{figure}[!ht]
+\caption{\label{bbi-fig-bbStudio-file0}The bbStudio script manager}
+\begin{center}
+\includegraphics[width=0.7\textwidth]{bbFile0.png}
+\end{center}
+\end{figure}
+
+Using the lower tool bar, you can :
+ \begin{itemize}
+   \item {\bf\emph{new}}: Create a newfile to hold a script
+   \item {\bf\emph{open}}: Open a already existing file holding a script 
+   \item {\bf\emph{close}}: Close a file holding a script
+   \item {\bf\emph{close}}: Save he current file (if modified)
+   \item {\bf\emph{save as}}: Save he current file under a different name
+   \item {\bf\emph{execute}}: Execute the script you just loaded/modified/written
+ \end{itemize}
 
-Using the black box interpreter is very simple. 
+
+The script language is very simple. 
 Everything is done with only a few commands.
 The philosophy of this part is also very simple: 
 it introduces the \bbi commands using examples, 
@@ -214,7 +288,8 @@ Use it as a reference.
 \subsubsection{Creating and executing black boxes}
 % ==========================================
 
-To run the black box interpreter, 
+To learn interactivelly the script language features, you can use the black box
+interpreter : 
 open a console and type \texttt{bbi} 
 or double click on the application icon.
 You get a window which looks like the one in figure 
@@ -226,17 +301,17 @@ graphical interface but a simple prompt}.
 \begin{figure}[!ht]
 \caption{\label{bbi-fig-bbi-gui}The black box interpreter interface}
 \begin{center}
-\includegraphics[width=0.7\textwidth]{bbi-gui.png}
+\includegraphics[width=0.7\textwidth]{bbi-gui0.png}
 \end{center}
 \end{figure}
 
 The 'Command' tab is subdivided into two parts : 
 one single line zone at the bottom in which you can enter your commands and 
 one multiple line zone in which \bbi prints out the result of your commands.
-
+, just using already existing boxes.
 
 Try typing in the input zone (in this manual, 
-the commands entered by the user will be preceded by a prompt '(>)') :
+the commands entered by the user will be preceded by a prompt \textgreater) :
 \begin{verbatim}
 > help 
 \end{verbatim}
@@ -271,7 +346,7 @@ Available commands:
  quit
  reset
  set
- unload 
+ unload
 \end{verbatim}
 
 To get help on a particular command type \texttt{help },
@@ -544,15 +619,15 @@ Good bye !
 \item A particular black box type (with full description) if you type \texttt{help }. In particular, \texttt{help workspace} displays information on the content of the \texttt{'workspace'} black box, which stores the boxes created by the user (by \texttt{new}).
 \end{itemize}
 %\item \texttt{list} displays the list of black box instances created so far (by \texttt{new}).
-\item \texttt{new} creates an instance of a black box. 
-\item \texttt{set} sets the value of an input of a black box. 
+\item \texttt{new} : creates an instance of a black box. 
+\item \texttt{set} : sets the value of an input of a black box. 
 \item In all \bbi, to reference the input called \texttt{i} 
 of a black box called \texttt{b} you must type \texttt{'b.i'}. 
 The same syntax holds for outputs.
-\item \texttt{print} prints a string, substituting each substring of the form \$b.o\$ by the value of the output \texttt{o} of the black box \texttt{b}. Note that an
+\item \texttt{print} : prints a string, substituting each substring of the form \$b.o\$ by the value of the output \texttt{o} of the black box \texttt{b}. Note that an
 implicit trailing 'new line character' is added at the final string.
-\item \texttt{exec} runs the process of a box if needed. 
-\item \texttt{quit} quits \bbi.
+\item \texttt{exec} : runs the process of a box if needed. 
+\item \texttt{quit} : quits \bbi.
 \end{itemize}
 \hrule
 % ==========================================
@@ -562,8 +637,6 @@ implicit trailing 'new line character' is added at the final string.
 \label{bbi-connecting-black-boxes}
 % ==========================================
 
-LG : THE GUIDE IS UP TO DATE UNTIL HERE
-
 \BBTK allows to create 
 and execute processing chains, 
 also called \emph{pipelines}, 
@@ -589,6 +662,7 @@ A simple pipeline which adds 3 numbers}
 \end{center}
 \end{figure}
 
+
 The \bbi instructions to create and execute this pipeline are:
 \begin{verbatim}
 > new Add a
@@ -602,8 +676,8 @@ The \bbi instructions to create and execute this pipeline are:
 \end{verbatim}
 
 The first three commands build the pipeline, 
-the next three set its inputs and the last one 
-executes it and prints its output.
+the next three set \texttt{a} and \texttt{b} black boxes inputs and the last one 
+executes the pipeline and prints \texttt{b} black boxe output.
  
 The command \texttt{'connect a.Out b.In1'} ``plugs'' the output 
 \texttt{Out} of the box \texttt{a} into the input \texttt{In1} of the 
@@ -618,7 +692,7 @@ for details).
 Of course, to be able to connect two boxes, 
 the output and the input must be compatibles. 
 You can always connect an output to an input of the \emph{same} type, 
-but you can do more, thanks to particular black boxes called {\bf adaptors}.
+but you can do more, thanks to particular (hidden) black boxes called {\bf adaptors}.
 
 An adaptor is a black box which has at least one input, called \texttt{In}, 
 and at least one ouput called \texttt{Out} and whose role is to convert 
@@ -820,6 +894,11 @@ and you can use it like any other box, for example type:
 \end{verbatim}
 
 
+As a side note, we can say that, for consistency reasons, it would have been better to name  
+\texttt{In1}, \texttt{In2} and \texttt{In3} the inputs of the black box \texttt{Add3}, 
+since all the 'natural entry' of a box is named \texttt{In}, or\texttt{In}x if there are more than one  'natural
+entry'.
+
 % ==========================================
 \hrule
 \paragraph{Summary}
@@ -848,11 +927,12 @@ into a text file and afterwards include that file in \bbi.
 Doing this, you start writing \bbi scripts.
 The conventionnal extension for such scripts is \texttt{bbs} 
 (black box script).
+For consistency reasons, you are requested to prepend \texttt{bb} to the name.
 
 For example, the \texttt{Add3} complex box we previously worked on 
-can be defined in the \texttt{Add3.bbs} file:
+can be defined in the \texttt{bbAdd3.bbs} file:
 
-\begin{file}{Add3.bbs}
+\begin{file}{bbAdd3.bbs}
 \begin{verbatim}
 # Defines the Add3 black box which adds 3 doubles 
 load std
@@ -880,7 +960,7 @@ are considered as comments by \bbi.
 To use this file in \bbi, use the \texttt{include} command:
 
 \begin{verbatim}
-> include Add3.bbs
+> include bbAdd3.bbs
 > help Add3
 Complex Black Box 
  adds 3 doubles
@@ -906,7 +986,7 @@ If the file has the \texttt{bbs} extension, you can ommit it and just type:
 Of course, you can include script files in other script files, 
 like in the following example:
 
-\begin{file}{Add4.bbs}
+\begin{file}{bbAdd4.bbs}
 \begin{verbatim}
 # Defines the Add4 black box which adds 4 doubles 
 include Add3
@@ -926,19 +1006,35 @@ endefine
 \end{verbatim}
 \end{file}
 
-TO DO: 
+% ==========================================
+\hrule
+\paragraph{Naming Conventions}
+%\hrule
 
-- naming conventions:  one cbb per file with the same name
-- search paths 
+\hrule
+% ==========================================
+\begin{itemize}
+\item
+File names: 
+For consistency reasons, you are requested to prepend \texttt{bb}, and postpone an extention \texttt{.bbs},
+to the names of the files that hold a \texttt{complex black box} definition.
 
+For example, the \texttt{Add3} complex box we previously worked on 
+can be defined in the \texttt{bbAdd3.bbs} file.
+\item
+Search Paths 
+\end{itemize}
 % ==========================================
 \hrule
+
 \paragraph{Summary}
 %\hrule
 \begin{itemize}
 \item The \texttt{include} command allows to include a script file in \bbi.
-\item Lines starting with a \texttt{\#} are treated as comments in \bbi scripts.
+\item Lines starting with a \texttt{\#} or with a \texttt{\//} are treated as comments in \bbi scripts.
+\item Lines between a line starting with a \texttt{\//*} an a line starting with a \texttt{*\//} are treated as comments in \bbi scripts.
 \end{itemize}
+
 \hrule
 % ==========================================
 
@@ -1080,6 +1176,11 @@ between double quotes, e.g. \texttt{"parameter with white spaces = gnu's not uni
 \label{bbi-widget}
 % ==========================================
 
+% ==========================================
+\subsubsection{Overwiew}
+\label{bbi-overview}
+% ==========================================
+
 If \bbi is compiled in graphical mode 
 (option \texttt{BUILD\_bbi\_GRAPHICAL} of \cmake, requires \wx),
 then you can use special black boxes which are 
@@ -1090,7 +1191,7 @@ such as buttons, sliders, file open/save dialogs, etc.
 As first example, type the following commands in \bbi:
 \begin{verbatim}
 > load wx 
-> new TextCtrl t
+> new InputText t
 > print $t.Out$\n
 \end{verbatim}
 
@@ -1101,35 +1202,33 @@ the \texttt{print} command.
 
 Type \texttt{help wx}, you get something like:
 \begin{verbatim}
-Package wx v1.0.0- info-dev@creatis.insa-lyon.fr
- Basic graphical interface elements (slider, button ...) based on wxWidgets
- Black boxes: 
-   Button               : Button that gives a string
-   ColourSelectorButton : 
-   ColourSelector       : Colour Selector widget (wxColourDialog)
-   CommandButton        :
-   DirectorySelector    :
-   FileSelector         : FileDialog widget (wxFileDialog)
-   InputText            : TextCtrl widget (wxTextCtrl)
-   LayoutLine           : Sizer widget (wxSizer)
-   LayoutSplit          : Split widget (wxSplitterWindow)
-   NoteBook             :
-   OutputText           : wxWidget Static text
-   RadioButton          : RadioButton group widget (wxRadioButton) 0-9 entries
-   Slider               : Slider widget (wxSlider)
-
+ Package wx v1.0.0- info-dev@creatis.insa-lyon.fr
+ Basic graphical interface elements (sliders, buttons ...) based on wxWidgets
+ Black boxes : 
+   ColourSelector        : Colour Selector dialog (bbfication of wxColourSele...
+   ColourSelectorButton  : A button which displays a colour picker dialog whe...
+   CommandButton         : Button which executes bbi commands
+   DirectorySelector     : Pops up a directory selection dialog (wxDirDialog)
+   FileSelector          : Pops up a file selection dialog for reading or sav...
+   InputText             : A zone in which the user can enter a text (wxTextC...
+   LayoutLine            : LayoutLine widget (wxBoxSizer)
+   LayoutSplit           : Widget which splits a window in two fixed size par...
+   LayoutTab             : LayoutTab widget (wxNotebook)
+   OutputText            : Text zone to be inserted into a window (wxStaticTe...
+   RadioButton           : RadioButton group widget 0-9 entries
+   Slider                : Slider widget (wxSlider)
 \end{verbatim}
 
 You can reproduce the same experiment as above using a 
-\texttt{Slider} or a \texttt{FileDialog} rather than a \texttt{TextCtrl}.
+\texttt{Slider} or a \texttt{FileDialog} rather than a \texttt{InputText}.
 See the files \texttt{test*.bbs} in the \texttt{scripts/test} directory.
 
 There are two kind of widgets: ``terminal'' widgets and ``container'' widgets.
-The \texttt{TextCtrl}, \texttt{FileDialog} or \texttt{Slider} widgets 
+The \texttt{InputText}, \texttt{FileDialog} or \texttt{Slider} widgets 
 are ``terminal'' widgets. 
-``container'' widgets are of another kind: they are made to 
+``container'' widgets are of another kind: they are designed to 
 contain other widgets in order to build larger dialog boxes. 
-For example, the \texttt{Split} widget is a container which 
+For example, the \texttt{LayoutSplit} widget is a container which 
 ``splits'' horizontally a window into two parts, 
 each part including another widget. 
 The size of the two parts can be adjusted by the user thanks 
@@ -1149,9 +1248,9 @@ load wx
 new Slider s1
 new Slider s2
 
-new Split s
-connect s.Child s1.Parent
-connect s.Child s2.Parent
+new LayoutSplit s
+connect  s1.Widget s.Widget1
+connect  s2.Widget s.Widget2
 
 print s1=$s1.Out$\\n
 print s2=$s2.Out$\\n
@@ -1159,42 +1258,89 @@ print s2=$s2.Out$\\n
 \end{file}
 
 First, the two sliders \texttt{s1} and \texttt{s2} are created.
-A \texttt{Split} box \texttt{s} is also created. 
+A \texttt{LayoutSplit} box \texttt{s} is also created. 
 The \texttt{connect} commands then ``includes'' the sliders in the 
 split ``container''. 
-The input \texttt{Parent} is common to all widget boxes: 
+The input \texttt{Widget} is common to all widget boxes: 
 every widget can be inserted into another widget. 
-The output \texttt{Child} is specific of \emph{container} 
+The outputs \texttt{Widget1},\texttt{Widget2}  are specific of \emph{container} 
 widgets 
 (in \bbi type \texttt{help Slider}: 
-you will see the input \texttt{Parent}; 
-type \texttt{help Split}: 
-you will see the input \texttt{Parent} 
-and the output \texttt{Child}). 
-When you connect the \texttt{Child} output of a container 
-to the \texttt{Parent} input of a widget, 
+you will see the output \texttt{Widget}; 
+type \texttt{help LayoutSplit}: 
+you will see the inputs \texttt{Widget1} and \texttt{Widget2} 
+and the output \texttt{Widget}). 
+When you connect the \texttt{Widget} output of a container 
+to the \texttt{Widget}i input of a widget, 
 you order to include the widget in the container.
 Of course, the order of connection is important. 
 In our case, the slider \texttt{s1} is included first, 
 then the slider \texttt{s2}: \texttt{s1} will be placed 
-on top of \texttt{s2} (the \texttt{Split} box is 
+on top of \texttt{s2} (the \texttt{LayoutSplit} box is 
 implemented that way, but this is arbitrary choice).
 
-For the moment, there are only \emph{two} container widgets in the \texttt{wx} package: 
-the \texttt{Split} widget we just described and the \texttt{Sizer} 
-widget, which can have multiple children and 
+Right now, there are only \emph{three} container widgets in the \texttt{wx} package: 
+the \texttt{LayoutSplit} widget we just described, the \texttt{LayoutLine} , and the \texttt{LayoutTab}
+widget. 
+
+The \texttt{LayoutLine} widget can have multiple children and 
 divides its window into as much parts as children, 
 each part of equal size. 
-The orientation of the sizer can be changed by the input \texttt{Orientation}.
+The orientation of the \texttt{LayoutSplit} or of the \texttt{LayoutLine}  can be changed by the input \texttt{Orientation}.
 See the example \texttt{test/testSizer.bbs}.
 With only those two containers you can already create 
 complex dialog boxes (of course containers can be nested, which 
 leads to tree-like structures of widgets). 
-See the script \texttt{test/testSizerSplit.bbs} for an example.
+See the script \texttt{bbtk/share/bbtk/bbs/wx/appli/ExampleLayoutSplit.bbs} for an example.
+
+The \texttt{LayoutTab}  widget is based on the \texttt{wxNotebook.}
 
 One word about a special widget in the package \texttt{wx}: 
 the \texttt{Button}... to be continued.
 
+% ==========================================
+\subsubsection{Deeper in the boxes}
+\label{bbi-deep-box}
+% ==========================================
+
+Any widget box has two mandatory Outputs :
+
+\begin{itemize}
+  \item {\bf\emph{Widget}} : that is the \texttt{wxWindow} itself. If it's not connected to the \texttt{Widget}\emph{i} of any \emph{Layout box}, it
+     will popup. If it's connected to the\bf{Widget}\bf\emph{i} of any \texttt{Layout box}, it will be embedded in its parent window.
+  \item {\bf\emph{Boxchange}}  : Signals any modification of the box. This output may be connect if necessary to the \emph{BoxExecute} of an other box,
+   further within the execution pipeline.
+\end{itemize}    
+
+Any widget box has two mandatory Inputs :
+\begin{itemize}
+  \item {\bf\emph{BoxExecute}}     : Any signal received by this input executes the box
+  \item {\bf\emph{BoxProcessMode}} : Sets the processing mode of the box :
+  \begin{itemize}
+    \item {\bf\emph{Pipeline}} : bbUpdate() only calls Process if Status == MODIFIED (normal pipeline processing)
+    \item {\bf\emph{Always}}   : bbUpdate() always calls Process
+    \item {\bf\emph{Reactive}} : bbSetModifiedStatus() calls bbUpdate()    
+  \end{itemize}   
+\end{itemize}
+
+Any widget box has five Inputs, that will be dealt with only if the box is not connected to the \emph{Widget}i of any \emph{Layout box} :  
+\begin{itemize}
+  \item {\bf\emph{WinHeight}} : Height of the window 
+  \item {\bf\emph{WinWidth}}  : Width of the window  
+  \item {\bf\emph{WinTitle}}  : Title of the window
+  \item {\bf\emph{WinClose}}  : Any received signal closes the window
+  \item {\bf\emph{WinHide}}   : Any received signal hides the window
+  \item {\bf\emph{WinDialog}} : When set to 'true', creates a \emph{dialog window}, that blocks the pipeline until it is closed (\emph{modal})   
+\end{itemize}
+
+
+Any \emph{Layout box} (i.e. \emph{LayoutLine}, \emph{LayoutSplit} or \emph{LayoutTab}) has at one or more mandatory Inputs :
+\begin{itemize}
+  \item \bf{Widget}\bf{\emph{i}} : e.g. a \emph{LayoutSplit} box (Widget which splits a window in two fixed size parts) 
+       has two Input parameters \emph{Widget1} and \emph{Widget2}, used to embed the child windows.
+\end{itemize} 
+
+
 
 TO DO: 
 \begin{enumerate}
@@ -1215,6 +1361,99 @@ TO DO:
 \label{bbi-more-on-packages}
 % ==========================================
 
+There are various others user-intended packages :
+
+\paragraph{vtk}
+It contains some vtk based image processing filters :
+%   \begin{enumerate}
+     \subparagraph{AppendPolyData}
+     Appends one of more polygonal datasets into a single polygonal dataset 
+     \subparagraph{ConeSource}
+     Creates a Cone 
+     \subparagraph{ImageAnisotropicDiffusion3D}
+vtkImageAnisotropicDiffusion3D diffuses an volume iteratively. 
+The neighborhood of the diffusion is determined by the instance flags. 
+if 'Faces' is on, the 6 voxels adjoined by faces are included in the neighborhood. 
+If 'Edges' is on the 12 edge connected voxels are included, and if 'Corners' is on, the 8 corner connected voxels are included. 
+'DiffusionFactor' determines how far a pixel value moves toward its neighbors, and is insensitive to the number of neighbors chosen. 
+The diffusion is anisotropic because it only occurs when a gradient measure is below 'GradientThreshold'. 
+Two gradient measures exist and are toggled by the 'GradientMagnitudeThreshold' flag. 
+When 'GradientMagnitudeThreshold' is on, the magnitude of the gradient, computed by central differences, above 'DiffusionThreshold' a voxel is not modified. 
+The alternative measure examines each neighbor independently. 
+The gradient between the voxel and the neighbor must be below the 'DiffusionThreshold' for diffusion to occur with THAT neighbor.
+     \subparagraph{ImageCharacteristics}
+     Exports objet sizes, and Spacings
+     \subparagraph{ImageDilateErode3D}
+     Dilates one value and erodes another. 
+     vtkImageDilateErode3D will dilate one value and erode another. 
+     It uses an elliptical foot print, and only erodes/dilates on the boundary of the two values. 
+     The filter is restricted to the X, Y, and Z axes for now. 
+     It can degenerate to a 2 or 1 dimensional filter by setting the kernel size to 1 for a specific axis. 
+     (bbfication of vtkImageDilateErode3D) 
+     \subparagraph{ImageGaussianSmooth}
+     Performs a gaussian convolution of the input image
+     \subparagraph{ImagePlanes}
+Creates three 3D planes with the input image mapped onto with which the user can interact. 
+The output vtkImagePlaneWidget objects are to be inserted into a 3D scene (e.g. a Viewer3D      
+     \subparagraph{IsoSurfaceExtractor}
+Extracts an iso-surface of a 3D image and creates a vtkProp3D object to insert into a 3D scene (e.g. a Viewer3D 
+     \subparagraph{MarchingCubes}
+     Extracts an iso-surface of an image using the marching cubes algorithm (bbfication of vtkMarchingCubes
+     \subparagraph{MIPCreator}     
+Creates a Maximum Intensity Projection (MIP) view of a 3D image. 
+Creates a vtkProp3D object to insert into a 3D scene (e.g. a Viewer3D
+     \subparagraph{MetaImageReader}
+Reads .mhd / .mhd image formats (bbfication of vtkMetaImageReader)     
+     \subparagraph{SegmentationConnectivity}
+Segmentation with min max threshold and connectivity    
+     \subparagraph{SphereSource}
+     Creates a Sphere      
+%   \end{enumerate}
+
+\paragraph{itk}
+It contains some itk based image processing filters :
+ 
+     \subparagraph{BinaryThresholdImageFilter}
+     Binarizes an image by thresholding (generic bbification of itk::BinaryThresholdImageFilter) 
+     \subparagraph{DICOMSeriesFileNames}
+     Reads a series from a DICOM directory as a 3D itk image     
+     \subparagraph{ExtractImageFilter}
+     Decrease the image size by cropping the image to the selected region bounds (bbification of itk::ExtractImageFilter)     
+     \subparagraph{ImageProperties}
+     Outputs different properties of an image (type, dimension, size, spacing, ...)      
+     \subparagraph{ImageRegion}
+Creates a generic ImageRegion (bbtk::any) from two vectors providing the index and size of the region. 
+The dimension D of the actual itk::ImageRegion created is the max of the sizes of Index and Size 
+(the smallest vector is padded by zeros)     
+     \subparagraph{ImageReader}
+Generic itk image reader                
+     \subparagraph{ImageWriter}
+Generic itk image writer      
+     \subparagraph{ImageSeriesReader}
+Generic itk image series reader.     
+     \subparagraph{ResampleImageFilter}
+Resamples an image
+\paragraph{itkvtk}
+It doesn't contain any end user intended box, only adaptors : to convert a generic itkImage to a vtkImageData, and vtkImageData* to a generic itkImage pointer 
+
+Sorry nothing is done, right now for meshes. 
+
+\paragraph{wxvtk}
+It contains two atomic black boxes, and some sophisticated complex black boxes :
+
+     \subparagraph{Viewer2D}
+     Receives a \textless vtkImageData* \textgreater (In), an Orientation(0:yz / 1:xz / 2:xy), and a initial slice number (Slice).
+     Returns a \textgreater vtkRenderer* \textgreater (Renderer)
+     
+     \subparagraph{Viewer3D}
+     Receives up to 5 Input Actors (\textless vtkProp3D* \textgreater), up to 5 Imput Observers (\textless vtkInteractorObserver* \textgreater), 
+     outputs an Interactor (\textless wxVTKRenderWindowInteractor* \textgreater) with which vtk widgets can interact, 
+     and a Renderer (\textless vtkRenderer* \textgreater) to which actors can be added.
+     Has also a boolean 'Stereo' option, to use Red-Blue filter.
+     
+     \subparagraph{Viewer3D}     
+ 
+
 % ==========================================
 \subsubsection{Pipeline processing}
 \label{bbi-more-on-pipeline-processing}
diff --git a/kernel/doc/bbtkWebSite/download.html b/kernel/doc/bbtkWebSite/download.html
index 0ef0c56..deb743e 100644
--- a/kernel/doc/bbtkWebSite/download.html
+++ b/kernel/doc/bbtkWebSite/download.html
@@ -68,7 +68,7 @@ with your public/private ssh key (Suggested program for
 windows is Putty)
    
   
  • Right -clic over the folder C:\Creatis and select "import CVS module" in the +click over the folder C:\Creatis and select "import CVS module" in the menu
  • Select the options :
  • @@ -84,7 +84,7 @@ menu - User name: The one used in email login
            -- Clic on find the list of modules

            - Select the "bbtk" moduleDemos
    Examples
    -
    + + +
    Documentation
    -
      - -
    -Users' -Guide (pdf)
    - Package Developers' Guide (pdf)
    - Developers' Guide (pdf)
    -Reference (pdf)
    -
    Doxygen doc + + +User's Guide + (pdf) +
    + + Package Developer's Guide +(pdf) +
    + + Developer's Guide + (pdf)
    + +Reference Manual(pdf)
    + + Doxygen doc +
    + + +
    Boxes

    -Alphabetical -list
    -List by -package
    -List by -category
    -List of -adaptors

    -
      -
    -
    - -
      -
    + +Alphabetical list
    +List by package
    +List by category
    +List of adaptors

    + +
    +
      diff --git a/kernel/doc/config.tex b/kernel/doc/config.tex index 920f965..a7d9f3c 100644 --- a/kernel/doc/config.tex +++ b/kernel/doc/config.tex @@ -105,6 +105,7 @@ \def\BBTK{{\xspace}The {\bf Black Box Toolkit} } \def\bbtk{{\xspace}$\texttt{bbtk}$ } \def\bbi{{\xspace}$\texttt{bbi}$ } +\def\bbStudio{{\xspace}$\texttt{bbStudio}$ } \def\bbfy{{\xspace}$\texttt{bbfy}$ } \def\bbdoc{{\xspace}$\texttt{bbdoc}$ } \def\bbCreatePackage{{\xspace}$\texttt{bbCreatePackage}$ } diff --git a/kernel/src/bbtkInterpreter.cxx b/kernel/src/bbtkInterpreter.cxx index 7d2eb54..2964c08 100644 --- a/kernel/src/bbtkInterpreter.cxx +++ b/kernel/src/bbtkInterpreter.cxx @@ -3,8 +3,8 @@ Program: bbtk Module: $RCSfile: bbtkInterpreter.cxx,v $ $ Language: C++ - Date: $Date: 2008/07/01 07:58:28 $ - Version: $Revision: 1.67 $ + Date: $Date: 2008/07/03 13:59:32 $ + Version: $Revision: 1.68 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -280,7 +280,8 @@ namespace bbtk info.argmax = 2; info.code = cMessage; info.syntax = "message "; - info.help = "Sets the level of the kind of messages to .\n If kind='All' then sets the level for all kinds. If no kind nor level is passed then prints info on available kinds of messages and their current level."; mCommandDict[info.keyword] = info; + info.help = "Sets the level of the kind of messages to .\n If kind='All' then sets the level for all kinds. If no kind nor level is passed then prints info on available kinds of messages and their current level."; + mCommandDict[info.keyword] = info; info.keyword = "include"; info.argmin = 1; diff --git a/packages/BoxCategories.txt b/packages/BoxCategories.txt index e792e0d..622abaf 100644 --- a/packages/BoxCategories.txt +++ b/packages/BoxCategories.txt @@ -1,6 +1,10 @@ === Here are the current categories === Those with a ? are submitted for approval ... +--> This list is now on + +http://www.creatis.insa-lyon.fr/mywiki/Informatique/bbtk + adaptor : Adaptor box application : Final application atomic box : System category. diff --git a/packages/itk/src/bbitkDICOMSeriesFileNames.xml b/packages/itk/src/bbitkDICOMSeriesFileNames.xml index 739bcdc..ab20a44 100644 --- a/packages/itk/src/bbitkDICOMSeriesFileNames.xml +++ b/packages/itk/src/bbitkDICOMSeriesFileNames.xml @@ -15,7 +15,6 @@ There must be one tag per file to include Here we include the standard header iostream.h -->
    itkDICOMSeriesFileNames.h
    -
    itkDICOMSeriesFileNames.h