Cleanup: Define new curves normal mode in DNA

Don't include the tangent mode for now, since that
was never implemented for geometry nodes curves.
This commit is contained in:
Hans Goudey 2022-04-07 18:10:05 -05:00
parent 3214028ae8
commit 87a3bf3356
4 changed files with 15 additions and 21 deletions

View File

@ -51,12 +51,7 @@ using SplinePtr = std::unique_ptr<Spline>;
*/
class Spline {
public:
enum NormalCalculationMode {
ZUp,
Minimum,
Tangent,
};
NormalCalculationMode normal_mode = Minimum;
NormalMode normal_mode = NORMAL_MODE_MINIMUM_TWIST;
blender::bke::CustomDataAttributes attributes;

View File

@ -189,18 +189,17 @@ static HandleType handle_type_from_dna_bezt(const eBezTriple_Handle dna_handle_t
return BEZIER_HANDLE_AUTO;
}
static Spline::NormalCalculationMode normal_mode_from_dna_curve(const int twist_mode)
static NormalMode normal_mode_from_dna_curve(const int twist_mode)
{
switch (twist_mode) {
case CU_TWIST_Z_UP:
return Spline::NormalCalculationMode::ZUp;
case CU_TWIST_MINIMUM:
return Spline::NormalCalculationMode::Minimum;
case CU_TWIST_TANGENT:
return Spline::NormalCalculationMode::Tangent;
return NORMAL_MODE_Z_UP;
case CU_TWIST_MINIMUM:
return NORMAL_MODE_MINIMUM_TWIST;
}
BLI_assert_unreachable();
return Spline::NormalCalculationMode::Minimum;
return NORMAL_MODE_MINIMUM_TWIST;
}
static KnotsMode knots_mode_from_dna_nurb(const short flag)
@ -333,8 +332,7 @@ std::unique_ptr<CurveEval> curve_eval_from_dna_curve(const Curve &dna_curve,
/* Normal mode is stored separately in each spline to facilitate combining
* splines from multiple curve objects, where the value may be different. */
const Spline::NormalCalculationMode normal_mode = normal_mode_from_dna_curve(
dna_curve.twist_mode);
const NormalMode normal_mode = normal_mode_from_dna_curve(dna_curve.twist_mode);
for (SplinePtr &spline : curve->splines()) {
spline->normal_mode = normal_mode;
}

View File

@ -377,19 +377,14 @@ Span<float3> Spline::evaluated_normals() const
/* Only Z up normals are supported at the moment. */
switch (this->normal_mode) {
case ZUp: {
case NORMAL_MODE_Z_UP: {
calculate_normals_z_up(tangents, normals);
break;
}
case Minimum: {
case NORMAL_MODE_MINIMUM_TWIST: {
calculate_normals_minimum(tangents, is_cyclic_, normals);
break;
}
case Tangent: {
/* Tangent mode is not yet supported. */
calculate_normals_z_up(tangents, normals);
break;
}
}
/* Rotate the generated normals with the interpolated tilt data. */

View File

@ -49,6 +49,12 @@ typedef enum KnotsMode {
NURBS_KNOT_MODE_ENDPOINT_BEZIER = 3,
} KnotsMode;
/** Method used to calculate the normals of a curve's evaluated points. */
typedef enum NormalMode {
NORMAL_MODE_Z_UP = 0,
NORMAL_MODE_MINIMUM_TWIST = 1,
} NormalMode;
/**
* A reusable data structure for geometry consisting of many curves. All control point data is
* stored contiguously for better efficiency. Data for each curve is stored as a slice of the