72 if ((bp->
hide == 0) || (hidden == 1)) {
106 for (i = nu->
pntsu, bezt = nu->
bezt; i--; bezt++) {
116 for (i = nu->
pntsu * nu->
pntsv, bp = nu->
bp; i--; bp++) {
133 for (i = nu->
pntsu, bezt = nu->
bezt; i--; bezt++) {
143 for (i = nu->
pntsu * nu->
pntsv, bp = nu->
bp; i--; bp++) {
155 bool changed =
false;
159 for (i = nu->
pntsu, bezt = nu->
bezt; i--; bezt++) {
160 if (bezt->
hide == 0) {
170 for (i = nu->
pntsu * nu->
pntsv, bp = nu->
bp; i--; bp++) {
184 bool changed =
false;
193 bool changed =
false;
197 for (i = nu->
pntsu, bezt = nu->
bezt; i--; bezt++) {
206 for (i = nu->
pntsu * nu->
pntsv, bp = nu->
bp; i--; bp++) {
240 bool changed =
false;
249 bool changed_multi =
false;
250 for (
Base *base : bases) {
251 Object *obedit = base->object;
256 return changed_multi;
273 bool changed =
false;
277 bool swap_handles =
false;
289 if (bezt->
hide == 0) {
313 a = nu->pntsu * nu->pntsv;
334 const bool selstatus)
339 bool lastsel =
false;
351 bezt = &nu->bezt[a - 1];
357 if ((lastsel ==
false) && (bezt->
hide == 0) &&
358 ((bezt->
f2 &
SELECT) || (selstatus ==
false)))
361 if (!(bezt->
f2 &
SELECT) || (selstatus ==
false)) {
377 a = nu->pntsu * nu->pntsv;
386 if ((lastsel ==
false) && (bp->
hide == 0) && ((bp->
f1 &
SELECT) || (selstatus ==
false))) {
388 if (!(bp->
f1 &
SELECT) || (selstatus ==
false)) {
427 if (obedit ==
nullptr) {
439 if (selfirst ==
LAST) {
440 bezt = &nu->bezt[a - 1];
461 a = nu->pntsu * nu->pntsv;
464 if (selfirst ==
LAST) {
497 for (
Object *obedit : objects) {
509 ot->
name =
"(De)select First";
510 ot->
idname =
"CURVE_OT_de_select_first";
511 ot->
description =
"(De)select first of visible part of each NURBS";
528 for (
Object *obedit : objects) {
541 ot->
name =
"(De)select Last";
542 ot->
idname =
"CURVE_OT_de_select_last";
543 ot->
description =
"(De)select last of visible part of each NURBS";
570 for (
Object *obedit : objects) {
571 Curve *cu =
static_cast<Curve *
>(obedit->data);
580 for (
Object *obedit : objects) {
581 Curve *cu =
static_cast<Curve *
>(obedit->data);
582 bool changed =
false;
610 ot->
name =
"(De)select All";
639 for (
Object *obedit : objects) {
640 Curve *cu =
static_cast<Curve *
>(obedit->data);
643 bool changed =
false;
668 ot->
name =
"Select Linked All";
669 ot->
idname =
"CURVE_OT_select_linked";
670 ot->
description =
"Select all control points linked to the current selection";
697 Base *basact =
nullptr;
739 ot->
name =
"Select Linked";
740 ot->
idname =
"CURVE_OT_select_linked_pick";
741 ot->
description =
"Select all control points linked to already selected ones";
755 "Deselect linked control points rather than selecting them");
769 static BPoint *last =
nullptr;
770 static int direction = 0;
773 int u = 0,
v = 0, a,
b;
780 direction = 1 - direction;
788 for (a = 0; a < nu->
pntsv; a++) {
789 for (
b = 0;
b < nu->
pntsu;
b++, bp++) {
812 ot->
name =
"Select Control Point Row";
814 ot->
description =
"Select a row of control points including active one";
837 for (
Object *obedit : objects) {
852 ot->
idname =
"CURVE_OT_select_next";
853 ot->
description =
"Select control points following already selected ones along the curves";
876 for (
Object *obedit : objects) {
890 ot->
name =
"Select Previous";
891 ot->
idname =
"CURVE_OT_select_previous";
892 ot->
description =
"Select control points preceding already selected ones along the curves";
922 a = nu->pntsu * nu->pntsv;
928 if (a % nu->pntsu != 0) {
936 if (a - nu->pntsu > 0) {
938 tempbp = bp + nu->pntsu;
949 if (a + nu->pntsu < nu->pntsu * nu->pntsv) {
950 tempbp = bp - nu->pntsu;
957 if (a % nu->pntsu != 1) {
989 for (
Object *obedit : objects) {
1000 ot->
name =
"Select More";
1001 ot->
idname =
"CURVE_OT_select_more";
1002 ot->
description =
"Select control points at the boundary of each selection region";
1026 bool lastsel =
false;
1031 a = nu->pntsu * nu->pntsv;
1040 if ((a + 1) % nu->pntsu == 0) {
1051 if ((a + 1) % nu->pntsu == 1) {
1062 if (a + 1 > nu->pntsu * nu->pntsv - nu->pntsu) {
1075 if (a < nu->pntsu) {
1110 sel = (lastsel == 1);
1114 if (a == nu->pntsu - 1) {
1152 a = nu->pntsu * nu->pntsv;
1155 if ((lastsel ==
false) && (bp->
hide == 0) && (bp->
f1 &
SELECT)) {
1159 if (a == nu->pntsu * nu->pntsv - 1) {
1206 for (
Object *obedit : objects) {
1217 ot->
name =
"Select Less";
1218 ot->
idname =
"CURVE_OT_select_less";
1219 ot->
description =
"Deselect control points at the boundary of each selection region";
1246 for (
const int ob_index : objects.index_range()) {
1247 Object *obedit = objects[ob_index];
1249 int seed_iter =
seed;
1269 int a = nu->pntsu * nu->pntsv;
1281 const int count_select = totvert * randfac;
1282 for (
int i = 0; i < count_select; i++) {
1304 int a = nu->pntsu * nu->pntsv;
1331 ot->
name =
"Select Random";
1332 ot->
idname =
"CURVE_OT_select_random";
1356 start = bezt - nu->
bezt;
1358 bezt = &nu->
bezt[a - 1];
1361 const int depth =
abs(start - a);
1372 int a, startrow, startpnt;
1375 startrow = (bp - nu->
bp) / nu->
pntsu;
1376 startpnt = (bp - nu->
bp) % nu->
pntsu;
1379 bp = &nu->
bp[a - 1];
1380 row = nu->
pntsv - 1;
1381 pnt = nu->
pntsu - 1;
1384 const int depth =
abs(pnt - startpnt) +
abs(row - startrow);
1391 pnt = nu->
pntsu - 1;
1402 void *vert =
nullptr;
1424 bool changed =
false;
1431 for (
Object *obedit : objects) {
1432 Curve *cu =
static_cast<Curve *
>(obedit->data);
1461 ot->
name =
"Checker Deselect";
1462 ot->
description =
"Deselect every Nth point starting from the active one";
1463 ot->
idname =
"CURVE_OT_select_nth";
1486 {0,
nullptr, 0,
nullptr,
nullptr},
1501 {0,
nullptr, 0,
nullptr,
nullptr},
1511 copy_m3_m4(rsmat, ob->object_to_world().ptr());
1520 copy_m3_m4(rsmat, ob->object_to_world().ptr());
1526 Object *ob,
Nurb *nu,
const int type, KDTree_1d *tree_1d, KDTree_3d *tree_3d)
1528 float tree_entry[3] = {0.0f, 0.0f, 0.0f};
1535 for (i = nu->
pntsu, bezt = nu->
bezt; i--; bezt++) {
1540 float radius_ref = bezt->
radius;
1541 tree_entry[0] = radius_ref;
1545 float weight_ref = bezt->
weight;
1546 tree_entry[0] = weight_ref;
1555 BLI_kdtree_1d_insert(tree_1d, tree_index++, tree_entry);
1558 BLI_kdtree_3d_insert(tree_3d, tree_index++, tree_entry);
1568 for (i = nu->
pntsu * nu->
pntsv, bp = nu->
bp; i--; bp++) {
1572 float radius_ref = bp->
radius;
1573 tree_entry[0] = radius_ref;
1577 float weight_ref = bp->
weight;
1578 tree_entry[0] = weight_ref;
1587 BLI_kdtree_1d_insert(tree_1d, tree_index++, tree_entry);
1590 BLI_kdtree_3d_insert(tree_3d, tree_index++, tree_entry);
1600 const KDTree_1d *tree_1d,
1601 const KDTree_3d *tree_3d,
1605 const float thresh_cos =
cosf(thresh *
float(
M_PI_2));
1606 bool changed =
false;
1612 for (i = nu->
pntsu, bezt = nu->
bezt; i--; bezt++) {
1618 float radius_ref = bezt->
radius;
1620 tree_1d, radius_ref, thresh,
eSimilarCmp(compare)))
1627 float weight_ref = bezt->
weight;
1629 tree_1d, weight_ref, thresh,
eSimilarCmp(compare)))
1638 KDTreeNearest_3d nearest;
1639 if (BLI_kdtree_3d_find_nearest(tree_3d, dir, &nearest) != -1) {
1641 float delta = thresh_cos -
fabsf(
cosf(orient));
1661 for (i = nu->
pntsu * nu->
pntsv, bp = nu->
bp; i--; bp++) {
1667 float radius_ref = bp->
radius;
1669 tree_1d, radius_ref, thresh,
eSimilarCmp(compare)))
1676 float weight_ref = bp->
weight;
1678 tree_1d, weight_ref, thresh,
eSimilarCmp(compare)))
1687 KDTreeNearest_3d nearest;
1688 if (BLI_kdtree_3d_find_nearest(tree_3d, dir, &nearest) != -1) {
1690 float delta =
fabsf(
cosf(orient)) - thresh_cos;
1719 int tot_nurbs_selected_all = 0;
1723 for (
Object *obedit : objects) {
1724 Curve *cu =
static_cast<Curve *
>(obedit->data);
1728 if (tot_nurbs_selected_all == 0) {
1733 KDTree_1d *tree_1d =
nullptr;
1734 KDTree_3d *tree_3d =
nullptr;
1740 tree_1d = BLI_kdtree_1d_new(tot_nurbs_selected_all);
1743 tree_3d = BLI_kdtree_3d_new(tot_nurbs_selected_all);
1748 for (
Object *obedit : objects) {
1749 Curve *cu =
static_cast<Curve *
>(obedit->data);
1758 type_ref |= nu->type;
1770 if (tree_1d !=
nullptr) {
1771 BLI_kdtree_1d_deduplicate(tree_1d);
1772 BLI_kdtree_1d_balance(tree_1d);
1774 if (tree_3d !=
nullptr) {
1775 BLI_kdtree_3d_deduplicate(tree_3d);
1776 BLI_kdtree_3d_balance(tree_3d);
1780 for (
Object *obedit : objects) {
1781 Curve *cu =
static_cast<Curve *
>(obedit->data);
1783 bool changed =
false;
1788 if (nu->type & type_ref) {
1797 obedit, nu, optype, tree_1d, tree_3d, thresh, compare);
1808 if (tree_1d !=
nullptr) {
1809 BLI_kdtree_1d_free(tree_1d);
1811 if (tree_3d !=
nullptr) {
1812 BLI_kdtree_3d_free(tree_3d);
1820 ot->
name =
"Select Similar";
1821 ot->
idname =
"CURVE_OT_select_similar";
1822 ot->
description =
"Select similar curve points by property type";
1847 const float *a_fl, *b_fl;
1854 a_fl = nu->
bp[a].
vec;
1863 const int u = nu->
pntsu;
1870 i = (i_prev + 1) % u;
1875 if (i == vert_dst) {
1885 const int u = nu->
pntsu;
1888 if (vert_src > vert_dst) {
1889 std::swap(vert_src, vert_dst);
1896 std::swap(vert_src, vert_dst);
1909 if (i == vert_dst) {
1918 int totu = nu->
pntsu;
1919 int totv = nu->
pntsv;
1920 int vert_num = totu * totv;
1924 int vert, vert_prev;
1929 data =
static_cast<PointAdj *
>(
MEM_mallocN(
sizeof(*data) * vert_num, __func__));
1930 for (
int i = 0; i < vert_num; i++) {
1932 data[i].vert_prev = -1;
1939 int vert_curr = data[vert_src].vert;
1941 data[vert_src].cost = 0.0f;
1942 data[vert_src].vert_prev = vert_src;
1946 if (vert_curr == vert_dst) {
1954 for (
int sign = -1; sign != 3; sign += 2) {
1955 for (
int axis = 0; axis != 2; axis += 1) {
1956 int uv_other[2] = {u,
v};
1959 uv_other[axis] += sign;
1962 if (vert_other != -1) {
1963 const float dist = data[vert_curr].cost +
1966 if (data[vert_other].cost > dist) {
1967 data[vert_other].cost = dist;
1968 if (data[vert_other].vert_prev == -1) {
1971 data[vert_other].vert_prev = vert_curr;
1980 if (vert_curr == vert_dst) {
1982 while (vert_curr != vert_src && i++ < vert_num) {
1989 vert_curr = data[vert_curr].vert_prev;
2004 Base *basact =
nullptr;
2024 if (nu_src != nu_dst) {
2029 vert_dst_p = bezt_dst ? (
void *)bezt_dst : (
void *)bp_dst;
2031 if (vert_src == vert_dst) {
2057 ot->
name =
"Pick Shortest Path";
2058 ot->
idname =
"CURVE_OT_shortest_path_pick";
2059 ot->
description =
"Select shortest path between two selections";
Depsgraph * CTX_data_ensure_evaluated_depsgraph(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
Object * CTX_data_edit_object(const bContext *C)
View3D * CTX_wm_view3d(const bContext *C)
ViewLayer * CTX_data_view_layer(const bContext *C)
void BKE_nurb_index_to_uv(Nurb *nu, int index, int *r_u, int *r_v)
Nurb * BKE_curve_nurb_active_get(Curve *cu)
void BKE_curve_nurb_vert_active_set(Curve *cu, const Nurb *nu, const void *vert)
int BKE_nurb_index_from_uv(Nurb *nu, int u, int v)
void BKE_nurb_bezt_calc_normal(Nurb *nu, BezTriple *bezt, float r_normal[3])
void BKE_curve_nurb_vert_active_validate(Curve *cu)
bool BKE_curve_nurb_vert_active_get(Curve *cu, Nurb **r_nu, void **r_vert)
void BKE_nurbList_flag_set(ListBase *editnurb, uint8_t flag, bool set)
void BKE_nurb_bpoint_calc_normal(Nurb *nu, BPoint *bp, float r_normal[3])
int BKE_curve_nurb_vert_index_get(const Nurb *nu, const void *vert)
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
Base * BKE_view_layer_active_base_get(ViewLayer *view_layer)
blender::Vector< Base * > BKE_view_layer_array_from_bases_in_edit_mode_unique_data(const Scene *scene, ViewLayer *view_layer, const View3D *v3d)
blender::Vector< Object * > BKE_view_layer_array_from_objects_in_edit_mode_unique_data(const Scene *scene, ViewLayer *view_layer, const View3D *v3d)
void BKE_report(ReportList *reports, eReportType type, const char *message)
#define BLI_BITMAP_NEW(_num, _alloc_string)
#define BLI_BITMAP_TEST(_bitmap, _index)
#define BLI_BITMAP_ENABLE(_bitmap, _index)
#define BLI_BITMAP_SET(_bitmap, _index, _set)
unsigned int BLI_ghashutil_strhash_p(const void *ptr)
A min-heap / priority queue ADT.
HeapSimple * BLI_heapsimple_new(void) ATTR_WARN_UNUSED_RESULT
void BLI_heapsimple_free(HeapSimple *heap, HeapSimpleFreeFP ptrfreefp) ATTR_NONNULL(1)
void * BLI_heapsimple_pop_min(HeapSimple *heap) ATTR_NONNULL(1)
bool BLI_heapsimple_is_empty(const HeapSimple *heap) ATTR_NONNULL(1)
void BLI_heapsimple_insert(HeapSimple *heap, float value, void *ptr) ATTR_NONNULL(1)
A KD-tree for nearest neighbor search.
#define LISTBASE_FOREACH(type, var, list)
void mul_m3_v3(const float M[3][3], float r[3])
void copy_m3_m4(float m1[3][3], const float m2[4][4])
MINLINE float len_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v2_v2_int(int r[2], const int a[2])
float angle_normalized_v3v3(const float v1[3], const float v2[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float normalize_v3(float n[3])
void BLI_bitmap_randomize(unsigned int *bitmap, unsigned int bits_num, unsigned int seed) ATTR_NONNULL(1)
void DEG_id_tag_update(ID *id, unsigned int flags)
#define BEZT_ISSEL_ANY_HIDDENHANDLES(v3d, bezt)
#define BEZT_SEL_ALL(bezt)
#define BEZT_ISSEL_ANY(bezt)
#define BEZT_DESEL_ALL(bezt)
#define BEZT_ISSEL_ALL(bezt)
Object is a sort of wrapper for general info.
bool ED_operator_editsurfcurve_region_view3d(bContext *C)
bool ED_operator_editsurfcurve(bContext *C)
bool ED_operator_editcurve(bContext *C)
bool ED_operator_editsurf(bContext *C)
bool ED_select_similar_compare_float(float delta, float thresh, eSimilarCmp compare)
bool ED_select_similar_compare_float_tree(const KDTree_1d *tree, float length, float thresh, eSimilarCmp compare)
ViewContext ED_view3d_viewcontext_init(bContext *C, Depsgraph *depsgraph)
void view3d_operator_needs_opengl(const bContext *C)
void ED_view3d_viewcontext_init_object(ViewContext *vc, Object *obact)
Read Guarded memory(de)allocation.
ATTR_WARN_UNUSED_RESULT const BMVert * v
static unsigned long seed
local_group_size(16, 16) .push_constant(Type b
bool ED_curve_pick_vert(ViewContext *vc, short sel, Nurb **r_nurb, BezTriple **r_bezt, BPoint **r_bp, short *r_handle, Base **r_base)
const Depsgraph * depsgraph
ListBase * object_editcurve_get(Object *ob)
void CURVE_OT_select_random(wmOperatorType *ot)
bool select_bpoint(BPoint *bp, bool selstatus, uint8_t flag, bool hidden)
static void select_nth_bezt(Nurb *nu, BezTriple *bezt, const CheckerIntervalParams *params)
bool select_beztriple(BezTriple *bezt, bool selstatus, uint8_t flag, eVisible_Types hidden)
bool ED_curve_select_check(const View3D *v3d, const EditNurb *editnurb)
bool ED_curve_deselect_all_multi_ex(Span< Base * > bases)
bool ED_curve_nurb_select_check(const View3D *v3d, const Nurb *nu)
void CURVE_OT_select_less(wmOperatorType *ot)
static bool ed_curve_select_nth(Curve *cu, const CheckerIntervalParams *params)
void CURVE_OT_select_similar(wmOperatorType *ot)
static int curve_select_more_exec(bContext *C, wmOperator *)
static void curve_select_more(Object *obedit)
static void curve_nurb_selected_type_get(Object *ob, Nurb *nu, const int type, KDTree_1d *tree_1d, KDTree_3d *tree_3d)
bool ED_curve_select_all(EditNurb *editnurb)
void CURVE_OT_select_previous(wmOperatorType *ot)
static const EnumPropertyItem curve_prop_similar_types[]
static int de_select_first_exec(bContext *C, wmOperator *)
static void nurb_bezt_direction_worldspace_get(Object *ob, Nurb *nu, BezTriple *bezt, float r_dir[3])
static const EnumPropertyItem curve_prop_similar_compare_types[]
static int select_linked_pick_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void CURVE_OT_shortest_path_pick(wmOperatorType *ot)
bool ED_curve_deselect_all_multi(bContext *C)
void CURVE_OT_select_linked(wmOperatorType *ot)
bool ED_curve_nurb_deselect_all(const Nurb *nu)
static void selectend_nurb(Object *obedit, eEndPoint_Types selfirst, bool doswap, bool selstatus)
static void select_adjacent_cp(ListBase *editnurb, short next, const bool cont, const bool selstatus)
bool ED_curve_select_swap(EditNurb *editnurb, bool hide_handles)
static void curve_select_less(Object *obedit)
static int curve_select_random_exec(bContext *C, wmOperator *op)
static int select_row_exec(bContext *C, wmOperator *)
static void select_nth_bp(Nurb *nu, BPoint *bp, const CheckerIntervalParams *params)
void CURVE_OT_select_next(wmOperatorType *ot)
int ED_curve_select_count(const View3D *v3d, const EditNurb *editnurb)
static int select_next_exec(bContext *C, wmOperator *)
static int edcu_shortest_path_pick_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static int de_select_last_exec(bContext *C, wmOperator *)
static bool curve_nurb_select_similar_type(Object *ob, Nurb *nu, const int type, const KDTree_1d *tree_1d, const KDTree_3d *tree_3d, const float thresh, const int compare)
static bool swap_selection_bpoint(BPoint *bp)
bool ED_curve_nurb_select_all(const Nurb *nu)
static int select_nth_exec(bContext *C, wmOperator *op)
void CURVE_OT_select_all(wmOperatorType *ot)
bool ED_curve_deselect_all(EditNurb *editnurb)
static bool swap_selection_beztriple(BezTriple *bezt)
void CURVE_OT_select_nth(wmOperatorType *ot)
void CURVE_OT_de_select_first(wmOperatorType *ot)
static int curve_select_similar_exec(bContext *C, wmOperator *op)
void CURVE_OT_select_more(wmOperatorType *ot)
static void nurb_bpoint_direction_worldspace_get(Object *ob, Nurb *nu, BPoint *bp, float r_dir[3])
static int select_previous_exec(bContext *C, wmOperator *)
static int select_linked_invoke(bContext *C, wmOperator *op, const wmEvent *)
void CURVE_OT_select_row(wmOperatorType *ot)
int ED_curve_nurb_select_count(const View3D *v3d, const Nurb *nu)
void CURVE_OT_de_select_last(wmOperatorType *ot)
static float curve_calc_dist_span(Nurb *nu, int vert_src, int vert_dst)
static int select_linked_exec(bContext *C, wmOperator *)
void CURVE_OT_select_linked_pick(wmOperatorType *ot)
static void curve_select_shortest_path_curve(Nurb *nu, int vert_src, int vert_dst)
static void curve_select_shortest_path_surf(Nurb *nu, int vert_src, int vert_dst)
static int curve_select_less_exec(bContext *C, wmOperator *)
static float curve_calc_dist_pair(const Nurb *nu, int a, int b)
static int de_select_all_exec(bContext *C, wmOperator *op)
void *(* MEM_mallocN)(size_t len, const char *str)
void MEM_freeN(void *vmemh)
ccl_device_inline float4 select(const int4 mask, const float4 a, const float4 b)
void base_activate(bContext *C, Base *base)
float RNA_float_get(PointerRNA *ptr, const char *name)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
bool(* poll)(bContext *C) ATTR_WARN_UNUSED_RESULT
int(* invoke)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
int(* exec)(bContext *C, wmOperator *op) ATTR_WARN_UNUSED_RESULT
struct ReportList * reports
ccl_device_inline int abs(int x)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
void WM_operator_properties_checker_interval_from_op(wmOperator *op, CheckerIntervalParams *op_params)
int WM_operator_properties_select_random_seed_increment_get(wmOperator *op)
void WM_operator_properties_select_random(wmOperatorType *ot)
void WM_operator_properties_select_all(wmOperatorType *ot)
void WM_operator_properties_checker_interval(wmOperatorType *ot, bool nth_can_disable)
bool WM_operator_properties_checker_interval_test(const CheckerIntervalParams *op_params, int depth)
int WM_menu_invoke(bContext *C, wmOperator *op, const wmEvent *)