Mercurial > hg > octave-nkf
diff src/graphics.h.in @ 7836:4fb2db9c87dd
Turn cdata properties into array_property. Add min/max computation to array_property.
author | Michael Goffioul <michael.goffioul@gmail.com> |
---|---|
date | Thu, 21 Feb 2008 13:45:04 +0100 |
parents | ca8b97bb952c |
children | 1357bcae6e29 |
line wrap: on
line diff
--- a/src/graphics.h.in +++ b/src/graphics.h.in @@ -717,16 +717,29 @@ class array_property : public base_property { public: + array_property (void) + : base_property ("", graphics_handle ()), data (Matrix ()) + { + get_data_limits (); + } + array_property (const std::string& nm, const graphics_handle& h, const octave_value& m) - : base_property (nm, h), data (m) { } + : base_property (nm, h), data (m) + { + get_data_limits (); + } octave_value get (void) const { return data; } void set (const octave_value& v) { if (validate (v)) - data = v; + { + data = v; + + get_data_limits (); + } else error ("invalid value for array property \"%s\"", get_name ().c_str ()); @@ -738,6 +751,10 @@ void add_constraint (const dim_vector& dims) { size_constraints.push_back (dims); } + double min_val (void) const { return xmin; } + double max_val (void) const { return xmax; } + double min_pos (void) const { return xminp; } + array_property& operator = (const octave_value& val) { set (val); @@ -747,8 +764,13 @@ private: OCTINTERP_API bool validate (const octave_value& v); + OCTINTERP_API void get_data_limits (void); + protected: octave_value data; + double xmin; + double xmax; + double xminp; std::list<std::string> type_constraints; std::list<dim_vector> size_constraints; }; @@ -1657,10 +1679,10 @@ return data_property (); } - virtual data_property get_cdata_property (void) const + virtual array_property get_cdata_property (void) const { error ("get: invalid property \"cdata\""); - return data_property (); + return array_property (); } protected: @@ -2032,7 +2054,7 @@ return props.get_xudata_property (); } - data_property get_cdata_property (void) const + array_property get_cdata_property (void) const { const base_properties& props = get_properties (); return props.get_cdata_property (); @@ -2857,13 +2879,17 @@ BEGIN_PROPERTIES(image) data_property xdata l , Matrix () data_property ydata l , Matrix () - data_property cdata l , Matrix () + array_property cdata l , Matrix () radio_property cdatamapping a , "{scaled}|direct" END_PROPERTIES protected: void init (void) { + cdata.add_constraint ("double"); + cdata.add_constraint ("uint8"); + cdata.add_constraint (dim_vector (-1, -1)); + cdata.add_constraint (dim_vector (-1, -1, 3)); } }; @@ -2903,11 +2929,11 @@ data_property xdata l , Matrix () data_property ydata l , Matrix () data_property zdata l , Matrix () - data_property cdata l , Matrix () + array_property cdata l , Matrix () radio_property cdatamapping , "{scaled}|direct" array_property faces , Matrix () data_property facevertexalphadata , Matrix () - data_property facevertexcdata , Matrix () + array_property facevertexcdata , Matrix () array_property vertices , Matrix () array_property vertexnormals , Matrix () radio_property normalmode , "{auto}|manual" @@ -2939,6 +2965,10 @@ { vertices.add_constraint (dim_vector (-1, 2)); vertices.add_constraint (dim_vector (-1, 3)); + cdata.add_constraint (dim_vector (-1, -1)); + cdata.add_constraint (dim_vector (-1, -1, 3)); + facevertexcdata.add_constraint (dim_vector (-1, 1)); + facevertexcdata.add_constraint (dim_vector (-1, 3)); } }; @@ -2978,8 +3008,7 @@ data_property xdata lu , Matrix () data_property ydata lu , Matrix () data_property zdata lu , Matrix () - // FIXME: cdata can be of type "double" or "uint8" - data_property cdata l , Matrix () + array_property cdata l , Matrix () radio_property cdatamapping a , "{scaled}|direct" color_property facecolor , "{flat}|none|interp|texturemap" // FIXME: should be a double-radio property @@ -3018,11 +3047,10 @@ alphadata.add_constraint ("uint8"); alphadata.add_constraint (dim_vector (-1, -1)); vertexnormals.add_constraint (dim_vector (-1, -1, 3)); - // FIXME: uncomment this when cdata has the right type - //cdata.add_constraint ("double"); - //cdata.add_constraint ("double"); - //cdata.add_constraint (dim_vector (-1, -1)); - //cdata.add_constraint (dim_vector (-1, -1, 3)); + cdata.add_constraint ("double"); + cdata.add_constraint ("uint8"); + cdata.add_constraint (dim_vector (-1, -1)); + cdata.add_constraint (dim_vector (-1, -1, 3)); } private: