public void SwitchSides() { SplineUtility.ReverseArray(Surfaces.AsArray()); SplineUtility.ReverseArray(Samples.AsArray()); InvertSamples(); m_NumLeftSurfaces = Surfaces.Length; m_NumLeftSamples = Samples.Length; }
void SolveCorner() { if (m_ParentObj != null) { DestroyImmediate(m_ParentObj); } m_ParentObj = new GameObject("RoundedCornerVisualizer"); NativeArray <float2> leftBuffer, rightBuffer; switch (testCase) { case TestCase.BetweenBothSegments: BetweenBothSegments(out leftBuffer, out rightBuffer); break; case TestCase.PivotLeftSegment: PivotNextLeftSegment(out leftBuffer, out rightBuffer); break; case TestCase.PivotRightSegment: PivotNextRightSegment(out leftBuffer, out rightBuffer); break; case TestCase.PivotBothSegments: PivotBothSegments(out leftBuffer, out rightBuffer); break; case TestCase.InwardInput: InwardInput(out leftBuffer, out rightBuffer); break; case TestCase.OutwardInput: OutwardInput(out leftBuffer, out rightBuffer); break; default: throw new ArgumentOutOfRangeException(); } SplineUtility.ReverseArray(rightBuffer); var leftBufferTransform = Float2ToRigidTransform(leftBuffer); var rightBufferTransform = Float2ToRigidTransform(rightBuffer); var roundedCornerSolver = new RoundedCornerSolver { LeftBuffer = leftBufferTransform, RightBuffer = rightBufferTransform, CornerRadius = radius }; if (roundedCornerSolver.Solve(out var results)) { var leftTangent = Utilities.GeometryUtility.SwizzleX0Z(results.LeftTangent); var rightTangent = Utilities.GeometryUtility.SwizzleX0Z(results.RightTangent); CreateLine(leftBufferTransform, Color.green); CreateLine(rightBufferTransform, Color.green); CreateLine(new Vector3[] { leftTangent, results.Center3 }, Color.red); CreateLine(new Vector3[] { rightTangent, results.Center3 }, Color.blue); CreateCircle(results.Center3, radius, Color.cyan); } else { CreateLine(leftBufferTransform, Color.magenta); CreateLine(rightBufferTransform, Color.magenta); } CreateNormals(leftBuffer); CreateNormals(rightBuffer); leftBuffer.Dispose(); rightBuffer.Dispose(); leftBufferTransform.Dispose(); rightBufferTransform.Dispose(); }