Mercurial > repos > public > sbplib_julia
annotate ext/SbplibMakieExt.jl @ 1628:9cd2b8f81175 feature/grids/plotting
Add package extensions for Makie for plotting grids and gridfunctions
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Fri, 26 Apr 2024 22:19:30 +0200 |
parents | |
children | bf5927631b21 |
rev | line source |
---|---|
1628
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
1 module SbplibMakieExt |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
2 |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
3 using Sbplib.Grids |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
4 using Makie |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
5 |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
6 |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
7 function verticies_and_faces_and_values(g::Grid{<:Any,2}, gf::AbstractArray{<:Any, 2}) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
8 ps = map(Tuple, g)[:] |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
9 values = gf[:] |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
10 |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
11 N = length(ps) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
12 |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
13 faces = Vector{NTuple{3,Int}}() |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
14 |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
15 n,m = size(g) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
16 Li = LinearIndices((1:n, 1:m)) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
17 for i ∈ 1:n-1, j = 1:m-1 |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
18 |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
19 # Add point in the middle of the patch to preserve symmetries |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
20 push!(ps, Tuple((g[i,j] + g[i+1,j] + g[i+1,j+1] + g[i,j+1])/4)) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
21 push!(values, (gf[i,j] + gf[i+1,j] + gf[i+1,j+1] + gf[i,j+1])/4) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
22 |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
23 push!(faces, (Li[i,j], Li[i+1,j], length(ps))) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
24 push!(faces, (Li[i+1,j], Li[i+1,j+1], length(ps))) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
25 push!(faces, (Li[i+1,j+1], Li[i,j+1], length(ps))) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
26 push!(faces, (Li[i,j+1], Li[i,j], length(ps))) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
27 end |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
28 |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
29 verticies = permutedims(reinterpret(reshape,eltype(eltype(ps)), ps)) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
30 faces = permutedims(reinterpret(reshape,Int, faces)) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
31 |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
32 return verticies, faces, values |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
33 end |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
34 |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
35 |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
36 function make_plot(g,gf) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
37 v,f,c = verticies_and_faces_and_values(g,gf) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
38 mesh(v,f,color=c, |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
39 shading = NoShading, |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
40 ) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
41 end |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
42 |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
43 # scatter(collect(g)[:]) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
44 |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
45 function Makie.surface(g::Grid{<:Any,2}, gf::AbstractArray{<:Any, 2}; kwargs...) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
46 surface(getindex.(g,1), getindex.(g,2), gf; |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
47 shading = NoShading, |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
48 kwargs..., |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
49 ) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
50 end |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
51 |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
52 function Makie.mesh(g::Grid{<:Any,2}, gf::AbstractArray{<:Any, 2}; kwargs...) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
53 v,f,c = verticies_and_faces_and_values(g, gf) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
54 mesh(v,f,color=c, |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
55 shading = NoShading, |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
56 kwargs..., |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
57 ) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
58 end |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
59 |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
60 function Makie.plot!(plot::Plot(Grid{<:Any,2},AbstractArray{<:Any, 2})) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
61 # TODO: How to handle kwargs? |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
62 # v,f,c = verticies_and_faces_and_values(plot[1], plot[2]) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
63 r = @lift verticies_and_faces_and_values($(plot[1]), $(plot[2])) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
64 v,f,c = (@lift $r[1]), (@lift $r[2]), (@lift $r[3]) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
65 mesh!(plot, v, f, color=c, |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
66 shading = NoShading, |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
67 ) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
68 end |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
69 |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
70 Makie.convert_arguments(::Type{<:Scatter}, g::Grid) = (map(Tuple,collect(g)[:]),) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
71 end |