Re: Oplot
Ole Jacob Hagen <[email protected]> Tue, 30 Nov 2004 10:26:42 +0100
| Newsgroups | gmane.comp.gnu.octave.graphics |
|---|---|
| Message-ID | <[email protected]> |
Hi, Shai.
Yes, thanks to Shai, we have contour-plot in Oplot. ;-)
Have you looked at Props-source? And it's usage in the following classes :
OpFigureManager (Props::Root), OpFigureWindow (Props::Figure),
OpAxesObject (Props::Axes), OpLineObject (Props::Line)? These four
classes represents each a graphics object. And the virtual method
property_changed is run, when a property has changed. This is due to a
callback setup.
Actually, Prop-package is the heart in Oplot.
Root::instance().setRootCallbackInterface(this) inside ctor of
OpFigureManager says that every callbacks regarding a property change in
root-object is controlled to OpFigureManager.
In Octave: f = figure; will make this code run.
% snip of code %
> int OpFigureManager::new_figure( Figure* fig) {
> OpFigureWindow* fw = new OpFigureWindow(fig, this);
> fig->setCallbackInterface(fw);
> this->addFigureWindow(fw, (int) fig->getHandle());
> return 0;
> }
% end snip of code %
We create a new OpFigureWindows, and connects the Figure-callbacks to
our newly created OpFigureWindow instance. And we adds this figure
window into a QPtrList.
When we create a line-object, by using h = plot(x,y) will run this code,
since Line is a child of Axes
% snip of code %
> int OpAxesObject::new_child( Object* p, Object* child) {
> if((*child->get_string("Type") == "Line")) {
> Line* line = static_cast<Line*>(child);
> OpLineObject *lineobject = new OpLineObject(line, this);
> line->setCallbackInterface(lineobject);
> }
> return 0;
> }
>
% end snip of code %
We create a OpLineObject and connects the callbacks of line-object into
our OpLineObject.
So every change in a line-object in octave, e.g set(h, 'color',[0 1 0])
will make property_change inside OpLineObject be executed.
Could this be used by visualisation applications, if we convience Paul
Kienzle to merge it into octave-forge?
This means that Octave has a common library for handling graphics
objects, which can be used by many visualisation applications. The
visualisation application will be responsible of communication interface
to and from Octave. And Props will be a layer that handles graphics
objects, and properties within the visualisation application. Octave
doesn't need duplicate copies of datas.
Can I test the possibility to use Props inside OctPlot? Or will you Shai?
It would be interesting if it's feasible. ;-) It should be.
The code needs some refactoring, I guess. But refactoring is good, not
evil.
If more people are interested in Props-package and how it really works,
then send me an email, and I will send you some more documentation about
it.
Cheers,
Ole J.