Sculpt: Brush channels names are now lower-case instead
of upper case.
This commit is contained in:
parent
336b263b56
commit
c9f1e104da
|
@ -20,14 +20,14 @@
|
|||
from bpy.types import Menu
|
||||
|
||||
channel_name_map = {
|
||||
"size" : "RADIUS",
|
||||
"autosmooth_fset_slide":"FSET_SLIDE",
|
||||
"auto_smooth_factor": "AUTOSMOOTH",
|
||||
"auto_smooth_projection": "SMOOTH_PROJECTION",
|
||||
"auto_smooth_radius_factor": "AUTOSMOOTH_RADIUS_SCALE",
|
||||
"boundary_smooth_factor": "BOUNDARY_SMOOTH",
|
||||
"autosmooth_fset_slide": "FSET_SLIDE",
|
||||
"topology_rake_factor": "TOPOLOGY_RAKE"
|
||||
"size" : "radius",
|
||||
"autosmooth_fset_slide":"fset_slide",
|
||||
"auto_smooth_factor": "autosmooth",
|
||||
"auto_smooth_projection": "smooth_projection",
|
||||
"auto_smooth_radius_factor": "autosmooth_radius_scale",
|
||||
"boundary_smooth_factor": "boundary_smooth",
|
||||
"autosmooth_fset_slide": "fset_slide",
|
||||
"topology_rake_factor": "topology_rake"
|
||||
};
|
||||
|
||||
class UnifiedPaintPanel:
|
||||
|
@ -204,8 +204,6 @@ class UnifiedPaintPanel:
|
|||
|
||||
if prop_name in channel_name_map:
|
||||
prop_name = channel_name_map[prop_name]
|
||||
else:
|
||||
prop_name = prop_name.upper()
|
||||
|
||||
if prop_name in brush.channels.channels:
|
||||
# def channel_unified(layout, context, brush, prop_name, icon='NONE', pressure=True, text=None, slider=False, header=False):
|
||||
|
|
|
@ -75,7 +75,7 @@ typedef struct BrushMappingData {
|
|||
typedef struct BrushEnumDef {
|
||||
int value;
|
||||
const char identifier[64];
|
||||
int icon;
|
||||
char icon[32];
|
||||
const char name[64];
|
||||
const char description[512];
|
||||
} BrushEnumDef;
|
||||
|
@ -210,7 +210,8 @@ void BKE_brush_channelset_compat_load(BrushChannelSet *chset,
|
|||
|
||||
// merge in channels the ui requested
|
||||
void BKE_brush_apply_queued_channels(BrushChannelSet *chset, bool do_override);
|
||||
void BKE_brush_channeltype_rna_check(BrushChannelType *def);
|
||||
void BKE_brush_channeltype_rna_check(BrushChannelType *def,
|
||||
int (*getIconFromName)(const char *name));
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -2469,11 +2469,11 @@ void BKE_brush_size_set(Scene *scene, Brush *brush, int size, bool use_brush_cha
|
|||
if (use_brush_channels) {
|
||||
if (scene->toolsettings->sculpt && scene->toolsettings->sculpt->channels) {
|
||||
BKE_brush_channelset_set_final_float(
|
||||
brush->channels, scene->toolsettings->sculpt->channels, "RADIUS", (float)size);
|
||||
brush->channels, scene->toolsettings->sculpt->channels, "radius", (float)size);
|
||||
return;
|
||||
}
|
||||
else {
|
||||
BKE_brush_channelset_set_float(brush->channels, "RADIUS", (float)size);
|
||||
BKE_brush_channelset_set_float(brush->channels, "radius", (float)size);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2495,10 +2495,10 @@ int BKE_brush_size_get(const Scene *scene, const Brush *brush, bool use_brush_ch
|
|||
if (use_brush_channel) {
|
||||
if (scene->toolsettings->sculpt) {
|
||||
return (int)BKE_brush_channelset_get_final_float(
|
||||
brush->channels, scene->toolsettings->sculpt->channels, "RADIUS", NULL);
|
||||
brush->channels, scene->toolsettings->sculpt->channels, "radius", NULL);
|
||||
}
|
||||
else {
|
||||
return (int)BKE_brush_channelset_get_float(brush->channels, "RADIUS", NULL);
|
||||
return (int)BKE_brush_channelset_get_float(brush->channels, "radius", NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -105,7 +105,8 @@ generated from the node group inputs.
|
|||
extern BrushChannelType brush_builtin_channels[];
|
||||
extern const int brush_builtin_channel_len;
|
||||
|
||||
ATTR_NO_OPT void BKE_brush_channeltype_rna_check(BrushChannelType *def)
|
||||
ATTR_NO_OPT void BKE_brush_channeltype_rna_check(BrushChannelType *def,
|
||||
int (*getIconFromName)(const char *name))
|
||||
{
|
||||
if (def->rna_enumdef) {
|
||||
return;
|
||||
|
@ -124,7 +125,7 @@ ATTR_NO_OPT void BKE_brush_channeltype_rna_check(BrushChannelType *def)
|
|||
for (int i = 0; i < ARRAY_SIZE(def->enumdef); i++) {
|
||||
def->rna_enumdef[i].value = def->enumdef[i].value;
|
||||
def->rna_enumdef[i].identifier = def->enumdef[i].identifier;
|
||||
def->rna_enumdef[i].icon = def->enumdef[i].icon;
|
||||
def->rna_enumdef[i].icon = getIconFromName ? getIconFromName(def->enumdef[i].icon) : -1;
|
||||
def->rna_enumdef[i].name = def->enumdef[i].name;
|
||||
def->rna_enumdef[i].description = def->enumdef[i].description;
|
||||
}
|
||||
|
@ -798,27 +799,27 @@ BrushCommand *BKE_brush_command_init(BrushCommand *command, int tool)
|
|||
|
||||
command->tool = tool;
|
||||
|
||||
ADDCH("SPACING");
|
||||
ADDCH("spacing");
|
||||
|
||||
switch (tool) {
|
||||
case SCULPT_TOOL_DRAW:
|
||||
ADDCH("RADIUS");
|
||||
ADDCH("STRENGTH");
|
||||
ADDCH("radius");
|
||||
ADDCH("strength");
|
||||
break;
|
||||
case SCULPT_TOOL_SMOOTH:
|
||||
ADDCH("RADIUS");
|
||||
ADDCH("STRENGTH");
|
||||
ADDCH("FSET_SLIDE");
|
||||
ADDCH("BOUNDARY_SMOOTH");
|
||||
ADDCH("AUTOSMOOTH_PROJECTION");
|
||||
ADDCH("radius");
|
||||
ADDCH("strength");
|
||||
ADDCH("fset_slide");
|
||||
ADDCH("boundary_smooth");
|
||||
ADDCH("autosmooth_projection");
|
||||
break;
|
||||
case SCULPT_TOOL_TOPOLOGY_RAKE:
|
||||
ADDCH("RADIUS");
|
||||
ADDCH("STRENGTH");
|
||||
// ADDCH("FSET_SLIDE");
|
||||
// ADDCH("BOUNDARY_SMOOTH");
|
||||
ADDCH("AUTOSMOOTH_PROJECTION");
|
||||
ADDCH("TOPOLOGY_RAKE_MODE");
|
||||
ADDCH("radius");
|
||||
ADDCH("strength");
|
||||
// ADDCH("fset_slide");
|
||||
// ADDCH("boundary_smooth");
|
||||
ADDCH("autosmooth_projection");
|
||||
ADDCH("topology_rake_mode");
|
||||
break;
|
||||
case SCULPT_TOOL_DYNTOPO:
|
||||
break;
|
||||
|
@ -855,64 +856,64 @@ ATTR_NO_OPT void BKE_builtin_commandlist_create(Brush *brush,
|
|||
cmd = BKE_brush_commandlist_add(cl, chset, true);
|
||||
BKE_brush_command_init(cmd, tool);
|
||||
|
||||
float radius = BKE_brush_channelset_get_float(chset, "RADIUS", NULL);
|
||||
float radius = BKE_brush_channelset_get_float(chset, "radius", NULL);
|
||||
|
||||
bool no_autosmooth = ELEM(
|
||||
brush->sculpt_tool, SCULPT_TOOL_BOUNDARY, SCULPT_TOOL_SMOOTH, SCULPT_TOOL_MASK);
|
||||
|
||||
/* build autosmooth command */
|
||||
float autosmooth_scale = BKE_brush_channelset_get_float(chset, "AUTOSMOOTH_RADIUS_SCALE", NULL);
|
||||
float autosmooth_scale = BKE_brush_channelset_get_float(chset, "autosmooth_radius_scale", NULL);
|
||||
float autosmooth_projection = BKE_brush_channelset_get_float(
|
||||
chset, "TOPOLOGY_RAKE_PROJECTION", NULL);
|
||||
chset, "topology_rake_projection", NULL);
|
||||
|
||||
float autosmooth_spacing;
|
||||
|
||||
if (BKE_brush_channelset_get_int(chset, "AUTOSMOOTH_USE_SPACING")) {
|
||||
autosmooth_spacing = BKE_brush_channelset_get_float(chset, "AUTOSMOOTH_SPACING", NULL);
|
||||
if (BKE_brush_channelset_get_int(chset, "autosmooth_use_spacing")) {
|
||||
autosmooth_spacing = BKE_brush_channelset_get_float(chset, "autosmooth_spacing", NULL);
|
||||
}
|
||||
else {
|
||||
autosmooth_spacing = BKE_brush_channelset_get_float(chset, "SPACING", NULL);
|
||||
autosmooth_spacing = BKE_brush_channelset_get_float(chset, "spacing", NULL);
|
||||
}
|
||||
|
||||
float autosmooth = BKE_brush_channelset_get_float(chset, "AUTOSMOOTH", NULL);
|
||||
float autosmooth = BKE_brush_channelset_get_float(chset, "autosmooth", NULL);
|
||||
if (!no_autosmooth && autosmooth > 0.0f) {
|
||||
cmd = BKE_brush_command_init(BKE_brush_commandlist_add(cl, brush->channels, true),
|
||||
SCULPT_TOOL_SMOOTH);
|
||||
float_set_uninherit(cmd->params, "STRENGTH", autosmooth);
|
||||
float_set_uninherit(cmd->params, "RADIUS", radius * autosmooth_scale);
|
||||
float_set_uninherit(cmd->params, "PROJECTION", autosmooth_projection);
|
||||
float_set_uninherit(cmd->params, "SPACING", autosmooth_spacing);
|
||||
float_set_uninherit(cmd->params, "strength", autosmooth);
|
||||
float_set_uninherit(cmd->params, "radius", radius * autosmooth_scale);
|
||||
float_set_uninherit(cmd->params, "projection", autosmooth_projection);
|
||||
float_set_uninherit(cmd->params, "spacing", autosmooth_spacing);
|
||||
}
|
||||
|
||||
float topology_rake_scale = BKE_brush_channelset_get_float(
|
||||
chset, "TOPOLOGY_RAKE_RADIUS_SCALE", NULL);
|
||||
chset, "topology_rake_radius_scale", NULL);
|
||||
float topology_rake_projection = BKE_brush_channelset_get_float(
|
||||
chset, "TOPOLOGY_RAKE_PROJECTION", NULL);
|
||||
chset, "topology_rake_projection", NULL);
|
||||
|
||||
/* build topology rake command*/
|
||||
float topology_rake = BKE_brush_channelset_get_float(chset, "TOPOLOGY_RAKE", NULL);
|
||||
float topology_rake = BKE_brush_channelset_get_float(chset, "topology_rake", NULL);
|
||||
float topology_rake_spacing;
|
||||
|
||||
if (BKE_brush_channelset_get_int(chset, "TOPOLOGY_RAKE_USE_SPACING")) {
|
||||
topology_rake_spacing = BKE_brush_channelset_get_float(chset, "TOPOLOGY_RAKE_SPACING", NULL);
|
||||
if (BKE_brush_channelset_get_int(chset, "topology_rake_use_spacing")) {
|
||||
topology_rake_spacing = BKE_brush_channelset_get_float(chset, "topology_rake_spacing", NULL);
|
||||
}
|
||||
else {
|
||||
topology_rake_spacing = BKE_brush_channelset_get_float(chset, "SPACING", NULL);
|
||||
topology_rake_spacing = BKE_brush_channelset_get_float(chset, "spacing", NULL);
|
||||
}
|
||||
|
||||
if (topology_rake > 0.0f) {
|
||||
cmd = BKE_brush_command_init(BKE_brush_commandlist_add(cl, brush->channels, true),
|
||||
SCULPT_TOOL_SMOOTH);
|
||||
|
||||
float_set_uninherit(cmd->params, "STRENGTH", topology_rake);
|
||||
float_set_uninherit(cmd->params, "RADIUS", radius * topology_rake_scale);
|
||||
float_set_uninherit(cmd->params, "PROJECTION", topology_rake_projection);
|
||||
float_set_uninherit(cmd->params, "SPACING", topology_rake_spacing);
|
||||
float_set_uninherit(cmd->params, "strength", topology_rake);
|
||||
float_set_uninherit(cmd->params, "radius", radius * topology_rake_scale);
|
||||
float_set_uninherit(cmd->params, "projection", topology_rake_projection);
|
||||
float_set_uninherit(cmd->params, "spacing", topology_rake_spacing);
|
||||
}
|
||||
|
||||
/* build dyntopo command */
|
||||
|
||||
if (!BKE_brush_channelset_get_int(chset, "DYNTOPO_DISABLED")) {
|
||||
if (!BKE_brush_channelset_get_int(chset, "dyntopo_disabled")) {
|
||||
cmd = BKE_brush_command_init(BKE_brush_commandlist_add(cl, brush->channels, true),
|
||||
SCULPT_TOOL_DYNTOPO);
|
||||
}
|
||||
|
@ -1033,15 +1034,15 @@ void BKE_brush_channelset_to_unified_settings(BrushChannelSet *chset, UnifiedPai
|
|||
{
|
||||
BrushChannel *ch;
|
||||
|
||||
if (ch = BKE_brush_channelset_lookup(chset, "RADIUS")) {
|
||||
if (ch = BKE_brush_channelset_lookup(chset, "radius")) {
|
||||
ups->size = ch->fvalue;
|
||||
}
|
||||
|
||||
if (ch = BKE_brush_channelset_lookup(chset, "STRENGTH")) {
|
||||
if (ch = BKE_brush_channelset_lookup(chset, "strength")) {
|
||||
ups->alpha = ch->fvalue;
|
||||
}
|
||||
|
||||
if (ch = BKE_brush_channelset_lookup(chset, "WEIGHT")) {
|
||||
if (ch = BKE_brush_channelset_lookup(chset, "weight")) {
|
||||
ups->weight = ch->fvalue;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ To enable converting to/from old data:
|
|||
3. If not a boolean mapping to a bitflag: Add to brush_settings_map
|
||||
4. If a boolean mapping to a bitflag: Add to brush_flags_map_len.
|
||||
*/
|
||||
#define ICON_NONE -1
|
||||
#define ICON_NONE "NONE"
|
||||
|
||||
/* clang-format off */
|
||||
#define MAKE_FLOAT_EX_OPEN(idname1, name1, tooltip1, value1, min1, max1, smin1, smax1) \
|
||||
|
@ -96,7 +96,7 @@ That includes per-brush enums and bitflags!
|
|||
BrushChannelType brush_builtin_channels[] = {
|
||||
{
|
||||
.name = "Radius",
|
||||
.idname = "RADIUS",
|
||||
.idname = "radius",
|
||||
.min = 0.001f,
|
||||
.type = BRUSH_CHANNEL_FLOAT,
|
||||
.max = 2048.0f,
|
||||
|
@ -110,7 +110,7 @@ BrushChannelType brush_builtin_channels[] = {
|
|||
|
||||
{
|
||||
.name = "Strength",
|
||||
.idname = "STRENGTH",
|
||||
.idname = "strength",
|
||||
.min = -1.0f,
|
||||
.type = BRUSH_CHANNEL_FLOAT,
|
||||
.max = 4.0f,
|
||||
|
@ -123,7 +123,7 @@ BrushChannelType brush_builtin_channels[] = {
|
|||
},
|
||||
{
|
||||
.name = "Alpha",
|
||||
.idname = "ALPHA",
|
||||
.idname = "alpha",
|
||||
.type = BRUSH_CHANNEL_FLOAT,
|
||||
.min = 0.0f,
|
||||
.max = 1.0f,
|
||||
|
@ -136,7 +136,7 @@ BrushChannelType brush_builtin_channels[] = {
|
|||
},
|
||||
{
|
||||
.name = "Spacing",
|
||||
.idname = "SPACING",
|
||||
.idname = "spacing",
|
||||
.min = 1.0f,
|
||||
.type = BRUSH_CHANNEL_INT,
|
||||
.max = 500.0f,
|
||||
|
@ -149,7 +149,7 @@ BrushChannelType brush_builtin_channels[] = {
|
|||
},
|
||||
{
|
||||
.name = "Autosmooth",
|
||||
.idname = "AUTOSMOOTH",
|
||||
.idname = "autosmooth",
|
||||
.type = BRUSH_CHANNEL_FLOAT,
|
||||
.min = -1.0f,
|
||||
.max = 4.0f,
|
||||
|
@ -161,7 +161,7 @@ BrushChannelType brush_builtin_channels[] = {
|
|||
},
|
||||
{
|
||||
.name = "Topology Rake",
|
||||
.idname = "TOPOLOGY_RAKE",
|
||||
.idname = "topology_rake",
|
||||
.type = BRUSH_CHANNEL_FLOAT,
|
||||
.min = -1.0f,
|
||||
.max = 4.0f,
|
||||
|
@ -173,7 +173,7 @@ BrushChannelType brush_builtin_channels[] = {
|
|||
},
|
||||
{
|
||||
.name = "Autosmooth Radius Scale",
|
||||
.idname = "AUTOSMOOTH_RADIUS_SCALE",
|
||||
.idname = "autosmooth_radius_scale",
|
||||
.type = BRUSH_CHANNEL_FLOAT,
|
||||
.min = 0.0001f,
|
||||
.max = 25.0f,
|
||||
|
@ -186,7 +186,7 @@ BrushChannelType brush_builtin_channels[] = {
|
|||
},
|
||||
{
|
||||
.name = "Rake Radius Scale",
|
||||
.idname = "TOPOLOGY_RAKE_RADIUS_SCALE",
|
||||
.idname = "topology_rake_radius_scale",
|
||||
.type = BRUSH_CHANNEL_FLOAT,
|
||||
.min = 0.0001f,
|
||||
.max = 25.0f,
|
||||
|
@ -199,7 +199,7 @@ BrushChannelType brush_builtin_channels[] = {
|
|||
},
|
||||
{
|
||||
.name = "Face Set Slide",
|
||||
.idname = "FSET_SLIDE",
|
||||
.idname = "fset_slide",
|
||||
.type = BRUSH_CHANNEL_FLOAT,
|
||||
.min = 0.0001f,
|
||||
.max = 1.0f,
|
||||
|
@ -212,7 +212,7 @@ BrushChannelType brush_builtin_channels[] = {
|
|||
},
|
||||
{
|
||||
.name = "Boundary Smooth",
|
||||
.idname = "BOUNDARY_SMOOTH",
|
||||
.idname = "boundary_smooth",
|
||||
.type = BRUSH_CHANNEL_FLOAT,
|
||||
.min = 0.0001f,
|
||||
.max = 1.0f,
|
||||
|
@ -224,7 +224,7 @@ BrushChannelType brush_builtin_channels[] = {
|
|||
},
|
||||
{
|
||||
.name = "Projection",
|
||||
.idname = "PROJECTION",
|
||||
.idname = "projection",
|
||||
.type = BRUSH_CHANNEL_FLOAT,
|
||||
.min = 0.0001f,
|
||||
.max = 1.0f,
|
||||
|
@ -236,19 +236,19 @@ BrushChannelType brush_builtin_channels[] = {
|
|||
},
|
||||
{
|
||||
.name = "Use Spacing",
|
||||
.idname = "TOPOLOGY_RAKE_USE_SPACING",
|
||||
.idname = "topology_rake_use_spacing",
|
||||
.type = BRUSH_CHANNEL_BOOL,
|
||||
.ivalue = 0
|
||||
},
|
||||
{
|
||||
.name = "Use Spacing",
|
||||
.idname = "AUTOSMOOTH_USE_SPACING",
|
||||
.idname = "autosmooth_use_spacing",
|
||||
.type = BRUSH_CHANNEL_BOOL,
|
||||
.ivalue = 0
|
||||
},
|
||||
{
|
||||
.name = "Projection",
|
||||
.idname = "AUTOSMOOTH_PROJECTION",
|
||||
.idname = "autosmooth_projection",
|
||||
.type = BRUSH_CHANNEL_FLOAT,
|
||||
.min = 0.0001f,
|
||||
.max = 1.0f,
|
||||
|
@ -260,7 +260,7 @@ BrushChannelType brush_builtin_channels[] = {
|
|||
},
|
||||
{
|
||||
.name = "Projection",
|
||||
.idname = "TOPOLOGY_RAKE_PROJECTION",
|
||||
.idname = "topology_rake_projection",
|
||||
.type = BRUSH_CHANNEL_FLOAT,
|
||||
.min = 0.0001f,
|
||||
.max = 1.0f,
|
||||
|
@ -273,7 +273,7 @@ BrushChannelType brush_builtin_channels[] = {
|
|||
},
|
||||
{
|
||||
.name = "Spacing",
|
||||
.idname = "TOPOLOGY_RAKE_SPACING",
|
||||
.idname = "topology_rake_spacing",
|
||||
.type = BRUSH_CHANNEL_FLOAT,
|
||||
.min = 0.0001f,
|
||||
.max = 1.0f,
|
||||
|
@ -286,7 +286,7 @@ BrushChannelType brush_builtin_channels[] = {
|
|||
},
|
||||
{
|
||||
.name = "Spacing",
|
||||
.idname = "AUTOSMOOTH_SPACING",
|
||||
.idname = "autosmooth_spacing",
|
||||
.type = BRUSH_CHANNEL_FLOAT,
|
||||
.min = 0.0001f,
|
||||
.max = 1.0f,
|
||||
|
@ -300,7 +300,7 @@ BrushChannelType brush_builtin_channels[] = {
|
|||
|
||||
{
|
||||
.name = "Topology Rake Mode",
|
||||
.idname = "TOPOLOGY_RAKE_MODE",
|
||||
.idname = "topology_rake_mode",
|
||||
.type = BRUSH_CHANNEL_ENUM,
|
||||
.enumdef = {
|
||||
{0, "BRUSH_DIRECTION", ICON_NONE, "Stroke", "Stroke Direction"},
|
||||
|
@ -310,7 +310,7 @@ BrushChannelType brush_builtin_channels[] = {
|
|||
},
|
||||
{
|
||||
.name = "Automasking",
|
||||
.idname = "AUTOMASKING",
|
||||
.idname = "automasking",
|
||||
.flag = BRUSH_CHANNEL_INHERIT_IF_UNSET | BRUSH_CHANNEL_INHERIT,
|
||||
.type = BRUSH_CHANNEL_BITMASK,
|
||||
.enumdef = {
|
||||
|
@ -324,14 +324,14 @@ BrushChannelType brush_builtin_channels[] = {
|
|||
},
|
||||
{
|
||||
.name = "Disable Dyntopo",
|
||||
.idname = "DYNTOPO_DISABLED",
|
||||
.idname = "dyntopo_disabled",
|
||||
.type = BRUSH_CHANNEL_BOOL,
|
||||
.flag = BRUSH_CHANNEL_NO_MAPPINGS,
|
||||
.ivalue = 0
|
||||
},
|
||||
{
|
||||
.name = "Detail Range",
|
||||
.idname = "DYNTOPO_DETAIL_RANGE",
|
||||
.idname = "dyntopo_detail_range",
|
||||
.type = BRUSH_CHANNEL_FLOAT,
|
||||
.min = 0.001,
|
||||
.max = 0.99,
|
||||
|
@ -340,7 +340,7 @@ BrushChannelType brush_builtin_channels[] = {
|
|||
},
|
||||
{
|
||||
.name = "Operations",
|
||||
.idname = "DYNTOPO_OPS",
|
||||
.idname = "dyntopo_ops",
|
||||
.type = BRUSH_CHANNEL_BITMASK,
|
||||
.flag = BRUSH_CHANNEL_INHERIT,
|
||||
.ivalue = DYNTOPO_COLLAPSE | DYNTOPO_CLEANUP | DYNTOPO_SUBDIVIDE,
|
||||
|
@ -355,7 +355,7 @@ BrushChannelType brush_builtin_channels[] = {
|
|||
},
|
||||
{
|
||||
.name = "Slide Deform Type",
|
||||
.idname = "SLIDE_DEFORM_TYPE",
|
||||
.idname = "slide_deform_type",
|
||||
.ivalue = BRUSH_SLIDE_DEFORM_DRAG,
|
||||
.type = BRUSH_CHANNEL_ENUM,
|
||||
.enumdef = {
|
||||
|
@ -367,7 +367,7 @@ BrushChannelType brush_builtin_channels[] = {
|
|||
},
|
||||
{
|
||||
.name = "Normal Radius",
|
||||
.idname = "NORMAL_RADIUS_FACTOR",
|
||||
.idname = "normal_radius_factor",
|
||||
.tooltip = "Ratio between the brush radius and the radius that is going to be "
|
||||
"used to sample the normal",
|
||||
.type = BRUSH_CHANNEL_FLOAT,
|
||||
|
@ -378,7 +378,7 @@ BrushChannelType brush_builtin_channels[] = {
|
|||
},
|
||||
{
|
||||
.name = "Hardness",
|
||||
.idname = "HARDNESS",
|
||||
.idname = "hardness",
|
||||
.tooltip = "Brush hardness",
|
||||
.type = BRUSH_CHANNEL_FLOAT,
|
||||
.fvalue = 0.0f,
|
||||
|
@ -389,7 +389,7 @@ BrushChannelType brush_builtin_channels[] = {
|
|||
},
|
||||
{
|
||||
.name = "Tip Roundness",
|
||||
.idname = "TIP_ROUNDNESS",
|
||||
.idname = "tip_roundness",
|
||||
.tooltip = "",
|
||||
.type = BRUSH_CHANNEL_FLOAT,
|
||||
.fvalue = 0.0f,
|
||||
|
@ -400,31 +400,41 @@ BrushChannelType brush_builtin_channels[] = {
|
|||
},
|
||||
{
|
||||
.name = "Accumulate",
|
||||
.idname = "ACCUMULATE",
|
||||
.idname = "accumulate",
|
||||
.type = BRUSH_CHANNEL_BOOL,
|
||||
.ivalue = 0
|
||||
},
|
||||
MAKE_FLOAT("NORMAL_WEIGHT", "Normal Weight", "", 0.0f, 0.0f, 1.0f),
|
||||
MAKE_FLOAT("RAKE_FACTOR", "Rake Factor", "How much grab will follow cursor rotation", 0.0f, 0.0f, 10.0f),
|
||||
MAKE_FLOAT("WEIGHT", "Weight", "", 0.5f, 0.0f, 1.0f),
|
||||
MAKE_FLOAT("JITTER", "Jitter", "Jitter the position of the brush while painting", 0.0f, 0.0f, 1.0f),
|
||||
MAKE_INT("JITTER_ABSOLUTE", "Absolute Jitter", "", 0, 0.0f, 1000.0f),
|
||||
MAKE_FLOAT("SMOOTH_STROKE_RADIUS", "Smooth Stroke Radius", "Minimum distance from last point before stroke continues", 10.0f, 10.0f, 200.0f),
|
||||
MAKE_FLOAT("SMOOTH_STROKE_FACTOR", "Smooth Stroke Factor", "", 0.5f, 0.5f, 0.99f),
|
||||
MAKE_FLOAT_EX("RATE", "Rate", "", 0.5, 0.0001f, 10000.0f, 0.01f, 1.0f),
|
||||
MAKE_FLOAT("FLOW", "Flow", "Amount of paint that is applied per stroke sample", 0.0f, 0.0f, 1.0f),
|
||||
MAKE_FLOAT("WET_MIX", "Wet Mix", "Amount of paint that is picked from the surface into the brush color", 0.0f, 0.0f, 1.0f),
|
||||
MAKE_FLOAT("WET_PERSISTENCE", "Wet Persistence", "Amount of wet paint that stays in the brush after applying paint to the surface", 0.0f, 0.0f, 1.0f),
|
||||
MAKE_FLOAT("DENSITY", "Density", "Amount of random elements that are going to be affected by the brush", 0.0f, 0.0f, 1.0f),
|
||||
MAKE_FLOAT("TIP_SCALE_X", "Tip Scale X", "Scale of the brush tip in the X axis", 0.0f, 0.0f, 1.0f),
|
||||
MAKE_FLOAT("DASH_RATIO", "Dash Ratio", "Ratio of samples in a cycle that the brush is enabled", 0.0f, 0.0f, 1.0f),
|
||||
MAKE_FLOAT_EX("PLANE_OFFSET", "Plane Offset", "Adjust plane on which the brush acts towards or away from the object surface", 0.0f, -2.0f, 2.0f, -0.5f, 0.5f),
|
||||
MAKE_BOOL("ORIGINAL_NORMAL", "Original Normal", "When locked keep using normal of surface where stroke was initiated", false),
|
||||
MAKE_BOOL("ORIGINAL_PLANE", "Original Plane", "When locked keep using the plane origin of surface where stroke was initiated", false),
|
||||
MAKE_BOOL("USE_WEIGHTED_SMOOTH", "Weight By Area", "Weight by face area to get a smoother result", true),
|
||||
MAKE_BOOL("PRESERVE_FACESET_BOUNDARY", "Keep FSet Boundary", "Preserve face set boundaries", true),
|
||||
MAKE_BOOL("HARD_EDGE_MODE", "Hard Edge Mode", "Forces all brushes into hard edge face set mode (sets face set slide to 0)", false),
|
||||
MAKE_BOOL("GRAB_SILHOUETTE", "Grab Silhouette", "Grabs trying to automask the silhouette of the object", false),
|
||||
{
|
||||
.name = "Direction",
|
||||
.idname = "direction",
|
||||
.ivalue = 0,
|
||||
.enumdef = {
|
||||
{0, "ADD", "ADD", "Add", "Add effect of brush"},
|
||||
{BRUSH_DIR_IN, "SUBTRACT", "REMOVE", "Subtract", "Subtract effect of brush"},
|
||||
{0, NULL, 0, NULL, NULL},
|
||||
}
|
||||
},
|
||||
MAKE_FLOAT("normal_weight", "Normal Weight", "", 0.0f, 0.0f, 1.0f),
|
||||
MAKE_FLOAT("rake_factor", "Rake Factor", "How much grab will follow cursor rotation", 0.0f, 0.0f, 10.0f),
|
||||
MAKE_FLOAT("weight", "Weight", "", 0.5f, 0.0f, 1.0f),
|
||||
MAKE_FLOAT("jitter", "Jitter", "Jitter the position of the brush while painting", 0.0f, 0.0f, 1.0f),
|
||||
MAKE_INT("jitter_absolute", "Absolute Jitter", "", 0, 0.0f, 1000.0f),
|
||||
MAKE_FLOAT("smooth_stroke_radius", "Smooth Stroke Radius", "Minimum distance from last point before stroke continues", 10.0f, 10.0f, 200.0f),
|
||||
MAKE_FLOAT("smooth_stroke_factor", "Smooth Stroke Factor", "", 0.5f, 0.5f, 0.99f),
|
||||
MAKE_FLOAT_EX("rate", "Rate", "", 0.5, 0.0001f, 10000.0f, 0.01f, 1.0f),
|
||||
MAKE_FLOAT("flow", "Flow", "Amount of paint that is applied per stroke sample", 0.0f, 0.0f, 1.0f),
|
||||
MAKE_FLOAT("wet_mix", "Wet Mix", "Amount of paint that is picked from the surface into the brush color", 0.0f, 0.0f, 1.0f),
|
||||
MAKE_FLOAT("wet_persistence", "Wet Persistence", "Amount of wet paint that stays in the brush after applying paint to the surface", 0.0f, 0.0f, 1.0f),
|
||||
MAKE_FLOAT("density", "Density", "Amount of random elements that are going to be affected by the brush", 0.0f, 0.0f, 1.0f),
|
||||
MAKE_FLOAT("tip_scale_x", "Tip Scale X", "Scale of the brush tip in the X axis", 0.0f, 0.0f, 1.0f),
|
||||
MAKE_FLOAT("dash_ratio", "Dash Ratio", "Ratio of samples in a cycle that the brush is enabled", 0.0f, 0.0f, 1.0f),
|
||||
MAKE_FLOAT_EX("plane_offset", "Plane Offset", "Adjust plane on which the brush acts towards or away from the object surface", 0.0f, -2.0f, 2.0f, -0.5f, 0.5f),
|
||||
MAKE_BOOL("original_normal", "Original Normal", "When locked keep using normal of surface where stroke was initiated", false),
|
||||
MAKE_BOOL("original_plane", "Original Plane", "When locked keep using the plane origin of surface where stroke was initiated", false),
|
||||
MAKE_BOOL("use_weighted_smooth", "Weight By Area", "Weight by face area to get a smoother result", true),
|
||||
MAKE_BOOL("preserve_faceset_boundary", "Keep FSet Boundary", "Preserve face set boundaries", true),
|
||||
MAKE_BOOL("hard_edge_mode", "Hard Edge Mode", "Forces all brushes into hard edge face set mode (sets face set slide to 0)", false),
|
||||
MAKE_BOOL("grab_silhouette", "Grab Silhouette", "Grabs trying to automask the silhouette of the object", false),
|
||||
};
|
||||
|
||||
/* clang-format on */
|
||||
|
@ -439,9 +449,10 @@ ATTR_NO_OPT static bool check_builtin_init()
|
|||
|
||||
do_builtin_init = false;
|
||||
|
||||
for (int i = 0; i < brush_builtin_channel_len; i++) {
|
||||
BKE_brush_channeltype_rna_check(brush_builtin_channels + i);
|
||||
}
|
||||
// can't do this here, since we can't lookup icon ids in blenkernel
|
||||
// for (int i = 0; i < brush_builtin_channel_len; i++) {
|
||||
// BKE_brush_channeltype_rna_check(brush_builtin_channels + i);
|
||||
//}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -494,30 +505,30 @@ typedef struct BrushSettingsMap {
|
|||
/* This lookup table is used convert data to/from brush channels
|
||||
and the old settings fields in Brush*/
|
||||
static BrushSettingsMap brush_settings_map[] = {
|
||||
DEF(size, RADIUS, INT, FLOAT)
|
||||
DEF(alpha, STRENGTH, FLOAT, FLOAT)
|
||||
DEF(autosmooth_factor, AUTOSMOOTH, FLOAT, FLOAT)
|
||||
DEF(size, radius, INT, FLOAT)
|
||||
DEF(alpha, strength, FLOAT, FLOAT)
|
||||
DEF(autosmooth_factor, autosmooth, FLOAT, FLOAT)
|
||||
DEF(autosmooth_projection, SMOOTH_PROJECTION, FLOAT, FLOAT)
|
||||
DEF(topology_rake_projection, TOPOLOGY_RAKE_PROJECTION, FLOAT, FLOAT)
|
||||
DEF(topology_rake_radius_factor, TOPOLOGY_RAKE_RADIUS_SCALE, FLOAT, FLOAT)
|
||||
DEF(topology_rake_spacing, TOPOLOGY_RAKE_SPACING, INT, FLOAT)
|
||||
DEF(topology_rake_factor, TOPOLOGY_RAKE, FLOAT, FLOAT)
|
||||
DEF(autosmooth_fset_slide, FSET_SLIDE, FLOAT, FLOAT)
|
||||
DEF(boundary_smooth_factor, BOUNDARY_SMOOTH, FLOAT, FLOAT)
|
||||
DEF(autosmooth_radius_factor, AUTOSMOOTH_RADIUS_SCALE, FLOAT, FLOAT)
|
||||
DEF(normal_weight, NORMAL_WEIGHT, FLOAT, FLOAT)
|
||||
DEF(rake_factor, RAKE_FACTOR, FLOAT, FLOAT)
|
||||
DEF(weight, WEIGHT, FLOAT, FLOAT)
|
||||
DEF(jitter, JITTER, FLOAT, FLOAT)
|
||||
DEF(topology_rake_projection, topology_rake_projection, FLOAT, FLOAT)
|
||||
DEF(topology_rake_radius_factor, topology_rake_radius_scale, FLOAT, FLOAT)
|
||||
DEF(topology_rake_spacing, topology_rake_spacing, INT, FLOAT)
|
||||
DEF(topology_rake_factor, topology_rake, FLOAT, FLOAT)
|
||||
DEF(autosmooth_fset_slide, fset_slide, FLOAT, FLOAT)
|
||||
DEF(boundary_smooth_factor, boundary_smooth, FLOAT, FLOAT)
|
||||
DEF(autosmooth_radius_factor, autosmooth_radius_scale, FLOAT, FLOAT)
|
||||
DEF(normal_weight, normal_weight, FLOAT, FLOAT)
|
||||
DEF(rake_factor, rake_factor, FLOAT, FLOAT)
|
||||
DEF(weight, weight, FLOAT, FLOAT)
|
||||
DEF(jitter, jitter, FLOAT, FLOAT)
|
||||
DEF(jitter_absolute, JITTER_ABSOLITE, INT, INT)
|
||||
DEF(smooth_stroke_radius, SMOOTH_STROKE_RADIUS, INT, FLOAT)
|
||||
DEF(smooth_stroke_factor, SMOOTH_STROKE_FACTOR, FLOAT, FLOAT)
|
||||
DEF(rate, RATE, FLOAT, FLOAT)
|
||||
DEF(flow, FLOW, FLOAT, FLOAT)
|
||||
DEF(wet_mix, WET_MIX, FLOAT, FLOAT)
|
||||
DEF(wet_persistence, WET_PERSISTENCE, FLOAT, FLOAT)
|
||||
DEF(density, DENSITY, FLOAT, FLOAT)
|
||||
DEF(tip_scale_x, TIP_SCALE_X, FLOAT, FLOAT)
|
||||
DEF(smooth_stroke_radius, smooth_stroke_radius, INT, FLOAT)
|
||||
DEF(smooth_stroke_factor, smooth_stroke_factor, FLOAT, FLOAT)
|
||||
DEF(rate, rate, FLOAT, FLOAT)
|
||||
DEF(flow, flow, FLOAT, FLOAT)
|
||||
DEF(wet_mix, wet_mix, FLOAT, FLOAT)
|
||||
DEF(wet_persistence, wet_persistence, FLOAT, FLOAT)
|
||||
DEF(density, density, FLOAT, FLOAT)
|
||||
DEF(tip_scale_x, tip_scale_x, FLOAT, FLOAT)
|
||||
};
|
||||
static const int brush_settings_map_len = ARRAY_SIZE(brush_settings_map);
|
||||
|
||||
|
@ -538,13 +549,14 @@ typedef struct BrushFlagMap {
|
|||
/* This lookup table is like brush_settings_map except it converts
|
||||
individual bitflags instead of whole struct members.*/
|
||||
BrushFlagMap brush_flags_map[] = {
|
||||
DEF(flag, ORIGINAL_NORMAL, BRUSH_ORIGINAL_NORMAL)
|
||||
DEF(flag, ORIGINAL_PLANE, BRUSH_ORIGINAL_PLANE)
|
||||
DEF(flag, ACCUMULATE, BRUSH_ACCUMULATE)
|
||||
DEF(flag2, USE_WEIGHTED_SMOOTH, BRUSH_SMOOTH_USE_AREA_WEIGHT)
|
||||
DEF(flag2, PRESERVE_FACESET_BOUNDARY, BRUSH_SMOOTH_PRESERVE_FACE_SETS)
|
||||
DEF(flag2, HARD_EDGE_MODE, BRUSH_HARD_EDGE_MODE)
|
||||
DEF(flag2, GRAB_SILHOUETTE, BRUSH_GRAB_SILHOUETTE)
|
||||
DEF(flag, original_normal, BRUSH_ORIGINAL_NORMAL)
|
||||
DEF(flag, original_plane, BRUSH_ORIGINAL_PLANE)
|
||||
DEF(flag, accumulate, BRUSH_ACCUMULATE)
|
||||
DEF(flag2, use_weighted_smooth, BRUSH_SMOOTH_USE_AREA_WEIGHT)
|
||||
DEF(flag2, preserve_faceset_boundary, BRUSH_SMOOTH_PRESERVE_FACE_SETS)
|
||||
DEF(flag2, hard_edge_mode, BRUSH_HARD_EDGE_MODE)
|
||||
DEF(flag2, grab_silhouette, BRUSH_GRAB_SILHOUETTE)
|
||||
DEF(flag, direction, BRUSH_DIR_IN)
|
||||
};
|
||||
int brush_flags_map_len = ARRAY_SIZE(brush_flags_map);
|
||||
|
||||
|
@ -707,53 +719,55 @@ void BKE_brush_builtin_patch(Brush *brush, int tool)
|
|||
|
||||
BrushChannelSet *chset = brush->channels;
|
||||
|
||||
ADDCH("RADIUS");
|
||||
ADDCH("SPACING");
|
||||
ADDCH("STRENGTH");
|
||||
ADDCH("radius");
|
||||
ADDCH("spacing");
|
||||
ADDCH("strength");
|
||||
|
||||
ADDCH("AUTOSMOOTH");
|
||||
ADDCH("AUTOSMOOTH_RADIUS_SCALE");
|
||||
ADDCH("AUTOSMOOTH_SPACING");
|
||||
ADDCH("AUTOSMOOTH_USE_SPACING");
|
||||
ADDCH("AUTOSMOOTH_PROJECTION");
|
||||
ADDCH("autosmooth");
|
||||
ADDCH("autosmooth_radius_scale");
|
||||
ADDCH("autosmooth_spacing");
|
||||
ADDCH("autosmooth_use_spacing");
|
||||
ADDCH("autosmooth_projection");
|
||||
|
||||
ADDCH("TOPOLOGY_RAKE");
|
||||
ADDCH("TOPOLOGY_RAKE_MODE");
|
||||
ADDCH("TOPOLOGY_RAKE_RADIUS_SCALE");
|
||||
ADDCH("TOPOLOGY_RAKE_USE_SPACING");
|
||||
ADDCH("TOPOLOGY_RAKE_SPACING");
|
||||
ADDCH("TOPOLOGY_RAKE_PROJECTION");
|
||||
ADDCH("topology_rake");
|
||||
ADDCH("topology_rake_mode");
|
||||
ADDCH("topology_rake_radius_scale");
|
||||
ADDCH("topology_rake_use_spacing");
|
||||
ADDCH("topology_rake_spacing");
|
||||
ADDCH("topology_rake_projection");
|
||||
|
||||
ADDCH("HARDNESS");
|
||||
ADDCH("TIP_ROUNDNESS");
|
||||
ADDCH("NORMAL_RADIUS_FACTOR");
|
||||
ADDCH("hardness");
|
||||
ADDCH("tip_roundness");
|
||||
ADDCH("normal_radius_factor");
|
||||
|
||||
ADDCH("AUTOMASKING");
|
||||
ADDCH("automasking");
|
||||
|
||||
ADDCH("DYNTOPO_DISABLED");
|
||||
ADDCH("DYNTOPO_DETAIL_RANGE");
|
||||
ADDCH("DYNTOPO_OPS");
|
||||
ADDCH("dyntopo_disabled");
|
||||
ADDCH("dyntopo_detail_range");
|
||||
ADDCH("dyntopo_ops");
|
||||
|
||||
ADDCH("ACCUMULATE");
|
||||
ADDCH("ORIGINAL_NORMAL");
|
||||
ADDCH("ORIGINAL_PLANE");
|
||||
ADDCH("JITTER");
|
||||
ADDCH("JITTER_ABSOLUTE");
|
||||
ADDCH("USE_WEIGHTED_SMOOTH");
|
||||
ADDCH("PRESERVE_FACESET_BOUNDARY");
|
||||
ADDCH("HARD_EDGE_MODE");
|
||||
ADDCH("GRAB_SILHOUETTE");
|
||||
ADDCH("accumulate");
|
||||
ADDCH("original_normal");
|
||||
ADDCH("original_plane");
|
||||
ADDCH("jitter");
|
||||
ADDCH("jitter_absolute");
|
||||
ADDCH("use_weighted_smooth");
|
||||
ADDCH("preserve_faceset_boundary");
|
||||
ADDCH("hard_edge_mode");
|
||||
ADDCH("grab_silhouette");
|
||||
|
||||
ADDCH("PROJECTION");
|
||||
ADDCH("BOUNDARY_SMOOTH");
|
||||
ADDCH("FSET_SLIDE");
|
||||
ADDCH("projection");
|
||||
ADDCH("boundary_smooth");
|
||||
ADDCH("fset_slide");
|
||||
|
||||
ADDCH("direction");
|
||||
|
||||
switch (tool) {
|
||||
case SCULPT_TOOL_DRAW: {
|
||||
break;
|
||||
}
|
||||
case SCULPT_TOOL_SLIDE_RELAX:
|
||||
ADDCH("SLIDE_DEFORM_TYPE");
|
||||
ADDCH("slide_deform_type");
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -781,51 +795,51 @@ void BKE_brush_builtin_create(Brush *brush, int tool)
|
|||
|
||||
BKE_brush_builtin_patch(brush, tool);
|
||||
|
||||
GETCH("STRENGTH")->flag |= BRUSH_CHANNEL_INHERIT;
|
||||
GETCH("RADIUS")->flag |= BRUSH_CHANNEL_INHERIT;
|
||||
GETCH("strength")->flag |= BRUSH_CHANNEL_INHERIT;
|
||||
GETCH("radius")->flag |= BRUSH_CHANNEL_INHERIT;
|
||||
|
||||
switch (tool) {
|
||||
case SCULPT_TOOL_DRAW: {
|
||||
break;
|
||||
}
|
||||
case SCULPT_TOOL_DRAW_SHARP:
|
||||
GETCH("SPACING")->ivalue = 5;
|
||||
GETCH("RADIUS")->mappings[BRUSH_MAPPING_PRESSURE].blendmode = true;
|
||||
GETCH("spacing")->ivalue = 5;
|
||||
GETCH("radius")->mappings[BRUSH_MAPPING_PRESSURE].blendmode = true;
|
||||
break;
|
||||
case SCULPT_TOOL_DISPLACEMENT_ERASER:
|
||||
case SCULPT_TOOL_FAIRING:
|
||||
case SCULPT_TOOL_SCENE_PROJECT:
|
||||
GETCH("SPACING")->ivalue = 10;
|
||||
GETCH("STRENGTH")->fvalue = 1.0f;
|
||||
GETCH("DYNTOPO_DISABLED")->ivalue = 1;
|
||||
GETCH("spacing")->ivalue = 10;
|
||||
GETCH("strength")->fvalue = 1.0f;
|
||||
GETCH("dyntopo_disabled")->ivalue = 1;
|
||||
break;
|
||||
case SCULPT_TOOL_SLIDE_RELAX:
|
||||
GETCH("SPACING")->ivalue = 10;
|
||||
GETCH("STRENGTH")->fvalue = 1.0f;
|
||||
GETCH("DYNTOPO_DISABLED")->ivalue = 1;
|
||||
GETCH("SLIDE_DEFORM_TYPE")->ivalue = BRUSH_SLIDE_DEFORM_DRAG;
|
||||
GETCH("spacing")->ivalue = 10;
|
||||
GETCH("strength")->fvalue = 1.0f;
|
||||
GETCH("dyntopo_disabled")->ivalue = 1;
|
||||
GETCH("slide_deform_type")->ivalue = BRUSH_SLIDE_DEFORM_DRAG;
|
||||
break;
|
||||
case SCULPT_TOOL_CLAY:
|
||||
GETCH("RADIUS")->mappings[BRUSH_MAPPING_PRESSURE].flag |= BRUSH_MAPPING_ENABLED;
|
||||
GETCH("SPACING")->ivalue = 3;
|
||||
GETCH("AUTOSMOOTH")->fvalue = 0.25f;
|
||||
GETCH("NORMAL_RADIUS_FACTOR")->fvalue = 0.75f;
|
||||
GETCH("HARDNESS")->fvalue = 0.65;
|
||||
GETCH("radius")->mappings[BRUSH_MAPPING_PRESSURE].flag |= BRUSH_MAPPING_ENABLED;
|
||||
GETCH("spacing")->ivalue = 3;
|
||||
GETCH("autosmooth")->fvalue = 0.25f;
|
||||
GETCH("normal_radius_factor")->fvalue = 0.75f;
|
||||
GETCH("hardness")->fvalue = 0.65;
|
||||
break;
|
||||
case SCULPT_TOOL_TWIST:
|
||||
GETCH("STRENGTH")->fvalue = 0.5f;
|
||||
GETCH("NORMAL_RADIUS_FACTOR")->fvalue = 1.0f;
|
||||
GETCH("SPACING")->ivalue = 6;
|
||||
GETCH("HARDNESS")->fvalue = 0.5;
|
||||
GETCH("strength")->fvalue = 0.5f;
|
||||
GETCH("normal_radius_factor")->fvalue = 1.0f;
|
||||
GETCH("spacing")->ivalue = 6;
|
||||
GETCH("hardness")->fvalue = 0.5;
|
||||
break;
|
||||
case SCULPT_TOOL_CLAY_STRIPS: {
|
||||
GETCH("RADIUS")->mappings[BRUSH_MAPPING_PRESSURE].flag |= BRUSH_MAPPING_ENABLED;
|
||||
GETCH("TIP_ROUNDNESS")->fvalue = 0.18f;
|
||||
GETCH("NORMAL_RADIUS_FACTOR")->fvalue = 1.35f;
|
||||
GETCH("STRENGTH")->fvalue = 0.8f;
|
||||
GETCH("ACCUMULATE")->ivalue = 1;
|
||||
GETCH("radius")->mappings[BRUSH_MAPPING_PRESSURE].flag |= BRUSH_MAPPING_ENABLED;
|
||||
GETCH("tip_roundness")->fvalue = 0.18f;
|
||||
GETCH("normal_radius_factor")->fvalue = 1.35f;
|
||||
GETCH("strength")->fvalue = 0.8f;
|
||||
GETCH("accumulate")->ivalue = 1;
|
||||
|
||||
CurveMapping *curve = &GETCH("RADIUS")->mappings[BRUSH_MAPPING_PRESSURE].curve;
|
||||
CurveMapping *curve = &GETCH("radius")->mappings[BRUSH_MAPPING_PRESSURE].curve;
|
||||
CurveMap *cuma = curve->cm;
|
||||
|
||||
cuma->curve[0].x = 0.0f;
|
||||
|
@ -862,12 +876,12 @@ void BKE_brush_init_toolsettings(Sculpt *sd)
|
|||
|
||||
BrushChannelSet *chset = sd->channels = BKE_brush_channelset_create();
|
||||
|
||||
ADDCH("RADIUS");
|
||||
ADDCH("STRENGTH");
|
||||
ADDCH("AUTOMASKING");
|
||||
ADDCH("TOPOLOGY_RAKE_MODE");
|
||||
ADDCH("DYNTOPO_DISABLED");
|
||||
ADDCH("DYNTOPO_DETAIL_RANGE");
|
||||
ADDCH("radius");
|
||||
ADDCH("strength");
|
||||
ADDCH("automasking");
|
||||
ADDCH("topology_rake_mode");
|
||||
ADDCH("dyntopo_disabled");
|
||||
ADDCH("dyntopo_detail_range");
|
||||
|
||||
namestack_pop();
|
||||
}
|
||||
|
|
|
@ -1066,7 +1066,8 @@ static void scene_blend_read_data(BlendDataReader *reader, ID *id)
|
|||
|
||||
if (sce->toolsettings->sculpt) {
|
||||
// make sure radius exists in the toolsettings brush channel set
|
||||
BKE_brush_channelset_ensure_builtin(sce->toolsettings->sculpt->channels, "RADIUS");
|
||||
BKE_brush_channelset_ensure_builtin(sce->toolsettings->sculpt->channels, "radius");
|
||||
BKE_brush_channelset_ensure_builtin(sce->toolsettings->sculpt->channels, "strength");
|
||||
}
|
||||
|
||||
/* relink grease pencil interpolation curves */
|
||||
|
|
|
@ -8846,7 +8846,7 @@ ATTR_NO_OPT static void SCULPT_run_command_list(
|
|||
/* With these options enabled not all required nodes are inside the original brush radius, so
|
||||
* the brush can produce artifacts in some situations. */
|
||||
if (cmd->tool == SCULPT_TOOL_DRAW &&
|
||||
BKE_brush_channelset_get_int(cmd->params_final, "ORIGINAL_NORMAL")) {
|
||||
BKE_brush_channelset_get_int(cmd->params_final, "original_normal")) {
|
||||
radius_scale = MAX2(radius_scale, 2.0f);
|
||||
}
|
||||
|
||||
|
@ -8862,13 +8862,13 @@ ATTR_NO_OPT static void SCULPT_run_command_list(
|
|||
}
|
||||
|
||||
float radius = BKE_brush_channelset_get_float(
|
||||
ss->cache->channels_final, "RADIUS", &ss->cache->input_mapping);
|
||||
ss->cache->channels_final, "radius", &ss->cache->input_mapping);
|
||||
|
||||
radius_max = max_ff(radius_max, radius);
|
||||
}
|
||||
|
||||
float ratio = radius_max / BKE_brush_channelset_get_float(
|
||||
ss->cache->channels_final, "RADIUS", &ss->cache->input_mapping);
|
||||
ss->cache->channels_final, "radius", &ss->cache->input_mapping);
|
||||
|
||||
ss->cache->radius = start_radius * ratio;
|
||||
ss->cache->radius_squared = start_radius * start_radius * ratio * ratio;
|
||||
|
@ -9011,7 +9011,7 @@ ATTR_NO_OPT static void SCULPT_run_command_list(
|
|||
|
||||
ss->cache->brush = brush2;
|
||||
ss->cache->bstrength = BKE_brush_channelset_get_float(
|
||||
cmd->params_final, "STRENGTH", &ss->cache->input_mapping);
|
||||
cmd->params_final, "strength", &ss->cache->input_mapping);
|
||||
|
||||
// Load parameters into brush2 for compatibility with old code
|
||||
BKE_brush_channelset_compat_load(cmd->params_final, brush2, false);
|
||||
|
@ -11239,6 +11239,16 @@ void sculpt_stroke_update_step(bContext *C, struct PaintStroke *stroke, PointerR
|
|||
BKE_brush_channelset_compat_load(ss->cache->channels_final, brush, false);
|
||||
BKE_brush_channelset_to_unified_settings(ss->cache->channels_final, ups);
|
||||
|
||||
ss->cache->bstrength = BKE_brush_channelset_get_float(
|
||||
ss->cache->channels_final, "strength", &ss->cache->input_mapping);
|
||||
|
||||
if (ss->cache->invert) {
|
||||
brush->alpha = -brush->alpha;
|
||||
ss->cache->bstrength = -ss->cache->bstrength;
|
||||
|
||||
BKE_brush_channelset_set_float(ss->cache->channels_final, "strength", ss->cache->bstrength);
|
||||
}
|
||||
|
||||
ss->cache->stroke_distance = stroke->stroke_distance;
|
||||
ss->cache->stroke_distance_t = stroke->stroke_distance_t;
|
||||
ss->cache->stroke = stroke;
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
#include "DNA_sculpt_brush_types.h"
|
||||
#include "WM_types.h"
|
||||
|
||||
static EnumPropertyItem null_enum[2] = {{0, "null", 0, 0}, {-1, NULL, -1, NULL, NULL}};
|
||||
static EnumPropertyItem null_enum[2] = {{0, "null", 0, 0}, {0, NULL, 0, NULL, NULL}};
|
||||
|
||||
#ifdef RNA_RUNTIME
|
||||
|
||||
|
@ -205,6 +205,25 @@ int rna_BrushChannel_enum_value_set(PointerRNA *ptr, int val)
|
|||
return 1;
|
||||
}
|
||||
|
||||
extern EnumPropertyItem *rna_enum_icon_items;
|
||||
|
||||
int lookup_icon_id(const char *icon)
|
||||
{
|
||||
EnumPropertyItem *item = rna_enum_icon_items;
|
||||
int i = 0;
|
||||
|
||||
while (item->identifier) {
|
||||
if (STREQ(item->identifier, icon)) {
|
||||
return i;
|
||||
}
|
||||
|
||||
item++;
|
||||
i++;
|
||||
}
|
||||
|
||||
return ICON_NONE;
|
||||
}
|
||||
|
||||
ATTR_NO_OPT const EnumPropertyItem *rna_BrushChannel_enum_value_get_items(struct bContext *C,
|
||||
PointerRNA *ptr,
|
||||
PropertyRNA *prop,
|
||||
|
@ -216,7 +235,7 @@ ATTR_NO_OPT const EnumPropertyItem *rna_BrushChannel_enum_value_get_items(struct
|
|||
return null_enum;
|
||||
}
|
||||
|
||||
BKE_brush_channeltype_rna_check(ch->def);
|
||||
BKE_brush_channeltype_rna_check(ch->def, lookup_icon_id);
|
||||
|
||||
return ch->def->rna_enumdef;
|
||||
}
|
||||
|
@ -229,7 +248,7 @@ static EnumPropertyItem mapping_type_items[] = {
|
|||
{BRUSH_MAPPING_YTILT, "YTILT", ICON_NONE, "Y Tilt"},
|
||||
{BRUSH_MAPPING_ANGLE, "ANGLE", ICON_NONE, "Angle"},
|
||||
{BRUSH_MAPPING_SPEED, "SPEED", ICON_NONE, "Speed"},
|
||||
{-1, NULL, -1, -1},
|
||||
{0, NULL, 0, NULL, NULL},
|
||||
};
|
||||
|
||||
void RNA_def_brush_mapping(BlenderRNA *brna)
|
||||
|
@ -274,7 +293,7 @@ EnumPropertyItem channel_types[] = {{BRUSH_CHANNEL_FLOAT, "FLOAT", ICON_NONE, "F
|
|||
{BRUSH_CHANNEL_BOOL, "BOOL", ICON_NONE, "Boolean"},
|
||||
{BRUSH_CHANNEL_VEC3, "VEC3", ICON_NONE, "Color3"},
|
||||
{BRUSH_CHANNEL_VEC4, "VEC4", ICON_NONE, "Color4"},
|
||||
{-1, NULL, -1, NULL}};
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
void RNA_def_brush_channel(BlenderRNA *brna)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue