@@ -3936,13 +3936,18 @@ void PrintObject::_generate_support_material()
39363936 if (is_tree (m_config.support_type .value )) {
39373937#ifdef HAS_RUST_TREE_SUPPORTS
39383938 // Use Rust tree support generation via FFI
3939+ if (m_model_object->volumes .empty ()) {
3940+ BOOST_LOG_TRIVIAL (error) << " Tree support generation: model object has no volumes" ;
3941+ return ;
3942+ }
3943+
39393944 TreeSupportConfig cfg = {};
39403945 cfg.layer_height = scaled<int64_t >(m_slicing_params.layer_height );
39413946 cfg.support_angle = m_config.support_angle .value * M_PI / 180.0 ;
39423947 cfg.support_tree_angle = m_config.tree_support_branch_angle .value * M_PI / 180.0 ;
39433948 cfg.support_tree_branch_diameter = scaled<int64_t >(m_config.tree_support_branch_diameter .value );
39443949
3945- // Get mesh data
3950+ // Convert mesh to flat arrays for FFI
39463951 const indexed_triangle_set &its = m_model_object->volumes .front ()->mesh ().its ;
39473952 std::vector<float > vertices;
39483953 vertices.reserve (its.vertices .size () * 3 );
@@ -3969,12 +3974,23 @@ void PrintObject::_generate_support_material()
39693974 if (handle) {
39703975 SupportOutput *output = orca_tree_support_generate (handle);
39713976 if (output && output->success ) {
3972- // Output generated successfully — support layers are in output->layers
3973- // TODO: Convert output polygons to SupportLayer objects
3977+ // Convert Rust output to SupportLayer objects
3978+ for (uint32_t i = 0 ; i < output->layer_count ; i++) {
3979+ const auto &layer = output->layers [i];
3980+ coordf_t print_z = unscaled<coordf_t >(layer.z );
3981+ coordf_t height = (i > 0 ) ? print_z - unscaled<coordf_t >(output->layers [i - 1 ].z ) : print_z;
3982+ add_tree_support_layer (static_cast <int >(i), height, print_z, print_z - 0.5 * height);
3983+ }
3984+ } else if (output && !output->success ) {
3985+ BOOST_LOG_TRIVIAL (error) << " Rust tree support generation failed" ;
3986+ } else {
3987+ BOOST_LOG_TRIVIAL (error) << " Rust tree support generation returned null output" ;
39743988 }
39753989 if (output)
39763990 orca_tree_support_destroy_output (output);
39773991 orca_tree_support_destroy_handle (handle);
3992+ } else {
3993+ BOOST_LOG_TRIVIAL (error) << " Failed to create Rust tree support handle" ;
39783994 }
39793995#else
39803996 // Rust tree supports not available — no tree support generation
0 commit comments