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:
parent
3214028ae8
commit
87a3bf3356
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue