[Changeset]: Re: cla() ?
Ben Abbott
bpabbott at mac.com
Fri Oct 10 12:43:24 CDT 2008
On Friday, October 10, 2008, at 11:34AM, "John W. Eaton" <jwe at bevo.che.wisc.edu> wrote:
>On 10-Oct-2008, Ben Abbott wrote:
>
>|
>| On Oct 10, 2008, at 7:44 AM, Michael Goffioul wrote:
>|
>| > On Fri, Oct 10, 2008 at 1:40 PM, Ben Abbott <bpabbott at mac.com> wrote:
>| >> It does not appear that __go_delete__ does the job properly either.
>| >>
>| >> octave-3.1.51+:1> figure(1)
>| >> octave-3.1.51+:2> axis
>| >> ans =
>| >> 0 1 0 1 0 1
>| >> octave-3.1.51+:3> gca
>| >> ans = -1.3284
>| >> octave-3.1.51+:4> delete(gca)
>| >> octave-3.1.51+:5> get(gcf,'currentaxes')
>| >> ans = -1.3284
>| >
>| > That's not the problem. __go_delete__ should just make
>| > sure that get(gcf,'children') does not contain the axes
>| > handle anymore. In the case above, the figure object should
>| > catch the child removal and update currentaxes accordingly.
>| > In practice, figure::properties::remove_child overload is
>| > missing.
>| >
>| > Michael.
>|
>| ok!
>|
>| From my naive position that looks like a simple change. Might someone
>| take care of that?
>
>I would, but I don't know precisely what the
>figure::properties::remove_child function should do. I assume it
>would be something like
>
> void
> figure::properties::remove_child (const graphics_handle& h)
> {
> if (h.ok () && h == currentaxes.handle_value ())
> xset (0, "currentaxes", ???);
>
> base_properties::remove_child (h);
> }
>
>but I don't know how to determine which axes should become the new
>currentaxes.
>
>jwe
Looking at Matlab ...
figure(1)
axis;
figure(2)
axis;
delete(gca)
get(gca,'parent')
ans = 2
Which implies that an axis for figure 2 is created when gca is called.
figure(1)
subplot(211)
set(gca,'tag','first')
subplot(212)
set(gca,'tag','second')
delete(gca)
get(gca,'tag')
ans = 'first'
In this instance the deleted axis remains deleted.
So it appears that if no axis exists for the current figure, gca will create an axis and return its handle. If an axis does exist as a child of the current figure, then (after some playing) the handle for the newest axis is returned. Which corresponds to findobj(gcf,"type","axes")(1).
So when the "currentaxes" of a figure is deleted, the equivalent of the code below is run.
currentaxes = findobj (hfig, "type", "axes")(1);
if (isempty (currentaxes))
currentaxes = axes;
endif
Ben
More information about the Octave-maintainers
mailing list