]> Creatis software - bbtk.git/blobdiff - kernel/doc/bbtkUsersGuide/bbtkUsersGuide.tex
Some comments updated
[bbtk.git] / kernel / doc / bbtkUsersGuide / bbtkUsersGuide.tex
index 0ed6a912c39f5f8560323fffde1b41b094c370b8..9cd903ed9037eff38708619414bec320194895d5 100644 (file)
@@ -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 <command-name>},
@@ -544,15 +619,15 @@ 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}. 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 <user::Add3>
  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}