Blender V4.3
curve_decimate.cc File Reference
#include "DNA_curve_types.h"
#include "BLI_heap.h"
#include "BLI_math_vector.h"
#include "MEM_guardedalloc.h"
#include "BKE_curve.hh"
#include "curve_fit_nd.h"
#include <cstring>
#include "BLI_strict_flags.h"

Go to the source code of this file.

Classes

struct  Knot
 
struct  Removal
 

Macros

#define HANDLE_UPDATE(a, b)
 
#define SELECT   1
 

Functions

static float knot_remove_error_value (const float tan_l[3], const float tan_r[3], const float(*points)[3], const uint points_len, float r_handle_factors[2])
 
static void knot_remove_error_recalculate (Heap *heap, const float(*points)[3], const uint points_len, Knot *k, const float error_sq_max)
 
static void curve_decimate (const float(*points)[3], const uint points_len, Knot *knots, const uint knots_len, float error_sq_max, const uint error_target_len)
 
uint BKE_curve_decimate_bezt_array (BezTriple *bezt_array, const uint bezt_array_len, const uint resolu, const bool is_cyclic, const char flag_test, const char flag_set, const float error_sq_max, const uint error_target_len)
 
void BKE_curve_decimate_nurb (Nurb *nu, const uint resolu, const float error_sq_max, const uint error_target_len)
 

Macro Definition Documentation

◆ HANDLE_UPDATE

