Array of boxes using Makie and volume

Hi,
the examples from the Makie documentation show how to build a cube (using volume), but if I try to update the scene with a new one, they overlap. Any ideas on how to solve this. I want to create an array of cubes.

using Makie
r = LinRange(-4, 4, 100);  # our value range, cube centered at 0 
r1 = LinRange(5, 8, 100);  # our value range, cube centered at 6

 ρ(x, y, z) = exp(-(abs(0.1*x^2))) # function (charge density)

scene = Scene(backgroundcolor = :black)

 volume!(
     scene,
     r, r, r,          # coordinates to plot on
     ρ,                # charge density (functions as colorant)
     algorithm = :mip  # maximum-intensity-projection
 )
volume!(
     scene,
     r1, r1, r1,          # coordinates to plot on
     ρ,                # charge density (functions as colorant)
     algorithm = :mip  # maximum-intensity-projection
 )
 scene[Axis].names.textcolor = :white # let axis labels be seen on dark background
 scene

Not Makie, but good for now.

using PlotlyJS
function cube_form(center = 0.0)
     mesh3d(
        x=[0, 0, 1, 1, 0, 0, 1, 1],
        y=[0, 1, 1, 0, 0, 1, 1, 0] .+ center,
        z=[0, 0, 0, 0, 1, 1, 1, 1],
        i=[7, 0, 0, 0, 4, 4, 6, 6, 4, 0, 3, 2],
        j=[3, 4, 1, 2, 5, 6, 5, 2, 0, 1, 6, 3],
        k=[0, 7, 2, 3, 6, 7, 1, 1, 5, 5, 7, 6],
        intensity=range(0, stop=1, length=8),
        colorscale=[
            [0, "gold"],
            [0.5, "mediumturquoise"],
            [1, "gold"]
        ],
    showscale=false,
    opacity = 0.5
    )
end

t = cube_form()
t1 = cube_form(1.5)
t2 = cube_form(3.0)
plot([t, t1, t2])

1 Like

In Makie you can do:


using Makie
function cube_form(center = 0.0)
    # In theory mesh(cube) just works, but somehow doesn't play nicely with
    # the colormap
    cube = FRect3D(Vec3f0(0) .+ Vec3f0(0, center, 0), Vec3f0(1))
    points = decompose(Point3f0, cube)
    faces = decompose(GLTriangle, cube)
    mesh!(
        points, faces,
        color = LinRange(0, 1, 8),
        colormap = [
            (:gold, 0.5),
            (:mediumturquoise, 0.5),
            (:gold, 0.5)
        ],
        transparency = true
    )
end
s = Scene()
t = cube_form()
t1 = cube_form(1.5)
t2 = cube_form(3.0)
s
1 Like

I got the following error in julia 1.0.3 ?

UndefVarError: GLTriangle not defined

Stacktrace:
[1] cube_form(::Float64) at ./In[1]:8
[2] cube_form() at ./In[1]:6
[3] top-level scope at In[1]:21

Sorry, needs a using GeometryTypes

Now it works.
How did you change the angle of projection (view angle)? My output doesn’t look like yours.

Edit: Oh, the output in a jupyter notebook is fixed. But running just the script pops out a window where rotation is posible.

You can have the same effect inside a notebook with:

AbstractPlotting.inline!(false)
AbstractPlotting.inline!(false)

Not working in my end. And no error is shown. Dead end here :smile: