]> Creatis software - bbtk.git/commitdiff
*** empty log message *** v0.8.0
authorguigues <guigues>
Tue, 21 Oct 2008 09:40:34 +0000 (09:40 +0000)
committerguigues <guigues>
Tue, 21 Oct 2008 09:40:34 +0000 (09:40 +0000)
kernel/doc/bbtkPackageDevelopersGuide/bbtkPackageDevelopersGuide.tex

index 1dd8180e5efcbde326b9bda009696eef0b542b4a..4b4e20da2bfde7655113970d7200360d7453740f 100644 (file)
@@ -16,7 +16,7 @@
 
 This guide describes how to 
 create new \bbtk packages and black boxes. 
-How to use them is described in \bbtk Users's guide. 
+How to use them is described in \bbtk Users' guide. 
 
 Any black box must be included in a \bbtk package, 
 that is in a particular shared library which can be loaded 
@@ -96,7 +96,7 @@ You must also provide the \texttt{author} list
 and a \texttt{description} which will be used for your package documentation.
 
 After running \bbCreatePackage or clicking 'Run' in \bbStudio interface 
-you should get file structure like this (Linux users can verify it with the \texttt{tree} command):
+you should get file structure like this (Linux users can verify it with the \texttt{tree} command):
 \begin{verbatim}
     NEW_PACKAGE
     |-- CMakeLists.txt
@@ -133,17 +133,18 @@ You can then :
  
   Please use the convention : If the name of your package is Pack and the name of your box is Box then name the source files bbPackBox.\{h;cxx;xml\}.
 
-\item Put your script-defined boxes in 'bbs/boxes'. 
+\item Put your script-defined boxes (complex boxes) in 'bbs/boxes'. 
 
-  Plase use the convention : If the name of your box is 'Box' then call the file 'bbBox.bbs' to let other know that the script defines a black box type.
+  Please use the convention : If the name of your box is 'Box' then call the file 'bbBox.bbs' to let others know that the script defines a complex black box type.
 
 \item Put your script-defined applications in 'bbs/appli'. 
 
   Please use the convention : Do not prepend 'bb' to the files.
 
 \item Put your data in 'data'. 
-Any data put there will be installed and accessible in scripts as the package data path is known 
-(see the box \texttt{std::PrependPackageDataPath})
+Any data put there will be installed and accessible in your scripts : 
+the package data path is provided by the box 
+\texttt{std::PrependPackageDataPath}.
 
 \item You can customize the header of your package html doc by editing the file 'doc/bbdoc/header.html.in'. You must put html code in this file (or edit it with an html editor). You can include images or links to other html pages. The images and pages must be put in the folder 'doc/bbdoc' and will be properly installed. The same way, you can link to these images or pages in your boxes descriptions without giving any path. If you create subdirs for your material then you have to install the materials yourself by editing the CMakeLists.txt and links must use paths relative to 'doc/bbdoc'.
 
@@ -387,14 +388,14 @@ translated in \CPP by the \bbfy application during build (recommanded).
 \subsubsection{From which \bbtk class inherit ?}
 % ==========================================
 
-Apart from this choice of the description langage to use, 
+Apart from the choice of the description langage to use, 
 there is an important choice to do concerning the implementation of the box. 
 In \CPP, a black box is nothing but a class which has the standard 
 interface of all black boxes : what's its name ? inputs ? outputs ? and so on. 
 
 The abstract description of this interface is done in the class 
 \texttt{bbtk::BlackBox} of the \bbtk library 
-and is implemented in its child classes : 
+and is implemented in its children classes : 
 \texttt{bbtk::AtomicBlackBox} and \texttt{bbtk::WxBlackBox} 
 \footnote{all the classes of the \bbtk library are in a \emph{namespace} 
 called \texttt{bbtk} 
@@ -557,7 +558,7 @@ which is accessible with \bbStudio menu \texttt{Tools $>$ Create black box}.
 The interface looks like in fig. \ref{bbCreateBlackBox}.
 
 \begin{figure}[!ht]
-\caption{\label{bbCreateBlackBox}Create Black Box}
+\caption{\label{bbCreateBlackBox}Create Black Box interface}
 \begin{center}
 \includegraphics[width=0.6\textwidth]{bbCreateBackBox.png}
 \end{center}
@@ -734,7 +735,8 @@ If you wish to bbfy a \vtk object which is a \texttt{vtkImageAlgorithm}
 in the \vtk core package 'src' folder). 
 The bbfication mechanism is inheritance.
 