#define HANDLE_UPDATE ( a,
b )
Value:
{ \
if (a == HD_VECT) { \
a = HD_FREE; \
} \
else if (ELEM(a, HD_AUTO, HD_AUTO_ANIM)) { \
a = HD_ALIGN; \
} \
/* opposite handle */ \
if (ELEM(b, HD_AUTO, HD_AUTO_ANIM)) { \
b = HD_ALIGN; \
} \
} \
((void)0)
#define ELEM(...)
@ HD_AUTO_ANIM
@ HD_VECT
@ HD_FREE
@ HD_AUTO
@ HD_ALIGN
local_group_size(16, 16) .push_constant(Type b

Referenced by BKE_curve_decimate_bezt_array().

◆ SELECT

#define SELECT   1

Definition at line 305 of file curve_decimate.cc.

Referenced by act_markers_make_local_exec(), ActionFCurveToTransData(), actkeys_find_key_in_list_element(), actkeys_select_leftright(), add_marker_to_cfra_elem(), adduplicateflagNurb(), anim_channels_select_set(), anim_channels_selection_flag_for_toggle(), ANIM_fcurve_equalize_keyframes_loop(), animchan_sync_fcurve_scene(), blender::ed::space_node::best_socket_output(), bezier_isfree(), bezt_calc_average(), bezt_select_to_transform_triple_flag(), bezt_to_cfraelem(), blender::draw::beztriple_vflag_get(), BKE_curve_decimate_nurb(), BKE_curve_nurb_vert_active_validate(), BKE_curve_nurbs_vert_coords_apply(), BKE_curve_nurbs_vert_coords_apply_with_mat4(), BKE_lattice_is_any_selected(), BKE_mask_clipboard_copy_from_layer(), BKE_mask_point_select_set(), BKE_mask_point_select_set_handle(), BKE_mball_deselect_all(), BKE_mball_is_any_selected(), BKE_mball_is_any_unselected(), BKE_mball_select_all(), BKE_mball_select_count(), BKE_mball_select_swap(), BKE_mesh_to_curve_nurblist(), BKE_nurb_handle_calc(), BKE_nurb_handles_calc(), BKE_nurb_handles_test(), BKE_nurbList_handles_set(), BKE_object_defgroup_clear(), BKE_scene_orientation_slot_get(), BKE_tracking_track_deselect(), BKE_tracking_track_select(), BKE_tracking_tracks_deselect_all(), blend_to_default_fcurve(), box_select_exec(), box_select_exec(), bpoint_select_set(), blender::draw::bpoint_vflag_get(), blender::ed::object::calc_active_center_for_editmode(), cancelTransTracking(), circle_select_exec(), clean_fcurve(), clean_tracks_exec(), clear_tilt_exec(), clip_tracking_clear_invisible_track_selection(), count_fcurve_keys(), create_plane_track_tracks_exec(), create_primitive_from_points(), createTransActionData(), createTransCurveVerts(), createTransGPencil_curves(), createTransLatticeVerts(), createTransMaskingData(), createTransMBallVerts(), createTransPaintCurveVerts(), createTransSeqData(), createTransSeqImageData(), curve_decimate_exec(), curve_delete_segments(), curve_draw_exec(), curve_extrude_exec(), curve_normals_make_consistent_exec(), curve_nurb_select_similar_type(), curve_nurb_selected_type_get(), curve_pen_invoke(), curve_select_less(), curve_select_more(), curve_select_random_exec(), curve_select_shortest_path_curve(), curve_select_shortest_path_surf(), curve_smooth_value(), curve_split_exec(), curve_toggle_cyclic(), curvemap_buttons_layout(), CurveProfile_buttons_layout(), decimate_fcurve_segment(), delete_feather_points(), delete_metaelems_exec(), deselect_all_center_vertices(), blender::ed::space_node::detach_links_exec(), detect_retrieve_libmv_features(), do_circle_select_mball__doSelectElem(), do_lasso_select_curve(), do_lasso_select_curve__doSelect(), do_lasso_select_lattice__doSelect(), do_lasso_select_marker(), do_lasso_select_mball__doSelectElem(), do_lattice_box_select__doSelect(), do_meta_box_select(), do_nurbs_box_select(), do_nurbs_box_select__doSelect(), do_version_layers_to_collections(), draw_fcurve_active_handle_vertices(), draw_fcurve_active_vertex(), draw_fcurve_handles(), draw_fcurve_selected_handle_vertices(), draw_fcurve_selected_keyframe_vertices(), draw_handle_transform_text(), draw_keylist_keys(), draw_marker(), draw_marker_areas(), draw_marker_slide_zones(), draw_multicam_highlight(), draw_plane_marker_ex(), draw_spline_curve(), draw_spline_points(), draw_strip_offsets(), duplicate_exec(), duplicate_fcurve_keys(), duplicate_metaelems_exec(), ED_clip_select_all(), ED_curve_add_nurbs_primitive(), ed_curve_delete_selected(), ED_curve_editnurb_select_pick(), ED_curve_nurb_deselect_all(), ED_curve_nurb_select_all(), ED_curve_nurb_select_check(), ED_curve_nurb_select_count(), ED_curve_nurb_vert_selected_find(), ED_curve_pick_vert__do_closest(), ED_curve_pick_vert_ex(), ED_curve_select_swap(), ed_editcurve_addvert(), ed_editcurve_extrude(), ed_editnurb_spin(), ED_keyframes_add(), ED_keylist_selected_keys_frame_range(), ed_lattice_select_mirrored(), ED_lattice_select_pick(), ed_marker_add_exec(), ed_marker_box_select_exec(), ed_marker_camera_bind_exec(), ed_marker_delete_exec(), ed_marker_duplicate_apply(), ed_marker_make_links_scene_exec(), ed_marker_move_apply(), ed_marker_move_init(), ed_marker_move_update_header(), ED_markers_deselect_all(), ED_markers_draw(), ED_markers_get_first_selected(), ED_markers_get_minmax(), ED_markers_post_apply_transform(), ED_markers_select_leftright(), ED_mask_select_flush_all(), ED_mask_selected_minmax(), ED_mask_spline_select_set(), ED_mball_add_primitive(), ED_mball_editmball_make(), ed_mball_findnearest_metaelem(), ED_mball_select_pick(), ED_sequencer_select_sequence_single(), ED_sequencer_selected_strips_from_context(), ed_surf_delete_selected(), ed_tracking_deselect_all_tracks(), ED_transverts_create_from_obedit(), ED_transverts_update_obedit(), ED_view3d_minmax_verts(), blender::draw::overlay::Metaballs::edit_object_sync(), element_already_selected(), extrude_vertices_from_selected_endpoints(), find_fcurve_segment(), find_neighboring_sequence(), find_next_prev_sequence(), findnearestLattvert__doClosest(), flushTransSeq(), blender::ed::space_node::frame_node_draw_background(), get_bezt_sel_triple_flag(), get_first_selected_point(), get_selected_center(), blender::ed::space_node::get_selected_node_for_insertion(), blender::ed::greasepencil::get_selected_object_keyframes(), get_strip_text_color(), getTransformOrientation_ex(), gizmo2d_calc_bounds(), gizmo2d_calc_rotation(), gizmo2d_calc_transform_orientation(), gizmo2d_calc_transform_pivot(), gizmo_3d_foreach_selected(), graph_bezt_get_transform_selection(), graphedit_activekey_handles_cb(), graphedit_activekey_left_handle_coord_cb(), graphedit_activekey_right_handle_coord_cb(), graphkeys_mselect_column(), hide_exec(), hide_metaelems_exec(), hide_tracks_exec(), blender::animrig::initialize_bezt(), insert_bp_to_nurb(), is_u_selected(), blender::draw::lattice_batch_cache_create_overlay_batches(), lattice_select_all_exec(), lattice_select_more_less(), lattice_select_ungrouped_exec(), latticecurve_circle_doSelect(), make_segment_exec(), blender::ed::object::make_single_user_exec(), mark_children(), marker_color_get(), marker_get_icon_id(), mask_duplicate_exec(), mask_has_selection(), MaskPointToTransData(), material_slot_de_select(), mball_select_similar_exec(), mball_select_similar_type(), mball_select_similar_type_get(), merge_2_nurb(), mirror_bezier_cframe(), mirror_bezier_marker(), mirror_bezier_time(), mirror_bezier_value(), mirror_bezier_xaxis(), mirror_bezier_yaxis(), mouse_graph_keys(), move_all_selected_points(), nalloc_ak_bezt(), nalloc_ak_cel(), nalloc_ak_gpframe(), nalloc_ak_masklayshape(), blender::ed::space_node::node_active_link_viewer_exec(), blender::ed::space_node::node_clipboard_copy_exec(), blender::ed::space_node::node_deactivate_viewer_exec(), blender::ed::space_node::node_delete_exec(), blender::ed::space_node::node_delete_reconnect_exec(), blender::ed::space_node::node_deselect_all_input_sockets(), blender::ed::space_node::node_deselect_all_output_sockets(), blender::ed::space_node::node_draw_basis(), blender::ed::space_node::node_draw_hidden(), blender::ed::space_node::node_draw_sockets(), blender::ed::space_node::node_duplicate_reparent_recursive(), blender::ed::space_node::node_flag_toggle_exec(), blender::ed::space_node::node_mouse_select(), blender::ed::space_node::node_mute_exec(), blender::ed::space_node::node_select_all_exec(), blender::ed::space_node::node_select_grouped_color(), blender::ed::space_node::node_select_grouped_name(), blender::ed::space_node::node_select_grouped_type(), blender::ed::space_node::node_socket_deselect(), blender::ed::space_node::node_socket_draw(), blender::ed::space_node::node_socket_select(), blender::ed::space_node::node_socket_toggle(), blender::ed::space_node::node_socket_toggle_exec(), nupdate_ak_bezt(), nupdate_ak_cel(), nupdate_ak_gpframe(), nupdate_ak_masklayshape(), nurbList_handles_swap_select(), nurbscurve_circle_select(), blender::ed::outliner::outliner_select_sync_from_sequence(), blender::ed::outliner::outliner_select_sync_to_sequence(), OVERLAY_edit_metaball_cache_populate(), paintcurve_point_add(), paintcurve_point_select(), paintcurve_point_side_index(), PaintCurvePointToTransData(), paste_animedit_keys_fcurve(), posttrans_action_clean(), query_right_side_strips(), query_selected_strips_no_handles(), query_snap_sources_preview(), query_snap_targets_preview(), query_snap_targets_timeline(), blender::io::usd::USDNurbsReader::read_curve_sample(), blender::io::alembic::AbcNurbsReader::readObjectData(), recurs_sel_seq(), report_copy_exec(), report_delete_exec(), report_line_data(), report_replay_exec(), reports_select_all(), blender::ed::space_node::reroute_node_draw(), retime_speed_text_draw(), blender::ed::object::return_editcurve_indexar(), blender::ed::object::return_editlattice_indexar(), reveal_exec(), reveal_metaelems_exec(), rna_def_beztriple(), rna_def_bpoint(), rna_def_fkeyframe(), rna_def_latticepoint(), rna_def_maskSplinePoint(), rna_def_maskSplinePointUW(), rna_def_node(), rna_def_sequence(), rna_def_trackingPlaneTrack(), rna_def_trackingTrack(), rna_def_transform_orientation_slot(), screen_ctx_selected_editable_keyframes(), screen_ctx_selected_editable_sequences(), screen_ctx_selected_sequences(), select_active_side(), select_active_side_range(), select_adjacent_cp(), select_anim_channel_keys(), select_bezier_add(), select_bezier_invert(), blender::ed::object::select_editcurve_hook(), blender::ed::object::select_editlattice_hook(), select_exec(), select_exec(), select_grouped_data(), select_grouped_effect(), select_grouped_effect_link(), select_grouped_exec(), select_grouped_time_overlap(), select_grouped_type(), select_grouped_type_basic(), select_grouped_type_effect(), select_linked_internal(), select_linked_pick_invoke(), select_linked_time_seq(), select_marker_camera_switch(), select_more_less_seq__internal(), select_next_exec(), select_nth_bezt(), select_nth_bp(), select_previous_exec(), select_random_metaelems_exec(), select_report_pick_exec(), select_row_exec(), select_sliding_point(), select_surrounding_handles(), select_timeline_marker_frame(), selectend_nurb(), separate_exec(), seq_box_select_seq_from_preview(), seq_draw_image_origin_and_outline(), SEQ_edit_strip_split(), seq_effect_find_selected(), seq_get_strip_pivot_median(), seq_load_apply_generic_options(), seq_load_apply_generic_options_only_test_overlap(), seq_proxy_build_job(), SEQ_query_selected_strips(), SEQ_query_unselected_strips(), SEQ_select_active_get_pair(), seq_select_seq_from_preview(), SEQ_sequence_alloc(), SEQ_sequence_base_dupli_recursive(), SEQ_time_find_next_prev_edit(), SEQ_transform_seqbase_isolated_sel_check(), SEQ_transform_seqbase_shuffle_time(), SeqToTransData(), SeqToTransData_build(), SeqTransInfo(), sequencer_box_select_exec(), sequencer_de_select_all_exec(), sequencer_draw_get_transform_preview(), sequencer_enable_proxies_exec(), sequencer_lock_exec(), sequencer_meta_make_exec(), sequencer_meta_separate_exec(), sequencer_meta_toggle_exec(), sequencer_mute_exec(), sequencer_offset_clear_exec(), sequencer_rebuild_proxy_exec(), sequencer_reload_exec(), sequencer_retiming_data_hide_selection(), sequencer_retiming_data_show_selection(), sequencer_select_handles_exec(), sequencer_select_inverse_exec(), sequencer_select_linked_handle(), sequencer_select_linked_pick_invoke(), sequencer_select_side_exec(), sequencer_select_side_of_frame(), sequencer_select_side_of_frame_exec(), sequencer_select_strip_impl(), sequencer_separate_images_exec(), sequencer_set_range_to_strips_exec(), sequencer_snap_exec(), sequencer_split_exec(), sequencer_strip_color_tag_set_exec(), sequencer_strip_transform_clear_exec(), sequencer_strip_transform_fit_exec(), sequencer_unlock_exec(), sequencer_unmute_exec(), set_bezier_align(), set_bezier_auto(), set_bezier_auto_clamped(), set_bezier_free(), set_bezier_vector(), set_bezt_back(), set_bezt_bezier(), set_bezt_bounce(), set_bezt_circle(), set_bezt_constant(), set_bezt_cubic(), set_bezt_elastic(), set_bezt_expo(), set_bezt_linear(), set_bezt_quad(), set_bezt_quart(), set_bezt_quint(), set_bezt_sine(), set_easingtype_easeauto(), set_easingtype_easein(), set_easingtype_easeinout(), set_easingtype_easeout(), set_goal_weight_exec(), set_handle_type_exec(), set_keytype_breakdown(), set_keytype_extreme(), set_keytype_generated(), set_keytype_jitter(), set_keytype_keyframe(), set_keytype_moving_hold(), set_radius_exec(), skip_fcurve_selected_data(), slide_spline_curvature_customdata(), slip_add_sequences(), slip_count_sequences(), smooth_exec(), snap_action_keys(), snap_bezier_cframe(), snap_bezier_horizontal(), snap_bezier_nearest(), snap_bezier_nearestsec(), snap_bezier_nearmarker(), snap_bezier_time(), snap_bezier_value(), snapCurve(), blender::ed::space_node::snode_autoconnect(), special_aftertrans_update__actedit(), spline_under_mouse_get(), stabilize_2d_rotation_select_exec(), stabilize_2d_select_exec(), stats_object_edit(), strip_data_handle_flags_set(), strip_data_highlight_flags_set(), strip_data_outline_params_set(), strip_modifier_copy_exec(), subdividenurb(), swap_selection_beztriple(), swap_selection_bpoint(), blender::bke::tests::TEST(), blender::bke::tests::TEST(), blender::bke::tests::TEST(), TimeToTransData(), toggle_select_bp(), trackToTransData(), blender::ed::curves::transverts_from_curves_positions_create(), blender::ed::outliner::tree_element_sequence_activate(), blender::ed::outliner::tree_element_sequence_dup_state_get(), blender::ed::outliner::tree_element_sequence_state_get(), v3d_editvertex_buts(), blender::ed::object::vertex_parent_set_exec(), blender::ed::object::vgroup_assign_verts(), blender::ed::object::vgroup_mirror(), blender::ed::object::vgroup_parray_alloc(), blender::ed::object::vgroup_select_verts(), view3d_userdata_boxselect_init(), view3d_userdata_circleselect_init(), and view3d_userdata_lassoselect_init().

Function Documentation

◆ BKE_curve_decimate_bezt_array()

uint BKE_curve_decimate_bezt_array ( BezTriple * bezt_array,
const uint bezt_array_len,
const uint resolu,
const bool is_cyclic,
const char flag_test,
const char flag_set,
const float error_sq_max,
const uint error_target_len )

◆ BKE_curve_decimate_nurb()

void BKE_curve_decimate_nurb ( Nurb * nu,
const uint resolu,
const float error_sq_max,
const uint error_target_len )

◆ curve_decimate()

static void curve_decimate ( const float(*) points[3],
const uint points_len,
Knot * knots,
const uint knots_len,
float error_sq_max,
const uint error_target_len )
static

◆ knot_remove_error_recalculate()

static void knot_remove_error_recalculate ( Heap * heap,
const float(*) points[3],
const uint points_len,
Knot * k,
const float error_sq_max )
static

◆ knot_remove_error_value()

static float knot_remove_error_value ( const float tan_l[3],
const float tan_r[3],
const float(*) points[3],
const uint points_len,
float r_handle_factors[2] )
static

Definition at line 47 of file curve_decimate.cc.

References dot_v3v3(), FLT_MAX, and sub_v3_v3().

Referenced by knot_remove_error_recalculate().