diff --git a/ext/MeshesMakieExt.jl b/ext/MeshesMakieExt.jl index 2c9929b07..31db972fd 100644 --- a/ext/MeshesMakieExt.jl +++ b/ext/MeshesMakieExt.jl @@ -30,6 +30,7 @@ end # choose between 2D and 3D axis Makie.args_preferred_axis(::Geometry{Dim}) where {Dim} = Dim === 3 ? Makie.LScene : Makie.Axis Makie.args_preferred_axis(::Domain{Dim}) where {Dim} = Dim === 3 ? Makie.LScene : Makie.Axis +Makie.args_preferred_axis(::AbstractVector{<:Vec{Dim}}) where {Dim} = Dim === 3 ? Makie.LScene : Makie.Axis # color handling include("colors.jl") @@ -42,6 +43,7 @@ include("grid.jl") include("simplemesh.jl") include("subcartesiangrid.jl") include("geometryset.jl") +include("vector.jl") include("fallbacks.jl") end diff --git a/ext/fallbacks.jl b/ext/fallbacks.jl index e44771784..334defcb3 100644 --- a/ext/fallbacks.jl +++ b/ext/fallbacks.jl @@ -4,16 +4,20 @@ Makie.plottype(::Geometry) = Viz{<:Tuple{Geometry}} Makie.plottype(::Domain) = Viz{<:Tuple{Domain}} +Makie.plottype(::Vec) = Viz{<:Tuple{Vec}} +Makie.plottype(::AbstractVector{<:Vec}) = Viz{<:Tuple{AbstractVector{<:Vec}}} Makie.convert_arguments(::Type{<:Viz}, geom::Geometry) = (GeometrySet([geom]),) Makie.convert_arguments(::Type{<:Viz}, domain::Domain) = (GeometrySet(collect(domain)),) Makie.convert_arguments(::Type{<:Viz}, mesh::Mesh) = (convert(SimpleMesh, mesh),) +Makie.convert_arguments(::Type{<:Viz}, vec::Vec) = ([vec],) # skip conversion for these types Makie.convert_arguments(::Type{<:Viz}, gset::GeometrySet) = (gset,) Makie.convert_arguments(::Type{<:Viz}, mesh::SimpleMesh) = (mesh,) Makie.convert_arguments(::Type{<:Viz}, grid::Grid) = (grid,) Makie.convert_arguments(::Type{<:Viz}, grid::SubCartesianGrid) = (grid,) +Makie.convert_arguments(::Type{<:Viz}, vecs::AbstractVector{<:Vec}) = (vecs,) # vector of geometries for convenience Makie.plottype(::AbstractVector{<:Geometry}) = Viz{<:Tuple{AbstractVector{<:Geometry}}} diff --git a/ext/vector.jl b/ext/vector.jl new file mode 100644 index 000000000..369c06d52 --- /dev/null +++ b/ext/vector.jl @@ -0,0 +1,22 @@ +# ------------------------------------------------------------------ +# Licensed under the MIT License. See LICENSE in the project root. +# ------------------------------------------------------------------ + +function Makie.plot!(plot::Viz{<:Tuple{AbstractVector{Vec{Dim,T}}}}) where {Dim,T} + vecs = plot[:object] + color = plot[:color] + alpha = plot[:alpha] + colorscheme = plot[:colorscheme] + + if Dim ∉ (2, 3) + error("not implemented") + end + + # process color spec into colorant + colorant = Makie.@lift process($color, $colorscheme, $alpha) + + # visualize as built-in arrows + origins = Makie.@lift fill(zero(Makie.Point{Dim,T}), length($vecs)) + directions = Makie.@lift asmakie.($vecs) + Makie.arrows!(plot, origins, directions, color=colorant) +end