diff src/graphics.cc @ 7363:c31e5dab4f85

[project @ 2008-01-12 08:21:57 by jwe]
author jwe
date Sat, 12 Jan 2008 08:21:57 +0000
parents 11c5f1ee553e
children 0e07f78369d1
line wrap: on
line diff
--- a/src/graphics.cc	Sat Jan 12 08:00:38 2008 +0000
+++ b/src/graphics.cc	Sat Jan 12 08:21:57 2008 +0000
@@ -50,6 +50,93 @@
   error ("set: invalid value for %s property", pname.c_str ());
 }
 
+static Matrix
+jet_colormap (void)
+{
+  Matrix cmap (64, 3, 0.0);
+
+  for (octave_idx_type i = 0; i < 64; i++)
+    {
+      // This is the jet colormap.  It would be nice to be able
+      // to feval the jet function but since there is a static
+      // property object that includes a colormap_property
+      // object, we need to initialize this before main is even
+      // called, so calling an interpreted function is not
+      // possible.
+
+      double x = i / 63.0;
+
+      if (x >= 3.0/8.0 && x < 5.0/8.0)
+        cmap(i,0) = 4.0 * x - 3.0/2.0;
+      else if (x >= 5.0/8.0 && x < 7.0/8.0)
+        cmap(i,0) = 1.0;
+      else if (x >= 7.0/8.0)
+        cmap(i,0) = -4.0 * x + 9.0/2.0;
+
+      if (x >= 1.0/8.0 && x < 3.0/8.0)
+        cmap(i,1) = 4.0 * x - 1.0/2.0;
+      else if (x >= 3.0/8.0 && x < 5.0/8.0)
+        cmap(i,1) = 1.0;
+      else if (x >= 5.0/8.0 && x < 7.0/8.0)
+        cmap(i,1) = -4.0 * x + 7.0/2.0;
+
+      if (x < 1.0/8.0)
+        cmap(i,2) = 4.0 * x + 1.0/2.0;
+      else if (x >= 1.0/8.0 && x < 3.0/8.0)
+        cmap(i,2) = 1.0;
+      else if (x >= 3.0/8.0 && x < 5.0/8.0)
+        cmap(i,2) = -4.0 * x + 5.0/2.0;
+    }
+
+  return cmap;
+}
+
+static Matrix
+default_colororder (void)
+{
+  Matrix retval (7, 3, 0.0);
+
+  retval(0,2) = 1.0;
+
+  retval(1,1) = 0.5;
+
+  retval(2,0) = 1.0;
+
+  retval(3,1) = 0.75;
+  retval(3,2) = 0.75;
+
+  retval(4,0) = 0.75;
+  retval(4,2) = 0.75;
+
+  retval(5,0) = 0.75;
+  retval(5,1) = 0.75;
+
+  retval(6,0) = 0.25;
+  retval(6,1) = 0.25;
+  retval(6,2) = 0.25;
+
+  return retval;
+}
+
+static Matrix
+default_lim (void)
+{
+  Matrix m (1, 2, 0);
+  m(1) = 1;
+  return m;
+}
+
+static Matrix
+default_data (void)
+{
+  Matrix retval (1, 2);
+
+  retval(0) = 0;
+  retval(1) = 1;
+
+  return retval;
+}
+
 // ---------------------------------------------------------------------
 
 radio_values::radio_values (const std::string& opt_string)
@@ -118,59 +205,14 @@
   if (retval)
     {
       for (int i = 0; i < 3; i++)
-	xrgb[i] = tmp_rgb[i];
+	xrgb(i) = tmp_rgb[i];
     }
 
   return retval;
 }
 
-color_property::color_property (const octave_value& val)
-  : radio_val (), current_val ()
-{
-  // FIXME -- need some error checking here.
-
-  if (val.is_string ())
-    {
-      std::string s = val.string_value ();
-
-      if (! s.empty ())
-	{
-	  color_values col (s);
-	  if (! error_state)
-	    {
-	      color_val = col;
-	      current_type = color_t;
-	    }
-	}
-      else
-	error ("invalid color specification");	  
-    }
-  else if (val.is_real_matrix ())
-    {
-      Matrix m = val.matrix_value ();
-
-      if (m.numel () == 3)
-	{
-	  color_values col (m (0), m (1), m(2));
-	  if (! error_state)
-	    {
-	      color_val = col;
-	      current_type = color_t;
-	    }
-	}
-      else
-	error ("invalid color specification");
-    }
-  else 
-    error ("invalid color specification");
-}
-
-// We also provide this assignment operator so that assignment from an
-// octave_value object can happen without wiping out list of possible
-// radio_values set in color_property constructor.
-
-color_property&
-color_property::operator = (const octave_value& val)
+void
+color_property::set (const octave_value& val)
 {
   if (val.is_string ())
     {
@@ -192,11 +234,13 @@
 		  current_type = color_t;
 		}
 	      else
-		error ("invalid color specification");	  
+		error ("invalid value for color property \"%s\" (value = %s)",
+               get_name ().c_str (), s.c_str ());
 	    }	
 	}
       else
-	error ("invalid color specification");	  
+	error ("invalid value for color property \"%s\"",
+           get_name ().c_str ());
     }
   else if (val.is_real_matrix ())
     {
@@ -212,14 +256,98 @@
 	    }
 	}
       else
-	error ("invalid color specification");
+	error ("invalid value for color property \"%s\"",
+           get_name ().c_str ());
     }
   else 
-    error ("invalid color specification");
-
-  return *this;
+    error ("invalid value for color property \"%s\"",
+           get_name ().c_str ());
 }
 
+bool
+array_property::validate (const octave_value& v)
+{
+  bool ok = false;
+
+  // FIXME: should we always support []?
+  if (v.is_empty () && v.is_double_type ())
+    return true;
+
+  // check value type
+  if (type_constraints.size () > 0)
+    {
+      for (std::list<std::string>::const_iterator it = type_constraints.begin ();
+           ! ok && it != type_constraints.end (); ++it)
+        if ((*it) == v.type_name ())
+          ok = true;
+    }
+  else
+    ok = v.is_double_type ();
+
+  if (ok)
+    {
+      dim_vector vdims = v.dims ();
+      int vlen = vdims.length ();
+
+      ok = false;
+
+      // check value size
+      if (size_constraints.size () > 0)
+        for (std::list<dim_vector>::const_iterator it = size_constraints.begin ();
+             ! ok && it != size_constraints.end (); ++it)
+          {
+            dim_vector itdims = (*it);
+
+            if (itdims.length () == vlen)
+              {
+                ok = true;
+
+                for (int i = 0; ok && i < vlen; i++)
+                  if (itdims(i) >= 0 && itdims(i) != vdims(i))
+                    ok = false;
+              }
+          }
+      else
+        return true;
+    }
+
+  return ok;
+}
+
+void
+handle_property::set (const octave_value& v)
+{
+  double dv = v.double_value ();
+
+  if (! error_state)
+    {
+      graphics_handle gh = gh_manager::lookup (dv);
+
+      if (xisnan (gh.value ()) || gh.ok ())
+        current_val = gh;
+      else
+        error ("set: invalid graphics handle (= %g) for property \"%s\"",
+            dv, get_name ().c_str ());
+    }
+  else
+    error ("set: invalid graphics handle for property \"%s\"",
+        get_name ().c_str ());
+}
+
+bool
+callback_property::validate (const octave_value& v) const
+{
+  // FIXME: implement this
+  return true;
+}
+
+void
+callback_property::execute (void)
+{
+  // FIXME: define correct signature and implement this
+}
+
+// ---------------------------------------------------------------------
 
 void
 property_list::set (const caseless_str& name, const octave_value& val)
@@ -686,6 +814,88 @@
     }
 }
 
+octave_value
+base_properties::get (const caseless_str& name) const
+{
+  octave_value retval;
+
+  if (name.compare ("tag"))
+    retval = get_tag ();
+  else if (name.compare ("type"))
+    retval = get_type ();
+  else if (name.compare ("__modified__"))
+    retval = is_modified ();
+  else if (name.compare ("parent"))
+    retval = get_parent ().as_octave_value ();
+  else if (name.compare ("children"))
+    retval = children;
+  else
+  {
+    std::map<caseless_str, property>::const_iterator it = all_props.find (name);
+
+    if (it != all_props.end ())
+      retval = it->second.get ();
+    else
+      error ("get: unknown property \"%s\"", name.c_str ());
+  }
+
+  return retval;
+}
+
+octave_value
+base_properties::get (void) const
+{
+  Octave_map m;
+
+  for (std::map<caseless_str, property>::const_iterator it = all_props.begin ();
+       it != all_props.end (); ++it)
+    m.assign (it->second.get_name (), it->second.get ());
+
+  m.assign ("tag", get_tag ());
+  m.assign ("type", get_type ());
+  m.assign ("__modified__", is_modified ());
+  m.assign ("parent", get_parent ().as_octave_value ());
+  m.assign ("children", children);
+
+  return m;
+}
+
+void
+base_properties::set (const caseless_str& name, const octave_value& val)
+{
+  if (name.compare ("tag"))
+    set_tag (val);
+  else if (name.compare ("__modified__"))
+    __modified__ = val;
+  else if (name.compare ("parent"))
+    set_parent (val);
+  else if (name.compare ("children"))
+    maybe_set_children (children, val);
+  else
+  {
+    std::map<caseless_str, property>::iterator it = all_props.find (name);
+
+    if (it != all_props.end ())
+      it->second.set (val);
+    else
+      error ("set: unknown property \"%s\"", name.c_str ());
+  }
+
+  if (! error_state && ! name.compare ("__modified__"))
+    mark_modified ();
+}
+
+property
+base_properties::get_property (const caseless_str& name) const
+{
+  std::map<caseless_str, property>::const_iterator it = all_props.find (name);
+
+  if (it == all_props.end ())
+    return property ();
+  else
+    return it->second;
+}
+
 void
 base_properties::remove_child (const graphics_handle& h)
 {
@@ -714,17 +924,6 @@
 }
 
 void
