#include "gpu_offset.h" #include #include #include int main() { printf("=== C API Example: Linking libcudaslicer_offset.so ===\n"); // 1. Initialize GPU if (gpu_offset_init(0) != 0) { fprintf(stderr, "Failed to initialize GPU\n"); return 1; } // 2. Create a test slice layer with a square polygon and a circular hole GpuContour contours[2]; // Square exterior: 20mm x 20mm centered at origin GpuPoint2D square_pts[4] = { { -10.0f, -10.0f }, { 10.0f, -10.0f }, { 10.0f, 10.0f }, { -10.0f, 10.0f } }; contours[0].points = square_pts; contours[0].num_points = 4; contours[0].is_hole = 0; // Diamond interior hole GpuPoint2D hole_pts[4] = { { 0.0f, -4.0f }, { 4.0f, 0.0f }, { 0.0f, 4.0f }, { -4.0f, 0.0f } }; contours[1].points = hole_pts; contours[1].num_points = 4; contours[1].is_hole = 1; GpuSliceLayer layer; layer.z_height = 0.20f; layer.contours = contours; layer.num_contours = 2; // 3. Configure Offsets float offset_dists[2] = { 0.45f, 0.90f }; GpuOffsetConfig config; config.pitch_mm = 0.05f; config.pad_mm = 1.0f; config.offset_distances_mm = offset_dists; config.num_offsets = 2; config.use_gpu_rasterizer = 1; // 4. Run GPU Offset GpuLayerResult* results = NULL; GpuOffsetStats stats = {0}; int ret = gpu_offset_polygon_layers( &layer, 1, -10.0f, -10.0f, 10.0f, 10.0f, &config, &results, &stats ); if (ret == 0 && results) { printf("GPU Offset Successful!\n"); printf(" Rasterization: %.3f ms\n", stats.t_raster_ms); printf(" H2D Transfer: %.3f ms\n", stats.t_h2d_ms); printf(" GPU JFA Compute: %.3f ms\n", stats.t_gpu_jfa_ms); printf(" D2H Transfer: %.3f ms\n", stats.t_d2h_ms); printf(" Vectorization: %.3f ms\n", stats.t_vectorize_ms); printf(" Total Time: %.3f ms\n", stats.t_total_pipeline_ms); for (size_t o = 0; o < results[0].num_perimeters; ++o) { printf(" Perimeter %zu (Offset -%.2f mm): %zu vector loops\n", o + 1, results[0].perimeters[o].offset_distance_mm, results[0].perimeters[o].num_contours); } gpu_offset_free_results(results, 1); } else { fprintf(stderr, "GPU Offset failed!\n"); } gpu_offset_cleanup(); printf("=== Done ===\n"); return 0; }