changeset 7149:5c121a8b40b5

[project @ 2007-11-09 18:15:39 by jwe]
author jwe
date Fri, 09 Nov 2007 18:15:40 +0000
parents 735086cfd405
children 68a1b616b7df
files doc/ChangeLog scripts/ChangeLog scripts/plot/Makefile.in scripts/plot/__go_draw_axes__.m scripts/plot/hidden.m scripts/plot/mesh.m scripts/plot/meshc.m
diffstat 7 files changed, 111 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/doc/ChangeLog	Fri Nov 09 18:01:45 2007 +0000
+++ b/doc/ChangeLog	Fri Nov 09 18:15:40 2007 +0000
@@ -1,6 +1,6 @@
 2007-11-09  David Bateman  <dbateman@free.fr>
 
-	* interpreter/plot.txi: Document the new area function.
+	* interpreter/plot.txi: Document the new hidden and area functions.
 
 2007-11-07  David Bateman  <dbateman@free.fr>
 
--- a/scripts/ChangeLog	Fri Nov 09 18:01:45 2007 +0000
+++ b/scripts/ChangeLog	Fri Nov 09 18:15:40 2007 +0000
@@ -9,6 +9,13 @@
 
 2007-11-09  David Bateman  <dbateman@free.fr>
 
+	* plot/hidden.m: New function.
+	* plot/Makefile.in (SOURCES): Add it here.
+	* plot/meshc.m, plot/mesh.m: Set facecolor to White for hidden
+	line removal.
+	* plot/__go_draw_axes__.m: If facecolor is white flag hidden line
+	removal and if it is "none" don't do hidden line removal.
+
 	* plot/legend.m: Also allow labels for surface and patch types.
 	* plot/__bar__.m: Split into separate patch pbjects to allow
 	setting of the legend.
--- a/scripts/plot/Makefile.in	Fri Nov 09 18:01:45 2007 +0000
+++ b/scripts/plot/Makefile.in	Fri Nov 09 18:15:40 2007 +0000
@@ -83,6 +83,7 @@
   gca.m \
   gcf.m \
   grid.m \
+  hidden.m \
   hist.m \
   hold.m \
   isfigure.m \
--- a/scripts/plot/__go_draw_axes__.m	Fri Nov 09 18:01:45 2007 +0000
+++ b/scripts/plot/__go_draw_axes__.m	Fri Nov 09 18:15:40 2007 +0000
@@ -201,6 +201,7 @@
     data_idx = 0;
     data = cell ();
     is_image_data = [];
+    hidden_removal = true;
 
     xminp = yminp = zminp = cminp = Inf;
     xmax = ymax = zmax = cmax = -Inf;
@@ -341,7 +342,6 @@
 	    data{data_idx} = [xdat, ydat, zdat]';
 	    usingclause{data_idx} = "using ($1):($2):($3)";
 	    fputs (plot_stream, "set parametric;\n");
-	    fputs (plot_stream, "set hidden3d;\n");
 	    fputs (plot_stream, "set style data lines;\n");
 	    fputs (plot_stream, "set surface;\n");
 	    fputs (plot_stream, "unset contour;\n");
@@ -675,7 +675,6 @@
 	    withclause{data_idx} = "with line palette";
 
 	    fputs (plot_stream, "unset parametric;\n");
-	    fputs (plot_stream, "set hidden3d;\n");
 	    fputs (plot_stream, "set style data lines;\n");
 	    fputs (plot_stream, "set surface;\n");
 	    fputs (plot_stream, "unset contour;\n");
@@ -691,8 +690,15 @@
 				|| strncmp (obj.edgecolor, "interp", 6));
             palette_data = [];
 
