62 Mesh &mesh = *
static_cast<Mesh *
>(
object.data);
130 Mesh &mesh = *
static_cast<Mesh *
>(
object.data);
137 node_mask,
GrainSize(1), memory, [&](
const int i) {
140 verts.begin(),
verts.end(), [&](
const int i) { return hide_vert[i]; });
146 attributes.remove(
".hide_vert");
155 SubdivCCG &subdiv_ccg = *
object.sculpt->subdiv_ccg;
161 node_mask,
GrainSize(1), memory, [&](
const int i) {
162 const Span<int> grids = nodes[i].grids();
163 return std::any_of(grids.
begin(), grids.
end(), [&](
const int i) {
164 return bits::any_bit_set(grid_hidden[i]);
206 hide_face[i] = std::any_of(
207 face_verts.
begin(), face_verts.
end(), [&](
const int v) { return hide_vert[v]; });
220 const Span<int> corner_verts = mesh.corner_verts();
234 TLS &tls = all_tls.
local();
235 const Span<int> node_faces = nodes[i].faces();
237 tls.new_hide.resize(node_faces.
size());
240 calc_face_hide(node_faces, faces, corner_verts, hide_vert, tls.new_hide.as_mutable_span());
247 node_changed[i] =
true;
291 Mesh &mesh = *
static_cast<Mesh *
>(
object.data);
296 bool any_changed =
false;
304 calc_hide(
verts, new_hide);
332 SubdivCCG &subdiv_ccg = *
object.sculpt->subdiv_ccg;
337 bool any_changed =
false;
339 const Span<int> grids = nodes[i].grids();
342 new_hide[i].copy_from(grid_hidden[grids[i]].as_span());
346 calc_hide(grids[i], new_hide[i]);
350 return bits::spans_equal(grid_hidden[grids[i]], new_hide[i]);
360 grid_hidden[grids[i]].copy_from(new_hide[i].as_span());
363 node_changed[i] =
true;
384 if (should_update(
v)) {
391 (*any_changed) =
true;
395 (*any_visible) =
true;
422 bool any_changed =
false;
423 bool any_visible =
false;
463 Mesh &mesh = *
static_cast<Mesh *
>(
object.data);
507 depsgraph, ob, node_mask, action, [](
const BMVert * ) {
return true; });
533 switch (pbvh.
type()) {
559 Mesh &mesh = *
static_cast<Mesh *
>(
object.data);
571 else if (!mask.is_empty()) {
574 for (
const int i :
verts.index_range()) {
575 if (mask[
verts[i]] > 0.5f) {
588 SubdivCCG &subdiv_ccg = *
object.sculpt->subdiv_ccg;
593 if (masks.is_empty()) {
604 if (grid_masks[i] > 0.5f) {
619 const auto mask_test_fn = [&](
const BMVert *
v) {
650 switch (pbvh.
type()) {
676 {0,
nullptr, 0,
nullptr,
nullptr},
684 "Whether to hide or show vertices");
689 ot->
name =
"Hide/Show Masked";
690 ot->
idname =
"PAINT_OT_hide_show_masked";
691 ot->
description =
"Hide/show all masked vertices above a threshold";
704 ot->
name =
"Hide/Show All";
705 ot->
idname =
"PAINT_OT_hide_show_all";
724 Mesh &mesh = *
static_cast<Mesh *
>(
object.data);
732 for (
const int face : nodes[i].faces()) {
733 hide_poly.
span[face] = !hide_poly.
span[face];
749 SubdivCCG &subdiv_ccg = *
object.sculpt->subdiv_ccg;
755 for (
const int i : nodes[i].grids()) {
775 bool fully_hidden =
true;
799 switch (pbvh.
type()) {
821 ot->
name =
"Invert Visibility";
822 ot->
idname =
"PAINT_OT_visibility_invert";
842 for (
const int corner : face) {
843 int vert = corner_verts[corner];
844 if (read_buffer[vert] != value) {
849 const int prev_vert = corner_verts[prev];
850 write_buffer[prev_vert] = value;
853 const int next_vert = corner_verts[
next];
854 write_buffer[next_vert] = value;
877 const int iterations)
880 const Span<int> corner_verts = mesh.corner_verts();
886 for (const int face_index : range) {
887 if (!hide_poly[face_index]) {
890 const IndexRange face = faces[face_index];
891 if (action == VisAction::Hide) {
892 affect_visibility_mesh<true>(face, corner_verts, read_buffer, write_buffer);
895 affect_visibility_mesh<false>(face, corner_verts, read_buffer, write_buffer);
914 for (
const int vert : nodes[i].verts()) {
915 if (old_hide_vert[vert] != new_hide_vert[vert]) {
916 undo::push_node(
depsgraph,
object, &nodes[i], undo::Type::HideVert);
932 bool any_changed =
false;
933 const Span<int> indices = nodes[i].faces();
934 for (
const int face_index :
indices) {
935 if (orig_hide_poly[face_index] != new_hide_poly[face_index]) {
942 node_changed[i] =
true;
943 bke::pbvh::node_update_visibility_mesh(hide_vert, nodes[i]);
954 const int iterations)
956 Mesh &mesh = *
static_cast<Mesh *
>(
object.data);
958 if (!attributes.contains(
".hide_vert")) {
964 ".hide_vert", bke::AttrDomain::Point);
965 const VArraySpan hide_poly = *attributes.lookup_or_default<
bool>(
966 ".hide_poly", bke::AttrDomain::Face,
false);
971 array_utils::copy(hide_vert.
span.as_span(),
buffers.back.as_mutable_span());
972 array_utils::copy(hide_vert.
span.as_span(),
buffers.front.as_mutable_span());
986 bke::object::pbvh_get(
object)->nodes<bke::pbvh::MeshNode>(),
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) {
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);
1077 bke::pbvh::update_visibility(
object, pbvh);
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");
1224 Mesh *mesh =
static_cast<Mesh *
>(
object->data);
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;
1259 const Span<float3> grid_positions = positions.
slice(bke::ccg::grid_range(key, grid));
1260 const Span<float3> grid_normals = normals.
slice(bke::ccg::grid_range(key, grid));
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);
1322 MEM_cnew<HideShowOperation>(__func__));
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)
ATTR_WARN_UNUSED_RESULT BMesh * bm
void BM_mesh_elem_table_ensure(BMesh *bm, const char htype)
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 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)
Span< NodeT > nodes() const
void tag_visibility_changed(const IndexMask &node_mask)
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
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
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 update_visibility(const Object &object, Tree &pbvh)
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 void update_node_visibility_from_face_changes(MutableSpan< bke::pbvh::MeshNode > nodes, const IndexMask &node_mask, const Span< bool > orig_hide_poly, const Span< bool > new_hide_poly, const Span< bool > hide_vert)
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 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 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 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 int hide_show_gesture_line_exec(bContext *C, wmOperator *op)
static int visibility_filter_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 int visibility_invert_exec(bContext *C, wmOperator *op)
static void hide_show_init_properties(bContext &, gesture::GestureData &gesture_data, wmOperator &op)
static int hide_show_gesture_box_exec(bContext *C, wmOperator *op)
static void partialvis_update_bmesh_faces(const Set< BMFace *, 0 > &faces)
static int hide_show_gesture_lasso_exec(bContext *C, wmOperator *op)
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 int hide_show_all_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 void partialvis_gesture_update_mesh(gesture::GestureData &gesture_data)
static int hide_show_gesture_polyline_exec(bContext *C, wmOperator *op)
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 int hide_show_masked_exec(bContext *C, wmOperator *op)
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_node(const Depsgraph &depsgraph, const Object &object, const bke::pbvh::Node *node, Type type)
void push_begin_ex(const Scene &, Object &ob, const char *name)
void push_begin(const Scene &scene, Object &ob, const wmOperator *op)
void scatter_data_mesh(Span< T > src, Span< int > indices, MutableSpan< T > dst)
Span< BMVert * > vert_neighbors_get_bmesh(BMVert &vert, Vector< BMVert *, 64 > &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
blender::Vector< SubdivCCGCoord, 256 > 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)
bool(* poll)(bContext *C) ATTR_WARN_UNUSED_RESULT
int(* modal)(bContext *C, wmOperator *op, const wmEvent *event) 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
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
int WM_gesture_polyline_invoke(bContext *C, wmOperator *op, const wmEvent *event)
int WM_gesture_box_invoke(bContext *C, wmOperator *op, const wmEvent *event)
int WM_gesture_polyline_modal(bContext *C, wmOperator *op, const wmEvent *event)
int WM_gesture_box_modal(bContext *C, wmOperator *op, const wmEvent *event)
int WM_gesture_lasso_modal(bContext *C, wmOperator *op, const wmEvent *event)
int WM_gesture_lasso_invoke(bContext *C, wmOperator *op, const wmEvent *event)
int WM_gesture_straightline_oneshot_modal(bContext *C, wmOperator *op, const wmEvent *event)
int WM_gesture_straightline_active_side_invoke(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)