]> Creatis software - bbtk.git/blobdiff - kernel/doc/bbtkUsersGuide/bbtkUsersGuide.tex
*** empty log message ***
[bbtk.git] / kernel / doc / bbtkUsersGuide / bbtkUsersGuide.tex
index fb6e13161236760470746ba57c7ba194b4a66e70..322099ad2cc805dea1a82a1104fa8d6ade9889b8 100644 (file)
@@ -10,6 +10,9 @@
 \tableofcontents
 % ==========================================
 
+\listoftables
+
+\listoffigures
 
 % ==========================================
 %\section*{Abstract}
@@ -34,6 +37,14 @@ defines a {\bf black box} as
 \emph{``any component in a system in which only the input and output 
 characteristics are of interest, without regard to its internal mechanism 
 or structure''}. 
+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 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}.
 
 \BBTK provides a systematic framework 
 to encapsulate (or ``wrap'') any 
@@ -46,7 +57,7 @@ for all boxes. Hence one does not need to know which particular
 method allows, say, to set a particular input or 
 get a particular output of the box. 
 One can use a black box in a purely abstract way. 
-\item{\bf symbolic} means a particular 
+\item{\bf symbolic} means that a particular 
 input or output is referenced by a 'name', that is by a symbol 
 which identifies the input or output. 
 It also means that symbolic information (text!) is 
@@ -59,7 +70,7 @@ I let you think about this\dots)
 
 Of course, symbolic data attached to box can be 
 {\bf queried}: what are the inputs/outputs of the box ? 
-what are their type ? description ? etc.
+what are their type ? their description ? etc.
 This allows {\bf automatic documentation} of boxes. 
 
 The abstract definition of black boxes is the most basic 
@@ -82,13 +93,13 @@ which allows to manipulate packages and boxes very easily in symbolic way.
 \BBTK provides one: \bbi (the Black Box Interpreter). 
 \item {\bf Automatic documentation} of existing packages. 
 \texttt{html} documentation of packages is proposed by 
-the \bbdoc application.
+\bbi.
 \end{itemize}
 
 Finally, these different components allow {\bf efficient}:
 
 \begin{itemize}
-\item {\bf capitalization and reuse} of existing processings, 
+\item {\bf capitalization and reuse} of existing processing units, 
 including {\bf documentation} 
 \item {\bf testing, prototyping} in a very simple script language
 \item {\bf inter-operability} between atomic processings which 
@@ -100,32 +111,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. 
-\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 creates a directory on disk which contains the basic files to start the development of a new black box package.
-\end{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. 
+    \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}
-
 The general architecture of \BBTK 
 is shown in figure \ref{bb-architecture}.
 
@@ -140,19 +163,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{bb0}) 
 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.
+
 
 % ==========================================
 % ==========================================
@@ -161,16 +187,165 @@ 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 \bbStudio 
+or clicking on its icon or its menu entry.
+At start, \bbStudio opens with the 'Help' tab selected.
+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}
+
+The 'Help' tab of \bbStudio is used to browse the html help of \BBTK.
+All the entries of the starting page 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}} (see table : \ref{bbi-list_of_packages})
+        \item {\bf\emph{By category}} (see table :\ref{categories})
+        \item {\bf\emph{Adaptors}} Used internaly to perform type conversions (not end user intended)     
+      \end{itemize}
+ \end{itemize}
+
+
 % ==========================================
+\begin{table}[!ht]
+\caption{\label{bbi-list_of_packages} List of bbtk supplied packages.}
+\small
+\begin{tabular}{|lp{10cm}|}
+\hline
+Package         & What it's used for \\ \hline
+\texttt{std}    & : the 'standard' package including basic useful boxes \\ \hline 
+\texttt{wx}     & : basic graphical interface elements (widgets: sliders, buttons, etc. based on the \texttt{wxWidgets} library \\ \hline 
+\texttt{itk}    & : the basic image processing package, based on the \texttt{itk} library. (without description)\\ \hline 
+\texttt{vtk}    & : Prints help on the package \texttt{package-name} and its boxes (with brief description). The package must have been previously loaded\\ \hline 
+\texttt{wxvtk}  & : widget boxes based on the \texttt{vtk} library.\\ \hline 
+\texttt{itkvtk} & : boxes to convert \texttt{itk} structures into \texttt{vtk} structures and conversally.\\ \hline 
 
+\end{tabular}
+\end{table}
 % ==========================================
-%\subsection{Structure of this part}
+
+
+
+
 % ==========================================
+\begin{table}[!ht]
+\caption{\label{categories} \texttt{Black Box} categories}
+\small
+\begin{tabular}{|lp{10cm}|}
+\hline
+ \texttt{Category 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} \texttt{Black Box} kinds}
+\small
+\begin{tabular}{|ll|}
+\hline
+\texttt{Kind name}                & : Meaning                         \\ \hline \\ \hline
+\texttt{ADAPTOR}                  & : Adaptor Box                     \\ \hline
+\texttt{DEFAULT\_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}
+
+
 