+	    if (strncmp (obj.facecolor, "none", 4))
+	      hidden_removal = false;
+	    endif
+
             if (flat_interp_face
-		|| (flat_interp_edge && strncmp (obj.facecolor, "none", 4)))
+		|| (flat_interp_edge
+		    && (strncmp (obj.facecolor, "none", 4)
+			|| (isnumeric (obj.facecolor)
+			    && all (obj.facecolor == 1)))))
               palette_data = [1:rows(surf_colormap); surf_colormap'];
             endif
 
@@ -700,12 +706,16 @@
               palette_data = [1:2; [obj.facecolor; obj.facecolor]'];
             endif
 
-            if (strncmp (obj.facecolor, "none", 4)
+
+	    if ((strncmp (obj.facecolor, "none", 4)
+		 || (isnumeric (obj.facecolor)
+		     && all (obj.facecolor == 1)))
 		&& isnumeric (obj.edgecolor))
               palette_data = [1:2; [obj.edgecolor; obj.edgecolor]'];
             endif
 
-            if (strncmp (obj.facecolor, "none", 4))
+	    if (strncmp (obj.facecolor, "none", 4)
+		|| (isnumeric (obj.facecolor) && all (obj.facecolor == 1)))
             elseif (flat_interp_face && strncmp (obj.edgecolor, "flat", 4))
               fprintf (plot_stream, "set pm3d at s %s;\n", interp_str);
             else
@@ -825,6 +835,12 @@
 
     endfor
 
+    if (hidden_removal)
+      fputs (plot_stream, "set hidden3d;\n");
+    else
+      fputs (plot_stream, "unset hidden3d;\n");
+    endif
+
     have_data = (! (isempty (data) && any (cellfun (@isempty, data))));
 
     if (xautoscale && have_data)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/plot/hidden.m	Fri Nov 09 18:15:40 2007 +0000
@@ -0,0 +1,79 @@
+## Copyright (C) 2007 Michael Goffioul
+##
+## 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} {} hidden (@var{mode})
+## @deftypefnx {Function File} {} hidden ()
+## Manipulation the mesh hidden line removal. Called with no argument
+## the hidden line removal is toggled. The argument @var{mode} can be either
+## 'on' or 'off' and the set of the hidden line removal is set accordingly.
+## @seealso{mesh, meshc, surf}
+## @end deftypefn
+
+## PKG_ADD: mark_as_command hidden
+
+function retval = hidden (mode)
+
+  if (nargin == 0)
+    mode = "swap";
+  elseif (nargin == 1);
+    if (ischar (mode))
+      mode = tolower (mode);
+      if (! strcmp (mode, "on") && ! strcmp (mode, "off"))
+	error ("hidden: mode expected to be 'on' or 'off'");
+      endif
+    else
+      error ("hidden: expecting mode to be a string");
+    endif
+  else
+    print_usage ();
+  endif
+
+  for h = get (gca (), "children");
+    htype = lower (get (h, "type"));
+    if (strcmp (htype, "surface"))
+      fc = get (h, "facecolor");
+      if ((! ischar (fc) && is_white (fc))
+	  || (ischar (fc) && strcmp (fc, "none")))
+        switch (mode)
+        case "on"
+          set (h, "facecolor", "w");
+        case "off"
+          set (h, "facecolor", "none");
+        case "swap"
+          if (ischar (fc))
+            set (h, "facecolor", "w");
+	    mode = "on";
+          else
+            set (h, "facecolor", "none");
+	    mode = "off";
+          endif
+        endswitch
+      endif
+    endif
+  endfor
+
+  if (nargout > 0)
+    retval = mode;
+  endif
+
+endfunction
+
+function retval = is_white (color)
+  retval = all (color == 1);
+endfunction
--- a/scripts/plot/mesh.m	Fri Nov 09 18:01:45 2007 +0000
+++ b/scripts/plot/mesh.m	Fri Nov 09 18:15:40 2007 +0000
@@ -38,7 +38,7 @@
 
   ax = get (tmp, "parent");
 
-  set (tmp, "facecolor", "none");
+  set (tmp, "facecolor", "w");
   set (tmp, "edgecolor", "flat");
 
   if (! ishold ())
--- a/scripts/plot/meshc.m	Fri Nov 09 18:01:45 2007 +0000
+++ b/scripts/plot/meshc.m	Fri Nov 09 18:15:40 2007 +0000
@@ -35,7 +35,7 @@
 
   ax = get (tmp, "parent");
 
-  set (tmp, "facecolor", "none");
+  set (tmp, "facecolor", "w");
   set (tmp, "edgecolor", "flat");
 
   if (! ishold ())