Files
Cesarus85--mjolnir-vr/source/tool/connected_geometry.c
T

126 lines
3.1 KiB
C

/*
CONNECTED_GEOMETRY.C
symbols in this file:
000F2CD0 0030:
_connected_geometry_new (0000)
000F2D00 0050:
_connected_geometry_delete (0000)
000F2D50 00d0:
_connected_geometry_group_recursive (0000)
000F2E20 00c0:
_code_000f2e20 (0000)
000F2EE0 00f0:
_code_000f2ee0 (0000)
000F2FD0 00b0:
_plane3d_from_points (0000)
000F3080 01a0:
_connected_geometry_add_triangle (0000)
000F3220 0180:
_code_000f3220 (0000)
000F33A0 0080:
_connected_geometry_add_intermediate_triangle (0000)
000F3420 0130:
_connected_geometry_group_coplanar (0000)
00279CB0 0079:
??_C@_0HJ@CCKALPEO@?$CD?$CD?$CD?5WARNING?3?5found?5duplicate?5tri@ (0000)
00279D30 0008:
__real@3f847ae140000000 (0000)
004561B3 0001:
_bss_004561b3 (0000)
*/
/* ---------- headers */
#include "memory/array.h"
/* ---------- constants */
/* ---------- macros */
/* ---------- structures */
struct connected_geometry_point
{
float x;
float y;
float z;
};
struct connected_geometry_edge
{
struct dynamic_array triangle_indices;
long point_indices[2];
long unused[2];
};
struct connected_geometry_triangle
{
long edge_designators[3];
long coplanar_group_index;
long unused[2];
};
struct connected_geometry
{
struct dynamic_array points;
struct dynamic_array edges;
struct dynamic_array triangles;
};
typedef char connected_geometry_dynamic_array_size_assert[
sizeof(struct dynamic_array) == 0xC ? 1 : -1];
typedef char connected_geometry_point_size_assert[
sizeof(struct connected_geometry_point) == 0xC ? 1 : -1];
typedef char connected_geometry_edge_size_assert[
sizeof(struct connected_geometry_edge) == 0x1C ? 1 : -1];
typedef char connected_geometry_edge_point_indices_offset_assert[
offsetof(struct connected_geometry_edge, point_indices) == 0xC ? 1 : -1];
typedef char connected_geometry_triangle_size_assert[
sizeof(struct connected_geometry_triangle) == 0x18 ? 1 : -1];
typedef char connected_geometry_size_assert[
sizeof(struct connected_geometry) == 0x24 ? 1 : -1];
typedef char connected_geometry_edges_offset_assert[
offsetof(struct connected_geometry, edges) == 0xC ? 1 : -1];
typedef char connected_geometry_triangles_offset_assert[
offsetof(struct connected_geometry, triangles) == 0x18 ? 1 : -1];
/* ---------- prototypes */
/* ---------- globals */
/* ---------- public code */
void connected_geometry_new(
struct connected_geometry *geometry)
{
dynamic_array_new(&geometry->points, sizeof(struct connected_geometry_point));
dynamic_array_new(&geometry->edges, sizeof(struct connected_geometry_edge));
dynamic_array_new(&geometry->triangles, sizeof(struct connected_geometry_triangle));
return;
}
void connected_geometry_delete(
struct connected_geometry *geometry)
{
long edge_index;
for (edge_index = 0; edge_index < geometry->edges.count; edge_index++)
{
struct connected_geometry_edge *edge = dynamic_array_get_element(
&geometry->edges,
edge_index,
sizeof(*edge));
dynamic_array_delete(&edge->triangle_indices);
}
dynamic_array_delete(&geometry->points);
dynamic_array_delete(&geometry->edges);
dynamic_array_delete(&geometry->triangles);
return;
}
/* ---------- private code */