1
0
Fork 0

Add API to inspect paths

This commit is contained in:
Hans-Joerg Schurr 2021-04-26 22:56:57 +02:00
parent 50305e7f5e
commit f4b8574728
2 changed files with 70 additions and 7 deletions

View File

@ -3,6 +3,7 @@
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#ifdef DEBUG
void
@ -91,13 +92,6 @@ typedef enum hvif_line_cap
#define MATRIX_TRANSLATION(P) \
(hvif_matrix) { 1.0, 0.0, 0.0, 1.0, P.x, P.y }
typedef struct hvif_point hvif_point;
struct hvif_point
{
float x;
float y;
};
#define POINT_ORIGIN \
(hvif_point) { 0.0, 0.0 }
@ -843,4 +837,32 @@ hvif_style_transformation(
return SUCCESS;
}
hvif_status hvif_path_num_points(
hvif_image* image, uint8_t path, uint8_t* points) {
if (image == NULL) return ERROR_PATH;
if (path >= image->num_paths) return ERROR_PATH;
*points = image->paths[path].num_points;
return SUCCESS;
}
hvif_status hvif_path_closed(
hvif_image* image, uint8_t path, bool* closed) {
if (image == NULL) return ERROR_PATH;
if (path >= image->num_paths) return ERROR_PATH;
*closed = image->paths[path].closed;
return SUCCESS;
}
hvif_status hvif_path_points(
hvif_image* image, uint8_t path, hvif_point** points) {
if (image == NULL) return ERROR_PATH;
if (path >= image->num_paths) return ERROR_PATH;
size_t total_points = 3 * image->paths[path].num_points;
hvif_point* p = calloc(total_points, sizeof(hvif_point));
if (!p) return ERROR_NOMEM;
memcpy(p, image->paths[path].points, total_points * sizeof(hvif_point));
*points = p;
return SUCCESS;
}
#endif /* INTERNAL_DATASTRUCTURES */

View File

@ -175,6 +175,47 @@ struct hvif_matrix
hvif_status hvif_style_transformation(
hvif_image* image, uint8_t style, hvif_matrix* transformation);
/**
* \brief Returns the number of poins in a path.
* \param[in] file A valid image.
* \param[in] path The index of the path.
* \param[out] points The number of points.
* \return ERROR_PATH if this path does not exist.
*/
hvif_status hvif_path_num_points(
hvif_image* image, uint8_t path, uint8_t* points);
/**
* \brief Checks if the path is closed.
* \param[in] file A valid image.
* \param[in] path The index of the path.
* \param[out] closed If the path is a closed path.
* \return ERROR_PATH if this path does not exist.
*/
hvif_status hvif_path_closed(
hvif_image* image, uint8_t path, bool* closed);
/** \typedef A 2D point. */
typedef struct hvif_point hvif_point;
struct hvif_point
{
float x;
float y;
};
/**
* \brief Returns a copy of the poins in a path including the control points.
* \param[in] file A valid image.
* \param[in] path The index of the path.
* \param[out] points The points and control points.
* \return ERROR_PATH if this path does not exist. ERROR_NOMEM if points
* list could not be allocated.
* \remark There are two control point per point. Hence the length
* of the array is 3 * num_points.
*/
hvif_status hvif_path_points(
hvif_image* image, uint8_t path, hvif_point** points);
/**@}*/
#endif /* HVIF_LIGHT_H */