Refactor: rearrange transform mode functions in a 'TransModeInfo' struct #108467
|
@ -1332,11 +1332,12 @@ int transformEvent(TransInfo *t, const wmEvent *event)
|
|||
}
|
||||
|
||||
/* Per transform event, if present */
|
||||
if (t->handleEvent && (!handled ||
|
||||
if (t->mode_info && t->mode_info->handle_event_fn &&
|
||||
(!handled ||
|
||||
/* Needed for vertex slide, see #38756. */
|
||||
(event->type == MOUSEMOVE)))
|
||||
{
|
||||
t->redraw |= t->handleEvent(t, event);
|
||||
t->redraw |= t->mode_info->handle_event_fn(t, event);
|
||||
}
|
||||
|
||||
/* Try to init modal numinput now, if possible. */
|
||||
|
@ -1441,10 +1442,8 @@ static void drawTransformView(const struct bContext *C, ARegion *region, void *a
|
|||
drawPropCircle(C, t);
|
||||
drawSnapping(C, t);
|
||||
|
||||
if (region == t->region) {
|
||||
/* edge slide, vert slide */
|
||||
drawEdgeSlide(t);
|
||||
drawVertSlide(t);
|
||||
if (region == t->region && t->mode_info && t->mode_info->draw_fn) {
|
||||
t->mode_info->draw_fn(t);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2066,8 +2065,8 @@ void transformApply(bContext *C, TransInfo *t)
|
|||
|
||||
if (t->redraw == TREDRAW_HARD) {
|
||||
selectConstraint(t);
|
||||
if (t->transform) {
|
||||
t->transform(t, t->mval); /* calls recalcData() */
|
||||
if (t->mode_info) {
|
||||
t->mode_info->transform_fn(t, t->mval); /* calls recalcData() */
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2143,8 +2142,8 @@ bool checkUseAxisMatrix(TransInfo *t)
|
|||
|
||||
bool transform_apply_matrix(TransInfo *t, float mat[4][4])
|
||||
{
|
||||
if (t->transform_matrix != NULL) {
|
||||
t->transform_matrix(t, mat);
|
||||
if (t->mode_info && t->mode_info->transform_matrix_fn) {
|
||||
t->mode_info->transform_matrix_fn(t, mat);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
|
@ -309,14 +309,6 @@ typedef struct TransSnap {
|
|||
double last;
|
||||
void (*snap_target_fn)(struct TransInfo *, float *);
|
||||
void (*snap_source_fn)(struct TransInfo *);
|
||||
/**
|
||||
* Get the transform distance between two points (used by Closest snap)
|
||||
*
|
||||
* \note Return value can be anything,
|
||||
* where the smallest absolute value defines what's closest.
|
||||
*/
|
||||
float (*snap_mode_distance_fn)(struct TransInfo *t, const float p1[3], const float p2[3]);
|
||||
void (*snap_mode_apply_fn)(struct TransInfo *, float *);
|
||||
|
||||
/**
|
||||
* Re-usable snap context data.
|
||||
|
@ -508,6 +500,11 @@ typedef struct TransInfo {
|
|||
/** TODO: It should be a member of #TransDataContainer. */
|
||||
struct TransConvertTypeInfo *data_type;
|
||||
|
||||
/** Mode indicator as set for the operator.
|
||||
* NOTE: A same `mode_info` can have different `mode`s. */
|
||||
eTfmMode mode;
|
||||
struct TransModeInfo *mode_info;
|
||||
|
||||
/** Current context/options for transform. */
|
||||
eTContext options;
|
||||
/** Generic flags for special behaviors. */
|
||||
|
@ -520,20 +517,6 @@ typedef struct TransInfo {
|
|||
eRedrawFlag redraw;
|
||||
/** Choice of custom cursor with or without a help line from the gizmo to the mouse position. */
|
||||
eTHelpline helpline;
|
||||
/** Current mode. */
|
||||
eTfmMode mode;
|
||||
|
||||
/** Main transform mode function. */
|
||||
void (*transform)(struct TransInfo *, const int[2]);
|
||||
/* Event handler function that determines whether the viewport needs to be redrawn. */
|
||||
eRedrawFlag (*handleEvent)(struct TransInfo *, const struct wmEvent *);
|
||||
|
||||
/**
|
||||
* Optional callback to transform a single matrix.
|
||||
*
|
||||
* \note used by the gizmo to transform the matrix used to position it.
|
||||
*/
|
||||
void (*transform_matrix)(struct TransInfo *t, float mat_xform[4][4]);
|
||||
|
||||
/** Constraint Data. */
|
||||
TransCon con;
|
||||
|
|
|
@ -186,8 +186,7 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
|
|||
copy_v2_v2_int(t->mouse.imval, mval);
|
||||
copy_v2_v2_int(t->con.imval, mval);
|
||||
|
||||
t->transform = NULL;
|
||||
t->handleEvent = NULL;
|
||||
t->mode_info = NULL;
|
||||
|
||||
t->data_len_all = 0;
|
||||
|
||||
|
|
|
@ -1066,141 +1066,92 @@ void ElementResize(const TransInfo *t,
|
|||
/** \name Transform Mode Initialization
|
||||
* \{ */
|
||||
|
||||
static TransModeInfo *mode_info_get(TransInfo *t, const int mode)
|
||||
{
|
||||
switch (mode) {
|
||||
case TFM_TRANSLATION:
|
||||
return &TransMode_translate;
|
||||
case TFM_ROTATION:
|
||||
return &TransMode_rotate;
|
||||
case TFM_RESIZE:
|
||||
return &TransMode_resize;
|
||||
case TFM_SKIN_RESIZE:
|
||||
return &TransMode_skinresize;
|
||||
case TFM_TOSPHERE:
|
||||
return &TransMode_tosphere;
|
||||
case TFM_SHEAR:
|
||||
return &TransMode_shear;
|
||||
case TFM_BEND:
|
||||
return &TransMode_bend;
|
||||
case TFM_SHRINKFATTEN:
|
||||
return &TransMode_shrinkfatten;
|
||||
case TFM_TILT:
|
||||
return &TransMode_tilt;
|
||||
case TFM_CURVE_SHRINKFATTEN:
|
||||
return &TransMode_curveshrinkfatten;
|
||||
case TFM_MASK_SHRINKFATTEN:
|
||||
return &TransMode_maskshrinkfatten;
|
||||
case TFM_GPENCIL_SHRINKFATTEN:
|
||||
return &TransMode_gpshrinkfatten;
|
||||
case TFM_TRACKBALL:
|
||||
return &TransMode_trackball;
|
||||
case TFM_PUSHPULL:
|
||||
return &TransMode_pushpull;
|
||||
case TFM_EDGE_CREASE:
|
||||
return &TransMode_edgecrease;
|
||||
case TFM_VERT_CREASE:
|
||||
return &TransMode_vertcrease;
|
||||
case TFM_BONESIZE:
|
||||
return &TransMode_bboneresize;
|
||||
case TFM_BONE_ENVELOPE:
|
||||
case TFM_BONE_ENVELOPE_DIST:
|
||||
return &TransMode_boneenvelope;
|
||||
case TFM_EDGE_SLIDE:
|
||||
return &TransMode_edgeslide;
|
||||
case TFM_VERT_SLIDE:
|
||||
return &TransMode_vertslide;
|
||||
case TFM_BONE_ROLL:
|
||||
return &TransMode_boneroll;
|
||||
case TFM_TIME_TRANSLATE:
|
||||
return &TransMode_translate;
|
||||
case TFM_TIME_SLIDE:
|
||||
return &TransMode_timeslide;
|
||||
case TFM_TIME_SCALE:
|
||||
return &TransMode_timescale;
|
||||
case TFM_TIME_EXTEND:
|
||||
/* Do 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)) {
|
||||
return &TransMode_translate;
|
||||
}
|
||||
return &TransMode_timetranslate;
|
||||
case TFM_BAKE_TIME:
|
||||
return &TransMode_baketime;
|
||||
case TFM_MIRROR:
|
||||
return &TransMode_mirror;
|
||||
case TFM_BWEIGHT:
|
||||
return &TransMode_bevelweight;
|
||||
case TFM_ALIGN:
|
||||
return &TransMode_align;
|
||||
case TFM_SEQ_SLIDE:
|
||||
return &TransMode_seqslide;
|
||||
case TFM_NORMAL_ROTATION:
|
||||
return &TransMode_rotatenormal;
|
||||
case TFM_GPENCIL_OPACITY:
|
||||
return &TransMode_gpopacity;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void transform_mode_init(TransInfo *t, wmOperator *op, const int mode)
|
||||
{
|
||||
t->mode = mode;
|
||||
t->mode_info = mode_info_get(t, mode);
|
||||
|
||||
switch (mode) {
|
||||
case TFM_TRANSLATION:
|
||||
initTranslation(t);
|
||||
break;
|
||||
case TFM_ROTATION:
|
||||
initRotation(t);
|
||||
break;
|
||||
case TFM_RESIZE: {
|
||||
float mouse_dir_constraint[3];
|
||||
if (op) {
|
||||
PropertyRNA *prop = RNA_struct_find_property(op->ptr, "mouse_dir_constraint");
|
||||
if (prop) {
|
||||
RNA_property_float_get_array(op->ptr, prop, mouse_dir_constraint);
|
||||
}
|
||||
else {
|
||||
/* Resize is expected to have this property. */
|
||||
BLI_assert(!STREQ(op->idname, "TRANSFORM_OT_resize"));
|
||||
}
|
||||
}
|
||||
else {
|
||||
zero_v3(mouse_dir_constraint);
|
||||
}
|
||||
initResize(t, mouse_dir_constraint);
|
||||
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_EDGE_CREASE:
|
||||
initEgdeCrease(t);
|
||||
break;
|
||||
case TFM_VERT_CREASE:
|
||||
initVertCrease(t);
|
||||
break;
|
||||
case TFM_BONESIZE:
|
||||
initBoneSize(t);
|
||||
break;
|
||||
case TFM_BONE_ENVELOPE:
|
||||
case TFM_BONE_ENVELOPE_DIST:
|
||||
initBoneEnvelope(t);
|
||||
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_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;
|
||||
if (t->mode_info) {
|
||||
t->flag |= t->mode_info->flags;
|
||||
t->mode_info->init_fn(t, op);
|
||||
}
|
||||
|
||||
if (t->data_type == &TransConvertType_Mesh) {
|
||||
|
@ -1211,7 +1162,7 @@ void transform_mode_init(TransInfo *t, wmOperator *op, const int mode)
|
|||
|
||||
transform_gizmo_3d_model_from_constraint_and_mode_set(t);
|
||||
|
||||
/* TODO(@germano): Some of these operations change the `t->mode`.
|
||||
/* TODO(@mano-wii): Some of these operations change the `t->mode`.
|
||||
* This can be bad for Redo. */
|
||||
// BLI_assert(t->mode == mode);
|
||||
}
|
||||
|
|
|
@ -16,6 +16,37 @@ struct TransInfo;
|
|||
struct bContext;
|
||||
struct wmOperator;
|
||||
|
||||
typedef struct TransModeInfo {
|
||||
int flags; /* eTFlag */
|
||||
|
||||
void (*init_fn)(TransInfo *, struct wmOperator *);
|
||||
|
||||
/** Main transform mode function. */
|
||||
void (*transform_fn)(TransInfo *, const int[2]);
|
||||
|
||||
/**
|
||||
* Optional callback to transform a single matrix.
|
||||
*
|
||||
* \note used by the gizmo to transform the matrix used to position it.
|
||||
*/
|
||||
void (*transform_matrix_fn)(TransInfo *, float[4][4]);
|
||||
|
||||
/* Event handler function that determines whether the viewport needs to be redrawn. */
|
||||
eRedrawFlag (*handle_event_fn)(TransInfo *, const struct wmEvent *);
|
||||
|
||||
/**
|
||||
* Get the transform distance between two points (used by Closest snap)
|
||||
*
|
||||
* \note Return value can be anything,
|
||||
* where the smallest absolute value defines what's closest.
|
||||
*/
|
||||
float (*snap_distance_fn)(struct TransInfo *t, const float p1[3], const float p2[3]);
|
||||
void (*snap_apply_fn)(struct TransInfo *, float *);
|
||||
|
||||
/** Custom drawing. */
|
||||
void (*draw_fn)(struct TransInfo *);
|
||||
} TransModeInfo;
|
||||
|
||||
/* header of TransDataEdgeSlideVert, TransDataEdgeSlideEdge */
|
||||
typedef struct TransDataGenericSlideVert {
|
||||
struct BMVert *v;
|
||||
|
@ -68,125 +99,120 @@ void transform_mode_default_modal_orientation_set(TransInfo *t, int type);
|
|||
|
||||
/* transform_mode_align.c */
|
||||
|
||||
void initAlign(TransInfo *t);
|
||||
extern TransModeInfo TransMode_align;
|
||||
|
||||
/* transform_mode_baketime.c */
|
||||
|
||||
void initBakeTime(TransInfo *t);
|
||||
extern TransModeInfo TransMode_baketime;
|
||||
|
||||
/* transform_mode_bbone_resize.c */
|
||||
|
||||
void initBoneSize(TransInfo *t);
|
||||
extern TransModeInfo TransMode_bboneresize;
|
||||
|
||||
/* transform_mode_bend.c */
|
||||
|
||||
void initBend(TransInfo *t);
|
||||
extern TransModeInfo TransMode_bend;
|
||||
|
||||
/* transform_mode_boneenvelope.c */
|
||||
|
||||
void initBoneEnvelope(TransInfo *t);
|
||||
extern TransModeInfo TransMode_boneenvelope;
|
||||
|
||||
/* transform_mode_boneroll.c */
|
||||
|
||||
void initBoneRoll(TransInfo *t);
|
||||
extern TransModeInfo TransMode_boneroll;
|
||||
|
||||
/* transform_mode_curveshrinkfatten.c */
|
||||
|
||||
void initCurveShrinkFatten(TransInfo *t);
|
||||
extern TransModeInfo TransMode_curveshrinkfatten;
|
||||
|
||||
/* transform_mode_customdata.c */
|
||||
|
||||
void initEgdeCrease(TransInfo *t);
|
||||
void initVertCrease(TransInfo *t);
|
||||
void initBevelWeight(TransInfo *t);
|
||||
extern TransModeInfo TransMode_edgecrease;
|
||||
extern TransModeInfo TransMode_vertcrease;
|
||||
extern TransModeInfo TransMode_bevelweight;
|
||||
|
||||
/* transform_mode_edge_rotate_normal.c */
|
||||
|
||||
void initNormalRotation(TransInfo *t);
|
||||
extern TransModeInfo TransMode_rotatenormal;
|
||||
|
||||
/* transform_mode_edge_seq_slide.c */
|
||||
|
||||
void initSeqSlide(TransInfo *t);
|
||||
extern TransModeInfo TransMode_seqslide;
|
||||
|
||||
/* transform_mode_edge_slide.c */
|
||||
|
||||
void drawEdgeSlide(TransInfo *t);
|
||||
void initEdgeSlide_ex(
|
||||
TransInfo *t, bool use_double_side, bool use_even, bool flipped, bool use_clamp);
|
||||
void initEdgeSlide(TransInfo *t);
|
||||
extern TransModeInfo TransMode_edgeslide;
|
||||
void transform_mode_edge_slide_reproject_input(TransInfo *t);
|
||||
|
||||
/* transform_mode_gpopacity.c */
|
||||
|
||||
void initGPOpacity(TransInfo *t);
|
||||
extern TransModeInfo TransMode_gpopacity;
|
||||
|
||||
/* transform_mode_gpshrinkfatten.c */
|
||||
|
||||
void initGPShrinkFatten(TransInfo *t);
|
||||
extern TransModeInfo TransMode_gpshrinkfatten;
|
||||
|
||||
/* transform_mode_maskshrinkfatten.c */
|
||||
|
||||
void initMaskShrinkFatten(TransInfo *t);
|
||||
extern TransModeInfo TransMode_maskshrinkfatten;
|
||||
|
||||
/* transform_mode_mirror.c */
|
||||
|
||||
void initMirror(TransInfo *t);
|
||||
extern TransModeInfo TransMode_mirror;
|
||||
|
||||
/* transform_mode_push_pull.c */
|
||||
|
||||
void initPushPull(TransInfo *t);
|
||||
extern TransModeInfo TransMode_pushpull;
|
||||
|
||||
/* transform_mode_resize.c */
|
||||
|
||||
void initResize(TransInfo *t, float mouse_dir_constraint[3]);
|
||||
extern TransModeInfo TransMode_resize;
|
||||
|
||||
/* transform_mode_rotate.c */
|
||||
|
||||
void initRotation(TransInfo *t);
|
||||
extern TransModeInfo TransMode_rotate;
|
||||
|
||||
/* transform_mode_shear.c */
|
||||
|
||||
void initShear(TransInfo *t);
|
||||
extern TransModeInfo TransMode_shear;
|
||||
|
||||
/* transform_mode_shrink_fatten.c */
|
||||
|
||||
void initShrinkFatten(TransInfo *t);
|
||||
extern TransModeInfo TransMode_shrinkfatten;
|
||||
|
||||
/* transform_mode_skin_resize.c */
|
||||
|
||||
void initSkinResize(TransInfo *t);
|
||||
extern TransModeInfo TransMode_skinresize;
|
||||
|
||||
/* transform_mode_tilt.c */
|
||||
|
||||
void initTilt(TransInfo *t);
|
||||
extern TransModeInfo TransMode_tilt;
|
||||
|
||||
/* transform_mode_timescale.c */
|
||||
|
||||
void initTimeScale(TransInfo *t);
|
||||
extern TransModeInfo TransMode_timescale;
|
||||
|
||||
/* transform_mode_timeslide.c */
|
||||
|
||||
void initTimeSlide(TransInfo *t);
|
||||
extern TransModeInfo TransMode_timeslide;
|
||||
|
||||
/* transform_mode_timetranslate.c */
|
||||
|
||||
void initTimeTranslate(TransInfo *t);
|
||||
extern TransModeInfo TransMode_timetranslate;
|
||||
|
||||
/* transform_mode_tosphere.c */
|
||||
|
||||
void initToSphere(TransInfo *t);
|
||||
extern TransModeInfo TransMode_tosphere;
|
||||
|
||||
/* transform_mode_trackball.c */
|
||||
|
||||
void initTrackball(TransInfo *t);
|
||||
extern TransModeInfo TransMode_trackball;
|
||||
|
||||
/* transform_mode_translate.c */
|
||||
|
||||
void initTranslation(TransInfo *t);
|
||||
extern TransModeInfo TransMode_translate;
|
||||
|
||||
/* transform_mode_vert_slide.c */
|
||||
|
||||
void drawVertSlide(TransInfo *t);
|
||||
void initVertSlide_ex(TransInfo *t, bool use_even, bool flipped, bool use_clamp);
|
||||
void initVertSlide(TransInfo *t);
|
||||
extern TransModeInfo TransMode_vertslide;
|
||||
void transform_mode_vert_slide_reproject_input(TransInfo *t);
|
||||
|
|
|
@ -66,13 +66,20 @@ static void applyAlign(TransInfo *t, const int UNUSED(mval[2]))
|
|||
ED_area_status_text(t->area, TIP_("Align"));
|
||||
}
|
||||
|
||||
void initAlign(TransInfo *t)
|
||||
static void initAlign(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
t->flag |= T_NO_CONSTRAINT;
|
||||
|
||||
t->transform = applyAlign;
|
||||
|
||||
initMouseInputMode(t, &t->mouse, INPUT_NONE);
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_align = {
|
||||
/*flags*/ T_NO_CONSTRAINT,
|
||||
/*init_fn*/ initAlign,
|
||||
/*transform_fn*/ applyAlign,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -103,9 +103,8 @@ static void applyBakeTime(TransInfo *t, const int mval[2])
|
|||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
void initBakeTime(TransInfo *t)
|
||||
static void initBakeTime(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
t->transform = applyBakeTime;
|
||||
initMouseInputMode(t, &t->mouse, INPUT_NONE);
|
||||
|
||||
t->idx_max = 0;
|
||||
|
@ -119,3 +118,14 @@ void initBakeTime(TransInfo *t)
|
|||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_baketime = {
|
||||
/*flags*/ 0,
|
||||
/*init_fn*/ initBakeTime,
|
||||
/*transform_fn*/ applyBakeTime,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -148,10 +148,9 @@ static void applyBoneSize(TransInfo *t, const int UNUSED(mval[2]))
|
|||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
void initBoneSize(TransInfo *t)
|
||||
static void initBoneSize(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
t->mode = TFM_BONESIZE;
|
||||
t->transform = applyBoneSize;
|
||||
|
||||
initMouseInputMode(t, &t->mouse, INPUT_SPRING_FLIP);
|
||||
|
||||
|
@ -172,3 +171,14 @@ void initBoneSize(TransInfo *t)
|
|||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_bboneresize = {
|
||||
/*flags*/ 0,
|
||||
/*init_fn*/ initBoneSize,
|
||||
/*transform_fn*/ applyBoneSize,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -324,7 +324,7 @@ static void Bend(TransInfo *t, const int UNUSED(mval[2]))
|
|||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
void initBend(TransInfo *t)
|
||||
static void initBend(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
const float mval_fl[2] = {UNPACK2(t->mval)};
|
||||
const float *curs;
|
||||
|
@ -332,8 +332,6 @@ void initBend(TransInfo *t)
|
|||
struct BendCustomData *data;
|
||||
|
||||
t->mode = TFM_BEND;
|
||||
t->transform = Bend;
|
||||
t->handleEvent = handleEventBend;
|
||||
|
||||
initMouseInputMode(t, &t->mouse, INPUT_ANGLE_SPRING);
|
||||
|
||||
|
@ -348,8 +346,6 @@ void initBend(TransInfo *t)
|
|||
t->num.unit_type[0] = B_UNIT_ROTATION;
|
||||
t->num.unit_type[1] = B_UNIT_LENGTH;
|
||||
|
||||
t->flag |= T_NO_CONSTRAINT;
|
||||
|
||||
// copy_v3_v3(t->center, ED_view3d_cursor3d_get(t->scene, t->view));
|
||||
if ((t->flag & T_OVERRIDE_CENTER) == 0) {
|
||||
calculateCenterCursor(t, t->center_global);
|
||||
|
@ -378,3 +374,14 @@ void initBend(TransInfo *t)
|
|||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_bend = {
|
||||
/*flags*/ T_NO_CONSTRAINT,
|
||||
/*init_fn*/ initBend,
|
||||
/*transform_fn*/ Bend,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ handleEventBend,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -79,10 +79,8 @@ static void applyBoneEnvelope(TransInfo *t, const int UNUSED(mval[2]))
|
|||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
void initBoneEnvelope(TransInfo *t)
|
||||
static void initBoneEnvelope(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
t->transform = applyBoneEnvelope;
|
||||
|
||||
initMouseInputMode(t, &t->mouse, INPUT_SPRING);
|
||||
|
||||
t->idx_max = 0;
|
||||
|
@ -93,8 +91,17 @@ void initBoneEnvelope(TransInfo *t)
|
|||
copy_v3_fl(t->num.val_inc, t->snap[0]);
|
||||
t->num.unit_sys = t->scene->unit.system;
|
||||
t->num.unit_type[0] = B_UNIT_NONE;
|
||||
|
||||
t->flag |= T_NO_CONSTRAINT | T_NO_PROJECT;
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_boneenvelope = {
|
||||
/*flags*/ T_NO_CONSTRAINT | T_NO_PROJECT,
|
||||
/*init_fn*/ initBoneEnvelope,
|
||||
/*transform_fn*/ applyBoneEnvelope,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -73,10 +73,9 @@ static void applyBoneRoll(TransInfo *t, const int UNUSED(mval[2]))
|
|||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
void initBoneRoll(TransInfo *t)
|
||||
static void initBoneRoll(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
t->mode = TFM_BONE_ROLL;
|
||||
t->transform = applyBoneRoll;
|
||||
|
||||
initMouseInputMode(t, &t->mouse, INPUT_ANGLE);
|
||||
|
||||
|
@ -89,8 +88,17 @@ void initBoneRoll(TransInfo *t)
|
|||
t->num.unit_sys = t->scene->unit.system;
|
||||
t->num.unit_use_radians = (t->scene->unit.system_rotation == USER_UNIT_ROT_RADIANS);
|
||||
t->num.unit_type[0] = B_UNIT_ROTATION;
|
||||
|
||||
t->flag |= T_NO_CONSTRAINT | T_NO_PROJECT;
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_boneroll = {
|
||||
/*flags*/ T_NO_CONSTRAINT | T_NO_PROJECT,
|
||||
/*init_fn*/ initBoneRoll,
|
||||
/*transform_fn*/ applyBoneRoll,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -84,10 +84,9 @@ static void applyCurveShrinkFatten(TransInfo *t, const int UNUSED(mval[2]))
|
|||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
void initCurveShrinkFatten(TransInfo *t)
|
||||
static void initCurveShrinkFatten(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
t->mode = TFM_CURVE_SHRINKFATTEN;
|
||||
t->transform = applyCurveShrinkFatten;
|
||||
|
||||
initMouseInputMode(t, &t->mouse, INPUT_SPRING);
|
||||
|
||||
|
@ -100,8 +99,6 @@ void initCurveShrinkFatten(TransInfo *t)
|
|||
t->num.unit_sys = t->scene->unit.system;
|
||||
t->num.unit_type[0] = B_UNIT_NONE;
|
||||
|
||||
t->flag |= T_NO_CONSTRAINT;
|
||||
|
||||
float scale_factor = 0.0f;
|
||||
if (((t->spacetype == SPACE_VIEW3D) && (t->region->regiontype == RGN_TYPE_WINDOW) &&
|
||||
(t->data_len_all == 1)) ||
|
||||
|
@ -117,3 +114,14 @@ void initCurveShrinkFatten(TransInfo *t)
|
|||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_curveshrinkfatten = {
|
||||
/*flags*/ T_NO_CONSTRAINT,
|
||||
/*init_fn*/ initCurveShrinkFatten,
|
||||
/*transform_fn*/ applyCurveShrinkFatten,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -159,29 +159,57 @@ static void init_mode_impl(TransInfo *t)
|
|||
copy_v3_fl(t->num.val_inc, t->snap[0]);
|
||||
t->num.unit_sys = t->scene->unit.system;
|
||||
t->num.unit_type[0] = B_UNIT_NONE;
|
||||
|
||||
t->flag |= T_NO_CONSTRAINT | T_NO_PROJECT;
|
||||
}
|
||||
|
||||
void initEgdeCrease(TransInfo *t)
|
||||
static void initEgdeCrease(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
init_mode_impl(t);
|
||||
t->mode = TFM_EDGE_CREASE;
|
||||
t->transform = applyCrease;
|
||||
}
|
||||
|
||||
void initVertCrease(TransInfo *t)
|
||||
static void initVertCrease(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
init_mode_impl(t);
|
||||
t->mode = TFM_VERT_CREASE;
|
||||
t->transform = applyCrease;
|
||||
}
|
||||
|
||||
void initBevelWeight(TransInfo *t)
|
||||
static void initBevelWeight(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
init_mode_impl(t);
|
||||
t->mode = TFM_BWEIGHT;
|
||||
t->transform = applyBevelWeight;
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_edgecrease = {
|
||||
/*flags*/ T_NO_CONSTRAINT | T_NO_PROJECT,
|
||||
/*init_fn*/ initEgdeCrease,
|
||||
/*transform_fn*/ applyCrease,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
||||
TransModeInfo TransMode_vertcrease = {
|
||||
/*flags*/ T_NO_CONSTRAINT | T_NO_PROJECT,
|
||||
/*init_fn*/ initVertCrease,
|
||||
/*transform_fn*/ applyCrease,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
||||
TransModeInfo TransMode_bevelweight = {
|
||||
/*flags*/ T_NO_CONSTRAINT | T_NO_PROJECT,
|
||||
/*init_fn*/ initBevelWeight,
|
||||
/*transform_fn*/ applyBevelWeight,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -108,10 +108,9 @@ static void applyNormalRotation(TransInfo *t, const int UNUSED(mval[2]))
|
|||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
void initNormalRotation(TransInfo *t)
|
||||
static void initNormalRotation(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
t->mode = TFM_NORMAL_ROTATION;
|
||||
t->transform = applyNormalRotation;
|
||||
|
||||
initMouseInputMode(t, &t->mouse, INPUT_ANGLE);
|
||||
|
||||
|
@ -139,3 +138,14 @@ void initNormalRotation(TransInfo *t)
|
|||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_rotatenormal = {
|
||||
/*flags*/ 0,
|
||||
/*init_fn*/ initNormalRotation,
|
||||
/*transform_fn*/ applyNormalRotation,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -108,11 +108,8 @@ static void applySeqSlide(TransInfo *t, const int UNUSED(mval[2]))
|
|||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
void initSeqSlide(TransInfo *t)
|
||||
static void initSeqSlide(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
t->transform = applySeqSlide;
|
||||
t->tsnap.snap_mode_apply_fn = transform_snap_sequencer_apply_translate;
|
||||
|
||||
initMouseInputMode(t, &t->mouse, INPUT_VECTOR);
|
||||
|
||||
t->idx_max = 1;
|
||||
|
@ -136,3 +133,14 @@ void initSeqSlide(TransInfo *t)
|
|||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_seqslide = {
|
||||
/*flags*/ 0,
|
||||
/*init_fn*/ initSeqSlide,
|
||||
/*transform_fn*/ applySeqSlide,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ transform_snap_sequencer_apply_translate,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -29,6 +29,8 @@
|
|||
#include "WM_api.h"
|
||||
#include "WM_types.h"
|
||||
|
||||
#include "RNA_access.h"
|
||||
|
||||
#include "UI_interface.h"
|
||||
#include "UI_resources.h"
|
||||
|
||||
|
@ -1081,7 +1083,6 @@ static void freeEdgeSlideVerts(TransInfo *UNUSED(t),
|
|||
|
||||
static eRedrawFlag handleEventEdgeSlide(struct TransInfo *t, const struct wmEvent *event)
|
||||
{
|
||||
if (t->mode == TFM_EDGE_SLIDE) {
|
||||
EdgeSlideParams *slp = t->custom.mode.data;
|
||||
|
||||
if (slp) {
|
||||
|
@ -1115,16 +1116,11 @@ static eRedrawFlag handleEventEdgeSlide(struct TransInfo *t, const struct wmEven
|
|||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return TREDRAW_NOTHING;
|
||||
}
|
||||
|
||||
void drawEdgeSlide(TransInfo *t)
|
||||
static void drawEdgeSlide(TransInfo *t)
|
||||
{
|
||||
if (t->mode != TFM_EDGE_SLIDE) {
|
||||
return;
|
||||
}
|
||||
|
||||
EdgeSlideData *sld = edgeSlideFirstGet(t);
|
||||
if (sld == NULL) {
|
||||
return;
|
||||
|
@ -1484,18 +1480,13 @@ static void applyEdgeSlide(TransInfo *t, const int UNUSED(mval[2]))
|
|||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
void initEdgeSlide_ex(
|
||||
static void initEdgeSlide_ex(
|
||||
TransInfo *t, bool use_double_side, bool use_even, bool flipped, bool use_clamp)
|
||||
{
|
||||
EdgeSlideData *sld;
|
||||
bool ok = false;
|
||||
|
||||
t->mode = TFM_EDGE_SLIDE;
|
||||
t->transform = applyEdgeSlide;
|
||||
t->handleEvent = handleEventEdgeSlide;
|
||||
t->transform_matrix = NULL;
|
||||
t->tsnap.snap_mode_apply_fn = edge_slide_snap_apply;
|
||||
t->tsnap.snap_mode_distance_fn = transform_snap_distance_len_squared_fn;
|
||||
|
||||
{
|
||||
EdgeSlideParams *slp = MEM_callocN(sizeof(*slp), __func__);
|
||||
|
@ -1542,13 +1533,21 @@ void initEdgeSlide_ex(
|
|||
copy_v3_fl(t->num.val_inc, t->snap[0]);
|
||||
t->num.unit_sys = t->scene->unit.system;
|
||||
t->num.unit_type[0] = B_UNIT_NONE;
|
||||
|
||||
t->flag |= T_NO_CONSTRAINT | T_NO_PROJECT;
|
||||
}
|
||||
|
||||
void initEdgeSlide(TransInfo *t)
|
||||
static void initEdgeSlide(TransInfo *t, wmOperator *op)
|
||||
{
|
||||
initEdgeSlide_ex(t, true, false, false, true);
|
||||
bool use_double_side = true;
|
||||
bool use_even = false;
|
||||
bool flipped = false;
|
||||
bool use_clamp = true;
|
||||
if (op) {
|
||||
use_double_side = !RNA_boolean_get(op->ptr, "single_side");
|
||||
use_even = RNA_boolean_get(op->ptr, "use_even");
|
||||
flipped = RNA_boolean_get(op->ptr, "flipped");
|
||||
use_clamp = RNA_boolean_get(op->ptr, "use_clamp");
|
||||
}
|
||||
initEdgeSlide_ex(t, use_double_side, use_even, flipped, use_clamp);
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
@ -1581,3 +1580,14 @@ void transform_mode_edge_slide_reproject_input(TransInfo *t)
|
|||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_edgeslide = {
|
||||
/*flags*/ T_NO_CONSTRAINT | T_NO_PROJECT,
|
||||
/*init_fn*/ initEdgeSlide,
|
||||
/*transform_fn*/ applyEdgeSlide,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ handleEventEdgeSlide,
|
||||
/*snap_distance_fn*/ transform_snap_distance_len_squared_fn,
|
||||
/*snap_apply_fn*/ edge_slide_snap_apply,
|
||||
/*draw_fn*/ drawEdgeSlide,
|
||||
};
|
||||
|
|
|
@ -88,10 +88,9 @@ static void applyGPOpacity(TransInfo *t, const int UNUSED(mval[2]))
|
|||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
void initGPOpacity(TransInfo *t)
|
||||
static void initGPOpacity(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
t->mode = TFM_GPENCIL_OPACITY;
|
||||
t->transform = applyGPOpacity;
|
||||
|
||||
initMouseInputMode(t, &t->mouse, INPUT_SPRING);
|
||||
|
||||
|
@ -107,8 +106,17 @@ void initGPOpacity(TransInfo *t)
|
|||
#ifdef USE_NUM_NO_ZERO
|
||||
t->num.val_flag[0] |= NUM_NO_ZERO;
|
||||
#endif
|
||||
|
||||
t->flag |= T_NO_CONSTRAINT;
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_gpopacity = {
|
||||
/*flags*/ T_NO_CONSTRAINT,
|
||||
/*init_fn*/ initGPOpacity,
|
||||
/*transform_fn*/ applyGPOpacity,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -90,10 +90,9 @@ static void applyGPShrinkFatten(TransInfo *t, const int UNUSED(mval[2]))
|
|||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
void initGPShrinkFatten(TransInfo *t)
|
||||
static void initGPShrinkFatten(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
t->mode = TFM_GPENCIL_SHRINKFATTEN;
|
||||
t->transform = applyGPShrinkFatten;
|
||||
|
||||
initMouseInputMode(t, &t->mouse, INPUT_SPRING);
|
||||
|
||||
|
@ -109,8 +108,17 @@ void initGPShrinkFatten(TransInfo *t)
|
|||
#ifdef USE_NUM_NO_ZERO
|
||||
t->num.val_flag[0] |= NUM_NO_ZERO;
|
||||
#endif
|
||||
|
||||
t->flag |= T_NO_CONSTRAINT;
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_gpshrinkfatten = {
|
||||
/*flags*/ T_NO_CONSTRAINT,
|
||||
/*init_fn*/ initGPShrinkFatten,
|
||||
/*transform_fn*/ applyGPShrinkFatten,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -104,10 +104,9 @@ static void applyMaskShrinkFatten(TransInfo *t, const int UNUSED(mval[2]))
|
|||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
void initMaskShrinkFatten(TransInfo *t)
|
||||
static void initMaskShrinkFatten(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
t->mode = TFM_MASK_SHRINKFATTEN;
|
||||
t->transform = applyMaskShrinkFatten;
|
||||
|
||||
initMouseInputMode(t, &t->mouse, INPUT_SPRING);
|
||||
|
||||
|
@ -123,8 +122,17 @@ void initMaskShrinkFatten(TransInfo *t)
|
|||
#ifdef USE_NUM_NO_ZERO
|
||||
t->num.val_flag[0] |= NUM_NO_ZERO;
|
||||
#endif
|
||||
|
||||
t->flag |= T_NO_CONSTRAINT;
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_maskshrinkfatten = {
|
||||
/*flags*/ T_NO_CONSTRAINT,
|
||||
/*init_fn*/ initMaskShrinkFatten,
|
||||
/*transform_fn*/ applyMaskShrinkFatten,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -216,12 +216,20 @@ static void applyMirror(TransInfo *t, const int UNUSED(mval[2]))
|
|||
}
|
||||
}
|
||||
|
||||
void initMirror(TransInfo *t)
|
||||
static void initMirror(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
t->transform = applyMirror;
|
||||
initMouseInputMode(t, &t->mouse, INPUT_NONE);
|
||||
|
||||
t->flag |= T_NULL_ONE;
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_mirror = {
|
||||
/*flags*/ T_NULL_ONE,
|
||||
/*init_fn*/ initMirror,
|
||||
/*transform_fn*/ applyMirror,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -169,10 +169,9 @@ static void applyPushPull(TransInfo *t, const int UNUSED(mval[2]))
|
|||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
void initPushPull(TransInfo *t)
|
||||
static void initPushPull(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
t->mode = TFM_PUSHPULL;
|
||||
t->transform = applyPushPull;
|
||||
|
||||
initMouseInputMode(t, &t->mouse, INPUT_VERTICAL_ABSOLUTE);
|
||||
|
||||
|
@ -187,3 +186,14 @@ void initPushPull(TransInfo *t)
|
|||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_pushpull = {
|
||||
/*flags*/ 0,
|
||||
/*init_fn*/ initPushPull,
|
||||
/*transform_fn*/ applyPushPull,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "DNA_windowmanager_types.h"
|
||||
|
||||
#include "BLI_math.h"
|
||||
#include "BLI_task.h"
|
||||
|
||||
|
@ -17,6 +19,8 @@
|
|||
|
||||
#include "ED_screen.h"
|
||||
|
||||
#include "RNA_access.h"
|
||||
|
||||
#include "UI_interface.h"
|
||||
|
||||
#include "transform.h"
|
||||
|
@ -282,13 +286,22 @@ static void applyResize(TransInfo *t, const int UNUSED(mval[2]))
|
|||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
void initResize(TransInfo *t, float mouse_dir_constraint[3])
|
||||
static void initResize(TransInfo *t, wmOperator *op)
|
||||
{
|
||||
t->mode = TFM_RESIZE;
|
||||
t->transform = applyResize;
|
||||
t->transform_matrix = NULL;
|
||||
t->tsnap.snap_mode_apply_fn = ApplySnapResize;
|
||||
t->tsnap.snap_mode_distance_fn = ResizeBetween;
|
||||
float mouse_dir_constraint[3];
|
||||
if (op) {
|
||||
PropertyRNA *prop = RNA_struct_find_property(op->ptr, "mouse_dir_constraint");
|
||||
if (prop) {
|
||||
RNA_property_float_get_array(op->ptr, prop, mouse_dir_constraint);
|
||||
}
|
||||
else {
|
||||
/* Resize is expected to have this property. */
|
||||
BLI_assert(!STREQ(op->idname, "TRANSFORM_OT_resize"));
|
||||
}
|
||||
}
|
||||
else {
|
||||
zero_v3(mouse_dir_constraint);
|
||||
}
|
||||
|
||||
if (is_zero_v3(mouse_dir_constraint)) {
|
||||
initMouseInputMode(t, &t->mouse, INPUT_SPRING_FLIP);
|
||||
|
@ -323,7 +336,6 @@ void initResize(TransInfo *t, float mouse_dir_constraint[3])
|
|||
initMouseInputMode(t, &t->mouse, INPUT_CUSTOM_RATIO);
|
||||
}
|
||||
|
||||
t->flag |= T_NULL_ONE;
|
||||
t->num.val_flag[0] |= NUM_NULL_ONE;
|
||||
t->num.val_flag[1] |= NUM_NULL_ONE;
|
||||
t->num.val_flag[2] |= NUM_NULL_ONE;
|
||||
|
@ -351,3 +363,14 @@ void initResize(TransInfo *t, float mouse_dir_constraint[3])
|
|||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_resize = {
|
||||
/*flags*/ T_NULL_ONE,
|
||||
/*init_fn*/ initResize,
|
||||
/*transform_fn*/ applyResize,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ ResizeBetween,
|
||||
/*snap_apply_fn*/ ApplySnapResize,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -405,7 +405,7 @@ static void applyRotationMatrix(TransInfo *t, float mat_xform[4][4])
|
|||
mul_m4_m4m4(mat_xform, mat4, mat_xform);
|
||||
}
|
||||
|
||||
void initRotation(TransInfo *t)
|
||||
static void initRotation(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
if (t->spacetype == SPACE_ACTION) {
|
||||
BKE_report(t->reports, RPT_ERROR, "Rotation is not supported in the Dope Sheet Editor");
|
||||
|
@ -413,10 +413,6 @@ void initRotation(TransInfo *t)
|
|||
}
|
||||
|
||||
t->mode = TFM_ROTATION;
|
||||
t->transform = applyRotation;
|
||||
t->transform_matrix = applyRotationMatrix;
|
||||
t->tsnap.snap_mode_apply_fn = ApplySnapRotation;
|
||||
t->tsnap.snap_mode_distance_fn = RotationBetween;
|
||||
|
||||
initMouseInputMode(t, &t->mouse, INPUT_ANGLE);
|
||||
|
||||
|
@ -438,3 +434,14 @@ void initRotation(TransInfo *t)
|
|||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_rotate = {
|
||||
/*flags*/ 0,
|
||||
/*init_fn*/ initRotation,
|
||||
/*transform_fn*/ applyRotation,
|
||||
/*transform_matrix_fn*/ applyRotationMatrix,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ RotationBetween,
|
||||
/*snap_apply_fn*/ ApplySnapRotation,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -320,11 +320,9 @@ static void apply_shear(TransInfo *t, const int UNUSED(mval[2]))
|
|||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
void initShear(TransInfo *t)
|
||||
static void initShear(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
t->mode = TFM_SHEAR;
|
||||
t->transform = apply_shear;
|
||||
t->handleEvent = handleEventShear;
|
||||
|
||||
if (t->orient_axis == t->orient_axis_ortho) {
|
||||
t->orient_axis = 2;
|
||||
|
@ -342,9 +340,18 @@ void initShear(TransInfo *t)
|
|||
t->num.unit_sys = t->scene->unit.system;
|
||||
t->num.unit_type[0] = B_UNIT_NONE; /* Don't think we have any unit here? */
|
||||
|
||||
t->flag |= T_NO_CONSTRAINT;
|
||||
|
||||
transform_mode_default_modal_orientation_set(t, V3D_ORIENT_VIEW);
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_shear = {
|
||||
/*flags*/ T_NO_CONSTRAINT,
|
||||
/*init_fn*/ initShear,
|
||||
/*transform_fn*/ apply_shear,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ handleEventShear,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -170,7 +170,7 @@ static void applyShrinkFatten(TransInfo *t, const int UNUSED(mval[2]))
|
|||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
void initShrinkFatten(TransInfo *t)
|
||||
static void initShrinkFatten(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
if ((t->flag & T_EDIT) == 0 || (t->obedit_type != OB_MESH)) {
|
||||
BKE_report(t->reports, RPT_ERROR, "'Shrink/Fatten' meshes is only supported in edit mode");
|
||||
|
@ -178,8 +178,6 @@ void initShrinkFatten(TransInfo *t)
|
|||
}
|
||||
|
||||
t->mode = TFM_SHRINKFATTEN;
|
||||
t->transform = applyShrinkFatten;
|
||||
t->handleEvent = shrinkfatten_handleEvent;
|
||||
|
||||
initMouseInputMode(t, &t->mouse, INPUT_VERTICAL_ABSOLUTE);
|
||||
|
||||
|
@ -192,8 +190,6 @@ void initShrinkFatten(TransInfo *t)
|
|||
t->num.unit_sys = t->scene->unit.system;
|
||||
t->num.unit_type[0] = B_UNIT_LENGTH;
|
||||
|
||||
t->flag |= T_NO_CONSTRAINT;
|
||||
|
||||
if (t->keymap) {
|
||||
/* Workaround to use the same key as the modal keymap. */
|
||||
t->custom.mode.data = (void *)WM_modalkeymap_find_propvalue(t->keymap, TFM_MODAL_RESIZE);
|
||||
|
@ -201,3 +197,14 @@ void initShrinkFatten(TransInfo *t)
|
|||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_shrinkfatten = {
|
||||
/*flags*/ T_NO_CONSTRAINT,
|
||||
/*init_fn*/ initShrinkFatten,
|
||||
/*transform_fn*/ applyShrinkFatten,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ shrinkfatten_handleEvent,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -134,10 +134,9 @@ static void applySkinResize(TransInfo *t, const int UNUSED(mval[2]))
|
|||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
void initSkinResize(TransInfo *t)
|
||||
static void initSkinResize(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
t->mode = TFM_SKIN_RESIZE;
|
||||
t->transform = applySkinResize;
|
||||
|
||||
initMouseInputMode(t, &t->mouse, INPUT_SPRING_FLIP);
|
||||
|
||||
|
@ -167,3 +166,14 @@ void initSkinResize(TransInfo *t)
|
|||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_skinresize = {
|
||||
/*flags*/ 0,
|
||||
/*init_fn*/ initSkinResize,
|
||||
/*transform_fn*/ applySkinResize,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -77,10 +77,9 @@ static void applyTilt(TransInfo *t, const int UNUSED(mval[2]))
|
|||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
void initTilt(TransInfo *t)
|
||||
static void initTilt(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
t->mode = TFM_TILT;
|
||||
t->transform = applyTilt;
|
||||
|
||||
initMouseInputMode(t, &t->mouse, INPUT_ANGLE);
|
||||
|
||||
|
@ -93,8 +92,17 @@ void initTilt(TransInfo *t)
|
|||
t->num.unit_sys = t->scene->unit.system;
|
||||
t->num.unit_use_radians = (t->scene->unit.system_rotation == USER_UNIT_ROT_RADIANS);
|
||||
t->num.unit_type[0] = B_UNIT_ROTATION;
|
||||
|
||||
t->flag |= T_NO_CONSTRAINT | T_NO_PROJECT;
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_tilt = {
|
||||
/*flags*/ T_NO_CONSTRAINT | T_NO_PROJECT,
|
||||
/*init_fn*/ initTilt,
|
||||
/*transform_fn*/ applyTilt,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -94,7 +94,7 @@ static void applyTimeScale(TransInfo *t, const int UNUSED(mval[2]))
|
|||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
void initTimeScale(TransInfo *t)
|
||||
static void initTimeScale(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
float center[2];
|
||||
|
||||
|
@ -106,7 +106,6 @@ void initTimeScale(TransInfo *t)
|
|||
}
|
||||
|
||||
t->mode = TFM_TIME_SCALE;
|
||||
t->transform = applyTimeScale;
|
||||
|
||||
/* recalculate center2d to use scene->r.cfra and mouse Y, since that's
|
||||
* what is used in time scale */
|
||||
|
@ -121,7 +120,6 @@ void initTimeScale(TransInfo *t)
|
|||
|
||||
initMouseInputMode(t, &t->mouse, INPUT_SPRING_FLIP);
|
||||
|
||||
t->flag |= T_NULL_ONE;
|
||||
t->num.val_flag[0] |= NUM_NULL_ONE;
|
||||
|
||||
/* Numeric-input has max of (n-1). */
|
||||
|
@ -138,3 +136,14 @@ void initTimeScale(TransInfo *t)
|
|||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_timescale = {
|
||||
/*flags*/ T_NULL_ONE,
|
||||
/*init_fn*/ initTimeScale,
|
||||
/*transform_fn*/ applyTimeScale,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -148,7 +148,7 @@ static void applyTimeSlide(TransInfo *t, const int mval[2])
|
|||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
void initTimeSlide(TransInfo *t)
|
||||
static void initTimeSlide(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
/* this tool is only really available in the Action Editor... */
|
||||
if (t->spacetype == SPACE_ACTION) {
|
||||
|
@ -162,7 +162,6 @@ void initTimeSlide(TransInfo *t)
|
|||
}
|
||||
|
||||
t->mode = TFM_TIME_SLIDE;
|
||||
t->transform = applyTimeSlide;
|
||||
|
||||
initMouseInputMode(t, &t->mouse, INPUT_NONE);
|
||||
|
||||
|
@ -219,3 +218,14 @@ void initTimeSlide(TransInfo *t)
|
|||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_timeslide = {
|
||||
/*flags*/ T_NULL_ONE,
|
||||
/*init_fn*/ initTimeSlide,
|
||||
/*transform_fn*/ applyTimeSlide,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -119,15 +119,13 @@ static void applyTimeTranslate(TransInfo *t, const int mval[2])
|
|||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
void initTimeTranslate(TransInfo *t)
|
||||
static void initTimeTranslate(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
/* this tool is only really available in the Action Editor... */
|
||||
if (!ELEM(t->spacetype, SPACE_ACTION, SPACE_SEQ)) {
|
||||
t->state = TRANS_CANCEL;
|
||||
}
|
||||
|
||||
t->transform = applyTimeTranslate;
|
||||
|
||||
initMouseInputMode(t, &t->mouse, INPUT_NONE);
|
||||
|
||||
/* Numeric-input has max of (n-1). */
|
||||
|
@ -145,3 +143,14 @@ void initTimeTranslate(TransInfo *t)
|
|||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_timetranslate = {
|
||||
/*flags*/ 0,
|
||||
/*init_fn*/ initTimeTranslate,
|
||||
/*transform_fn*/ applyTimeTranslate,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -237,10 +237,9 @@ static void applyToSphere(TransInfo *t, const int UNUSED(mval[2]))
|
|||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
void initToSphere(TransInfo *t)
|
||||
static void initToSphere(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
t->mode = TFM_TOSPHERE;
|
||||
t->transform = applyToSphere;
|
||||
|
||||
initMouseInputMode(t, &t->mouse, INPUT_HORIZONTAL_RATIO);
|
||||
|
||||
|
@ -254,7 +253,6 @@ void initToSphere(TransInfo *t)
|
|||
t->num.unit_type[0] = B_UNIT_NONE;
|
||||
|
||||
t->num.val_flag[0] |= NUM_NULL_ONE | NUM_NO_NEGATIVE;
|
||||
t->flag |= T_NO_CONSTRAINT;
|
||||
|
||||
struct ToSphereInfo *data = MEM_callocN(sizeof(*data), __func__);
|
||||
t->custom.mode.data = data;
|
||||
|
@ -264,3 +262,14 @@ void initToSphere(TransInfo *t)
|
|||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_tosphere = {
|
||||
/*flags*/ T_NO_CONSTRAINT,
|
||||
/*init_fn*/ initToSphere,
|
||||
/*transform_fn*/ applyToSphere,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -187,11 +187,9 @@ static void applyTrackballMatrix(TransInfo *t, float mat_xform[4][4])
|
|||
mul_m4_m4m4(mat_xform, mat4, mat_xform);
|
||||
}
|
||||
|
||||
void initTrackball(TransInfo *t)
|
||||
static void initTrackball(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
t->mode = TFM_TRACKBALL;
|
||||
t->transform = applyTrackball;
|
||||
t->transform_matrix = applyTrackballMatrix;
|
||||
|
||||
initMouseInputMode(t, &t->mouse, INPUT_TRACKBALL);
|
||||
|
||||
|
@ -205,8 +203,17 @@ void initTrackball(TransInfo *t)
|
|||
t->num.unit_use_radians = (t->scene->unit.system_rotation == USER_UNIT_ROT_RADIANS);
|
||||
t->num.unit_type[0] = B_UNIT_ROTATION;
|
||||
t->num.unit_type[1] = B_UNIT_ROTATION;
|
||||
|
||||
t->flag |= T_NO_CONSTRAINT;
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_trackball = {
|
||||
/*flags*/ T_NO_CONSTRAINT,
|
||||
/*init_fn*/ initTrackball,
|
||||
/*transform_fn*/ applyTrackball,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ NULL,
|
||||
/*snap_apply_fn*/ NULL,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -666,7 +666,7 @@ static void applyTranslationMatrix(TransInfo *t, float mat_xform[4][4])
|
|||
add_v3_v3(mat_xform[3], delta);
|
||||
}
|
||||
|
||||
void initTranslation(TransInfo *t)
|
||||
static void initTranslation(TransInfo *t, struct wmOperator *UNUSED(op))
|
||||
{
|
||||
if (t->spacetype == SPACE_ACTION) {
|
||||
/* this space uses time translate */
|
||||
|
@ -675,13 +675,9 @@ void initTranslation(TransInfo *t)
|
|||
"Use 'Time_Translate' transform mode instead of 'Translation' mode "
|
||||
"for translating keyframes in Dope Sheet Editor");
|
||||
t->state = TRANS_CANCEL;
|
||||
return;
|
||||
}
|
||||
|
||||
t->transform = applyTranslation;
|
||||
t->transform_matrix = applyTranslationMatrix;
|
||||
t->tsnap.snap_mode_apply_fn = ApplySnapTranslation;
|
||||
t->tsnap.snap_mode_distance_fn = transform_snap_distance_len_squared_fn;
|
||||
|
||||
initMouseInputMode(t, &t->mouse, INPUT_VECTOR);
|
||||
|
||||
t->idx_max = (t->flag & T_2D_EDIT) ? 1 : 2;
|
||||
|
@ -716,3 +712,14 @@ void initTranslation(TransInfo *t)
|
|||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_translate = {
|
||||
/*flags*/ 0,
|
||||
/*init_fn*/ initTranslation,
|
||||
/*transform_fn*/ applyTranslation,
|
||||
/*transform_matrix_fn*/ applyTranslationMatrix,
|
||||
/*handle_event_fn*/ NULL,
|
||||
/*snap_distance_fn*/ transform_snap_distance_len_squared_fn,
|
||||
/*snap_apply_fn*/ ApplySnapTranslation,
|
||||
/*draw_fn*/ NULL,
|
||||
};
|
||||
|
|
|
@ -26,6 +26,8 @@
|
|||
#include "WM_api.h"
|
||||
#include "WM_types.h"
|
||||
|
||||
#include "RNA_access.h"
|
||||
|
||||
#include "UI_interface.h"
|
||||
#include "UI_resources.h"
|
||||
|
||||
|
@ -304,7 +306,6 @@ static void freeVertSlideVerts(TransInfo *UNUSED(t),
|
|||
|
||||
static eRedrawFlag handleEventVertSlide(struct TransInfo *t, const struct wmEvent *event)
|
||||
{
|
||||
if (t->mode == TFM_VERT_SLIDE) {
|
||||
VertSlideParams *slp = t->custom.mode.data;
|
||||
|
||||
if (slp) {
|
||||
|
@ -346,13 +347,12 @@ static eRedrawFlag handleEventVertSlide(struct TransInfo *t, const struct wmEven
|
|||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return TREDRAW_NOTHING;
|
||||
}
|
||||
|
||||
void drawVertSlide(TransInfo *t)
|
||||
static void drawVertSlide(TransInfo *t)
|
||||
{
|
||||
if ((t->mode == TFM_VERT_SLIDE) && TRANS_DATA_CONTAINER_FIRST_OK(t)->custom.mode.data) {
|
||||
if (TRANS_DATA_CONTAINER_FIRST_OK(t)->custom.mode.data) {
|
||||
const VertSlideParams *slp = t->custom.mode.data;
|
||||
VertSlideData *sld = TRANS_DATA_CONTAINER_FIRST_OK(t)->custom.mode.data;
|
||||
const bool is_clamp = !(t->flag & T_ALT_TRANSFORM);
|
||||
|
@ -610,15 +610,10 @@ static void applyVertSlide(TransInfo *t, const int UNUSED(mval[2]))
|
|||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
void initVertSlide_ex(TransInfo *t, bool use_even, bool flipped, bool use_clamp)
|
||||
static void initVertSlide_ex(TransInfo *t, bool use_even, bool flipped, bool use_clamp)
|
||||
{
|
||||
|
||||
t->mode = TFM_VERT_SLIDE;
|
||||
t->transform = applyVertSlide;
|
||||
t->handleEvent = handleEventVertSlide;
|
||||
t->transform_matrix = NULL;
|
||||
t->tsnap.snap_mode_apply_fn = vert_slide_snap_apply;
|
||||
t->tsnap.snap_mode_distance_fn = transform_snap_distance_len_squared_fn;
|
||||
|
||||
{
|
||||
VertSlideParams *slp = MEM_callocN(sizeof(*slp), __func__);
|
||||
|
@ -664,13 +659,19 @@ void initVertSlide_ex(TransInfo *t, bool use_even, bool flipped, bool use_clamp)
|
|||
copy_v3_fl(t->num.val_inc, t->snap[0]);
|
||||
t->num.unit_sys = t->scene->unit.system;
|
||||
t->num.unit_type[0] = B_UNIT_NONE;
|
||||
|
||||
t->flag |= T_NO_CONSTRAINT | T_NO_PROJECT;
|
||||
}
|
||||
|
||||
void initVertSlide(TransInfo *t)
|
||||
static void initVertSlide(TransInfo *t, wmOperator *op)
|
||||
{
|
||||
initVertSlide_ex(t, false, false, true);
|
||||
bool use_even = false;
|
||||
bool flipped = false;
|
||||
bool use_clamp = true;
|
||||
if (op) {
|
||||
use_even = RNA_boolean_get(op->ptr, "use_even");
|
||||
flipped = RNA_boolean_get(op->ptr, "flipped");
|
||||
use_clamp = RNA_boolean_get(op->ptr, "use_clamp");
|
||||
}
|
||||
initVertSlide_ex(t, use_even, flipped, use_clamp);
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
@ -693,3 +694,14 @@ void transform_mode_vert_slide_reproject_input(TransInfo *t)
|
|||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
TransModeInfo TransMode_vertslide = {
|
||||
/*flags*/ T_NO_CONSTRAINT | T_NO_PROJECT,
|
||||
/*init_fn*/ initVertSlide,
|
||||
/*transform_fn*/ applyVertSlide,
|
||||
/*transform_matrix_fn*/ NULL,
|
||||
/*handle_event_fn*/ handleEventVertSlide,
|
||||
/*snap_distance_fn*/ transform_snap_distance_len_squared_fn,
|
||||
/*snap_apply_fn*/ vert_slide_snap_apply,
|
||||
/*draw_fn*/ drawVertSlide,
|
||||
};
|
||||
|
|
|
@ -50,6 +50,7 @@
|
|||
|
||||
#include "transform.h"
|
||||
#include "transform_convert.h"
|
||||
#include "transform_mode.h"
|
||||
#include "transform_snap.h"
|
||||
|
||||
/* use half of flt-max so we can scale up without an exception */
|
||||
|
@ -546,7 +547,7 @@ void transform_snap_mixed_apply(TransInfo *t, float *vec)
|
|||
}
|
||||
|
||||
if (validSnap(t)) {
|
||||
t->tsnap.snap_mode_apply_fn(t, vec);
|
||||
t->mode_info->snap_apply_fn(t, vec);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1317,7 +1318,7 @@ static void snap_source_closest_fn(TransInfo *t)
|
|||
copy_v3_v3(loc, bb->vec[j]);
|
||||
mul_m4_v3(td->ext->obmat, loc);
|
||||
|
||||
dist = t->tsnap.snap_mode_distance_fn(t, loc, t->tsnap.snap_target);
|
||||
dist = t->mode_info->snap_distance_fn(t, loc, t->tsnap.snap_target);
|
||||
|
||||
if ((dist != TRANSFORM_DIST_INVALID) &&
|
||||
(closest == nullptr || fabsf(dist) < fabsf(dist_closest))) {
|
||||
|
@ -1334,7 +1335,7 @@ static void snap_source_closest_fn(TransInfo *t)
|
|||
|
||||
copy_v3_v3(loc, td->center);
|
||||
|
||||
dist = t->tsnap.snap_mode_distance_fn(t, loc, t->tsnap.snap_target);
|
||||
dist = t->mode_info->snap_distance_fn(t, loc, t->tsnap.snap_target);
|
||||
|
||||
if ((dist != TRANSFORM_DIST_INVALID) &&
|
||||
(closest == nullptr || fabsf(dist) < fabsf(dist_closest))) {
|
||||
|
@ -1359,7 +1360,7 @@ static void snap_source_closest_fn(TransInfo *t)
|
|||
mul_m4_v3(tc->mat, loc);
|
||||
}
|
||||
|
||||
dist = t->tsnap.snap_mode_distance_fn(t, loc, t->tsnap.snap_target);
|
||||
dist = t->mode_info->snap_distance_fn(t, loc, t->tsnap.snap_target);
|
||||
|
||||
if ((dist != TRANSFORM_DIST_INVALID) &&
|
||||
(closest == nullptr || fabsf(dist) < fabsf(dist_closest))) {
|
||||
|
|
Loading…
Reference in New Issue