X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fdoc%2FbbtkUsersGuide%2FbbtkUsersGuide.tex;h=045b66bd9484276c5b16c7bd870c7a41e55d1cbf;hb=af5fbba42a9b663e2ce1e5fbbe71e904e570a089;hp=62590e0bba7bf6b3f776371087a8eb40e1dd4f75;hpb=f303df63e2a2e33d698c974858f288058d980ae4;p=bbtk.git diff --git a/kernel/doc/bbtkUsersGuide/bbtkUsersGuide.tex b/kernel/doc/bbtkUsersGuide/bbtkUsersGuide.tex index 62590e0..045b66b 100644 --- a/kernel/doc/bbtkUsersGuide/bbtkUsersGuide.tex +++ b/kernel/doc/bbtkUsersGuide/bbtkUsersGuide.tex @@ -10,6 +10,9 @@ \tableofcontents % ========================================== +\listoftables + +\listoffigures % ========================================== %\section*{Abstract} @@ -38,7 +41,7 @@ I would add something very important to this definition : not only the inputs and outputs are of interest but also \emph{what the box does} ! Hence, I would say that a black box is any \emph{\bf documented} -component of a system, letting know the user +component of a system, letting the user know \emph{\bf what} the box is supposed to do and \emph{\bf how to use it} but not \emph{\bf how it does it}. @@ -67,7 +70,7 @@ I let you think about this\dots) Of course, symbolic data attached to box can be {\bf queried}: what are the inputs/outputs of the box ? -what are their type ? description ? etc. +what are their type ? their description ? etc. This allows {\bf automatic documentation} of boxes. The abstract definition of black boxes is the most basic @@ -108,33 +111,44 @@ have been written by different persons, using different libraries, etc. % ========================================== \BBTK includes: \begin{itemize} -\item A \CPP {\bf\emph{library}} - called \bbtk - which defines a framework -(abstract classes) to develop black boxes and to store them into -dynamic libraries, called black box \emph{packages}. -\item Different {\bf\emph{black box packages}}: -\begin{itemize} -\item {\bf\emph{std}}: the 'standard' package including basic useful boxes. -\item {\bf\emph{wx}}: basic graphical interface elements (widgets: sliders, buttons, etc. based on the \texttt{wxWidgets} library). -\item {\bf\emph{itk}}: the basic image processing package, based on the \texttt{itk} library. -\item {\bf\emph{vtk}}: the basic image and surfaces processing package, based on the \texttt{vtk} library. -\item {\bf\emph{wxvtk}}: widget boxes based on the \texttt{vtk} library. -\item {\bf\emph{itkvtk}}: boxes to convert \texttt{itk} structures into \texttt{vtk} structures and conversally. -\end{itemize} -\item An {\bf\emph{interpreter}}, called \bbi, which allows to -load black box packages and to define and execute -processing chains by connecting various black boxes of the already loaded packages. -\item {\bf\emph{Utilities}}: -\begin{itemize} -\item \bbfy generates the \CPP code of a black box from a -description file written in \texttt{xml}. -%\item \bbdoc generates the html documentation of a black box package -%(author, description, description of its black boxes: -%author, description, inputs, outputs, and so on). -\item \bbCreatePackage allows to create the basic file architecture -to start the development of a new black box package. -\end{itemize} + \item A \CPP {\bf\emph{library}} - called \bbtk - which defines a framework + (abstract classes) to develop black boxes and to store them into + dynamic libraries, called black box \emph{packages}. + \item Different {\bf\emph{black box packages}}: + \begin{itemize} + \item {\bf\emph{std}}: the 'standard' package including basic useful boxes. + \item {\bf\emph{wx}}: basic graphical interface elements (widgets: sliders, buttons, etc. based on the \texttt{wxWidgets} library). + \item {\bf\emph{itk}}: the basic image processing package, based on the \texttt{itk} library. + \item {\bf\emph{vtk}}: the basic image and surfaces processing package, based on the \texttt{vtk} library. + \item {\bf\emph{wxvtk}}: widget boxes based on the \texttt{vtk} library. + \item {\bf\emph{itkvtk}}: boxes to convert \texttt{itk} structures into \texttt{vtk} structures and conversally. + \end{itemize} + \item A {\bf\emph{Developement environment}}, called bbStudio, which provides + \begin{itemize} + \item An online {\bf\emph{script editor}}, called bbed + \item A powerfull {\bf\emph{Help environment}}, called bbhelp + whith integrated + \begin{itemize} + \item Online documentation scaning + \item Retreiving boxes on various criterions + \item Checking Demo and examples + \end{itemize} + + \item An {\bf\emph{interpreter}}, called \bbi, which allows to + load black box packages and to define and execute + processing chains by connecting various black boxes of the already loaded packages. + \item {\bf\emph{Utilities}}: + \begin{itemize} + \item \bbfy generates the \CPP code of a black box from a + description file written in \texttt{xml}. + %\item \bbdoc generates the html documentation of a black box package + %(author, description, description of its black boxes: + %author, description, inputs, outputs, and so on). + \item \bbCreatePackage allows to create the basic file architecture + to start the development of a new black box package. + \end{itemize} + \end{itemize} \end{itemize} - The general architecture of \BBTK is shown in figure \ref{bb-architecture}. @@ -149,19 +163,22 @@ is shown in figure \ref{bb-architecture}. \subsection{Structure of this guide} % ========================================== -This guide is divided into two parts. +This guide is divided into three parts. + +The first part (\ref{bbStudio}) is a brief presentation of the very intuitive Development +environment, \bbStudio. -The first 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 black boxes of existing packages. -The second part (\ref{cpp}) explains how to +The third part (\ref{cpp}) explains how to use the black box toolkit framework in \CPP code, typically to develop large applications which involve complex graphical interfaces. - + % ========================================== % ========================================== @@ -170,16 +187,162 @@ involve complex graphical interfaces. % ========================================== % ========================================== \vspace{0.5cm}\hrule -\section{The black box interpreter (bbi)} -\label{bbi} +\section{The Development environment (bbStudio)} +\label{bbStudio} + +Just run it, typing in a console \texttt{bbed}. +You'll get something like in figure +\ref{bbi-fig-bbStudio-gui} +(the exact appearance of \bbStudio is system and \bbtk version dependent) + +\begin{figure}[!ht] +\caption{\label{bbi-fig-bbStudio-gui}The bbStudio Development environment interface} +\begin{center} +\includegraphics[width=0.7\textwidth]{bbStudioMainPage.png} +\end{center} +\end{figure} + +All the entries of this Help 'bookmark' are self-explanatory : + + \begin{itemize} + \item {\bf\emph{Wiki}}: Direct link to the bbtk Wiki (intranet only, right now, www + later). + \item {\bf\emph{Demo}}: Link to some demonstrations. + \item {\bf\emph{User's Guide}}: Step to step How-to for user who just wants to create his own + application, just using already existing boxes. + \item {\bf\emph{Package Developper's Guide}}: Step to step How-to for user who wants to create his own + black boxes. + \item {\bf\emph{Developper's Guide}}: Sorry, not yet written. + \item {\bf\emph{Reference Manual}}: Sorry, not yet written. + \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}} (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} + +% ========================================== + +\begin{table}[!ht] +\caption{\label{kinds} \texttt{Black Box} kinds} +\small +\begin{tabular}{|ll|} +\hline +\texttt{Kind name} & : Meaning \\ \hline \\ \hline +\texttt{ADAPTOR} & : Adaptor Box \\ \hline +\texttt{DEFAULT\_ADAPTOR} & : \\ \hline +\texttt{WIDGET\_ADAPTOR} & : \\ \hline +\texttt{DEFAULT\_WIDGET\_ADAPTOR} & : \\ \hline +\texttt{GUI} & : \\ \hline +\texttt{DEFAULT\_GUI} & : \\ \hline +\texttt{ALL} & : If kind='ALL' then sets the level for all kinds \\ \hline +\end{tabular} +\end{table} + + +% ========================================== +% ========================================== +% ========================================== +% ========================================== % ========================================== -%\subsection{Structure of this part} % ========================================== +\vspace{0.5cm}\hrule +\section{The script manager} +\label{bb0} +% ========================================== + + Call it with the bookmark \emph{File}. + + +\begin{figure}[!ht] +\caption{\label{bbi-fig-bbStudio-file0}The bbStudio script manager} +\begin{center} +\includegraphics[width=0.7\textwidth]{bbFile0.png} +\end{center} +\end{figure} + +Using the lower tool bar, you can : -Using the black box interpreter is very simple. -Everything is done with only a few commands. +\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{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 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. @@ -214,7 +377,8 @@ Use it as a reference. \subsubsection{Creating and executing black boxes} % ========================================== -To run the black box interpreter, +To learn interactivelly the script language features, you can use the black box +interpreter : open a console and type \texttt{bbi} or double click on the application icon. You get a window which looks like the one in figure @@ -226,17 +390,17 @@ graphical interface but a simple prompt}. \begin{figure}[!ht] \caption{\label{bbi-fig-bbi-gui}The black box interpreter interface} \begin{center} -\includegraphics[width=0.7\textwidth]{bbi-gui.png} +\includegraphics[width=0.7\textwidth]{bbi-gui0.png} \end{center} \end{figure} The 'Command' tab is subdivided into two parts : one single line zone at the bottom in which you can enter your commands and one multiple line zone in which \bbi prints out the result of your commands. - +, just using already existing boxes. Try typing in the input zone (in this manual, -the commands entered by the user will be preceded by a prompt '>') : +the commands entered by the user will be preceded by a prompt \textgreater) : \begin{verbatim} > help \end{verbatim} @@ -248,6 +412,7 @@ Available commands: category config connect + debug define delete description @@ -259,9 +424,11 @@ Available commands: include index input + kind load message new + newgui output package print @@ -371,14 +538,19 @@ you get something like: \begin{verbatim} std Add - ... + ConcatStrings + Configuration + Div + ... + StringRelay + StringSelect user workspace > \end{verbatim} Now \bbi knows the package \texttt{std} and the black boxes it provides, -such as the \texttt{'Add'} box. Remark that the +such as the \texttt{'Add'} box, the \texttt{'ConcatStrings'}. Remark that the content of \texttt{std} may vary from one version to another as new black boxes might be added to it. If you type: @@ -389,17 +561,17 @@ If you type: You get: \begin{verbatim} Black Box - Adds its inputs - By: laurent.guigues at creatis.insa-lyon.fr - Categories : atomic box;math; - * Inputs: - 'BoxExecute' : Any signal received by this input executes the box - 'BoxProcessMode' : Sets the processing mode of the box (Pipeline | Always | Reactive) - 'In1' : First number to add - 'In2' : Second number to add + Adds its inputs + By : laurent.guigues@creatis.insa-lyon.fr + Categories : atomic box;math; + * Inputs : + 'BoxExecute' [signal] : Any signal received by this input executes the box + 'BoxProcessMode' [] : Sets the processing mode of the box (Pipeline | Always | Reactive) + 'In1' [] : First number to add + 'In2' [] : Second number to add * Outputs : - 'BoxChange' : Signal modifications of the box - 'Out' : Result'In1' : First number to add + 'BoxChange' [signal] : Signals modifications of the box + 'Out' [] : Result \end{verbatim} Like previously, @@ -427,13 +599,13 @@ the command \texttt{new}: 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 make the difference between box \emph{types} -and \emph{instances} of box types. -The \texttt{Add} box of the package \texttt{std} is in fact -a \emph{type} of box, like \texttt{int} is a type of data +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. @@ -455,8 +627,8 @@ Complex Black Box 'a' \end{verbatim} -which means that \bbi's workspace now contains a black box -of type \texttt{std::Add} and name \texttt{a}. +which means that \bbi workspace now contains a black box named \texttt{a}, +of type \texttt{std::Add}. Now look back at the help on \texttt{Add} boxes: you can see that this type of box has two inputs, @@ -491,8 +663,10 @@ To process this special substrings, \bbi does: \item Converts the output of the box to a string if possible (see below) \item Substitutes the result in the string to print +\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 @@ -525,7 +699,7 @@ Good bye ! \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}. @@ -535,16 +709,29 @@ Good bye ! \item A particular black box type (with full description) if you type \texttt{help }. In particular, \texttt{help workspace} displays information on the content of the \texttt{'workspace'} black box, which stores the boxes created by the user (by \texttt{new}). \end{itemize} %\item \texttt{list} displays the list of black box instances created so far (by \texttt{new}). -\item \texttt{new} creates an instance of a black box. -\item \texttt{set} sets the value of an input of a black box. +\item \texttt{new} : creates an instance of a black box. +\item \texttt{set} : sets the value of an input of a black box. \item In all \bbi, to reference the input called \texttt{i} of a black box called \texttt{b} you must type \texttt{'b.i'}. The same syntax holds for outputs. -\item \texttt{print} prints a string, substituting each substring of the form \$b.o\$ by the value of the output \texttt{o} of the black box \texttt{b}. -\item \texttt{exec} runs the process of a box if needed. -\item \texttt{quit} quits \bbi. +\item \texttt{print} : prints a string, substituting each substring of the form \$b.o\$ by the value of the output \texttt{o} of the black box \texttt{b}. Note that an +implicit trailing 'new line character' is added at the final string. +\item \texttt{exec} : runs the process of a box if needed. +\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} % ========================================== % ========================================== @@ -552,8 +739,6 @@ The same syntax holds for outputs. \label{bbi-connecting-black-boxes} % ========================================== -LG : THE GUIDE IS UP TO DATE UNTIL HERE - \BBTK allows to create and execute processing chains, also called \emph{pipelines}, @@ -579,6 +764,7 @@ A simple pipeline which adds 3 numbers} \end{center} \end{figure} + The \bbi instructions to create and execute this pipeline are: \begin{verbatim} > new Add a @@ -588,12 +774,17 @@ The \bbi instructions to create and execute this pipeline are: > 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 its inputs and the last one -executes it and prints its output. +the next three set \texttt{a} and \texttt{b} black boxes inputs and the last one +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 @@ -605,10 +796,57 @@ This pipeline mechanism can recurse into arbitrary long 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, -but you can do more, thanks to particular black boxes called {\bf adaptors}. +but you can do more, thanks to particular (hidden) black boxes called {\bf adaptors}. An adaptor is a black box which has at least one input, called \texttt{In}, and at least one ouput called \texttt{Out} and whose role is to convert @@ -810,6 +1048,11 @@ and you can use it like any other box, for example type: \end{verbatim} +As a side note, we can say that, for consistency reasons, it would have been better to name +\texttt{In1}, \texttt{In2} and \texttt{In3} the inputs of the black box \texttt{Add3}, +since all the 'natural entry' of a box is named \texttt{In}, or\texttt{In}x if there are more than one 'natural +entry'. + % ========================================== \hrule \paragraph{Summary} @@ -838,11 +1081,12 @@ into a text file and afterwards include that file in \bbi. Doing this, you start writing \bbi scripts. The conventionnal extension for such scripts is \texttt{bbs} (black box script). +For consistency reasons, you are requested to prepend \texttt{bb} to the name. For example, the \texttt{Add3} complex box we previously worked on -can be defined in the \texttt{Add3.bbs} file: +can be defined in the \texttt{bbAdd3.bbs} file: -\begin{file}{Add3.bbs} +\begin{file}{bbAdd3.bbs} \begin{verbatim} # Defines the Add3 black box which adds 3 doubles load std @@ -870,7 +1114,7 @@ are considered as comments by \bbi. To use this file in \bbi, use the \texttt{include} command: \begin{verbatim} -> include Add3.bbs +> include bbAdd3.bbs > help Add3 Complex Black Box adds 3 doubles @@ -896,7 +1140,7 @@ If the file has the \texttt{bbs} extension, you can ommit it and just type: Of course, you can include script files in other script files, like in the following example: -\begin{file}{Add4.bbs} +\begin{file}{bbAdd4.bbs} \begin{verbatim} # Defines the Add4 black box which adds 4 doubles include Add3 @@ -916,19 +1160,35 @@ endefine \end{verbatim} \end{file} -TO DO: +% ========================================== +\hrule +\paragraph{Naming Conventions} +%\hrule -- naming conventions: one cbb per file with the same name -- search paths +\hrule +% ========================================== +\begin{itemize} +\item +File names: +For consistency reasons, you are requested to prepend \texttt{bb}, and postpone an extention \texttt{.bbs}, +to the names of the files that hold a \texttt{complex black box} definition. +For example, the \texttt{Add3} complex box we previously worked on +can be defined in the \texttt{bbAdd3.bbs} file. +\item +Search Paths +\end{itemize} % ========================================== \hrule + \paragraph{Summary} %\hrule \begin{itemize} \item The \texttt{include} command allows to include a script file in \bbi. -\item Lines starting with a \texttt{\#} are treated as comments in \bbi scripts. +\item Lines starting with a \texttt{\#} or with a \texttt{\//} are treated as comments in \bbi scripts. +\item Lines between a line starting with a \texttt{\//*} an a line starting with a \texttt{*\//} are treated as comments in \bbi scripts. \end{itemize} + \hrule % ========================================== @@ -1070,6 +1330,11 @@ between double quotes, e.g. \texttt{"parameter with white spaces = gnu's not uni \label{bbi-widget} % ========================================== +% ========================================== +\subsubsection{Overwiew} +\label{bbi-overview} +% ========================================== + If \bbi is compiled in graphical mode (option \texttt{BUILD\_bbi\_GRAPHICAL} of \cmake, requires \wx), then you can use special black boxes which are @@ -1080,7 +1345,7 @@ such as buttons, sliders, file open/save dialogs, etc. As first example, type the following commands in \bbi: \begin{verbatim} > load wx -> new TextCtrl t +> new InputText t > print $t.Out$\n \end{verbatim} @@ -1091,29 +1356,33 @@ the \texttt{print} command. Type \texttt{help wx}, you get something like: \begin{verbatim} -Package wx v1.0.0- eduardo.davila/laurent.guigues@creatis.insa-lyon.fr - Basic graphical interface elements (slider, button ...) based on wxWidgets - Black boxes: - Button : Button that gives a string - FileDialog : FileDialog widget (wxFileDialog) - RadioButton : RadioButton group widget (wxRadioButton) 0-9 entries - Sizer : Sizer widget (wxSizer) - Slider : Slider widget (wxSlider) - Split : Split widget (wxSplitterWindow) - StaticText : wxWidget Static text - TextCtrl : TextCtrl widget (wxTextCtrl) + Package wx v1.0.0- info-dev@creatis.insa-lyon.fr + Basic graphical interface elements (sliders, buttons ...) based on wxWidgets + Black boxes : + ColourSelector : Colour Selector dialog (bbfication of wxColourSele... + ColourSelectorButton : A button which displays a colour picker dialog whe... + CommandButton : Button which executes bbi commands + DirectorySelector : Pops up a directory selection dialog (wxDirDialog) + FileSelector : Pops up a file selection dialog for reading or sav... + InputText : A zone in which the user can enter a text (wxTextC... + LayoutLine : LayoutLine widget (wxBoxSizer) + LayoutSplit : Widget which splits a window in two fixed size par... + LayoutTab : LayoutTab widget (wxNotebook) + OutputText : Text zone to be inserted into a window (wxStaticTe... + RadioButton : RadioButton group widget 0-9 entries + Slider : Slider widget (wxSlider) \end{verbatim} You can reproduce the same experiment as above using a -\texttt{Slider} or a \texttt{FileDialog} rather than a \texttt{TextCtrl}. +\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. -The \texttt{TextCtrl}, \texttt{FileDialog} or \texttt{Slider} 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 made to +``container'' widgets are of another kind: they are designed to contain other widgets in order to build larger dialog boxes. -For example, the \texttt{Split} widget is a container which +For example, the \texttt{LayoutSplit} widget is a container which ``splits'' horizontally a window into two parts, each part including another widget. The size of the two parts can be adjusted by the user thanks @@ -1133,9 +1402,9 @@ load wx new Slider s1 new Slider s2 -new Split s -connect s.Child s1.Parent -connect s.Child s2.Parent +new LayoutSplit s +connect s1.Widget s.Widget1 +connect s2.Widget s.Widget2 print s1=$s1.Out$\\n print s2=$s2.Out$\\n @@ -1143,50 +1412,87 @@ print s2=$s2.Out$\\n \end{file} First, the two sliders \texttt{s1} and \texttt{s2} are created. -A \texttt{Split} box \texttt{s} is also created. +A \texttt{LayoutSplit} box \texttt{s} is also created. The \texttt{connect} commands then ``includes'' the sliders in the split ``container''. -The input \texttt{Parent} is common to all widget boxes: +The input \texttt{Widget} is common to all widget boxes: every widget can be inserted into another widget. -The output \texttt{Child} is specific of \emph{container} +The outputs \texttt{Widget1},\texttt{Widget2} are specific of \emph{container} widgets (in \bbi type \texttt{help Slider}: -you will see the input \texttt{Parent}; -type \texttt{help Split}: -you will see the input \texttt{Parent} -and the output \texttt{Child}). -When you connect the \texttt{Child} output of a container -to the \texttt{Parent} input of a widget, +you will see the output \texttt{Widget}; +type \texttt{help LayoutSplit}: +you will see the inputs \texttt{Widget1} and \texttt{Widget2} +and the output \texttt{Widget}). +When you connect the \texttt{Widget} output of a container +to the \texttt{Widget}i input of a widget, you order to include the widget in the container. Of course, the order of connection is important. In our case, the slider \texttt{s1} is included first, then the slider \texttt{s2}: \texttt{s1} will be placed -on top of \texttt{s2} (the \texttt{Split} box is +on top of \texttt{s2} (the \texttt{LayoutSplit} box is implemented that way, but this is arbitrary choice). -For the moment, there are only \emph{two} container widgets in the \texttt{wx} package: -the \texttt{Split} widget we just described and the \texttt{Sizer} -widget, which can have multiple children and +Right now, there are only \emph{three} container widgets in the \texttt{wx} package: +the \texttt{LayoutSplit} widget we just described, the \texttt{LayoutLine} , and the \texttt{LayoutTab} +widget. + +The \texttt{LayoutLine} widget can have multiple children and divides its window into as much parts as children, each part of equal size. -The orientation of the sizer can be changed by the input \texttt{Orientation}. +The orientation of the \texttt{LayoutSplit} or of the \texttt{LayoutLine} can be changed by the input \texttt{Orientation}. See the example \texttt{test/testSizer.bbs}. With only those two containers you can already create complex dialog boxes (of course containers can be nested, which leads to tree-like structures of widgets). -See the script \texttt{test/testSizerSplit.bbs} for an example. +See the script \texttt{bbtk/share/bbtk/bbs/wx/appli/ExampleLayoutSplit.bbs} for an example. + +The \texttt{LayoutTab} widget is based on the \texttt{wxNotebook.} One word about a special widget in the package \texttt{wx}: the \texttt{Button}... to be continued. +% ========================================== +\subsubsection{Deeper in the boxes} +\label{bbi-deep-box} +% ========================================== + +Any widget box has two mandatory Outputs : -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} +\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 \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} + +Any widget box has two mandatory Inputs : +\begin{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() 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} +\end{itemize} + +Any widget box has five Inputs, that will be dealt with only if the box is not connected to the \emph{Widget}i of any \emph{Layout box} : +\begin{itemize} + \item {\bf\emph{WinHeight}} : Height of the window + \item {\bf\emph{WinWidth}} : Width of the window + \item {\bf\emph{WinTitle}} : Title of the window + \item {\bf\emph{WinClose}} : Any received signal closes the window + \item {\bf\emph{WinHide}} : Any received signal hides the window + \item {\bf\emph{WinDialog}} : When set to 'true', creates a \emph{dialog window}, that blocks the pipeline until it is closed (\emph{modal}) +\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\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} % ========================================== @@ -1199,14 +1505,391 @@ TO DO: \label{bbi-more-on-packages} % ========================================== +There are various others user-intended packages : +\begin{itemize} +\item{vtk} \\ +It contains some vtk based image processing filters : +% \begin{enumerate} + + \paragraph{AppendPolyData} + Appends one of more polygonal datasets into a single polygonal dataset + + \paragraph{ConeSource} + Creates a Cone + + \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 + + \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) \\ + - ThresholdMinMax : min, max threshold values (std::vector) \\ + Outputs : \\ + - Out : The image (vtkImageData*) + + \paragraph{SphereSource} + Creates a Sphere +% \end{enumerate} + +\item{itk} \\ +It contains some itk based image processing filters : + + \paragraph{BinaryThresholdImageFilter} + Binarizes an image by thresholding (generic bbification of itk::BinaryThresholdImageFilter) + + \paragraph{DICOMSeriesFileNames} + Reads a series from a DICOM directory as a 3D itk image + + \paragraph{ExtractImageFilter} + Decrease the image size by cropping the image to the selected region bounds (bbification of itk::ExtractImageFilter) + + \paragraph{ImageProperties} + Outputs different properties of an image (type, dimension, size, spacing, ...) + + \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) + + \paragraph{ImageReader} +Generic itk image reader + + \paragraph{ImageWriter} +Generic itk image writer + + \paragraph{ImageSeriesReader} +Generic itk image series reader. + + \paragraph{ResampleImageFilter} +Resamples an image + +\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. + +\item{wxvtk} \\ + +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) + + \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} @@ -1315,6 +1998,10 @@ Executes the box named \texttt{box-name}. 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} % ========================================== @@ -1361,6 +2048,15 @@ exactly like if you were typing its content at the place were the \texttt{load} & \texttt{} & Loads the package \texttt{package-name}\\ \hline +\texttt{include} & \texttt{} & +Loads the package \texttt{package-name} and includes all the complex black boxes that comes with it \\ \hline + +\texttt{kind} & \texttt{} & +Specifies the \texttt{kind} of the complex black boxes you are describing \\ \hline + + + + \texttt{unload} & \texttt{}& Unloads the package \texttt{package-name}. The package must have been previously loaded. @@ -1405,7 +2101,6 @@ Starts the definition of a complex black box of type \texttt{endefine} & - & Ends the definition of a complex black box type\\ \hline - \texttt{author} & \texttt{} & Sets the author(s) of the complex black box currently being defined \\ \hline @@ -1413,18 +2108,17 @@ Sets the author(s) of the complex black box currently being defined \\ \hline Sets the description of the complex black box currently being defined \\ \hline - \texttt{input} & \texttt{} \texttt{} \texttt{} & Defines a new input for the current complex black box, named \texttt{name}. It is defined as corresponding to -the input \texttt{input} of the box \texttt{box}. +the input \texttt{input} of the box \texttt{box}. + \texttt{} is the help string for the new input. The box \texttt{box} must already have been created in the complex box and of course have an input named \texttt{input}. \\ \hline - \texttt{output} & \texttt{} \texttt{} \texttt{} & Defines a new output for the current complex black box, named \texttt{name}.