view scripts/testfun/private/compare_plot_demos.m @ 19085:b8934a57e13e

Improve plot comparison scripts. * compare_plot_demos.m: Rewrite docstring. Use all three plot directories in comparison ("appearance", "draw", "util"). Rename input variable structure "in" to "arg". Terminate lines of code with semicolon. * dump_demos.m: Rewrite docstring. Use fileparts to simplify checking of output script file name. Accept a single directory or a cell string array of directories for processing. Revamp test for non-existent directory. Remove unused code providing replacement Octave functions for Matlab. Remove linkaxes, linkprops, and colormap from list of demos to process since they have interactive elements. Use sprintf format string to avoid if/else structure. Simplify generated code for each plot comparison. Use 'close all' at the end of each demo to work around issues with accumulating cruft. Follow Octave coding conventions for cuddling parentheses. * dump_demos.m (oct2mat): Use regexprep() to convert double quotes in Octave demos to single quotes for Matlab. Comment out unwind_protect blocks since Matlab has no knowledge of these. Fix up calls to sombrero without an argument since Matlab doesn't have a default for this.
author Rik <rik@octave.org>
date Fri, 04 Jul 2014 14:32:49 -0700
parents 1b02bfff39d0
children f9cf5ae6b8a2
line wrap: on
line source

## Copyright (C) 2012 Ben Abbott  <bpabbott@mac.com>
##
## This file is part of Octave.
##
## Octave is free software; you can redistribute it and/or modify it
## under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 3 of the License, or (at
## your option) any later version.
##
## Octave is distributed in the hope that it will be useful, but
## WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
## General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with Octave; see the file COPYING.  If not, see
## <http://www.gnu.org/licenses/>.

## -*- texinfo -*-
## @deftypefn  {Function File} {} compare_plot_demos ()
## @deftypefnx {Function File} {} compare_plot_demos ("toolkits", @{@var{toolkit1}, @var{toolkit2}, @dots{}@})
##
## Uses @code{dump_demos} and @code{html_compare_plot_demos} to produce an
## html comparison of the plot demos for each of Octave's graphics toolkits. 
##
## An m-file named @file{dump_plots.m} will be created in the current working
## directory. This function will be used to render and save the plot demo
## images.
##
## If they do not already exist, directories for each available graphics
## toolkit are created.  Each toolkit's directory will be populated with images
## of each plot demo in the png format.
##
## Finally, an html document named @file{compare_plot_demos.html} is produced.
## This page places each toolkit's images side by side for a convenient
## comparison of the results.
##
## If the property @qcode{"toolkits"} is given then compare only the listed
## toolkits in the cell string.  The list may also include the toolkit
## @qcode{"matlab"}.
##
## @end deftypefn

## Author: Ben Abbott  <bpabbott@mac.com>

function compare_plot_demos (varargin)

  arg.toolkits = available_graphics_toolkits ();
  arg.directories = {"plot/appearance", "plot/draw", "plot/util"};
  arg.fmt = "png";
  arg.fcn_file = "";
  arg.replace_images = false;

  for n = 1:2:numel(varargin)
    if (! ischar (varargin{n}))
      print_usage ();
    else
      arg.(varargin{n}) = varargin{n+1};
    endif
  endfor

  if (ischar (arg.toolkits))
    arg.toolkits = {arg.toolkits};
  elseif (! iscellstr (arg.toolkits))
    error ('compare_plot_demos: Invalid value for "toolkits"')
  endif

  if (ischar (arg.directories))
    arg.directories = {arg.directories};
  elseif (! iscellstr (arg.directories))
    error ('compare_plot_demos: Invalid value for "directory"')
  endif

  if (! ischar (arg.fmt))
    error ('compare_plot_demos: Invalid value for "fmt"')
  endif

  if (isempty (arg.fcn_file))
    arg.fcn_file = "dump_plot_demos.m";
  endif

  ## Generate "dump_plot_demos.m" for rendering/saving the plot demo images
  dump_demos (arg.directories, arg.fcn_file, arg.fmt);

  [~, fcn_name] = fileparts (arg.fcn_file);

  ## Generate the plot demo images for each toolkit
  cwd = pwd ();
  unwind_protect
    addpath (pwd);
    for n = 1:numel (arg.toolkits)
      if (! isdir (fullfile (cwd, arg.toolkits{n})))
        mkdir (arg.toolkits{n});
      endif
      cd (arg.toolkits{n});
      if (arg.replace_images && ! isempty (dir (["*." arg.fmt])))
        delete (["*." arg.fmt]);
      endif
      if (! strcmp (arg.toolkits{n}, "matlab"))
        close all;
        graphics_toolkit (arg.toolkits{n});
        try
          eval (fcn_name);
        catch
          printf ("Error running plot demos for ""%s"" toolkit\n", arg.toolkits{n});
          disp (lasterror);
        end_try_catch
      endif
      cd (cwd);
    endfor
  unwind_protect_cleanup
    rmpath (cwd);
  end_unwind_protect

  ## Generate the html comparison of the images
  ## TODO: pass the toolkits{} to allow number of columns to be formatted
  html_compare_plot_demos ("output", "compare_plot_demos.html")

endfunction