From graphics-request at octave dot org Tue Nov 30 03:30:32 2004 Subject: Re: Oplot From: Ole Jacob Hagen To: graphics at octave dot org Date: Tue, 30 Nov 2004 10:26:42 +0100 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(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.