-Using the black box interpreter is very simple. 
-Everything is done with only a few commands.
+% ==========================================
+% ==========================================
+% ==========================================
+% ==========================================
+% ==========================================
+% ==========================================
+\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{figure}[!ht]
+\caption{\label{lowertoolbar}The lower tool bar}
+\begin{center}
+\includegraphics[width=0.7\textwidth]{lowertoolbar.png}
+\end{center}
+\end{figure}
+
+
+ \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{save}}: 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}
+
+
+The script language is very simple. 
+Everything is done with only a very few commands (See table \ref{bbi-reference-box}).
 The philosophy of this part is also very simple: 
 it introduces the \bbi commands using examples, 
 starting with the most simple commands.  
@@ -205,17 +380,30 @@ 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 message and a prompt:
-\begin{verbatim}
-$$ bbi
-BBI (Black Box Interpreter) - bbtk "1.0.0" - (c) Creatis 2007
->
-\end{verbatim}
+You get a window which looks like the one in figure 
+\ref{bbi-fig-bbi-gui} 
+(the exact appearance of \bbi is system and \bbtk version dependent)
+\footnote{If you compiled \bbtk without \wx then \bbi does not have a 
+graphical interface but a simple prompt}.
 
-If you type:
+\begin{figure}[!ht]
+\caption{\label{bbi-fig-bbi-gui}The black box interpreter interface}
+\begin{center}
+\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 \textgreater) :
 \begin{verbatim}
 > help 
 \end{verbatim}
@@ -224,21 +412,28 @@ you get the list of the commands of the interpreter:
 \begin{verbatim}
 Available commands:
  author
+ category
  config
  connect
+ debug
  define
  delete
  description
  endefine
+ endpackage
  exec
  graph
  help
  include
+ index
  input
+ kind
  load
  message
  new
+ newgui
  output
+ package
  print
  quit
  reset
@@ -313,6 +508,7 @@ If you type \texttt{'help workspace'}, you get:
 Complex Black Box <user::workspace>
  User's workspace
  By: bbi (internal)
+ Category(s) : complex box;
  * No inputs
  * No outputs
  * No boxes
@@ -333,7 +529,7 @@ which contains basic useful black boxes.
 
 To load it, type:
 \begin{verbatim}
-> load std
+> include std
 \end{verbatim}
 
 Then if you type:
@@ -345,14 +541,19 @@ you get something like:
 \begin{verbatim}
 std
   Add 
-  ... 
+  ConcatStrings          
+  Configuration          
+  Div   
+  ...
+  StringRelay            
+  StringSelect    
 user
   workspace
 > 
 \end{verbatim}
 
 Now \bbi knows the package \texttt{std} and the black boxes it provides,
-such as the \texttt{'Add'} box. Remark that the 
+such as the \texttt{'Add'} box, the  \texttt{'ConcatStrings'}. Remark that the 
 content of \texttt{std} may vary from one version to another 
 as new black boxes might be added to it. 
 If you type:  
@@ -363,14 +564,17 @@ If you type:
 You get:
 \begin{verbatim}
 Black Box <std::Add>
- Adds its inputs
- By: laurent.guigues@creatis.insa-lyon.fr
- * Inputs: 
-   'In1'         <double>: First number to add
-   'In2'         <double>: Second number to add
-   'ProcessMode' <int>   : Set the process mode of the box (0=Pipeline | 1=Always | 2=Reactive)
- * Outputs: 
-   'Out'          <double>: Result
+  Adds its inputs
+  By : laurent.guigues@creatis.insa-lyon.fr
+  Categories : atomic box;math;
+  * Inputs : 
+     'BoxExecute'     <bbtk::Void> [signal] : Any signal received by this input executes the box
+     'BoxProcessMode' <String>     []       : Sets the processing mode of the box (Pipeline | Always | Reactive)
+     'In1'            <Double>     []       : First number to add
+     'In2'            <Double>     []       : Second number to add
+  * Outputs : 
+     'BoxChange'      <bbtk::Void> [signal] : Signals modifications of the box
+     'Out'            <Double>     []       : Result
 \end{verbatim}
 
 Like previously, 
@@ -379,11 +583,12 @@ means that the box \texttt{Add}
 belongs to the \texttt{std} package. 
 Then comes a description 
 (the one which was provided by the author of the box), 
