# HG changeset patch # User Markus Mützel # Date 1710009348 -3600 # Node ID 4eba030c0edce2ef3989ea57dc643e6408197ca2 # Parent f5487b66e56e57d618defe7a17d28b082c226cd7 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". diff -r f5487b66e56e -r 4eba030c0edc libinterp/corefcn/graphics.cc --- 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 (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 restore_var (updating_patch_data, true);