Makie: rotating HyperRectangles?

Hi
For my masters thesis I’m trying to write a very basic physics engine,
and since Makie is the only package that seems to do graphics in Julia,
I want to use it to handle the visualisation of simple moving objects in 3D (mainly hyperrectangles).
Yet I can’t seem to find a way to do something simple as rotating a hyperrectangle,
am I missing something? I’ve looked into using a mesh, but I was wondering if there isn’t a nicer way.
Thanks in advance

Fast batch drawing:

using Makie

N = 100

meshscatter(
  Point3f0.(rand.() .* 4, rand(N) .* 4, rand.() .* 0.01),
  markersize = Vec3f0.(rand.() .* 0.3, rand.() .* 0.3, rand(N)), 
  marker = FRect3D(Vec3f0(0), Vec3f0(1)),
  color = rand(RGBf0, N),
  rotations = Vec3f0.(rand(N) .* 0.3, rand.() .* 0.8, 1) # also accepts Quaternions
)


using Makie
N = 100
scene = mesh(
  FRect3D(Vec3f0(-0.5), Vec3f0(1)), color = :skyblue2,
)
rect = scene[end] # last plot is the rect
# there are a couple of ratate! functions, that accept e.g. a vector etc
rotate!(rect, Quaternionf0(0, 0.4, 0, 1))
scene

If this works for you, you could consider adding this to the Makie examples so that the next person has an easier time :wink:
https://github.com/JuliaPlots/Makie.jl/blob/master/examples/examples3d.jl#L599

4 Likes

I get

scene = mesh(
         FRect3D(Vec3f0(-0.5), Vec3f0(1)), color = :skyblue2,
       )
Error showing value of type Scene:
ERROR: MethodError: no method matching _default(::Observables.Observable{GeometryTypes.HomogenousMesh{Point{3,Float32},GeometryTypes.Face{3,GeometryTypes.OffsetInteger{-1,UInt32}},GeometryTypes.Normal{3,Float32},Nothing,ColorTypes.RGBA{Float32},Nothing,Nothing}}, ::Makie.GLMakie.GLAbstraction.Style{:default}, ::Dict{Symbol,Any})
Closest candidates are:
  _default(::GeometryTypes.HomogenousMesh{Point{3,Float32},GeometryTypes.Face{3,GeometryTypes.OffsetInteger{-1,UInt32}},GeometryTypes.Normal{3,Float32},Nothing,ColorTypes.RGBA{Float32},Nothing,Nothing}, ::Makie.GLMakie.GLAbstraction.Style, ::Dict) at /Users/michael/.julia/dev/Makie/src/glbackend/GLVisualize/visualize/mesh.jl:49
  _default(::AxisArrays.AxisArray{T,3,D,Ax} where Ax where D, ::Makie.GLMakie.GLAbstraction.Style, ::Dict) where T at /Users/michael/.julia/dev/Makie/src/glbackend/GLVisualize/visualize/image_like.jl:138
  _default(::Union{Observable{T<:(AxisArray{T,2,D,Ax} where Ax where D where T)}, T<:(AxisArray{T,2,D,Ax} where Ax where D where T)}, ::Makie.GLMakie.GLAbstraction.Style, ::Dict) where T<:(AxisArrays.AxisArray{T,2,D,Ax} where Ax where D where T) at /Users/michael/.julia/dev/Makie/src/glbackend/GLVisualize/visualize/image_like.jl:154

on master with this

pfew, I guess I merged to much to master lately without tests, since I currently need to run them locally :smiley: did you make sure, to synchronize AbstractPlotting & Makie on master?

Aaaahh! I got hit by the “deved packages aren’t touched” Pkg3 behaviour! It looks like you’re tracking master (if you don’t check the path of the package), but it’s your local master. free and add #master resolved this. Sorry for the noise.

thank you so much!