42 #include "RNA_prototypes.h"
69 for (ale = anim_data.
first; ale; ale = ale->
next) {
102 const bool use_upper_stack_evaluation =
RNA_boolean_get(op->
ptr,
"use_upper_stack_evaluation");
121 for (ale = anim_data.
first; ale; ale = ale->
next) {
124 if (use_upper_stack_evaluation) {
152 if (ac.
scene && ok) {
173 ot->
name =
"Enter Tweak Mode";
174 ot->
idname =
"NLA_OT_tweakmode_enter";
176 "Enter tweaking mode for the action referenced by the active strip to edit its keyframes";
190 "Enable 'solo' on the NLA Track containing the active strip, "
191 "to edit it without seeing the effects of the NLA stack");
195 "use_upper_stack_evaluation",
197 "Evaluate Upper Stack",
198 "In tweak mode, display the effects of the tracks above the tweak strip");
225 for (ale = anim_data.
first; ale; ale = ale->
next) {
284 ot->
name =
"Exit Tweak Mode";
285 ot->
idname =
"NLA_OT_tweakmode_exit";
286 ot->
description =
"Exit tweaking mode for the action referenced by the active strip";
300 "Disable 'solo' on any of the NLA Tracks after exiting tweak mode "
301 "to get things back to normal");
319 bool found_bounds =
false;
328 *
max = -999999999.0f;
331 if (anim_data.
first) {
333 for (ale = anim_data.
first; ale; ale = ale->
next) {
337 for (strip = nlt->
strips.
first; strip; strip = strip->next) {
354 if (found_bounds ==
false) {
405 ot->
name =
"Set Preview Range to Selected";
406 ot->
idname =
"NLA_OT_previewrange_set";
407 ot->
description =
"Set Preview Range based on extends of selected strips";
496 if (only_sel ==
false) {
509 float ymid = (ymax - ymin) / 2.0f + ymin;
545 ot->
description =
"Reset viewable area to show full strips range";
558 ot->
name =
"Frame Selected";
559 ot->
idname =
"NLA_OT_view_selected";
560 ot->
description =
"Reset viewable area to show selected strips range";
586 ot->
name =
"Go to Current Frame";
646 "Action '%s' does not specify what data-blocks it can be used on "
647 "(try setting the 'ID Root Type' setting from the data-blocks editor "
648 "for this action to avoid future problems)",
667 "No active track(s) to add strip to, select an existing track or add one before "
674 for (ale = anim_data.
first; ale; ale = ale->
next) {
688 "Could not add action '%s' as it cannot be used relative to ID-blocks of type '%s'",
697 strip->end += (cfra - strip->start);
733 ot->
name =
"Add Action Strip";
734 ot->
idname =
"NLA_OT_actionclip_add";
736 "Add an Action-Clip strip (i.e. an NLA Strip referencing an Action) to the active track";
783 for (ale = anim_data.
first; ale; ale = ale->
next) {
796 for (; s1 && s2; s1 = s2, s2 = s2->
next) {
835 strip->
end = s2->start;
866 "Needs at least a pair of adjacent selected strips with a gap between them");
873 ot->
name =
"Add Transition";
874 ot->
idname =
"NLA_OT_transition_add";
875 ot->
description =
"Add a transition strip between two adjacent selected strips";
919 for (ale = anim_data.
first; ale; ale = ale->
next) {
935 strip->
start += cfra;
967 ot->
name =
"Add Sound Clip";
968 ot->
idname =
"NLA_OT_soundclip_add";
969 ot->
description =
"Add a strip for controlling when speaker plays its sound clip";
1007 for (ale = anim_data.
first; ale; ale = ale->
next) {
1021 for (strip = nlt->
strips.
first; strip; strip = strip->next) {
1045 ot->
name =
"Add Meta-Strips";
1047 ot->
description =
"Add new meta-strips incorporating the selected strips";
1084 for (ale = anim_data.
first; ale; ale = ale->
next) {
1112 ot->
name =
"Remove Meta-Strips";
1114 ot->
description =
"Separate out the strips held by the selected meta-strips";
1157 for (ale = anim_data.
last; ale; ale = ale->
prev) {
1229 ot->
name =
"Duplicate Strips";
1232 "Duplicate selected NLA-Strips, adding the new strips in new tracks above the originals";
1247 "When duplicating strips, assign new copies of the actions they use");
1277 for (ale = anim_data.
first; ale; ale = ale->
next) {
1286 for (strip = nlt->
strips.
first; strip; strip = nstrip) {
1287 nstrip = strip->
next;
1302 nstrip = nstrip->next;
1330 ot->
name =
"Delete Strips";
1359 float splitframe, splitaframe;
1364 if ((cfra > strip->
start) && (cfra < strip->end)) {
1379 splitframe = strip->
start + (
len / 2.0f);
1384 splitaframe = strip->
actend;
1400 strip->
end = splitframe;
1401 nstrip->
start = splitframe;
1403 if ((splitaframe > strip->
actstart) && (splitaframe < strip->actend)) {
1405 strip->
actend = splitaframe;
1447 for (ale = anim_data.
first; ale; ale = ale->
next) {
1463 switch (strip->
type) {
1495 ot->
name =
"Split Strips";
1497 ot->
description =
"Split selected strips at their midpoints";
1536 for (ale = anim_data.
first; ale; ale = ale->
next) {
1541 for (strip = nlt->
strips.
first; strip; strip = strip->next) {
1567 ot->
name =
"Toggle Muting";
1606 for (ale = anim_data.
first; ale; ale = ale->
next) {
1638 for (strip = nlt->
strips.
first; strip; strip = stripN) {
1639 stripN = strip->
next;
1647 else if (sb ==
NULL) {
1663 "Too many clusters of strips selected in NLA Track (%s): needs exactly 2 to be selected",
1670 else if (sb ==
NULL) {
1675 "Too few clusters of strips selected in NLA Track (%s): needs exactly 2 to be selected",
1679 float nsa[2], nsb[2];
1689 nsa[1] = sb->start + (
area->end -
area->start);
1691 nsb[0] =
area->start;
1692 nsb[1] =
area->start + (sb->end - sb->start);
1698 area->start = nsa[0];
1712 "Cannot swap selected strips as they will not be able to fit in their new places");
1717 "Cannot swap '%s' and '%s' as one or both will not be able to fit in their "
1750 ot->
name =
"Swap Strips";
1752 ot->
description =
"Swap order of selected strips within tracks";
1791 for (ale = anim_data.
last; ale; ale = ale->
prev) {
1810 for (strip = nlt->
strips.
first; strip; strip = stripn) {
1811 stripn = strip->
next;
1842 ot->
name =
"Move Strips Up";
1844 ot->
description =
"Move selected strips up a track if there's room";
1883 for (ale = anim_data.
first; ale; ale = ale->
next) {
1902 for (strip = nlt->
strips.
first; strip; strip = stripn) {
1903 stripn = strip->
next;
1934 ot->
name =
"Move Strips Down";
1936 ot->
description =
"Move selected strips down a track if there's room";
1977 for (ale = anim_data.
first; ale; ale = ale->
next) {
1981 for (strip = nlt->
strips.
first; strip; strip = strip->next) {
1996 if (strip->act ==
NULL) {
2021 ot->
name =
"Sync Action Length";
2022 ot->
idname =
"NLA_OT_action_sync_length";
2024 "Synchronize the length of the referenced Action with the length used in the strip";
2037 "Active Strip Only",
2038 "Only sync the active length for the active strip");
2057 bool copied =
false;
2073 for (ale = anim_data.
last; ale; ale = ale->
prev) {
2077 for (strip = nlt->
strips.
last; strip; strip = strip->prev) {
2080 if (strip->act ==
NULL) {
2093 strip->act = new_action;
2120 ot->
name =
"Make Single User";
2121 ot->
idname =
"NLA_OT_make_single_user";
2122 ot->
description =
"Ensure that each action is only used once in the set of strips selected";
2164 bool copied =
false;
2179 for (ale = anim_data.
first; ale; ale = ale->
next) {
2183 for (strip = nlt->
strips.
first; strip; strip = strip->next) {
2192 if (strip->act->id.us > 1) {
2229 strip->scale = 1.0f;
2230 strip->actstart = start;
2231 strip->actend = end;
2256 ot->
name =
"Apply Scale";
2258 ot->
description =
"Apply scaling of selected strips to their referenced Actions";
2295 for (ale = anim_data.
first; ale; ale = ale->
next) {
2299 for (strip = nlt->
strips.
first; strip; strip = strip->next) {
2327 ot->
name =
"Clear Scale";
2384 bool any_added =
false;
2387 for (ale = anim_data.
last; ale; ale = ale->
prev) {
2402 for (strip = nlt->
strips.
first; strip; strip = stripn) {
2403 stripn = strip->
next;
2409 start = strip->
start;
2421 strip->
start =
floorf(start / secf + 0.5f) * secf;
2427 strip->
start = start;
2432 strip->
end = strip->
start + (end - start);
2444 for (strip = tmp_strips.
first; strip; strip = stripn) {
2445 stripn = strip->
next;
2491 ot->
name =
"Snap Strips";
2576 for (ale = anim_data.
first; ale; ale = ale->
next) {
2585 for (strip = nlt->
strips.
first; strip; strip = strip->next) {
2615 "Modifier could not be added to (%s : %s) (see console for details)",
2636 ot->
name =
"Add F-Modifier";
2637 ot->
idname =
"NLA_OT_fmodifier_add";
2638 ot->
description =
"Add F-Modifier to the active/selected NLA-Strips";
2657 "Only add a F-Modifier of the specified type to the active strip");
2688 for (ale = anim_data.
first; ale; ale = ale->
next) {
2692 for (strip = nlt->
strips.
first; strip; strip = strip->next) {
2719 ot->
name =
"Copy F-Modifiers";
2720 ot->
idname =
"NLA_OT_fmodifier_copy";
2721 ot->
description =
"Copy the F-Modifier(s) of the active NLA-Strip";
2736 "Copy all the F-Modifiers, instead of just the active one");
2767 for (ale = anim_data.
first; ale; ale = ale->
next) {
2776 for (strip = nlt->
strips.
first; strip; strip = strip->next) {
2814 ot->
name =
"Paste F-Modifiers";
2815 ot->
idname =
"NLA_OT_fmodifier_paste";
2816 ot->
description =
"Add copied F-Modifiers to the selected NLA-Strips";
2827 ot->
srna,
"only_active",
true,
"Only Active",
"Only paste F-Modifiers on active strip");
2833 "Replace existing F-Modifiers, instead of just appending to the end of the existing list");
typedef float(TangentPoint)[2]
Blender kernel action and pose functionality.
struct ScrArea * CTX_wm_area(const bContext *C)
struct bScreen * CTX_wm_screen(const bContext *C)
struct Main * CTX_data_main(const bContext *C)
const FModifierTypeInfo * get_fmodifier_typeinfo(int type)
void set_active_fmodifier(ListBase *modifiers, struct FModifier *fcm)
void BKE_fcurve_handles_recalc(struct FCurve *fcu)
struct FModifier * add_fmodifier(ListBase *modifiers, int type, struct FCurve *owner_fcu)
struct ID * BKE_id_copy(struct Main *bmain, const struct ID *id)
void id_us_min(struct ID *id)
bool BKE_nlatrack_is_nonlocal_in_liboverride(const struct ID *id, const struct NlaTrack *nlt)
void BKE_nlastrips_clear_metastrip(ListBase *strips, struct NlaStrip *strip)
bool BKE_nlatrack_has_space(struct NlaTrack *nlt, float start, float end)
void BKE_nlastrip_validate_name(struct AnimData *adt, struct NlaStrip *strip)
void BKE_nlastrips_clear_metas(ListBase *strips, bool only_sel, bool only_temp)
void BKE_nlameta_flush_transforms(struct NlaStrip *mstrip)
bool BKE_nlatrack_add_strip(struct NlaTrack *nlt, struct NlaStrip *strip, bool is_liboverride)
struct NlaStrip * BKE_nla_add_soundstrip(struct Main *bmain, struct Scene *scene, struct Speaker *speaker)
bool BKE_nlastrips_has_space(ListBase *strips, float start, float end)
void BKE_nla_validate_state(struct AnimData *adt)
struct NlaStrip * BKE_nlastrip_new(struct bAction *act)
struct NlaStrip * BKE_nlastrip_copy(struct Main *bmain, struct NlaStrip *strip, bool use_same_action, int flag)
void BKE_nlatrack_solo_toggle(struct AnimData *adt, struct NlaTrack *nlt)
bool BKE_nla_tweakmode_enter(struct AnimData *adt)
struct NlaTrack * BKE_nlatrack_add(struct AnimData *adt, struct NlaTrack *prev, bool is_liboverride)
void BKE_nlastrip_recalculate_bounds_sync_action(struct NlaStrip *strip)
void BKE_nla_tweakmode_exit(struct AnimData *adt)
void BKE_nlastrip_free(ListBase *strips, struct NlaStrip *strip, bool do_id_user)
void BKE_nlastrips_make_metas(ListBase *strips, bool is_temp)
struct NlaTrack * BKE_nlatrack_find_tweaked(struct AnimData *adt)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
void BKE_report(ReportList *reports, eReportType type, const char *message)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
void BLI_insertlinkafter(struct ListBase *listbase, void *vprevlink, void *vnewlink) ATTR_NONNULL(1)
int BLI_listbase_count_at_most(const struct ListBase *listbase, int count_max) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE int round_fl_to_int(float a)
MINLINE float max_ff(float a, float b)
MINLINE float min_ff(float a, float b)
BLI_INLINE int BLI_rcti_size_y(const struct rcti *rct)
BLI_INLINE float BLI_rctf_size_x(const struct rctf *rct)
#define BLT_I18NCONTEXT_ID_ACTION
void DEG_relations_tag_update(struct Main *bmain)
#define ID_IS_LINKED(_id)
#define ID_REAL_USERS(id)
#define ID_IS_OVERRIDE_LIBRARY(_id)
@ NLASTRIP_FLAG_TEMP_META
@ NLASTRIP_FLAG_AUTO_BLENDS
@ NLASTRIP_FLAG_SYNC_LENGTH
@ ADT_NLA_EVAL_UPPER_TRACKS
@ NLASTRIP_TYPE_TRANSITION
Object is a sort of wrapper for general info.
#define NLACHANNEL_STEP(snla)
#define NLACHANNEL_FIRST_TOP(ac)
@ ACHANNEL_SETTING_SELECT
#define NLACHANNEL_HEIGHT(snla)
@ ANIMFILTER_DATA_VISIBLE
@ ANIMFILTER_LIST_VISIBLE
@ ANIMFILTER_LIST_CHANNELS
void ED_area_tag_redraw(ScrArea *area)
bool ED_operator_nla_active(struct bContext *C)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
Read Guarded memory(de)allocation.
const EnumPropertyItem * RNA_action_itemf(struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA *prop, bool *r_free)
void UI_view2d_center_set(struct View2D *v2d, float x, float y)
void UI_view2d_sync(struct bScreen *screen, struct ScrArea *area, struct View2D *v2dcur, int flag)
void UI_view2d_center_get(const struct View2D *v2d, float *r_x, float *r_y)
short ANIM_channel_setting_get(bAnimContext *ac, bAnimListElem *ale, eAnimChannel_Settings setting)
const bAnimChannelType * ANIM_channel_get_typeinfo(bAnimListElem *ale)
void ANIM_animdata_freelist(ListBase *anim_data)
void ANIM_animdata_update(bAnimContext *ac, ListBase *anim_data)
void ANIM_center_frame(struct bContext *C, int smooth_viewtx)
bool ANIM_animdata_get_context(const bContext *C, bAnimContext *ac)
size_t ANIM_animdata_filter(bAnimContext *ac, ListBase *anim_data, eAnimFilter_Flags filter_mode, void *data, eAnimCont_Types datatype)
int ED_markers_find_nearest_marker_time(ListBase *markers, float x)
bool ANIM_fmodifiers_paste_from_buf(ListBase *modifiers, bool replace, FCurve *curve)
void ANIM_fmodifiers_copybuf_free(void)
bool ANIM_fmodifiers_copy_to_buf(ListBase *modifiers, bool active)
DO_INLINE void filter(lfVector *V, fmatrix3x3 *S)
short ANIM_animchanneldata_keyframes_loop(KeyframeEditData *ked, bDopeSheet *ads, void *data, int keytype, KeyframeEditFunc key_ok, KeyframeEditFunc key_cb, FcuEditFunc fcu_cb)
void *(* MEM_callocN)(size_t len, const char *str)
static void area(int d1, int d2, int e1, int e2, float weights[2])
float nlastrip_get_frame(NlaStrip *strip, float cframe, short mode)
bool nlaedit_add_tracks_empty(bAnimContext *ac)
void NLA_OT_view_frame(wmOperatorType *ot)
static int nlaedit_previewrange_exec(bContext *C, wmOperator *UNUSED(op))
static int nlaedit_snap_exec(bContext *C, wmOperator *op)
static int nlaedit_add_transition_exec(bContext *C, wmOperator *op)
void NLA_OT_view_all(wmOperatorType *ot)
void NLA_OT_fmodifier_add(wmOperatorType *ot)
static int nlaedit_sync_actlen_exec(bContext *C, wmOperator *op)
static int nlaedit_move_up_exec(bContext *C, wmOperator *UNUSED(op))
void NLA_OT_split(wmOperatorType *ot)
void NLA_OT_tweakmode_exit(wmOperatorType *ot)
static int nla_fmodifier_add_exec(bContext *C, wmOperator *op)
void ED_nla_postop_refresh(bAnimContext *ac)
static int nlaedit_viewall(bContext *C, const bool only_sel)
static int nlaedit_clear_scale_exec(bContext *C, wmOperator *UNUSED(op))
void NLA_OT_soundclip_add(wmOperatorType *ot)
void NLA_OT_tweakmode_enter(wmOperatorType *ot)
void NLA_OT_clear_scale(wmOperatorType *ot)
void NLA_OT_make_single_user(wmOperatorType *ot)
static int nlaedit_viewall_exec(bContext *C, wmOperator *UNUSED(op))
void NLA_OT_meta_add(wmOperatorType *ot)
static void get_nlastrip_extents(bAnimContext *ac, float *min, float *max, const bool only_sel)
static int nla_fmodifier_paste_exec(bContext *C, wmOperator *op)
void NLA_OT_meta_remove(wmOperatorType *ot)
void NLA_OT_snap(wmOperatorType *ot)
static const EnumPropertyItem * nla_fmodifier_itemf(bContext *C, PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), bool *r_free)
static int nlaedit_disable_tweakmode_exec(bContext *C, wmOperator *op)
static int nlaedit_split_exec(bContext *C, wmOperator *UNUSED(op))
void NLA_OT_swap(wmOperatorType *ot)
void NLA_OT_mute_toggle(wmOperatorType *ot)
void NLA_OT_move_up(wmOperatorType *ot)
static void nlaedit_split_strip_meta(NlaTrack *nlt, NlaStrip *strip)
void NLA_OT_delete(wmOperatorType *ot)
static int nlaedit_add_sound_exec(bContext *C, wmOperator *UNUSED(op))
static int nlaedit_make_single_user_exec(bContext *C, wmOperator *UNUSED(op))
void NLA_OT_previewrange_set(wmOperatorType *ot)
void NLA_OT_fmodifier_copy(wmOperatorType *ot)
void NLA_OT_move_down(wmOperatorType *ot)
void NLA_OT_transition_add(wmOperatorType *ot)
static int nlaedit_viewframe_exec(bContext *C, wmOperator *op)
static int nlaedit_add_meta_exec(bContext *C, wmOperator *UNUSED(op))
static int nlaedit_viewsel_exec(bContext *C, wmOperator *UNUSED(op))
static int nlaedit_duplicate_exec(bContext *C, wmOperator *op)
void NLA_OT_view_selected(wmOperatorType *ot)
static int nlaedit_enable_tweakmode_exec(bContext *C, wmOperator *op)
static int nlaedit_delete_exec(bContext *C, wmOperator *UNUSED(op))
void NLA_OT_duplicate(wmOperatorType *ot)
static void nlaedit_split_strip_actclip(Main *bmain, AnimData *adt, NlaTrack *nlt, NlaStrip *strip, float cfra)
bool nlaedit_disable_tweakmode(bAnimContext *ac, bool do_solo)
static int nlaedit_move_down_exec(bContext *C, wmOperator *UNUSED(op))
static int nlaedit_add_actionclip_exec(bContext *C, wmOperator *op)
void NLA_OT_actionclip_add(wmOperatorType *ot)
void NLA_OT_fmodifier_paste(wmOperatorType *ot)
static bool nla_channels_get_selected_extents(bAnimContext *ac, float *r_min, float *r_max)
void NLA_OT_action_sync_length(wmOperatorType *ot)
static int nla_fmodifier_copy_exec(bContext *C, wmOperator *op)
static int nlaedit_swap_exec(bContext *C, wmOperator *op)
static int nlaedit_remove_meta_exec(bContext *C, wmOperator *UNUSED(op))
void NLA_OT_apply_scale(wmOperatorType *ot)
static int nlaedit_toggle_mute_exec(bContext *C, wmOperator *UNUSED(op))
static const EnumPropertyItem prop_nlaedit_snap_types[]
static int nlaedit_apply_scale_exec(bContext *C, wmOperator *UNUSED(op))
static short bezt_apply_nlamapping(KeyframeEditData *ked, BezTriple *bezt)
static int nlaedit_duplicate_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
bool nlaop_poll_tweakmode_on(bContext *C)
bool nlaop_poll_tweakmode_off(bContext *C)
@ NLAEDIT_SNAP_NEAREST_MARKER
@ NLAEDIT_SNAP_NEAREST_SECOND
@ NLAEDIT_SNAP_NEAREST_FRAME
void RNA_pointer_create(ID *id, StructRNA *type, void *data, PointerRNA *r_ptr)
void RNA_float_set(PointerRNA *ptr, const char *name, float value)
int RNA_enum_from_value(const EnumPropertyItem *item, const int value)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, bool default_value, const char *ui_name, const char *ui_description)
void RNA_enum_item_end(EnumPropertyItem **items, int *totitem)
void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item)
void RNA_def_property_translation_context(PropertyRNA *prop, const char *context)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_enum_funcs(PropertyRNA *prop, EnumPropertyItemFunc itemfunc)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, int default_value, const char *ui_name, const char *ui_description)
const EnumPropertyItem rna_enum_fmodifier_type_items[]
const EnumPropertyItem DummyRNA_NULL_items[]
bool(* has_setting)(bAnimContext *ac, bAnimListElem *ale, eAnimChannel_Settings setting)
eAnimChannel_Role channel_role
struct ReportList * reports
struct bAnimListElem * next
struct bAnimListElem * prev
int(* invoke)(struct bContext *, struct wmOperator *, const struct wmEvent *) ATTR_WARN_UNUSED_RESULT
bool(* poll)(struct bContext *) ATTR_WARN_UNUSED_RESULT
int(* exec)(struct bContext *, struct wmOperator *) ATTR_WARN_UNUSED_RESULT
struct ReportList * reports
void WM_main_add_notifier(unsigned int type, void *reference)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
int WM_operator_confirm(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
int WM_operator_smooth_viewtx_get(const wmOperator *op)
int WM_menu_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
int WM_enum_search_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))