1 /*=========================================================================
4 Module: $RCSfile: bbtkComplexBlackBoxDescriptor.h,v $
6 Date: $Date: 2008/04/08 06:59:30 $
7 Version: $Revision: 1.3 $
9 Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10 l'Image). All rights reserved. See Doc/License.txt or
11 http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details.
13 This software is distributed WITHOUT ANY WARRANTY; without even
14 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 PURPOSE. See the above copyright notices for more information.
17 =========================================================================*/
21 * \brief Class bbtk::ComplexBlackBoxDescriptor : describes a ComplexBlackBox (constituents, connections) and is able to create an instance of it.
24 * \class bbtk::ComplexBlackBoxDescriptor
25 * \brief Describes a ComplexBlackBox (constituents, connections) and is able to create an instance of it.
28 #ifndef __bbtkComplexBlackBoxDescriptor_h__
29 #define __bbtkComplexBlackBoxDescriptor_h__
31 #include "bbtkBlackBoxDescriptor.h"
32 #include "bbtkComplexBlackBoxInputDescriptor.h"
33 #include "bbtkComplexBlackBoxOutputDescriptor.h"
34 #include "bbtkFactory.h"
40 class ComplexBlackBox;
42 //==========================================================================
43 class BBTK_EXPORT ComplexBlackBoxDescriptor : public bbtk::BlackBoxDescriptor
46 friend class ComplexBlackBox;
47 /// Default ctor with name
48 ComplexBlackBoxDescriptor(const std::string& name);
50 ~ComplexBlackBoxDescriptor();
52 /// Sets the factory used
53 void SetFactory(Factory* f) { mFactory = f; }
54 /// Gets the factory used
55 Factory* GetFactory() { return mFactory; }
56 /// Gets the factory used (const)
57 const Factory* GetFactory() const { return mFactory; }
59 /// Creates an instance of name <name> of the ComplexBlackBox of which this is the descriptor
60 virtual BlackBox* CreateInstance(const std::string& name);
62 /// Adds a black box to the complex box
63 /// Needs a factory set !
64 void Add ( const std::string& type,
65 const std::string& name
67 /// Connects two black boxes of the complex box
68 /// Needs a factory set !
69 void Connect ( const std::string& from,
70 const std::string& output,
71 const std::string& to,
72 const std::string& input
74 /// Defines an input of the complex box
75 void DefineInput ( const std::string& name,
76 const std::string& box,
77 const std::string& input,
78 const std::string& help);
79 /// Defines an output of the complex box
80 void DefineOutput ( const std::string& name,
81 const std::string& box,
82 const std::string& output,
83 const std::string& help);
86 /// Sets the name of the script file from which it is defined
87 void SetScriptFileName(const std::string& n) { mScriptFileName = n; }
88 /// Gets the name of the script file from which it is defined
89 std::string GetScriptFileName() const { return mScriptFileName; }
92 void AddToExecutionList( const std::string& box );
94 ComplexBlackBox* GetPrototype() { return mPrototype; }
95 void PrintBlackBoxes();
97 /// Prints help on the black box
98 void GetHelp(bool full=true) const;
100 /// Writes html formatted help into the output file stream.
101 /// detail and level are used for graphical representation of
102 /// complex black boxes (see ComplexBlackBox::InsertHTMLGraph)
103 /// output_dir is the directory in which to write auxilliary files
104 /// (.dot/.png/.cmap)
105 void InsertHtmlHelp ( std::ofstream& s,
106 int detail, int level,
107 const std::string& output_dir = "",
108 bool relative_link = false);
110 /// Generates a png image representing the pipeline graph of the
111 /// complex box and writes html code to insert it
112 /// into the output file stream.
114 /// level : depth of nested complex boxes graph development
115 /// (0:only this box level
116 /// output_dir is the directory in which to write the files
117 /// (.dot/.png/.cmap)
118 void InsertHTMLGraph( std::ofstream& s,
119 int detail, int level,
120 const std::string& output_dir = "",
121 bool relative_link = false );
126 /// Default ctor is private (must have name and factory)
127 ComplexBlackBoxDescriptor() {}
130 /// The complex box in which boxes and connections are stored
131 ComplexBlackBox* mPrototype;
132 /// The name of the script file from which it was created
133 std::string mScriptFileName;
136 // class ComplexBlackBoxDescriptor
137 //==========================================================================