comparison scripts/image/imagesc.m @ 17692:38cf56b77274

Overhaul image, imagesc to use newplot and support low-level invocation form. * scripts/image/image.m: New variable do_new indicates high-level calling form. For high-level invocation, call newplot before __img__. Correct linearity check if vectors are reversed (high-to-low values). Only apply image properties to axes if doing a high-level invocation. * scripts/image/imagesc.m: New variable do_new indicates high-level calling form. Delete subfunction __imagesc__ and incorporate minimal amount of code into imagesc. Only apply climits for high-level invocation.
author Rik <rik@octave.org>
date Fri, 18 Oct 2013 16:27:44 -0700
parents dd8db3f1c1da
children d63878346099
comparison
equal deleted inserted replaced
17691:8a54a481ecb5 17692:38cf56b77274
50 ## Created: July 1994 50 ## Created: July 1994
51 ## Adapted-By: jwe 51 ## Adapted-By: jwe
52 52
53 function h = imagesc (varargin) 53 function h = imagesc (varargin)
54 54
55 if (nargin < 1 || nargin > 4) 55 [hax, varargin, nargin] = __plt_get_axis_arg__ ("imagesc", varargin{:});
56
57 chararg = find (cellfun ("isclass", varargin, "char"), 1, "first");
58
59 do_new = true;
60 if (nargin == 0)
56 print_usage (); 61 print_usage ();
57 elseif (isscalar (varargin{1}) && ishandle (varargin{1})) 62 elseif (chararg == 1)
58 hax = varargin{1}; 63 ## Low-Level syntax
59 if (! isaxes (hax)) 64 do_new = false;
60 error ("imagesc: HAX argument must be an axes object"); 65 img = x = y = climits = [];
66 elseif (nargin == 1 || chararg == 2)
67 img = varargin{1};
68 x = y = climits = [];
69 elseif (nargin == 2 || chararg == 3)
70 img = varargin{1};
71 climits = varargin{2};
72 x = y = [];
73 elseif (nargin == 3 || chararg == 4)
74 x = varargin{1};
75 y = varargin{2};
76 img = varargin{3};
77 climits = [];
78 elseif (nargin == 4 || chararg == 5)
79 x = varargin{1};
80 y = varargin{2};
81 img = varargin{3};
82 climits = varargin{4};
83 endif
84
85 oldfig = [];
86 if (! isempty (hax))
87 oldfig = get (0, "currentfigure");
88 endif
89 unwind_protect
90 if (do_new)
91 hax = newplot (hax);
92 elseif (isempty (hax))
93 hax = gca ();
61 endif 94 endif
62 oldh = gca (); 95
63 unwind_protect 96 if (do_new)
64 axes (h); 97 htmp = image (x, y, img, "cdatamapping", "scaled", varargin{chararg:end});
65 htmp = __imagesc__ (hax, varargin{2:end}); 98 else
66 unwind_protect_cleanup 99 htmp = image ("cdatamapping", "scaled", varargin{:});
67 axes (oldh); 100 endif
68 end_unwind_protect 101
69 else 102 if (do_new && ! ishold (hax))
70 htmp = __imagesc__ (gca (), varargin{:}); 103 ## use given climits or guess them from the matrix
71 endif 104 if (numel (climits) == 2 && climits(1) <= climits(2))
105 set (hax, "clim", climits);
106 elseif (! isempty (climits))
107 error ("imagesc: CLIMITS must be in form [lo, hi]");
108 endif
109 endif
110 unwind_protect_cleanup
111 if (! isempty (oldfig))
112 set (0, "currentfigure", oldfig);
113 endif
114 end_unwind_protect
72 115
73 if (nargout > 0) 116 if (nargout > 0)
74 h = htmp; 117 h = htmp;
75 endif
76
77 endfunction
78
79 function h = __imagesc__ (ax, x, y, img, climits)
80
81 if (nargin == 2)
82 img = x;
83 x = y = climits = [];
84 elseif (nargin == 3)
85 img = x;
86 climits = y;
87 x = y = [];
88 elseif (nargin == 4 && ! isscalar (x) && ! isscalar (y) && ! isscalar (img))
89 climits = [];
90 endif
91
92 h = image (ax, x, y, img);
93 set (h, "cdatamapping", "scaled");
94
95 ## use given climits or guess them from the matrix
96 if (numel (climits) == 2 && climits(1) <= climits(2))
97 set (ax, "clim", climits);
98 elseif (! isempty (climits))
99 error ("imagesc: CLIMITS must be in form [lo, hi]");
100 endif 118 endif
101 119
102 endfunction 120 endfunction
103 121
104 122