[changeset] - bug and fix for surfnorm()
John W. Eaton
jwe at bevo.che.wisc.edu
Mon Oct 20 09:46:34 CDT 2008
On 19-Oct-2008, Ben Abbott wrote:
|
| On Oct 18, 2008, at 6:19 PM, Ben Abbott wrote:
|
| > I noticed that the lines below produced multiple surfaces
| >
| > surfnorm (peaks (10))
| > surf (peaks)
| >
| > The problem was with the "hold on" that was needed to add the normal-
| > vectors to the surface ... and no "hold off" followed.
| >
| > The attached changeset fixes that.
| >
| > Ben
| >
| > <changeset-surfnorm.patch>
|
| Dan,
|
| I've merged your changeset with mine.
|
| There are three differences between yours and mine. First you did a
| nicer job of using the handle properties. Second, your placement
| before the surf() command is more proper (imo). Third, I tried to
| preserve the hold state for "oldh" as well. The one instance I can
| imagine where that matters is when h==oldh and an error is encountered
| during the "unwind_protect".
|
| I've also added an extra demo which would illustrate that the hold
| state was left on.
|
| I've attached the changeset credited to you.
I made the following change:
# HG changeset patch
# User John W. Eaton <jwe at octave.org>
# Date 1224513720 14400
# Node ID 1e1e88bcc733f7069f8fbd88556a0a476e26ca5b
# Parent 5cfeb7bc497a663a3321b15c0055e16f95dc5606
surfnorm.m: save and restore hold state
diff --git a/scripts/ChangeLog b/scripts/ChangeLog
--- a/scripts/ChangeLog
+++ b/scripts/ChangeLog
@@ -1,3 +1,9 @@
+2008-10-20 John W. Eaton <jwe at octave.org>
+
+ * plot/surfnorm.m: Save and restore hold state.
+ From Daniel J. Sebald <daniel.sebald at ieee.org> and
+ Ben Abbott <bpabbott at mac.com>.
+
2008-10-20 Ben Abbott <bpabbott at mac.com>
* plot/__stem__.m: Respect new ordering of children when setting
diff --git a/scripts/plot/surfnorm.m b/scripts/plot/surfnorm.m
--- a/scripts/plot/surfnorm.m
+++ b/scripts/plot/surfnorm.m
@@ -114,11 +114,16 @@
axes (h);
newplot ();
surf (x, y, z, varargin{ioff:end});
- hold on;
- plot3 ([x(:)'; x(:).' + nx(:).' ; NaN(size(x(:).'))](:),
- [y(:)'; y(:).' + ny(:).' ; NaN(size(y(:).'))](:),
- [z(:)'; z(:).' + nz(:).' ; NaN(size(z(:).'))](:),
- varargin{ioff:end});
+ old_hold_state = get (h, "nextplot");
+ unwind_protect
+ set (h, "nextplot", "add");
+ plot3 ([x(:)'; x(:).' + nx(:).' ; NaN(size(x(:).'))](:),
+ [y(:)'; y(:).' + ny(:).' ; NaN(size(y(:).'))](:),
+ [z(:)'; z(:).' + nz(:).' ; NaN(size(z(:).'))](:),
+ varargin{ioff:end});
+ unwind_protect_cleanup
+ set (h, "nextplot", old_hold_state);
+ end_unwind_protect
unwind_protect_cleanup
axes (oldh);
end_unwind_protect
I don't see the point of saving and restoring the hold state of OLDH
since we aren't changing the hold state on those axes.
Also, note the use of unwind_protect here. Without that, it would be
possible for an intterupt to happen during the plot3 call that would
leave the hold state for H set to "add".
jwe
More information about the Bug-octave
mailing list