Cleanup: Move transform_mode_init to transform_mode API
This commit is contained in:
parent
f2224ccfce
commit
ec5fc1adcc
|
@ -25,7 +25,6 @@
|
|||
|
||||
#include "MEM_guardedalloc.h"
|
||||
|
||||
#include "DNA_armature_types.h"
|
||||
#include "DNA_gpencil_types.h"
|
||||
#include "DNA_mask_types.h"
|
||||
#include "DNA_mesh_types.h"
|
||||
|
@ -859,155 +858,6 @@ static void transform_event_xyz_constraint(TransInfo *t, short key_type, char cm
|
|||
}
|
||||
}
|
||||
|
||||
static void transform_mode_init(TransInfo *t, wmOperator *op, int mode)
|
||||
{
|
||||
t->mode = mode;
|
||||
|
||||
switch (mode) {
|
||||
case TFM_TRANSLATION:
|
||||
initTranslation(t);
|
||||
break;
|
||||
case TFM_ROTATION:
|
||||
initRotation(t);
|
||||
break;
|
||||
case TFM_RESIZE:
|
||||
initResize(t);
|
||||
break;
|
||||
case TFM_SKIN_RESIZE:
|
||||
initSkinResize(t);
|
||||
break;
|
||||
case TFM_TOSPHERE:
|
||||
initToSphere(t);
|
||||
break;
|
||||
case TFM_SHEAR:
|
||||
initShear(t);
|
||||
break;
|
||||
case TFM_BEND:
|
||||
initBend(t);
|
||||
break;
|
||||
case TFM_SHRINKFATTEN:
|
||||
initShrinkFatten(t);
|
||||
break;
|
||||
case TFM_TILT:
|
||||
initTilt(t);
|
||||
break;
|
||||
case TFM_CURVE_SHRINKFATTEN:
|
||||
initCurveShrinkFatten(t);
|
||||
break;
|
||||
case TFM_MASK_SHRINKFATTEN:
|
||||
initMaskShrinkFatten(t);
|
||||
break;
|
||||
case TFM_GPENCIL_SHRINKFATTEN:
|
||||
initGPShrinkFatten(t);
|
||||
break;
|
||||
case TFM_TRACKBALL:
|
||||
initTrackball(t);
|
||||
break;
|
||||
case TFM_PUSHPULL:
|
||||
initPushPull(t);
|
||||
break;
|
||||
case TFM_CREASE:
|
||||
initCrease(t);
|
||||
break;
|
||||
case TFM_BONESIZE: { /* used for both B-Bone width (bonesize) as for deform-dist (envelope) */
|
||||
/* Note: we have to pick one, use the active object. */
|
||||
TransDataContainer *tc = TRANS_DATA_CONTAINER_FIRST_OK(t);
|
||||
bArmature *arm = tc->poseobj->data;
|
||||
if (arm->drawtype == ARM_ENVELOPE) {
|
||||
initBoneEnvelope(t);
|
||||
t->mode = TFM_BONE_ENVELOPE_DIST;
|
||||
}
|
||||
else {
|
||||
initBoneSize(t);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TFM_BONE_ENVELOPE:
|
||||
initBoneEnvelope(t);
|
||||
break;
|
||||
case TFM_BONE_ENVELOPE_DIST:
|
||||
initBoneEnvelope(t);
|
||||
t->mode = TFM_BONE_ENVELOPE_DIST;
|
||||
break;
|
||||
case TFM_EDGE_SLIDE:
|
||||
case TFM_VERT_SLIDE: {
|
||||
const bool use_even = (op ? RNA_boolean_get(op->ptr, "use_even") : false);
|
||||
const bool flipped = (op ? RNA_boolean_get(op->ptr, "flipped") : false);
|
||||
const bool use_clamp = (op ? RNA_boolean_get(op->ptr, "use_clamp") : true);
|
||||
if (mode == TFM_EDGE_SLIDE) {
|
||||
const bool use_double_side = (op ? !RNA_boolean_get(op->ptr, "single_side") : true);
|
||||
initEdgeSlide_ex(t, use_double_side, use_even, flipped, use_clamp);
|
||||
}
|
||||
else {
|
||||
initVertSlide_ex(t, use_even, flipped, use_clamp);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TFM_BONE_ROLL:
|
||||
initBoneRoll(t);
|
||||
break;
|
||||
case TFM_TIME_TRANSLATE:
|
||||
initTimeTranslate(t);
|
||||
break;
|
||||
case TFM_TIME_SLIDE:
|
||||
initTimeSlide(t);
|
||||
break;
|
||||
case TFM_TIME_SCALE:
|
||||
initTimeScale(t);
|
||||
break;
|
||||
case TFM_TIME_DUPLICATE:
|
||||
/* same as TFM_TIME_EXTEND, but we need the mode info for later
|
||||
* so that duplicate-culling will work properly
|
||||
*/
|
||||
if (ELEM(t->spacetype, SPACE_GRAPH, SPACE_NLA)) {
|
||||
initTranslation(t);
|
||||
}
|
||||
else {
|
||||
initTimeTranslate(t);
|
||||
}
|
||||
t->mode = mode;
|
||||
break;
|
||||
case TFM_TIME_EXTEND:
|
||||
/* now that transdata has been made, do like for TFM_TIME_TRANSLATE (for most Animation
|
||||
* Editors because they have only 1D transforms for time values) or TFM_TRANSLATION
|
||||
* (for Graph/NLA Editors only since they uses 'standard' transforms to get 2D movement)
|
||||
* depending on which editor this was called from
|
||||
*/
|
||||
if (ELEM(t->spacetype, SPACE_GRAPH, SPACE_NLA)) {
|
||||
initTranslation(t);
|
||||
}
|
||||
else {
|
||||
initTimeTranslate(t);
|
||||
}
|
||||
break;
|
||||
case TFM_BAKE_TIME:
|
||||
initBakeTime(t);
|
||||
break;
|
||||
case TFM_MIRROR:
|
||||
initMirror(t);
|
||||
break;
|
||||
case TFM_BWEIGHT:
|
||||
initBevelWeight(t);
|
||||
break;
|
||||
case TFM_ALIGN:
|
||||
initAlign(t);
|
||||
break;
|
||||
case TFM_SEQ_SLIDE:
|
||||
initSeqSlide(t);
|
||||
break;
|
||||
case TFM_NORMAL_ROTATION:
|
||||
initNormalRotation(t);
|
||||
break;
|
||||
case TFM_GPENCIL_OPACITY:
|
||||
initGPOpacity(t);
|
||||
break;
|
||||
}
|
||||
|
||||
/* TODO(germano): Some of these operations change the `t->mode`.
|
||||
* This can be bad for Redo.
|
||||
* BLI_assert(t->mode == mode); */
|
||||
}
|
||||
|
||||
int transformEvent(TransInfo *t, const wmEvent *event)
|
||||
{
|
||||
char cmode = constraintModeToChar(t);
|
||||
|
|
|
@ -24,8 +24,10 @@
|
|||
#include <stdlib.h>
|
||||
|
||||
#include "DNA_anim_types.h"
|
||||
#include "DNA_armature_types.h"
|
||||
#include "DNA_constraint_types.h"
|
||||
#include "DNA_gpencil_types.h"
|
||||
#include "DNA_windowmanager_types.h"
|
||||
|
||||
#include "BLI_listbase.h"
|
||||
#include "BLI_math.h"
|
||||
|
@ -35,6 +37,8 @@
|
|||
#include "BKE_context.h"
|
||||
#include "BKE_nla.h"
|
||||
|
||||
#include "RNA_access.h"
|
||||
|
||||
#include "ED_screen.h"
|
||||
|
||||
#include "UI_interface.h"
|
||||
|
@ -484,7 +488,7 @@ static void constraintSizeLim(TransInfo *t, TransData *td)
|
|||
}
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/* Transform (Rotaion Utils) */
|
||||
/* Transform (Rotation Utils) */
|
||||
|
||||
/** \name Transform Rotaion Utils
|
||||
* \{ */
|
||||
|
@ -1098,3 +1102,159 @@ void doAnimEdit_SnapFrame(
|
|||
}
|
||||
}
|
||||
/** \} */
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/* Transform Mode API */
|
||||
|
||||
/** \name Transform Frame Utils
|
||||
* \{ */
|
||||
|
||||
void transform_mode_init(TransInfo *t, wmOperator *op, const int mode)
|
||||
{
|
||||
t->mode = mode;
|
||||
|
||||
switch (mode) {
|
||||
case TFM_TRANSLATION:
|
||||
initTranslation(t);
|
||||
break;
|
||||
case TFM_ROTATION:
|
||||
initRotation(t);
|
||||
break;
|
||||
case TFM_RESIZE:
|
||||
initResize(t);
|
||||
break;
|
||||
case TFM_SKIN_RESIZE:
|
||||
initSkinResize(t);
|
||||
break;
|
||||
case TFM_TOSPHERE:
|
||||
initToSphere(t);
|
||||
break;
|
||||
case TFM_SHEAR:
|
||||
initShear(t);
|
||||
break;
|
||||
case TFM_BEND:
|
||||
initBend(t);
|
||||
break;
|
||||
case TFM_SHRINKFATTEN:
|
||||
initShrinkFatten(t);
|
||||
break;
|
||||
case TFM_TILT:
|
||||
initTilt(t);
|
||||
break;
|
||||
case TFM_CURVE_SHRINKFATTEN:
|
||||
initCurveShrinkFatten(t);
|
||||
break;
|
||||
case TFM_MASK_SHRINKFATTEN:
|
||||
initMaskShrinkFatten(t);
|
||||
break;
|
||||
case TFM_GPENCIL_SHRINKFATTEN:
|
||||
initGPShrinkFatten(t);
|
||||
break;
|
||||
case TFM_TRACKBALL:
|
||||
initTrackball(t);
|
||||
break;
|
||||
case TFM_PUSHPULL:
|
||||
initPushPull(t);
|
||||
break;
|
||||
case TFM_CREASE:
|
||||
initCrease(t);
|
||||
break;
|
||||
case TFM_BONESIZE: { /* used for both B-Bone width (bonesize) as for deform-dist (envelope) */
|
||||
/* Note: we have to pick one, use the active object. */
|
||||
TransDataContainer *tc = TRANS_DATA_CONTAINER_FIRST_OK(t);
|
||||
bArmature *arm = tc->poseobj->data;
|
||||
if (arm->drawtype == ARM_ENVELOPE) {
|
||||
initBoneEnvelope(t);
|
||||
t->mode = TFM_BONE_ENVELOPE_DIST;
|
||||
}
|
||||
else {
|
||||
initBoneSize(t);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TFM_BONE_ENVELOPE:
|
||||
initBoneEnvelope(t);
|
||||
break;
|
||||
case TFM_BONE_ENVELOPE_DIST:
|
||||
initBoneEnvelope(t);
|
||||
t->mode = TFM_BONE_ENVELOPE_DIST;
|
||||
break;
|
||||
case TFM_EDGE_SLIDE:
|
||||
case TFM_VERT_SLIDE: {
|
||||
const bool use_even = (op ? RNA_boolean_get(op->ptr, "use_even") : false);
|
||||
const bool flipped = (op ? RNA_boolean_get(op->ptr, "flipped") : false);
|
||||
const bool use_clamp = (op ? RNA_boolean_get(op->ptr, "use_clamp") : true);
|
||||
if (mode == TFM_EDGE_SLIDE) {
|
||||
const bool use_double_side = (op ? !RNA_boolean_get(op->ptr, "single_side") : true);
|
||||
initEdgeSlide_ex(t, use_double_side, use_even, flipped, use_clamp);
|
||||
}
|
||||
else {
|
||||
initVertSlide_ex(t, use_even, flipped, use_clamp);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TFM_BONE_ROLL:
|
||||
initBoneRoll(t);
|
||||
break;
|
||||
case TFM_TIME_TRANSLATE:
|
||||
initTimeTranslate(t);
|
||||
break;
|
||||
case TFM_TIME_SLIDE:
|
||||
initTimeSlide(t);
|
||||
break;
|
||||
case TFM_TIME_SCALE:
|
||||
initTimeScale(t);
|
||||
break;
|
||||
case TFM_TIME_DUPLICATE:
|
||||
/* same as TFM_TIME_EXTEND, but we need the mode info for later
|
||||
* so that duplicate-culling will work properly
|
||||
*/
|
||||
if (ELEM(t->spacetype, SPACE_GRAPH, SPACE_NLA)) {
|
||||
initTranslation(t);
|
||||
}
|
||||
else {
|
||||
initTimeTranslate(t);
|
||||
}
|
||||
break;
|
||||
case TFM_TIME_EXTEND:
|
||||
/* now that transdata has been made, do like for TFM_TIME_TRANSLATE (for most Animation
|
||||
* Editors because they have only 1D transforms for time values) or TFM_TRANSLATION
|
||||
* (for Graph/NLA Editors only since they uses 'standard' transforms to get 2D movement)
|
||||
* depending on which editor this was called from
|
||||
*/
|
||||
if (ELEM(t->spacetype, SPACE_GRAPH, SPACE_NLA)) {
|
||||
initTranslation(t);
|
||||
}
|
||||
else {
|
||||
initTimeTranslate(t);
|
||||
}
|
||||
break;
|
||||
case TFM_BAKE_TIME:
|
||||
initBakeTime(t);
|
||||
break;
|
||||
case TFM_MIRROR:
|
||||
initMirror(t);
|
||||
break;
|
||||
case TFM_BWEIGHT:
|
||||
initBevelWeight(t);
|
||||
break;
|
||||
case TFM_ALIGN:
|
||||
initAlign(t);
|
||||
break;
|
||||
case TFM_SEQ_SLIDE:
|
||||
initSeqSlide(t);
|
||||
break;
|
||||
case TFM_NORMAL_ROTATION:
|
||||
initNormalRotation(t);
|
||||
break;
|
||||
case TFM_GPENCIL_OPACITY:
|
||||
initGPOpacity(t);
|
||||
break;
|
||||
}
|
||||
|
||||
/* TODO(germano): Some of these operations change the `t->mode`.
|
||||
* This can be bad for Redo.
|
||||
* BLI_assert(t->mode == mode); */
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
|
|
@ -30,6 +30,7 @@ struct LinkNode;
|
|||
struct TransInfo;
|
||||
struct TransDataContainer;
|
||||
struct TransData;
|
||||
struct wmOperator;
|
||||
|
||||
/* header of TransDataEdgeSlideVert, TransDataEdgeSlideEdge */
|
||||
typedef struct TransDataGenericSlideVert {
|
||||
|
@ -56,6 +57,7 @@ void ElementResize(TransInfo *t, TransDataContainer *tc, TransData *td, float ma
|
|||
short getAnimEdit_SnapMode(TransInfo *t);
|
||||
void doAnimEdit_SnapFrame(
|
||||
TransInfo *t, TransData *td, TransData2D *td2d, struct AnimData *adt, short autosnap);
|
||||
void transform_mode_init(TransInfo *t, struct wmOperator *op, const int mode);
|
||||
|
||||
/* transform_mode_align.c */
|
||||
void initAlign(TransInfo *t);
|
||||
|
|
Loading…
Reference in New Issue