diff scripts/plot/isonormals.m @ 9110:22ae6b3411a7

Add isocolor, isonormals and isosurface functions (For Martin Helm). Add 3D filled triangular patches and the trisurf function
author David Bateman <dbateman@free.fr>
date Sat, 11 Apr 2009 16:26:01 +0200
parents
children 3b810beddfa6
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/scripts/plot/isonormals.m
@@ -0,0 +1,78 @@
+## Copyright (C) 2009 Martin Helm
+##
+## This program 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.
+##
+## This program 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 this program; if not, see http://www.gnu.org/licenses/gpl.html.
+##
+## Author: Martin Helm <martin@mhelm.de>
+
+## usage: NORMALS = isonormals(X,Y,Z,V,VERT)
+## usage: NORMALS = isonormals(V,VERT)
+## usage: NORMALS = isonormals(V,P)
+## usage: NORMALS = isonormals(X,Y,Z,V,P)
+## usage: NORMALS = isonormals(...,'negate')
+## usage: isonormals(V,P)
+## usage: isonormals(X,Y,Z,V,P)
+##
+
+function varargout = isonormals(varargin)
+  na = nargin;
+  negate = false;
+  if (ischar (varargin{nargin}))
+    na = nargin-1;
+    if (strcmp (lower (varargin{nargin}), "negate"))
+      negate = true;
+    else
+      error ("Unknown option '%s'", varargin{nargin});
+    endif
+  endif
+  switch na
+    case 2
+      c = varargin{1};
+      vp = varargin{2};
+      x = 1:size (c, 2);
+      y = 1:size (c, 1);
+      z = 1:size (c, 3);
+    case 5
+      x = varargin{1};
+      y = varargin{2};
+      z = varargin{3};
+      c = varargin{4};
+      vp = varargin{5};
+    otherwise 
+      print_usage ();
+  endswitch
+  if (ismatrix (vp) && size (vp,2) == 3)
+    pa = [];
+    v = vp;
+  elseif (ishandle (vp))
+    pa = vp;
+    v = get (pa, "Vertices");
+  else
+    error ("Last argument is no vertex list and no patch handle");
+  endif
+  if (negate)
+    normals = -__interp_cube__ (x, y, z, c, v, "normals");
+  else
+    normals = __interp_cube__ (x, y, z, c, v, "normals");
+  endif
+  switch nargout
+    case 0
+      if (!isempty (pa))
+        set (pa, "VertexNormals", normals);
+      endif
+    case 1
+      varargout = {normals};
+    otherwise
+      print_usage ();
+  endswitch
+endfunction
\ No newline at end of file