-the author(s) of the box (usually e-mail adress(es)). 
+the author(s) of the box (usually e-mail adress(es)) and 
+the categories to which the box belong. 
 Finally comes the lists of inputs and outputs of the box.
 For each input or output, \bbi provides 
 its \emph{name} (between quotes, e.g. \texttt{'ProcessMode'}), 
-its \emph{type} (between \texttt{<>}, e.g. \texttt{<int>})
+its \emph{type} (between \texttt{<>}, e.g. \texttt{<Int>})
 and a description.    
 Remark that the box \texttt{Add} is not a 'complex' black box 
 but an 'atomic' box, hence its help does not 
@@ -397,13 +602,13 @@ the command \texttt{new}:
 
 The \texttt{'a'} at the end is the \emph{name} of the instance, 
 which will be used to reference it later. 
-It is important to make the difference between box \emph{types
-and \emph{instances} of box types
-The \texttt{Add} box of the package \texttt{std} is in fact 
-a \emph{type} of box, like \texttt{int} is a type of data 
+It is important to distinguish a box \emph{type
+and an \emph{instance} of a box type
+The \texttt{Add} box of the package \texttt{std} is actually 
+a \emph{box type} , like \texttt{int} is a data type 
 in \texttt{C} langage. The \texttt{new} command allows to create 
 an instance of a box type, exactly like \texttt{int i;} in 
-a \texttt{C} code declares a variable of type \texttt{int} whose 
+a \texttt{C} code, it declares a variable of type \texttt{int} whose 
 name is \texttt{i}. 
 Of course, like in \texttt{C} Language, you can declare multiple boxes of the 
 same type in \bbi. 
@@ -418,14 +623,15 @@ you get:
 Complex Black Box <user::workspace>
  User's workspace
  By: bbi (internal)
+ Category(s) : complex box;
  * No inputs
  * No outputs
  * Boxes: 
     'a' <std::Add>
 \end{verbatim}
 
-which means that \bbi's workspace now contains a black box 
-of type \texttt{std::Add} and name \texttt{a}.
+which means that \bbi workspace now contains a black box named \texttt{a},
+of type \texttt{std::Add}.
 
 Now look back at the help on \texttt{Add} boxes: 
 you can see that this type of box has two inputs, 
@@ -460,16 +666,18 @@ To process this special substrings, \bbi does:
 \item Converts the output of the box to a string if possible 
 (see below)
 \item Substitutes the result in the string to print
+\item postpone an implicit 'new line' character to the string
 \end{enumerate}
 
+\paragraph
 Box processing is needed if:
 \begin{itemize}
 \item at least input has changed since last processing or
-\item the input \texttt{'ProcessMode'} of the box is set to 
-\texttt{1}, which forces box reprocessing. 
+\item the input \texttt{'BoxProcessMode'} of the box is set to 
+\texttt{'Always'}, which forces box reprocessing. 
 \end{itemize}
 
-Note that all boxes have the input \texttt{'ProcessMode'}. 
+Note that all boxes have the input \texttt{'BoxProcessMode'}. 
 
 Another way to process the box \texttt{a} is to issue the command:
 \begin{verbatim}
@@ -494,7 +702,7 @@ Good bye !
 \paragraph{Summary}
 %\hrule
 \begin{itemize}
-\item The \texttt{load} command allows to load a package.
+\item The \texttt{include} command allows to load a package, and the complex black boxes that come with it..
 \item \texttt{help} gives help on:
 \begin{itemize} 
 \item Available commands if you just type \texttt{help}.
@@ -504,16 +712,29 @@ Good bye !
 \item A particular black box type (with full description) if you type \texttt{help <box-type-name>}. 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}. 
-\item \texttt{exec} runs the process of a box if needed. 
-\item \texttt{quit} quits \bbi.
+\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.
 \end{itemize}
 \hrule
+
+\paragraph{Note :}
+A more 'modern' way to proceed is to run \texttt{bbStudio}, drag and drop the  \texttt{Command} bookmark to the lower \texttt{Welcome to bbStudio!} bar.
+Wou'll get something like in figure \ref{bbCommandPlusHelp} :
+
+\begin{figure}[!ht]
+\caption{\label{bbCommandPlusHelp}
+An other way to run the command interpreter}
+\begin{center}
+\includegraphics[width=0.5\textwidth]{bbCommandPlusHelp.png}
+\end{center}
+\end{figure}
 % ==========================================
 
 % ==========================================
@@ -531,9 +752,7 @@ more information on pipeline processing.
 
 First start \bbi and load the package \texttt{std}:
 \begin{verbatim}
-$$ bbi
-BBI (Black Box Interpreter) - bbtk "1.0.0" - (c) Creatis 2007
-> load std
+> include std
 \end{verbatim}
 
 Assume you want to compute $1+2+3$. You can do it by 
@@ -548,6 +767,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
@@ -557,12 +777,17 @@ The \bbi instructions to create and execute this pipeline are:
 > set a.In2 2
 > set b.In2 3
 > print $b.Out$
+\end{verbatim}
+
+You will see the (very expected) result :
+\begin{verbatim}
 6
 \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 
+prints \texttt{b} black boxe output (the pipeline is executed before printing, because the interpretor 'knows' he box  \texttt{b}, 
+whose output is requested, is not up to date.
  
 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 
@@ -574,10 +799,57 @@ This pipeline mechanism can recurse into arbitrary long
 chains of boxes (see \ref{bbi-more-on-pipeline-processing} 
 for details).
 
+
+Lets' consider an other, more image oriented, example :
+
+\begin{verbatim}
+> include vtk
+> include wx
+> include itk
+> include wxvtk
+
+> new FileSelector fileDialog
+> new ImageReader  reader 
+> new Slider       slider
+> new Viewer2D     viewer
+
+> connect fileDialog.Out   reader.In 
+> connect reader.Out       viewer.In
+> connect slider.Out       viewer.Slice
+> connect slider.BoxChange viewer.BoxExecute
+
+> exec viewer
+\end{verbatim}
+
+Some explainations : the \texttt{include} instructions load the necessary packages. \\
+
+\texttt{new FileSelector} will pop a File Selector, at run time, that will out the user chosen file name. \\
+\texttt{new Slider} will pop a Slider, at run time, that will out an integer, used later as a slice number.\\ 
+\texttt{new ImageReader} will read any itk readable file, whose name is passed as a std::string, and return a itk::ImagePointer.
+\texttt{new Viewer2D} display a plane, whose number id specified by an integer.\\
+\\
+\texttt{connect fileDialog.Out   reader.In} plugs the output of the File Selector (a std::string) to the input of the reader (a std::string, too).\\
+\texttt{connect reader.Out       viewer.In} plugs the output of the reader (an itk::ImagePointer) to the input of the Viewer (a vtkImageData *)\\
+\texttt{connect slider.Out       viewer.Slice} plugs the output of the slider (an int) to an other output (named Slide) of the viewer.\\
+\texttt{connect slider.BoxChange viewer.BoxExecute} says the viewer it must re process itself any time the slider is modified.\\
+\\
+\texttt{exec viewer} processes the viewer.
+
+
+This would correspond to the graph in figure \ref{bbi-simplegraph}
+
+
+\begin{figure}[!ht]
+\caption{\label{bbi-simplegraph}(Very) simple Graph of a (very) simple pipeline}
+\begin{center}
+\includegraphics[width=0.8\textwidth]{bbi-simplegraph.png}
+\end{center}
+\end{figure}
+   
 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 
@@ -779,6 +1051,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}
@@ -807,11 +1084,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
@@ -839,7 +1117,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 <user::Add3>
  adds 3 doubles
@@ -865,7 +1143,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
@@ -885,19 +1163,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
 % ==========================================
 
@@ -1039,6 +1333,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 
@@ -1049,7 +1348,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}
 
