42#include "RNA_prototypes.hh"
75 if (smd->cache_data) {
77 MEM_delete(smd->cache_data);
98 if (smd->target ==
nullptr || smd->target->type !=
OB_MESH) {
101 if (smd->aux_target !=
nullptr && smd->aux_target->type !=
OB_MESH) {
111 if (smd->target !=
nullptr) {
120 if (smd->aux_target !=
nullptr) {
163 const IndexRange points = points_by_curve[curve_i];
173 const bool smooth_ends =
false;
174 const bool keep_shape =
true;
199 smd.
cache_data = MEM_new<ShrinkwrapTreeData>(__func__);
218 if (smd.target == ctx->
object || smd.aux_target == ctx->
object) {
225 const int frame = grease_pencil.
runtime->eval_frame;
228 if (!smd.cache_data) {
234 grease_pencil, smd.influence, mask_memory);
237 grease_pencil, layer_mask, frame);
257 if (
ELEM(wrap_method,
271 row->
prop(
ptr,
"use_project_x", toggles_flag, std::nullopt, ICON_NONE);
272 row->
prop(
ptr,
"use_project_y", toggles_flag, std::nullopt, ICON_NONE);
273 row->
prop(
ptr,
"use_project_z", toggles_flag, std::nullopt, ICON_NONE);
297 C,
ptr,
"open_influence_panel",
IFACE_(
"Influence")))
330 "GreasePencilShrinkwrap",
332 "GreasePencilShrinkwrapModifierData",
334 &RNA_GreasePencilShrinkwrapModifier,
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
Mesh * BKE_modifier_get_evaluated_mesh_from_evaluated_object(Object *ob_eval)
void BKE_modifier_copydata_generic(const ModifierData *md, ModifierData *md_dst, int flag)
@ eModifierTypeFlag_SupportsMapping
@ eModifierTypeFlag_AcceptsGreasePencil
@ eModifierTypeFlag_EnableInEditmode
@ eModifierTypeFlag_SupportsEditmode
void BKE_shrinkwrap_free_tree(ShrinkwrapTreeData *data)
void shrinkwrapParams_deform(const ShrinkwrapParams ¶ms, Object &object, ShrinkwrapTreeData &tree, blender::Span< MDeformVert > dvert, int defgrp_index, blender::MutableSpan< blender::float3 > positions)
bool BKE_shrinkwrap_init_tree(ShrinkwrapTreeData *data, Mesh *mesh, int shrinkType, int shrinkMode, bool force_normals)
#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)
@ DAG_EVAL_NEED_SHRINKWRAP_BOUNDARY
void DEG_add_depends_on_transform_relation(DepsNodeHandle *node_handle, const char *description)
void DEG_add_object_relation(DepsNodeHandle *node_handle, Object *object, eDepsObjectComponentType component, const char *description)
void DEG_add_special_eval_flag(DepsNodeHandle *handle, ID *id, uint32_t flag)
T * DEG_get_evaluated(const Depsgraph *depsgraph, T *id)
#define DNA_struct_default_get(struct_name)
@ MOD_SHRINKWRAP_TARGET_PROJECT
@ MOD_SHRINKWRAP_NEAREST_SURFACE
@ GREASE_PENCIL_INFLUENCE_INVERT_VERTEX_GROUP
@ eModifierType_GreasePencilShrinkwrap
ModifierTypeInfo modifierType_GreasePencilShrinkwrap
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)
@ UI_ITEM_R_FORCE_BLANK_DECORATE
constexpr MutableSpan slice(const int64_t start, const int64_t size) const
constexpr Span slice(int64_t start, int64_t size) const
constexpr bool is_empty() const
static VArray from_single(T value, const int64_t size)
MutableSpan< float3 > positions_for_write()
OffsetIndices< int > points_by_curve() const
Span< MDeformVert > deform_verts() const
VArray< bool > cyclic() const
bke::CurvesGeometry & strokes_for_write()
const bke::CurvesGeometry & strokes() const
void tag_positions_changed()
void foreach_index(Fn &&fn) const
void smooth_curve_attribute(const IndexMask &curves_to_smooth, const OffsetIndices< int > points_by_curve, const VArray< bool > &point_selection, const VArray< bool > &cyclic, int iterations, float influence, bool smooth_ends, bool keep_shape, GMutableSpan attribute_data)
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)
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 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 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 free_data(ModifierData *md)
static void panel_register(ARegionType *region_type)
static void modify_drawing(const GreasePencilArrayModifierData &mmd, const ModifierEvalContext &ctx, bke::greasepencil::Drawing &drawing)
static void update_depsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
static void ensure_shrinkwrap_cache_data(GreasePencilShrinkwrapModifierData &smd, const ModifierEvalContext &ctx)
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)
char vertex_group_name[64]
struct ShrinkwrapTreeData * cache_data
struct Object * aux_target
GreasePencilModifierInfluenceData influence
GreasePencilRuntimeHandle * runtime
bool has_grease_pencil() const
GreasePencil * get_grease_pencil_for_write()
PanelLayout panel_prop(const bContext *C, PointerRNA *open_prop_owner, blender::StringRefNull open_prop_name)
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)