37#include "RNA_prototypes.hh"
43 const float uv_src[2],
44 const float warp_mat[4][4])
46 float tuv[3] = {0.0f};
106 const int defgrp_index =
data->defgrp_index;
113 for (
l = 0;
l < face.
size();
l++, mluv++) {
114 const int vert_i = face_verts[
l];
116 const float weight =
data->invert_vgroup ?
125 for (
l = 0;
l < face.
size();
l++, mluv++) {
137 float warp_mat[4][4];
138 const int axis_u = umd->
axis_u;
139 const int axis_v = umd->
axis_v;
150 float imat_dst[4][4];
151 float shuf_mat[4][4];
162 float mat_cent[4][4];
163 float imat_cent[4][4];
166 mat_cent[3][axis_u] = umd->
center[0];
167 mat_cent[3][axis_v] = umd->
center[1];
175 const int shuf_indices[4] = {axis_u, axis_v, -1, 3};
187 const float scale[3] = {umd->
scale[0], umd->
scale[1], 1.0f};
207 data.corner_verts = corner_verts;
210 data.defgrp_index = defgrp_index;
211 data.warp_mat = warp_mat;
212 data.invert_vgroup = invert_vgroup;
219 mesh->
runtime->is_original_bmesh =
false;
259 layout->
prop_search(
ptr,
"uv_layer", &obj_data_ptr,
"uv_layers", std::nullopt, ICON_GROUP_UVS);
273 col->prop_search(
ptr,
"bone_from", &warp_obj_data_ptr,
"bones", std::nullopt, ICON_BONE_DATA);
280 col->prop_search(
ptr,
"bone_to", &warp_obj_data_ptr,
"bones", std::nullopt, ICON_BONE_DATA);
311 "UVWarpModifierData",
Blender kernel action and pose functionality.
bPoseChannel * BKE_pose_channel_find_name(const bPose *pose, const char *name)
CustomData interface, see also DNA_customdata_types.h.
void CustomData_validate_layer_name(const CustomData *data, eCustomDataType type, blender::StringRef name, char *outname)
bool CustomData_has_layer(const CustomData *data, eCustomDataType type)
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_EnableInEditmode
@ eModifierTypeFlag_SupportsEditmode
@ eModifierTypeFlag_AcceptsMesh
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
void translate_m4(float mat[4][4], float Tx, float Ty, float Tz)
void rescale_m4(float mat[4][4], const float scale[3])
void mul_m4_v3(const float M[4][4], float r[3])
void copy_m4_m4(float m1[4][4], const float m2[4][4])
void shuffle_m4(float R[4][4], const int index[4])
bool invert_m4_m4(float inverse[4][4], const float mat[4][4])
void rotate_m4(float mat[4][4], char axis, float angle)
void transpose_m4(float R[4][4])
void unit_m4(float m[4][4])
void interp_v2_v2v2(float r[2], const float a[2], const float b[2], float t)
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE bool is_zero_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT
void BLI_task_parallel_range(int start, int stop, void *userdata, TaskParallelRangeFunc func, const TaskParallelSettings *settings)
BLI_INLINE void BLI_parallel_range_settings_defaults(TaskParallelSettings *settings)
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
#define BLT_I18NCONTEXT_MODIFIER
#define CTX_IFACE_(context, msgid)
void DEG_add_depends_on_transform_relation(DepsNodeHandle *node_handle, const char *description)
#define MAX_CUSTOMDATA_LAYER_NAME
#define CD_MASK_MDEFORMVERT
#define DNA_struct_default_get(struct_name)
@ MOD_UVWARP_INVERT_VGROUP
Object is a sort of wrapper for general info.
static void init_data(ModifierData *md)
static void panel_register(ARegionType *region_type)
static void required_data_mask(ModifierData *, CustomData_MeshMasks *r_cddata_masks)
static void panel_draw(const bContext *, Panel *panel)
static void foreach_ID_link(ModifierData *md, Object *ob, IDWalkFunc walk, void *user_data)
static Mesh * modify_mesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)
void modifier_vgroup_ui(uiLayout *layout, PointerRNA *ptr, PointerRNA *ob_ptr, const StringRefNull vgroup_prop, const std::optional< StringRefNull > invert_vgroup_prop, const std::optional< StringRefNull > text)
PanelType * modifier_subpanel_register(ARegionType *region_type, const char *name, const char *label, PanelDrawFn draw_header, PanelDrawFn draw, PanelType *parent)
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 MOD_depsgraph_update_object_bone_relation(DepsNodeHandle *node, Object *object, const char *bonename, const char *description)
void MOD_get_vgroup(const Object *ob, const Mesh *mesh, const char *name, const MDeformVert **dvert, int *defgrp_index)
static void init_data(ModifierData *md)
static void panel_register(ARegionType *region_type)
static void matrix_from_obj_pchan(float mat[4][4], Object *ob, const char *bonename)
static Mesh * modify_mesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)
static void uv_warp_compute(void *__restrict userdata, const int i, const TaskParallelTLS *__restrict)
static void uv_warp_from_mat4_pair(float uv_dst[2], const float uv_src[2], const float warp_mat[4][4])
static void panel_draw(const bContext *, Panel *panel)
static void required_data_mask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks)
static void foreach_ID_link(ModifierData *md, Object *ob, IDWalkFunc walk, void *user_data)
ModifierTypeInfo modifierType_UVWarp
static void update_depsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
static void transform_panel_draw(const bContext *, Panel *panel)
BMesh const char void * data
ATTR_WARN_UNUSED_RESULT const BMLoop * l
constexpr int64_t size() const
constexpr int64_t start() const
GSpanAttributeWriter lookup_or_add_for_write_span(StringRef attribute_id, AttrDomain domain, AttrType data_type, const AttributeInit &initializer=AttributeInitDefaultValue())
static void update_depsgraph(tGraphSliderOp *gso)
VecBase< float, 2 > float2
PointerRNA RNA_pointer_get(PointerRNA *ptr, const char *name)
bool RNA_pointer_is_null(const PointerRNA *ptr)
int RNA_enum_get(PointerRNA *ptr, const char *name)
MeshRuntimeHandle * runtime
blender::Span< int > corner_verts
blender::OffsetIndices< int > faces
blender::MutableSpan< blender::float2 > uv_map
const MDeformVert * dvert
struct Object * object_dst
struct Object * object_src
MutableVArraySpan< T > span
uiLayout & column(bool align)
void prop_search(PointerRNA *ptr, PropertyRNA *prop, PointerRNA *searchptr, PropertyRNA *searchprop, PropertyRNA *item_searchpropname, std::optional< blender::StringRefNull > name, int icon, bool results_are_suggestions)
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)