octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Why does "mesh " set surface "facecolor" to "none"?


From: David Bateman
Subject: Re: Why does "mesh " set surface "facecolor" to "none"?
Date: Fri, 09 Nov 2007 11:30:26 +0100
User-agent: Thunderbird 1.5.0.7 (X11/20060921)

Kai Habel wrote:
> Michael Goffioul schrieb:
>   
>> Matlab sets it to [1 1 1] by default, which looks better.
>>
>> Other remarks concerning "mesh":
>> 1) axes properties ("view") should only be changed if the axes object
>> is not in hold mode (that is gca.nextplot is not "add")
>> 2) box should be disabled and grid should be enabled (again only in
>> non-hold mode)
>>
>> The above remarks actually applies to any standard function producing
>> 3D plots (surf, mesh, bar3...).
>>
>> Michael.
>>
>>   
>>     
> I think its a limitation of gnuplot.
> I have not found a way to plot the mesh color independent of the surface
> color when the mesh color depends on the z-value (or c-value) and the
> surface color is constant with gnuplot. Fortunately the other way around
> (surface color depends on z-value and mesh color is constant) works.
> Maybe, somebody has an idea how to do it the matlab way with gnuplot?
>
> I will look at your other remarks.
>
> Kai
>
>   
If that is the case I don't think the workaround for a gnuplot issue
should be in the get/set functions but rather in the __go_draw_axes__.m
function, and keeping the workaround in get/set breaks the
frontend/backend graphics model we are promoting to allow different
backends to be included.. Additionally, matlab uses facecolor equal to
"none" to flag that hidden line removal shouldn't be done, and the way
it currently stands we can't toggle hidden line removal. I think the
facecolor should be set to white in mesh and meshc and then a fix made
for gnuplot elsewhere and the hidden function included..

Something like the attached should do it.

D.





-- 
David Bateman                                address@hidden
Motorola Labs - Paris                        +33 1 69 35 48 04 (Ph) 
Parc Les Algorithmes, Commune de St Aubin    +33 6 72 01 06 33 (Mob) 
91193 Gif-Sur-Yvette FRANCE                  +33 1 69 35 77 01 (Fax) 

The information contained in this communication has been classified as: 

[x] General Business Information 
[ ] Motorola Internal Use Only 
[ ] Motorola Confidential Proprietary

*** ./scripts/plot/mesh.m.orig12        2007-11-09 10:54:46.617681199 +0100
--- ./scripts/plot/mesh.m       2007-11-09 10:55:31.807334870 +0100
***************
*** 38,44 ****
  
    ax = get (tmp, "parent");
  
!   set (tmp, "facecolor", "none");
    set (tmp, "edgecolor", "flat");
  
    set (ax, "view", [-37.5, 30]);
--- 38,44 ----
  
    ax = get (tmp, "parent");
  
!   set (tmp, "facecolor", "w");
    set (tmp, "edgecolor", "flat");
  
    set (ax, "view", [-37.5, 30]);
*** ./scripts/plot/hidden.m.orig12      2007-11-09 10:54:52.412380694 +0100
--- ./scripts/plot/hidden.m     2007-11-09 10:26:53.307896722 +0100
***************
*** 0 ****
--- 1,78 ----
+ ## 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})
+ ## @deftypefn {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 [ ret ] = is_white (color)
+   ret = all (color == 1);
+ endfunction
*** ./scripts/plot/Makefile.in.orig12   2007-11-09 10:54:59.337021447 +0100
--- ./scripts/plot/Makefile.in  2007-11-09 10:56:00.821825080 +0100
***************
*** 81,86 ****
--- 81,87 ----
    gca.m \
    gcf.m \
    grid.m \
+   hidden.m \
    hist.m \
    hold.m \
    isfigure.m \
*** ./scripts/plot/meshc.m.orig12       2007-11-09 10:55:05.395706999 +0100
--- ./scripts/plot/meshc.m      2007-11-09 10:55:44.290685595 +0100
***************
*** 35,41 ****
  
    ax = get (tmp, "parent");
  
!   set (tmp, "facecolor", "none");
    set (tmp, "edgecolor", "flat");
  
    set (ax, "view", [-37.5, 30]);
--- 35,41 ----
  
    ax = get (tmp, "parent");
  
!   set (tmp, "facecolor", "w");
    set (tmp, "edgecolor", "flat");
  
    set (ax, "view", [-37.5, 30]);
*** ./scripts/plot/__go_draw_axes__.m.orig12    2007-11-09 10:55:20.941899611 
+0100
--- ./scripts/plot/__go_draw_axes__.m   2007-11-09 11:20:23.509771138 +0100
***************
*** 201,206 ****
--- 201,207 ----
      data_idx = 0;
      data = cell ();
      is_image_data = [];
+     hidden_removal = true;
  
      xminp = yminp = zminp = cminp = Inf;
      xmax = ymax = zmax = cmax = -Inf;
***************
*** 341,347 ****
            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");
--- 342,347 ----
***************
*** 670,676 ****
            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");
--- 670,675 ----
***************
*** 686,693 ****
                                || strncmp (obj.edgecolor, "interp", 6));
              palette_data = [];
  
              if (flat_interp_face
!               || (flat_interp_edge && strncmp (obj.facecolor, "none", 4)))
                palette_data = [1:rows(surf_colormap); surf_colormap'];
              endif
  
--- 685,699 ----
                                || 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) || 
!                    (isnumeric (obj.facecolor) &&
!                     all (obj.facecolor == 1)))))
                palette_data = [1:rows(surf_colormap); surf_colormap'];
              endif
  
***************
*** 695,706 ****
                palette_data = [1:2; [obj.facecolor; obj.facecolor]'];
              endif
  
!             if (strncmp (obj.facecolor, "none", 4)
                && isnumeric (obj.edgecolor))
                palette_data = [1:2; [obj.edgecolor; obj.edgecolor]'];
              endif
  
!             if (strncmp (obj.facecolor, "none", 4))
              elseif (flat_interp_face && strncmp (obj.edgecolor, "flat", 4))
                fprintf (plot_stream, "set pm3d at s %s;\n", interp_str);
              else
--- 701,717 ----
                palette_data = [1:2; [obj.facecolor; obj.facecolor]'];
              endif
  
! 
!           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) || 
!               (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
***************
*** 820,825 ****
--- 831,842 ----
  
      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)
2007-11-09  David Bateman  <address@hidden>

        * 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.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]