Mercurial > octave
changeset 33185:4eba030c0edc
Keep per-vertex "cdata" consistent with "facevertexcdata" in patch object (bug #65431).
* libinterp/corefcn/graphics.cc (patch::properties::update_fvc): Correctly
update "facevertexcdata" for per-vertex "cdata".
author | Markus Mützel <markus.muetzel@gmx.de> |
---|---|
date | Sat, 09 Mar 2024 19:35:48 +0100 |
parents | f5487b66e56e |
children | fd87bfce3438 |
files | libinterp/corefcn/graphics.cc |
diffstat | 1 files changed, 32 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/corefcn/graphics.cc Sat Mar 09 19:33:09 2024 +0100 +++ b/libinterp/corefcn/graphics.cc Sat Mar 09 19:35:48 2024 +0100 @@ -9664,6 +9664,14 @@ return; } + bool pervertex = false; + if (ncv == nv) + pervertex = true; + + bool isRGB = false; + if (cd.ndims () == 3) + isRGB = true; + // Faces and Vertices dim_vector dv; bool is3D = false; @@ -9688,6 +9696,20 @@ Matrix vert (dv); Matrix idx (nf, nv); + Matrix fvc; + if (pervertex) + { + // "facevertexcdata" holds color data per vertex + fvc.resize (nv * nf, (isRGB ? 3 : 1)); + } + else if (! cd.isempty ()) + { + // "facevertexcdata" holds color data per face + dv(0) = ncf; + dv(1) = (isRGB ? 3 : 1); + fvc = cd.reshape (dv); + } + // create list of vertices from x/y/zdata // FIXME: It might be possible to share vertices between adjacent faces. octave_idx_type kk = 0; @@ -9700,23 +9722,22 @@ if (is3D) vert(kk, 2) = zd(ii, jj); + if (pervertex) + { + fvc(kk, 0) = cd(ii, jj, 0); + if (isRGB) + { + fvc(kk, 1) = cd(ii, jj, 1); + fvc(kk, 2) = cd(ii, jj, 2); + } + } + idx(jj, ii) = static_cast<double> (kk+1); kk++; } } - // facevertexcdata - Matrix fvc; - if (cd.ndims () == 3) - { - dv(0) = cd.rows () * cd.columns (); - dv(1) = cd.dims ()(2); - fvc = cd.reshape (dv); - } - else - fvc = cd.as_column (); - // FIXME: shouldn't we update facevertexalphadata here ? octave::unwind_protect_var<bool> restore_var (updating_patch_data, true);