/// <summary> /// Determines how to display the spline depending on the number of control points that are present. /// </summary> protected virtual void ChooseDisplayMethod() { sphereObject.SetActive(false); if (SplineMesh.GetNumberOfControlPoints() == 0) { //display nothing meshFilter.mesh = new Mesh(); //update collider meshCollider.sharedMesh = meshFilter.sharedMesh; } else if (SplineMesh.GetNumberOfControlPoints() == 1) { //display sphere if there is only one control point sphereObject.SetActive(true); sphereObject.transform.localPosition = SplineMesh.GetControlPoints()[0]; //update collider meshCollider.sharedMesh = null; } else if (SplineMesh.GetNumberOfControlPoints() == 2) { //display linearly interpolated segment if there are two control points List <Vector3> controlPoints = SplineMesh.GetControlPoints(); //set the two control points meshFilter.mesh = LinearSplineMesh.SetControlPoints(controlPoints.ToArray()); //update collider meshCollider.sharedMesh = meshFilter.sharedMesh; } else { //display smoothly interpolated segments by not overwriting the previously generated mesh //update collider meshCollider.sharedMesh = meshFilter.sharedMesh; } }
/// <summary> /// Determines how to display the spline depending on the number of control points that are present. /// </summary> protected virtual void ChooseDisplayMethod(Mesh newMesh) { sphereObject.SetActive(false); if (SplineMesh.GetNumberOfControlPoints() == 0) { UpdateSceneMesh(null); } else if (SplineMesh.GetNumberOfControlPoints() == 1) { //display sphere if there is only one control point sphereObject.SetActive(true); sphereObject.transform.localPosition = SplineMesh.GetControlPoints()[0]; //update collider UpdateSceneMesh(null); } else if (SplineMesh.GetNumberOfControlPoints() == 2) { //display linearly interpolated segment if there are two control points List <Vector3> controlPoints = SplineMesh.GetControlPoints(); //set the two control points UpdateSceneMesh(LinearSplineMesh.SetControlPoints(controlPoints.ToArray())); } else { UpdateSceneMesh(newMesh); } }
public void SplineMesh_AddControlPoint_Performance([NUnit.Framework.Range(9, 99, 10)] int length) { SplineMesh splineMesh = null; Measure.Method(() => { splineMesh.AddControlPoint(new Vector3(length + 1, 0, 0)); }) .SetUp(() => { splineMesh = new SplineMesh(new KochanekBartelsSpline()); splineMesh.SetControlPoints(GenerateControlPoints(length).ToArray()); }) .Run(); }
// Start is called before the first frame update void Start() { ControlPoints = new Vector3[ControlPointObjects.Length]; for (int i = 0; i < ControlPointObjects.Length; i++) { ControlPoints[i] = ControlPointObjects[i].transform.position; } SplineMesh = new SplineMesh(new KochanekBartelsSpline()); GetComponent <MeshFilter>().mesh = SplineMesh.SetControlPoints(ControlPoints); //SplineMesh.deleteControlPoint(9); //SplineMesh.addControlPoint(extraControlPoint.transform.position); //SplineMesh.insertControlPoint(1, extraControlPoint.transform.position); }