Current section
Files
Jump to
Current section
Files
lib/Shapes/Spline.ex
defmodule Exray.Shapes.Spline do
@moduledoc """
Like lines, but curve and stuff based on control points
"""
alias Exray.Structs.Vector2
alias Exray.Structs.Color
@doc """
Draw spline: Linear, minimum 2 points
"""
@spec draw_spline_linear(points :: [Vector2.t()], thick :: float, color :: Color.t()) :: :ok
defdelegate draw_spline_linear(points, thick, color), to: Exray.Shapes.Spline.Loader
@doc """
Draw spline: B-Spline, minimum 4 points
"""
@spec draw_spline_basis(points :: [Vector2.t()], thick :: float, color :: Color.t()) :: :ok
defdelegate draw_spline_basis(points, thick, color), to: Exray.Shapes.Spline.Loader
@doc """
Draw spline: Catmull-Rom, minimum 4 points
"""
@spec draw_spline_catmull_rom(points :: [Vector2.t()], thick :: float, color :: Color.t()) ::
:ok
defdelegate draw_spline_catmull_rom(points, thick, color), to: Exray.Shapes.Spline.Loader
@doc """
Draw spline: Quadratic Bezier, minimum 3 points (1 control point): [p1, c2, p3, c4...]
"""
@spec draw_spline_bezier_quadratic(points :: [Vector2.t()], thick :: float, color :: Color.t()) ::
:ok
defdelegate draw_spline_bezier_quadratic(points, thick, color), to: Exray.Shapes.Spline.Loader
@doc """
Draw spline: Cubic Bezier, minimum 4 points (2 control points): [p1, c2, c3, p4, c5, c6...]
"""
@spec draw_spline_bezier_cubic(points :: [Vector2.t()], thick :: float, color :: Color.t()) ::
:ok
defdelegate draw_spline_bezier_cubic(points, thick, color), to: Exray.Shapes.Spline.Loader
@doc """
Draw spline segment: Linear, 2 points
"""
@spec draw_spline_segment_linear(
p1 :: Vector2.t(),
p2 :: Vector2.t(),
thick :: float,
color :: Color.t()
) :: :ok
defdelegate draw_spline_segment_linear(p1, p2, thick, color), to: Exray.Shapes.Spline.Loader
@doc """
Draw spline segment: B-Spline, 4 points
"""
@spec draw_spline_segment_basis(
p1 :: Vector2.t(),
p2 :: Vector2.t(),
p3 :: Vector2.t(),
p4 :: Vector2.t(),
thick :: float,
color :: Color.t()
) :: :ok
defdelegate draw_spline_segment_basis(p1, p2, p3, p4, thick, color),
to: Exray.Shapes.Spline.Loader
@doc """
Draw spline segment: Catmull-Rom, 4 points
"""
@spec draw_spline_segment_catmull_rom(
p1 :: Vector2.t(),
p2 :: Vector2.t(),
p3 :: Vector2.t(),
p4 :: Vector2.t(),
thick :: float,
color :: Color.t()
) :: :ok
defdelegate draw_spline_segment_catmull_rom(p1, p2, p3, p4, thick, color),
to: Exray.Shapes.Spline.Loader
@doc """
Draw spline segment: Quadratic Bezier, 2 points, 1 control point
"""
@spec draw_spline_segment_bezier_quadratic(
p1 :: Vector2.t(),
c2 :: Vector2.t(),
p3 :: Vector2.t(),
thick :: float,
color :: Color.t()
) :: :ok
defdelegate draw_spline_segment_bezier_quadratic(p1, c2, p3, thick, color),
to: Exray.Shapes.Spline.Loader
@doc """
Draw spline segment: Cubic Bezier, 2 points, 2 control points
"""
@spec draw_spline_segment_bezier_cubic(
p1 :: Vector2.t(),
c2 :: Vector2.t(),
c3 :: Vector2.t(),
p4 :: Vector2.t(),
thick :: float,
color :: Color.t()
) :: :ok
defdelegate draw_spline_segment_bezier_cubic(p1, c2, c3, p4, thick, color),
to: Exray.Shapes.Spline.Loader
@doc """
Get (evaluate) spline point: Linear
"""
@spec get_spline_point_linear(start_pos :: Vector2.t(), end_pos :: Vector2.t(), t :: float) ::
point :: Vector2.t()
defdelegate get_spline_point_linear(start_pos, end_pos, t), to: Exray.Shapes.Spline.Loader
@doc """
Get (evaluate) spline point: B-Spline
"""
@spec get_spline_point_basis(
p1 :: Vector2.t(),
p2 :: Vector2.t(),
p3 :: Vector2.t(),
p4 :: Vector2.t(),
t :: float
) :: point :: Vector2.t()
defdelegate get_spline_point_basis(p1, p2, p3, p4, t), to: Exray.Shapes.Spline.Loader
@doc """
Get (evaluate) spline point: Catmull-Rom
"""
@spec get_spline_point_catmull_rom(
p1 :: Vector2.t(),
p2 :: Vector2.t(),
p3 :: Vector2.t(),
p4 :: Vector2.t(),
t :: float
) :: point :: Vector2.t()
defdelegate get_spline_point_catmull_rom(p1, p2, p3, p4, t), to: Exray.Shapes.Spline.Loader
@doc """
Get (evaluate) spline point: Quadratic Bezier
"""
@spec get_spline_point_bezier_quad(
p1 :: Vector2.t(),
c2 :: Vector2.t(),
p3 :: Vector2.t(),
t :: float
) :: point :: Vector2.t()
defdelegate get_spline_point_bezier_quad(p1, c2, p3, t), to: Exray.Shapes.Spline.Loader
@doc """
Get (evaluate) spline point: Cubic Bezier
"""
@spec get_spline_point_bezier_cubic(
p1 :: Vector2.t(),
c2 :: Vector2.t(),
c3 :: Vector2.t(),
p4 :: Vector2.t(),
t :: float
) :: point :: Vector2.t()
defdelegate get_spline_point_bezier_cubic(p1, c2, c3, p4, t), to: Exray.Shapes.Spline.Loader
end