Skip to content

Commit 3fb3610

Browse files
committed
Added support for local tangent points
1 parent b597efb commit 3fb3610

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

Assets/MixedRealityToolkit/Inspectors/Utilities/Lines/DataProviders/BezierDataProviderInspector.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public class BezierDataProviderInspector : BaseLineDataProviderInspector
2828
private static readonly GUIContent PositionContent = new GUIContent("Position");
2929

3030
private SerializedProperty controlPoints;
31+
private SerializedProperty useLocalTangentPoints;
3132

3233
private BezierDataProvider bezierData;
3334

@@ -38,6 +39,7 @@ protected override void OnEnable()
3839
base.OnEnable();
3940

4041
controlPoints = serializedObject.FindProperty("controlPoints");
42+
useLocalTangentPoints = serializedObject.FindProperty("useLocalTangentPoints");
4143

4244
bezierData = (BezierDataProvider)target;
4345
}
@@ -51,6 +53,7 @@ public override void OnInspectorGUI()
5153
DrawLinePoints = true;
5254

5355
EditorGUILayout.PropertyField(controlPoints, true);
56+
EditorGUILayout.PropertyField(useLocalTangentPoints);
5457

5558
serializedObject.ApplyModifiedProperties();
5659
}

Assets/MixedRealityToolkit/Utilities/Lines/DataProviders/BezierDataProvider.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ public BezierPointSet(float spread)
3131
[Header("Bezier Settings")]
3232
[SerializeField]
3333
private BezierPointSet controlPoints = new BezierPointSet(0.5f);
34+
[Tooltip("If true, control points 2 and 3 will be transformed relative to points 1 and 4 respectively")]
35+
[SerializeField]
36+
private bool useLocalTangentPoints = false;
37+
private Vector3 localOffset;
3438

3539
protected override Vector3 GetPointInternal(int pointIndex)
3640
{
@@ -58,7 +62,13 @@ protected override void SetPointInternal(int pointIndex, Vector3 point)
5862
switch (pointIndex)
5963
{
6064
case 0:
65+
localOffset = Vector3.zero;
66+
// If we're using local tangent points, apply this change to control point 2
67+
if (useLocalTangentPoints)
68+
localOffset = point - controlPoints.Point1;
69+
6170
controlPoints.Point1 = point;
71+
controlPoints.Point2 = controlPoints.Point2 + localOffset;
6272
break;
6373

6474
case 1:
@@ -70,7 +80,12 @@ protected override void SetPointInternal(int pointIndex, Vector3 point)
7080
break;
7181

7282
case 3:
83+
localOffset = Vector3.zero;
84+
if (useLocalTangentPoints)
85+
localOffset = point - controlPoints.Point4;
86+
7387
controlPoints.Point4 = point;
88+
controlPoints.Point3 = controlPoints.Point3 + localOffset;
7489
break;
7590

7691
default:

0 commit comments

Comments
 (0)