-base_properties::set_tag (const octave_value& val)
-{
-  std::string tmp = val.string_value ();
-
-  if (! error_state)
-    tag = tmp;
-  else
-    error ("set: expecting tag to be a character string");
-}
-
-void
 base_properties::set_parent (const octave_value& val)
 {
   double tmp = val.double_value ();
@@ -737,13 +936,13 @@
 
       if (new_parent.ok ())
 	{
-	  graphics_object parent_obj = gh_manager::get_object (parent);
+	  graphics_object parent_obj = gh_manager::get_object (get_parent ());
 
 	  parent_obj.remove_child (__myhandle__);
 
-	  parent = new_parent;
+	  parent = new_parent.as_octave_value ();
 
-	  ::adopt (parent, __myhandle__);
+	  ::adopt (parent.handle_value (), __myhandle__);
 	}
       else
 	error ("set: invalid graphics handle (= %g) for parent", tmp);
@@ -755,22 +954,22 @@
 void
 base_properties::mark_modified (void)
 {
-  __modified__ = true;
-  graphics_object parent_obj = gh_manager::get_object (parent);
+  __modified__ = "on";
+  graphics_object parent_obj = gh_manager::get_object (get_parent ());
   parent_obj.mark_modified ();
 }
 
 void
 base_properties::override_defaults (base_graphics_object& obj)
 {
-  graphics_object parent_obj = gh_manager::get_object (parent);
+  graphics_object parent_obj = gh_manager::get_object (get_parent ());
   parent_obj.override_defaults (obj);
 }
 
 void
 base_properties::update_axis_limits (const std::string& axis_type) const
 {
-  graphics_handle h = (type == "axes") ? __myhandle__ : parent;
+  graphics_handle h = (get_type () == "axes") ? __myhandle__ : get_parent ();
 
   graphics_object obj = gh_manager::get_object (h);
 
@@ -787,9 +986,17 @@
     gh_manager::free (children(i));
 }
 
+// ---------------------------------------------------------------------
+
+#include "graphics-props.cc"
+
+// ---------------------------------------------------------------------
+
 void
-root_figure::properties::set_currentfigure (const graphics_handle& val)
+root_figure::properties::set_currentfigure (const octave_value& v)
 {
+  graphics_handle val (v.double_value ());
+
   if (error_state)
     return;
 
@@ -797,86 +1004,22 @@
     {
       currentfigure = val;
 
-      gh_manager::push_figure (currentfigure);
+      gh_manager::push_figure (val);
     }
   else
     gripe_set_invalid ("currentfigure");
 }
 
-void
-root_figure::properties::set (const caseless_str& name,
-			      const octave_value& val)
-{
-  if (name.compare ("tag"))
-    set_tag (val);
-  else if (name.compare ("currentfigure"))
-    set_currentfigure (val);
-  else if (name.compare ("children"))
-    children = maybe_set_children (children, val);
-  else if (name.compare ("visible"))
-    set_visible (val);
-  else
-    warning ("set: invalid property `%s'", name.c_str ());
-}
-
-octave_value root_figure::properties::get (void) const
-{
-  Octave_map m;
-
-  m.assign ("tag", tag);
-  m.assign ("type", type);
-  m.assign ("currentfigure", currentfigure.as_octave_value ());
-  m.assign ("children", children);
-  m.assign ("visible", visible);
-
-  return m;
-}
-
-octave_value 
-root_figure::properties::get (const caseless_str& name) const
-{
-  octave_value retval;
-
-  if (name.compare ("tag"))
-    retval = type;
-  else if (name.compare ("tag"))
-    retval = type;
-  else if (name.compare ("currentfigure"))
-    retval = currentfigure.as_octave_value ();
-  else if (name.compare ("children"))
-    retval = children;
-  else if (name.compare ("visible"))
-    retval = visible;
-  else
-    warning ("get: invalid property `%s'", name.c_str ());
-
-  return retval;
-}
-
 property_list
 root_figure::factory_properties = root_figure::init_factory_properties ();
 
-std::string root_figure::properties::go_name ("root figure");
-
 // ---------------------------------------------------------------------
 
-figure::properties::properties (const graphics_handle& mh,
-				const graphics_handle& p)
-  : base_properties (go_name, mh, p),
-    __plot_stream__ (Matrix ()),
-    __enhanced__ (false),
-    nextplot ("replace"),
-    closerequestfcn (make_fcn_handle ("closereq")),
-    currentaxes (octave_NaN),
-    colormap (),
-    visible ("on"),
-    paperorientation ("portrait"),
-    color ( color_values (1, 1, 1))
-{ }
+void
+figure::properties::set_currentaxes (const octave_value& v)
+{
+  graphics_handle val (v.double_value ());
 
-void
-figure::properties::set_currentaxes (const graphics_handle& val)
-{
   if (error_state)
     return;
 
@@ -901,117 +1044,13 @@
 }
 
 void
-figure::properties::set (const caseless_str& name, const octave_value& val)
-{
-  bool modified = true;
-
-  if (name.compare ("tag"))
-    set_tag (val);
-  else if (name.compare ("children"))
-    children = maybe_set_children (children, val);
-  else if (name.compare ("__modified__"))
-    {
-      __modified__ = val.bool_value ();
-      modified = false;
-    }
-  else if (name.compare ("__plot_stream__"))
-    set___plot_stream__ (val);
-  else if (name.compare ("__enhanced__"))
-    set___enhanced__ (val);
-  else if (name.compare ("nextplot"))
-    set_nextplot (val);
-  else if (name.compare ("closerequestfcn"))
-    set_closerequestfcn (val);
-  else if (name.compare ("currentaxes"))
-    set_currentaxes (val);
-  else if (name.compare ("colormap"))
-    set_colormap (val);
-  else if (name.compare ("visible"))
-    set_visible (val);
-  else if (name.compare ("paperorientation"))
-    set_paperorientation (val);
-  else if (name.compare ("color"))
-    set_color (val);
-  else
-    {
-      modified = false;
-      warning ("set: invalid property `%s'", name.c_str ());
-    }
-
-  if (modified)
-    mark_modified ();
-}
-
-octave_value
-figure::properties::get (void) const
-{
-  Octave_map m;
-
-  m.assign ("tag", tag);
-  m.assign ("type", type);
-  m.assign ("parent", parent.as_octave_value ());
-  m.assign ("children", children);
-  m.assign ("__modified__", __modified__);
-  m.assign ("__plot_stream__", __plot_stream__);
-  m.assign ("__enhanced__", __enhanced__);
-  m.assign ("nextplot", nextplot);
-  m.assign ("closerequestfcn", closerequestfcn);
-  m.assign ("currentaxes", currentaxes.as_octave_value ());
-  m.assign ("colormap", colormap);
-  m.assign ("visible", visible);
-  m.assign ("paperorientation", paperorientation);
-  m.assign ("color", color);
-
-  return m;
-}
-
-octave_value
-figure::properties::get (const caseless_str& name) const
-{
-  octave_value retval;
-
-  if (name.compare ("tag"))
-    retval = tag;
-  else if (name.compare ("type"))
-    retval = type;
-  else if (name.compare ("parent"))
-    retval = parent.as_octave_value ();
-  else if (name.compare ("children"))
-    retval = children;
-  else if (name.compare ("__modified__"))
-    retval = __modified__;
-  else if (name.compare ("__plot_stream__"))
-    retval = __plot_stream__;
-  else if (name.compare ("__enhanced__"))
-    retval = __enhanced__;
-  else if (name.compare ("nextplot"))
-    retval = nextplot;
-  else if (name.compare ("closerequestfcn"))
-    retval = closerequestfcn;
-  else if (name.compare ("currentaxes"))
-    retval = currentaxes.as_octave_value ();
-  else if (name.compare ("colormap"))
-    retval = colormap;
-  else if (name.compare ("visible"))
-    retval = visible;
-  else if (name.compare ("paperorientation"))
-    retval = paperorientation;
-  else if (name.compare ("color"))
-    retval = color;
-  else
-    warning ("get: invalid property `%s'", name.c_str ());
-
-  return retval;
-}
-
-void
 figure::properties::close (void)
 {
-  if (! __plot_stream__.is_empty ())
+  if (! get___plot_stream__ ().is_empty ())
     {
       octave_value_list args;
       args(1) = "\nquit;\n";
-      args(0) = __plot_stream__;
+      args(0) = get___plot_stream__ ();
       feval ("fputs", args);
       args.resize (1);
       feval ("fflush", args);
@@ -1025,20 +1064,6 @@
   xset (0, "currentfigure", cf.value ());
 }
 
-property_list::pval_map_type
-figure::properties::factory_defaults (void)
-{
-  property_list::pval_map_type m;
-
-  m["nextplot"] = "replace";
-  // m["closerequestfcn"] = make_fcn_handle ("closereq");
-  m["colormap"] = colormap_property ();
-  m["visible"] = "on";
-  m["paperorientation"] = "portrait";
-  m["color"] = color_property (color_values (1, 1, 1));
-  return m;
-}
-
 octave_value
 figure::get_default (const caseless_str& name) const
 {
@@ -1055,335 +1080,70 @@
   return retval;
 }
 
-std::string figure::properties::go_name ("figure");
-
 // ---------------------------------------------------------------------
 
-static Matrix
-default_colororder (void)
+void
+axes::properties::set_title (const octave_value& v)
 {
-  Matrix retval (7, 3, 0.0);
-
-  retval(0,2) = 1.0;
-
-  retval(1,1) = 0.5;
-
-  retval(2,0) = 1.0;
-
-  retval(3,1) = 0.75;
-  retval(3,2) = 0.75;
-
-  retval(4,0) = 0.75;
-  retval(4,2) = 0.75;
-
-  retval(5,0) = 0.75;
-  retval(5,1) = 0.75;
-
-  retval(6,0) = 0.25;
-  retval(6,1) = 0.25;
-  retval(6,2) = 0.25;
-
-  return retval;
-}
+  graphics_handle val = ::reparent (v, "set", "title", __myhandle__, false);
 
-axes::properties::properties (const graphics_handle& mh,
-			      const graphics_handle& p)
-  : base_properties (go_name, mh, p),
-    position (Matrix ()),
-    title (octave_NaN),
-    box ("on"),
-    key ("off"),
-    keybox ("off"),
-    keypos (1),
-    colororder (default_colororder ()),
-    dataaspectratio (Matrix (1, 3, 1.0)),
-    dataaspectratiomode ("auto"),
-    layer (radio_values ("{bottom}|top")),
-    xlim (),
-    ylim (),
-    zlim (),
-    clim (),
-    xlimmode (radio_values ("{auto}|manual")),
-    ylimmode (radio_values ("{auto}|manual")),
-    zlimmode (radio_values ("{auto}|manual")),
-    climmode (radio_values ("{auto}|manual")),
-    xlabel (octave_NaN),
-    ylabel (octave_NaN),
-    zlabel (octave_NaN),
-    xgrid ("off"),
-    ygrid ("off"),
-    zgrid ("off"),
-    xminorgrid ("off"),
-    yminorgrid ("off"),
-    zminorgrid ("off"),
-    xtick (Matrix ()),
-    ytick (Matrix ()),
-    ztick (Matrix ()),
-    xtickmode ("auto"),
-    ytickmode ("auto"),
-    ztickmode ("auto"),
-    xticklabel (""),
-    yticklabel (""),
-    zticklabel (""),
-    xticklabelmode ("auto"),
-    yticklabelmode ("auto"),
-    zticklabelmode ("auto"),
-    color (color_values (0, 0, 0), radio_values ("flat|none|interp")),
-    xcolor (color_values (0, 0, 0)),
-    ycolor (color_values (0, 0, 0)),
-    zcolor (color_values (0, 0, 0)),
-    xscale (radio_values ("{linear}|log")),
-    yscale (radio_values ("{linear}|log")),
-    zscale (radio_values ("{linear}|log")),
-    xdir ("normal"),
-    ydir ("normal"),
-    zdir ("normal"),
-    xaxislocation ("bottom"),
-    yaxislocation ("left"),
-    view (),
-    visible ("on"),
-    nextplot ("replace"),
-    outerposition (),
-    activepositionproperty (radio_values ("{outerposition}|position")),
-    __colorbar__ (radio_values ("{none}|north|south|east|west|northoutside|southoutside|eastoutside|westoutside"))
-{
-  Matrix tlim (1, 2, 0.0);
-  tlim(1) = 1;
-  xlim = tlim;
-  ylim = tlim;
-  zlim = tlim;
-  Matrix cl (1, 2, 0);
-  cl(1) = 1;
-  clim = cl;
-
-  Matrix tview (1, 2, 0.0);
-  tview(1) = 90;
-  view = tview;
-
-  Matrix touterposition (1, 4, 0.0);
-  touterposition(2) = 1;
-  touterposition(3) = 1;
-  outerposition = touterposition;
-}
-
-void
-axes::properties::set_title (const graphics_handle& val)
-{
   if (! error_state)
     {
-      gh_manager::free (title);
+      gh_manager::free (title.handle_value ());
       title = val;
     }
 }
 
 void
-axes::properties::set_title (const octave_value& val)
+axes::properties::set_xlabel (const octave_value& v)
 {
-  set_title (::reparent (val, "set", "title", __myhandle__, false));
-}
+  graphics_handle val = ::reparent (v, "set", "xlabel", __myhandle__, false);
 
-void
-axes::properties::set_xlabel (const graphics_handle& val)
-{
   if (! error_state)
     {
-      gh_manager::free (xlabel);
+      gh_manager::free (xlabel.handle_value ());
       xlabel = val;
     }
 }
 
 void
-axes::properties::set_xlabel (const octave_value& val)
+axes::properties::set_ylabel (const octave_value& v)
 {
-  set_xlabel (::reparent (val, "set", "xlabel", __myhandle__, false));
-}
+  graphics_handle val = ::reparent (v, "set", "ylabel", __myhandle__, false);
 
-void
-axes::properties::set_ylabel (const graphics_handle& val)
-{
   if (! error_state)
     {
-      gh_manager::free (ylabel);
+      gh_manager::free (ylabel.handle_value ());
       ylabel = val;
     }
 }
 
 void
-axes::properties::set_ylabel (const octave_value& val)
+axes::properties::set_zlabel (const octave_value& v)
 {
-  set_ylabel (::reparent (val, "set", "ylabel", __myhandle__, false));
-}
+  graphics_handle val = ::reparent (v, "set", "zlabel", __myhandle__, false);
 
-void
-axes::properties::set_zlabel (const graphics_handle& val)
-{
   if (! error_state)
     {
-      gh_manager::free (zlabel);
+      gh_manager::free (zlabel.handle_value ());
       zlabel = val;
     }
 }
 
 void
-axes::properties::set_zlabel (const octave_value& val)
-{
-  set_zlabel (::reparent (val, "set", "zlabel", __myhandle__, false));
-}
-
-void
-axes::properties::set (const caseless_str& name, const octave_value& val)
-{
-  bool modified = true;
-
-  if (name.compare ("tag"))
-    set_tag (val);
-  else if (name.compare ("parent"))
-    set_parent (val);
-  else if (name.compare ("children"))
-    children = maybe_set_children (children, val);
-  else if (name.compare ("__modified__"))
-    {
-      __modified__ = val.bool_value ();
-      modified = false;
-    }
-  else if (name.compare ("position"))
-    set_position (val);
-  else if (name.compare ("title"))
-    set_title (val);
-  else if (name.compare ("box"))
-    set_box (val);
-  else if (name.compare ("key"))
-    set_key (val);
-  else if (name.compare ("keybox"))
-    set_keybox (val);
-  else if (name.compare ("keypos"))
-    set_keypos (val);
-  else if (name.compare ("colororder"))
-    set_colororder (val);
-  else if (name.compare ("dataaspectratio"))
-    set_dataaspectratio (val);
-  else if (name.compare ("dataaspectratiomode"))
-    set_dataaspectratiomode (val);
-  else if (name.compare ("layer"))
-    set_layer (val);
-  else if (name.compare ("xlim"))
-    set_xlim (val);
-  else if (name.compare ("ylim"))
-    set_ylim (val);
-  else if (name.compare ("zlim"))
-    set_zlim (val);
-  else if (name.compare ("clim"))
-    set_clim (val);
-  else if (name.compare ("xlimmode"))
-    set_xlimmode (val);
-  else if (name.compare ("ylimmode"))
-    set_ylimmode (val);
-  else if (name.compare ("zlimmode"))
-    set_zlimmode (val);
-  else if (name.compare ("climmode"))
-    set_climmode (val);
-  else if (name.compare ("xlabel"))
-    set_xlabel (val);
-  else if (name.compare ("ylabel"))
-    set_ylabel (val);
-  else if (name.compare ("zlabel"))
-    set_zlabel (val);
-  else if (name.compare ("xgrid"))
-    set_xgrid (val);
-  else if (name.compare ("ygrid"))
-    set_ygrid (val);
-  else if (name.compare ("zgrid"))
-    set_zgrid (val);
-  else if (name.compare ("xminorgrid"))
-    set_xminorgrid (val);
-  else if (name.compare ("yminorgrid"))
-    set_yminorgrid (val);
-  else if (name.compare ("zminorgrid"))
-    set_zminorgrid (val);
-  else if (name.compare ("xtick"))
-    set_xtick (val);
-  else if (name.compare ("ytick"))
-    set_ytick (val);
-  else if (name.compare ("ztick"))
-    set_ztick (val);
-  else if (name.compare ("xtickmode"))
-    set_xtickmode (val);
-  else if (name.compare ("ytickmode"))
-    set_ytickmode (val);
-  else if (name.compare ("ztickmode"))
-    set_ztickmode (val);
-  else if (name.compare ("xticklabel"))
-    set_xticklabel (val);
-  else if (name.compare ("yticklabel"))
-    set_yticklabel (val);
-  else if (name.compare ("zticklabel"))
-    set_zticklabel (val);
-  else if (name.compare ("xticklabelmode"))
-    set_xticklabelmode (val);
-  else if (name.compare ("yticklabelmode"))
-    set_yticklabelmode (val);
-  else if (name.compare ("zticklabelmode"))
-    set_zticklabelmode (val);
-  else if (name.compare ("color"))
-    set_color (val);
-  else if (name.compare ("xcolor"))
-    set_xcolor (val);
-  else if (name.compare ("ycolor"))
-    set_ycolor (val);
-  else if (name.compare ("zcolor"))
-    set_zcolor (val);
-  else if (name.compare ("xscale"))
-    set_xscale (val);
-  else if (name.compare ("yscale"))
-    set_yscale (val);
-  else if (name.compare ("zscale"))
-    set_zscale (val);
-  else if (name.compare ("xdir"))
-    set_xdir (val);
-  else if (name.compare ("ydir"))
-    set_ydir (val);
-  else if (name.compare ("zdir"))
-    set_zdir (val);
-  else if (name.compare ("xaxislocation"))
-    set_xaxislocation (val);
-  else if (name.compare ("yaxislocation"))
-    set_yaxislocation (val);
-  else if (name.compare ("view"))
-    set_view (val);
-  else if (name.compare ("visible"))
-    set_visible (val);
-  else if (name.compare ("nextplot"))
-    set_nextplot (val);
-  else if (name.compare ("outerposition"))
-    set_outerposition (val);
-  else if (name.compare ("activepositionproperty"))
-    set_activepositionproperty (val);
-  else if (name.compare ("__colorbar__"))
-    set___colorbar__ (val);
-  else
-    {
-      modified = false;
-      warning ("set: invalid property `%s'", name.c_str ());
-    }
-
-  if (modified)
-    mark_modified ();
-}
-
-void
 axes::properties::set_defaults (base_graphics_object& obj,
 				const std::string& mode)
 {
   position = Matrix ();
-  title = octave_NaN;
+  title = graphics_handle ();
   box = "on";
   key = "off";
   keybox = "off";
-  keypos = 1;
+  keypos = 1.0;
   colororder = default_colororder ();
   dataaspectratio = Matrix (1, 3, 1.0);
   dataaspectratiomode = "auto";
-  layer = radio_property (radio_values ("{bottom}|top"));
+  layer = "bottom";
 
   Matrix tlim (1, 2, 0.0);
   tlim(1) = 1;
@@ -1395,13 +1155,13 @@
   cl(1) = 1;
   clim = cl;
   
-  xlimmode = radio_property (radio_values ("{auto}|manual"));
-  ylimmode = radio_property (radio_values ("{auto}|manual"));
-  zlimmode = radio_property (radio_values ("{auto}|manual"));
-  climmode = radio_property (radio_values ("{auto}|manual"));
-  xlabel = octave_NaN;
-  ylabel = octave_NaN;
-  zlabel = octave_NaN;
+  xlimmode = "auto";
+  ylimmode = "auto";
+  zlimmode = "auto";
+  climmode = "auto";
+  xlabel = graphics_handle ();
+  ylabel = graphics_handle ();
+  zlabel = graphics_handle ();
   xgrid = "off";
   ygrid = "off";
   zgrid = "off";
@@ -1420,18 +1180,18 @@
   xticklabelmode = "auto";
   yticklabelmode = "auto";
   zticklabelmode = "auto";
-  color = color_property (color_values (0, 0, 0), radio_values("flat|none|interp"));
-  xcolor = color_property ("black");
-  ycolor = color_property ("black");
-  zcolor = color_property ("black");
-  xscale = radio_property (radio_values ("{linear}|log"));
-  yscale = radio_property (radio_values ("{linear}|log"));
-  zscale = radio_property (radio_values ("{linear}|log"));
+  color = octave_value (color_values (0, 0, 0));
+  xcolor = octave_value (color_values ("black"));
+  ycolor = octave_value (color_values ("black"));
+  zcolor = octave_value (color_values ("black"));
+  xscale = "linear";
+  yscale = "linear";
+  zscale = "linear";
   xdir = "normal";
   ydir = "normal";
   zdir = "normal";
-  xaxislocation = "left";
-  yaxislocation = "bottom";
+  yaxislocation = "left";
+  xaxislocation = "bottom";
 
   Matrix tview (1, 2, 0.0);
   tview(1) = 90;
@@ -1451,8 +1211,8 @@
       outerposition = touterposition;
     }
 
-  activepositionproperty = radio_property (radio_values ("{outerposition}|position"));
-  __colorbar__  = radio_property (radio_values ("{none}|north|south|east|west|northoutside|southoutside|eastoutside|westoutside"));
+  activepositionproperty = "outerposition";
+  __colorbar__  = "none";
 
   delete_children ();
 
@@ -1464,255 +1224,49 @@
 graphics_handle
 axes::properties::get_title (void) const
 {
-  if (! title.ok ())
+  if (! title.handle_value ().ok ())
     title = gh_manager::make_graphics_handle ("text", __myhandle__);
 
-  return title;
+  return title.handle_value ();
 }
 
 graphics_handle
 axes::properties::get_xlabel (void) const
 {
-  if (! xlabel.ok ())
+  if (! xlabel.handle_value ().ok ())
     xlabel = gh_manager::make_graphics_handle ("text", __myhandle__);
 
-  return xlabel;
+  return xlabel.handle_value ();
 }
 
 graphics_handle
 axes::properties::get_ylabel (void) const
 {
-  if (! ylabel.ok ())
+  if (! ylabel.handle_value ().ok ())
     ylabel = gh_manager::make_graphics_handle ("text", __myhandle__);
 
-  return ylabel;
+  return ylabel.handle_value ();
 }
 
 graphics_handle
 axes::properties::get_zlabel (void) const
 {
-  if (! zlabel.ok ())
+  if (! zlabel.handle_value ().ok ())
     zlabel = gh_manager::make_graphics_handle ("text", __myhandle__);
 
-  return zlabel;
-}
-
-octave_value
-axes::properties::get (void) const
-{
-  Octave_map m;
-
-  m.assign ("tag", tag);
-  m.assign ("type", type);
-  m.assign ("parent", parent.as_octave_value ());
-  m.assign ("children", children);
-  m.assign ("__modified__", __modified__);
-  m.assign ("position", position);
-  m.assign ("title", get_title().as_octave_value ());
-  m.assign ("box", box);
-  m.assign ("key", key);
-  m.assign ("keybox", keybox);
-  m.assign ("keypos", keypos);
-  m.assign ("colororder", colororder);
-  m.assign ("dataaspectratio", dataaspectratio);
-  m.assign ("dataaspectratiomode", dataaspectratiomode);
-  m.assign ("layer", layer);
-  m.assign ("xlim", xlim);
-  m.assign ("ylim", ylim);
-  m.assign ("zlim", zlim);
-  m.assign ("clim", clim);
-  m.assign ("xlimmode", xlimmode);
-  m.assign ("ylimmode", ylimmode);
-  m.assign ("zlimmode", zlimmode);
-  m.assign ("climmode", climmode);
-  m.assign ("xlabel", get_xlabel().as_octave_value ());
-  m.assign ("ylabel", get_ylabel().as_octave_value ());
-  m.assign ("zlabel", get_zlabel().as_octave_value ());
-  m.assign ("xgrid", xgrid);
-  m.assign ("ygrid", ygrid);
-  m.assign ("zgrid", zgrid);
-  m.assign ("xminorgrid", xminorgrid);
-  m.assign ("yminorgrid", yminorgrid);
-  m.assign ("zminorgrid", zminorgrid);
-  m.assign ("xtick", xtick);
-  m.assign ("ytick", ytick);
-  m.assign ("ztick", ztick);
-  m.assign ("xtickmode", xtickmode);
-  m.assign ("ytickmode", ytickmode);
-  m.assign ("ztickmode", ztickmode);
-  m.assign ("xticklabel", xticklabel);
-  m.assign ("yticklabel", yticklabel);
-  m.assign ("zticklabel", zticklabel);
-  m.assign ("xticklabelmode", xticklabelmode);
-  m.assign ("yticklabelmode", yticklabelmode);
-  m.assign ("zticklabelmode", zticklabelmode);
-  m.assign ("color", color);
-  m.assign ("xcolor", xcolor);
-  m.assign ("ycolor", ycolor);
-  m.assign ("zcolor", zcolor);
-  m.assign ("xscale", xscale);
-  m.assign ("yscale", yscale);
-  m.assign ("zscale", zscale);
-  m.assign ("xdir", xdir);
-  m.assign ("ydir", ydir);
-  m.assign ("zdir", zdir);
-  m.assign ("xaxislocation", xaxislocation);
-  m.assign ("yaxislocation", yaxislocation);
-  m.assign ("view", view);
-  m.assign ("visible", visible);
-  m.assign ("nextplot", nextplot);
-  m.assign ("outerposition", outerposition);
-  m.assign ("activepositionproperty", activepositionproperty);
-  m.assign ("__colorbar__", __colorbar__);
-
-  return m;
-}
-
-octave_value
-axes::properties::get (const caseless_str& name) const
-{
-  octave_value retval;
-
-  if (name.compare ("tag"))
-    retval = tag;
-  else if (name.compare ("type"))
-    retval = type;
-  else if (name.compare ("parent"))
-    retval = parent.value ();
-  else if (name.compare ("children"))
-    retval = children;
-  else if (name.compare ("__modified__"))
-    retval = __modified__;
-  else if (name.compare ("position"))
-    retval = position;
-  else if (name.compare ("title"))
-    retval = get_title().as_octave_value ();
-  else if (name.compare ("box"))
-    retval = box;
-  else if (name.compare ("key"))
-    retval = key;
-  else if (name.compare ("keybox"))
-    retval = keybox;
-  else if (name.compare ("keypos"))
-    retval = keypos;
-  else if (name.compare ("colororder"))
-    retval = colororder;
-  else if (name.compare ("dataaspectratio"))
-    retval = dataaspectratio;
-  else if (name.compare ("dataaspectratiomode"))
-    retval = dataaspectratiomode;
-  else if (name.compare ("layer"))
-    retval = layer;
-  else if (name.compare ("xlim"))
-    retval = xlim;
-  else if (name.compare ("ylim"))
-    retval = ylim;
-  else if (name.compare ("zlim"))
-    retval = zlim;
-  else if (name.compare ("clim"))
-    retval = clim;
-  else if (name.compare ("xlimmode"))
-    retval = xlimmode;
-  else if (name.compare ("ylimmode"))
-    retval = ylimmode;
-  else if (name.compare ("zlimmode"))
-    retval = zlimmode;
-  else if (name.compare ("climmode"))
-    retval = climmode;
-  else if (name.compare ("xlabel"))
-    retval = get_xlabel().as_octave_value ();
-  else if (name.compare ("ylabel"))
-    retval = get_ylabel().as_octave_value ();
-  else if (name.compare ("zlabel"))
-    retval = get_zlabel().as_octave_value ();
-  else if (name.compare ("xgrid"))
-    retval = xgrid;
-  else if (name.compare ("ygrid"))
-    retval = ygrid;
-  else if (name.compare ("zgrid"))
-    retval = zgrid;
-  else if (name.compare ("xminorgrid"))
-    retval = xminorgrid;
-  else if (name.compare ("yminorgrid"))
-    retval = yminorgrid;
-  else if (name.compare ("zminorgrid"))
-    retval = zminorgrid;
-  else if (name.compare ("xtick"))
-    retval = xtick;
-  else if (name.compare ("ytick"))
-    retval = ytick;
-  else if (name.compare ("ztick"))
-    retval = ztick;
-  else if (name.compare ("xtickmode"))
-    retval = xtickmode;
-  else if (name.compare ("ytickmode"))
-    retval = ytickmode;
-  else if (name.compare ("ztickmode"))
-    retval = ztickmode;
-  else if (name.compare ("xticklabel"))
-    retval = xticklabel;
-  else if (name.compare ("yticklabel"))
-    retval = yticklabel;
-  else if (name.compare ("zticklabel"))
-    retval = zticklabel;
-  else if (name.compare ("xticklabelmode"))
-    retval = xticklabelmode;
-  else if (name.compare ("yticklabelmode"))
-    retval = yticklabelmode;
-  else if (name.compare ("zticklabelmode"))
-    retval = zticklabelmode;
-  else if (name.compare ("color"))
-    retval = color;
-  else if (name.compare ("xcolor"))
-    retval = xcolor;
-  else if (name.compare ("ycolor"))
-    retval = ycolor;
-  else if (name.compare ("zcolor"))
-    retval = zcolor;
-  else if (name.compare ("xscale"))
-    retval = xscale;
-  else if (name.compare ("yscale"))
-    retval = yscale;
-  else if (name.compare ("zscale"))
-    retval = zscale;
-  else if (name.compare ("xdir"))
-    retval = xdir;
-  else if (name.compare ("ydir"))
-    retval = ydir;
-  else if (name.compare ("zdir"))
-    retval = zdir;
-  else if (name.compare ("xaxislocation"))
-    retval = xaxislocation;
-  else if (name.compare ("yaxislocation"))
-    retval = yaxislocation;
-  else if (name.compare ("view"))
-    retval = view;
-  else if (name.compare ("visible"))
-    retval = visible;
-  else if (name.compare ("nextplot"))
-    retval = nextplot;
-  else if (name.compare ("outerposition"))
-    retval = outerposition;
-  else if (name.compare ("activepositionproperty"))
-    retval = activepositionproperty;
-  else if (name.compare ("__colorbar__"))
-    retval = __colorbar__;
-  else
-    warning ("get: invalid property `%s'", name.c_str ());
-
-  return retval;
+  return zlabel.handle_value ();
 }
 
 void
 axes::properties::remove_child (const graphics_handle& h)
 {
-  if (title.ok () && h == title)
+  if (title.handle_value ().ok () && h == title.handle_value ())
     title = gh_manager::make_graphics_handle ("text", __myhandle__);
-  else if (xlabel.ok () && h == xlabel)
+  else if (xlabel.handle_value ().ok () && h == xlabel.handle_value ())
     xlabel = gh_manager::make_graphics_handle ("text", __myhandle__);
-  else if (ylabel.ok () && h == ylabel)
+  else if (ylabel.handle_value ().ok () && h == ylabel.handle_value ())
     ylabel = gh_manager::make_graphics_handle ("text", __myhandle__);
-  else if (zlabel.ok () && h == zlabel)
+  else if (zlabel.handle_value ().ok () && h == zlabel.handle_value ())
     zlabel = gh_manager::make_graphics_handle ("text", __myhandle__);
   else
     base_properties::remove_child (h);
@@ -1723,95 +1277,10 @@
 {
   base_properties::delete_children ();
 
-  gh_manager::free (title);
-  gh_manager::free (xlabel);
-  gh_manager::free (ylabel);
-  gh_manager::free (zlabel);
-}
-
-property_list::pval_map_type
-axes::properties::factory_defaults (void)
-{
-  property_list::pval_map_type m;
-
-  m["position"] = Matrix ();
-  m["title"] = octave_NaN;
-  m["box"] = "on";
-  m["key"] = "off";
-  m["keybox"] = "off";
-  m["keypos"] = 1;
-  m["colororder"] = default_colororder ();
-  m["dataaspectratio"] = Matrix (1, 3, 1.0);
-  m["dataaspectratiomode"] = "auto";
-  m["layer"] = radio_property (radio_values ("{bottom}|top"));
-
-  Matrix tlim (1, 2, 0.0);
-  tlim(1) = 1;
-
-  m["xlim"] = tlim;
-  m["ylim"] = tlim;
-  m["zlim"] = tlim;
-  
-  Matrix cl(1, 2, 0);
-  cl(1) = 1;
-  
-  m["clim"] = cl;
-
-  m["xlimmode"] = radio_property (radio_values ("{auto}|manual"));
-  m["ylimmode"] = radio_property (radio_values ("{auto}|manual"));
-  m["zlimmode"] = radio_property (radio_values ("{auto}|manual"));
-  m["climmode"] = radio_property (radio_values ("{auto}|manual"));
-  m["xlabel"] = octave_NaN;
-  m["ylabel"] = octave_NaN;
-  m["zlabel"] = octave_NaN;
-  m["xgrid"] = "off";
-  m["ygrid"] = "off";
-  m["zgrid"] = "off";
-  m["xminorgrid"] = "off";
-  m["yminorgrid"] = "off";
-  m["zminorgrid"] = "off";
-  m["xtick"] = Matrix ();
-  m["ytick"] = Matrix ();
-  m["ztick"] = Matrix ();
-  m["xtickmode"] = "auto";
-  m["ytickmode"] = "auto";
-  m["ztickmode"] = "auto";
-  m["xticklabel"] = "";
-  m["yticklabel"] = "";
-  m["zticklabel"] = "";
-  m["xticklabelmode"] = "auto";
-  m["yticklabelmode"] = "auto";
-  m["zticklabelmode"] = "auto";
-  m["color"] = color_property (color_values (0, 0, 0), radio_values("flat|none|interp"));
-  m["xcolor"] = color_property ("black");
-  m["ycolor"] = color_property ("black");
-  m["zcolor"] = color_property ("black");
-  m["xscale"] = radio_property (radio_values ("{linear}|log"));
-  m["yscale"] = radio_property (radio_values ("{linear}|log"));
-  m["zscale"] = radio_property (radio_values ("{linear}|log"));
-  m["xdir"] = "normal";
-  m["ydir"] = "normal";
-  m["zdir"] = "normal";
-  m["xaxislocation"] = "bottom";
-  m["yaxislocation"] = "left";
-
-  Matrix tview (1, 2, 0.0);
-  tview(1) = 90;
-
-  m["view"] = tview;
-
-  m["visible"] = "on";
-  m["nextplot"] = "replace";
-
-  Matrix touterposition (1, 4, 0.0);
-  touterposition(2) = 1;
-  touterposition(3) = 1;
-
-  m["outerposition"] = touterposition;
-  m["activepositionproperty"] =  radio_property (radio_values ("{outerposition}|position"));
-  m["__colorbar__"] = radio_property (radio_values ("{none}|north|south|east|west|northoutside|southoutside|eastoutside|westoutside"));
-
-  return m;
+  gh_manager::free (title.handle_value ());
+  gh_manager::free (xlabel.handle_value ());
+  gh_manager::free (ylabel.handle_value ());
+  gh_manager::free (zlabel.handle_value ());
 }
 
 octave_value
@@ -1925,8 +1394,6 @@
   double max_val = -octave_Inf;
   double min_pos = octave_Inf;
 
-  radio_property tmp;
-
   char update_type = 0;
 
   Matrix limits;
@@ -1935,9 +1402,7 @@
       || axis_type == "xldata" || axis_type == "xudata"
       || axis_type == "xlimmode")
     {
-      tmp = xproperties.get_xlimmode ();
-
-      if (tmp.current_value () == "auto")
+      if (xproperties.xlimmode_is ("auto"))
 	{
 	  for (octave_idx_type i = 0; i < n; i++)
 	    {
@@ -1946,14 +1411,14 @@
 	      if (obj.isa ("line") || obj.isa ("image")
 		  || obj.isa ("patch") || obj.isa ("surface"))
 		{
-		  data_property xdata = obj.get_xdata ();
+		  data_property xdata = obj.get_xdata_property ();
 
 		  check_limit_vals (min_val, max_val, min_pos, xdata);
 
 		  if (obj.isa ("line"))
 		    {
-		      data_property xldata = obj.get_xldata ();
-		      data_property xudata = obj.get_xudata ();
+		      data_property xldata = obj.get_xldata_property ();
+		      data_property xudata = obj.get_xudata_property ();
 
 		      check_limit_vals (min_val, max_val, min_pos, xldata);
 		      check_limit_vals (min_val, max_val, min_pos, xudata);
@@ -1961,10 +1426,8 @@
 		}
 	    }
 
-	  tmp = xproperties.get_xscale ();
-
 	  limits = get_axis_limits (min_val, max_val, min_pos,
-				    tmp.current_value () == "log");
+				    xproperties.xscale_is ("log"));
 
 	  update_type = 'x';
 	}
@@ -1973,9 +1436,7 @@
 	   || axis_type == "ldata" || axis_type == "udata"
 	   || axis_type == "ylimmode")
     {
-      tmp = xproperties.get_ylimmode ();
-
-      if (tmp.current_value () == "auto")
+      if (xproperties.ylimmode_is ("auto"))
 	{
 	    for (octave_idx_type i = 0; i < n; i++)
 	    {
@@ -1984,14 +1445,14 @@
 	      if (obj.isa ("line") || obj.isa ("image")
 		|| obj.isa ("patch") || obj.isa ("surface"))
 		{
-		  data_property ydata = obj.get_ydata ();
+		  data_property ydata = obj.get_ydata_property ();
 
 		  check_limit_vals (min_val, max_val, min_pos, ydata);
 
 		  if (obj.isa ("line"))
 		    {
-		      data_property ldata = obj.get_ldata ();
-		      data_property udata = obj.get_udata ();
+		      data_property ldata = obj.get_ldata_property ();
+		      data_property udata = obj.get_udata_property ();
 
 		      check_limit_vals (min_val, max_val, min_pos, ldata);
 		      check_limit_vals (min_val, max_val, min_pos, udata);
@@ -1999,10 +1460,8 @@
 		}
 	    }
 
-	  tmp = xproperties.get_yscale ();
-
 	  limits = get_axis_limits (min_val, max_val, min_pos,
-				    tmp.current_value () == "log");
+				    xproperties.yscale_is ("log"));
 
 	  update_type = 'y';
 	}
@@ -2010,9 +1469,7 @@
   else if (axis_type == "zdata" || axis_type == "zscale"
 	   || axis_type == "zlimmode")
     {
-      tmp = xproperties.get_zlimmode ();
-
-      if (tmp.current_value () == "auto")
+      if (xproperties.zlimmode_is ("auto"))
 	{
 	  for (octave_idx_type i = 0; i < n; i++)
 	    {
@@ -2020,25 +1477,21 @@
 
 	      if (obj.isa ("line") || obj.isa ("patch") || obj.isa ("surface"))
 		{
-		  data_property zdata = obj.get_zdata ();
+		  data_property zdata = obj.get_zdata_property ();
 
 		  check_limit_vals (min_val, max_val, min_pos, zdata);
 		}
 	    }
 
-	  tmp = xproperties.get_zscale ();
-
 	  limits = get_axis_limits (min_val, max_val, min_pos,
-				    tmp.current_value () == "log");
+				    xproperties.zscale_is ("log"));
 
 	  update_type = 'z';
 	}
     }
   else if (axis_type == "cdata" || axis_type == "climmode")
     {
-      tmp = xproperties.get_climmode ();
-
-      if (tmp.current_value () == "auto")
+      if (xproperties.climmode_is ("auto"))
 	{
 	  for (octave_idx_type i = 0; i < n; i++)
 	    {
@@ -2046,7 +1499,7 @@
 
 	      if (obj.isa ("image") || obj.isa ("patch") || obj.isa ("surface"))
 		{
-		  data_property cdata = obj.get_cdata ();
+		  data_property cdata = obj.get_cdata_property ();
 
 		  check_limit_vals (min_val, max_val, min_pos, cdata);
 		}
@@ -2097,850 +1550,25 @@
   unwind_protect::run ();
 }
 
-std::string axes::properties::go_name ("axes");
+// ---------------------------------------------------------------------
+
+// Note: "line" code is entirely auto-generated
 
 // ---------------------------------------------------------------------
 
-static Matrix
-default_data (void)
-{
-  Matrix retval (1, 2);
-
-  retval(0) = 0;
-  retval(1) = 1;
-
-  return retval;
-}
-
-line::properties::properties (const graphics_handle& mh,
-			      const graphics_handle& p)
-  : base_properties (go_name, mh, p),
-    xdata (default_data ()),
-    ydata (default_data ()),
-    zdata (Matrix ()),
-    ldata (Matrix ()),
-    udata (Matrix ()),
-    xldata (Matrix ()),
-    xudata (Matrix ()),
-    color (),
-    linestyle ("-"),
-    linewidth (0.5),
-    marker ("none"),
-    markeredgecolor ("auto"),
-    markerfacecolor ("none"),
-    markersize (1),
-    keylabel (""),
-    interpreter (radio_values ("{tex}|none|latex"))
-{ }
-
-void
-line::properties::set (const caseless_str& name, const octave_value& val)
-{
-  bool modified = true;
-
-  if (name.compare ("tag"))
-    set_tag (val);
-  else if (name.compare ("parent"))
-    set_parent (val);
-  else if (name.compare ("children"))
-    children = maybe_set_children (children, val);
-  else if (name.compare ("__modified__"))
-    {
-      __modified__ = val.bool_value ();
-      modified = false;
-    }
-  else if (name.compare ("xdata"))
-    set_xdata (val);
-  else if (name.compare ("ydata"))
-    set_ydata (val);
-  else if (name.compare ("zdata"))
-    set_zdata (val);
-  else if (name.compare ("ldata"))
-    set_ldata (val);
-  else if (name.compare ("udata"))
-    set_udata (val);
-  else if (name.compare ("xldata"))
-    set_xldata (val);
-  else if (name.compare ("xudata"))
-    set_xudata (val);
-  else if (name.compare ("color"))
-    set_color (val);
-  else if (name.compare ("linestyle"))
-    set_linestyle (val);
-  else if (name.compare ("linewidth"))
-    set_linewidth (val);
-  else if (name.compare ("marker"))
-    set_marker (val);
-  else if (name.compare ("markeredgecolor"))
-    set_markeredgecolor (val);
-  else if (name.compare ("markerfacecolor"))
-    set_markerfacecolor (val);
-  else if (name.compare ("markersize"))
-    set_markersize (val);
-  else if (name.compare ("keylabel"))
-    set_keylabel (val);
-  else if (name.compare ("interpreter"))
-    set_interpreter (val);
-  else
-    {
-      modified = false;
-      warning ("set: invalid property `%s'", name.c_str ());
-    }
-
-  if (modified)
-    mark_modified ();
-}
-
-octave_value
-line::properties::get (void) const
-{
-  Octave_map m;
-
-  m.assign ("tag", tag);
-  m.assign ("type", type);
-  m.assign ("parent", parent.as_octave_value ());
-  m.assign ("children", children);
-  m.assign ("__modified__", __modified__);
-  m.assign ("xdata", xdata);
-  m.assign ("ydata", ydata);
-  m.assign ("zdata", zdata);
-  m.assign ("ldata", ldata);
-  m.assign ("udata", udata);
-  m.assign ("xldata", xldata);
-  m.assign ("xudata", xudata);
-  m.assign ("color", color);
-  m.assign ("linestyle", linestyle);
-  m.assign ("linewidth", linewidth);
-  m.assign ("marker", marker);
-  m.assign ("markeredgecolor", markeredgecolor);
-  m.assign ("markerfacecolor", markerfacecolor);
-  m.assign ("markersize", markersize);
-  m.assign ("keylabel", keylabel);
-  m.assign ("interpreter", interpreter);
-
-  return m;
-}
-
-octave_value
-line::properties::get (const caseless_str& name) const
-{
-  octave_value retval;
-
-  if (name.compare ("tag"))
-    retval = tag;
-  else if (name.compare ("type"))
-    retval = type;
-  else if (name.compare ("parent"))
-    retval = parent.as_octave_value ();
-  else if (name.compare ("children"))
-    retval = children;
-  else if (name.compare ("__modified__"))
-    retval = __modified__;
-  else if (name.compare ("xdata"))
-    retval = xdata;
-  else if (name.compare ("ydata"))
-    retval = ydata;
-  else if (name.compare ("zdata"))
-    retval = zdata;
-  else if (name.compare ("ldata"))
-    retval = ldata;
-  else if (name.compare ("udata"))
-    retval = udata;
-  else if (name.compare ("xldata"))
-    retval = xldata;
-  else if (name.compare ("xudata"))
-    retval = xudata;
-  else if (name.compare ("color"))
-    retval = color;
-  else if (name.compare ("linestyle"))
-    retval = linestyle;
-  else if (name.compare ("linewidth"))
-    retval = linewidth;
-  else if (name.compare ("marker"))
-    retval = marker;
-  else if (name.compare ("markeredgecolor"))
-    retval = markeredgecolor;
-  else if (name.compare ("markerfacecolor"))
-    retval = markerfacecolor;
-  else if (name.compare ("markersize"))
-    retval = markersize;
-  else if (name.compare ("keylabel"))
-    retval = keylabel;
-  else if (name.compare ("interpreter"))
-    retval = interpreter;
-  else
-    warning ("get: invalid property `%s'", name.c_str ());
-
-  return retval;
-}
-
-property_list::pval_map_type
-line::properties::factory_defaults (void)
-{
-  property_list::pval_map_type m;
-
-  m["xdata"] = default_data ();
-  m["ydata"] = default_data ();
-  m["zdata"] = Matrix ();
-  m["ldata"] = Matrix ();
-  m["udata"] = Matrix ();
-  m["xldata"] = Matrix ();
-  m["xudata"] = Matrix ();
-  m["color"] = color_property ();
-  m["linestyle"] = "-";
-  m["linewidth"] = 0.5;
-  m["marker"] = "none";
-  m["markeredgecolor"] = "auto";
-  m["markerfacecolor"] = "none";
-  m["markersize"] = 1;
-  m["keylabel"] = "";
-  m["interpreter"] = radio_property (radio_values ("{tex}|none|latex"));
-
-  return m;
-}
-
-std::string line::properties::go_name ("line");
-
-// ---------------------------------------------------------------------
-
-text::properties::properties (const graphics_handle& mh,
-			      const graphics_handle& p)
-  : base_properties (go_name, mh, p),
-    string (""),
-    units ("data"),
-    position (Matrix (1, 3, 0.0)),
-    rotation (0),
-    horizontalalignment ("left"),
-    color (Matrix (1, 3, 0.0)),
-    fontname ("Helvetica"),
-    fontsize (10),
-    fontangle (radio_values ("{normal}|italic|oblique")),
-    fontweight (radio_values ("{normal}|bold|demi|light")),
-    interpreter (radio_values ("{tex}|none|latex"))
-{ }
-
-void
-text::properties::set (const caseless_str& name, const octave_value& val)
-{
-  bool modified = true;
-
-  if (name.compare ("tag"))
-    set_tag (val);
-  else if (name.compare ("parent"))
-    set_parent (val);
-  else if (name.compare ("children"))
-    children = maybe_set_children (children, val);
-  else if (name.compare ("__modified__"))
-    {
-      __modified__ = val.bool_value ();
-      modified = false;
-    }
-  else if (name.compare ("string"))
-    set_string (val);
-  else if (name.compare ("units"))
-    set_units (val);
-  else if (name.compare ("position"))
-    set_position (val);
-  else if (name.compare ("rotation"))
-    set_rotation (val);
-  else if (name.compare ("horizontalalignment"))
-    set_horizontalalignment (val);
-  else if (name.compare ("color"))
-    set_color (val);
-  else if (name.compare ("fontname"))
-    set_fontname (val);
-  else if (name.compare ("fontsize"))
-    set_fontsize (val);
-  else if (name.compare ("fontangle"))
-    set_fontangle (val);
-  else if (name.compare ("fontweight"))
-    set_fontweight (val);
-  else if (name.compare ("interpreter"))
-    set_interpreter (val);
-  else
-    {
-      modified = false;
-      warning ("set: invalid property `%s'", name.c_str ());
-    }
-
-  if (modified)
-    mark_modified ();
-}
-
-octave_value
-text::properties::get (void) const
-{
-  Octave_map m;
-
-  m.assign ("tag", tag);
-  m.assign ("type", type);
-  m.assign ("parent", parent.as_octave_value ());
-  m.assign ("children", children);
-  m.assign ("__modified__", __modified__);
-  m.assign ("string", string);
-  m.assign ("units", units);
-  m.assign ("position", position);
-  m.assign ("rotation", rotation);
-  m.assign ("horizontalalignment", horizontalalignment);
-  m.assign ("color", color);
-  m.assign ("fontname", fontname);
-  m.assign ("fontsize", fontsize);
-  m.assign ("fontangle", fontangle);
-  m.assign ("fontweight", fontweight);
-  m.assign ("interpreter", interpreter);
-
-  return m;
-}
-
-octave_value
-text::properties::get (const caseless_str& name) const
-{
-  octave_value retval;
-
-  if (name.compare ("tag"))
-    retval = tag;
-  else if (name.compare ("type"))
-    retval = type;
-  else if (name.compare ("parent"))
-    retval = parent.as_octave_value ();
-  else if (name.compare ("children"))
-    retval = children;
-  else if (name.compare ("__modified__"))
-    retval = __modified__;
-  else if (name.compare ("string"))
-    retval = string;
-  else if (name.compare ("units"))
-    retval = units;
-  else if (name.compare ("position"))
-    retval = position;
-  else if (name.compare ("rotation"))
-    retval = rotation;
-  else if (name.compare ("horizontalalignment"))
-    retval = horizontalalignment;
-  else if (name.compare ("color"))
-    retval = color;
-  else if (name.compare ("fontname"))
-    retval = fontname;
-  else if (name.compare ("fontsize"))
-    retval = fontsize;
-  else if (name.compare ("fontangle"))
-    retval = fontangle;
-  else if (name.compare ("fontweight"))
-    retval = fontweight;
-  else if (name.compare ("interpreter"))
-    retval = interpreter;
-  else
-    warning ("get: invalid property `%s'", name.c_str ());
-
-  return retval;
-}
-
-property_list::pval_map_type
-text::properties::factory_defaults (void)
-{
-  property_list::pval_map_type m;
-
-  m["string"] = "";
-  m["units"] = "data";
-  m["position"] = Matrix (1, 3, 0.0);
-  m["rotation"] = 0;
-  m["horizontalalignment"] = "left";
-  m["color"] = Matrix (1, 3, 1.0);
-  m["fontname"] = "Helvetica";
-  m["fontsize"] = 10;
-  m["fontangle"] = radio_property (radio_values ("{normal}|italic|oblique"));
-  m["fontweight"] = radio_property (radio_values ("{normal}|bold|demi|light"));
-  m["interpreter"] = radio_property (radio_values ("{tex}|none|latex"));
-
-  return m;
-}
-
-std::string text::properties::go_name ("text");
+// Note: "text" code is entirely auto-generated
 
 // ---------------------------------------------------------------------
 
-image::properties::properties (const graphics_handle& mh,
-			       const graphics_handle& p)
-  : base_properties (go_name, mh, p),
-    xdata (Matrix ()),
-    ydata (Matrix ()),
-    cdata (Matrix ())
-{ }
-
-void
-image::properties::set (const caseless_str& name,
-			const octave_value& val)
-{
-  bool modified = true;
-
-  if (name.compare ("tag"))
-    set_tag (val);
-  else if (name.compare ("parent"))
-    set_parent (val);
-  else if (name.compare ("children"))
-    children = maybe_set_children (children, val);
-  else if (name.compare ("__modified__"))
-    {
-      __modified__ = val.bool_value ();
-      modified = false;
-    }
-  else if (name.compare ("xdata"))
-    set_xdata (val);
-  else if (name.compare ("ydata"))
-    set_ydata (val);
-  else if (name.compare ("cdata"))
-    set_cdata (val);
-  else
-    {
-      modified = false;
-      warning ("set: invalid property `%s'", name.c_str ());
-    }
-
-  if (modified)
-    mark_modified ();
-}
-
-octave_value
-image::properties::get (void) const
-{
-  Octave_map m;
-
-  m.assign ("tag", tag);
-  m.assign ("type", type);
-  m.assign ("parent", parent.as_octave_value ());
-  m.assign ("children", children);
-  m.assign ("__modified__", __modified__);
-  m.assign ("xdata", xdata);
-  m.assign ("ydata", ydata);
-  m.assign ("cdata", cdata);
-
-  return m;
-}
-
-octave_value
-image::properties::get (const caseless_str& name) const
-{
-  octave_value retval;
-
-  if (name.compare ("tag"))
-    retval = tag;
-  else if (name.compare ("type"))
-    retval = type;
-  else if (name.compare ("parent"))
-    retval = parent.as_octave_value ();
-  else if (name.compare ("children"))
-    retval = children;
-  else if (name.compare ("__modified__"))
-    retval = __modified__;
-  else if (name.compare ("xdata"))
-    retval = xdata;
-  else if (name.compare ("ydata"))
-    retval = ydata;
-  else if (name.compare ("cdata"))
-    retval = cdata;
-  else
-    warning ("get: invalid property `%s'", name.c_str ());
-
-  return retval;
-}
-
-property_list::pval_map_type
-image::properties::factory_defaults (void)
-{
-  property_list::pval_map_type m;
-
-  m["xdata"] = Matrix ();
-  m["ydata"] = Matrix ();
-  m["cdata"] = Matrix ();
-
-  return m;
-}
-
-std::string image::properties::go_name ("image");
+// Note: "image" code is entirely auto-generated
 
 // ---------------------------------------------------------------------
 
-patch::properties::properties (const graphics_handle& mh,
-			       const graphics_handle& p)
-  : base_properties (go_name, mh, p),
-    xdata (Matrix ()),
-    ydata (Matrix ()),
-    zdata (Matrix ()),
-    cdata (Matrix ()),
-    faces (Matrix ()),
-    vertices (Matrix ()),
-    facecolor (radio_values ("{flat}|none|interp")),
-    facealpha (1.0),
-    edgecolor (color_values (0, 0, 0), radio_values ("flat|none|interp")),
-    linestyle ("-"),
-    linewidth (0.5),
-    marker ("none"),
-    markeredgecolor ("auto"),
-    markerfacecolor ("none"),
-    markersize (1),
-    keylabel (""),
-    interpreter (radio_values ("{tex}|none|latex"))
-{ }
-
-void
-patch::properties::set (const caseless_str& name,
-			const octave_value& val)
-{
-  bool modified = true;
-
-  if (name.compare ("tag"))
-    set_tag (val);
-  else if (name.compare ("parent"))
-    set_parent (val);
-  else if (name.compare ("children"))
-    children = maybe_set_children (children, val);
-  else if (name.compare ("__modified__"))
-    {
-      __modified__ = val.bool_value ();
-      modified = false;
-    }
-  else if (name.compare ("xdata"))
-    set_xdata (val);
-  else if (name.compare ("ydata"))
-    set_ydata (val);
-  else if (name.compare ("zdata"))
-    set_zdata (val);
-  else if (name.compare ("cdata"))
-    set_cdata (val);
-  else if (name.compare ("faces"))
-    set_faces (val);
-  else if (name.compare ("vertices"))
-    set_vertices (val);
-  else if (name.compare ("facecolor"))
-    set_facecolor (val);
-  else if (name.compare ("facealpha"))
-    set_facealpha (val);
-  else if (name.compare ("edgecolor"))
-    set_edgecolor (val);
-  else if (name.compare ("linestyle"))
-    set_linestyle (val);
-  else if (name.compare ("linewidth"))
-    set_linewidth (val);
-  else if (name.compare ("marker"))
-    set_marker (val);
-  else if (name.compare ("markeredgecolor"))
-    set_markeredgecolor (val);
-  else if (name.compare ("markerfacecolor"))
-    set_markerfacecolor (val);
-  else if (name.compare ("markersize"))
-    set_markersize (val);
-  else if (name.compare ("keylabel"))
-    set_keylabel (val);
-  else if (name.compare ("interpreter"))
-    set_interpreter (val);
-  else
-    {
-      modified = false;
-      warning ("set: invalid property `%s'", name.c_str ());
-    }
-
-  if (modified)
-    mark_modified ();
-}
-
-octave_value
-patch::properties::get (void) const
-{
-  Octave_map m;
-
-  m.assign ("tag", tag);
-  m.assign ("type", type);
-  m.assign ("parent", parent.as_octave_value ());
-  m.assign ("children", children);
-  m.assign ("__modified__", __modified__);
-  m.assign ("xdata", xdata);
-  m.assign ("ydata", ydata);
-  m.assign ("zdata", zdata);
-  m.assign ("cdata", cdata);
-  m.assign ("faces", faces);
-  m.assign ("vertices", vertices);
-  m.assign ("facecolor", facecolor);
-  m.assign ("facealpha", facealpha);
-  m.assign ("edgecolor", edgecolor);
-  m.assign ("linestyle", linestyle);
-  m.assign ("linewidth", linewidth);
-  m.assign ("marker", marker);
-  m.assign ("markeredgecolor", markeredgecolor);
-  m.assign ("markerface", markerfacecolor);
-  m.assign ("markersize", markersize);
-  m.assign ("keylabel", keylabel);
-  m.assign ("interpreter", interpreter);
-
-  return m;
-}
-
-octave_value
-patch::properties::get (const caseless_str& name) const
-{
-  octave_value retval;
-
-  if (name.compare ("tag"))
-    retval = tag;
-  else if (name.compare ("type"))
-    retval = type;
-  else if (name.compare ("parent"))
-    retval = parent.as_octave_value ();
-  else if (name.compare ("children"))
-    retval = children;
-  else if (name.compare ("__modified__"))
-    retval = __modified__;
-  else if (name.compare ("xdata"))
-    retval = xdata;
-  else if (name.compare ("ydata"))
-    retval = ydata;
-  else if (name.compare ("zdata"))
-    retval = zdata;
-  else if (name.compare ("cdata"))
-    retval = cdata;
-  else if (name.compare ("faces"))
-    retval = faces;
-  else if (name.compare ("vertices"))
-    retval = vertices;
-  else if (name.compare ("facecolor"))
-    retval = facecolor;
-  else if (name.compare ("facealpha"))
-    retval = facealpha;
-  else if (name.compare ("edgecolor"))
-    retval = edgecolor;
-  else if (name.compare ("linestyle"))
-    retval = linestyle;
-  else if (name.compare ("linewidth"))
-    retval = linewidth;
-  else if (name.compare ("marker"))
-    retval = marker;
-  else if (name.compare ("markeredgecolor"))
-    retval = markeredgecolor;
-  else if (name.compare ("markerfacecolor"))
-    retval = markerfacecolor;
-  else if (name.compare ("markersize"))
-    retval = markersize;
-  else if (name.compare ("keylabel"))
-    retval = keylabel;
-  else if (name.compare ("interpreter"))
-    retval = interpreter;
-  else
-    warning ("get: invalid property `%s'", name.c_str ());
-
-  return retval;
-}
-
-property_list::pval_map_type
-patch::properties::factory_defaults (void)
-{
-  property_list::pval_map_type m;
-
-  m["xdata"] = Matrix ();
-  m["ydata"] = Matrix ();
-  m["zdata"] = Matrix ();
-  m["cdata"] = Matrix ();
-  m["faces"] = Matrix ();
-  m["vertices"] = Matrix ();
-  m["facecolor"] = color_property ();
-  m["facealpha"] = 1.0;
-  m["edgecolor"] = color_property ("black");
-  m["linestyle"] = "-";
-  m["linewidth"] = 0.5;
-  m["marker"] = "none";
-  m["markeredgecolor"] = "auto";
-  m["markerfacecolor"] = "none";
-  m["markersize"] = 1;
-  m["keylabel"] = "";
-  m["interpreter"] = radio_property (radio_values ("{tex}|none|latex"));
-
-  return m;
-}
-
-std::string patch::properties::go_name ("patch");
+// Note: "patch" code is entirely auto-generated
 
 // ---------------------------------------------------------------------
 
-surface::properties::properties (const graphics_handle& mh,
-				 const graphics_handle& p)
-  : base_properties (go_name, mh, p),
-    xdata (Matrix ()),
-    ydata (Matrix ()),
-    zdata (Matrix ()),
-    cdata (Matrix ()),
-    facecolor (radio_values ("{flat}|none|interp")),
-    facealpha (1.0),
-    edgecolor (color_values (0, 0, 0), radio_values ("flat|none|interp")),
-    linestyle ("-"),
-    linewidth (0.5),
-    marker ("none"),
-    markeredgecolor ("auto"),
-    markerfacecolor ("none"),
-    markersize (1),
-    keylabel (""),
-    interpreter (radio_values ("{tex}|none|latex"))
-{ }
-
-void
-surface::properties::set (const caseless_str& name,
-			  const octave_value& val)
-{
-  bool modified = true;
-
-  if (name.compare ("tag"))
-    set_tag (val);
-  else if (name.compare ("parent"))
-    set_parent (val);
-  else if (name.compare ("children"))
-    children = maybe_set_children (children, val);
-  else if (name.compare ("__modified__"))
-    {
-      __modified__ = val.bool_value ();
-      modified = false;
-    }
-  else if (name.compare ("xdata"))
-    set_xdata (val);
-  else if (name.compare ("ydata"))
-    set_ydata (val);
-  else if (name.compare ("zdata"))
-    set_zdata (val);
-  else if (name.compare ("cdata"))
-    set_cdata (val);
-  else if (name.compare ("facecolor"))
-    set_facecolor (val);
-  else if (name.compare ("facealpha"))
-    set_facealpha (val);
-  else if (name.compare ("edgecolor"))
-    set_edgecolor (val);
-  else if (name.compare ("linestyle"))
-    set_linestyle (val);
-  else if (name.compare ("linewidth"))
-    set_linewidth (val);
-  else if (name.compare ("marker"))
-    set_marker (val);
-  else if (name.compare ("markeredgecolor"))
-    set_markeredgecolor (val);
-  else if (name.compare ("markerfacecolor"))
-    set_markerfacecolor (val);
-  else if (name.compare ("markersize"))
-    set_markersize (val);
-  else if (name.compare ("keylabel"))
-    set_keylabel (val);
-  else if (name.compare ("interpreter"))
-    set_interpreter (val);
-  else
-    {
-      modified = false;
-      warning ("set: invalid property `%s'", name.c_str ());
-    }
-
-  if (modified)
-    mark_modified ();
-}
-
-octave_value
-surface::properties::get (void) const
-{
-  Octave_map m;
-
-  m.assign ("tag", tag);
-  m.assign ("type", type);
-  m.assign ("parent", parent.as_octave_value ());
-  m.assign ("children", children);
-  m.assign ("__modified__", __modified__);
-  m.assign ("xdata", xdata);
-  m.assign ("ydata", ydata);
-  m.assign ("zdata", zdata);
-  m.assign ("cdata", cdata);
-  m.assign ("facecolor", facecolor);
-  m.assign ("facealpha", facealpha);
-  m.assign ("edgecolor", edgecolor);
-  m.assign ("linestyle", linestyle);
-  m.assign ("linewidth", linewidth);
-  m.assign ("marker", marker);
-  m.assign ("markeredgecolor", markeredgecolor);
-  m.assign ("markerface", markerfacecolor);
-  m.assign ("markersize", markersize);
-  m.assign ("keylabel", keylabel);
-  m.assign ("interpreter", interpreter);
-
-  return m;
-}
-
-octave_value
-surface::properties::get (const caseless_str& name) const
-{
-  octave_value retval;
-
-  if (name.compare ("tag"))
-    retval = tag;
-  else if (name.compare ("type"))
-    retval = type;
-  else if (name.compare ("parent"))
-    retval = parent.as_octave_value ();
-  else if (name.compare ("children"))
-    retval = children;
-  else if (name.compare ("__modified__"))
-    retval = __modified__;
-  else if (name.compare ("xdata"))
-    retval = xdata;
-  else if (name.compare ("ydata"))
-    retval = ydata;
-  else if (name.compare ("zdata"))
-    retval = zdata;
-  else if (name.compare ("cdata"))
-    retval = cdata;
-  else if (name.compare ("facecolor"))
-    retval = facecolor;
-  else if (name.compare ("facealpha"))
-    retval = facealpha;
-  else if (name.compare ("edgecolor"))
-    retval = edgecolor;
-  else if (name.compare ("linestyle"))
-    retval = linestyle;
-  else if (name.compare ("linewidth"))
-    retval = linewidth;
-  else if (name.compare ("marker"))
-    retval = marker;
-  else if (name.compare ("markeredgecolor"))
-    retval = markeredgecolor;
-  else if (name.compare ("markerfacecolor"))
-    retval = markerfacecolor;
-  else if (name.compare ("markersize"))
-    retval = markersize;
-  else if (name.compare ("keylabel"))
-    retval = keylabel;
-  else if (name.compare ("interpreter"))
-    retval = interpreter;
-  else
-    warning ("get: invalid property `%s'", name.c_str ());
-
-  return retval;
-}
-
-property_list::pval_map_type
-surface::properties::factory_defaults (void)
-{
-  property_list::pval_map_type m;
-
-  m["xdata"] = Matrix ();
-  m["ydata"] = Matrix ();
-  m["zdata"] = Matrix ();
-  m["cdata"] = Matrix ();
-  m["facecolor"] = color_property ();
-  m["facealpha"] = 1.0;
-  m["edgecolor"] = color_property ("black");
-  m["linestyle"] = "-";
-  m["linewidth"] = 0.5;
-  m["marker"] = "none";
-  m["markeredgecolor"] = "auto";
-  m["markerfacecolor"] = "none";
-  m["markersize"] = 1;
-  m["keylabel"] = "";
-  m["interpreter"] = radio_property (radio_values ("{tex}|none|latex"));
-
-  return m;
-}
-
-std::string surface::properties::go_name ("surface");
+// Note: "surface" code is entirely auto-generated
 
 // ---------------------------------------------------------------------