28#include "RNA_prototypes.hh"
35using bke::greasepencil::Drawing;
37using bke::greasepencil::Layer;
90 const IndexRange points = points_by_curve[curve_i];
91 for (
const int64_t point_i : points) {
92 const float curve_input = points.
size() >= 2 ?
93 (
float(point_i - points.first()) /
float(points.size() - 1)) :
99 if (use_uniform_opacity) {
100 opacities.
span[point_i] = std::clamp(omd.
color_factor * curve_factor, 0.0f, 1.0f);
102 else if (use_weight_as_factor) {
104 opacities.
span[point_i] = std::clamp(
105 omd.
color_factor * curve_factor * vgroup_weights[point_i], 0.0f, 1.0f);
109 const float vgroup_weight = vgroup_weights[point_i];
110 const float vgroup_influence = invert_vertex_group ? 1.0f - vgroup_weight : vgroup_weight;
111 opacities.
span[point_i] = std::clamp(
112 opacities.
span[point_i] + (omd.
color_factor * curve_factor - 1.0f) * vgroup_influence,
141 if (use_vgroup_opacity) {
143 const IndexRange points = points_by_curve[curve_i];
144 const float stroke_weight = points.
is_empty() ? 1.0f : vgroup_weights[points.first()];
145 const float stroke_influence = invert_vertex_group ? 1.0f - stroke_weight : stroke_weight;
147 fill_opacities.
span[curve_i] = std::clamp(stroke_influence, 0.0f, 1.0f);
166 softness.
span[curve_i] =
181 ctx->
object, curves, omd->influence, mask_memory);
183 switch (omd->color_mode) {
207 if (grease_pencil ==
nullptr) {
213 *grease_pencil, omd->influence, mask_memory);
214 const int frame = grease_pencil->
runtime->eval_frame;
216 *grease_pencil, layer_mask, frame);
243 const char *text = (use_uniform_opacity) ?
IFACE_(
"Opacity") :
IFACE_(
"Opacity Factor");
248 if (!use_uniform_opacity) {
256 C, layout,
ptr,
"open_influence_panel",
IFACE_(
"Influence")))
290 "GreasePencilOpacity",
292 "GreasePencilOpacityModifierData",
294 &RNA_GreasePencilOpacityModifier,
Low-level operations for curves.
Low-level operations for grease pencil.
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 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 DNA_struct_default_get(struct_name)
@ GREASE_PENCIL_INFLUENCE_INVERT_VERTEX_GROUP
@ GREASE_PENCIL_INFLUENCE_USE_CUSTOM_CURVE
@ MOD_GREASE_PENCIL_OPACITY_USE_WEIGHT_AS_FACTOR
@ MOD_GREASE_PENCIL_OPACITY_USE_UNIFORM_OPACITY
GreasePencilModifierColorMode
@ MOD_GREASE_PENCIL_COLOR_FILL
@ MOD_GREASE_PENCIL_COLOR_STROKE
@ MOD_GREASE_PENCIL_COLOR_BOTH
@ MOD_GREASE_PENCIL_COLOR_HARDNESS
@ eModifierType_GreasePencilOpacity
struct GreasePencilOpacityModifierData GreasePencilOpacityModifierData
ModifierTypeInfo modifierType_GreasePencilOpacity
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)
PanelLayout uiLayoutPanelProp(const bContext *C, uiLayout *layout, PointerRNA *open_prop_owner, const char *open_prop_name)
void uiItemR(uiLayout *layout, PointerRNA *ptr, const char *propname, eUI_Item_Flag flag, const char *name, int icon)
bke::CurvesGeometry & strokes_for_write()
void foreach_index(Fn &&fn) const
draw_view in_light_buf[] float
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 void modify_curves(ModifierData &md, const ModifierEvalContext &ctx, Drawing &drawing)
static void modify_softness(const GreasePencilOpacityModifierData &omd, bke::CurvesGeometry &curves, const IndexMask &curves_mask)
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 void free_data(ModifierData *md)
static void panel_register(ARegionType *region_type)
static void modify_stroke_color(Object &ob, const GreasePencilColorModifierData &cmd, bke::CurvesGeometry &curves, const IndexMask &curves_mask, const MutableSpan< ColorGeometry4f > vertex_colors)
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)
struct CurveMapping * custom_curve
GreasePencilModifierInfluenceData influence
GreasePencilRuntimeHandle * runtime
GreasePencil * get_grease_pencil_for_write()
MutableVArraySpan< T > span