annotate ext/DiffinitiveMakieExt.jl @ 1996:d89f7a1a6f37 feature/grids/manifolds

Add some notation to the docs page
author Jonatan Werpers <jonatan@werpers.com>
date Wed, 23 Apr 2025 09:02:20 +0200
parents 4d55ac2892a2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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