\tableofcontents
% ==========================================
+\listoftables
+
+\listoffigures
% ==========================================
%\section*{Abstract}
The first part (\ref{bbStudio}) is a brief presentation of the very intuitive Development
environment, \bbStudio.
-The second part (\ref{bbi})
+The second part (\ref{bb0})
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
\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}}
+ \item {\bf\emph{By name}}
+ \item {\bf\emph{By package}} (see table : \ref{bbi-list_of_packages})
+ \item {\bf\emph{By category}} (see table :\ref{categories})
+ \item {\bf\emph{Adaptors}} Used internaly to perform type conversions (not end user intended)
\end{itemize}
\end{itemize}
+
+% ==========================================
+\begin{table}[!ht]
+\caption{\label{bbi-list_of_packages} List of bbtk supplied packages.}
+\small
+\begin{tabular}{|ll||}
+\hline
+Package & What it's used for \\ \hline
+\texttt{std} & : the 'standard' package including basic useful boxes \\ \hline
+\texttt{wx} & : basic graphical interface elements (widgets: sliders, buttons, etc. based on the \texttt{wxWidgets} library \\ \hline
+\texttt{itk} & : the basic image processing package, based on the \texttt{itk} library. (without description)\\ \hline
+\texttt{vtk} & : Prints help on the package \texttt{package-name} and its boxes (with brief description). The package must have been previously loaded\\ \hline
+\texttt{wxvtk} & : widget boxes based on the \texttt{vtk} library.\\ \hline
+\texttt{itkvtk} & : boxes to convert \texttt{itk} structures into \texttt{vtk} structures and conversally.\\ \hline
+
+\end{tabular}
+\end{table}
+% ==========================================
+
+
+
+
+% ==========================================
+\begin{table}[!ht]
+\caption{\label{categories} \texttt{Black Box} categories}
+\small
+\begin{tabular}{|ll|}
+\hline
+ \texttt{Categ name} & : Meaning \\ \hline \\ \hline
+ \texttt{adaptor} & : Adaptor box \\ \hline
+ \texttt{application} & : Final application, end user intended \\ \hline
+ \texttt{atomic box} & : System category.
+ Automatically assigned to Atomic Black Boxes (c++ defined) \\ \hline
+ \texttt{complex box} & : System category.
+ Automatically assigned to Complex Black Boxes (script defined) \\ \hline
+ \texttt{command line} & : Script which defines a command line application (no embedded GUI, but command line imput parameters) \\ \hline
+ \texttt{demo} & : Demonstration \\ \hline
+ \texttt{devel} & : Developer tool (bbCreatePackage.bbs, ...) \\ \hline
+ \texttt{dicom} & : DICOM aware box \\ \hline
+ \texttt{example} & : Example script showing a box use-case \\ \hline
+ \texttt{filter} & : Image processing box \\ \hline
+ \texttt{image} & : Image processing related box \\ \hline
+ \texttt{interaction} & : \\ \hline
+ \texttt{math} & : Mathematical operations\\ \hline
+ \texttt{mesh} & : Mesh processing related box \\ \hline
+ \texttt{misc} & : A box that cannot be put in other category ! \\ \hline
+ \texttt{read/write} & : Box that read or write data from or to disk \\ \hline
+ \texttt{viewer} & : Box which displays some data \\ \hline
+ \texttt{widget} & : Piece of graphical interface \\ \hline
+
+ \texttt{3D object creator} & : Sophisticated 3D widget \\ \hline
+ \texttt{toolsbbtk} & : Component of bbStudio \\ \hline
+\end{tabular}
+\end{table}
+
+
+
+
+
% ==========================================
% ==========================================
% ==========================================
\end{figure}
Using the lower tool bar, you can :
+
+\begin{figure}[!ht]
+\caption{\label{lowertoolbar}The lower tool bar}
+\begin{center}
+\includegraphics[width=0.7\textwidth]{lowertoolbar.png}
+\end{center}
+\end{figure}
+
+
\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}}: 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}
The script language is very simple.
-Everything is done with only a few commands.
+Everything is done with only a very few commands (See table \ref{bbi-reference-box}).
The philosophy of this part is also very simple:
it introduces the \bbi commands using examples,
starting with the most simple commands.
The \texttt{'a'} at the end is the \emph{name} of the instance,
which will be used to reference it later.
-It is important to distinguish a box \emph{types}
+It is important to distinguish a box \emph{type}
and an \emph{instance} of a box type.
The \texttt{Add} box of the package \texttt{std} is actually
a \emph{box type} , like \texttt{int} is a data type
in \texttt{C} langage. The \texttt{new} command allows to create
an instance of a box type, exactly like \texttt{int i;} in
-a \texttt{C} code declares a variable of type \texttt{int} whose
+a \texttt{C} code, it declares a variable of type \texttt{int} whose
name is \texttt{i}.
Of course, like in \texttt{C} Language, you can declare multiple boxes of the
same type in \bbi.
\item postpone an implicit 'new line' character to the string
\end{enumerate}
+\paragraph
Box processing is needed if:
\begin{itemize}
\item at least input has changed since last processing or
\paragraph{Summary}
%\hrule
\begin{itemize}
-\item The \texttt{include} command allows to load a package.
+\item The \texttt{include} command allows to load a package, and the complex black boxes that come with it..
\item \texttt{help} gives help on:
\begin{itemize}
\item Available commands if you just type \texttt{help}.
\item \texttt{quit} : quits \bbi.
\end{itemize}
\hrule
+
+\paragraph{Note :}
+A more 'modern' way to proceed is to run \texttt{bbStudio}, drag and drop the \texttt{Command} bookmark to the lower \texttt{Welcome to bbStudio!} bar.
+Wou'll get something like in figure \ref{bbCommandPlusHelp} :
+
+\begin{figure}[!ht]
+\caption{\label{bbCommandPlusHelp}
+An other way to run the command interpreter}
+\begin{center}
+\includegraphics[width=0.5\textwidth]{bbCommandPlusHelp.png}
+\end{center}
+\end{figure}
% ==========================================
% ==========================================
> set a.In2 2
> set b.In2 3
> print $b.Out$
+\end{verbatim}
+
+You will see the (very expected) result :
+\begin{verbatim}
6
\end{verbatim}
The first three commands build the pipeline,
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.
+prints \texttt{b} black boxe output (the pipeline is executed before printing, because the interpretor 'knows' he box \texttt{b},
+whose output is requested, is not up to date.
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
chains of boxes (see \ref{bbi-more-on-pipeline-processing}
for details).
+
+Lets' consider an other, more image oriented, example :
+
+\begin{verbatim}
+> include vtk
+> include wx
+> include itk
+> include wxvtk
+
+> new FileSelector fileDialog
+> new ImageReader reader
+> new Slider slider
+> new Viewer2D viewer
+
+> connect fileDialog.Out reader.In
+> connect reader.Out viewer.In
+> connect slider.Out viewer.Slice
+> connect slider.BoxChange viewer.BoxExecute
+
+> exec viewer
+\end{verbatim}
+
+Some explainations : the \texttt{include} instructions load the necessary packages. \\
+
+\texttt{new FileSelector} will pop a File Selector, at run time, that will out the user chosen file name. \\
+\texttt{new Slider} will pop a Slider, at run time, that will out an integer, used later as a slice number.\\
+\texttt{new ImageReader} will read any itk readable file, whose name is passed as a std::string, and return a itk::ImagePointer.
+\texttt{new Viewer2D} display a plane, whose number id specified by an integer.\\
+\\
+\texttt{connect fileDialog.Out reader.In} plugs the output of the File Selector (a std::string) to the input of the reader (a std::string, too).\\
+\texttt{connect reader.Out viewer.In} plugs the output of the reader (an itk::ImagePointer) to the input of the Viewer (a vtkImageData *)\\
+\texttt{connect slider.Out viewer.Slice} plugs the output of the slider (an int) to an other output (named Slide) of the viewer.\\
+\texttt{connect slider.BoxChange viewer.BoxExecute} says the viewer it must re process itself any time the slider is modified.\\
+\\
+\texttt{exec viewer} processes the viewer.
+
+
+This would correspond to the graph in figure \ref{bbi-simplegraph}
+
+
+\begin{figure}[!ht]
+\caption{\label{bbi-simplegraph}(Very) simple Graph of a (very) simple pipeline}
+\begin{center}
+\includegraphics[width=0.8\textwidth]{bbi-simplegraph.png}
+\end{center}
+\end{figure}
+
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,
\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.
+There are two kinds of widgets: ``terminal'' widgets and ``container'' widgets.
The \texttt{InputText}, \texttt{FileDialog} or \texttt{Slider} widgets
are ``terminal'' widgets.
``container'' widgets are of another kind: they are designed to
\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.
+ will popup. If it's connected to the \texttt{Widget}\texttt{\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}
\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{Pipeline}} : bbUpdate() calls Process only if Status == MODIFIED (normal pipeline processing)
\item {\bf\emph{Always}} : bbUpdate() always calls Process
\item {\bf\emph{Reactive}} : bbSetModifiedStatus() calls bbUpdate()
\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)
+ \item {\bf\emph{Widget}}\texttt{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}
-\item Make a tour of ``complex'' widgets of wxvtk
-\item Explain the role of ProcessMode to update widgets
-\item Explain the creation of complex widgets (containers, contained...)
-\item Explain the ``control'' mechanism in bbi (switch exec commands, e.g. Button)
-\end{enumerate}
-
-
% ==========================================
\subsection{More on ...}
\label{bbi-more-on}
% ==========================================
There are various others user-intended packages :
-
-\paragraph{vtk}
+\begin{itemize}
+\item{vtk} \\
It contains some vtk based image processing filters :
% \begin{enumerate}
- \subparagraph{AppendPolyData}
+
+ \paragraph{AppendPolyData}
Appends one of more polygonal datasets into a single polygonal dataset
- \subparagraph{ConeSource}
+
+ \paragraph{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}
+
+ \paragraph{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.\\
+ Receives : \\
+ - In : an image (vtkImageData*)\\
+ - Diffusion : Difference threshold that stops the diffusion\\
+ Outputs : \\
+ - Out : the isosurface mesh (vtkPolyData*)
+
+ \paragraph{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}
+
+ \paragraph{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) \\
+ Receives : \\
+ - In : an image (vtkImageData*)\\
+ - DilateValue : The dilatation value\\
+ - ErodeValue : The erosion value\\
+ Outputs : \\
+ - Out : the isosurface mesh (vtkPolyData*)
+
+ \paragraph{ImageGaussianSmooth}\\
+ Performs a gaussian convolution of the input image\\
+ Receives : \\
+ - In : an image (vtkImageData*)\\
+ - StdDevX : Standard deviation in X direction\\
+ - StdDevY : Standard deviation in Y direction\\
+ Outputs : \\
+ - Out : the isosurface mesh (vtkPolyData*)
+
+ \paragraph{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)
+ Receives : \\
+ - In : an image (vtkImageData*)\\
+ Outputs : \\
+ - PlaneX : the image plane in X direction (vtkImagePlaneWidget*)\\
+ - PlaneY : the image plane in Y direction (vtkImagePlaneWidget*)\\
+ - PlaneY : the image plane in Z direction (vtkImagePlaneWidget*)\\
+
+ Outputs : \\
+ - Out : the isosurface mesh (vtkPolyData*)
+
+ \paragraph{IsoSurfaceExtractor}
+ Extracts an iso-surface of a 3D image and creates a vtkProp3D object to insert into a 3D scene (e.g. a Viewer3D)
+ Receives : \\
+ - In : an image (vtkImageData*)\\
+ - Isovalue : the isosurface value (double)\\
+ - Colour : Surface colour (vector of 3 doubles)
+ Outputs : \\
+ - Out : the isosurface (vtkProp3D**)
+
+ \paragraph{MarchingCubes}
+ Extracts an iso-surface of an image using the marching cubes algorithm (bbfication of vtkMarchingCubes)\\
+ Receives : \\
+ - In : an image (vtkImageData*)\\
+ - Value : the isosurface value (double)\\
+ Outputs : \\
+ - Out : the isosurface mesh (vtkPolyData*)
+
+ \paragraph{MIPCreator}
+ Creates a Maximum Intensity Projection (MIP) view of a 3D image.\\
+ Receives : \\
+ - In : an image (vtkImageData*)\\
+ - Scale : the Gray scale scaling (float) \\
+ - Shift : the Gray scale shift (float) \\
+ Ouputs : \\
+ - Out : The MIP object (vtkProp3D*) to be plugged into a 3D Viever
+
+ \paragraph{MetaImageReader}
+ Reads .mhd / .mhd image formats (bbfication of vtkMetaImageReader) \\
+ Receives : \\
+ - In : the name of the file to be read (std::string)
+ Outputs :
+ - Out : The image (vtkImageData*)
+
+ \paragraph{SegmentationConnectivity} \\
+ Segmentation with min max threshold and connectivity \\
+ Receives : \\
+ - In : an image (vtkImageData*)\\
+ - PositionXYZ : initial position (std::vector<int>) \\
+ - ThresholdMinMax : min, max threshold values (std::vector<int>) \\
+ Outputs : \\
+ - Out : The image (vtkImageData*)
+
+ \paragraph{SphereSource}
Creates a Sphere
% \end{enumerate}
-\paragraph{itk}
+\item{itk} \\
It contains some itk based image processing filters :
- \subparagraph{BinaryThresholdImageFilter}
+ \paragraph{BinaryThresholdImageFilter}
Binarizes an image by thresholding (generic bbification of itk::BinaryThresholdImageFilter)
- \subparagraph{DICOMSeriesFileNames}
+
+ \paragraph{DICOMSeriesFileNames}
Reads a series from a DICOM directory as a 3D itk image
- \subparagraph{ExtractImageFilter}
+
+ \paragraph{ExtractImageFilter}
Decrease the image size by cropping the image to the selected region bounds (bbification of itk::ExtractImageFilter)
- \subparagraph{ImageProperties}
+
+ \paragraph{ImageProperties}
Outputs different properties of an image (type, dimension, size, spacing, ...)
- \subparagraph{ImageRegion}
+
+ \paragraph{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}
+
+ \paragraph{ImageReader}
+Generic itk image reader
+
+ \paragraph{ImageWriter}
+Generic itk image writer
+
+ \paragraph{ImageSeriesReader}
+Generic itk image series reader.
+
+ \paragraph{ResampleImageFilter}
Resamples an image
-\paragraph{itkvtk}
+
+\item{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 :
+\item{wxvtk} \\
- \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.
+It contains two atomic black boxes.
+
+ \paragraph{Viewer2D}
+ Receives : \\
+ - a \textless vtkImageData* \textgreater (In),\\
+ - an Orientation(0:yz / 1:xz / 2:xy),\\
+ - an initial slice number (Slice).\\
+ Outputs :\\
+ - a \textless vtkRenderer* \textgreater (Renderer)
- \subparagraph{Viewer3D}
+ \paragraph{Viewer3D}
+ Receives :\\
+ - up to 5 Input Actors (\textless vtkProp3D* \textgreater),\\
+ - up to 5 Input Observers (\textless vtkInteractorObserver* \textgreater), \\
+ - a boolean 'Stereo' option, to use Red-Blue filter
+ Outputs :\\
+ - an Interactor (\textless wxVTKRenderWindowInteractor* \textgreater) with which vtk widgets can interact, \\
+ - a Renderer (\textless vtkRenderer* \textgreater) to which actors can be added.
+
+It contains too some sophisticated complex black boxes :
-
+ \paragraph{IsoSurfaceWithControls}
+ Image iso-surface extractor (vtk::IsoSurfaceExtractor) with associated control panel (isovalue, opacity and colour)\\
+ Receives :\\
+ - an initial isovalue (Isovalue)
+ - an initial opacity (Opacity)
+ - an initial colour (Colour)
+ Outputs :\\
+ \textless vtkProp3D* \textgreater (In)\\
+
+ \paragraph{MIPWithControls}
+ Maximum Intensity Projection (MIP) creator (vtk::MIPCreator) with associated control panel (shift and scale) \\
+ Receives :\\
+ - an initial scale (Scale)
+ - an initial shift (Shift)
+ Outputs :\\
+ \textless vtkProp3D* \textgreater (In)\\
+
+\item{wx} \\
+
+Some boxes are the bbfication of usefull xwWidgets, some other ones are more
+sophisticated.
+
+ \paragraph{ColourSelector} Colour Selector dialog (bbfication of wxColourSelector) \\
+ %\begin{verbatim}
+ \texttt{Out} : Colour choosen in format '[0,1] [0,1] [0,1]'
+ %\end{verbatim}
+
+ \paragraph{ColourSelectorButton} A button which displays a colour picker dialog when clicked \\
+ %\begin{verbatim}
+ \texttt{In} :Initial colour \\
+ \texttt{Out} : Colour choosen in format '[0,1] [0,1] [0,1]'
+ %\end{verbatim} \\
+
+ \paragraph{CommandButton} Button which executes bbi commands \\
+ %\begin{verbatim}
+ \texttt{In} : Commands to be executed separated by commas (;). Each single quote (') is replaced by a double quote ("). \\
+ \texttt{Label} : Label of the button \\
+ \texttt{Widget} : Output widget \\
+ %\end{verbatim}
+
+ \paragraph{DirectorySelector} Pops up a directory selection dialog (wxDirDialog)\\
+ %\begin{verbatim}
+ \texttt{DefaultDir} : The default directory\\
+ \texttt{Message} : Message to show on the dialog \\
+ \texttt{Title} : Title of the dialog \\
+ \texttt{Out} : The directory selected by the user\\
+ %\end{verbatim}
+
+ \paragraph{FileSelector} Pops up a file selection dialog for reading or saving (wxFileDialog)\\
+ %\begin{verbatim}
+ \texttt{DefaultDir} : The default directory \\
+ \texttt{DefaultFile} : The default filename \\
+ \texttt{Message} : Message to show on the dialog \\
+ \texttt{OpenSave} : Open for an open dialog (default) / Save for a save dialog\\
+ \texttt{Title} : Title of the dialog \\
+ \texttt{Wildcard} : A wildcard, such as "*.*" or "BMP files (*.bmp)|*.bmp|GIF files (*.gif)|*.gif" \\
+ \texttt{Out} : The file selected by the user \\
+ %\end{verbatim}
+
+ \paragraph{InputText} A zone in which the user can enter a text (wxTextCtrl)\\
+ %\begin{verbatim}
+ \texttt{In} : Initial text (default '')\\
+ \texttt{Title} : Title of the input zone (default '')\\
+ \texttt{WinTitle} : Title of the window (*)\\
+ \texttt{Out} :Current text\\
+ %\end{verbatim}
+
+ \paragraph{LayoutLine} LayoutLine widget (wxBoxSizer)\\
+ %\begin{verbatim}
+ \texttt{Orientation} Orientation (default V), 0=H=HORIZONTAL , 1=V=VERTICAL \\
+ \texttt{Widget}1 widget 1 \\
+ \texttt{Widget2} widget 2 \\
+ \texttt{Widget3} widget 3 \\
+ \texttt{Widget4} widget 4 \\
+ \texttt{Widget5} widget 5 \\
+ \texttt{Widget6} widget 6 \\
+ \texttt{Widget7} widget 7 \\
+ \texttt{Widget8} widget 8 \\
+ \texttt{Widget9} widget 9\\
+ %\end{verbatim}
+
+ \paragraph{LayoutSplit} Widget which splits a window in two fixed size parts (wxSplitterWindow)\\
+ %\begin{verbatim}
+ \texttt{Orientation} : Orientation (default H), 0=H=HORIZONTAL , 1=V=VERTICAL\\
+ \texttt{Proportion} : Proportion (in percent) of the first children in the window\\
+ \texttt{Widget1} : Upper or left widget\\
+ \texttt{Widget2} : Lower or right widget\\
+ %\end{verbatim}
+
+ \paragraph{LayoutTDown} Creates a 'T like' complex container : Down {UpLeft, UpRight} \\
+ %\begin{verbatim}
+ \texttt{Widget1} : UpLeft container\\
+ \texttt{Widget2} : UpRight container\\
+ \texttt{Widget3} : Down container\\
+ \begin{verbatim}
+// ---------------
+// | | |
+// | W1 | W2 |
+// |-------------|
+// | |
+// | W3 |
+// ---------------
+ \end{verbatim}
+
+ \paragraph{LayoutTLeft} Creates a 'T like' complex container : Left {RigthUp, RightDown}\\
+ %\begin{verbatim}
+ \texttt{input} Widget1 : "UpLeft container"\\
+ \texttt{input} Widget2 : "UpRight container"\\
+ \texttt{input} Wigdet3 : "Down container"\\
+ \begin{verbatim}
+// ---------------
+// | | W2 |
+// | W1 | |
+// | |------|
+// | | W3 |
+// | | |
+// ---------------
+ \end{verbatim}
+
+ \paragraph{LayoutTRight} Creates a 'T like' complex container : Right {LeftUp, LeftDown}\\
+ %\begin{verbatim}
+ \texttt{input} Widget1 currentBox.Widget1 "Up container"\\
+ \texttt{input} Widget2 down.Widget1 "DownLeft container"\\
+ \texttt{input} Widget3 down.Widget2 "DownRight container"\\
+ \begin{verbatim}
+// ---------------
+// | | |
+// | W1 | |
+// |------| W2 |
+// | W3 | |
+// | | |
+// ---------------
+ \end{verbatim}
+
+ \paragraph{LayoutTUp} Creates a 'T like' complex container : Up {DownLeft, DownRight} as w1{w2,w3}\\
+ \begin{verbatim}
+ \texttt{ input} Widget1 currentBox.Widget1 "Up"\\
+ \texttt{input} Widget2 down.Widget1 "DownLeft"\\
+ \texttt{input} Widget3 down.Widget2 "DownRight"\\
+
+// ----------------
+// | W1 |
+// | |
+// |------|-------|
+// | W3 | W2 |
+// | | |
+// ----------------
+ \end{verbatim}
+
+ \paragraph{LayoutTab} LayoutTab widget (wxNotebook)\\
+ %\begin{verbatim}
+ \texttt{Orientation} Orientation (default T), 0=T=TOP , 1=R=RIGHT , 2=B=BOTTON , 3=L=LEFT \\
+ \texttt{Widget1} widget 1 \\
+ \texttt{Widget2} widget 2 \\
+ \texttt{Widget3} widget 3 \\
+ \texttt{Widget4} widget 4 \\
+ \texttt{Widget5} widget 5 \\
+ \texttt{Widget6} widget 6 \\
+ \texttt{Widget7} widget 7 \\
+ \texttt{Widget8} widget 8 \\
+ \texttt{Widget9} widget 9 \\
+%\end{verbatim}
+
+ \paragraph{OutputText} Text zone to be inserted into a window (wxStaticText)\\
+ %\begin{verbatim}
+ \texttt{In} Text \\
+ \texttt{Title} Title prepended to the text\\
+ %\end{verbatim}
+
+ \paragraph{RadioButton} RadioButton group widget 0-9 entries\\
+ %\begin{verbatim}
+ \texttt{In} Set initial item \\
+ \texttt{In0} option 0\\
+ \texttt{In1} option 1\\
+ \texttt{In2} option 2\\
+ \texttt{In3} option 3\\
+ \texttt{In4} option 4\\
+ \texttt{In5} option 5 \\
+ \texttt{In6} option 6 \\
+ \texttt{In7} option 7 \\
+ \texttt{In8} option 8 \\
+ \texttt{In9} option 9 \\
+ \texttt{Title} Title of the widget (default '')\\
+ \texttt{Out} Number of the selected Item
+ %\end{verbatim}
+
+ \paragraph{Slider} Slider widget (wxSlider)\\
+ %\begin{verbatim}
+ \texttt{ChangeResolution} Enables the user to change the slider resolution (default FALSE) \\
+ \texttt{In} Initial slider position(default 0) \\
+ \texttt{Label} Show slider labels ? (default FALSE) \\
+ \texttt{Max} Maximum value of the slider (default 500)\\
+ \texttt{Min} Minimum value of the slider (default 0)\\
+ \texttt{Orientation} Orientation : (default H) 0=H=HORIZONTAL, 1=V=VERTICAL\\
+ \texttt{ReactiveOnTrack} Slider sends info when track moves (default 0 = no)\\
+ \texttt{Title} Title shown above the slider (default '')\\
+ %\end{verbatim}
+\end{itemize}
% ==========================================
\subsubsection{Pipeline processing}
\label{bbi-more-on-pipeline-processing}
% ==========================================
-
+\begin{itemize}
+\item the ``control'' mechanism in bbi (switch exec commands, e.g. Button)
+\item the role of ProcessMode to update widgets.
+\end{itemize}
% ==========================================
\subsubsection{Complex black boxes}
\label{bbi-more-on-complex-black-boxes}
+Creation of complex widgets (containers, contained...)
%\subsubsection{Advanced issues}
%\paragraph{Reducing the number of inputs of a box}
If needed the boxes
connected to its inputs
are also processed recursively (pipeline processing).\\ \hline
+\texttt{exec} & \texttt{freeze} &
+ allows to block execution commands while keeping definition commands active.\\ \hline
+\texttt{exec} & \texttt{unfreeze} &
+ turns back to 'normal' mode.\\ \hline
\end{tabular}
\end{table}
% ==========================================
\texttt{load} & \texttt{<package-name>} &
Loads the package \texttt{package-name}\\ \hline
+\texttt{include} & \texttt{<package-name>} &
+Loads the package \texttt{package-name} and includes all the complex black boxes that comes with it \\ \hline
+
\texttt{unload} & \texttt{<package-name>}&
Unloads the package \texttt{package-name}.
The package must have been previously loaded.