135 node_mask,
GrainSize(1), memory, [&](
const int i) {
138 verts.begin(),
verts.end(), [&](
const int i) { return hide_vert[i]; });
144 attributes.
remove(
".hide_vert");
153 SubdivCCG &subdiv_ccg = *
object.sculpt->subdiv_ccg;
159 node_mask,
GrainSize(1), memory, [&](
const int i) {
160 const Span<int> grids = nodes[i].grids();
161 return std::any_of(grids.
begin(), grids.
end(), [&](
const int i) {
162 return bits::any_bit_set(grid_hidden[i]);
204 hide_face[i] = std::any_of(
205 face_verts.
begin(), face_verts.
end(), [&](
const int v) { return hide_vert[v]; });
232 TLS &tls = all_tls.
local();
233 const Span<int> node_faces = nodes[i].faces();
235 tls.new_hide.resize(node_faces.
size());
238 calc_face_hide(node_faces,
faces, corner_verts, hide_vert, tls.new_hide.as_mutable_span());
245 node_changed[i] =
true;
294 bool any_changed =
false;
302 calc_hide(
verts, new_hide);
330 SubdivCCG &subdiv_ccg = *
object.sculpt->subdiv_ccg;
335 bool any_changed =
false;
337 const Span<int> grids = nodes[i].grids();
340 new_hide[i].copy_from(grid_hidden[grids[i]].as_span());
344 calc_hide(grids[i], new_hide[i]);
348 return bits::spans_equal(grid_hidden[grids[i]], new_hide[i]);
358 grid_hidden[grids[i]].copy_from(new_hide[i].as_span());
361 node_changed[i] =
true;
382 if (should_update(
v)) {
389 (*any_changed) =
true;
393 (*any_visible) =
true;
420 bool any_changed =
false;
421 bool any_visible =
false;
505 depsgraph, ob, node_mask, action, [](
const BMVert * ) {
return true; });
531 switch (pbvh.
type()) {
569 else if (!
mask.is_empty()) {
572 for (
const int i :
verts.index_range()) {
586 SubdivCCG &subdiv_ccg = *
object.sculpt->subdiv_ccg;
602 if (grid_masks[i] > 0.5f) {
617 const auto mask_test_fn = [&](
const BMVert *
v) {
648 switch (pbvh.
type()) {
674 {0,
nullptr, 0,
nullptr,
nullptr},
682 "Whether to hide or show vertices");
687 ot->
name =
"Hide/Show Masked";
688 ot->
idname =
"PAINT_OT_hide_show_masked";
689 ot->
description =
"Hide/show all masked vertices above a threshold";
702 ot->
name =
"Hide/Show All";
703 ot->
idname =
"PAINT_OT_hide_show_all";
730 for (
const int face : nodes[i].faces()) {
731 hide_poly.
span[face] = !hide_poly.
span[face];
747 SubdivCCG &subdiv_ccg = *
object.sculpt->subdiv_ccg;
753 for (
const int i : nodes[i].grids()) {
773 bool fully_hidden =
true;
797 switch (pbvh.
type()) {
819 ot->
name =
"Invert Visibility";
820 ot->
idname =
"PAINT_OT_visibility_invert";
840 for (
const int corner : face) {
841 int vert = corner_verts[corner];
842 if (read_buffer[vert] !=
value) {
847 const int prev_vert = corner_verts[prev];
848 write_buffer[prev_vert] =
value;
851 const int next_vert = corner_verts[
next];
852 write_buffer[next_vert] =
value;
875 const int iterations)
884 for (const int face_index : range) {
885 if (!hide_poly[face_index]) {
888 const IndexRange face = faces[face_index];
889 if (action == VisAction::Hide) {
890 affect_visibility_mesh<true>(face, corner_verts, read_buffer, write_buffer);
893 affect_visibility_mesh<false>(face, corner_verts, read_buffer, write_buffer);
912 for (
const int vert : nodes[i].verts()) {
913 if (old_hide_vert[vert] != new_hide_vert[vert]) {
914 undo::push_node(
depsgraph,
object, &nodes[i], undo::Type::HideVert);
931 bool any_changed =
false;
933 for (
const int face_index :
indices) {
934 if (orig_hide_poly[face_index] != new_hide_poly[face_index]) {
941 node_changed[i] =
true;
942 bke::pbvh::node_update_visibility_mesh(hide_vert, nodes[i]);
947 const IndexMask changed_nodes = IndexMask::from_bools(node_changed, memory);
950 pbvh.
draw_data->tag_visibility_changed(changed_nodes);
958 const int iterations)
962 if (!attributes.
contains(
".hide_vert")) {
968 ".hide_vert", bke::AttrDomain::Point);
970 ".hide_poly", bke::AttrDomain::Face,
false);
975 array_utils::copy(hide_vert.
span.as_span(),
buffers.back.as_mutable_span());
976 array_utils::copy(hide_vert.
span.as_span(),
buffers.front.as_mutable_span());
990 *bke::object::pbvh_get(
object), node_mask, orig_hide_poly, hide_poly, last_buffer);
991 array_utils::copy(last_buffer, hide_vert.
span);
1001 return count % 2 == 0 ? back : front;
1006 return count % 2 == 0 ? front : back;
1014 const int iterations)
1038 for (
const int grid : nodes[i].grids()) {
1042 if (read_buffer[grid][grid_elem_idx] != desired_state) {
1056 key.grid_size, neighbor.x, neighbor.y);
1058 write_buffer[neighbor.grid_index][neighbor_grid_elem_idx].set(desired_state);
1064 node_changed[i] =
true;
1069 const IndexMask changed_nodes = IndexMask::from_bools(node_changed, memory);
1071 undo::push_nodes(
depsgraph,
object, changed_nodes, undo::Type::HideVert);
1074 grid_hidden = std::move(last_buffer);
1089 for (
const int i :
result.index_range()) {
1099 const int iterations)
1127 const IndexMask node_mask = bke::pbvh::all_leaf_nodes(pbvh, memory);
1139 undo::push_begin(
scene,
object, op);
1140 switch (pbvh.
type()) {
1141 case bke::pbvh::Type::Mesh:
1144 case bke::pbvh::Type::Grids:
1147 case bke::pbvh::Type::BMesh:
1151 undo::push_end(
object);
1153 islands::invalidate(*
object.sculpt);
1162 {int(VisAction::Show),
1166 "Grow the visibility by one face based on mesh topology"},
1167 {int(VisAction::Hide),
1170 "Shrink Visibility",
1171 "Shrink the visibility by one face based on mesh topology"},
1172 {0,
nullptr, 0,
nullptr,
nullptr},
1175 ot->
name =
"Visibility Filter";
1176 ot->
idname =
"PAINT_OT_visibility_filter";
1177 ot->
description =
"Edit the visibility of the current mesh";
1192 "Number of times that the filter is going to be applied",
1197 "auto_iteration_count",
1199 "Auto Iteration Count",
1200 "Use an automatic number of iterations based on the number of vertices of the sculpt");
1226 if (action == VisAction::Show && !attributes.
contains(
".hide_vert")) {
1236 for (
const int i :
verts.index_range()) {
1237 if (gesture::is_affected(gesture_data, positions[
verts[i]],
normals[
verts[i]])) {
1252 SubdivCCG &subdiv_ccg = *
object->sculpt->subdiv_ccg;
1261 for (
const int i : grid_positions.
index_range()) {
1262 if (gesture::is_affected(gesture_data, grid_positions[i], grid_normals[i])) {
1271 const auto selection_test_fn = [&](
const BMVert *
v) {
1272 return gesture::is_affected(gesture_data,
v->
co,
v->
no);
1290 undo::push_begin(
scene, *ob, &op);
1291 bke::object::pbvh_ensure(*
depsgraph, *ob);
1298 switch (bke::object::pbvh_get(*gesture_data.
vc.
obact)->type()) {
1299 case bke::pbvh::Type::Mesh:
1302 case bke::pbvh::Type::Grids:
1305 case bke::pbvh::Type::BMesh:
1314 undo::push_end(*gesture_data.
vc.
obact);
1336 std::unique_ptr<gesture::GestureData> gesture_data = gesture::init_from_box(C, op);
1337 if (!gesture_data) {
1341 gesture::apply(*C, *gesture_data, *op);
1347 std::unique_ptr<gesture::GestureData> gesture_data = gesture::init_from_lasso(C, op);
1348 if (!gesture_data) {
1352 gesture::apply(*C, *gesture_data, *op);
1358 std::unique_ptr<gesture::GestureData> gesture_data = gesture::init_from_line(C, op);
1359 if (!gesture_data) {
1363 gesture::apply(*C, *gesture_data, *op);
1369 std::unique_ptr<gesture::GestureData> gesture_data = gesture::init_from_polyline(C, op);
1370 if (!gesture_data) {
1374 gesture::apply(*C, *gesture_data, *op);
1381 {int(gesture::SelectionType::Outside),
1385 "Hide or show vertices outside the selection"},
1386 {int(gesture::SelectionType::Inside),
1390 "Hide or show vertices inside the selection"},
1391 {0,
nullptr, 0,
nullptr,
nullptr},
1397 int(gesture::SelectionType::Inside),
1399 "Which vertices to hide or show");
1419 gesture::operator_properties(
ot, gesture::ShapeType::Box);
1424 ot->
name =
"Hide/Show Lasso";
1425 ot->
idname =
"PAINT_OT_hide_show_lasso_gesture";
1439 gesture::operator_properties(
ot, gesture::ShapeType::Lasso);
1444 ot->
name =
"Hide/Show Line";
1445 ot->
idname =
"PAINT_OT_hide_show_line_gesture";
1459 gesture::operator_properties(
ot, gesture::ShapeType::Line);
1464 ot->
name =
"Hide/Show Polyline";
1465 ot->
idname =
"PAINT_OT_hide_show_polyline_gesture";
1479 gesture::operator_properties(
ot, gesture::ShapeType::Lasso);
int CCG_grid_xy_to_index(const int grid_size, const int x, const int y)
Depsgraph * CTX_data_ensure_evaluated_depsgraph(const bContext *C)
Depsgraph * CTX_data_depsgraph_pointer(const bContext *C)
Object * CTX_data_active_object(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
RegionView3D * CTX_wm_region_view3d(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
int CustomData_get_offset_named(const CustomData *data, eCustomDataType type, blender::StringRef name)
void multires_mark_as_modified(Depsgraph *depsgraph, Object *object, MultiresModifiedFlags flags)
void BKE_sculpt_sync_face_visibility_to_grids(const Mesh &mesh, SubdivCCG &subdiv_ccg)
bool BKE_sculptsession_use_pbvh_draw(const Object *ob, const RegionView3D *rv3d)
bool paint_is_bmesh_face_hidden(const BMFace *f)
A BVH for high poly meshes.
void BKE_pbvh_node_fully_hidden_set(blender::bke::pbvh::Node &node, int fully_hidden)
const blender::Set< BMFace *, 0 > & BKE_pbvh_bmesh_node_faces(blender::bke::pbvh::BMeshNode *node)
const blender::Set< BMVert *, 0 > & BKE_pbvh_bmesh_node_unique_verts(blender::bke::pbvh::BMeshNode *node)
const blender::Set< BMVert *, 0 > & BKE_pbvh_bmesh_node_other_verts(blender::bke::pbvh::BMeshNode *node)
void BKE_pbvh_sync_visibility_from_verts(Object &object)
CCGKey BKE_subdiv_ccg_key_top_level(const SubdivCCG &subdiv_ccg)
blender::BitGroupVector & BKE_subdiv_ccg_grid_hidden_ensure(SubdivCCG &subdiv_ccg)
void BKE_subdiv_ccg_neighbor_coords_get(const SubdivCCG &subdiv_ccg, const SubdivCCGCoord &coord, bool include_duplicates, SubdivCCGNeighbors &r_neighbors)
void BKE_subdiv_ccg_grid_hidden_free(SubdivCCG &subdiv_ccg)
@ MULTIRES_HIDDEN_MODIFIED
void DEG_id_tag_update(ID *id, unsigned int flags)
Object is a sort of wrapper for general info.
void ED_region_tag_redraw(ARegion *region)
Read Guarded memory(de)allocation.
@ OPTYPE_DEPENDS_ON_CURSOR
#define BM_ELEM_CD_GET_FLOAT(ele, offset)
#define BM_elem_index_get(ele)
#define BM_elem_flag_disable(ele, hflag)
#define BM_elem_flag_toggle(ele, hflag)
#define BM_elem_flag_test(ele, hflag)
#define BM_elem_flag_test_bool(ele, hflag)
#define BM_elem_flag_enable(ele, hflag)
#define BM_ITER_MESH(ele, iter, bm, itype)
BLI_INLINE BMVert * BM_vert_at_index(BMesh *bm, const int index)
ATTR_WARN_UNUSED_RESULT const BMLoop * l
ATTR_WARN_UNUSED_RESULT const BMVert * v
Span< T > as_span() const
MutableSpan< T > as_mutable_span()
void reinitialize(const int64_t new_size)
constexpr Iterator end() const
constexpr Iterator begin() const
constexpr int64_t size() const
constexpr void fill(const T &value) const
constexpr Span slice(int64_t start, int64_t size) const
constexpr int64_t size() const
constexpr const T * end() const
constexpr IndexRange index_range() const
constexpr const T * begin() const
constexpr bool is_empty() const
void resize(const int64_t new_size)
MutableSpan< T > as_mutable_span()
Span< T > as_span() const
int64_t group_size() const
void fill(const bool value)
bool contains(StringRef attribute_id) const
GAttributeReader lookup(const StringRef attribute_id) const
GAttributeReader lookup_or_default(StringRef attribute_id, AttrDomain domain, eCustomDataType data_type, const void *default_value=nullptr) const
GSpanAttributeWriter lookup_or_add_for_write_span(StringRef attribute_id, AttrDomain domain, eCustomDataType data_type, const AttributeInit &initializer=AttributeInitDefaultValue())
bool remove(const StringRef attribute_id)
GSpanAttributeWriter lookup_or_add_for_write_only_span(StringRef attribute_id, AttrDomain domain, eCustomDataType data_type)
Span< NodeT > nodes() const
std::unique_ptr< DrawCache > draw_data
void tag_visibility_changed(const IndexMask &node_mask)
void update_visibility(const Object &object)
static IndexMask from_predicate(const IndexMask &universe, GrainSize grain_size, IndexMaskMemory &memory, Fn &&predicate)
int64_t min_array_size() const
static IndexMask from_bools(Span< bool > bools, IndexMaskMemory &memory)
void foreach_index(Fn &&fn) const
const Depsgraph * depsgraph
static float normals[][3]
void * MEM_callocN(size_t len, const char *str)
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
bool indexed_data_equal(const Span< T > all_values, const Span< int > indices, const Span< T > values)
void invert(BitSpanT &&data)
IndexRange grid_range(const int grid_area, const int grid)
int face_corner_prev(const IndexRange face, const int corner)
int face_corner_next(const IndexRange face, const int corner)
pbvh::Tree & pbvh_ensure(Depsgraph &depsgraph, Object &object)
pbvh::Tree * pbvh_get(Object &object)
IndexMask all_leaf_nodes(const Tree &pbvh, IndexMaskMemory &memory)
void node_update_visibility_grids(const BitGroupVector<> &grid_hidden, GridsNode &node)
void node_update_visibility_mesh(Span< bool > hide_vert, MeshNode &node)
void mesh_face_hide_from_vert(OffsetIndices< int > faces, Span< int > corner_verts, Span< bool > hide_vert, MutableSpan< bool > hide_poly)
void mesh_hide_vert_flush(Mesh &mesh)
void mesh_hide_face_flush(Mesh &mesh)
void mesh_edge_hide_from_vert(Span< int2 > edges, Span< bool > hide_vert, MutableSpan< bool > hide_edge)
static void invert_visibility_bmesh(const Depsgraph &depsgraph, Object &object, const IndexMask &node_mask)
static constexpr float VERTEX_ITERATION_THRESHOLD
static Array< bool > duplicate_visibility_bmesh(const Object &object)
static void flush_face_changes(Mesh &mesh, const Span< bool > hide_vert)
void PAINT_OT_hide_show_polyline_gesture(wmOperatorType *ot)
static void grow_shrink_visibility_bmesh(const Depsgraph &depsgraph, Object &object, const IndexMask &node_mask, const VisAction action, const int iterations)
static void partialvis_all_update_grids(Depsgraph &depsgraph, Object &object, const VisAction action, const IndexMask &node_mask)
static void partialvis_all_update_bmesh(const Depsgraph &depsgraph, Object &ob, const VisAction action, const IndexMask &node_mask)
void PAINT_OT_hide_show_masked(wmOperatorType *ot)
static void invert_visibility_mesh(const Depsgraph &depsgraph, Object &object, const IndexMask &node_mask)
void PAINT_OT_hide_show_line_gesture(wmOperatorType *ot)
static void grid_hide_update(Depsgraph &depsgraph, Object &object, const IndexMask &node_mask, const FunctionRef< void(const int, MutableBoundedBitSpan)> calc_hide)
void tag_update_visibility(const bContext &C)
static wmOperatorStatus hide_show_gesture_line_exec(bContext *C, wmOperator *op)
static void hide_show_end(bContext &C, gesture::GestureData &gesture_data)
static void affect_visibility_mesh(const IndexRange face, const Span< int > corner_verts, const Span< bool > read_buffer, MutableSpan< bool > write_buffer)
static void propagate_vertex_visibility(Mesh &mesh, DualBuffer &buffers, const VArraySpan< bool > &hide_poly, const VisAction action, const int iterations)
static void partialvis_gesture_update_bmesh(gesture::GestureData &gesture_data)
static void partialvis_gesture_update_grids(Depsgraph &depsgraph, gesture::GestureData &gesture_data)
static wmOperatorStatus hide_show_all_exec(bContext *C, wmOperator *op)
static void vert_hide_update(const Depsgraph &depsgraph, Object &object, const IndexMask &node_mask, const FunctionRef< void(Span< int >, MutableSpan< bool >)> calc_hide)
void PAINT_OT_visibility_invert(wmOperatorType *ot)
static wmOperatorStatus visibility_invert_exec(bContext *C, wmOperator *op)
static void calc_face_hide(const Span< int > node_faces, const OffsetIndices< int > faces, const Span< int > corner_verts, const Span< bool > hide_vert, MutableSpan< bool > hide_face)
static void hide_show_apply_for_symmetry_pass(bContext &C, gesture::GestureData &gesture_data)
void PAINT_OT_hide_show_lasso_gesture(wmOperatorType *ot)
void PAINT_OT_visibility_filter(wmOperatorType *ot)
static wmOperatorStatus hide_show_gesture_lasso_exec(bContext *C, wmOperator *op)
void grids_show_all(Depsgraph &depsgraph, Object &object, const IndexMask &node_mask)
static void partialvis_masked_update_grids(Depsgraph &depsgraph, Object &object, const VisAction action, const IndexMask &node_mask)
static void partialvis_masked_update_bmesh(const Depsgraph &depsgraph, Object &ob, const VisAction action, const IndexMask &node_mask)
static void grow_shrink_visibility_grid(Depsgraph &depsgraph, Object &object, const IndexMask &node_mask, const VisAction action, const int iterations)
static void partialvis_update_bmesh_nodes(const Depsgraph &depsgraph, Object &ob, const IndexMask &node_mask, const VisAction action, const FunctionRef< bool(BMVert *v)> vert_test_fn)
static wmOperatorStatus hide_show_masked_exec(bContext *C, wmOperator *op)
static void hide_show_init_properties(bContext &, gesture::GestureData &gesture_data, wmOperator &op)
static void partialvis_update_bmesh_faces(const Set< BMFace *, 0 > &faces)
static void update_node_visibility_from_face_changes(bke::pbvh::Tree &pbvh, const IndexMask &node_mask, const Span< bool > orig_hide_poly, const Span< bool > new_hide_poly, const Span< bool > hide_vert)
void mesh_show_all(const Depsgraph &depsgraph, Object &object, const IndexMask &node_mask)
void PAINT_OT_hide_show_all(wmOperatorType *ot)
static void invert_visibility_grids(Depsgraph &depsgraph, Object &object, const IndexMask &node_mask)
static void partialvis_all_update_mesh(const Depsgraph &depsgraph, Object &object, const VisAction action, const IndexMask &node_mask)
void sync_all_from_faces(Object &object)
static void flush_edge_changes(Mesh &mesh, const Span< bool > hide_vert)
static void grow_shrink_visibility_mesh(const Depsgraph &depsgraph, Object &object, const IndexMask &node_mask, const VisAction action, const int iterations)
static void hide_show_operator_gesture_properties(wmOperatorType *ot)
static wmOperatorStatus visibility_filter_exec(bContext *C, wmOperator *op)
static wmOperatorStatus hide_show_gesture_polyline_exec(bContext *C, wmOperator *op)
static void update_undo_state(const Depsgraph &depsgraph, Object &object, const IndexMask &node_mask, const Span< bool > old_hide_vert, const Span< bool > new_hide_vert)
void PAINT_OT_hide_show(wmOperatorType *ot)
static wmOperatorStatus hide_show_gesture_box_exec(bContext *C, wmOperator *op)
static void partialvis_gesture_update_mesh(gesture::GestureData &gesture_data)
static void flush_face_changes_node(Mesh &mesh, bke::pbvh::Tree &pbvh, const IndexMask &node_mask, const Span< bool > hide_vert)
static void partialvis_update_bmesh_verts(const Set< BMVert *, 0 > &verts, const VisAction action, const FunctionRef< bool(BMVert *v)> should_update, bool *any_changed, bool *any_visible)
static void partialvis_masked_update_mesh(const Depsgraph &depsgraph, Object &object, const VisAction action, const IndexMask &node_mask)
static void hide_show_begin(bContext &C, wmOperator &op, gesture::GestureData &)
static bool action_to_hide(const VisAction action)
static void hide_show_operator_properties(wmOperatorType *ot)
void invalidate(SculptSession &ss)
void push_end(Object &ob)
void push_nodes(const Depsgraph &depsgraph, Object &object, const IndexMask &node_mask, const Type type)
void push_begin_ex(const Scene &, Object &ob, const char *name)
void push_node(const Depsgraph &depsgraph, const Object &object, const bke::pbvh::Node *node, const Type type)
void push_begin(const Scene &scene, Object &ob, const wmOperator *op)
void vert_random_access_ensure(Object &object)
void scatter_data_mesh(Span< T > src, Span< int > indices, MutableSpan< T > dst)
Span< BMVert * > vert_neighbors_get_bmesh(BMVert &vert, BMeshNeighborVerts &r_neighbors)
void gather_data_mesh(Span< T > src, Span< int > indices, MutableSpan< T > dst)
void parallel_for(const IndexRange range, const int64_t grain_size, const Function &function, const TaskSizeHints &size_hints=detail::TaskSizeHints_Static(1))
int RNA_int_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_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)
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, const int default_value, const int hardmin, const int hardmax, const char *ui_name, const char *ui_description, const int softmin, const int softmax)
bool SCULPT_mode_poll_view3d(bContext *C)
int SCULPT_vertex_count_get(const Object &object)
struct SculptSession * sculpt
SubdivCCGNeighborCoords coords
blender::Array< blender::float3 > normals
blender::Array< float > masks
blender::Array< blender::float3 > positions
MutableVArraySpan< T > span
SelectionType selection_type
void(* end)(bContext &, GestureData &)
void(* begin)(bContext &, wmOperator &, GestureData &)
void(* apply_for_symmetry_pass)(bContext &, GestureData &)
BitGroupVector & read_buffer(int count)
BitGroupVector & write_buffer(int count)
Span< bool > read_buffer(int count)
MutableSpan< bool > write_buffer(int count)
wmOperatorStatus(* exec)(bContext *C, wmOperator *op) ATTR_WARN_UNUSED_RESULT
bool(* poll)(bContext *C) ATTR_WARN_UNUSED_RESULT
wmOperatorStatus(* invoke)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
wmOperatorStatus(* modal)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
wmOperatorStatus WM_gesture_polyline_modal(bContext *C, wmOperator *op, const wmEvent *event)
wmOperatorStatus WM_gesture_lasso_modal(bContext *C, wmOperator *op, const wmEvent *event)
wmOperatorStatus WM_gesture_box_modal(bContext *C, wmOperator *op, const wmEvent *event)
wmOperatorStatus WM_gesture_box_invoke(bContext *C, wmOperator *op, const wmEvent *event)
wmOperatorStatus WM_gesture_straightline_active_side_invoke(bContext *C, wmOperator *op, const wmEvent *event)
wmOperatorStatus WM_gesture_polyline_invoke(bContext *C, wmOperator *op, const wmEvent *event)
wmOperatorStatus WM_gesture_lasso_invoke(bContext *C, wmOperator *op, const wmEvent *event)
wmOperatorStatus WM_gesture_straightline_oneshot_modal(bContext *C, wmOperator *op, const wmEvent *event)
void WM_operator_properties_gesture_straightline(wmOperatorType *ot, int cursor)
void WM_operator_properties_border(wmOperatorType *ot)
void WM_operator_properties_gesture_lasso(wmOperatorType *ot)
void WM_operator_properties_gesture_polyline(wmOperatorType *ot)