@@ -1060,29 +1359,33 @@ the \texttt{print} command.
 
 Type \texttt{help wx}, you get something like:
 \begin{verbatim}
-Package wx v1.0.0- eduardo.davila/laurent.guigues@creatis.insa-lyon.fr
- Basic graphical interface elements (slider, button ...) based on wxWidgets
- Black boxes: 
-   Button      : Button that gives a string 
-   FileDialog  : FileDialog widget (wxFileDialog)
-   RadioButton : RadioButton group widget (wxRadioButton)  0-9 entries
-   Sizer       : Sizer widget (wxSizer)
-   Slider      : Slider widget (wxSlider)
-   Split       : Split widget (wxSplitterWindow)
-   StaticText  : wxWidget Static text
-   TextCtrl    : TextCtrl widget (wxTextCtrl)
+ 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 
+There are two kinds of widgets: ``terminal'' widgets and ``container'' 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 
@@ -1102,9 +1405,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
@@ -1112,50 +1415,87 @@ 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}
+% ==========================================
 
-TO DO: 
-\begin{enumerate}
-\item Make a tour of ``complex'' widgets of wxvtk 
-\item Explain the role of ProcessMode to update widgets
-\item Explain the creation of complex widgets (containers, contained...)
-\item Explain the ``control'' mechanism in bbi (switch exec commands, e.g. Button)
-\end{enumerate}
+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 \texttt{Widget}\texttt{\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() calls Process only 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\emph{Widget}}\texttt{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} 
 
 
 % ==========================================
