28#include "RNA_prototypes.hh"
91 const IndexRange points = points_by_curve[curve_i];
92 for (
const int64_t point_i : points) {
93 const float vgroup_weight = vgroup_weights[point_i];
94 if (vgroup_weight <= 0.0f) {
98 const float curve_input = points.
size() >= 2 ?
105 if (use_uniform_opacity) {
106 opacities.
span[point_i] = std::clamp(omd.
color_factor * curve_factor, 0.0f, 1.0f);
108 else if (use_weight_as_factor) {
110 opacities.
span[point_i] = std::clamp(curve_factor * vgroup_weight, 0.0f, 1.0f);
114 opacities.
span[point_i] = std::clamp(
115 opacities.
span[point_i] + (omd.
color_factor * curve_factor - 1.0f) * vgroup_weight,
143 const IndexRange points = points_by_curve[curve_i];
144 const float vgroup_weight_first = vgroup_weights[points.
first()];
145 float stroke_weight = vgroup_weight_first;
146 if (use_vgroup_opacity) {
147 if (points.
is_empty() || (stroke_weight <= 0.0f)) {
148 stroke_weight = 1.0f;
150 fill_opacities.
span[curve_i] = std::clamp(stroke_weight, 0.0f, 1.0f);
153 if (!points.
is_empty() && (stroke_weight > 0.0f)) {
154 fill_opacities.
span[curve_i] = std::clamp(omd.
color_factor * stroke_weight, 0.0f, 1.0f);
171 softness.
span[curve_i] =
186 ctx->
object, curves, omd->influence, mask_memory);
188 switch (omd->color_mode) {
212 if (grease_pencil ==
nullptr) {
218 *grease_pencil, omd->influence, mask_memory);
219 const int frame = grease_pencil->
runtime->eval_frame;
221 *grease_pencil, layer_mask, frame);
248 const char *text = (use_uniform_opacity) ?
IFACE_(
"Opacity") :
IFACE_(
"Opacity Factor");
251 row->
active_set(!use_weight_as_factor || use_uniform_opacity);
253 if (!use_uniform_opacity) {
261 C,
ptr,
"open_influence_panel",
IFACE_(
"Influence")))
295 "GreasePencilOpacity",
297 "GreasePencilOpacityModifierData",
299 &RNA_GreasePencilOpacityModifier,
Low-level operations for curves.
Low-level operations for grease pencil.
void(*)(void *user_data, Object *ob, ID **idpoin, LibraryForeachIDCallbackFlag cb_flag) IDWalkFunc
void BKE_modifier_copydata_generic(const ModifierData *md, ModifierData *md_dst, int flag)
@ eModifierTypeFlag_SupportsMapping
@ eModifierTypeFlag_AcceptsGreasePencil
@ eModifierTypeFlag_EnableInEditmode
@ eModifierTypeFlag_SupportsEditmode
#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_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
ModifierTypeInfo modifierType_GreasePencilOpacity
PanelType * modifier_panel_register(ARegionType *region_type, ModifierType type, PanelDrawFn draw)
PointerRNA * modifier_panel_get_property_pointers(Panel *panel, PointerRNA *r_ob_ptr)
void modifier_error_message_draw(uiLayout *layout, PointerRNA *ptr)
constexpr int64_t first() const
constexpr int64_t size() const
constexpr bool is_empty() const
static VArray from_single(T value, const int64_t size)
OffsetIndices< int > points_by_curve() const
MutableAttributeAccessor attributes_for_write()
GSpanAttributeWriter lookup_or_add_for_write_span(StringRef attribute_id, AttrDomain domain, AttrType data_type, const AttributeInit &initializer=AttributeInitDefaultValue())
bke::CurvesGeometry & strokes_for_write()
void foreach_index(Fn &&fn) const
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_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)
static IndexMask get_filtered_layer_mask(const GreasePencil &grease_pencil, const std::optional< StringRef > tree_node_name_filter, const std::optional< int > layer_pass_filter, const bool layer_filter_invert, const bool layer_pass_filter_invert, IndexMaskMemory &memory)
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, bke::GreasePencilDrawingEditHints *edit_hints)
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
PanelLayout panel_prop(const bContext *C, PointerRNA *open_prop_owner, blender::StringRefNull open_prop_name)
void active_set(bool active)
uiLayout & row(bool align)
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)