|
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