Vuo  2.0.2
VuoPoint3d.c
Go to the documentation of this file.
1 
10 #include <stdio.h>
11 #include <stdlib.h>
12 #include "type.h"
13 
15 #ifdef VUO_COMPILER
17  "title" : "3D Point",
18  "description" : "A floating-point 3-dimensional Cartesian spatial location.",
19  "keywords" : [ "coordinate" ],
20  "version" : "1.0.0",
21  "dependencies" : [
22  "VuoBoolean",
23  "VuoReal",
24  "VuoText"
25  ]
26  });
27 #endif
28 
43 {
44  VuoPoint3d point = {0,0,0};
45 
46  json_type t = json_object_get_type(js);
47  if (t == json_type_string)
48  {
49  const char *s = json_object_get_string(js);
50  float x, y, z;
51  sscanf(s, "%20g, %20g, %20g", &x, &y, &z);
52  return (VuoPoint3d){x, y, z};
53  }
54  else if (t == json_type_array)
55  {
56  int len = json_object_array_length(js);
57  if (len >= 1)
58  point.x = json_object_get_double(json_object_array_get_idx(js, 0));
59  if (len >= 2)
60  point.y = json_object_get_double(json_object_array_get_idx(js, 1));
61  if (len >= 3)
62  point.z = json_object_get_double(json_object_array_get_idx(js, 2));
63  return point;
64  }
65 
66  json_object *o = NULL;
67 
68  if (json_object_object_get_ex(js, "x", &o))
69  point.x = json_object_get_double(o);
70  else if (json_object_object_get_ex(js, "X", &o))
71  point.x = json_object_get_double(o);
72 
73  if (json_object_object_get_ex(js, "y", &o))
74  point.y = json_object_get_double(o);
75  else if (json_object_object_get_ex(js, "Y", &o))
76  point.y = json_object_get_double(o);
77 
78  if (json_object_object_get_ex(js, "z", &o))
79  point.z = json_object_get_double(o);
80  else if (json_object_object_get_ex(js, "Z", &o))
81  point.z = json_object_get_double(o);
82 
83  return point;
84 }
85 
90 json_object * VuoPoint3d_getJson(const VuoPoint3d value)
91 {
92  json_object *js = json_object_new_object();
93 
94  json_object *xObject = json_object_new_double(value.x);
95  json_object_object_add(js, "x", xObject);
96 
97  json_object *yObject = json_object_new_double(value.y);
98  json_object_object_add(js, "y", yObject);
99 
100  json_object *zObject = json_object_new_double(value.z);
101  json_object_object_add(js, "z", zObject);
102 
103  return js;
104 }
105 
110 char * VuoPoint3d_getSummary(const VuoPoint3d value)
111 {
112  return VuoText_format("%g, %g, %g", value.x, value.y, value.z);
113 }
114 
118 bool VuoPoint3d_areEqual(const VuoPoint3d value1, const VuoPoint3d value2)
119 {
120  return VuoReal_areEqual(value1.x, value2.x)
121  && VuoReal_areEqual(value1.y, value2.y)
122  && VuoReal_areEqual(value1.z, value2.z);
123 }
124 
131 bool VuoPoint3d_isLessThan(const VuoPoint3d a, const VuoPoint3d b)
132 {
136  return false;
137 }
138 
144 VuoPoint3d VuoPoint3d_random(const VuoPoint3d minimum, const VuoPoint3d maximum)
145 {
146  return VuoPoint3d_make(
147  VuoReal_random(minimum.x, maximum.x),
148  VuoReal_random(minimum.y, maximum.y),
149  VuoReal_random(minimum.z, maximum.z));
150 }
151 
157 VuoPoint3d VuoPoint3d_randomWithState(unsigned short state[3], const VuoPoint3d minimum, const VuoPoint3d maximum)
158 {
159  return VuoPoint3d_make(
160  VuoReal_randomWithState(state, minimum.x, maximum.x),
161  VuoReal_randomWithState(state, minimum.y, maximum.y),
162  VuoReal_randomWithState(state, minimum.z, maximum.z));
163 }