36#include "RNA_prototypes.hh"
94 if (amd->object !=
nullptr) {
136 std::optional<Span<float3>> old_positions,
137 std::optional<MutableSpan<float3x3>> deform_mats,
141 const IndexRange points = points_by_curve[curve_i];
142 std::optional<Span<float3>> old_positions_for_curve;
144 old_positions_for_curve = old_positions->
slice(points);
146 std::optional<MutableSpan<float3x3>> deform_mats_for_curve;
148 deform_mats_for_curve = deform_mats->
slice(points);
153 positions.
slice(points),
154 old_positions_for_curve,
155 deform_mats_for_curve,
156 dverts.
slice(points),
158 amd.influence.vertex_group_name);
170 CurveType::CURVE_TYPE_BEZIER);
171 if (has_bezier_curves) {
175 if (edit_hints && edit_hints->
positions()) {
177 std::optional<MutableSpan<float3x3>> deform_mats =
204 std::optional<MutableSpan<float3x3>> deform_mats;
216 if (edit_hints && edit_hints->
positions() &&
240 const int frame = grease_pencil.
runtime->eval_frame;
247 if (!hints->drawing_hints) {
248 hints->drawing_hints.emplace(hints->grease_pencil_id_orig.layers().size());
250 edit_hints = *hints->drawing_hints;
255 const IndexMask layer_mask = get_filtered_layer_mask(grease_pencil, amd->influence, mask_memory);
257 grease_pencil, layer_mask, frame);
263 modify_curves(*md, *ctx, *info.drawing, &edit_hints[info.layer_index]);
310 "GreasePencilArmature",
312 "GreasePencilArmatureModifierData",
314 &RNA_GreasePencilArmatureModifier,
void BKE_armature_deform_coords_with_curves(const Object &ob_arm, const Object &ob_target, const ListBase *defbase, blender::MutableSpan< blender::float3 > vert_coords, std::optional< blender::Span< blender::float3 > > vert_coords_prev, std::optional< blender::MutableSpan< blender::float3x3 > > vert_deform_mats, blender::Span< MDeformVert > dverts, int deformflag, blender::StringRefNull defgrp_name)
Low-level operations for curves.
Low-level operations for grease pencil.
General operations, lookup, etc. for materials.
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)
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
@ eModifierType_GreasePencilArmature
ModifierTypeInfo modifierType_GreasePencilArmature
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)
BMesh const char void * data
const void * data() const
GSpan get_internal_span() const
const CPPType & type() const
void materialize(void *dst) const
constexpr MutableSpan slice(const int64_t start, const int64_t size) const
constexpr bool is_empty() const
GAttributeReader lookup(const StringRef attribute_id) const
MutableSpan< float3 > positions_for_write()
OffsetIndices< int > points_by_curve() const
Span< MDeformVert > deform_verts() const
Span< float3 > positions() const
bool has_curve_with_type(CurveType type) const
AttributeAccessor attributes() const
std::unique_ptr< GreasePencilEditHints > grease_pencil_edit_hints_
static void remember_deformed_positions_if_necessary(GeometrySet &geometry)
std::optional< MutableSpan< float3 > > positions_for_write()
std::optional< Span< float3 > > positions() const
std::optional< Array< float3x3 > > deform_mats
bke::CurvesGeometry & strokes_for_write()
const bke::CurvesGeometry & strokes() const
void tag_positions_changed()
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)
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 ensure_no_bezier_curves(Drawing &drawing)
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 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 ImplicitSharingPtrAndData save_shared_attribute(const bke::GAttributeReader &attribute)
static void free_data(ModifierData *md)
static void panel_register(ARegionType *region_type)
static void update_depsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
VecBase< float, 3 > float3
static bool is_disabled(const Scene *, ModifierData *md, bool)
static void blend_read(BlendDataReader *reader, ModifierData *md)
ListBase vertex_group_names
GreasePencilRuntimeHandle * runtime
static MatBase identity()
const ImplicitSharingInfo * sharing_info
GeometryComponent & get_component_for_write(GeometryComponent::Type component_type)
bool has_component() const
bool has_grease_pencil() const
GreasePencil * get_grease_pencil_for_write()
uiLayout & column(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)