34 #include "RNA_prototypes.h"
52 bool UNUSED(useRenderParams))
59 if ((cmd->
fac == 0.0f) || flag == 0) {
98 float (*vertexCos)[3],
107 bool has_radius =
false;
110 float fac = cmd->
fac;
111 float facm = 1.0f - fac;
112 const float fac_orig = fac;
113 float vec[3],
center[3] = {0.0f, 0.0f, 0.0f};
114 float mat[4][4], imat[4][4];
144 if (cmd->
radius > FLT_EPSILON) {
162 for (i = 0; i < verts_num; i++) {
172 for (i = 0; i < verts_num; i++) {
198 const float weight = invert_vgroup ?
202 if (weight == 0.0f) {
206 fac = fac_orig * weight;
213 tmp_co[0] = fac * vec[0] *
len + facm * tmp_co[0];
216 tmp_co[1] = fac * vec[1] *
len + facm * tmp_co[1];
219 tmp_co[2] = fac * vec[2] *
len + facm * tmp_co[2];
239 float (*vertexCos)[3],
249 bool has_radius =
false;
251 float fac = cmd->
fac;
252 float facm = 1.0f - fac;
253 const float fac_orig = fac;
254 float min[3],
max[3], bb[8][3];
255 float center[3] = {0.0f, 0.0f, 0.0f};
256 float mat[4][4], imat[4][4];
267 if (cmd->
radius > FLT_EPSILON) {
289 for (i = 0; i < 3; i++) {
295 for (i = 0; i < 3; i++) {
315 for (i = 0; i < verts_num; i++) {
321 for (i = 0; i < verts_num; i++) {
342 bb[0][0] = bb[2][0] = bb[4][0] = bb[6][0] =
min[0];
343 bb[1][0] = bb[3][0] = bb[5][0] = bb[7][0] =
max[0];
344 bb[0][1] = bb[1][1] = bb[4][1] = bb[5][1] =
min[1];
345 bb[2][1] = bb[3][1] = bb[6][1] = bb[7][1] =
max[1];
346 bb[0][2] = bb[1][2] = bb[2][2] = bb[3][2] =
min[2];
347 bb[4][2] = bb[5][2] = bb[6][2] = bb[7][2] =
max[2];
350 for (i = 0; i < verts_num; i++) {
352 float d[3], dmax, apex[3], fbb;
373 const float weight = invert_vgroup ?
377 if (weight == 0.0f) {
381 fac = fac_orig * weight;
395 if (tmp_co[0] > 0.0f) {
398 if (tmp_co[1] > 0.0f) {
401 if (tmp_co[2] > 0.0f) {
409 d[0] = tmp_co[0] / apex[0];
410 d[1] = tmp_co[1] / apex[1];
411 d[2] = tmp_co[2] / apex[2];
427 if (
fabsf(tmp_co[coord]) < FLT_EPSILON) {
433 fbb = apex[coord] / tmp_co[coord];
437 tmp_co[0] = facm * tmp_co[0] + fac * tmp_co[0] * fbb;
440 tmp_co[1] = facm * tmp_co[1] + fac * tmp_co[1] * fbb;
443 tmp_co[2] = facm * tmp_co[2] + fac * tmp_co[2] * fbb;
462 float (*vertexCos)[3],
489 float (*vertexCos)[3],
505 if (mesh_src !=
NULL) {
void BKE_id_free(struct Main *bmain, void *idv)
void BKE_mesh_wrapper_ensure_mdata(struct Mesh *me)
void(* IDWalkFunc)(void *userData, struct Object *ob, struct ID **idpoin, int cb_flag)
@ eModifierTypeFlag_AcceptsCVs
@ eModifierTypeFlag_SupportsEditmode
@ eModifierTypeFlag_AcceptsVertexCosOnly
void BKE_modifier_copydata_generic(const struct ModifierData *md, struct ModifierData *md_dst, int flag)
@ eModifierTypeType_OnlyDeform
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
bool invert_m4_m4(float R[4][4], const float A[4][4])
void mul_m4_v3(const float M[4][4], float r[3])
void mul_v3_m4v3(float r[3], const float M[4][4], const float v[3])
MINLINE float len_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
void minmax_v3v3_v3(float min[3], float max[3], const float vec[3])
MINLINE float normalize_v3(float r[3])
MINLINE void sub_v3_v3(float r[3], const float a[3])
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void add_v3_v3(float r[3], const float a[3])
MINLINE float len_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
#define INIT_MINMAX(min, max)
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
void DEG_add_object_relation(struct DepsNodeHandle *node_handle, struct Object *object, eDepsObjectComponentType component, const char *description)
void DEG_add_modifier_to_transform_relation(struct DepsNodeHandle *node_handle, const char *description)
#define CD_MASK_MDEFORMVERT
#define DNA_struct_default_get(struct_name)
@ MOD_CAST_USE_OB_TRANSFORM
@ MOD_CAST_SIZE_FROM_RADIUS
struct CastModifierData CastModifierData
Object is a sort of wrapper for general info.
NSNotificationCenter * center
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
static void cuboid_do(CastModifierData *cmd, const ModifierEvalContext *UNUSED(ctx), Object *ob, Mesh *mesh, float(*vertexCos)[3], int verts_num)
static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, float(*vertexCos)[3], int verts_num)
static void deformVertsEM(ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *editData, Mesh *mesh, float(*vertexCos)[3], int verts_num)
static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
ModifierTypeInfo modifierType_Cast
static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, bool UNUSED(useRenderParams))
static void foreachIDLink(ModifierData *md, Object *ob, IDWalkFunc walk, void *userData)
static void panel_draw(const bContext *UNUSED(C), Panel *panel)
static void initData(ModifierData *md)
static void sphere_do(CastModifierData *cmd, const ModifierEvalContext *UNUSED(ctx), Object *ob, Mesh *mesh, float(*vertexCos)[3], int verts_num)
static void panelRegister(ARegionType *region_type)
static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks)
PointerRNA * modifier_panel_get_property_pointers(Panel *panel, PointerRNA *r_ob_ptr)
void modifier_panel_end(uiLayout *layout, PointerRNA *ptr)
PanelType * modifier_panel_register(ARegionType *region_type, ModifierType type, PanelDrawFn draw)
void modifier_vgroup_ui(uiLayout *layout, PointerRNA *ptr, PointerRNA *ob_ptr, const char *vgroup_prop, const char *invert_vgroup_prop, const char *text)
Mesh * MOD_deform_mesh_eval_get(Object *ob, struct BMEditMesh *em, Mesh *mesh, const float(*vertexCos)[3], const int verts_num, const bool use_normals, const bool use_orco)
void MOD_get_vgroup(Object *ob, struct Mesh *mesh, const char *name, MDeformVert **dvert, int *defgrp_index)
uiLayout * uiLayoutRowWithHeading(uiLayout *layout, bool align, const char *heading)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
@ UI_ITEM_R_FORCE_BLANK_DECORATE
void uiItemR(uiLayout *layout, struct PointerRNA *ptr, const char *propname, int flag, const char *name, int icon)
PointerRNA RNA_pointer_get(PointerRNA *ptr, const char *name)
bool RNA_pointer_is_null(const PointerRNA *ptr)
struct DepsNodeHandle * node