Mercurial > octave
annotate scripts/plot/util/hgtransform.m @ 33669:96f077c60226 default tip @
maint: Merge stable to default.
author | Markus Mützel <markus.muetzel@gmx.de> |
---|---|
date | Wed, 19 Jun 2024 16:41:55 +0200 |
parents | 2e484f9f1f18 |
children |
rev | line source |
---|---|
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
1 ######################################################################## |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
2 ## |
32632
2e484f9f1f18
maint: update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
31706
diff
changeset
|
3 ## Copyright (C) 2017-2024 The Octave Project Developers |
27918
b442ec6dda5c
use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents:
27106
diff
changeset
|
4 ## |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 ## See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 ## distribution or <https://octave.org/copyright/>. |
23266
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
7 ## |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
8 ## This file is part of Octave. |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
9 ## |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
23565
diff
changeset
|
10 ## Octave is free software: you can redistribute it and/or modify it |
23266
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
11 ## under the terms of the GNU General Public License as published by |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
23565
diff
changeset
|
12 ## the Free Software Foundation, either version 3 of the License, or |
23266
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
13 ## (at your option) any later version. |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
14 ## |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
15 ## Octave is distributed in the hope that it will be useful, but |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
16 ## WITHOUT ANY WARRANTY; without even the implied warranty of |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
17 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
18 ## GNU General Public License for more details. |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
19 ## |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
20 ## You should have received a copy of the GNU General Public License |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
21 ## along with Octave; see the file COPYING. If not, see |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
23565
diff
changeset
|
22 ## <https://www.gnu.org/licenses/>. |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 ## |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 ######################################################################## |
23266
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
25 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
26 ## -*- texinfo -*- |
23565
3a730821e4a2
doc: Peridoc grammarcheck of documentation.
Rik <rik@octave.org>
parents:
23266
diff
changeset
|
27 ## @deftypefn {} {@var{h} =} hgtransform () |
3a730821e4a2
doc: Peridoc grammarcheck of documentation.
Rik <rik@octave.org>
parents:
23266
diff
changeset
|
28 ## @deftypefnx {} {@var{h} =} hgtransform (@var{property}, @var{value}, @dots{}) |
3a730821e4a2
doc: Peridoc grammarcheck of documentation.
Rik <rik@octave.org>
parents:
23266
diff
changeset
|
29 ## @deftypefnx {} {@var{h} =} hgtransform (@var{hax}, @dots{}) |
23266
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
30 ## |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
31 ## Create a graphics transform object. |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
32 ## |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
33 ## FIXME: Need to write documentation. |
28713
28d2511f2af2
maint: grammarcheck documentation ahead of 6.1 release.
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
34 ## FIXME: Add <makehgtform> to seealso list when it is implemented. |
23266
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
35 ## @seealso{hggroup} |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
36 ## @end deftypefn |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
37 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
38 ## FIXME: hgtransform should be a C++ graphics object, not an m-file. |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
39 ## For the moment (3/7/17), it is quicker to implement something in |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
40 ## an m-file. But, this approach requires double the memory (original |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
41 ## and transformed data), and a system of listeners and callbacks. |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
42 ## In OpenGL toolkits it should be possible to simply insert a transform |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
43 ## somewhere in gl-render.cc to have this done on the fly. |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
44 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
45 function h = hgtransform (varargin) |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
46 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
47 [hax, varargin] = __plt_get_axis_arg__ ("hgtransform", varargin{:}); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
48 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
49 if (isempty (hax)) |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
50 hax = gca (); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
51 endif |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
52 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
53 htmp = hggroup (hax); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
54 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
55 addproperty ("matrix", htmp, "data", eye (4)); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
56 addproperty ("__orig_data__", htmp, "any", struct ("h", {})); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
57 if (! isempty (varargin)) |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
58 set (htmp, varargin{:}); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
59 endif |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
60 addlistener (htmp, "matrix", @matrix_cb); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
61 addlistener (htmp, "children", @children_cb); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
62 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
63 if (nargout > 0) |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
64 h = htmp; |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
65 endif |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
66 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
67 endfunction |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
68 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
69 function matrix_cb (hgt, ~) |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
70 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
71 M = get (hgt, "matrix"); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
72 ## FIXME: Need better input validation on transform matrix M. |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
73 ## Disallow shear, perspective transforms. |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
74 if (! isreal (M) || ! ismatrix (M) || rows (M) != 4 || columns (M) != 4) |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
75 error ("hgtransform: transform must be 4x4 real matrix"); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
76 endif |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
77 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
78 hkids = get (hgt, "children"); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
79 xform_data (hgt, hkids); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
80 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
81 endfunction |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
82 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
83 function xform_data (hgt, hlist) |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
84 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
85 M = get (hgt, "matrix"); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
86 orig_data = get (hgt, "__orig_data__"); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
87 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
88 for hk = hlist.' |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
89 |
26267
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
90 ## FIXME: Add support for light and rectangle objects |
23266
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
91 type = get (hk, "type"); |
26267
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
92 if (! any (strcmp (type, {"line", "patch", "surface", "image", "text"}))) |
23266
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
93 continue; # Unsupported type. Silently skip. |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
94 endif |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
95 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
96 idx = find (hk == [orig_data.h]); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
97 if (! idx) |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
98 warning ("hgtransform: original data not found for %f", hk); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
99 continue; |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
100 endif |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
101 |
26267
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
102 if (strcmp (type, "text")) |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
103 pos = orig_data(idx).position; |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
104 xd = pos(1); |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
105 yd = pos(2); |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
106 zd = pos(3); |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
107 else |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
108 ## FIXME: Rotations for "image" objects are not handled correctly. |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
109 xd = double (orig_data(idx).xdata); |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
110 xsz = size (xd); |
23266
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
111 |
26267
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
112 yd = double (orig_data(idx).ydata); |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
113 ysz = size (yd); |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
114 |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
115 if (strcmp (type, "image")) |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
116 zd = []; |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
117 else |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
118 zd = double (orig_data(idx).zdata); |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
119 zsz = size (zd); |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
120 endif |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
121 z_empty = isempty (zd); |
23266
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
122 |
26267
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
123 if (z_empty) |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
124 ## Common case of 2-D data. |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
125 zd = zeros (numel (xd), 1); |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
126 elseif (isvector (xd) && isvector (yd)) |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
127 ## Handle surface data which may be a vector/matrix combination |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
128 if (isvector (zd)) |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
129 ## Do nothing. All data will be forced to row vectors below |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
130 elseif (length (xd) == rows (zd) && length (yd) == columns (zd)) |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
131 [xd, yd] = meshgrid (xd, yd); |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
132 xsz = size (xd); |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
133 ysz = size (yd); |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
134 endif |
23266
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
135 endif |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
136 |
26267
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
137 ## Force row vectors for later concatenation |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
138 xd = xd(:).'; |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
139 yd = yd(:).'; |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
140 zd = zd(:).'; |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
141 |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
142 endif |
23266
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
143 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
144 ## FIXME: To minimize memory, better to construct data matrix in-place? |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
145 data = [xd; yd; zd; ones(1, columns(xd))]; |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
146 tol = 2 * max (eps (data(1:3,:))); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
147 data = M * data; |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
148 ## Need to trim or rotations which produce values near 0 will be strange. |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
149 data(abs (data) < tol) = 0; |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
150 |
26267
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
151 if (strcmp (type, "text")) |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
152 set (hk, "position", [data(1), data(2), data(3)]); |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
153 else |
27106
6bfd3a890185
Consolidate separate calls to set() in to one call for interpreter efficiency.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
154 set (hk, "xdata", reshape (data(1,:), xsz), |
6bfd3a890185
Consolidate separate calls to set() in to one call for interpreter efficiency.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
155 "ydata", reshape (data(2,:), ysz)); |
26267
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
156 if (! z_empty) |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
157 set (hk, "zdata", reshape (data(3,:), zsz)); |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
158 endif |
23266
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
159 endif |
26267
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
160 |
23266
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
161 endfor |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
162 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
163 endfunction |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
164 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
165 function children_cb (hgt, ~) |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
166 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
167 hkids = get (hgt, "children"); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
168 orig_data = get (hgt, "__orig_data__"); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
169 hlist = [orig_data.h]; |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
170 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
171 ## Delete any children that have been removed |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
172 hdel = setdiff (hlist, hkids); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
173 if (! isempty (hdel)) |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
174 for hk = hdel.' |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
175 idx = find (hk == hlist); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
176 if (ishghandle (hk)) |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
177 ## child was re-parented to something else, restore data |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
178 switch (get (hk, "type")) |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
179 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
180 case {"line", "patch", "surface"} |
27106
6bfd3a890185
Consolidate separate calls to set() in to one call for interpreter efficiency.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
181 set (hk, "xdata", orig_data(idx).xdata, |
6bfd3a890185
Consolidate separate calls to set() in to one call for interpreter efficiency.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
182 "ydata", orig_data(idx).ydata, |
6bfd3a890185
Consolidate separate calls to set() in to one call for interpreter efficiency.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
183 "zdata", orig_data(idx).zdata); |
23266
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
184 |
26267
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
185 case "image" |
27106
6bfd3a890185
Consolidate separate calls to set() in to one call for interpreter efficiency.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
186 set (hk, "xdata", orig_data(idx).xdata, |
6bfd3a890185
Consolidate separate calls to set() in to one call for interpreter efficiency.
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
187 "ydata", orig_data(idx).ydata); |
23266
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
188 |
26267
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
189 case "text" |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
190 set (hk, "position", orig_data(idx).position); |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
191 |
23266
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
192 otherwise |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
193 ## Unsupported type. No data was saved. |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
194 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
195 endswitch |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
196 endif |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
197 endfor |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
198 orig_data = orig_data(hlist != hdel); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
199 hlist = hlist(hlist != hdel); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
200 endif |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
201 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
202 ## Add new children |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
203 hnew = setdiff (hkids, hlist); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
204 for hk = hnew.' |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
205 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
206 orig_data(end+1).h = hk; |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
207 type = get (hk, "type"); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
208 orig_data(end).type = type; |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
209 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
210 switch (type) |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
211 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
212 case {"line", "patch", "surface"} |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
213 orig_data(end).xdata = get (hk, "xdata"); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
214 orig_data(end).ydata = get (hk, "ydata"); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
215 orig_data(end).zdata = get (hk, "zdata"); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
216 |
26267
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
217 case "image" |
23266
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
218 orig_data(end).xdata = get (hk, "xdata"); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
219 orig_data(end).ydata = get (hk, "ydata"); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
220 |
26267
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
221 case "text" |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
222 orig_data(end).position = get (hk, "position"); |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
223 |
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
224 case "light" |
23266
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
225 warning ("hgtransform: %s objects are not yet supported", type); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
226 |
26267
298c30063b2f
hgtransform.m: Add support for text objects (bug #50466).
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
227 case "hggroup" |
23266
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
228 try |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
229 get (hk, "curvature"); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
230 is_rectangle = true; |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
231 catch |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
232 is_rectangle = false; |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
233 end_try_catch |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
234 if (is_rectangle) |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
235 warning ("hgtransform: rectangle objects are not yet supported"); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
236 else |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
237 error ("hgtransform: hggroup cannot be a child of an hgtransform"); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
238 endif |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
239 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
240 otherwise |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
241 error ("hgtransform: %s cannot be a child of an hgtransform", type); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
242 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
243 endswitch |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
244 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
245 endfor |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
246 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
247 set (hgt, "__orig_data__", orig_data); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
248 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
249 ## Update data of new children only |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
250 xform_data (hgt, hnew); |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
251 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
252 endfunction |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
253 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
254 |
a470f7fee1cf
hgtransform.m: Add partial support for image object type.
Rik <rik@octave.org>
parents:
23255
diff
changeset
|
255 ## Need BIST tests here |