units conversion (was: about contibuting to octave)
Ben Abbott
bpabbott at mac.com
Thu Mar 12 06:11:31 CDT 2009
On Mar 12, 2009, at 6:13 PM, Michael Goffioul wrote:
> There exist already some code to convert from different "units".
> See for instance the convert_position function in graphics.cc used
> to convert position rectangles between various possible "units".
>
> Some extension is needed to be able to handle single point instead
> of rectangle and also to support data "units". However, the axes
> object
> provides an easy access to the current transformation matrix, so it
> shouldn't be that hard. ... (snip)
Regarding units conversion, should we write a single function that
handles this job for all objects with a "units" property?
If we do that, it appears to me that we only need to write a single
listener to handle to handle the conversion for all objects with
"units" properties.
Actually, given how addlistener works, it should be possible to write
a singled listener for everything (at least to have a single function
name whose actions depends on the object "type" and the property
changed).
For example, if the listener function is called "update_property", and
takes the following inputs ...
update_property (h, dummy_arg, property_that_changed,
old_property_value)
The listeners for conversion of an object's units would be ...
addlistener (h, "units", {@update_property, "units", get (gca,
"units")})
The listener function would then have access to the new and old units
as well as the old value.
The listener for objects with a "rotation" property ...
addlistener (h, "rotation", {@update_property, "rotation"})
In this case the old value isn't needed.
The same approach can be used for objects with the "position" property.
addlistener (h, "position", {@update_property, "position"})
One advantage of a unified listener is that it is easy to disable
recursion. For example, changing "units" changes the "position"
property, but need not trigger a new rendering.
I think this approach can handle all cases and sets a consistent
standard that would make maintenance easier.
I'm thinking about this from the perspective of m-file implementation.
However, as several properties are read-only, this would need to be
implemented in c++. So, I may be off base in my approach.
Comments?
Ben
More information about the Octave-maintainers
mailing list