-You have to add the attribute \texttt{type} to the \texttt{blackbox} tag :
+You have to add the attribute \texttt{type="VTK\_ImageAlgorithm"} 
+to the \texttt{blackbox} tag :
 \begin{verbatim}
 <blackbox name="..." type="VTK_ImageAlgorithm">
 \end{verbatim}
@@ -777,14 +779,17 @@ of the input called \texttt{DiffusionThreshold} instructs \bbfy to
 directly call the \texttt{SetDiffusionThreshold} and 
 \texttt{GetDiffusionThreshold} 
 methods of the vtk parent when needed. 
-NOTE : For this mechanism to work, 
+
+{\bf NOTE :} 
+For this mechanism to work, 
 the name of the \bbtk input MUST be the same than the name 
 of the \vtk parent parameter. 
 
 No \texttt{process} method has to be given, 
 \bbfy generates a process body for you, which simply calls the 
 \texttt{Update()} method of the vtk parent.
-NOTE :
+
+{\bf NOTE :}
 you can write your own \texttt{process} code which will overload 
 the default. Don't forget to call Update(). 
 See \texttt{packages/vtk/src/bbvtkConeSource.xml} for an example.
@@ -1055,9 +1060,12 @@ namespace bbstd
   BBTK_AUTHOR("jpr@creatis.insa-lyon.fr");
   BBTK_CATEGORY("misc");
   BBTK_DESCRIPTION("Makes a kosher file name");
-  BBTK_INPUT(MakeFileName,Directory,"Directory Name",std::string,"directory name");
-  BBTK_INPUT(MakeFileName,File,     "File Name",     std::string,"file name");
-  BBTK_INPUT(MakeFileName,Extent,   "Extention",     std::string,"file extension");
+  BBTK_INPUT(MakeFileName,Directory,"Directory Name",std::string,
+             "directory name");
+  BBTK_INPUT(MakeFileName,File,     "File Name",     std::string,
+             "file name");
+  BBTK_INPUT(MakeFileName,Extent,   "Extention",     std::string,
+             "file extension");
   
   BBTK_OUTPUT(MakeFileName,Out,"Full File Name",std::string,"file name");
   BBTK_END_DESCRIBE_BLACK_BOX(MakeFileName);
@@ -1091,66 +1099,55 @@ which is used to perform specific things at construction time.
 You can also overload \texttt{bbUserCopyConstructor} 
 and \texttt{bbUserDestructor} with the same signature.
 The black box interface macros are summarized in table 
-\ref{CPPInterfaceBasicMacros}
-
+\ref{CPPInterfaceBasicMacros}.
 
 % ==========================================
 \begin{table}[!ht]
 \caption{\label{CPPInterfaceBasicMacros}Black box interface \CPP macros}
-\small
-
-\begin{itemize}
-
-    \item \texttt{BBTK\_BLACK\_BOX\_INTERFACE(BOX\_NAME,BBTK\_PARENT) }
+\begin{tabular}{p{\textwidth}}\hline
+    \\ \small \texttt{BBTK\_BLACK\_BOX\_INTERFACE(BOX\_NAME,BBTK\_PARENT)} :
     Yes, we know the \bbtk parent is redundant with the inheritance list... That's why we allow you to describe your class in \xml format!
-
-     \item \texttt{BBTK\_VTK\_BLACK\_BOX\_INTERFACE(CLASS,BBTK\_PARENT,VTK\_PARENT) } Black box interface for \vtk object inherited boxes
+     \\ \small \texttt{BBTK\_VTK\_BLACK\_BOX\_INTERFACE(CLASS,BBTK\_PARENT,VTK\_PARENT) } : Black box interface for \vtk object inherited boxes
        \dots
