]> Creatis software - bbtk.git/blobdiff - kernel/doc/bbtkPackageDevelopersGuide/bbtkPackageDevelopersGuide.tex
Doc headers
[bbtk.git] / kernel / doc / bbtkPackageDevelopersGuide / bbtkPackageDevelopersGuide.tex
index 2504f8a188b670bc64e59b549379ab1559e24769..8046e8ff0d83eca6bd2452870b7177ca63275edc 100644 (file)
@@ -1,13 +1,39 @@
+
 % ==========================================
 \documentclass[11pt,final,a4paper]{article}
 \input{config.tex}
 
 
+
 \begin{document}
-\title{The Black Box Toolkit\\Package Developers' Guide}
-\date{\today}
-\author{Laurent Guigues}
-\maketitle
+
+\begin{center}
+
+{\Large \BBTK}
+\vspace{1cm}
+
+{\Huge User's Guide}
+\vspace{1cm}
+
+\bbtk version \bbtkVersion
+\vspace{0.5cm}
+
+
+Last modified on : October 12, 2008 \\
+Generated on : \today 
+\vspace{0.5cm}
+\end{center}
+\begin{center}
+Eduardo Davila, Laurent Guigues, Jean-Pierre Roux 
+\end{center}
+\begin{center}
+CREATIS-LRMN, Centre de Recherche en Imagerie Medicale \\ CNRS UMR 5220, INSERM U620\\
+INSA Lyon\\
+Universit\'e Claude-Bernard Lyon 1
+\end{center}
+
+
+
 % ==========================================
 \tableofcontents
 % ==========================================
 Any black box must be included in a \bbtk package, 
 that is in a particular shared library which can be loaded 
 dynamically by \bbtk (hence applications which use \bbtkns, 
-such as the interpreter \bbi, launched by the development environment
+such as the development environment,
 \bbStudions). 
 
 \begin{enumerate}
 \item \textbf{Create a new package. }
 Before defining any black box you  
 have to create a package, or more precisely  
-the files which will allow you to generate the package 
+the source files which will allow you to generate the package 
 (compile and link the shared library) and may be install it. 
  \texttt{bbStudio} does it for you.
  
@@ -59,6 +85,9 @@ that the existing project remain external to the package project.
 You will have to create your new package in a new location and 
 may be include/link against existing libraries. 
 \end{itemize}
+You'll have to run the standalone application \bbCreatePackagens, that allows 
+to create the basic file architecture 
+to start the development of a new black box package.
 
 \item \textbf{Describe your new box. }
 You can do it either :
@@ -70,6 +99,11 @@ When configuring your project with \cmake,
 the utility \bbfy will then generate the corresponding \CPP code. 
 \end{itemize}
 
+
+
+You'll have to run the standalone application \bbCreateBlackBox allows to create the basic file architecture 
+ to start the development of a new black box, that will be included in an already existing package.
+
 \end{enumerate}
 
 % ==========================================
@@ -105,7 +139,7 @@ That will creates the directory structure and the \texttt{cmake}
 files necessary to build the project.
 
 You must then decide the name of your new package. 
-This name will be used to load the package in \texttt{bbi}.
+This name will be used to load the package by \texttt{bbStudio}.
 Fill up the form like in fig. \ref{bbFillUpPackageForm}.
 
 
@@ -380,7 +414,10 @@ Concretely, a \texttt{bbtk::WxBlackBox} is associated to
 a \texttt{wxWindow} and must be able to return a pointer to it. 
 If your black box is not a widget black box 
 (that is : doesn't returns a pointer to a \emph{Widget}),
- it must inherit from \texttt{bbtk::AtomicBlackBox}.
+ it must inherit from \texttt{bbtk::AtomicBlackBox}.\\
+ It returns a \texttt{wxWidget} which can be embedded into the \texttt{wxWindow}.\\
+ In particular, modal dialogs which are created and destroyed at the end of the process method of the box
+  are NOT \texttt{WxBlackBoxes}/
 
 \subsubsection{Inherit or encapsulate ?}
 
@@ -468,10 +505,11 @@ Finally, to create a new black box, you will have to give :
 
  \item Its {\bf type}, either 
    \begin{enumerate} 
-     \item  a standard one (\texttt{std-template})
-     \item a VTK Polydata Algorithm based box (\texttt{VTK\_PolydataAlgorithm-template}),    
-     \item  a VTK Image Algorithm based box (\texttt{VTK\_ImageaAlgorithm-template}),
-     \item  if it uses the wxWidget Library (\texttt{widget-template})
+     \item  AtomicBlackBox : a basic one, with no special I/O (\texttt{std-template})
+     \item  WxBackBox : ouputs a \texttt{wxWindow}, 
+     \item a VTK Polydata Algorithm Box descendant,    
+     \item  a VTK Image Algorithm Box descendant
+
    \end{enumerate}
    
   \item The output format of the file, either a C++ file or an XML file.
@@ -640,42 +678,45 @@ you must modify the xml file generated in previous step :
 % ==========================================
 
 % ==========================================
-\subsubsection{Specific \texttt{xml} tags for \texttt{vtkImageAlgorithm} classes bbfication}
+\subsubsection{Specific \texttt{xml} tags for \texttt{vtkImageAlgorithm} classes bbfication by inheritance}
 % ==========================================
 \begin{verbatim}
 
-<blackbox name="..." type="VTK\_ImageAlgorithm">
+<blackbox name="..." type="VTK_ImageAlgorithm">
 
 <vtkparent>the vtk ImageAlgorithm class it inherits from</vtkparent>
 <input  name="..."  type="double"        special="vtk parameter" description="..."/>
-<input name="..."   type="vtkImageData*" special="vtk output"    description="..."/>
+<input name="..."   type="vtkImageData*" special="vtk input"    description="..."/>
 
 <output  name="..." type="double"        special="vtk parameter" description="..."/>
 <output name="..."  type="vtkImageData*" special="vtk output"    description="..."/>
 \end{verbatim}
 % ==========================================
-\subsubsection{Specific \texttt{xml} tags for \texttt{vtkPolyDataAlgorithm} classes bbfication}
+\subsubsection{Specific \texttt{xml} tags for \texttt{vtkPolyDataAlgorithm} classes bbfication by inheritance}
 % ==========================================
 \begin{verbatim}
-<blackbox name="..." type="VTK\_PolyDataAlgorithm">
+<blackbox name="..." type="VTK_PolyDataAlgorithm">
 
 <vtkparent>the vtk Polydata class it inherits from</vtkparent>
 <input  name="..."  type="double"       special="vtk parameter" description="..."/>
-<input  name="..."  type="vtkPolyData*" special="vtk output"    description="..."/>
+<input  name="..."  type="vtkPolyData*" special="vtk input"    description="..."/>
 
 <output  name="..." type="double"       special="vtk parameter" description="..."/>
 <output name="..."  type="vtkPolyData*" special="vtk output"    description="..."/>
 
 \end{verbatim}
+
+\newpage
+
 % ==========================================
 \subsubsection{\bbfy \texttt{xml} tags reference}
 % ==========================================
 
-  
+ See tables \ref{xml_tags}, \ref{xml_tags2}
 % ==========================================
 \begin{table}[!ht]
 \caption{\label{xml_tags}
-\bbfy \texttt{xml} tags reference}
+\bbfy \texttt{xml} tags reference (part 1)}
 \small
 \begin{tabular}{|lcllm{6cm}|}
 \hline
@@ -713,22 +754,36 @@ Use \texttt{bbPACKAGE}, where \texttt{PACKAGE} is the name of the package\\\hlin
         & \texttt{special} & - & 0-1 & In: \{\texttt{``itk input'', 
 ``vtk input'', ``itk parameter'', ``vtk parameter''}\} (see below).\\\hline 
         & \texttt{generic\_type} & c) & 0-1 & The ``generic'' type of the input (see text). \\\hline 
-\texttt{<output>} & \texttt{name} & - & 1 &  The name of the output \\\hline 
+
+
+ \end{tabular}
+ \end{table}
+\begin{table}[!ht]
+\caption{\label{xml_tags2}
+\bbfy \texttt{xml} tags reference (part 2)}
+\small
+\begin{tabular}{|lcllm{6cm}|}
+\hline
+Tag & Attributes & Condition & Multiplicity & Description
+ \\ \hline
+ \texttt{<output>} & \texttt{name} & - & 1 &  The name of the output \\\hline 
         & \texttt{type} & - & 1 &  The type of the output \\\hline 
         & \texttt{special} & - & 0-1 & In: \{\texttt{``itk output'', 
 ``vtk output''}\} (see below).\\\hline
         & \texttt{generic\_type} & c) & 0-1 & The ``generic'' type  of the output (see text).\\\hline  
         & \texttt{nature} & c) & 0-1 & The ``nature'' of the output (used for automatic GUI generation).\\\hline 