@@ -1168,14 +1508,391 @@ TO DO:
 \label{bbi-more-on-packages}
 % ==========================================
 
+There are various others user-intended packages :
+\begin{itemize}
+\item{vtk} \\
+It contains some vtk based image processing filters :
+%   \begin{enumerate}
+
+     \paragraph{AppendPolyData}
+     Appends one of more polygonal datasets into a single polygonal dataset 
+
+     \paragraph{ConeSource}
+     Creates a Cone 
+
+     \paragraph{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.\\
+     Receives : \\
+     - In : an image (vtkImageData*)\\
+     - Diffusion : Difference threshold that stops the diffusion\\
+     Outputs : \\
+     - Out : the isosurface mesh (vtkPolyData*)
+     
+     \paragraph{ImageCharacteristics}
+     Exports objet sizes, and Spacings
+     
+     \paragraph{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) \\
+     Receives : \\
+     - In : an image (vtkImageData*)\\
+     - DilateValue : The dilatation value\\
+     - ErodeValue : The erosion value\\
+     Outputs : \\
+     - Out : the isosurface mesh (vtkPolyData*)     
+     
+     \paragraph{ImageGaussianSmooth}
+     Performs a gaussian convolution of the input image\\
+     Receives : \\
+     - In : an image (vtkImageData*)\\
+     - StdDevX : Standard deviation in X direction\\
+     - StdDevY : Standard deviation in Y direction\\
+     Outputs : \\
+     - Out : the isosurface mesh (vtkPolyData*)       
+     
+     \paragraph{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)
+     Receives : \\
+     - In : an image (vtkImageData*)\\
+     Outputs : \\     
+     - PlaneX : the image plane in X direction (vtkImagePlaneWidget*)\\
+     - PlaneY : the image plane in Y direction (vtkImagePlaneWidget*)\\
+     - PlaneY : the image plane in Z direction (vtkImagePlaneWidget*)\\
+     
+          Outputs : \\
+     - Out : the isosurface mesh (vtkPolyData*)  
+           
+     \paragraph{IsoSurfaceExtractor}
+     Extracts an iso-surface of a 3D image and creates a vtkProp3D object to insert into a 3D scene (e.g. a Viewer3D)
+     Receives : \\
+     - In : an image (vtkImageData*)\\
+     - Isovalue : the isosurface value (double)\\
+     - Colour : Surface colour (vector of 3 doubles)
+     Outputs : \\
+     - Out : the isosurface (vtkProp3D**)
+     
+     \paragraph{MarchingCubes}
+     Extracts an iso-surface of an image using the marching cubes algorithm (bbfication of vtkMarchingCubes)\\
+     Receives : \\
+     - In : an image (vtkImageData*)\\
+     - Value : the isosurface value (double)\\
+     Outputs : \\
+     - Out : the isosurface mesh (vtkPolyData*)
+     
+     \paragraph{MIPCreator}     
+     Creates a Maximum Intensity Projection (MIP) view of a 3D image.\\
+     Receives : \\
+     - In : an image (vtkImageData*)\\
+     - Scale : the Gray scale scaling (float) \\
+     - Shift : the Gray scale shift (float) \\    
+     Ouputs : \\
+     - Out : The MIP object (vtkProp3D*) to be plugged into a 3D Viever
+
+     \paragraph{MetaImageReader}
+     Reads .mhd / .mhd image formats (bbfication of vtkMetaImageReader) \\
+     Receives : \\
+     - In : the name of the file to be read (std::string)
+     Outputs :
+     - Out : The image (vtkImageData*)     
+     
+     \paragraph{SegmentationConnectivity}
+     Segmentation with min max threshold and connectivity  \\  
+     Receives : \\
+     - In : an image (vtkImageData*)\\
+     - PositionXYZ : initial position (std::vector<int>) \\
+     - ThresholdMinMax : min, max threshold values (std::vector<int>) \\
+     Outputs : \\
+     - Out : The image (vtkImageData*)       
+          
+     \paragraph{SphereSource}
+     Creates a Sphere      
+%   \end{enumerate}
+
+\item{itk} \\
+It contains some itk based image processing filters :
+     \paragraph{BinaryThresholdImageFilter}
+     Binarizes an image by thresholding (generic bbification of itk::BinaryThresholdImageFilter) 
+
+     \paragraph{DICOMSeriesFileNames}
+     Reads a series from a DICOM directory as a 3D itk image     
+
+     \paragraph{ExtractImageFilter}
+     Decrease the image size by cropping the image to the selected region bounds (bbification of itk::ExtractImageFilter)     
+
+     \paragraph{ImageProperties}
+     Outputs different properties of an image (type, dimension, size, spacing, ...)      
+
+     \paragraph{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)     
+
+     \paragraph{ImageReader}
+Generic itk image reader
+
+     \paragraph{ImageWriter}
+Generic itk image writer
+
+     \paragraph{ImageSeriesReader}
+Generic itk image series reader.
+
+     \paragraph{ResampleImageFilter}
+Resamples an image
+
+\item{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. 
+
+\item{wxvtk} \\
+
+It contains two atomic black boxes.
+
+     \paragraph{Viewer2D} 
+     Receives : \\
+     - a \textless vtkImageData* \textgreater (In),\\
+     - an Orientation(0:yz / 1:xz / 2:xy),\\
+     - an initial slice number (Slice).\\
+     Outputs :\\
+     - a \textless vtkRenderer* \textgreater (Renderer)
+     
+     \paragraph{Viewer3D} 
+     Receives :\\
+     - up to 5 Input Actors (\textless vtkProp3D* \textgreater),\\
+     - up to 5 Input Observers (\textless vtkInteractorObserver* \textgreater), \\
+     - a boolean 'Stereo' option, to use Red-Blue filter     
+     Outputs :\\
+     - an Interactor (\textless wxVTKRenderWindowInteractor* \textgreater) with which vtk widgets can interact, \\
+     - a Renderer (\textless vtkRenderer* \textgreater) to which actors can be added.
+
+It contains too some sophisticated complex black boxes :
+     \paragraph{IsoSurfaceWithControls} 
+     Image iso-surface extractor (vtk::IsoSurfaceExtractor) with associated control panel (isovalue, opacity and colour)\\
+     Receives :\\
+     - an initial isovalue (Isovalue)
+     - an initial opacity  (Opacity)
+     - an initial colour   (Colour)
+     Outputs :\\
+     \textless vtkProp3D* \textgreater (In)\\
+      
+     \paragraph{MIPWithControls}     
+     Maximum Intensity Projection (MIP) creator (vtk::MIPCreator) with associated control panel (shift and scale) \\
+    Receives :\\
+     - an initial scale (Scale)
+     - an initial shift  (Shift) 
+     Outputs :\\
+     \textless vtkProp3D* \textgreater (In)\\
+         
+\item{wx} \\
+
+Some boxes are the bbfication of usefull xwWidgets, some other ones are more
+sophisticated.
+
+    \paragraph{ColourSelector} Colour Selector dialog (bbfication of wxColourSelector) \\
+                       %\begin{verbatim}
+         \texttt{Out} : Colour choosen in format '[0,1] [0,1] [0,1]' 
+                       %\end{verbatim}
+
+    \paragraph{ColourSelectorButton} A button which displays a colour picker dialog when clicked \\
+                       %\begin{verbatim}
+          \texttt{In} :Initial colour \\
+          \texttt{Out} : Colour choosen in format '[0,1] [0,1] [0,1]'
+                       %\end{verbatim} \\
+
+    \paragraph{CommandButton} Button which executes bbi commands \\
+                       %\begin{verbatim}
+          \texttt{In} : Commands to be executed separated by commas (;). Each single quote (') is replaced by a double quote ("). \\
+          \texttt{Label} : Label of the button  \\
+          \texttt{Widget} : Output widget \\
+                       %\end{verbatim}
+
+    \paragraph{DirectorySelector} Pops up a directory selection dialog (wxDirDialog)\\
+                       %\begin{verbatim}
+          \texttt{DefaultDir} : The default directory\\
+          \texttt{Message} : Message to show on the dialog \\
+          \texttt{Title} : Title of the dialog \\
+          \texttt{Out} : The directory selected by the user\\
+                       %\end{verbatim}
+    \paragraph{FileSelector} Pops up a file selection dialog for reading or saving (wxFileDialog)\\
+                       %\begin{verbatim}
+          \texttt{DefaultDir} : The default directory \\
+          \texttt{DefaultFile} : The default filename \\
+          \texttt{Message} : Message to show on the dialog \\
+          \texttt{OpenSave} : Open for an open dialog (default) / Save for a save dialog\\ 
+          \texttt{Title} : Title of the dialog \\
+          \texttt{Wildcard} : A wildcard, such as "*.*" or "BMP files (*.bmp)|*.bmp|GIF files (*.gif)|*.gif" \\
+          \texttt{Out} : The file selected by the user \\
+                       %\end{verbatim}
+
+    \paragraph{InputText} A zone in which the user can enter a text (wxTextCtrl)\\
+                       %\begin{verbatim}
+          \texttt{In} : Initial text (default '')\\ 
+          \texttt{Title} : Title of the input zone (default '')\\ 
+          \texttt{WinTitle} : Title of the window (*)\\
+          \texttt{Out} :Current text\\
+                       %\end{verbatim}
+
+    \paragraph{LayoutLine} LayoutLine widget (wxBoxSizer)\\
+                       %\begin{verbatim}
+          \texttt{Orientation} Orientation (default V), 0=H=HORIZONTAL , 1=V=VERTICAL \\
+          \texttt{Widget}1 widget 1 \\
+          \texttt{Widget2} widget 2 \\
+          \texttt{Widget3} widget 3 \\
+          \texttt{Widget4} widget 4 \\
+          \texttt{Widget5} widget 5 \\
+          \texttt{Widget6} widget 6 \\
+          \texttt{Widget7} widget 7 \\
+          \texttt{Widget8} widget 8 \\
+          \texttt{Widget9} widget 9\\
+          %\end{verbatim}    
+    
+    \paragraph{LayoutSplit} Widget which splits a window in two fixed size parts (wxSplitterWindow)\\ 
+                       %\begin{verbatim}
+          \texttt{Orientation} : Orientation (default H), 0=H=HORIZONTAL , 1=V=VERTICAL\\ 
+          \texttt{Proportion} : Proportion (in percent) of the first children in the window\\ 
+          \texttt{Widget1} : Upper or left widget\\ 
+          \texttt{Widget2} : Lower or right widget\\
+                       %\end{verbatim}
+
+    \paragraph{LayoutTDown} Creates a 'T like' complex container : Down {UpLeft, UpRight} \\
+                       %\begin{verbatim}
+          \texttt{Widget1} : UpLeft container\\
+          \texttt{Widget2} : UpRight container\\ 
+          \texttt{Widget3} : Down container\\
+                        \begin{verbatim}
+//                       ---------------
+//                       |      |      |
+//                       |  W1  |  W2  |
+//                       |-------------|
+//                       |             |
+//                       |     W3      |
+//                       ---------------
+                       \end{verbatim}
+   
+    \paragraph{LayoutTLeft} Creates a 'T like' complex container :  Left {RigthUp, RightDown}\\
+                       %\begin{verbatim}
+           \texttt{input}  Widget1 : "UpLeft container"\\ 
+           \texttt{input}  Widget2 : "UpRight container"\\  
+           \texttt{input}  Wigdet3 : "Down container"\\ 
+                        \begin{verbatim} 
+//                       ---------------
+//                       |      |  W2  |
+//                       |  W1  |      |
+//                       |      |------|
+//                       |      |  W3  |
+//                       |      |      |
+//                       ---------------   
+                       \end{verbatim}
+
+    \paragraph{LayoutTRight} Creates a 'T like' complex container : Right {LeftUp, LeftDown}\\
+                       %\begin{verbatim}
+          \texttt{input} Widget1 currentBox.Widget1 "Up container"\\
+          \texttt{input} Widget2 down.Widget1       "DownLeft container"\\ 
+          \texttt{input} Widget3 down.Widget2       "DownRight container"\\    
+                        \begin{verbatim}  
+//                       ---------------
+//                       |      |      |
+//                       |  W1  |      |
+//                       |------|  W2  |
+//                       |  W3  |      |
+//                       |      |      |
+//                       ---------------
+                       \end{verbatim}
+  
+    \paragraph{LayoutTUp} Creates a 'T like' complex container : Up {DownLeft, DownRight} as w1{w2,w3}\\ 
+                       \begin{verbatim} 
+         \texttt{ input} Widget1 currentBox.Widget1 "Up"\\
+          \texttt{input} Widget2 down.Widget1       "DownLeft"\\ 
+          \texttt{input} Widget3 down.Widget2       "DownRight"\\
+     
+//                       ----------------
+//                       |    W1        |
+//                       |              |
+//                       |------|-------|
+//                       | W3   |  W2   |
+//                       |      |       |
+//                       ----------------
+               \end{verbatim}
+                         
+    \paragraph{LayoutTab} LayoutTab widget (wxNotebook)\\
+                       %\begin{verbatim}
+          \texttt{Orientation} Orientation (default T), 0=T=TOP , 1=R=RIGHT , 2=B=BOTTON , 3=L=LEFT \\
+          \texttt{Widget1} widget 1 \\
+          \texttt{Widget2} widget 2 \\
+          \texttt{Widget3} widget 3 \\
+          \texttt{Widget4} widget 4 \\
+          \texttt{Widget5} widget 5 \\
+          \texttt{Widget6} widget 6 \\
+          \texttt{Widget7} widget 7 \\
+          \texttt{Widget8} widget 8 \\
+          \texttt{Widget9} widget 9 \\   
+%\end{verbatim}
+   
+    \paragraph{OutputText}             Text zone to be inserted into a window (wxStaticText)\\
+                       %\begin{verbatim}
+          \texttt{In} Text \\
+          \texttt{Title} Title prepended to the text\\   
+                       %\end{verbatim}
+                          
+    \paragraph{RadioButton}            RadioButton group widget 0-9 entries\\
+                       %\begin{verbatim}
+          \texttt{In} Set initial item \\
+          \texttt{In0} option 0\\ 
+          \texttt{In1} option 1\\ 
+          \texttt{In2} option 2\\ 
+          \texttt{In3} option 3\\ 
+          \texttt{In4} option 4\\ 
+          \texttt{In5} option 5 \\
+          \texttt{In6} option 6 \\
+          \texttt{In7} option 7 \\
+          \texttt{In8} option 8 \\
+          \texttt{In9} option 9 \\
+          \texttt{Title} Title of the widget (default '')\\ 
+          \texttt{Out} Number of the selected Item 
+                       %\end{verbatim}
+                          
+    \paragraph{Slider}                 Slider widget (wxSlider)\\
+                       %\begin{verbatim}
+          \texttt{ChangeResolution} Enables the user to change the slider resolution (default FALSE) \\
+          \texttt{In} Initial slider position(default 0) \\
+          \texttt{Label} Show slider labels ? (default FALSE) \\
+          \texttt{Max} Maximum value of the slider (default 500)\\ 
+          \texttt{Min} Minimum value of the slider (default 0)\\ 
+          \texttt{Orientation} Orientation : (default H) 0=H=HORIZONTAL, 1=V=VERTICAL\\ 
+          \texttt{ReactiveOnTrack} Slider sends info when track moves (default 0 = no)\\ 
+          \texttt{Title} Title shown above the slider (default '')\\     
+                       %\end{verbatim}
+\end{itemize}
 % ==========================================
 \subsubsection{Pipeline processing}
 \label{bbi-more-on-pipeline-processing}
 % ==========================================
-
+\begin{itemize}
+\item the ``control'' mechanism in bbi (switch exec commands, e.g. Button)
+\item the role of ProcessMode to update widgets.
+\end{itemize}
 % ==========================================
 \subsubsection{Complex black boxes}
 \label{bbi-more-on-complex-black-boxes}
+Creation of complex widgets (containers, contained...)
 
 %\subsubsection{Advanced issues}
 %\paragraph{Reducing the number of inputs of a box}
@@ -1284,6 +2001,10 @@ Executes the box named \texttt{box-name}.
 If needed the boxes 
 connected to its inputs 
 are also processed recursively (pipeline processing).\\ \hline 
+\texttt{exec} & \texttt{freeze} & 
+ allows to block execution commands while keeping definition commands active.\\ \hline 
+\texttt{exec} & \texttt{unfreeze} & 
+ turns back to 'normal' mode.\\ \hline 
 \end{tabular}
 \end{table}
 % ==========================================
@@ -1330,6 +2051,15 @@ exactly like if you were typing its content at the place were the
 \texttt{load} & \texttt{<package-name>} & 
 Loads the package \texttt{package-name}\\ \hline 
 
+\texttt{include} & \texttt{<package-name>} & 
+Loads the package \texttt{package-name} and includes all the complex black boxes that comes with it \\ \hline 
+
+\texttt{kind} & \texttt{<box kind>} & 
+Specifies the \texttt{kind} of the complex black boxes you are describing \\ \hline 
+
+
+
+
 \texttt{unload} & \texttt{<package-name>}& 
 Unloads the package \texttt{package-name}. 
 The package must have been previously loaded. 
@@ -1374,7 +2104,6 @@ Starts the definition of a complex black box of type
 \texttt{endefine} & - & 
 Ends the definition of a complex black box type\\ \hline 
 
-
 \texttt{author} & \texttt{<string>} & 
 Sets the author(s) of the complex black box currently being defined \\ \hline 
 
@@ -1382,18 +2111,17 @@ Sets the author(s) of the complex black box currently being defined \\ \hline
 Sets the description of the complex black box currently being defined 
 \\ \hline 
 
-
 \texttt{input} & \texttt{<name>} \texttt{<box.input>} \texttt{<help>} & 
 Defines a new input for the current complex black box, 
 named \texttt{name}. 
 It is defined as corresponding to 
-the input \texttt{input} of the box \texttt{box}. 
+the input \texttt{input} of the box \texttt{box}.
 \texttt{<help>} is the help string for the new input.
 The box \texttt{box} must already have been created in the complex box 
 and of course have an input named \texttt{input}.
 \\ \hline 
 
-
 \texttt{output} & \texttt{<name>} \texttt{<box.output>} \texttt{<help>} & 
 Defines a new output for the current complex black box, 
 named \texttt{name}.