105 attributes.
remove(
".sculpt_persistent_co");
106 attributes.
remove(
".sculpt_persistent_no");
107 attributes.
remove(
".sculpt_persistent_disp");
112 ".sculpt_persistent_co",
118 attributes.
add<
float3>(
".sculpt_persistent_co",
124 attributes.
add<
float3>(
".sculpt_persistent_no",
148 ot->name =
"Set Persistent Base";
149 ot->idname =
"SCULPT_OT_set_persistent_base";
150 ot->description =
"Reset the copy of the mesh that is being sculpted on";
182 ot->name =
"Rebuild BVH";
183 ot->idname =
"SCULPT_OT_optimize";
184 ot->description =
"Recalculate the sculpt BVH to improve performance";
235 switch (pbvh->
type()) {
252 "symmetrize input=%avef direction=%i dist=%f use_shapekey=%b",
294 ot->name =
"Symmetrize";
295 ot->idname =
"SCULPT_OT_symmetrize";
296 ot->description =
"Symmetrize the topology modifications";
305 std::numeric_limits<float>::max(),
307 "Distance within which symmetrical vertices are merged",
326 if (ob.
sculpt !=
nullptr) {
329 ob.
sculpt = MEM_new<SculptSession>(__func__);
344 if (
mesh.attributes().contains(
".sculpt_face_set")) {
388 const bool force_dyntopo,
396 mesh->runtime->corner_tris_cache.freeze();
399 ob.
mode |= mode_flag;
405 reports,
RPT_WARNING,
"Object has non-uniform scale, sculpting may be unpredictable");
421 const char *message_unsupported =
nullptr;
422 if (
mesh->corners_num !=
mesh->faces_num * 3) {
423 message_unsupported =
RPT_(
"non-triangle face");
425 else if (mmd !=
nullptr) {
426 message_unsupported =
RPT_(
"multi-res modifier");
434 message_unsupported =
RPT_(
"vertex data");
437 message_unsupported =
RPT_(
"edge data");
440 message_unsupported =
RPT_(
"face data");
443 message_unsupported =
RPT_(
"constructive modifier");
450 if ((message_unsupported ==
nullptr) || force_dyntopo) {
453 const bool has_undo =
wm->runtime->undo_stack !=
nullptr;
466 reports,
RPT_WARNING,
"Dynamic Topology found: %s, disabled", message_unsupported);
492 mesh->runtime->corner_tris_cache.unfreeze();
499 const int flush_recalc = ed_object_sculptmode_flush_recalc_flag(scene, ob, mmd);
519 ob.
mode &= ~mode_flag;
553 const bool is_mode_set = (ob.
mode & mode_flag) != 0;
571 if (ob.
mode & mode_flag) {
578 if (
wm->op_undo_depth <= 1) {
597 ot->name =
"Sculpt Mode";
598 ot->idname =
"SCULPT_OT_sculptmode_toggle";
599 ot->description =
"Toggle sculpt mode in 3D view";
639 float4 active_vertex_color;
640 if (!color_attribute || std::holds_alternative<std::monostate>(ss.
active_vert())) {
641 active_vertex_color =
float4(1.0f);
662 ot->name =
"Sample Color";
663 ot->idname =
"SCULPT_OT_sample_color";
664 ot->description =
"Sample the vertex color of the active vertex";
689#define MASK_BY_COLOR_SLOPE 0.25f
693 const float threshold,
703 else if (
len >= threshold) {
717 const float new_mask,
719 const bool preserve_mask)
723 return std::min(current_mask, new_mask);
725 return std::max(current_mask, new_mask);
733 const float threshold,
735 const bool preserve_mask)
738 const Mesh &
mesh = *
static_cast<const Mesh *
>(
object.data);
750 flood.
execute(
object, vert_to_face_map, [&](
int ,
int to_v) {
754 current_color.
xyz(), active_color.
xyz(), threshold,
invert);
755 new_mask[to_v] = new_vertex_mask;
759 return len <= threshold;
767 for (
const int i :
verts.index_range()) {
776 const float threshold,
778 const bool preserve_mask)
781 const Mesh &
mesh = *
static_cast<const Mesh *
>(
object.data);
792 for (
const int i :
verts.index_range()) {
794 const float current_mask = node_masks[
i];
796 active_color.xyz(), current_color.
xyz(), threshold,
invert);
833 if (std::holds_alternative<std::monostate>(ss.
active_vert())) {
844 const int active_vert = std::get<int>(ss.
active_vert());
875 ot->name =
"Mask by Color";
876 ot->idname =
"SCULPT_OT_mask_by_color";
877 ot->description =
"Creates a mask based on the active color attribute";
886 ot->srna,
"contiguous",
false,
"Contiguous",
"Mask only contiguous color areas");
888 ot->prop =
RNA_def_boolean(
ot->srna,
"invert",
false,
"Invert",
"Invert the generated mask");
891 "preserve_previous_mask",
893 "Preserve Previous Mask",
894 "Preserve the previous mask and add or subtract the new one generated by the colors");
902 "How much changes in color affect the mask generation",
913 "Region coordinates of sampling",
939 {0,
nullptr, 0,
nullptr,
nullptr},
949 "Use settings from operator properties"},
952 {0,
nullptr, 0,
nullptr,
nullptr}};
969 new_mask[
i] = node_mask[
i] * new_mask[
i];
974 new_mask[
i] = new_mask[
i] > 0.00001f ? node_mask[
i] / new_mask[
i] : 0.0f;
979 new_mask[
i] = node_mask[
i] + new_mask[
i];
984 new_mask[
i] = node_mask[
i] - new_mask[
i];
997 const bool invert_automask,
1011 new_mask.
fill(1.0f);
1014 if (invert_automask) {
1033 const bool invert_automask,
1051 new_mask.
fill(1.0f);
1054 if (invert_automask) {
1073 const float invert_automask,
1087 new_mask.
fill(1.0f);
1090 if (invert_automask) {
1111 const bool invert_automask)
1114 switch (pbvh.
type()) {
1140 SubdivCCG &subdiv_ccg = *
object.sculpt->subdiv_ccg;
1147 depsgraph,
object, automasking, mode, factor, invert_automask,
nodes[
i], tls);
1159 depsgraph,
object, automasking, mode, factor, invert_automask,
nodes[
i], tls);
1196 Sculpt scene_copy = dna::shallow_copy(sd);
1249 Brush brush_copy = dna::shallow_copy(*brush);
1257 *
depsgraph, scene_copy, &brush_copy, ob);
1266 automasking->calc_cavity_factor(*
depsgraph, ob, node_mask);
1305 "automasking_cavity_curve_op",
1326 ot->name =
"Mask From Cavity";
1327 ot->idname =
"SCULPT_OT_mask_from_cavity";
1328 ot->description =
"Creates a mask based on the curvature of the surface";
1337 RNA_def_float(
ot->srna,
"mix_factor", 1.0f, 0.0f, 5.0f,
"Mix Factor",
"", 0.0f, 1.0f);
1343 "Use settings from here");
1350 "The contrast of the cavity mask",
1359 "The number of times the cavity mask is blurred",
1397 Sculpt scene_copy = dna::shallow_copy(sd);
1404 switch (boundary_mode) {
1413 "propagation_steps");
1440 Brush brush_copy = dna::shallow_copy(*brush);
1447 *
depsgraph, scene_copy, &brush_copy, ob);
1499 ot->name =
"Mask From Boundary";
1500 ot->idname =
"SCULPT_OT_mask_from_boundary";
1501 ot->description =
"Creates a mask based on the boundaries of the surface";
1510 RNA_def_float(
ot->srna,
"mix_factor", 1.0f, 0.0f, 5.0f,
"Mix Factor",
"", 0.0f, 1.0f);
1516 "Use settings from here");
1523 "Calculate the boundary mask based on disconnected mesh topology islands"},
1528 "Calculate the boundary mask between face sets"},
1529 {0,
nullptr, 0,
nullptr,
nullptr}};
1533 mask_boundary_modes,
1536 "Boundary type to mask");
1537 RNA_def_int(
ot->srna,
"propagation_steps", 1, 1, 20,
"Propagation Steps",
"", 1, 20);
void BKE_brush_color_set(Paint *paint, Brush *brush, const float color[3])
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)
Base * CTX_data_active_base(const bContext *C)
Main * CTX_data_main(const bContext *C)
ToolSettings * CTX_data_tool_settings(const bContext *C)
Depsgraph * CTX_data_depsgraph_on_load(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
wmMsgBus * CTX_wm_message_bus(const bContext *C)
View3D * CTX_wm_view3d(const bContext *C)
ViewLayer * CTX_data_view_layer(const bContext *C)
int CustomData_get_offset_named(const CustomData *data, eCustomDataType type, blender::StringRef name)
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
bool BKE_base_is_visible(const View3D *v3d, const Base *base)
Object * BKE_view_layer_active_object_get(const ViewLayer *view_layer)
void BKE_mesh_batch_cache_dirty_tag(Mesh *mesh, eMeshBatchDirtyMode mode)
@ BKE_MESH_BATCH_DIRTY_ALL
Mesh * BKE_mesh_from_object(Object *ob)
void BKE_mesh_mirror_apply_mirror_on_axis(Main *bmain, Mesh *mesh, int axis, float dist)
void multires_flush_sculpt_updates(Object *object)
General operations, lookup, etc. for blender objects.
void BKE_object_free_derived_caches(Object *ob)
void BKE_sculptsession_free(Object *ob)
const Brush * BKE_paint_brush_for_read(const Paint *paint)
void BKE_paint_init(Main *bmain, Scene *sce, PaintMode mode, bool ensure_brushes=true)
Paint * BKE_paint_get_active_from_paintmode(Scene *sce, PaintMode mode)
MultiresModifierData * BKE_sculpt_multires_active(const Scene *scene, Object *ob)
void BKE_sculpt_update_object_for_edit(Depsgraph *depsgraph, Object *ob_orig, bool is_paint_tool)
void BKE_sculpt_color_layer_create_if_needed(Object *object)
void BKE_sculptsession_free_pbvh(Object &object)
Brush * BKE_paint_brush(Paint *paint)
void BKE_sculpt_toolsettings_data_ensure(Main *bmain, Scene *scene)
void BKE_sculpt_mask_layers_ensure(Depsgraph *depsgraph, Main *bmain, Object *ob, MultiresModifierData *mmd)
void BKE_paint_brushes_validate(Main *bmain, Paint *paint)
A BVH for high poly meshes.
const blender::Set< BMVert *, 0 > & BKE_pbvh_bmesh_node_unique_verts(blender::bke::pbvh::BMeshNode *node)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
void BKE_report(ReportList *reports, eReportType type, const char *message)
void BKE_scene_graph_evaluated_ensure(Depsgraph *depsgraph, Main *bmain)
CCGKey BKE_subdiv_ccg_key_top_level(const SubdivCCG &subdiv_ccg)
#define BLI_assert_unreachable()
bool is_negative_m4(const float mat[4][4])
MINLINE void copy_v3_v3(float r[3], const float a[3])
void DEG_id_tag_update(ID *id, unsigned int flags)
@ BRUSH_AUTOMASKING_CAVITY_NORMAL
@ BRUSH_AUTOMASKING_BOUNDARY_EDGES
@ BRUSH_AUTOMASKING_CAVITY_USE_CURVE
@ BRUSH_AUTOMASKING_BOUNDARY_FACE_SETS
@ BRUSH_AUTOMASKING_CAVITY_ALL
@ BRUSH_AUTOMASKING_CAVITY_INVERTED
@ SCULPT_BRUSH_TYPE_SMOOTH
These structs are the foundation for all linked lists in the library system.
@ ME_SCULPT_DYNAMIC_TOPOLOGY
Object is a sort of wrapper for general info.
@ V3D_SHADING_VERTEX_COLOR
void ED_paint_cursor_start(Paint *paint, bool(*poll)(bContext *C))
bool ED_operator_object_active_editable_mesh(bContext *C)
Read Guarded memory(de)allocation.
void uiTemplateCurveMapping(uiLayout *layout, PointerRNA *ptr, blender::StringRefNull propname, int type, bool levels, bool brush, bool neg_slope, bool tone, bool presets)
@ OPTYPE_DEPENDS_ON_CURSOR
void BM_log_all_added(BMesh *bm, BMLog *log)
void BM_log_before_all_removed(BMesh *bm, BMLog *log)
void BM_mesh_elem_hflag_disable_all(BMesh *bm, const char htype, const char hflag, const bool respecthide)
void BM_mesh_toolflags_set(BMesh *bm, bool use_toolflags)
bool BMO_op_callf(BMesh *bm, int flag, const char *fmt,...)
#define BMO_FLAG_DEFAULTS
BPy_StructRNA * depsgraph
static btMatrix3x3 Add(const btMatrix3x3 &a, const btMatrix3x3 &b)
void resize(const int64_t new_size)
constexpr void fill(const T &value) const
constexpr Span< T > as_span() const
constexpr int64_t size() const
constexpr IndexRange index_range() const
static VArray from_span(Span< T > values)
GAttributeReader lookup_or_default(StringRef attribute_id, AttrDomain domain, AttrType data_type, const void *default_value=nullptr) const
GAttributeReader lookup(const StringRef attribute_id) const
bool add(const StringRef attribute_id, const AttrDomain domain, const AttrType data_type, const AttributeInit &initializer)
GSpanAttributeWriter lookup_or_add_for_write_span(StringRef attribute_id, AttrDomain domain, AttrType data_type, const AttributeInit &initializer=AttributeInitDefaultValue())
bool remove(const StringRef attribute_id)
Span< NodeT > nodes() const
void tag_masks_changed(const IndexMask &node_mask)
void foreach_index(Fn &&fn) const
CCL_NAMESPACE_BEGIN ccl_device float invert(const float color, const float factor)
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
pbvh::Tree * pbvh_get(Object &object)
IndexMask all_leaf_nodes(const Tree &pbvh, IndexMaskMemory &memory)
void node_update_mask_bmesh(int mask_offset, BMeshNode &node)
void node_update_mask_mesh(Span< float > mask, MeshNode &node)
void node_update_mask_grids(const CCGKey &key, Span< float > masks, GridsNode &node)
Bounds< float3 > bounds_get(const Tree &pbvh)
Span< float3 > vert_normals_eval(const Depsgraph &depsgraph, const Object &object_orig)
bool mode_compat_set(bContext *C, Object *ob, eObjectMode mode, ReportList *reports)
void calc_vert_factors(const Depsgraph &depsgraph, const Object &object, const Cache &automasking, const bke::pbvh::MeshNode &node, Span< int > verts, MutableSpan< float > factors)
void calc_grids_factors(const Depsgraph &depsgraph, const Object &object, const Cache &automasking, const bke::pbvh::GridsNode &node, Span< int > grids, MutableSpan< float > factors)
std::unique_ptr< Cache > cache_init(const Depsgraph &depsgraph, const Sculpt &sd, const Brush *brush, Object &ob)
void SCULPT_OT_cloth_filter(wmOperatorType *ot)
float4 color_vert_get(OffsetIndices< int > faces, Span< int > corner_verts, GroupedSpan< int > vert_to_face_map, GSpan color_attribute, bke::AttrDomain color_domain, int vert)
void SCULPT_OT_color_filter(wmOperatorType *ot)
bke::GAttributeReader active_color_attribute(const Mesh &mesh)
void enable_ex(Main &bmain, Depsgraph &depsgraph, Object &ob)
void SCULPT_OT_detail_flood_fill(wmOperatorType *ot)
void disable_with_undo(Main &bmain, Depsgraph &depsgraph, Scene &scene, Object &ob)
void SCULPT_OT_sample_detail_size(wmOperatorType *ot)
void triangulate(BMesh *bm)
WarnFlag check_attribute_warning(Scene &scene, Object &ob)
void SCULPT_OT_dynamic_topology_toggle(wmOperatorType *ot)
void SCULPT_OT_dyntopo_detail_size_edit(wmOperatorType *ot)
void SCULPT_OT_expand(wmOperatorType *ot)
int find_next_available_id(Object &object)
void SCULPT_OT_face_set_lasso_gesture(wmOperatorType *ot)
void initialize_none_to_id(Mesh *mesh, int new_id)
void SCULPT_OT_face_set_line_gesture(wmOperatorType *ot)
void SCULPT_OT_face_set_polyline_gesture(wmOperatorType *ot)
void SCULPT_OT_face_sets_init(wmOperatorType *ot)
void SCULPT_OT_face_sets_create(wmOperatorType *ot)
void SCULPT_OT_face_set_change_visibility(wmOperatorType *ot)
void SCULPT_OT_face_sets_randomize_colors(wmOperatorType *ot)
void SCULPT_OT_face_sets_edit(wmOperatorType *ot)
void SCULPT_OT_face_set_box_gesture(wmOperatorType *ot)
void SCULPT_OT_mesh_filter(wmOperatorType *ot)
wmKeyMap * modal_keymap(wmKeyConfig *keyconf)
static float color_delta_get(const float3 &color_a, const float3 &color_b, const float threshold, const bool invert)
static void apply_mask_from_settings(const Depsgraph &depsgraph, Object &object, bke::pbvh::Tree &pbvh, const IndexMask &node_mask, const auto_mask::Cache &automasking, const ApplyMaskMode mode, const float factor, const bool invert_automask)
static wmOperatorStatus mask_from_boundary_exec(bContext *C, wmOperator *op)
void SCULPT_OT_mask_filter(wmOperatorType *ot)
void scatter_mask_grids(const Span< float > mask, SubdivCCG &subdiv_ccg, const Span< int > grids)
static wmOperatorStatus mask_by_color_exec(bContext *C, wmOperator *op)
static void apply_mask_mesh(const Depsgraph &depsgraph, const Object &object, const Span< bool > hide_vert, const auto_mask::Cache &automasking, const ApplyMaskMode mode, const float factor, const bool invert_automask, const bke::pbvh::MeshNode &node, LocalData &tls, const MutableSpan< float > mask)
static void apply_mask_grids(const Depsgraph &depsgraph, Object &object, const auto_mask::Cache &automasking, const ApplyMaskMode mode, const float factor, const bool invert_automask, const bke::pbvh::GridsNode &node, LocalData &tls)
static wmOperatorStatus mask_by_color(bContext *C, wmOperator *op, const float2 region_location)
static EnumPropertyItem mix_modes[]
static void mask_from_cavity_ui(bContext *C, wmOperator *op)
void update_mask_mesh(const Depsgraph &depsgraph, Object &object, const IndexMask &node_mask, FunctionRef< void(MutableSpan< float >, Span< int >)> update_fn)
void SCULPT_OT_mask_init(wmOperatorType *ot)
static void SCULPT_OT_mask_by_color(wmOperatorType *ot)
void scatter_mask_bmesh(const Span< float > mask, const BMesh &bm, const Set< BMVert *, 0 > &verts)
void gather_mask_bmesh(const BMesh &bm, const Set< BMVert *, 0 > &verts, const MutableSpan< float > r_mask)
void mix_new_masks(const Span< float > new_masks, const float factor, const MutableSpan< float > masks)
static void mask_by_color_full_mesh(const Depsgraph &depsgraph, Object &object, const int vert, const float threshold, const bool invert, const bool preserve_mask)
static void calc_new_masks(const ApplyMaskMode mode, const Span< float > node_mask, const MutableSpan< float > new_mask)
static wmOperatorStatus mask_by_color_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static wmOperatorStatus mask_from_cavity_exec(bContext *C, wmOperator *op)
static void mask_from_boundary_ui(bContext *C, wmOperator *op)
static void apply_mask_bmesh(const Depsgraph &depsgraph, Object &object, const auto_mask::Cache &automasking, const ApplyMaskMode mode, const float factor, const float invert_automask, bke::pbvh::BMeshNode &node, LocalData &tls)
static void mask_by_color_contiguous_mesh(const Depsgraph &depsgraph, Object &object, const int vert, const float threshold, const bool invert, const bool preserve_mask)
void invert_mask(const MutableSpan< float > masks)
void gather_mask_grids(const SubdivCCG &subdiv_ccg, const Span< int > grids, const MutableSpan< float > r_mask)
static void SCULPT_OT_mask_from_cavity(wmOperatorType *ot)
static EnumPropertyItem settings_sources[]
static void SCULPT_OT_mask_from_boundary(wmOperatorType *ot)
static float final_mask_get(const float current_mask, const float new_mask, const bool invert, const bool preserve_mask)
void clamp_mask(const MutableSpan< float > masks)
void SCULPT_OT_project_line_gesture(wmOperatorType *ot)
void SCULPT_OT_trim_lasso_gesture(wmOperatorType *ot)
void SCULPT_OT_trim_box_gesture(wmOperatorType *ot)
void SCULPT_OT_trim_line_gesture(wmOperatorType *ot)
void SCULPT_OT_trim_polyline_gesture(wmOperatorType *ot)
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_enter_sculpt_mode(const Scene &, Object &ob, const wmOperator *op)
void geometry_begin(const Scene &scene, Object &ob, const wmOperator *op)
void geometry_end(Object &ob)
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 object_sculpt_mode_enter(Main &bmain, Depsgraph &depsgraph, Scene &scene, Object &ob, bool force_dyntopo, ReportList *reports)
static bool no_multires_poll(bContext *C)
static void init_sculpt_mode_session(Main &bmain, Depsgraph &depsgraph, Scene &scene, Object &ob)
static wmOperatorStatus set_persistent_base_exec(bContext *C, wmOperator *)
void vert_random_access_ensure(Object &object)
static void SCULPT_OT_symmetrize(wmOperatorType *ot)
static wmOperatorStatus optimize_exec(bContext *C, wmOperator *)
void keymap_sculpt(wmKeyConfig *keyconf)
static void SCULPT_OT_sculptmode_toggle(wmOperatorType *ot)
void ensure_valid_pivot(const Object &ob, Paint &paint)
bool color_supported_check(const Scene &scene, Object &object, ReportList *reports)
static wmOperatorStatus sculpt_mode_toggle_exec(bContext *C, wmOperator *op)
void operatortypes_sculpt()
void scale_factors(MutableSpan< float > factors, float strength)
static void SCULPT_OT_sample_color(wmOperatorType *ot)
void object_sculpt_mode_exit(Main &bmain, Depsgraph &depsgraph, Scene &scene, Object &ob)
static void SCULPT_OT_set_persistent_base(wmOperatorType *ot)
static void SCULPT_OT_optimize(wmOperatorType *ot)
bool cursor_geometry_info_update(bContext *C, CursorGeometryInfo *out, const float2 &mval, const bool use_sampled_normal)
void flush_update_done(const bContext *C, Object &ob, const UpdateType update_type)
void scatter_data_mesh(Span< T > src, Span< int > indices, MutableSpan< T > dst)
void SCULPT_OT_brush_stroke(wmOperatorType *ot)
void gather_data_mesh(Span< T > src, Span< int > indices, MutableSpan< T > dst)
static wmOperatorStatus symmetrize_exec(bContext *C, wmOperator *op)
void fill_factor_from_hide(Span< bool > hide_vert, Span< int > verts, MutableSpan< float > r_factors)
void SCULPT_OT_set_pivot_position(wmOperatorType *ot)
static wmOperatorStatus sample_color_invoke(bContext *C, wmOperator *op, const wmEvent *)
T distance(const T &a, const T &b)
T midpoint(const T &a, const T &b)
VecBase< T, 3 > transform_point(const CartesianBasis &basis, const VecBase< T, 3 > &v)
VecBase< float, 4 > float4
VecBase< int32_t, 2 > int2
VecBase< float, 2 > float2
ColorSceneLinear4f< eAlpha::Premultiplied > ColorGeometry4f
VecBase< float, 3 > float3
void paint_cursor_delete_textures()
void RNA_int_set_array(PointerRNA *ptr, const char *name, const int *values)
void RNA_int_get_array(PointerRNA *ptr, const char *name, int *values)
int RNA_int_get(PointerRNA *ptr, const char *name)
float RNA_float_get(PointerRNA *ptr, const char *name)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
PointerRNA RNA_pointer_create_discrete(ID *id, StructRNA *type, void *data)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_int_array(StructOrFunctionRNA *cont_, const char *identifier, const int len, const int *default_value, const int hardmin, const int hardmax, const char *ui_name, const char *ui_description, const int softmin, const int softmax)
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)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_ui_range(PropertyRNA *prop, double min, double max, double step, int precision)
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_brush_cursor_poll(bContext *C)
bool SCULPT_mode_poll(bContext *C)
void SCULPT_tag_update_overlays(bContext *C)
#define MASK_BY_COLOR_SLOPE
float automasking_cavity_factor
int automasking_cavity_blur_steps
int automasking_boundary_edges_propagation_steps
struct CurveMapping * automasking_cavity_curve
struct SculptSession * sculpt
struct ToolSettings * toolsettings
struct SculptSession::@345375365225333342236070250113232025260070150165 persistent
blender::Array< blender::float3 > sculpt_persistent_co
blender::Array< blender::float3 > sculpt_persistent_no
ActiveVert active_vert() const
blender::Array< float > sculpt_persistent_disp
int automasking_boundary_edges_propagation_steps
float automasking_cavity_factor
int automasking_cavity_blur_steps
struct CurveMapping * automasking_cavity_curve_op
struct CurveMapping * automasking_cavity_curve
blender::Array< blender::float3 > normals
blender::Array< float > masks
blender::Array< blender::float3 > positions
VecBase< T, 3 > xyz() const
const ImplicitSharingInfo * sharing_info
blender::float3 average_stroke_accum
int average_stroke_counter
Span< int > grids() const
Span< int > verts() const
void execute(Object &object, GroupedSpan< int > vert_to_face_map, FunctionRef< bool(int from_v, int to_v)> func)
void add_initial(int vertex)
void use_property_decorate_set(bool is_sep)
void use_property_split_set(bool value)
void prop(PointerRNA *ptr, PropertyRNA *prop, int index, int value, eUI_Item_Flag flag, std::optional< blender::StringRef > name_opt, int icon, std::optional< blender::StringRef > placeholder=std::nullopt)
struct ReportList * reports
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
#define WM_msg_publish_rna_prop(mbus, id_, data_, type_, prop_)
void WM_operatortype_append(void(*opfunc)(wmOperatorType *))