36#include "RNA_prototypes.hh"
94 if (amd->object !=
nullptr) {
121 CurveType::CURVE_TYPE_BEZIER);
126 if (has_bezier_curves) {
139 const int deformflag = amd.deformflag |
146 ctx.
object, curves, amd.influence, mask_memory);
161 std::optional<MutableSpan<float3>> deform_positions;
162 std::optional<MutableSpan<float3x3>> deform_mats;
167 deform_mats = edit_hints->
deform_mats->as_mutable_span();
174 const IndexRange points = points_by_curve[curve_i];
176 std::optional<Span<float3>> old_positions_for_curve;
177 std::optional<MutableSpan<float3x3>> deform_mats_for_curve;
179 old_positions_for_curve = old_positions.
slice(points);
180 deform_mats_for_curve = deform_mats->
slice(points);
183 if (deform_positions) {
184 if (has_bezier_curves) {
185 const IndexRange orig_points = orig_points_by_curve[curve_i];
189 deform_positions->slice(orig_points),
192 orig_dverts.
as_span().slice(orig_points),
194 amd.influence.vertex_group_name);
200 deform_positions->slice(points),
201 old_positions_for_curve,
202 deform_mats_for_curve,
203 dverts.
slice(points),
205 amd.influence.vertex_group_name);
212 positions.
slice(points),
213 old_positions_for_curve,
214 deform_mats_for_curve,
215 dverts.
slice(points),
217 amd.influence.vertex_group_name);
238 const int frame = grease_pencil.
runtime->eval_frame;
245 if (!hints->drawing_hints) {
246 hints->drawing_hints.emplace(hints->grease_pencil_id_orig.layers().size());
248 edit_hints = *hints->drawing_hints;
253 const IndexMask layer_mask = get_filtered_layer_mask(grease_pencil, amd->influence, mask_memory);
255 grease_pencil, layer_mask, frame);
261 modify_curves(*md, *ctx, *info.drawing, &edit_hints[info.layer_index]);
308 "GreasePencilArmature",
310 "GreasePencilArmatureModifierData",
312 &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)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
BMesh const char void * data
Span< T > as_span() const
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
constexpr Span slice(int64_t start, 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< int > offsets() 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 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)