Discussion:
[Gwyddion-users] user-set display range in container ignored
Mathias Müller
2014-09-11 13:53:35 UTC
Permalink
Hi,

I wanted to adjust the displayed data in my C code with the following approach:

(...)
data[1] = gwy_container_new();
gwy_container_set_object_by_name(data[1], "/0/data", data_field);
data_view[1] = GWY_DATA_VIEW(gwy_data_view_new(data[1]));
gwy_data_view_set_data_prefix(data_view[1], "/0/data");
gwy_container_set_boolean_by_name(data[1], "/0/data/realsquare", TRUE);
gwy_container_set_int32_by_name(data[1], "/0/base/range-type", GWY_LAYER_BASIC_RANGE_FIXED);
gdouble max = gwy_data_field_get_max (data_field);
gdouble avg = gwy_data_field_get_avg(data_field) ;
gwy_container_set_double_by_name(data[1], "/0/base/min", 0); // or max*0.5
gwy_container_set_double_by_name(data[1], "/0/base/max", 1); // or max
(...)

The data from <data_field> are displayed correctly. But what ever I set as min or max value for
display ranges is being ignored. I would have thought the GWY_LAYER_BASIC_RANGE_FIXED enables the
readout of the min/max values.

Changing the /0/data/range-type to e.g. GWY_LAYER_BASIC_RANGE_AUTO results in a different
display of the data.


Did I do something wrong when adjusting the color scale manually?

Thanks for any help,

/M
David Nečas (Yeti)
2014-09-11 14:44:42 UTC
Permalink
Post by Mathias Müller
(...)
data[1] = gwy_container_new();
gwy_container_set_object_by_name(data[1], "/0/data", data_field);
data_view[1] = GWY_DATA_VIEW(gwy_data_view_new(data[1]));
gwy_data_view_set_data_prefix(data_view[1], "/0/data");
gwy_container_set_boolean_by_name(data[1], "/0/data/realsquare", TRUE);
gwy_container_set_int32_by_name(data[1], "/0/base/range-type", GWY_LAYER_BASIC_RANGE_FIXED);
For range type control, you need to tell also the data display layer
where to look for the settings (omitting some typecasts):

layer = gwy_data_view_get_base_layer(dataview[1]);
gwy_pixmap_layer_set_data_key(layer, "/0/data");
gwy_layer_basic_set_range_type_key(layer, "/0/base/range-type");
gwy_layer_basic_set_min_max_key(layer, "/0/base");

Look for instance at the neural module:

https://sourceforge.net/p/gwyddion/code/HEAD/tree/trunk/gwyddion/modules/process/neural.c#l1593

Regards,

Yeti
Mathias Müller
2014-09-12 07:56:17 UTC
Permalink
Yeti,

that was the missing code sniplet. Many thanks!

Cheers,

/M
Post by David Nečas (Yeti)
Post by Mathias Müller
(...)
data[1] = gwy_container_new();
gwy_container_set_object_by_name(data[1], "/0/data", data_field);
data_view[1] = GWY_DATA_VIEW(gwy_data_view_new(data[1]));
gwy_data_view_set_data_prefix(data_view[1], "/0/data");
gwy_container_set_boolean_by_name(data[1], "/0/data/realsquare", TRUE);
gwy_container_set_int32_by_name(data[1], "/0/base/range-type", GWY_LAYER_BASIC_RANGE_FIXED);
For range type control, you need to tell also the data display layer
layer = gwy_data_view_get_base_layer(dataview[1]);
gwy_pixmap_layer_set_data_key(layer, "/0/data");
gwy_layer_basic_set_range_type_key(layer, "/0/base/range-type");
gwy_layer_basic_set_min_max_key(layer, "/0/base");
https://sourceforge.net/p/gwyddion/code/HEAD/tree/trunk/gwyddion/modules/process/neural.c#l1593
Regards,
Yeti
Loading...