Esempio n. 1
0
/**
 * @ingroup VuoTransform
 * Encodes @c value as a JSON object.
 */
json_object * VuoTransform_jsonFromValue(const VuoTransform value)
{
	if (VuoTransform_isIdentity(value))
		return json_object_new_string("identity");

	json_object *js = json_object_new_object();

	{
		json_object * o = json_object_new_array();
		json_object_array_add(o,json_object_new_double(cook(value.translation.x)));
		json_object_array_add(o,json_object_new_double(cook(value.translation.y)));
		json_object_array_add(o,json_object_new_double(cook(value.translation.z)));
		json_object_object_add(js, "translation", o);
	}

	// Don't store value.rotation, since we can calculate it from the source rotation.

	if (value.type == VuoTransformTypeQuaternion)
	{
		json_object * o = json_object_new_array();
		json_object_array_add(o,json_object_new_double(cook(value.rotationSource.quaternion.x)));
		json_object_array_add(o,json_object_new_double(cook(value.rotationSource.quaternion.y)));
		json_object_array_add(o,json_object_new_double(cook(value.rotationSource.quaternion.z)));
		json_object_array_add(o,json_object_new_double(cook(value.rotationSource.quaternion.w)));
		json_object_object_add(js, "quaternionRotation", o);
	}
	else if (value.type == VuoTransformTypeEuler)
	{
		json_object * o = json_object_new_array();
		json_object_array_add(o,json_object_new_double(cook(value.rotationSource.euler.x)));
		json_object_array_add(o,json_object_new_double(cook(value.rotationSource.euler.y)));
		json_object_array_add(o,json_object_new_double(cook(value.rotationSource.euler.z)));
		json_object_object_add(js, "eulerRotation", o);
	}
	else
	{
		json_object * o = json_object_new_array();
		json_object_array_add(o,json_object_new_double(cook(value.rotationSource.target.x)));
		json_object_array_add(o,json_object_new_double(cook(value.rotationSource.target.y)));
		json_object_array_add(o,json_object_new_double(cook(value.rotationSource.target.z)));
		json_object_object_add(js, "target", o);

		o = json_object_new_array();
		json_object_array_add(o,json_object_new_double(cook(value.rotationSource.upDirection.x)));
		json_object_array_add(o,json_object_new_double(cook(value.rotationSource.upDirection.y)));
		json_object_array_add(o,json_object_new_double(cook(value.rotationSource.upDirection.z)));
		json_object_object_add(js, "upDirection", o);
	}

	if (value.type != VuoTransformTypeTargeted)
	{
		json_object * o = json_object_new_array();
		json_object_array_add(o,json_object_new_double(cook(value.scale.x)));
		json_object_array_add(o,json_object_new_double(cook(value.scale.y)));
		json_object_array_add(o,json_object_new_double(cook(value.scale.z)));
		json_object_object_add(js, "scale", o);
	}

	return js;
}
Esempio n. 2
0
/**
 * @ingroup VuoTransform
 * Produces a brief human-readable summary of @c value.
 */
char * VuoTransform_summaryFromValue(const VuoTransform value)
{
	if (VuoTransform_isIdentity(value))
		return strdup("identity transform (no change)");

	if (value.type == VuoTransformTypeTargeted)
		return VuoText_format("position (%g, %g, %g)<br>target (%g, %g, %g)<br>up (%g, %g, %g)",
							  value.translation.x, value.translation.y, value.translation.z, value.rotationSource.target.x, value.rotationSource.target.y, value.rotationSource.target.z, value.rotationSource.upDirection.x, value.rotationSource.upDirection.y, value.rotationSource.upDirection.z);

	char *rotation;
	if (value.type == VuoTransformTypeQuaternion)
		rotation = VuoText_format("(%g, %g, %g, %g) quaternion",
								  value.rotationSource.quaternion.x, value.rotationSource.quaternion.y, value.rotationSource.quaternion.z, value.rotationSource.quaternion.w);
	else
	{
		VuoPoint3d r = VuoPoint3d_multiply(value.rotationSource.euler, 180./M_PI);
		rotation = VuoText_format("(%g°, %g°, %g°) euler",
								  r.x, r.y, r.z);
	}

	char *valueAsString = VuoText_format("translation (%g, %g, %g)<br>rotation %s<br>scale (%g, %g, %g)",
										 value.translation.x, value.translation.y, value.translation.z, rotation, value.scale.x, value.scale.y, value.scale.z);
	free(rotation);
	return valueAsString;
}
Esempio n. 3
0
/**
 * @ingroup VuoTransform
 * Produces a brief human-readable summary of @c value.
 */
char * VuoTransform_summaryFromValue(const VuoTransform value)
{
	if (VuoTransform_isIdentity(value))
		return strdup("identity transform (no change)");

	if (value.type == VuoTransformTypeTargeted)
	{
		const char *format = "position (%g, %g, %g)<br>target (%g, %g, %g)<br>up (%g, %g, %g)";
		int size = snprintf(NULL, 0, format, value.translation.x, value.translation.y, value.translation.z, value.rotationSource.target.x, value.rotationSource.target.y, value.rotationSource.target.z, value.rotationSource.upDirection.x, value.rotationSource.upDirection.y, value.rotationSource.upDirection.z);
		char *valueAsString = (char *)malloc(size+1);
		snprintf(valueAsString, size+1, format, value.translation.x, value.translation.y, value.translation.z, value.rotationSource.target.x, value.rotationSource.target.y, value.rotationSource.target.z, value.rotationSource.upDirection.x, value.rotationSource.upDirection.y, value.rotationSource.upDirection.z);
		return valueAsString;
	}

	const char *format = "translation (%g, %g, %g)<br>rotation %s<br>scale (%g, %g, %g)";

	char *rotation;
	if (value.type == VuoTransformTypeQuaternion)
	{
		const char *format = "(%g, %g, %g, %g) quaternion";
		int size = snprintf(NULL, 0, format, value.rotationSource.quaternion.x, value.rotationSource.quaternion.y, value.rotationSource.quaternion.z, value.rotationSource.quaternion.w);
		rotation = (char *)malloc(size+1);
		snprintf(rotation, size+1, format, value.rotationSource.quaternion.x, value.rotationSource.quaternion.y, value.rotationSource.quaternion.z, value.rotationSource.quaternion.w);
	}
	else
	{
		const char *format = "(%g°, %g°, %g°) euler";
		VuoPoint3d r = VuoPoint3d_multiply(value.rotationSource.euler, 180./M_PI);
		int size = snprintf(NULL, 0, format, r.x, r.y, r.z);
		rotation = (char *)malloc(size+1);
		snprintf(rotation, size+1, format, r.x, r.y, r.z);
	}

	int size = snprintf(NULL, 0, format, value.translation.x, value.translation.y, value.translation.z, rotation, value.scale.x, value.scale.y, value.scale.z);
	char * valueAsString = (char *)malloc(size+1);
	snprintf(valueAsString, size+1, format, value.translation.x, value.translation.y, value.translation.z, rotation, value.scale.x, value.scale.y, value.scale.z);
	free(rotation);
	return valueAsString;
}