-    \item \texttt{BBTK\_ITK\_BLACK\_BOX\_INTERFACE(CLASS,BBTK\_PARENT,ITK\_PARENT) } Black box interface for \itk object inherited boxes
+    \\ \small \texttt{BBTK\_ITK\_BLACK\_BOX\_INTERFACE(CLASS,BBTK\_PARENT,ITK\_PARENT) } : Black box interface for \itk object inherited boxes
        \dots
-    \item \texttt{BBTK\_DECLARE\_INPUT (NAME,TYPE) } Declares an input of the box 
-\begin{itemize}
-\item \texttt{NAME} : the input name (as it will appear to the users of your black box)
-\item \texttt{TYPE} : \CPP type of the input (e.g. double, std::string, vtkImageData*, ...)).
-\end{itemize}
-  \item \texttt{BBTK\_DECLARE\_INHERITED\_INPUT(NAME,TYPE,GETMETHOD,SETMETHOD)} Declares an input of the box which wraps the \texttt{GETMETHOD / SETMETHOD} accessors
-
-    \item \texttt{BBTK\_DECLARE\_VTK\_INPUT(NAME,TYPE)} 
+    \\ \small \texttt{BBTK\_DECLARE\_INPUT (NAME,TYPE) } : Declares an input of the box, with \texttt{NAME} : the input name (as it will appear to the users of your black box) and \texttt{TYPE} : \CPP type of the input (e.g. double, std::string, vtkImageData*, ...).
+  \\ \small \texttt{BBTK\_DECLARE\_INHERITED\_INPUT(NAME,TYPE,GETMETHOD,SETMETHOD)} : Declares an input of the box which wraps the \texttt{GETMETHOD / SETMETHOD} accessors
+    \\ \small \texttt{BBTK\_DECLARE\_VTK\_INPUT(NAME,TYPE)} :
         Declares a vtk object-inherited input
-   \item \texttt{BBTK\_DECLARE\_VTK\_IMAGE\_ALGORITHM\_INPUT(NAME,TYPE)}     Declares a vtkImageAlgorithm-inherited input 
-    \item \texttt{BBTK\_DECLARE\_VTK\_POLY\_DATA\_ALGORITHM\_INPUT(NAME,TYPE)} Declares a vtkPolyDataAlgorithm-inherited input                         
-    \item \texttt{BBTK\_DECLARE\_ITK\_INPUT (NAME,TYPE)} 
+   \\ \small \texttt{BBTK\_DECLARE\_VTK\_IMAGE\_ALGORITHM\_INPUT(NAME,TYPE)} :    Declares a vtkImageAlgorithm-inherited input 
+    \\ \small \texttt{BBTK\_DECLARE\_VTK\_POLY\_DATA\_ALGORITHM\_INPUT(NAME,TYPE)} : Declares a vtkPolyDataAlgorithm-inherited input  
+    \\ \small \texttt{BBTK\_DECLARE\_ITK\_INPUT (NAME,TYPE)} :
         Declares a itk object-inherited input
-  \item \texttt{BBTK\_DECLARE\_OUTPUT (NAME,TYPE) } 
+  \\ \small \texttt{BBTK\_DECLARE\_OUTPUT (NAME,TYPE) } :
        Declares an output of the box 
-  \item \texttt{BBTK\_DECLARE\_INHERITED\_OUTPUT(NAME,TYPE,GETMETHOD,SETMETHOD)} 
+  \\ \small \texttt{BBTK\_DECLARE\_INHERITED\_OUTPUT(NAME,TYPE,GETMETHOD,SETMETHOD)} :
     Declares an output of the box which wraps the \texttt{GETMETHOD / SETMETHOD} accessors
-    \item \texttt{BBTK\_DECLARE\_VTK\_OUTPUT(NAME,TYPE)} 
+    \\ \small \texttt{BBTK\_DECLARE\_VTK\_OUTPUT(NAME,TYPE)} :
        Declares a vtk object-inherited output    
-     \item \texttt{BBTK\_DECLARE\_ITK\_OUTPUT(NAME,TYPE)} 
+     \\ \small \texttt{BBTK\_DECLARE\_ITK\_OUTPUT(NAME,TYPE)} :
         Declares a itk object-inherited output
