RoboticArms/Library/PackageCache/com.unity.splines@d3e1e500c9a0/Editor/Tools/KnotPlacementData.cs
2025-11-17 15:16:36 +07:00

65 lines
1.9 KiB
C#

using Unity.Mathematics;
using UnityEngine;
namespace UnityEditor.Splines
{
class CurvePlacementData : PlacementData
{
readonly SplineCurveHit m_Hit;
public CurvePlacementData(Vector2 mouse, SplineCurveHit hit) : base(mouse, hit.Position, hit.Normal, hit.NextKnot.SplineInfo.Transform.lossyScale)
{
m_Hit = hit;
}
public override SelectableKnot GetOrCreateLinkedKnot()
{
EditorSplineUtility.RecordObject(m_Hit.NextKnot.SplineInfo, "Insert Knot");
return EditorSplineUtility.InsertKnot(m_Hit.NextKnot.SplineInfo, m_Hit.NextKnot.KnotIndex, m_Hit.T);
}
}
class KnotPlacementData : PlacementData
{
readonly SelectableKnot m_Target;
public KnotPlacementData(Vector3 mouse, SelectableKnot target) : base(mouse, target.Position, math.mul(target.Rotation, math.up()), target.SplineInfo.Transform.lossyScale)
{
m_Target = target;
}
public override SelectableKnot GetOrCreateLinkedKnot()
{
return m_Target;
}
}
class PlacementData
{
public Vector2 MousePosition { get; }
public Vector3 TangentOut { get; set; }
public Vector3 Position { get; }
public Vector3 Normal { get; }
public Vector3 Scale { get; }
public Plane Plane { get; }
public PlacementData(Vector2 mouse, Vector3 position, Vector3 normal)
{
MousePosition = mouse;
Position = position;
Normal = normal;
Scale = Vector3.one;
TangentOut = Vector3.zero;
Plane = new Plane(normal, position);
}
public PlacementData(Vector2 mouse, Vector3 position, Vector3 normal, Vector3 scale) : this(mouse, position, normal)
{
Scale = scale;
}
public virtual SelectableKnot GetOrCreateLinkedKnot() => default;
}
}