]> Creatis software - bbtk.git/commitdiff
upgrades
authorjean-pierre roux <jean-pierre.roux@creatis.insa-lyon.fr>
Tue, 9 Sep 2008 14:01:44 +0000 (14:01 +0000)
committerjean-pierre roux <jean-pierre.roux@creatis.insa-lyon.fr>
Tue, 9 Sep 2008 14:01:44 +0000 (14:01 +0000)
kernel/doc/bbtkPackageDevelopersGuide/bbtkPackageDevelopersGuide.tex

index 0c6a4287c6ac84ba3ea59888ce5ee98ff1367e02..640bc4115b455bbf404dc7ce2c5deba36fd25d91 100644 (file)
@@ -10,6 +10,9 @@
 \tableofcontents
 % ==========================================
 
+\listoftables
+
+\listoffigures
 
 % ==========================================
 %\section*{Abstract}
@@ -323,7 +326,7 @@ In these sections, you can set :
 \item A \textbf{description} of the package, which will appear in the help of your package or in its html documentation automatically generated by \bbdoc.
 \item The \textbf{version} of the package.
 \item The \textbf{\xml sources} of the package : you can list each input \xml file explicitly or tell \cmake to include in the project \emph{all} the \xml files of the directory. 
-\item The \textbf{\CPP sources} of the package :  you can list each input \CPP file explicitly or tell \cmake to include in the project all the \CPP files of the directory.
+\item The \textbf{\CPP sources} of the package : you can list each input \CPP file explicitly or tell \cmake to include in the project all the \CPP files of the directory.
 \item \textbf{Additional include directories}. Set it if your package needs to include source files which are not in the package directory, typically if it depends on another library which is not one the libraries automatically handled (\vtk, \itk...).
 \item \textbf{Additional libraries} to link against. Set it if your package needs to link against another library which is not one the libraries automatically handled (\vtk, \itk...).
 \end{itemize}
@@ -727,13 +730,27 @@ Use \texttt{bbPACKAGE}, where \texttt{PACKAGE} is the name of the package\\\hlin
 \small
 \begin{tabular}{|ll|}
 \hline
-a) & \texttt{<blackbox type == ''itkImageToImageFilter''>} \\ \hline
-b) & \texttt{<blackbox type == ''vtkImageAlgorithm'' or ''vtkPolyDataAlgorithm''>} \\ \hline
-c) & \texttt{<blackbox type == ''itkImageToImageFilter''>} and 
+a) & \texttt{<blackbox type == ''ITK\_ImageToImageFilter''>} \\ \hline
+b) & \texttt{<blackbox type == ''VTK\_ImageAlgorithm'' or ''VTK\_PolyDataAlgorithm''>} \\ \hline
+c) & \texttt{<blackbox type == ''ITK\_ImageToImageFilter''>} and 
      \texttt{<blackbox generic>} is present. \\ \hline
 \end{tabular}
 \end{table}
 
+\begin{table}[!ht]
+\caption{\label{basic_parent}}
+\bbfy \texttt{Basic box parent}
+\small
+\begin{tabular}{|ll|}
+\hline
+\texttt{bbtk::WxBlackBox}b) & If the blackbox associated to
+a \texttt{wxWindow} and is be able to return a pointer to it.... \\ \hline
+\texttt{bbtk::AtomicBlackBox} & Any other blackbox that doesn't return a pointer to a \texttt{wxWindow}
+
+\end{tabular}
+\end{table}
+
+
 
 
 % ==========================================
@@ -781,7 +798,6 @@ c) & \texttt{<blackbox type == ''itkImageToImageFilter''>} and
  \texttt{Kind}     &  Use as :     \\ \hline \\ \hline
  \texttt{ADAPTOR} & \\ \hline
  \texttt{DEFAULT\_ADAPTOR} & \\ \hline 
- \texttt{ADAPTOR} & \\ \hline 
  \texttt{WIDGET\_ADAPTOR} & \\ \hline 
  \texttt{DEFAULT\_WIDGET\_ADAPTOR} & \\ \hline
  \texttt{GUI} & \\ \hline 
@@ -816,12 +832,87 @@ c) & \texttt{<blackbox type == ''itkImageToImageFilter''>} and
 \subsection{\CPP description of a box}
 % ==========================================
 
-TO DO...
+Almost everything is performed usig macros.
 
-Look at the files \texttt{examples/TEMPLATE\_bbPackagenameBoxname.h/cxx}
-and \texttt{examples/TEMPLATE\_bbPackagenameWXBoxname.h/cxx}
-
-%\bibliography{all}
+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}