view ext/DiffinitivePlotsExt.jl @ 2015:5c2448d6a201 feature/grids/geometry_functions tip

Structure tests a bit more
author Jonatan Werpers <jonatan@werpers.com>
date Fri, 09 May 2025 15:57:38 +0200
parents 2d6c45f53bc9
children
line wrap: on
line source

module DiffinitivePlotsExt

using Diffinitive.Grids
using Plots

@recipe f(::Type{<:Grid}, g::Grid) = map(Tuple,g)[:]

@recipe function f(c::Chart{2,<:Rectangle}, n=5, m=n; draw_border=true, bordercolor=1)
    Ξ = parameterspace(c)
    ξs = range(limits(Ξ,1)..., n)
    ηs = range(limits(Ξ,2)..., m)

    label := false
    seriescolor --> 2
    for ξ ∈ ξs
        @series adapted_curve_grid(η->c((ξ,η)),limits(Ξ,1))
    end

    for η ∈ ηs
        @series adapted_curve_grid(ξ->c((ξ,η)),limits(Ξ,2))
    end

    if ~draw_border
        return
    end

    for ξ ∈ limits(Ξ,1)
        @series begin
            linewidth --> 3
            seriescolor := bordercolor
            adapted_curve_grid(η->c((ξ,η)),limits(Ξ,1))
        end
    end

    for η ∈ limits(Ξ,2)
        @series begin
            linewidth --> 3
            seriescolor := bordercolor
            adapted_curve_grid(ξ->c((ξ,η)),limits(Ξ,2))
        end
    end
end

function adapted_curve_grid(g, minmax)
    t1, _ = PlotUtils.adapted_grid(t->g(t)[1], minmax)
    t2, _ = PlotUtils.adapted_grid(t->g(t)[2], minmax)

    ts = sort(vcat(t1,t2))

    x = map(ts) do t
        g(t)[1]
    end
    y = map(ts) do t
        g(t)[2]
    end

    return x, y
end

end