-
-   \item \texttt{BBTK\_DECLARE\_VTK\_PARAM(VTK\_PARENT,NAME,TYPE)} 
+   \\ \small \texttt{BBTK\_DECLARE\_VTK\_PARAM(VTK\_PARENT,NAME,TYPE)} :
  Declares an input corresponding to an inherited vtk parameter 
      (you know, the ones that are declared by vtkSetMacro/vtkGetMacro). Its name must be the same than the vtk parameter name. 
-               
-    \item \texttt{BBTK\_DECLARE\_ITK\_PARAM(NAME,TYPE)} 
+    \\ \small \texttt{BBTK\_DECLARE\_ITK\_PARAM(NAME,TYPE)} :
  Declares an input corresponding to an inherited itk parameter 
-
-    \item \texttt{BBTK\_PROCESS(METHOD\_NAME)} 
+    \\ \small \texttt{BBTK\_PROCESS(METHOD\_NAME)} :
        Defines the method to call when the box is processed. 
-    \item \texttt{BBTK\_VTK\_PROCESS}                                                  Defines AND implements the default processing method for vtk 
+    \\ \small \texttt{BBTK\_VTK\_PROCESS} :                                                    Defines AND implements the default processing method for vtk 
         inherited black boxes (calls \texttt{vtkParent::Update})
-  \item \texttt{BBTK\_ITK\_PROCESS}                                                    Defines AND implements the default processing method for itk 
+  \\ \small \texttt{BBTK\_ITK\_PROCESS} :                                                      Defines AND implements the default processing method for itk 
         inherited black boxes (calls \texttt{itkParent::Update})
-\end{itemize}
+\\ 
+\hline\end{tabular}
+
 \end{table}
 %================================================
 
 After the black box class declaration 
 then comes a zone in which you describe your black box, 
 between the macros \texttt{BBTK\_BEGIN\_DESCRIBE\_BLACK\_BOX} 
-and \texttt{BBTK\_END\_DESCRIBE\_BLACK\_BOX}.
+and \\ \texttt{BBTK\_END\_DESCRIBE\_BLACK\_BOX}.
 
 The macro \texttt{BBTK\_BEGIN\_DESCRIBE\_BLACK\_BOX} 
 actually starts the declaration of another class, 
@@ -1178,19 +1175,17 @@ are described in table \ref{CPPDescriptorBasicMacros}.
 % ==========================================
 \begin{table}[!ht]
 \caption{\label{CPPDescriptorBasicMacros}Black box descriptor \CPP macros}
-\small
-
- \begin{itemize}
-   \item \texttt{BBTK\_BEGIN\_DESCRIBE\_BLACK\_BOX(BOX\_NAME,BBTK\_PARENT) }  : 
+\begin{tabular}{p{\textwidth}}\hline
+    \\ \small \texttt{BBTK\_BEGIN\_DESCRIBE\_BLACK\_BOX(BOX\_NAME,BBTK\_PARENT) }  : 
     Yes, we know it's redundant with public inheritance ... That's why we allow you to describe your class in xml format! 
     All the following items will be used in the Help interface; describe them carefully (i.e. in a Human understandable way!).
-  \item \texttt{ BBTK\_ADAPTOR } : Declares that the box is an adaptor
-  \item \texttt{ BBTK\_DEFAULT\_ADAPTOR } : Declares that the box is the default adaptor for its I/O types
-   \item \texttt{BBTK\_NAME} : the name of your box 
-    \item \texttt{BBTK\_AUTHOR} : author name (better you put e-mail adress)
-    \item \texttt{BBTK\_DESCRIPTION} : brief description of what does the box
-    \item \texttt{BBTK\_CATEGORY} : box category  (see table \ref{categories})
-    \item \texttt{BBTK\_INPUT(BOX\_NAME,INPUT\_NAME,DESCRIPTION,CPP\_TYPE,INPUT\_NATURE)} for each one of the input parameters, you have to supply : 
+  \\ \small \texttt{BBTK\_ADAPTOR} : Declares that the box is an adaptor
+  \\ \small \texttt{BBTK\_DEFAULT\_ADAPTOR} : Declares that the box is the default adaptor for its I/O types
+   \\ \small \texttt{BBTK\_NAME(STRING)} : The name of your box 
+    \\ \small \texttt{BBTK\_AUTHOR(STRING)} : The author(s) (better you put e-mail adresses)
+    \\ \small \texttt{BBTK\_DESCRIPTION(STRING)} : Brief description of what does the box
+    \\ \small \texttt{BBTK\_CATEGORY(STRING)} : Box categories, semicolon separated  (see table \ref{categories})
+    \\ \small \texttt{BBTK\_INPUT(BOX\_NAME,INPUT\_NAME,DESCRIPTION,CPP\_TYPE,INPUT\_NATURE)} 
        \begin{itemize}
          \item \texttt{BOX\_NAME} : The current black box name.
          \item \texttt{INPUT\_NAME} : The input name
