octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Changeset]: Re: cla() ?


From: Ben Abbott
Subject: Re: [Changeset]: Re: cla() ?
Date: Fri, 10 Oct 2008 13:43:24 -0400

On Friday, October 10, 2008, at 11:34AM, "John W. Eaton" <address@hidden> 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 <address@hidden> 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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]