40#include "RNA_prototypes.hh"
48using bke::greasepencil::Drawing;
61 if (tmd->color_ramp) {
63 CBData *data = tmd->color_ramp->data;
64 data[0].
r = data[0].g = data[0].b = data[0].a = 1.0f;
66 data[1].r = data[1].g = data[1].b = 0.0f;
70 tmd->color_ramp->tot = 2;
85 if (tmd->color_ramp) {
109 return tmd->
object ==
nullptr;
117 if (tmd->object !=
nullptr) {
129 return (input_color.
a == 0.0f && material_color.
a > 0.0f) ? material_color : input_color;
149 const float gradient_factor = std::clamp(
155 const float3 input_rgb = {input_color.
r, input_color.
g, input_color.
b};
175 const VArray<int> stroke_materials = *attributes.lookup_or_default<
int>(
181 auto get_material_color = [&](
const int64_t curve_i) {
188 auto get_point_factor = [&](
const int64_t point_i) {
189 if (use_weight_as_factor) {
190 const float weight = vgroup_weights[point_i];
191 return invert_vertex_group ? 1.0f - weight : weight;
202 const IndexRange points = points_by_curve[curve_i];
203 for (
const int64_t point_i : points) {
207 get_point_factor(point_i));
213 if (tmd.
object ==
nullptr) {
220 const float4x4 matrix = tmd.
object->world_to_object() * ob.object_to_world();
225 const IndexRange points = points_by_curve[curve_i];
226 for (
const int64_t point_i : points) {
232 get_point_factor(point_i));
260 const VArray<int> stroke_materials = *attributes.lookup_or_default<
int>(
266 auto get_material_color = [&](
const int64_t curve_i) {
273 auto get_curve_factor = [&](
const int64_t curve_i) {
274 if (use_weight_as_factor) {
276 const IndexRange points = points_by_curve[curve_i];
277 const float weight = points.
is_empty() ? 1.0f : vgroup_weights[points.first()];
278 return invert_vertex_group ? 1.0f - weight : weight;
288 tmd,
get_base_color(fill_colors[curve_i], material_color), get_curve_factor(curve_i));
296 const float4x4 matrix = tmd.
object->world_to_object() * ob.object_to_world();
301 const IndexRange points = points_by_curve[curve_i];
303 positions[points.first()];
310 get_curve_factor(curve_i));
332 const IndexRange points = points_by_curve[curve_i];
333 for (
const int64_t point_i : points) {
334 opacities.
span[point_i] = std::clamp(
335 opacities.
span[point_i] + tmd.
factor - 1.0f, 0.0f, 1.0f);
349 ctx.
object, curves, tmd.influence, mask_memory);
354 switch (tmd.color_mode) {
383 const int frame = grease_pencil.
runtime->eval_frame;
387 grease_pencil, tmd->influence, mask_memory);
389 grease_pencil, layer_mask, frame);
430 C, layout,
ptr,
"open_influence_panel",
IFACE_(
"Influence")))
452 if (tmd->color_ramp) {
470 "GreasePencilTintModifierData",
472 &RNA_GreasePencilTintModifier,
bool BKE_colorband_evaluate(const ColorBand *coba, float in, float out[4])
ColorBand * BKE_colorband_add(bool rangetype)
void BKE_colorband_init(ColorBand *coba, bool rangetype)
Low-level operations for curves.
Low-level operations for grease pencil.
General operations, lookup, etc. for materials.
struct Material * BKE_object_material_get(struct Object *ob, short act)
void BKE_modifier_copydata_generic(const ModifierData *md, ModifierData *md_dst, int flag)
@ eModifierTypeFlag_SupportsMapping
@ eModifierTypeFlag_AcceptsGreasePencil
@ eModifierTypeFlag_EnableInEditmode
@ eModifierTypeFlag_SupportsEditmode
void(*)(void *user_data, Object *ob, ID **idpoin, int cb_flag) IDWalkFunc
#define BLI_assert_unreachable()
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
#define BLO_write_struct(writer, struct_name, data_ptr)
#define BLO_read_struct(reader, struct_name, ptr_p)
void DEG_add_object_relation(DepsNodeHandle *node_handle, Object *object, eDepsObjectComponentType component, const char *description)
#define DNA_struct_default_get(struct_name)
@ GREASE_PENCIL_INFLUENCE_INVERT_VERTEX_GROUP
@ MOD_GREASE_PENCIL_COLOR_FILL
@ MOD_GREASE_PENCIL_COLOR_STROKE
@ MOD_GREASE_PENCIL_COLOR_BOTH
@ MOD_GREASE_PENCIL_COLOR_HARDNESS
GreasePencilTintModifierMode
@ MOD_GREASE_PENCIL_TINT_UNIFORM
@ MOD_GREASE_PENCIL_TINT_GRADIENT
@ MOD_GREASE_PENCIL_TINT_USE_WEIGHT_AS_FACTOR
@ eModifierType_GreasePencilTint
struct GreasePencilTintModifierData GreasePencilTintModifierData
Read Guarded memory(de)allocation.
ModifierTypeInfo modifierType_GreasePencilTint
void modifier_panel_end(uiLayout *layout, PointerRNA *ptr)
PanelType * modifier_panel_register(ARegionType *region_type, ModifierType type, PanelDrawFn draw)
PointerRNA * modifier_panel_get_property_pointers(Panel *panel, PointerRNA *r_ob_ptr)
void uiLayoutSetActive(uiLayout *layout, bool active)
uiLayout * uiLayoutRow(uiLayout *layout, bool align)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
void uiItemS(uiLayout *layout)
void uiTemplateColorRamp(uiLayout *layout, PointerRNA *ptr, const char *propname, bool expand)
PanelLayout uiLayoutPanelProp(const bContext *C, uiLayout *layout, PointerRNA *open_prop_owner, const char *open_prop_name)
uiLayout * uiLayoutColumn(uiLayout *layout, bool align)
void uiItemR(uiLayout *layout, PointerRNA *ptr, const char *propname, eUI_Item_Flag flag, const char *name, int icon)
MutableAttributeAccessor attributes_for_write()
bke::CurvesGeometry & strokes_for_write()
const bke::CurvesGeometry & strokes() const
MutableSpan< ColorGeometry4f > fill_colors_for_write()
MutableSpan< ColorGeometry4f > vertex_colors_for_write()
void foreach_index(Fn &&fn) const
void *(* MEM_dupallocN)(const void *vmemh)
T safe_divide(const T &a, const T &b)
T length(const VecBase< T, Size > &a)
T interpolate(const T &a, const T &b, const FactorT &t)
VecBase< T, 3 > transform_point(const CartesianBasis &basis, const VecBase< T, 3 > &v)
void read_influence_data(BlendDataReader *reader, GreasePencilModifierInfluenceData *influence_data)
void init_influence_data(GreasePencilModifierInfluenceData *influence_data, const bool has_custom_curve)
static IndexMask get_filtered_layer_mask(const GreasePencil &grease_pencil, const std::optional< StringRef > layer_name_filter, const std::optional< int > layer_pass_filter, const bool layer_filter_invert, const bool layer_pass_filter_invert, IndexMaskMemory &memory)
static IndexMask get_filtered_stroke_mask(const Object *ob, const bke::CurvesGeometry &curves, const Material *material_filter, const std::optional< int > material_pass_filter, const bool material_filter_invert, const bool material_pass_filter_invert, IndexMaskMemory &memory)
void write_influence_data(BlendWriter *writer, const GreasePencilModifierInfluenceData *influence_data)
void draw_vertex_group_settings(const bContext *, uiLayout *layout, PointerRNA *ptr)
VArray< float > get_influence_vertex_weights(const bke::CurvesGeometry &curves, const GreasePencilModifierInfluenceData &influence_data)
Vector< bke::greasepencil::Drawing * > get_drawings_for_write(GreasePencil &grease_pencil, const IndexMask &layer_mask, const int frame)
void draw_material_filter_settings(const bContext *, uiLayout *layout, PointerRNA *ptr)
void draw_layer_filter_settings(const bContext *, uiLayout *layout, PointerRNA *ptr)
void draw_custom_curve_settings(const bContext *, uiLayout *layout, PointerRNA *ptr)
void free_influence_data(GreasePencilModifierInfluenceData *influence_data)
void foreach_influence_ID_link(GreasePencilModifierInfluenceData *influence_data, Object *ob, IDWalkFunc walk, void *user_data)
void copy_influence_data(const GreasePencilModifierInfluenceData *influence_data_src, GreasePencilModifierInfluenceData *influence_data_dst, const int)
void parallel_for_each(Range &&range, const Function &function)
static void copy_data(const ModifierData *md, ModifierData *target, const int flag)
static void blend_write(BlendWriter *writer, const ID *, const ModifierData *md)
static ColorGeometry4f apply_uniform_tint(const GreasePencilTintModifierData &tmd, const ColorGeometry4f &input_color, const float factor)
static void modify_curves(ModifierData &md, const ModifierEvalContext &ctx, Drawing &drawing)
static void init_data(ModifierData *md)
static void foreach_ID_link(ModifierData *md, Object *ob, IDWalkFunc walk, void *user_data)
static void panel_draw(const bContext *C, Panel *panel)
static void modify_geometry_set(ModifierData *md, const ModifierEvalContext *ctx, bke::GeometrySet *geometry_set)
static void modify_fill_color(Object &ob, const GreasePencilColorModifierData &cmd, Drawing &drawing, const IndexMask &curves_mask)
static ColorGeometry4f get_base_color(const ColorGeometry4f &input_color, const ColorGeometry4f &material_color)
static void free_data(ModifierData *md)
static void panel_register(ARegionType *region_type)
static ColorGeometry4f apply_gradient_tint(const GreasePencilTintModifierData &tmd, const float4x4 &matrix, const float3 &position, const ColorGeometry4f &input_color, const float factor)
static void modify_stroke_color(Object &ob, const GreasePencilColorModifierData &cmd, bke::CurvesGeometry &curves, const IndexMask &curves_mask, const MutableSpan< ColorGeometry4f > vertex_colors)
static void modify_opacity(const GreasePencilTintModifierData &tmd, bke::CurvesGeometry &curves, const IndexMask &curves_mask)
static void update_depsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
ColorSceneLinear4f< eAlpha::Premultiplied > ColorGeometry4f
VecBase< float, 3 > float3
static bool is_disabled(const Scene *, ModifierData *md, bool)
static void blend_read(BlendDataReader *reader, ModifierData *md)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
int RNA_enum_get(PointerRNA *ptr, const char *name)
GreasePencilModifierInfluenceData influence
struct ColorBand * color_ramp
GreasePencilRuntimeHandle * runtime
struct MaterialGPencilStyle * gp_style
VecBase< T, 3 > xyz() const
bool has_grease_pencil() const
GreasePencil * get_grease_pencil_for_write()
MutableVArraySpan< T > span