* refactor the psi pseudo axes engine.
[hkl.git] / src / hkl-axis.c
blob71013208e283a1ec9dfd63028df29f78849fe6a8
1 #include <stdlib.h>
2 #include <math.h>
4 #include <hkl/hkl-axis.h>
5 #include <hkl/hkl-quaternion.h>
7 /*****************/
8 /* HklAxisConfig */
9 /*****************/
11 static HklAxisConfig hkl_axis_config_default = {{-M_PI, M_PI}, 0., 1};
13 void hkl_axis_config_randomize(HklAxisConfig *self)
15 double alea = (double)rand() / (RAND_MAX + 1.);
16 self->value = self->range.min+(self->range.max-self->range.min)*alea;
17 self->dirty = 1;
20 void hkl_axis_config_init(HklAxisConfig *self, double min, double max,
21 double value, int dirty)
23 self->range.min = min;
24 self->range.max = max;
25 self->value = value;
26 self->dirty = dirty;
29 void hkl_axis_config_fprintf(FILE *f, HklAxisConfig *self)
31 fprintf(f, "% f [%f : %f] (%d)", self->value,
32 self->range.min, self->range.max, self->dirty);
35 /***********/
36 /* HklAxis */
37 /***********/
39 void hkl_axis_init(HklAxis *self, char const *name, HklVector const *axis_v)
41 self->name = name;
42 self->axis_v = *axis_v;
43 self->config = hkl_axis_config_default;
46 void hkl_axis_get_config(HklAxis *axis, HklAxisConfig *config)
48 *config = axis->config;
51 void hkl_axis_set_config(HklAxis *axis, HklAxisConfig *config)
53 axis->config = *config;
54 axis->config.dirty = HKL_TRUE;
57 void hkl_axis_clear_dirty(HklAxis *axis)
59 axis->config.dirty = HKL_FALSE;
62 void hkl_axis_get_quaternion(HklAxis const *axis, HklQuaternion *q)
64 hkl_quaternion_from_angle_and_axe(q, axis->config.value,
65 &axis->axis_v);