|
70 | 70 |
|
71 | 71 | %-patch type-%
|
72 | 72 | if any(nonzeros(patch_data.ZData))
|
73 |
| - obj.data{patchIndex}.type = 'scatter3d'; |
| 73 | + if obj.PlotOptions.TriangulatePatch |
| 74 | + obj.data{patchIndex}.type = 'mesh3d'; |
| 75 | + |
| 76 | + % update the patch data using reducepatch |
| 77 | + patch_data_red = reducepatch(obj.State.Plot(patchIndex).Handle, 1); |
| 78 | + |
| 79 | + else |
| 80 | + obj.data{patchIndex}.type = 'scatter3d'; |
| 81 | + end |
74 | 82 | else
|
75 | 83 | obj.data{patchIndex}.type = 'scatter';
|
76 | 84 | end
|
77 | 85 |
|
78 | 86 | %-------------------------------------------------------------------------%
|
79 | 87 |
|
80 |
| -%-patch x-% |
81 |
| -xdata = patch_data.XData; |
82 |
| -if isvector(xdata) |
83 |
| - obj.data{patchIndex}.x = [xdata' xdata(1)]; |
84 |
| -else |
85 |
| - xtemp = reshape(xdata,[],1); |
86 |
| - xnew = []; |
87 |
| - for n = 1:size(xdata,2) |
88 |
| - xnew = [xnew ; xdata(:,n) ; xdata(1,n); NaN]; |
| 88 | +if ~strcmp(obj.data{patchIndex}.type, 'mesh3d') |
| 89 | + %-patch x-% |
| 90 | + xdata = patch_data.XData; |
| 91 | + if isvector(xdata) |
| 92 | + obj.data{patchIndex}.x = [xdata' xdata(1)]; |
| 93 | + else |
| 94 | + xtemp = reshape(xdata,[],1); |
| 95 | + xnew = []; |
| 96 | + for n = 1:size(xdata,2) |
| 97 | + xnew = [xnew ; xdata(:,n) ; xdata(1,n); NaN]; |
| 98 | + end |
| 99 | + obj.data{patchIndex}.x = xnew; |
89 | 100 | end
|
90 |
| - obj.data{patchIndex}.x = xnew; |
91 |
| -end |
92 | 101 |
|
93 |
| -%-------------------------------------------------------------------------% |
| 102 | + %---------------------------------------------------------------------% |
94 | 103 |
|
95 |
| -%-patch y-% |
96 |
| -ydata = patch_data.YData; |
97 |
| -if isvector(ydata) |
98 |
| - obj.data{patchIndex}.y = [ydata' ydata(1)]; |
99 |
| -else |
100 |
| - ytemp = reshape(ydata,[],1); |
101 |
| - ynew = []; |
102 |
| - for n = 1:size(ydata,2) |
103 |
| - ynew = [ynew ; ydata(:,n) ; ydata(1,n); NaN]; |
| 104 | + %-patch y-% |
| 105 | + ydata = patch_data.YData; |
| 106 | + if isvector(ydata) |
| 107 | + obj.data{patchIndex}.y = [ydata' ydata(1)]; |
| 108 | + else |
| 109 | + ytemp = reshape(ydata,[],1); |
| 110 | + ynew = []; |
| 111 | + for n = 1:size(ydata,2) |
| 112 | + ynew = [ynew ; ydata(:,n) ; ydata(1,n); NaN]; |
| 113 | + end |
| 114 | + obj.data{patchIndex}.y = ynew; |
104 | 115 | end
|
105 |
| - obj.data{patchIndex}.y = ynew; |
106 |
| -end |
107 | 116 |
|
108 |
| -%-------------------------------------------------------------------------% |
| 117 | + %---------------------------------------------------------------------% |
| 118 | + |
| 119 | + %-patch z-% |
| 120 | + if any(nonzeros(patch_data.ZData)) |
| 121 | + zdata = patch_data.ZData; |
| 122 | + |
| 123 | + if isvector(ydata) |
| 124 | + obj.data{patchIndex}.z = [zdata' zdata(1)]; |
| 125 | + else |
| 126 | + ztemp = reshape(zdata,[],1); |
| 127 | + znew = []; |
| 128 | + for n = 1:size(zdata,2) |
| 129 | + znew = [znew ; zdata(:,n) ; zdata(1,n); NaN]; |
| 130 | + end |
| 131 | + obj.data{patchIndex}.z = znew; |
| 132 | + end |
| 133 | + end |
109 | 134 |
|
110 |
| -%-patch z-% |
111 |
| -if any(nonzeros(patch_data.ZData)) |
112 |
| - zdata = patch_data.ZData; |
113 |
| - |
114 |
| - if isvector(ydata) |
115 |
| - obj.data{patchIndex}.z = [zdata' zdata(1)]; |
| 135 | + %---------------------------------------------------------------------% |
| 136 | + |
| 137 | + %-patch name-% |
| 138 | + if ~isempty(patch_data.DisplayName); |
| 139 | + obj.data{patchIndex}.name = patch_data.DisplayName; |
116 | 140 | else
|
117 |
| - ztemp = reshape(zdata,[],1); |
118 |
| - znew = []; |
119 |
| - for n = 1:size(zdata,2) |
120 |
| - znew = [znew ; zdata(:,n) ; zdata(1,n); NaN]; |
121 |
| - end |
122 |
| - obj.data{patchIndex}.z = znew; |
| 141 | + obj.data{patchIndex}.name = patch_data.DisplayName; |
123 | 142 | end
|
124 |
| -end |
125 | 143 |
|
126 |
| -%-------------------------------------------------------------------------% |
| 144 | + %---------------------------------------------------------------------% |
127 | 145 |
|
128 |
| -%-patch name-% |
129 |
| -if ~isempty(patch_data.DisplayName); |
130 |
| - obj.data{patchIndex}.name = patch_data.DisplayName; |
131 |
| -else |
132 |
| - obj.data{patchIndex}.name = patch_data.DisplayName; |
133 |
| -end |
| 146 | + %-patch visible-% |
| 147 | + obj.data{patchIndex}.visible = strcmp(patch_data.Visible,'on'); |
134 | 148 |
|
135 |
| -%-------------------------------------------------------------------------% |
| 149 | + %---------------------------------------------------------------------% |
136 | 150 |
|
137 |
| -%-patch visible-% |
138 |
| -obj.data{patchIndex}.visible = strcmp(patch_data.Visible,'on'); |
| 151 | + %-patch fill-% |
| 152 | + obj.data{patchIndex}.fill = 'tozeroy'; |
139 | 153 |
|
140 |
| -%-------------------------------------------------------------------------% |
| 154 | + %-PATCH MODE-% |
| 155 | + if ~strcmpi('none', patch_data.Marker) && ~strcmpi('none', patch_data.LineStyle) |
| 156 | + mode = 'lines+markers'; |
| 157 | + elseif ~strcmpi('none', patch_data.Marker) |
| 158 | + mode = 'markers'; |
| 159 | + elseif ~strcmpi('none', patch_data.LineStyle) |
| 160 | + mode = 'lines'; |
| 161 | + else |
| 162 | + mode = 'none'; |
| 163 | + end |
141 | 164 |
|
142 |
| -%-patch fill-% |
143 |
| -obj.data{patchIndex}.fill = 'tozeroy'; |
| 165 | + obj.data{patchIndex}.mode = mode; |
144 | 166 |
|
145 |
| -%-PATCH MODE-% |
146 |
| -if ~strcmpi('none', patch_data.Marker) && ~strcmpi('none', patch_data.LineStyle) |
147 |
| - mode = 'lines+markers'; |
148 |
| -elseif ~strcmpi('none', patch_data.Marker) |
149 |
| - mode = 'markers'; |
150 |
| -elseif ~strcmpi('none', patch_data.LineStyle) |
151 |
| - mode = 'lines'; |
152 |
| -else |
153 |
| - mode = 'none'; |
154 |
| -end |
| 167 | + %---------------------------------------------------------------------% |
155 | 168 |
|
156 |
| -obj.data{patchIndex}.mode = mode; |
| 169 | + %-patch marker-% |
| 170 | + obj.data{patchIndex}.marker = extractPatchMarker(patch_data); |
157 | 171 |
|
158 |
| -%-------------------------------------------------------------------------% |
| 172 | + %---------------------------------------------------------------------% |
159 | 173 |
|
160 |
| -%-patch marker-% |
161 |
| -obj.data{patchIndex}.marker = extractPatchMarker(patch_data); |
| 174 | + %-patch line-% |
| 175 | + obj.data{patchIndex}.line = extractPatchLine(patch_data); |
162 | 176 |
|
163 |
| -%-------------------------------------------------------------------------% |
| 177 | + %---------------------------------------------------------------------% |
164 | 178 |
|
165 |
| -%-patch line-% |
166 |
| -obj.data{patchIndex}.line = extractPatchLine(patch_data); |
| 179 | + %-patch fillcolor-% |
| 180 | + fill = extractPatchFace(patch_data); |
167 | 181 |
|
168 |
| -%-------------------------------------------------------------------------% |
| 182 | + if strcmp(obj.data{patchIndex}.type,'scatter'); |
| 183 | + obj.data{patchIndex}.fillcolor = fill.color; |
| 184 | + else |
| 185 | + obj.data{patchIndex}.surfacecolor = fill.color; |
| 186 | + end |
169 | 187 |
|
170 |
| -%-patch fillcolor-% |
171 |
| -fill = extractPatchFace(patch_data); |
| 188 | + %---------------------------------------------------------------------% |
172 | 189 |
|
173 |
| -if strcmp(obj.data{patchIndex}.type,'scatter'); |
174 |
| - obj.data{patchIndex}.fillcolor = fill.color; |
| 190 | + %-surfaceaxis-% |
| 191 | + if strcmp(obj.data{patchIndex}.type,'scatter3d'); |
| 192 | + minstd = min([std(patch_data.XData) std(patch_data.YData) std(patch_data.ZData)]); |
| 193 | + ind = find([std(patch_data.XData) std(patch_data.YData) std(patch_data.ZData)] == minstd)-1; |
| 194 | + obj.data{patchIndex}.surfaceaxis = ind; |
| 195 | + end |
175 | 196 | else
|
176 |
| - obj.data{patchIndex}.surfacecolor = fill.color; |
177 |
| -end |
178 |
| - |
179 |
| -%-------------------------------------------------------------------------% |
| 197 | + |
| 198 | + % handle vertices |
| 199 | + x_data = patch_data_red.vertices(:,1); |
| 200 | + y_data = patch_data_red.vertices(:,2); |
| 201 | + z_data = patch_data_red.vertices(:,3); |
| 202 | + |
| 203 | + % specify how vertices connect to form the faces |
| 204 | + i_data = patch_data_red.faces(:,1)-1; |
| 205 | + j_data = patch_data_red.faces(:,2)-1; |
| 206 | + k_data = patch_data_red.faces(:,3)-1; |
| 207 | + |
| 208 | + %-patch x/y/z-% |
| 209 | + obj.data{patchIndex}.x = x_data; |
| 210 | + obj.data{patchIndex}.y = y_data; |
| 211 | + obj.data{patchIndex}.z = z_data; |
| 212 | + |
| 213 | + %-patch i/j/k-% |
| 214 | + obj.data{patchIndex}.i = i_data; |
| 215 | + obj.data{patchIndex}.j = j_data; |
| 216 | + obj.data{patchIndex}.k = k_data; |
| 217 | + |
| 218 | + %-patch fillcolor-% |
| 219 | + fill = extractPatchFace(patch_data); |
| 220 | + obj.data{patchIndex}.color = fill.color; |
180 | 221 |
|
181 |
| -%-surfaceaxis-% |
182 |
| -if strcmp(obj.data{patchIndex}.type,'scatter3d'); |
183 |
| - minstd = min([std(patch_data.XData) std(patch_data.YData) std(patch_data.ZData)]); |
184 |
| - ind = find([std(patch_data.XData) std(patch_data.YData) std(patch_data.ZData)] == minstd)-1; |
185 |
| - obj.data{patchIndex}.surfaceaxis = ind; |
186 | 222 | end
|
187 | 223 |
|
188 | 224 | %-------------------------------------------------------------------------%
|
|
0 commit comments