Transform: deduplicate code
Edge Bevel Weight and Edge Crease operations have the same code. Only the name displayed in the header changes.
This commit is contained in:
parent
5029f3e483
commit
4d1f12212b
|
@ -63,8 +63,7 @@ set(SRC
|
|||
transform_mode_boneenvelope.c
|
||||
transform_mode_boneroll.c
|
||||
transform_mode_curveshrinkfatten.c
|
||||
transform_mode_edge_bevelweight.c
|
||||
transform_mode_edge_crease.c
|
||||
transform_mode_customdata.c
|
||||
transform_mode_edge_rotate_normal.c
|
||||
transform_mode_edge_seq_slide.c
|
||||
transform_mode_edge_slide.c
|
||||
|
|
|
@ -94,14 +94,11 @@ void initBoneRoll(TransInfo *t);
|
|||
|
||||
void initCurveShrinkFatten(TransInfo *t);
|
||||
|
||||
/* transform_mode_edge_bevelweight.c */
|
||||
|
||||
void initBevelWeight(TransInfo *t);
|
||||
|
||||
/* transform_mode_edge_crease.c */
|
||||
/* transform_mode_customdata.c */
|
||||
|
||||
void initEgdeCrease(TransInfo *t);
|
||||
void initVertCrease(TransInfo *t);
|
||||
void initBevelWeight(TransInfo *t);
|
||||
|
||||
/* transform_mode_edge_rotate_normal.c */
|
||||
|
||||
|
|
|
@ -27,64 +27,64 @@
|
|||
#include "transform_mode.h"
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/** \name Transform (Crease) Element
|
||||
/** \name Transform Element
|
||||
* \{ */
|
||||
|
||||
/**
|
||||
* \note Small arrays / data-structures should be stored copied for faster memory access.
|
||||
*/
|
||||
struct TransDataArgs_Crease {
|
||||
struct TransDataArgs_Value {
|
||||
const TransInfo *t;
|
||||
const TransDataContainer *tc;
|
||||
float crease;
|
||||
float value;
|
||||
};
|
||||
|
||||
static void transdata_elem_crease(const TransInfo *UNUSED(t),
|
||||
const TransDataContainer *UNUSED(tc),
|
||||
TransData *td,
|
||||
const float crease)
|
||||
static void transdata_elem_value(const TransInfo *UNUSED(t),
|
||||
const TransDataContainer *UNUSED(tc),
|
||||
TransData *td,
|
||||
const float value)
|
||||
{
|
||||
if (td->val == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
*td->val = td->ival + crease * td->factor;
|
||||
*td->val = td->ival + value * td->factor;
|
||||
CLAMP(*td->val, 0.0f, 1.0f);
|
||||
}
|
||||
|
||||
static void transdata_elem_crease_fn(void *__restrict iter_data_v,
|
||||
const int iter,
|
||||
const TaskParallelTLS *__restrict UNUSED(tls))
|
||||
static void transdata_elem_value_fn(void *__restrict iter_data_v,
|
||||
const int iter,
|
||||
const TaskParallelTLS *__restrict UNUSED(tls))
|
||||
{
|
||||
struct TransDataArgs_Crease *data = iter_data_v;
|
||||
struct TransDataArgs_Value *data = iter_data_v;
|
||||
TransData *td = &data->tc->data[iter];
|
||||
if (td->flag & TD_SKIP) {
|
||||
return;
|
||||
}
|
||||
transdata_elem_crease(data->t, data->tc, td, data->crease);
|
||||
transdata_elem_value(data->t, data->tc, td, data->value);
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/** \name Transform (Crease)
|
||||
/** \name Transform Value
|
||||
* \{ */
|
||||
|
||||
static void applyCrease(TransInfo *t, const int UNUSED(mval[2]))
|
||||
static void apply_value_impl(TransInfo *t, const char *value_name)
|
||||
{
|
||||
float crease;
|
||||
float value;
|
||||
int i;
|
||||
char str[UI_MAX_DRAW_STR];
|
||||
|
||||
crease = t->values[0] + t->values_modal_offset[0];
|
||||
value = t->values[0] + t->values_modal_offset[0];
|
||||
|
||||
CLAMP_MAX(crease, 1.0f);
|
||||
CLAMP_MAX(value, 1.0f);
|
||||
|
||||
transform_snap_increment(t, &crease);
|
||||
transform_snap_increment(t, &value);
|
||||
|
||||
applyNumInput(&t->num, &crease);
|
||||
applyNumInput(&t->num, &value);
|
||||
|
||||
t->values_final[0] = crease;
|
||||
t->values_final[0] = value;
|
||||
|
||||
/* header print for NumInput */
|
||||
if (hasNumInput(&t->num)) {
|
||||
|
@ -92,20 +92,20 @@ static void applyCrease(TransInfo *t, const int UNUSED(mval[2]))
|
|||
|
||||
outputNumInput(&(t->num), c, &t->scene->unit);
|
||||
|
||||
if (crease >= 0.0f) {
|
||||
BLI_snprintf(str, sizeof(str), TIP_("Crease: +%s %s"), c, t->proptext);
|
||||
if (value >= 0.0f) {
|
||||
BLI_snprintf(str, sizeof(str), "%s: +%s %s", value_name, c, t->proptext);
|
||||
}
|
||||
else {
|
||||
BLI_snprintf(str, sizeof(str), TIP_("Crease: %s %s"), c, t->proptext);
|
||||
BLI_snprintf(str, sizeof(str), "%s: %s %s", value_name, c, t->proptext);
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* default header print */
|
||||
if (crease >= 0.0f) {
|
||||
BLI_snprintf(str, sizeof(str), TIP_("Crease: +%.3f %s"), crease, t->proptext);
|
||||
if (value >= 0.0f) {
|
||||
BLI_snprintf(str, sizeof(str), "%s: +%.3f %s", value_name, value, t->proptext);
|
||||
}
|
||||
else {
|
||||
BLI_snprintf(str, sizeof(str), TIP_("Crease: %.3f %s"), crease, t->proptext);
|
||||
BLI_snprintf(str, sizeof(str), "%s: %.3f %s", value_name, value, t->proptext);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -116,18 +116,18 @@ static void applyCrease(TransInfo *t, const int UNUSED(mval[2]))
|
|||
if (td->flag & TD_SKIP) {
|
||||
continue;
|
||||
}
|
||||
transdata_elem_crease(t, tc, td, crease);
|
||||
transdata_elem_value(t, tc, td, value);
|
||||
}
|
||||
}
|
||||
else {
|
||||
struct TransDataArgs_Crease data = {
|
||||
struct TransDataArgs_Value data = {
|
||||
.t = t,
|
||||
.tc = tc,
|
||||
.crease = crease,
|
||||
.value = value,
|
||||
};
|
||||
TaskParallelSettings settings;
|
||||
BLI_parallel_range_settings_defaults(&settings);
|
||||
BLI_task_parallel_range(0, tc->data_len, &data, transdata_elem_crease_fn, &settings);
|
||||
BLI_task_parallel_range(0, tc->data_len, &data, transdata_elem_value_fn, &settings);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -136,11 +136,18 @@ static void applyCrease(TransInfo *t, const int UNUSED(mval[2]))
|
|||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
static void initCrease_ex(TransInfo *t, int mode)
|
||||
static void applyCrease(TransInfo *t, const int UNUSED(mval[2]))
|
||||
{
|
||||
t->mode = mode;
|
||||
t->transform = applyCrease;
|
||||
apply_value_impl(t, TIP_("Crease"));
|
||||
}
|
||||
|
||||
static void applyBevelWeight(TransInfo *t, const int UNUSED(mval[2]))
|
||||
{
|
||||
apply_value_impl(t, TIP_("Bevel Weight"));
|
||||
}
|
||||
|
||||
static void init_mode_impl(TransInfo *t)
|
||||
{
|
||||
initMouseInputMode(t, &t->mouse, INPUT_SPRING_DELTA);
|
||||
|
||||
t->idx_max = 0;
|
||||
|
@ -157,11 +164,23 @@ static void initCrease_ex(TransInfo *t, int mode)
|
|||
|
||||
void initEgdeCrease(TransInfo *t)
|
||||
{
|
||||
initCrease_ex(t, TFM_EDGE_CREASE);
|
||||
init_mode_impl(t);
|
||||
t->mode = TFM_EDGE_CREASE;
|
||||
t->transform = applyCrease;
|
||||
}
|
||||
|
||||
void initVertCrease(TransInfo *t)
|
||||
{
|
||||
initCrease_ex(t, TFM_VERT_CREASE);
|
||||
init_mode_impl(t);
|
||||
t->mode = TFM_VERT_CREASE;
|
||||
t->transform = applyCrease;
|
||||
}
|
||||
|
||||
void initBevelWeight(TransInfo *t)
|
||||
{
|
||||
init_mode_impl(t);
|
||||
t->mode = TFM_BWEIGHT;
|
||||
t->transform = applyBevelWeight;
|
||||
}
|
||||
|
||||
/** \} */
|
|
@ -1,157 +0,0 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-or-later
|
||||
* Copyright 2001-2002 NaN Holding BV. All rights reserved. */
|
||||
|
||||
/** \file
|
||||
* \ingroup edtransform
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "BLI_math.h"
|
||||
#include "BLI_string.h"
|
||||
#include "BLI_task.h"
|
||||
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_unit.h"
|
||||
|
||||
#include "ED_screen.h"
|
||||
|
||||
#include "UI_interface.h"
|
||||
|
||||
#include "BLT_translation.h"
|
||||
|
||||
#include "transform.h"
|
||||
#include "transform_convert.h"
|
||||
#include "transform_snap.h"
|
||||
|
||||
#include "transform_mode.h"
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/** \name Transform (Bevel Weight) Element
|
||||
* \{ */
|
||||
|
||||
/**
|
||||
* \note Small arrays / data-structures should be stored copied for faster memory access.
|
||||
*/
|
||||
struct TransDataArgs_BevelWeight {
|
||||
const TransInfo *t;
|
||||
const TransDataContainer *tc;
|
||||
float weight;
|
||||
};
|
||||
|
||||
static void transdata_elem_bevel_weight(const TransInfo *UNUSED(t),
|
||||
const TransDataContainer *UNUSED(tc),
|
||||
TransData *td,
|
||||
const float weight)
|
||||
{
|
||||
if (td->val == NULL) {
|
||||
return;
|
||||
}
|
||||
*td->val = td->ival + weight * td->factor;
|
||||
CLAMP(*td->val, 0.0f, 1.0f);
|
||||
}
|
||||
|
||||
static void transdata_elem_bevel_weight_fn(void *__restrict iter_data_v,
|
||||
const int iter,
|
||||
const TaskParallelTLS *__restrict UNUSED(tls))
|
||||
{
|
||||
struct TransDataArgs_BevelWeight *data = iter_data_v;
|
||||
TransData *td = &data->tc->data[iter];
|
||||
if (td->flag & TD_SKIP) {
|
||||
return;
|
||||
}
|
||||
transdata_elem_bevel_weight(data->t, data->tc, td, data->weight);
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/** \name Transform (Bevel Weight)
|
||||
* \{ */
|
||||
|
||||
static void applyBevelWeight(TransInfo *t, const int UNUSED(mval[2]))
|
||||
{
|
||||
float weight;
|
||||
int i;
|
||||
char str[UI_MAX_DRAW_STR];
|
||||
|
||||
weight = t->values[0] + t->values_modal_offset[0];
|
||||
|
||||
CLAMP_MAX(weight, 1.0f);
|
||||
|
||||
transform_snap_increment(t, &weight);
|
||||
|
||||
applyNumInput(&t->num, &weight);
|
||||
|
||||
t->values_final[0] = weight;
|
||||
|
||||
/* header print for NumInput */
|
||||
if (hasNumInput(&t->num)) {
|
||||
char c[NUM_STR_REP_LEN];
|
||||
|
||||
outputNumInput(&(t->num), c, &t->scene->unit);
|
||||
|
||||
if (weight >= 0.0f) {
|
||||
BLI_snprintf(str, sizeof(str), TIP_("Bevel Weight: +%s %s"), c, t->proptext);
|
||||
}
|
||||
else {
|
||||
BLI_snprintf(str, sizeof(str), TIP_("Bevel Weight: %s %s"), c, t->proptext);
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* default header print */
|
||||
if (weight >= 0.0f) {
|
||||
BLI_snprintf(str, sizeof(str), TIP_("Bevel Weight: +%.3f %s"), weight, t->proptext);
|
||||
}
|
||||
else {
|
||||
BLI_snprintf(str, sizeof(str), TIP_("Bevel Weight: %.3f %s"), weight, t->proptext);
|
||||
}
|
||||
}
|
||||
|
||||
FOREACH_TRANS_DATA_CONTAINER (t, tc) {
|
||||
if (tc->data_len < TRANSDATA_THREAD_LIMIT) {
|
||||
TransData *td = tc->data;
|
||||
for (i = 0; i < tc->data_len; i++, td++) {
|
||||
if (td->flag & TD_SKIP) {
|
||||
continue;
|
||||
}
|
||||
transdata_elem_bevel_weight(t, tc, td, weight);
|
||||
}
|
||||
}
|
||||
else {
|
||||
struct TransDataArgs_BevelWeight data = {
|
||||
.t = t,
|
||||
.tc = tc,
|
||||
.weight = weight,
|
||||
};
|
||||
TaskParallelSettings settings;
|
||||
BLI_parallel_range_settings_defaults(&settings);
|
||||
BLI_task_parallel_range(0, tc->data_len, &data, transdata_elem_bevel_weight_fn, &settings);
|
||||
}
|
||||
}
|
||||
|
||||
recalcData(t);
|
||||
|
||||
ED_area_status_text(t->area, str);
|
||||
}
|
||||
|
||||
void initBevelWeight(TransInfo *t)
|
||||
{
|
||||
t->mode = TFM_BWEIGHT;
|
||||
t->transform = applyBevelWeight;
|
||||
|
||||
initMouseInputMode(t, &t->mouse, INPUT_SPRING_DELTA);
|
||||
|
||||
t->idx_max = 0;
|
||||
t->num.idx_max = 0;
|
||||
t->snap[0] = 0.1f;
|
||||
t->snap[1] = t->snap[0] * 0.1f;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
/** \} */
|
Loading…
Reference in New Issue