VTK/CanvasAPI: Difference between revisions
(Added some initial notes and a diagram.) |
(Added some details about function pointers.) |
||
Line 1: | Line 1: | ||
After recent discussions I have been prototyping a simple canvas style API for VTK. | After recent discussions I have been prototyping a simple canvas style API for VTK. The diagram below shows a rough equivalence to the QGraphicsView framework present in Qt, but with a much more basic API at this stage. | ||
<graphviz renderer='neato' caption='Chart Classes'> | <graphviz renderer='neato' caption='Chart Classes'> | ||
Line 44: | Line 44: | ||
} | } | ||
</graphviz> | </graphviz> | ||
== Using Function Pointers == | |||
It seems that there is a wish to be able to declare functions that override certain aspects of rendering. In a traditional C++ API this would normally be accomplished by inheritance and overriding of a virtual function. The same thing can be accomplished by supplying function pointers without needing to derive a class. | |||
The QtConcurrent API uses function pointers, and boost_bind optionally. Check out the relevant sections of their [http://doc.qt.nokia.com/4.5/qtconcurrentmap.html API documentation here] for more details. So a specific signature is required for the function pointer, but this could optionally be created by boost_bind (or possibly boost_lambda). | |||
As an example the equivalent code would be. | |||
<source lang="cpp">#include <mymark.h> | |||
double scalarFunction(int index); | |||
int main() | |||
{ | |||
MyMark *mark = new MyMark; | |||
mark->SetScalarFunctor(scalarFunction); | |||
} | |||
double scalarFunction(int index) | |||
{ | |||
return index * 3.0 / (index - 1.0); | |||
}</source> | |||
Compared with a more traditional inherited class API. | |||
<source lang="cpp">#include <mymark.h> | |||
class InheritedMark : public MyMark | |||
{ | |||
protected: | |||
virtual double scalarFunction(int index); | |||
}; | |||
int main() | |||
{ | |||
InheritedMark *mark = new InheritedMark; | |||
} | |||
double InheritedMark::scalarFunction(int index) | |||
{ | |||
return index * 3.0 / (index - 1.0); | |||
}</source> |
Revision as of 18:48, 11 November 2009
After recent discussions I have been prototyping a simple canvas style API for VTK. The diagram below shows a rough equivalence to the QGraphicsView framework present in Qt, but with a much more basic API at this stage.
Using Function Pointers
It seems that there is a wish to be able to declare functions that override certain aspects of rendering. In a traditional C++ API this would normally be accomplished by inheritance and overriding of a virtual function. The same thing can be accomplished by supplying function pointers without needing to derive a class.
The QtConcurrent API uses function pointers, and boost_bind optionally. Check out the relevant sections of their API documentation here for more details. So a specific signature is required for the function pointer, but this could optionally be created by boost_bind (or possibly boost_lambda).
As an example the equivalent code would be.
<source lang="cpp">#include <mymark.h>
double scalarFunction(int index);
int main() {
MyMark *mark = new MyMark; mark->SetScalarFunctor(scalarFunction);
}
double scalarFunction(int index) {
return index * 3.0 / (index - 1.0);
}</source>
Compared with a more traditional inherited class API.
<source lang="cpp">#include <mymark.h>
class InheritedMark : public MyMark { protected:
virtual double scalarFunction(int index);
};
int main() {
InheritedMark *mark = new InheritedMark;
}
double InheritedMark::scalarFunction(int index) {
return index * 3.0 / (index - 1.0);
}</source>