Vuo  2.0.0
VuoPoint2d.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" : "2D Point",
18  "description" : "A floating-point 2-dimensional Cartesian spatial location.",
19  "keywords" : [ "coordinate" ],
20  "version" : "1.0.0",
21  "dependencies" : [
22  "VuoReal",
23  "VuoText"
24  ]
25  });
26 #endif
27 
41 {
42  VuoPoint2d point = {0,0};
43 
44  json_type t = json_object_get_type(js);
45  if (t == json_type_string)
46  {
47  const char *s = json_object_get_string(js);
48  float x, y;
49  sscanf(s, "%20g, %20g", &x, &y);
50  return (VuoPoint2d){x, y};
51  }
52  else if (t == json_type_array)
53  {
54  int len = json_object_array_length(js);
55  if (len >= 1)
56  point.x = json_object_get_double(json_object_array_get_idx(js, 0));
57  if (len >= 2)
58  point.y = json_object_get_double(json_object_array_get_idx(js, 1));
59  return point;
60  }
61 
62  json_object *o = NULL;
63 
64  if (json_object_object_get_ex(js, "x", &o))
65  point.x = VuoReal_makeFromJson(o);
66  else if (json_object_object_get_ex(js, "X", &o))
67  point.x = VuoReal_makeFromJson(o);
68 
69  if (json_object_object_get_ex(js, "y", &o))
70  point.y = VuoReal_makeFromJson(o);
71  else if (json_object_object_get_ex(js, "Y", &o))
72  point.y = VuoReal_makeFromJson(o);
73 
74  return point;
75 }
76 
81 json_object * VuoPoint2d_getJson(const VuoPoint2d value)
82 {
83  json_object *js = json_object_new_object();
84 
85  json_object *xObject = VuoReal_getJson(value.x);
86  json_object_object_add(js, "x", xObject);
87 
88  json_object *yObject = VuoReal_getJson(value.y);
89  json_object_object_add(js, "y", yObject);
90 
91  return js;
92 }
93 
98 char * VuoPoint2d_getSummary(const VuoPoint2d value)
99 {
100  return VuoText_format("%g, %g", value.x, value.y);
101 }
102 
106 bool VuoPoint2d_areEqual(const VuoPoint2d value1, const VuoPoint2d value2)
107 {
108  return fabs(value1.x - value2.x) < 0.00001
109  && fabs(value1.y - value2.y) < 0.00001;
110 }
111 
118 bool VuoPoint2d_isLessThan(const VuoPoint2d a, const VuoPoint2d b)
119 {
122  return false;
123 }
124 
130 VuoPoint2d VuoPoint2d_random(const VuoPoint2d minimum, const VuoPoint2d maximum)
131 {
132  return VuoPoint2d_make(
133  VuoReal_random(minimum.x, maximum.x),
134  VuoReal_random(minimum.y, maximum.y));
135 }
136 
142 VuoPoint2d VuoPoint2d_randomWithState(unsigned short state[3], const VuoPoint2d minimum, const VuoPoint2d maximum)
143 {
144  return VuoPoint2d_make(
145  VuoReal_randomWithState(state, minimum.x, maximum.x),
146  VuoReal_randomWithState(state, minimum.y, maximum.y));
147 }