Mercurial > octave
changeset 32084:7dcb6b4a4218
quiver: Marker & arrowhead name/value property style consistency (bug #64134)
* __quiver__.m: Add have_line_spec check after applying any name-value
properties to maintain arrowhead display status.
* __quiver__.m (update_plot): Add linewidth property to base marker object
set call.
* quiver.m: Add BIST to ensure marker properties are updated correctly.
Remove unnecessary strcmp from other BIST assert calls.
* etc/NEWS.9.md: Update description of changes to quiver note under General
Improvements.
author | Nicholas R. Jankowski <jankowski.nicholas@gmail.com> |
---|---|
date | Mon, 08 May 2023 11:49:41 -0400 |
parents | 4e30fd192118 |
children | cf03230c0363 |
files | etc/NEWS.9.md scripts/plot/draw/private/__quiver__.m scripts/plot/draw/quiver.m |
diffstat | 3 files changed, 91 insertions(+), 48 deletions(-) [+] |
line wrap: on
line diff
--- a/etc/NEWS.9.md Sun May 07 18:15:23 2023 +0200 +++ b/etc/NEWS.9.md Mon May 08 11:49:41 2023 -0400 @@ -20,12 +20,15 @@ backward compatibility, except that non-integer inputs will no longer error. - `quiver` and `quiver3` now properly plot non-float numeric inputs by -internally recasting them to 'double' (bug #59695). Scaling factor input -processing is improved, with both functions honoring a previously ignored -scaling factor input when there is only a single arrow (bug #39552), and -`quiver3` no longer producing an error when a scaling factor is input -without x and y inputs. Both functions now also accept a scale factor of -"off" which is equivalent to setting it to 0. +internally recasting them to 'double' (bug #59695). Both functions now +honor a previously ignored scaling factor input when there is only a +single arrow (bug #39552), and `quiver3` no longer produces an error when a +scaling factor is input without x and y inputs. Both functions now also +accept a scale factor of "off" which is equivalent to setting it to 0. +When a linestyle with a base marker is set suppressing arrowhead display, +subsequent name-value property pairs in the quiver/quiver3 function call +will no longer turn arrowhead display back on (bug #64143). The linewdith +property now also affect the line width of the base marker. - The `inputParser` function has been re-architected for a 60% performance improvement.
--- a/scripts/plot/draw/private/__quiver__.m Sun May 07 18:15:23 2023 +0200 +++ b/scripts/plot/draw/private/__quiver__.m Mon May 08 11:49:41 2023 -0400 @@ -379,6 +379,10 @@ if (! isempty (args)) set (hg, args{:}); + if (have_line_spec && ! isempty (linespec.marker) && ... + ! strcmp (linespec.marker, "none")) + set (h2, "linestyle", "none"); + endif endif unwind_protect_cleanup @@ -497,7 +501,8 @@ set (kids([3 2]), {"color", "linestyle", "linewidth"}, get (h, {"color", "linestyle", "linewidth"})); set (kids(2), "visible", get (h, "showarrowhead")); - set (kids(1), {"color", "marker", "markerfacecolor", "markersize"}, - get (h, {"color", "marker", "markerfacecolor", "markersize"})); + set (kids(1), {"color", "marker", "markerfacecolor", "markersize", ... + "linewidth"}, get (h, {"color", "marker", "markerfacecolor", ... + "markersize", "linewidth"})); endfunction
--- a/scripts/plot/draw/quiver.m Sun May 07 18:15:23 2023 +0200 +++ b/scripts/plot/draw/quiver.m Mon May 08 11:49:41 2023 -0400 @@ -369,89 +369,124 @@ %! unwind_protect %! h = quiver (hax, 0, 1, 2, 3, "-o"); # Linestyle %! parent = get (h); -%! assert (strcmp (parent.marker, "o")); -%! assert (strcmp (parent.markerfacecolor, "none")); +%! assert (parent.marker, "o"); +%! assert (parent.markerfacecolor, "none"); %! childdata = get (parent.children); %! basechild = find (cellfun (@numel, {childdata.xdata}) == 1); %! arrowheadchild = find (cellfun (@numel, {childdata.xdata}) == 4); -%! assert (strcmp (childdata(basechild).marker, "o")); -%! assert (strcmp (childdata(basechild).markerfacecolor, "none")); -%! assert (strcmp (childdata(basechild).linestyle, "none")); -%! assert (strcmp (childdata(arrowheadchild).marker, "none")); -%! assert (strcmp (childdata(arrowheadchild).markerfacecolor, "none")); -%! assert (strcmp (childdata(arrowheadchild).linestyle, "none")); +%! assert (childdata(basechild).marker, "o"); +%! assert (childdata(basechild).markerfacecolor, "none"); +%! assert (childdata(basechild).linestyle, "none"); +%! assert (childdata(arrowheadchild).marker, "none"); +%! assert (childdata(arrowheadchild).markerfacecolor, "none"); +%! assert (childdata(arrowheadchild).linestyle, "none"); %! %! h = quiver (hax, 0, 1, 2, 3, "-o", "filled"); # Linestyle + filled. %! parent = get (h); -%! assert (strcmp (parent.marker, "o")); +%! assert (parent.marker, "o"); %! assert (numel (parent.markerfacecolor), 3); %! childdata = get (parent.children); %! basechild = find (cellfun (@numel, {childdata.xdata}) == 1); %! arrowheadchild = find (cellfun (@numel, {childdata.xdata}) == 4); -%! assert (strcmp (childdata(basechild).marker, "o")); +%! assert (childdata(basechild).marker, "o"); %! assert (numel (childdata(basechild).markerfacecolor), 3); -%! assert (strcmp (childdata(basechild).linestyle, "none")); -%! assert (strcmp (childdata(arrowheadchild).marker, "none")); -%! assert (strcmp (childdata(arrowheadchild).markerfacecolor, "none")); -%! assert (strcmp (childdata(arrowheadchild).linestyle, "none")); +%! assert (childdata(basechild).linestyle, "none"); +%! assert (childdata(arrowheadchild).marker, "none"); +%! assert (childdata(arrowheadchild).markerfacecolor, "none"); +%! assert (childdata(arrowheadchild).linestyle, "none"); %! %! h = quiver (hax, 0, 1, 2, 3, "linewidth", 10); # Name/value pair. %! parent = get (h); -%! assert (strcmp (parent.marker, "none")); -%! assert (strcmp (parent.markerfacecolor, "none")); -%! assert (strcmp (parent.linestyle, "-")); +%! assert (parent.marker, "none"); +%! assert (parent.markerfacecolor, "none"); +%! assert (parent.linestyle, "-"); %! assert (parent.linewidth, 10); %! childdata = get (parent.children); %! basechild = find (cellfun (@numel, {childdata.xdata}) == 1); %! stemchild = find (cellfun (@numel, {childdata.xdata}) == 3); %! arrowheadchild = find (cellfun (@numel, {childdata.xdata}) == 4); -%! assert (strcmp (childdata(basechild).marker, "none")); -%! assert (strcmp (childdata(basechild).markerfacecolor, "none")); -%! assert (strcmp (childdata(basechild).linestyle, "none")); -%! assert (strcmp (childdata(stemchild).marker, "none")); -%! assert (strcmp (childdata(stemchild).markerfacecolor, "none")); -%! assert (strcmp (childdata(stemchild).linestyle, "-")); +%! assert (childdata(basechild).marker, "none"); +%! assert (childdata(basechild).markerfacecolor, "none"); +%! assert (childdata(basechild).linestyle, "none"); +%! assert (childdata(stemchild).marker, "none"); +%! assert (childdata(stemchild).markerfacecolor, "none"); +%! assert (childdata(stemchild).linestyle, "-"); %! assert (childdata(stemchild).linewidth, 10); -%! assert (strcmp (childdata(arrowheadchild).marker, "none")); -%! assert (strcmp (childdata(arrowheadchild).markerfacecolor, "none")); -%! assert (strcmp (childdata(arrowheadchild).linestyle, "-")); +%! assert (childdata(arrowheadchild).marker, "none"); +%! assert (childdata(arrowheadchild).markerfacecolor, "none"); +%! assert (childdata(arrowheadchild).linestyle, "-"); %! assert (childdata(arrowheadchild).linewidth, 10); %! %! unwind_protect_cleanup %! close (hf); %! end_unwind_protect -## Test both Linestyle + name/value pair -%!test <64143> +## Test both Linestyle with marker + name/value pair suppress arrowhead +%!test <*64143> %! hf = figure ("visible", "off"); %! hax = gca(); %! unwind_protect %! h = quiver (hax, 0, 1, 2, 3, "-o", "linewidth", 10); %! parent = get (h); -%! assert (strcmp (parent.marker, "o")); -%! assert (strcmp (parent.markerfacecolor, "none")); -%! assert (strcmp (parent.linestyle, "-")); +%! assert (parent.marker, "o"); +%! assert (parent.markerfacecolor, "none"); +%! assert (parent.linestyle, "-"); %! assert (parent.linewidth, 10); %! childdata = get (parent.children); %! basechild = find (cellfun (@numel, {childdata.xdata}) == 1); %! stemchild = find (cellfun (@numel, {childdata.xdata}) == 3); %! arrowheadchild = find (cellfun (@numel, {childdata.xdata}) == 4); -%! assert (strcmp (childdata(basechild).marker, "o")); -%! assert (strcmp (childdata(basechild).markerfacecolor, "none")); -%! assert (strcmp (childdata(basechild).linestyle, "none")); -%! assert (strcmp (childdata(stemchild).marker, "none")); -%! assert (strcmp (childdata(stemchild).markerfacecolor, "none")); -%! assert (strcmp (childdata(stemchild).linestyle, "-")); +%! assert (childdata(basechild).marker, "o"); +%! assert (childdata(basechild).markerfacecolor, "none"); +%! assert (childdata(basechild).linestyle, "none"); +%! assert (childdata(stemchild).marker, "none"); +%! assert (childdata(stemchild).markerfacecolor, "none"); +%! assert (childdata(stemchild).linestyle, "-"); %! assert (childdata(stemchild).linewidth, 10); -%! assert (strcmp (childdata(arrowheadchild).marker, "none")); -%! assert (strcmp (childdata(arrowheadchild).markerfacecolor, "none")); -%! assert (strcmp (childdata(arrowheadchild).linestyle, "none")); +%! assert (childdata(arrowheadchild).marker, "none"); +%! assert (childdata(arrowheadchild).markerfacecolor, "none"); +%! assert (childdata(arrowheadchild).linestyle, "none"); %! assert (childdata(arrowheadchild).linewidth, 10); %! %! unwind_protect_cleanup %! close (hf); %! end_unwind_protect +## Test that linewidth and color but not linestyle are passed to base marker +%!test <*64143> +%! hf = figure ("visible", "off"); +%! hax = gca(); +%! unwind_protect +%! h = quiver (hax, 0, 1, 2, 3, "--o", "linewidth", 10, "color", [1 0 0]); +%! parent = get (h); +%! assert (parent.marker, "o"); +%! assert (parent.markerfacecolor, "none"); +%! assert (parent.linestyle, "--"); +%! assert (parent.linewidth, 10); +%! childdata = get (parent.children); +%! basechild = find (cellfun (@numel, {childdata.xdata}) == 1); +%! stemchild = find (cellfun (@numel, {childdata.xdata}) == 3); +%! arrowheadchild = find (cellfun (@numel, {childdata.xdata}) == 4); +%! assert (childdata(basechild).marker, "o"); +%! assert (childdata(basechild).markerfacecolor, "none"); +%! assert (childdata(basechild).linestyle, "none"); +%! assert (childdata(basechild).color, [1 0 0]); +%! assert (childdata(basechild).linewidth, 10); +%! assert (childdata(stemchild).marker, "none"); +%! assert (childdata(stemchild).markerfacecolor, "none"); +%! assert (childdata(stemchild).linestyle, "--"); +%! assert (childdata(stemchild).linewidth, 10); +%! assert (childdata(stemchild).color, [1 0 0]); +%! assert (childdata(arrowheadchild).marker, "none"); +%! assert (childdata(arrowheadchild).markerfacecolor, "none"); +%! assert (childdata(arrowheadchild).linestyle, "none"); +%! assert (childdata(arrowheadchild).linewidth, 10); +%! assert (childdata(arrowheadchild).color, [1 0 0]); +%! +%! unwind_protect_cleanup +%! close (hf); +%! end_unwind_protect + ## Check arrow length, scale factor adjustment, one arrow. %!test <*39552> %! hf = figure ("visible", "off");