-
 \texttt{<process>} & - & - & 0-1 & The code of the processing method of the box. Must be put between clear tags : \texttt{<PRE></PRE>} \\\hline 
 \texttt{<constructor>} & - & - & 0-1 & The code of the user Constructor of the box (may contains default initialisations). Must be put between clear tags : \texttt{<PRE></PRE>} \\\hline 
 \texttt{<copyconstructor>} & - & - & 0-1 & The code of the user Copy Constructor of the box . Must be put between clear tags : \texttt{<PRE></PRE>} \\\hline
 \texttt{<destructor>} & - & - & 0-1 & The code of the user Destructor of the box. Must be put between clear tags : \texttt{<PRE></PRE>} \\\hline
  \end{tabular}
  \end{table}
+ \newpage
 % ==========================================
 \begin{table}[!ht]
-\caption{\label{xml_tags}
+\caption{\label{xml_tags-conditions}
 \bbfy \texttt{xml} tags conditions}
 \small
 \begin{tabular}{|ll|}
@@ -758,8 +813,7 @@ a \texttt{wxWindow} and is be able to return a pointer to it.... \\ \hline
 
 % ==========================================
 \begin{table}[!ht]
-\caption{\label{categories}
-\bbfy \texttt{Black Box} categories}
+\caption{\label{categories} \texttt{bbfy} \texttt{Black Box} categories}
 \small
 \begin{tabular}{|ll|}
 \hline
@@ -831,6 +885,16 @@ a \texttt{wxWindow} and is be able to return a pointer to it.... \\ \hline
 \end{tabular}
 \end{table}
 
+.\\
+.\\
+.\\
+.\\
+.\\
+
+
+\newpage 
+
+
 % ==========================================
 \subsection{\CPP description of a box}
 % ==========================================
@@ -880,7 +944,7 @@ For a quick start, the best you have to do is to run \texttt{bbStudio}, then in
     \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\_CATEGORY} : box category  (see table \ref{categories})
     \item \texttt{BBTK\_INPUT} for each one of the input parameters, you have to supply : 
        \begin{itemize}
          \item The current Blackbox name.