BMesh: add use_shapekey to BMesh transform operators
Currently unused, needed for symmetrize to support shape keys.
This commit is contained in:
parent
5370a7dd40
commit
4150facd61
|
@ -326,6 +326,7 @@ static BMOpDefine bmo_mirror_def = {
|
|||
{"mirror_u", BMO_OP_SLOT_BOOL}, /* mirror UVs across the u axis */
|
||||
{"mirror_v", BMO_OP_SLOT_BOOL}, /* mirror UVs across the v axis */
|
||||
{"mirror_udim", BMO_OP_SLOT_BOOL}, /* mirror UVs in each tile */
|
||||
{"use_shapekey", BMO_OP_SLOT_BOOL}, /* Transform shape keys too. */
|
||||
{{'\0'}},
|
||||
},
|
||||
/* slots_out */
|
||||
|
@ -758,6 +759,7 @@ static BMOpDefine bmo_rotate_def = {
|
|||
{"matrix", BMO_OP_SLOT_MAT}, /* matrix defining rotation */
|
||||
{"verts", BMO_OP_SLOT_ELEMENT_BUF, {BM_VERT}}, /* input vertices */
|
||||
{"space", BMO_OP_SLOT_MAT}, /* matrix to define the space (typically object matrix) */
|
||||
{"use_shapekey", BMO_OP_SLOT_BOOL}, /* Transform shape keys too. */
|
||||
{{'\0'}},
|
||||
},
|
||||
{{{'\0'}}}, /* no output */
|
||||
|
@ -776,6 +778,7 @@ static BMOpDefine bmo_translate_def = {
|
|||
{{"vec", BMO_OP_SLOT_VEC}, /* translation offset */
|
||||
{"space", BMO_OP_SLOT_MAT}, /* matrix to define the space (typically object matrix) */
|
||||
{"verts", BMO_OP_SLOT_ELEMENT_BUF, {BM_VERT}}, /* input vertices */
|
||||
{"use_shapekey", BMO_OP_SLOT_BOOL}, /* Transform shape keys too. */
|
||||
{{'\0'}},
|
||||
},
|
||||
{{{'\0'}}}, /* no output */
|
||||
|
@ -794,6 +797,7 @@ static BMOpDefine bmo_scale_def = {
|
|||
{{"vec", BMO_OP_SLOT_VEC}, /* scale factor */
|
||||
{"space", BMO_OP_SLOT_MAT}, /* matrix to define the space (typically object matrix) */
|
||||
{"verts", BMO_OP_SLOT_ELEMENT_BUF, {BM_VERT}}, /* input vertices */
|
||||
{"use_shapekey", BMO_OP_SLOT_BOOL}, /* Transform shape keys too. */
|
||||
{{'\0'}},
|
||||
},
|
||||
{{{'\0'}}}, /* no output */
|
||||
|
@ -814,6 +818,7 @@ static BMOpDefine bmo_transform_def = {
|
|||
{{"matrix", BMO_OP_SLOT_MAT}, /* transform matrix */
|
||||
{"space", BMO_OP_SLOT_MAT}, /* matrix to define the space (typically object matrix) */
|
||||
{"verts", BMO_OP_SLOT_ELEMENT_BUF, {BM_VERT}}, /* input vertices */
|
||||
{"use_shapekey", BMO_OP_SLOT_BOOL}, /* Transform shape keys too. */
|
||||
{{'\0'}},
|
||||
},
|
||||
{{{'\0'}}}, /* no output */
|
||||
|
@ -2072,6 +2077,7 @@ static BMOpDefine bmo_symmetrize_def = {
|
|||
{{"input", BMO_OP_SLOT_ELEMENT_BUF, {BM_VERT | BM_EDGE | BM_FACE}}, /* input geometry */
|
||||
{"direction", BMO_OP_SLOT_INT, {(int)BMO_OP_SLOT_SUBTYPE_INT_ENUM}, bmo_enum_axis_neg_xyz_and_xyz}, /* axis to use */
|
||||
{"dist", BMO_OP_SLOT_FLT}, /* minimum distance */
|
||||
{"use_shapekey", BMO_OP_SLOT_BOOL}, /* Transform shape keys too. */
|
||||
{{'\0'}},
|
||||
},
|
||||
/* slots_out */
|
||||
|
|
|
@ -55,7 +55,15 @@ void bmo_mirror_exec(BMesh *bm, BMOperator *op)
|
|||
|
||||
/* feed old data to transform bmo */
|
||||
scale[axis] = -1.0f;
|
||||
BMO_op_callf(bm, op->flag, "scale verts=%fv vec=%v space=%s", ELE_NEW, scale, op, "matrix");
|
||||
BMO_op_callf(bm,
|
||||
op->flag,
|
||||
"scale verts=%fv vec=%v space=%s use_shapekey=%s",
|
||||
ELE_NEW,
|
||||
scale,
|
||||
op,
|
||||
"matrix",
|
||||
op,
|
||||
"use_shapekey");
|
||||
|
||||
BMO_op_init(bm, &weldop, op->flag, "weld_verts");
|
||||
|
||||
|
|
|
@ -76,7 +76,14 @@ void bmo_symmetrize_exec(BMesh *bm, BMOperator *op)
|
|||
BMO_slot_buffer_flag_enable(bm, op_bisect.slots_out, "geom.out", BM_ALL_NOLOOP, ELE_OUT);
|
||||
BMO_slot_buffer_flag_enable(bm, op_dupe.slots_out, "geom.out", BM_ALL_NOLOOP, ELE_OUT);
|
||||
|
||||
BMO_op_callf(bm, op->flag, "scale verts=%S vec=%v", &op_dupe, "geom.out", scale);
|
||||
BMO_op_callf(bm,
|
||||
op->flag,
|
||||
"scale verts=%S vec=%v use_shapekey=%s",
|
||||
&op_dupe,
|
||||
"geom.out",
|
||||
scale,
|
||||
op,
|
||||
"use_shapekey");
|
||||
|
||||
/* important 'flip_multires' is disabled,
|
||||
* otherwise multi-res data will be reversed, see: T47788 */
|
||||
|
|
|
@ -46,12 +46,17 @@ void bmo_create_vert_exec(BMesh *bm, BMOperator *op)
|
|||
BMO_slot_buffer_from_enabled_flag(bm, op, op->slots_out, "vert.out", BM_VERT, ELE_NEW);
|
||||
}
|
||||
|
||||
void bmo_transform_exec(BMesh *UNUSED(bm), BMOperator *op)
|
||||
void bmo_transform_exec(BMesh *bm, BMOperator *op)
|
||||
{
|
||||
BMOIter iter;
|
||||
BMVert *v;
|
||||
float mat[4][4], mat_space[4][4], imat_space[4][4];
|
||||
|
||||
const uint shape_keys_len = BMO_slot_bool_get(op->slots_in, "use_shapekey") ?
|
||||
CustomData_number_of_layers(&bm->vdata, CD_SHAPEKEY) :
|
||||
0;
|
||||
const uint cd_shape_key_offset = CustomData_get_offset(&bm->vdata, CD_SHAPEKEY);
|
||||
|
||||
BMO_slot_mat4_get(op->slots_in, "matrix", mat);
|
||||
BMO_slot_mat4_get(op->slots_in, "space", mat_space);
|
||||
|
||||
|
@ -62,6 +67,13 @@ void bmo_transform_exec(BMesh *UNUSED(bm), BMOperator *op)
|
|||
|
||||
BMO_ITER (v, &iter, op->slots_in, "verts", BM_VERT) {
|
||||
mul_m4_v3(mat, v->co);
|
||||
|
||||
if (shape_keys_len != 0) {
|
||||
float(*co_dst)[3] = BM_ELEM_CD_GET_VOID_P(v, cd_shape_key_offset);
|
||||
for (int i = 0; i < shape_keys_len; i++, co_dst++) {
|
||||
mul_m4_v3(mat, *co_dst);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -74,8 +86,16 @@ void bmo_translate_exec(BMesh *bm, BMOperator *op)
|
|||
unit_m4(mat);
|
||||
copy_v3_v3(mat[3], vec);
|
||||
|
||||
BMO_op_callf(
|
||||
bm, op->flag, "transform matrix=%m4 space=%s verts=%s", mat, op, "space", op, "verts");
|
||||
BMO_op_callf(bm,
|
||||
op->flag,
|
||||
"transform matrix=%m4 space=%s verts=%s use_shapekey=%s",
|
||||
mat,
|
||||
op,
|
||||
"space",
|
||||
op,
|
||||
"verts",
|
||||
op,
|
||||
"use_shapekey");
|
||||
}
|
||||
|
||||
void bmo_scale_exec(BMesh *bm, BMOperator *op)
|
||||
|
@ -89,8 +109,16 @@ void bmo_scale_exec(BMesh *bm, BMOperator *op)
|
|||
mat[1][1] = vec[1];
|
||||
mat[2][2] = vec[2];
|
||||
|
||||
BMO_op_callf(
|
||||
bm, op->flag, "transform matrix=%m3 space=%s verts=%s", mat, op, "space", op, "verts");
|
||||
BMO_op_callf(bm,
|
||||
op->flag,
|
||||
"transform matrix=%m3 space=%s verts=%s use_shapekey=%s",
|
||||
mat,
|
||||
op,
|
||||
"space",
|
||||
op,
|
||||
"verts",
|
||||
op,
|
||||
"use_shapekey");
|
||||
}
|
||||
|
||||
void bmo_rotate_exec(BMesh *bm, BMOperator *op)
|
||||
|
@ -102,8 +130,16 @@ void bmo_rotate_exec(BMesh *bm, BMOperator *op)
|
|||
BMO_slot_mat4_get(op->slots_in, "matrix", mat);
|
||||
transform_pivot_set_m4(mat, center);
|
||||
|
||||
BMO_op_callf(
|
||||
bm, op->flag, "transform matrix=%m4 space=%s verts=%s", mat, op, "space", op, "verts");
|
||||
BMO_op_callf(bm,
|
||||
op->flag,
|
||||
"transform matrix=%m4 space=%s verts=%s use_shapekey=%s",
|
||||
mat,
|
||||
op,
|
||||
"space",
|
||||
op,
|
||||
"verts",
|
||||
op,
|
||||
"use_shapekey");
|
||||
}
|
||||
|
||||
void bmo_reverse_faces_exec(BMesh *bm, BMOperator *op)
|
||||
|
|
Loading…
Reference in New Issue