+% ==========================================
+\subsection{\CPP description of a box}
+% ==========================================
+
+Almost everything is performed usig macros.
+
+For a quick start, the best you have to do is to run \texttt{bbStudio}, then in the menu \texttt{Tools}, choose the item
+ \texttt{Create blackbox}, click on \texttt{C++}, and have a look to the generated files.
+
+% ==========================================
+\subsubsection{\texttt{.h} description of a box}
+% ==========================================
+ \begin{itemize}
+ \item \texttt{namespace} : your package name.
+ \item \texttt{class} : the name of your box
+ \item \texttt{public inheritance} :
+ \begin{itemize}
+ \item{bbtk::WxBlackBox}
+ Your Black Box is intended to return a wxWidget, able to be included into an other one (you choosed
+ \texttt{widget-template} for \texttt{Type of the blackbox} )
+ \item{bbtk::AtomicBlackBox}
+ Your Black box is any processig box (std, ITK or VTK based)
+ \item{any processing class} (ITK, VTK, ...) your box inherits.
+ \end{itemize}
+ \item \texttt{BBTK\_BLACK\_BOX\_INTERFACE} : (yourBoxName, the list of the classes it inherits from, VTK Parent -if any-).
+ Yes, we know it's redundant with previous point... That's why we allow you to describe your class in xml format!
+ \item \texttt{bbUserConstructor} declaration of your own callback function, that will be called in the box constructor method
+ \item \texttt{bbUserCopyConstructor} declaration of your own callback function, that will be called in the box copy constructor method
+ \item \texttt{bbUserDestructor} declaration of your own callback function, that will be called in the box destructor method
+ \item \texttt{BBTK\_DECLARE\_INPUT} : input parameter name (as it will appear to the users of your black box),
+ C++ type of the parameter (e.g. double, std::string, vtkImageData*, ...)
+ \item \texttt{BBTK\_DECLARE\_OUTPUT} : output parameter name (as it will appear to the users of your black box),
+ C++ type of the parameter (e.g. double, std::string, vtkImageData*, ...
+ \item \texttt{BBTK\_DECLARE\_VTK\_INPUT} Declares a vtkAlgorithm-inherited AtomicBlackBox input
+ \item \texttt{BBTK\_DECLARE\_VTK\_OUTPUT} Declares a vtkAlgorithm-inherited AtomicBlackBox output
+ \item \texttt{BBTK\_DECLARE\_VTK\_PARAM} Declares an AtomicBlackBox 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\_VTK\_IMAGE\_ALGORITHM\_INPUT} Declares a vtkImageAlgorithm-inherited AtomicBlackBox input
+ \item \texttt{BBTK\_DECLARE\_VTK\_POLY\_DATA\_ALGORITHM\_INPUT} Declares a vtkPolyDataAlgorithm-inherited AtomicBlackBox input
+ \item \texttt{BBTK\_PROCESS} Defines the default bbUserProcess method for vtk inherited black boxes (actually : calls vtkParent::Update)
+
+ \item \texttt{BBTK\_BEGIN\_DESCRIBE\_BLACK\_BOX} :
+ (yourBoxName, \texttt{bbtk::WxBlackBox} or \texttt{bbtk::AtomicBlackBox} depending on what you
+ black box inherits from).
+ 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\_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} for each one of the input parameters, you have to supply :
+ \begin{itemize}
+ \item The current Blackbox name.
+ \item The parameter name
+ \item A brief description of what the parameter is used for.
+ \item The C++ type of the parameter (e.g. double, std::string, vtkImageData*, ...)
+ \item 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} for each one of the output parameters, you have to supply :
+ \begin{itemize}
+ \item The current Blackbox name.
+ \item The parameter name
+ \item A brief description of what the parameter is used for.
+ \item The C++ type of the parameter (e.g. double, std::string, vtkImageData*, ...)
+ \end{itemize}
+ \item \texttt{BBTK\_END\_DESCRIBE\_BLACK\_BOX} : means the torture is (almost) over.
+ \end{itemize}
+% ==========================================
+\subsubsection{\texttt{.cxx} description of a box}
+% ==========================================
+ \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
+ \item \texttt{UserConstructor} : definition of your own callback function, that will be called in the box constructor method. \\
+ At least, you'll write here the default initialisation of the inputs (to avoid unpredictable behaviour if user forgets to
+ Set/Connect any Input).
+ \item \texttt{UserCopyConstructor} : definition of your own callback function, that will be called in the box copy constructor method
+ \item \texttt{UserDestructor} : definition of your own callback function, that will be called in the box destructor method
+ \end{itemize}
+
+
+
+ %\bibliography{all}