Mercurial > repos > public > sbplib_julia
annotate ext/DiffinitiveMakieExt.jl @ 2002:4300c59bbeff feature/grids/geometry_functions
Merge feature/grids/manifolds
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Tue, 29 Apr 2025 09:00:42 +0200 |
parents | 4d55ac2892a2 |
children |
rev | line source |
---|---|
1726
471a948cd2b2
Rename project from Sbplib to Diffinitive
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1661
diff
changeset
|
1 module DiffinitiveMakieExt |
1628
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
2 |
1726
471a948cd2b2
Rename project from Sbplib to Diffinitive
Vidar Stiernström <vidar.stiernstrom@gmail.com>
parents:
1661
diff
changeset
|
3 using Diffinitive.Grids |
1628
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
4 using Makie |
1629
2fab141e4a9a
Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents:
1628
diff
changeset
|
5 using StaticArrays |
1628
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 |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
8 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
|
9 ps = map(Tuple, g)[:] |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
10 values = gf[:] |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
11 faces = Vector{NTuple{3,Int}}() |
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 n,m = size(g) |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
14 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
|
15 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
|
16 |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
17 # 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
|
18 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
|
19 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
|
20 |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
21 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
|
22 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
|
23 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
|
24 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
|
25 end |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
26 |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
27 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
|
28 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
|
29 |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
30 return verticies, faces, values |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
31 end |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
32 |
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
33 |
1630
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
34 ## Grids |
1629
2fab141e4a9a
Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents:
1628
diff
changeset
|
35 |
1796
4d55ac2892a2
Improve plotting of grids so that it can handle embedded grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1726
diff
changeset
|
36 Makie.convert_arguments(::Type{<:Scatter}, g::Grid) = (reshape(map(Point,g),:),) |
4d55ac2892a2
Improve plotting of grids so that it can handle embedded grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1726
diff
changeset
|
37 function Makie.convert_arguments(::Type{<:Lines}, g::Grid{<:AbstractVector}) |
1629
2fab141e4a9a
Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents:
1628
diff
changeset
|
38 M = collect(g) |
2fab141e4a9a
Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents:
1628
diff
changeset
|
39 |
2fab141e4a9a
Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents:
1628
diff
changeset
|
40 function cat_with_NaN(a,b) |
1796
4d55ac2892a2
Improve plotting of grids so that it can handle embedded grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1726
diff
changeset
|
41 vcat(a,[@SVector fill(NaN, coordinate_size(g))],b) |
1629
2fab141e4a9a
Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents:
1628
diff
changeset
|
42 end |
2fab141e4a9a
Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents:
1628
diff
changeset
|
43 |
2fab141e4a9a
Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents:
1628
diff
changeset
|
44 xlines = reduce(cat_with_NaN, eachrow(M)) |
2fab141e4a9a
Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents:
1628
diff
changeset
|
45 ylines = reduce(cat_with_NaN, eachcol(M)) |
2fab141e4a9a
Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents:
1628
diff
changeset
|
46 |
2fab141e4a9a
Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents:
1628
diff
changeset
|
47 return (cat_with_NaN(xlines,ylines),) |
1628
9cd2b8f81175
Add package extensions for Makie for plotting grids and gridfunctions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
48 end |
1629
2fab141e4a9a
Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents:
1628
diff
changeset
|
49 |
1796
4d55ac2892a2
Improve plotting of grids so that it can handle embedded grids
Jonatan Werpers <jonatan@werpers.com>
parents:
1726
diff
changeset
|
50 Makie.plot!(plot::Plot(Grid)) = lines!(plot, plot.attributes, plot[1]) |
1630
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
51 |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
52 |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
53 ## Grid functions |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
54 |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
55 ### 1D |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
56 function Makie.convert_arguments(::Type{<:Lines}, g::Grid{<:Any,1}, gf::AbstractArray{<:Any, 1}) |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
57 (collect(g), gf) |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
58 end |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
59 |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
60 function Makie.convert_arguments(::Type{<:Scatter}, g::Grid{<:Any,1}, gf::AbstractArray{<:Any, 1}) |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
61 (collect(g), gf) |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
62 end |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
63 |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
64 Makie.plot!(plot::Plot(Grid{<:Any,1}, AbstractArray{<:Any,1})) = lines!(plot, plot.attributes, plot[1], plot[2]) |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
65 |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
66 ### 2D |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
67 function Makie.convert_arguments(::Type{<:Surface}, g::Grid{<:Any,2}, gf::AbstractArray{<:Any, 2}) |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
68 (getindex.(g,1), getindex.(g,2), gf) |
1629
2fab141e4a9a
Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents:
1628
diff
changeset
|
69 end |
1630
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
70 |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
71 function Makie.plot!(plot::Plot(Grid{<:Any,2},AbstractArray{<:Any, 2})) |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
72 r = @lift verticies_and_faces_and_values($(plot[1]), $(plot[2])) |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
73 v,f,c = (@lift $r[1]), (@lift $r[2]), (@lift $r[3]) |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
74 mesh!(plot, plot.attributes, v, f; |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
75 color=c, |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
76 shading = NoShading, |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
77 ) |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
78 end |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
79 # TBD: Can we define `mesh` instead of the above function and then forward plot! to that? |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
80 |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
81 function Makie.convert_arguments(::Type{<:Scatter}, g::Grid{<:Any,2}, gf::AbstractArray{<:Any, 2}) |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
82 ps = map(g,gf) do (x,y), z |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
83 @SVector[x,y,z] |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
84 end |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
85 (reshape(ps,:),) |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
86 end |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
87 |
27d270c9cb89
Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents:
1629
diff
changeset
|
88 end |