From 2225d489bd1ce5233a0bd1a066935bbfd519e606 Mon Sep 17 00:00:00 2001 From: luboslenco Date: Mon, 24 Aug 2026 08:32:08 +0200 Subject: [PATCH] paint: add script_append_mesh_obj --- paint/sources/io/import_mesh.c | 11 +++++++++++ paint/sources/io/import_obj.c | 9 ++++++--- paint/sources/minic_api.c | 1 + paint/sources/minic_impl.c | 12 ++++++++++++ 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/paint/sources/io/import_mesh.c b/paint/sources/io/import_mesh.c index 3a604bb3..215756df 100644 --- a/paint/sources/io/import_mesh.c +++ b/paint/sources/io/import_mesh.c @@ -65,6 +65,17 @@ void import_mesh_run(char *path, bool _clear_layers, bool replace_existing, bool #endif } +void import_mesh_run_obj(char *data) { + import_mesh_clear_layers = false; + import_mesh_no_reset = true; + import_mesh_append = true; + g_context->layer_filter = 0; + + buffer_t *b = buffer_create_from_raw((u8 *)data, strlen(data)); + import_obj_parse(b, false); + free(b); +} + i32 import_mesh_finish_import_sort(void **pa, void **pb) { mesh_object_t *a = *(pa); mesh_object_t *b = *(pb); diff --git a/paint/sources/io/import_obj.c b/paint/sources/io/import_obj.c index 85eed2cd..d8d71a04 100644 --- a/paint/sources/io/import_obj.c +++ b/paint/sources/io/import_obj.c @@ -2,12 +2,16 @@ #include "../global.h" void import_obj_run(char *path, bool replace_existing) { + buffer_t *b = data_get_blob(path); + import_obj_parse(b, replace_existing); + data_delete_blob(path); +} + +void import_obj_parse(buffer_t *b, bool replace_existing) { split_type_t i = g_context->split_by; bool is_udim = i == SPLIT_TYPE_UDIM; i32 split_code = (i == SPLIT_TYPE_OBJECT || is_udim) ? 'o' : 'u'; // usemtl - buffer_t *b = data_get_blob(path); - if (is_udim) { raw_mesh_t *part = obj_parse(b, split_code, 0, is_udim); char *name = part->name; @@ -217,5 +221,4 @@ void import_obj_run(char *path, bool replace_existing) { array_free(discarded); free(discarded); } - data_delete_blob(path); } diff --git a/paint/sources/minic_api.c b/paint/sources/minic_api.c index 5bed1256..cf8a37e6 100644 --- a/paint/sources/minic_api.c +++ b/paint/sources/minic_api.c @@ -1199,6 +1199,7 @@ void minic_register_builtins() { R(script_project_open, "v(p:char path)"); R(script_import_asset, "v(p:char path,i hdr_as_envmap)"); R(script_append_mesh, "v(p:char path)"); + R(script_append_mesh_obj, "v(p:char data)"); R(script_export_mesh, "v(p:char path)"); R(script_export_material, "v(p:char path)"); R(project_filepath_get, "p:char()"); diff --git a/paint/sources/minic_impl.c b/paint/sources/minic_impl.c index 7040f175..5a9bca4b 100644 --- a/paint/sources/minic_impl.c +++ b/paint/sources/minic_impl.c @@ -388,6 +388,18 @@ void script_append_mesh(char *path) { g_context->ddirty = 2; } +void script_append_mesh_obj(char *data) { + if (data == NULL || data[0] == '\0') { + return; + } + gpu_texture_t *current; + bool in_use; + script_gpu_begin(¤t, &in_use); + import_mesh_run_obj(data); + script_gpu_end(current, in_use); + g_context->ddirty = 2; +} + void script_export_mesh(char *path) { if (path == NULL) { return;