You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
3.1 KiB

#include "arrangement_builder.hpp"
EXTERN_C_BEGIN
API Arrangement2DResult compute_arrangement_2d(const Plane2D* planes, const uint32_t num_planes)
{
return ArrangementBuilder<2>(planes, num_planes).export_arrangement();
}
API Arrangement3DResult compute_arrangement_3d(const Plane3D* planes, const uint32_t num_planes)
{
return ArrangementBuilder<3>(planes, num_planes).export_arrangement();
}
API void free_arrangement_2d(Arrangement2D* arr)
{
if (arr->num_vertices > 0) ScalableMemoryPoolSingleton::instance().free(arr->points);
if (arr->num_edges > 0) {
ScalableMemoryPoolSingleton::instance().free(arr->vertices);
ScalableMemoryPoolSingleton::instance().free(arr->supporting_lines);
ScalableMemoryPoolSingleton::instance().free(arr->positive_cells);
ScalableMemoryPoolSingleton::instance().free(arr->negative_cells);
}
if (arr->num_faces > 0) {
for (uint32_t i = 0; i < arr->num_faces; i++) ScalableMemoryPoolSingleton::instance().free(arr->edges[i]);
ScalableMemoryPoolSingleton::instance().free(arr->edges);
ScalableMemoryPoolSingleton::instance().free(arr->face_edges_count);
}
if (arr->num_unique_planes > 0) {
ScalableMemoryPoolSingleton::instance().free(arr->unique_plane_indices);
for (uint32_t i = 0; i < arr->num_unique_planes; i++)
ScalableMemoryPoolSingleton::instance().free(arr->unique_planes[i]);
ScalableMemoryPoolSingleton::instance().free(arr->unique_planes);
ScalableMemoryPoolSingleton::instance().free(arr->unique_plane_count);
ScalableMemoryPoolSingleton::instance().free(arr->unique_plane_orientations);
}
}
API void free_arrangement_3d(Arrangement3D* arr)
{
if (arr->num_vertices > 0) ScalableMemoryPoolSingleton::instance().free(arr->points);
if (arr->num_faces > 0) {
for (uint32_t i = 0; i < arr->num_faces; i++) ScalableMemoryPoolSingleton::instance().free(arr->vertices[i]);
ScalableMemoryPoolSingleton::instance().free(arr->vertices);
ScalableMemoryPoolSingleton::instance().free(arr->face_vertices_count);
ScalableMemoryPoolSingleton::instance().free(arr->supporting_planes);
ScalableMemoryPoolSingleton::instance().free(arr->positive_cells);
ScalableMemoryPoolSingleton::instance().free(arr->negative_cells);
}
if (arr->num_cells > 0) {
for (uint32_t i = 0; i < arr->num_cells; i++) ScalableMemoryPoolSingleton::instance().free(arr->faces[i]);
ScalableMemoryPoolSingleton::instance().free(arr->faces);
ScalableMemoryPoolSingleton::instance().free(arr->cell_faces_count);
}
if (arr->num_unique_planes > 0) {
ScalableMemoryPoolSingleton::instance().free(arr->unique_plane_indices);
for (uint32_t i = 0; i < arr->num_unique_planes; i++)
ScalableMemoryPoolSingleton::instance().free(arr->unique_planes[i]);
ScalableMemoryPoolSingleton::instance().free(arr->unique_planes);
ScalableMemoryPoolSingleton::instance().free(arr->unique_plane_count);
ScalableMemoryPoolSingleton::instance().free(arr->unique_plane_orientations);
}
}
EXTERN_C_END