@@ -1199,10 +1194,9 @@ are described in table \ref{CPPDescriptorBasicMacros}.
          \item \texttt{INPUT\_NATURE} : The 'nature' of the parameter (see table \ref{nature}) if you wish your box may be used by automatic GUI generator.
         Supply an empty string ("") if you don't care.          
        \end{itemize}
-    \item \texttt{ BBTK\_OUTPUT(BOX\_NAME,OUTPUT\_NAME,DESCRIPTION,CPP\_TYPE)}
-    \item \texttt{BBTK\_END\_DESCRIBE\_BLACK\_BOX(BOX\_NAME)} : means the torture is (almost) over.        
- \end{itemize}
-
+    \\ \small\texttt{BBTK\_OUTPUT(BOX\_NAME,OUTPUT\_NAME,DESCRIPTION,CPP\_TYPE)} : The same
+     \\ \small \texttt{BBTK\_END\_DESCRIBE\_BLACK\_BOX(BOX\_NAME)} 
+ \\ \hline\end{tabular}
 \end{table}
 
 % ==========================================
@@ -1264,24 +1258,22 @@ The implementation related macros are summarized in table \ref{CPPImplementation
 % ==========================================
 \begin{table}[!ht]
 \caption{\label{CPPImplementationBasicMacros}Black box implementation \CPP macros}
-\small
-
- \begin{itemize}
-    \item  \texttt{BBTK\_ADD\_BLACK\_BOX\_TO\_PACKAGE} : (Package name, Blackbox name)
-    \item  \texttt{BBTK\_BLACK\_BOX\_IMPLEMENTATION} : (Blackbox name, Blackbox basic parent \\ (bbtk::AtomicBlackBox/ bbtk::WxBlackBox)see :\label{basic_parent}
-    \item  \texttt{Process} :definition of your own callback function, that will be called in the box  method. \\ At least, you'll write here the default initialisation of the outputs
- \end{itemize}
+\begin{tabular}{p{\textwidth}}\hline
+    \\ \small \texttt{BBTK\_ADD\_BLACK\_BOX\_TO\_PACKAGE(PACKAGE\_NAME,BOX\_NAME)}
+   \\ \small  \texttt{BBTK\_BLACK\_BOX\_IMPLEMENTATION(BOX\_NAME,BBTK\_PARENT)}
+\\ \hline
+\end{tabular}
 \end{table}
  
 % ==========================================
 \subsubsection{Widget black boxes \CPP macros}
+% ==========================================
 
 See the example of \texttt{package/wx/src/bbwxLayoutLine.h\textbar cxx}.
 The only differences with a non-widget black box are :
 \begin{itemize}
-\item The header must include \texttt{bbtkWxBlackBox.h} and the class must 
-inherit \texttt{bbtk::WxBlackBox}.
+\item The header must include \texttt{bbtkWxBlackBox.h} and \\ 
+the class must inherit \texttt{bbtk::WxBlackBox}.
 \item The black box interface must declare the widget creation callback 
 with the macro \texttt{BBTK\_CREATE\_WIDGET(CALLBACK)}. 
 The callback must be declared in the interface and implemented. 
@@ -1290,18 +1282,20 @@ is called just after the \texttt{wxWindow} has been shown, e.g.
 to refresh its content. Note that \texttt{Layout} widget \emph{MUST}
 overload this method and call \texttt{bbUserOnShowWidget(INPUT\_NAME)} 
 for all inputs which correspond to an 'embedded' window
-(the 'Widget1'..'WidgetN' inputs, 
+(the 'Widget1' ... 'WidgetN' inputs, 
 see \texttt{package/wx/src/bbwxLayoutLine.cxx})
 \end{itemize}
 
 % ==========================================
 \subsubsection{VTK black boxes \CPP macros}
+% ==========================================
 
 See the example of \texttt{package/wx/src/bbvtkMarchingCubes.h\textbar cxx}.
 The macros are summarized in table \ref{CPPInterfaceBasicMacros}.
 
 % ==========================================
 \subsubsection{Template black boxes \CPP macros}
+% ==========================================
 
 You can write down black box classes \emph{templates}. 
 However, only \emph{actual} classes, that is instanciated templates, 
@@ -1317,29 +1311,27 @@ Class templates related macros are summarized in table \ref{CPPTemplateMacros}.
 % ==========================================
 \begin{table}[!ht]
 \caption{\label{CPPTemplateMacros}Black box templates-related \CPP macros}
-\small
-
- \begin{itemize}
-    \item  \texttt{BBTK\_TEMPLATE\_BLACK\_BOX\_INTERFACE(BOX\_NAME,BBTK\_PARENT,TEMPLATE\_PARAMETER)}
-    \item  \texttt{BBTK\_TEMPLATE2\_BLACK\_BOX\_INTERFACE(BOX\_NAME,BBTK\_PARENT,TEMPLATE\_PARAMETER\_1,,TEMPLATE\_PARAMETER\_2)}
-    \item \texttt{BBTK\_BEGIN\_DESCRIBE\_TEMPLATE\_BLACK\_BOX(BOX\_NAME,BBTK\_PARENT)}
-  In the descriptor, the template parameter name is \texttt{T}
-\item \texttt{BBTK\_BEGIN\_DESCRIBE\_TEMPLATE2\_BLACK\_BOX(BOX\_NAME,BBTK\_PARENT)} 
-  In the descriptor, the template parameters names are \texttt{T1} and \texttt{T2}
-    \item \texttt{BBTK\_END\_DESCRIBE\_TEMPLATE\_BLACK\_BOX(BOX\_NAME)}
-   \item \texttt{BBTK\_END\_DESCRIBE\_TEMPLATE2\_BLACK\_BOX(BOX\_NAME)}
-     \item \texttt{BBTK\_TEMPLATE\_INPUT(BOX\_NAME,INPUT\_NAME,DESCRIPTION,CPP\_TYPE,INPUT\_NATURE)} Same than for non-templates, except that the \texttt{CPP\_TYPE} can be the template parameter.
-    \item \texttt{BBTK\_TEMPLATE2\_INPUT(BOX\_NAME,INPUT\_NAME,DESCRIPTION,CPP\_TYPE,INPUT\_NATURE)} Same remark
- \item \texttt{BBTK\_TEMPLATE\_OUTPUT(BOX\_NAME,OUTPUT\_NAME,DESCRIPTION,CPP\_TYPE)} Same remark 
- \item \texttt{BBTK\_TEMPLATE2\_OUTPUT(BOX\_NAME,OUTPUT\_NAME,DESCRIPTION,CPP\_TYPE)} Same remark 
-
- \item \texttt{BBTK\_BLACK\_BOX\_TEMPLATE\_IMPLEMENTATION(BOX\_NAME,BBTK\_PARENT)}
- \item \texttt{BBTK\_BLACK\_BOX\_TEMPLATE2\_IMPLEMENTATION(BOX\_NAME,BBTK\_PARENT)}
- \item \texttt{BBTK\_ADD\_TEMPLATE\_BLACK\_BOX\_TO\_PACKAGE(PACKAGE\_NAME,BOX\_NAME,TEMPLATE\_PARAMETER\_VALUE)} : Adds the black box template instanciated on a certain value of its template parameter to the package. You can put as many such lines with different template parameter values as you want (see e.g. \texttt{package/std/src/bbstdStringTo.cxx})
- \item \texttt{BBTK\_ADD\_TEMPLATE2\_BLACK\_BOX\_TO\_PACKAGE(PACKAGE\_NAME,BOX\_NAME,TEMPLATE\_PARAMETER\_1\_VALUE,TEMPLATE\_PARAMETER\_2\_VALUE)} 
+\begin{tabular}{p{\textwidth}}\hline
+% \begin{itemize}
+    \\  \small\texttt{BBTK\_TEMPLATE\_BLACK\_BOX\_INTERFACE(BOX\_NAME,BBTK\_PARENT, TEMPLATE\_PARAMETER)}
+    \\  \small\texttt{BBTK\_TEMPLATE2\_BLACK\_BOX\_INTERFACE(BOX\_NAME,BBTK\_PARENT, TEMPLATE\_PARAMETER\_1, TEMPLATE\_PARAMETER\_2)}
+    \\  \small\texttt{BBTK\_BEGIN\_DESCRIBE\_TEMPLATE\_BLACK\_BOX(BOX\_NAME,BBTK\_PARENT)} : Note that in the descriptor, the template parameter name is \texttt{T}
+\\ \small\texttt{BBTK\_BEGIN\_DESCRIBE\_TEMPLATE2\_BLACK\_BOX(BOX\_NAME,BBTK\_PARENT)} : Note that in the descriptor, the template parameters names are \texttt{T1} and \texttt{T2}
+    \\ \small\texttt{BBTK\_END\_DESCRIBE\_TEMPLATE\_BLACK\_BOX(BOX\_NAME)}
+   \\ \small\texttt{BBTK\_END\_DESCRIBE\_TEMPLATE2\_BLACK\_BOX(BOX\_NAME)}
+     \\ \small\texttt{BBTK\_TEMPLATE\_INPUT(BOX\_NAME,INPUT\_NAME,DESCRIPTION,CPP\_TYPE, INPUT\_NATURE)} : Same than for non-templates, except that the \texttt{CPP\_TYPE} can be the template parameter.
+    \\ \small\texttt{BBTK\_TEMPLATE2\_INPUT(BOX\_NAME,INPUT\_NAME,DESCRIPTION,CPP\_TYPE, INPUT\_NATURE)} : Same remark
+ \\\small \texttt{BBTK\_TEMPLATE\_OUTPUT(BOX\_NAME,OUTPUT\_NAME,DESCRIPTION,CPP\_TYPE)} : Same remark 
+ \\ \small\texttt{BBTK\_TEMPLATE2\_OUTPUT(BOX\_NAME,OUTPUT\_NAME,DESCRIPTION,CPP\_TYPE)} : Same remark 
+ \\ \small\texttt{BBTK\_BLACK\_BOX\_TEMPLATE\_IMPLEMENTATION(BOX\_NAME,BBTK\_PARENT)}
+ \\ \small\texttt{BBTK\_BLACK\_BOX\_TEMPLATE2\_IMPLEMENTATION(BOX\_NAME,BBTK\_PARENT)}
+ \\ \small\texttt{BBTK\_ADD\_TEMPLATE\_BLACK\_BOX\_TO\_PACKAGE(PACKAGE\_NAME,BOX\_NAME, TEMPLATE\_PARAMETER\_VALUE)} : Adds the black box template instanciated on a certain value of its template parameter to the package. You can put as many such lines with different template parameter values as you want (see e.g. \texttt{package/std/src/bbstdStringTo.cxx})
+ \\ \small\texttt{BBTK\_ADD\_TEMPLATE2\_BLACK\_BOX\_TO\_PACKAGE(PACKAGE\_NAME,BOX\_NAME, TEMPLATE\_PARAMETER\_1\_VALUE, TEMPLATE\_PARAMETER\_2\_VALUE)} :
 The same for two template parameters (see  e.g. \texttt{package/std/src/bbstdCast.cxx})
-\end{itemize}
+\\
+%\end{itemize}
+\\ \hline
+\end{tabular}
 \end{table}
 
 
@@ -1381,6 +1373,7 @@ in the macro \texttt{BBTK\_DESCRIPTION}, like for example:
 
 % ==========================================
 \subsubsection{ITK black boxes \CPP macros}
+% ==========================================
 
 It is a special cas of black box templates with also 
 special macros for itk object inherited black boxes. 
@@ -1393,5 +1386,6 @@ there is also a mechanism for making
 ``generic'' untemplatized itk black boxes.
 See the example in the file above.
 
+% ==========================================
 \end{document}