Skip to content

Commit 146808b

Browse files
authored
Merge pull request #130 from plotly/patch_mesh3d
Patch mesh3d
2 parents ea3f55c + 9b0a278 commit 146808b

File tree

4 files changed

+121
-84
lines changed

4 files changed

+121
-84
lines changed

README.mkdn

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
> MATLAB Online Toolbox - Create interactive charts in your web browser with MATLAB and Plotly
44
5-
Version: 2.2.8
5+
Version: 2.2.9
66

77
## Install
88

plotly/plotly_aux/plotly_version.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
function version = plotly_version()
2-
version = '2.2.8';
2+
version = '2.2.9';
33
end

plotly/plotlyfig.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
obj.PlotOptions.OpenURL = true;
5959
obj.PlotOptions.Strip = true;
6060
obj.PlotOptions.Visible = 'on';
61+
obj.PlotOptions.TriangulatePatch = false;
6162

6263
% offline options
6364
obj.PlotOptions.Offline = false;

plotly/plotlyfig_aux/handlegraphics/updatePatch.m

Lines changed: 118 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -70,119 +70,155 @@
7070

7171
%-patch type-%
7272
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
7482
else
7583
obj.data{patchIndex}.type = 'scatter';
7684
end
7785

7886
%-------------------------------------------------------------------------%
7987

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;
89100
end
90-
obj.data{patchIndex}.x = xnew;
91-
end
92101

93-
%-------------------------------------------------------------------------%
102+
%---------------------------------------------------------------------%
94103

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;
104115
end
105-
obj.data{patchIndex}.y = ynew;
106-
end
107116

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
109134

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;
116140
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;
123142
end
124-
end
125143

126-
%-------------------------------------------------------------------------%
144+
%---------------------------------------------------------------------%
127145

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');
134148

135-
%-------------------------------------------------------------------------%
149+
%---------------------------------------------------------------------%
136150

137-
%-patch visible-%
138-
obj.data{patchIndex}.visible = strcmp(patch_data.Visible,'on');
151+
%-patch fill-%
152+
obj.data{patchIndex}.fill = 'tozeroy';
139153

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
141164

142-
%-patch fill-%
143-
obj.data{patchIndex}.fill = 'tozeroy';
165+
obj.data{patchIndex}.mode = mode;
144166

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+
%---------------------------------------------------------------------%
155168

156-
obj.data{patchIndex}.mode = mode;
169+
%-patch marker-%
170+
obj.data{patchIndex}.marker = extractPatchMarker(patch_data);
157171

158-
%-------------------------------------------------------------------------%
172+
%---------------------------------------------------------------------%
159173

160-
%-patch marker-%
161-
obj.data{patchIndex}.marker = extractPatchMarker(patch_data);
174+
%-patch line-%
175+
obj.data{patchIndex}.line = extractPatchLine(patch_data);
162176

163-
%-------------------------------------------------------------------------%
177+
%---------------------------------------------------------------------%
164178

165-
%-patch line-%
166-
obj.data{patchIndex}.line = extractPatchLine(patch_data);
179+
%-patch fillcolor-%
180+
fill = extractPatchFace(patch_data);
167181

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
169187

170-
%-patch fillcolor-%
171-
fill = extractPatchFace(patch_data);
188+
%---------------------------------------------------------------------%
172189

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
175196
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;
180221

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;
186222
end
187223

188224
%-------------------------------------------------------------------------%

0 commit comments

Comments
 (0)