From 0ac06a7b271097cf16da92f4b5ef69785a8881a5 Mon Sep 17 00:00:00 2001 From: Fredrik Bagge Carlson Date: Fri, 14 Jun 2024 12:01:21 +0200 Subject: [PATCH 1/2] add support for CAD model rendering for BadyShapes --- Manifest.toml | 54 +++++++++++++++++++++++++++++++- Project.toml | 2 +- examples/resources/b0.stl | Bin 0 -> 68084 bytes examples/resources/b1.stl | Bin 0 -> 189384 bytes examples/resources/b2.stl | Bin 0 -> 77284 bytes examples/resources/b3.stl | Bin 0 -> 110484 bytes examples/resources/b4.stl | Bin 0 -> 22484 bytes examples/resources/b5.stl | Bin 0 -> 16684 bytes examples/resources/b6.stl | Bin 0 -> 8884 bytes ext/Render.jl | 56 +++++++++++++++++++++++++--------- src/Multibody.jl | 3 ++ src/components.jl | 8 +++-- src/robot/robot_components.jl | 10 +++++- 13 files changed, 114 insertions(+), 19 deletions(-) create mode 100644 examples/resources/b0.stl create mode 100644 examples/resources/b1.stl create mode 100644 examples/resources/b2.stl create mode 100644 examples/resources/b3.stl create mode 100644 examples/resources/b4.stl create mode 100644 examples/resources/b5.stl create mode 100644 examples/resources/b6.stl diff --git a/Manifest.toml b/Manifest.toml index 2e16651e..17c948c8 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -2,7 +2,7 @@ julia_version = "1.10.4" manifest_format = "2.0" -project_hash = "efeef262c86b4eafbecc9a61dea3d204d89a22d1" +project_hash = "73eed5db0c7b181f606e63adf5124204d72a3d45" [[deps.ADTypes]] git-tree-sha1 = "fc02d55798c1af91123d07915a990fbb9a10d146" @@ -166,6 +166,12 @@ git-tree-sha1 = "70232f82ffaab9dc52585e0dd043b5e0c6b714f1" uuid = "fb6a15b2-703c-40df-9091-08a04967cfa9" version = "0.1.12" +[[deps.ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "b10d0b65641d57b8b4d5e234446582de5047050d" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.11.5" + [[deps.Combinatorics]] git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860" uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" @@ -451,6 +457,12 @@ version = "0.13.2" ScientificTypes = "321657f4-b219-11e9-178b-2701a2544e81" Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" +[[deps.EarCut_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "e3290f2d49e661fbd94046d7e3726ffcb2d41053" +uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5" +version = "2.2.4+0" + [[deps.EnumX]] git-tree-sha1 = "bdb1942cd4c45e3c678fd11569d5cccd80976237" uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56" @@ -482,6 +494,11 @@ git-tree-sha1 = "fc3951d4d398b5515f91d7fe5d45fc31dccb3c9b" uuid = "6b7a57c9-7cc1-4fdf-b7f5-e857abae3636" version = "0.8.5" +[[deps.Extents]] +git-tree-sha1 = "94997910aca72897524d2237c41eb852153b0f65" +uuid = "411431e0-e8b7-467b-b5e0-f676ba4f2910" +version = "0.1.3" + [[deps.FastBroadcast]] deps = ["ArrayInterface", "LinearAlgebra", "Polyester", "Static", "StaticArrayInterface", "StrideArraysCore"] git-tree-sha1 = "2be93e36303143c6fffd07e2222bbade35194d9e" @@ -499,6 +516,12 @@ git-tree-sha1 = "cbf5edddb61a43669710cbc2241bc08b36d9e660" uuid = "29a986be-02c6-4525-aec4-84b980013641" version = "2.0.4" +[[deps.FileIO]] +deps = ["Pkg", "Requires", "UUIDs"] +git-tree-sha1 = "82d8afa92ecf4b52d78d869f038ebfb881267322" +uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +version = "1.16.3" + [[deps.FileWatching]] uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" @@ -535,6 +558,12 @@ version = "2.23.1" BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" +[[deps.FixedPointNumbers]] +deps = ["Statistics"] +git-tree-sha1 = "05882d6995ae5c12bb5f36dd2ed3f61c98cbb172" +uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" +version = "0.8.5" + [[deps.Format]] git-tree-sha1 = "9c68794ef81b08086aeb32eeaf33531668d5f5fc" uuid = "1fa38f19-a742-5d3f-a2b9-30dd87b9d5f8" @@ -589,6 +618,18 @@ git-tree-sha1 = "af49a0851f8113fcfae2ef5027c6d49d0acec39b" uuid = "c145ed77-6b09-5dd9-b285-bf645a82121e" version = "0.5.4" +[[deps.GeoInterface]] +deps = ["Extents"] +git-tree-sha1 = "801aef8228f7f04972e596b09d4dba481807c913" +uuid = "cf35fbd7-0cd7-5166-be24-54bfbe79505f" +version = "1.3.4" + +[[deps.GeometryBasics]] +deps = ["EarCut_jll", "Extents", "GeoInterface", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"] +git-tree-sha1 = "b62f2b2d76cee0d61a2ef2b3118cd2a3215d3134" +uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" +version = "0.4.11" + [[deps.Glob]] git-tree-sha1 = "97285bbd5230dd766e9ef6749b80fc617126d496" uuid = "c27321d9-0574-5035-807b-f59d2c89b15c" @@ -658,6 +699,11 @@ git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" version = "0.2.2" +[[deps.IterTools]] +git-tree-sha1 = "42d5f897009e7ff2cf88db414a389e5ed1bdd023" +uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" +version = "1.10.0" + [[deps.IteratorInterfaceExtensions]] git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" uuid = "82899510-4779-5014-852e-03e436cf321d" @@ -949,6 +995,12 @@ deps = ["Artifacts", "Libdl"] uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" version = "2.28.2+1" +[[deps.MeshIO]] +deps = ["ColorTypes", "FileIO", "GeometryBasics", "Printf"] +git-tree-sha1 = "8c26ab950860dfca6767f2bbd90fdf1e8ddc678b" +uuid = "7269a6da-0436-5bbc-96c2-40638cbb6118" +version = "0.4.11" + [[deps.Missings]] deps = ["DataAPI"] git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d" diff --git a/Project.toml b/Project.toml index db616b9a..356831bb 100644 --- a/Project.toml +++ b/Project.toml @@ -19,10 +19,10 @@ Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" Render = ["Makie"] [compat] +CoordinateTransformations = "0.6" ModelingToolkit = "9" ModelingToolkitStandardLibrary = "2" Rotations = "1.4" -CoordinateTransformations = "0.6" julia = "1" [extras] diff --git a/examples/resources/b0.stl b/examples/resources/b0.stl new file mode 100644 index 0000000000000000000000000000000000000000..13e18fe0d405e59c01477b18e2c84ff95999c478 GIT binary patch literal 68084 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 aHH_G=*~#cv*Rt&hlhHMd*ss~E)&B>5ws9u_ literal 0 HcmV?d00001 diff --git a/examples/resources/b1.stl b/examples/resources/b1.stl new file mode 100644 index 0000000000000000000000000000000000000000..e499eaf6e6a6824160fcff6d15a4cd7047c06cde GIT binary patch literal 189384 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
BYI3WMdr%!c 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�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 D^Qw0# literal 0 HcmV?d00001 diff --git a/examples/resources/b6.stl b/examples/resources/b6.stl new file mode 100644 index 0000000000000000000000000000000000000000..ff729b0c3a4bee907c1c8b1dc424765d0e3bfee2 GIT binary patch literal 8884 zcmbuDF^gnH6op@~ffyPpqKUBK3L~=6%&@@*E~3ILGJ%m|vXQ7@G`hjKAYx!Xf56OO zm_U1X692_y1{x@+45EPp*17dgz3)~}w{O}9!@J$5&OPT=-KzJd_wT=c_u#D;-+cGM z`|o{x>*eA9Uf*^JUbwfj{OrME`NuQI3&!`KJC5%UZtpBidAO&D$e*`PV$|bTADxnI zM!geZOtu+SgNXIMzPYm`+lk9h08YV54RyskqXPPb;vtK-W3 z5$a>!i2GTXr{P)W?AE#J5v}?1&dKIF7CVoB_s_lR4b3j&%(%GmO8D2E2sOx_uOYW}J$elz?5p(} z>O|F{4riPhFYVWL`26P46C%_gJJ&&kG18q73bLvH187abAwf>|R54$h#Pd^&BKy@pP43OKFVNwpb%3?V_=(Z_0TU z?h8?bI7*Sruy~C_wSL5>|>KISER#Tjb zQHRc5`lSXl&DXHQRShGatKMPOaF_VaLY=QTyFy=`5upY%&DW4yIZS;O8b;iGy~C`b zPx4;hKc+al!XDJ~JXXqirKh;hly%l=Ozd7`LZ)}0^%{paJ`Gpj{e8Y*eDU*ne1Cdz z7!H-8zQYmO|K+lEAKAGEB8T`p0|D$%-CE9*=E!_dPHmf>_3+q>L{mAR6d?QEiNZ& z#Pv+9Di6>QSU?;lWj(=gNXIi;bfb!S%Yjdss@pgH|n@*HO*ST=45+xUJuW^ z=4$hA89Es>o8yVoVx3C*K0VK4pA*r^sZsi4CcCP4B8IW%Ll2H9p* z4I*|mJ_oOZs%!` zJq(XNtiOxyy;gt6a$b$nS+c!`*{d2xRJr2Kb5&+HD%7em=DZEVN6**aML+m;=Zpw7 z$j);`gfZEx8ul)R;@)A_;0ec=dc)v#(7F(z2HEp9>~K}Xi1I2{53JX)E1d?6Gvlwj zwV$5)@@SU`HOS6&5MfOAF!UPsE{5XXVb*Y$@Z?lXy|m_gM5w_`^EK>nRl|t8uXmU= z^hqnG{~8%*SJ>x!M5sZw;(V>skXt!S`#dxzB>!j1Op``&5@+97ZHqNxVw5`KchRy> z;&-eGnKYPb%CCqBV_|Yz=djl>B8F?~*~(C_(i!1>?7kLfMmev-e>tx-SFKuVFq5&jyz*HR8WS?T`zYs>>0fSNX5at- literal 0 HcmV?d00001 diff --git a/ext/Render.jl b/ext/Render.jl index 605499f9..6e1adf24 100644 --- a/ext/Render.jl +++ b/ext/Render.jl @@ -1,11 +1,12 @@ module Render using Makie using Multibody -import Multibody: render, render! +import Multibody: render, render!, encode, decode using Rotations using LinearAlgebra using ModelingToolkit export render +using MeshIO, FileIO function get_rot(sol, frame, t) @@ -69,8 +70,17 @@ function get_color(sys, sol, default) end end +function get_shape(sys, sol)::String + try + sf = sol(sol.t[1], idxs=collect(sys.shapefile)) + decode(sf) + catch + "" + end +end + -function default_scene(x,y,z,lookat,up,show_axis) +function default_scene(x,y,z; lookat=Vec3f(0,0,0),up=Vec3f(0,1,0),show_axis=false) # if string(Makie.current_backend()) == "CairoMakie" # scene = Scene() # https://github.com/MakieOrg/Makie.jl/issues/3763 # fig = nothing @@ -103,7 +113,7 @@ function render(model, sol, filename = "multibody_$(model.name).mp4", kwargs... ) - scene, fig = default_scene(x,y,z,lookat,up,show_axis) + scene, fig = default_scene(x,y,z; lookat,up,show_axis) if timevec === nothing timevec = range(sol.t[1], sol.t[end]*timescale, step=1/framerate) end @@ -124,7 +134,7 @@ function render(model, sol, time::Real; # fig = Figure() # scene = LScene(fig[1, 1]).scene # cam3d!(scene) - scene, fig = default_scene(0,0,10) + scene, fig = default_scene(0,0,10; kwargs...) # mesh!(scene, Rect3f(Vec3f(-5, -3.6, -5), Vec3f(10, 0.1, 10)), color=:gray) # Floor steps = range(sol.t[1], sol.t[end], length=3000) @@ -281,18 +291,36 @@ function render!(scene, ::typeof(FixedTranslation), sys, sol, t) end function render!(scene, ::typeof(BodyShape), sys, sol, t) - r_0a = get_fun(sol, collect(sys.frame_a.r_0)) - r_0b = get_fun(sol, collect(sys.frame_b.r_0)) - radius = Float32(sol(sol.t[1], idxs=sys.radius)) color = get_color(sys, sol, :purple) - thing = @lift begin - r1 = Point3f(r_0a($t)) - r2 = Point3f(r_0b($t)) - origin = r1 - extremity = r2 - Makie.GeometryBasics.Cylinder(origin, extremity, radius) + shapepath = get_shape(sys, sol) + if isempty(shapepath) + radius = Float32(sol(sol.t[1], idxs=sys.radius)) + r_0a = get_fun(sol, collect(sys.frame_a.r_0)) + r_0b = get_fun(sol, collect(sys.frame_b.r_0)) + thing = @lift begin + r1 = Point3f(r_0a($t)) + r2 = Point3f(r_0b($t)) + origin = r1 + extremity = r2 + Makie.GeometryBasics.Cylinder(origin, extremity, radius) + end + mesh!(scene, thing; color, specular = Vec3f(1.5)) + else + T = get_frame_fun(sol, sys.frame_a) + + @info "Loading shape mesh $shapepath" + shapemesh = FileIO.load(shapepath) + m = mesh!(scene, shapemesh; color, specular = Vec3f(1.5)) + + on(t) do t + Ta = T(t) + r1 = Point3f(Ta[1:3, 4]) + q = Rotations.QuatRotation(Ta[1:3, 1:3]).q + Q = Makie.Quaternionf(q.v1, q.v2, q.v3, q.s) + Makie.transform!(m, translation=r1, rotation=Q) + end end - mesh!(scene, thing; color, specular = Vec3f(1.5)) + # thing = @lift begin # r1 = Point3f(sol($t, idxs=collect(sys.frame_a.r_0))) # r2 = Point3f(sol($t, idxs=collect(sys.frame_b.r_0))) diff --git a/src/Multibody.jl b/src/Multibody.jl index e1d9c216..a356b7dc 100644 --- a/src/Multibody.jl +++ b/src/Multibody.jl @@ -91,6 +91,9 @@ function at_variables_t(args...; default = nothing) xs end +encode(s) = Float64.(codeunits(s)) # Used to store strings as vectors of floats in parameters. useful for providing paths to shapefiles for 3D rendering +decode(s) = String(UInt8.(s)) + # using ModelingToolkit.SciMLBase # import SymbolicIR: InitialType # """ diff --git a/src/components.jl b/src/components.jl index 8df2998b..3961f657 100644 --- a/src/components.jl +++ b/src/components.jl @@ -343,8 +343,9 @@ The `BodyShape` component is similar to a [`Body`](@ref), but it has two frames - `r`: Vector from `frame_a` to `frame_b` resolved in `frame_a` - All `kwargs` are passed to the internal `Body` component. +- `shapefile`: A path::String to a CAD model that can be imported by MeshIO for 3D rendering. If none is provided, a cylinder shape is rendered. """ -@component function BodyShape(; name, m = 1, r = [0, 0, 0], r_cm = 0.5*r, r_0 = 0, radius = 0.08, color=purple, kwargs...) +@component function BodyShape(; name, m = 1, r = [0, 0, 0], r_cm = 0.5*r, r_0 = 0, radius = 0.08, color=purple, shapefile="", kwargs...) systems = @named begin translation = FixedTranslation(r = r) body = Body(; r_cm, r_0, kwargs...) @@ -363,16 +364,19 @@ The `BodyShape` component is similar to a [`Body`](@ref), but it has two frames @variables a_0(t)[1:3] [ guess=0, description = "Absolute acceleration of frame_a resolved in world frame (= D(v_0))", ] + + shapecode = encode(shapefile) @parameters begin r[1:3]=r, [ description = "Vector from frame_a to frame_b resolved in frame_a", ] radius = radius, [description = "Radius of the body in animations"] color[1:4] = color, [description = "Color of the body in animations"] + shapefile[1:length(shapecode)] = shapecode end - pars = [r; radius; color] + pars = [r; radius; color; shapefile] r_0, v_0, a_0 = collect.((r_0, v_0, a_0)) diff --git a/src/robot/robot_components.jl b/src/robot/robot_components.jl index 4ba8f727..3de0ecea 100644 --- a/src/robot/robot_components.jl +++ b/src/robot/robot_components.jl @@ -438,6 +438,7 @@ function MechanicalStructure(; name, mLoad = 15, rLoad = [0, 0.25, 0], g = 9.81) (tau(t)[1:6]), [guess = 0, state_priority = typemax(Int), description = "Joint driving torques"] end + path = @__DIR__() systems = @named begin axis1 = Rotational.Flange() @@ -453,6 +454,7 @@ function MechanicalStructure(; name, mLoad = 15, rLoad = [0, 0.25, 0], g = 9.81) r5 = Revolute(n = [1, 0, 0], axisflange = true, isroot = false, radius=0.05, color=robot_orange) r6 = Revolute(n = [0, 1, 0], axisflange = true, isroot = false, radius=0.02, color=[0.5, 0.5, 0.5, 1]) b0 = BodyShape(r = [0, 0.351, 0], + shapefile = joinpath(path, "../../examples/resources/b0.stl"), # r_shape = [0, 0, 0], # lengthDirection = [1, 0, 0], # widthDirection = [0, 1, 0], @@ -460,9 +462,10 @@ function MechanicalStructure(; name, mLoad = 15, rLoad = [0, 0.25, 0], g = 9.81) # width = 0.3, # height = 0.3, radius = 0.3/2, - color = robot_orange, + color = [0.5, 0.5, 0.5, 1], m = 1) b1 = BodyShape(r = [0, 0.324, 0.3], + shapefile = joinpath(path, "../../examples/resources/b1.stl"), I_22 = 1.16, # lengthDirection = [1, 0, 0], # widthDirection = [0, 1, 0], @@ -473,6 +476,7 @@ function MechanicalStructure(; name, mLoad = 15, rLoad = [0, 0.25, 0], g = 9.81) color = robot_orange, m = 1) b2 = BodyShape(r = [0, 0.65, 0], + shapefile = joinpath(path, "../../examples/resources/b2.stl"), r_cm = [0.172, 0.205, 0], m = 56.5, I_11 = 2.58, @@ -488,6 +492,7 @@ function MechanicalStructure(; name, mLoad = 15, rLoad = [0, 0.25, 0], g = 9.81) color = robot_orange, ) b3 = BodyShape(r = [0, 0.414, -0.155], + shapefile = joinpath(path, "../../examples/resources/b3.stl"), r_cm = [0.064, -0.034, 0], m = 26.4, I_11 = 0.279, @@ -503,6 +508,7 @@ function MechanicalStructure(; name, mLoad = 15, rLoad = [0, 0.25, 0], g = 9.81) color = robot_orange, ) b4 = BodyShape(r = [0, 0.186, 0], + shapefile = joinpath(path, "../../examples/resources/b4.stl"), m = 28.7, I_11 = 1.67, I_22 = 0.081, @@ -516,6 +522,7 @@ function MechanicalStructure(; name, mLoad = 15, rLoad = [0, 0.25, 0], g = 9.81) color = robot_orange, ) b5 = BodyShape(r = [0, 0.125, 0], + shapefile = joinpath(path, "../../examples/resources/b5.stl"), m = 5.2, I_11 = 1.25, I_22 = 0.81, @@ -529,6 +536,7 @@ function MechanicalStructure(; name, mLoad = 15, rLoad = [0, 0.25, 0], g = 9.81) color = [0.5, 0.5, 0.5, 1], ) b6 = BodyShape(r = [0, 0, 0], + shapefile = joinpath(path, "../../examples/resources/b6.stl"), r_cm = [0.05, 0.05, 0.05], m = 0.5, # lengthDirection = [1, 0, 0], From 93c70b5ad4c7ff868dd2d8d51bd98d7efd41bc9c Mon Sep 17 00:00:00 2001 From: Fredrik Bagge Carlson Date: Fri, 14 Jun 2024 12:22:30 +0200 Subject: [PATCH 2/2] don't recenter camera --- docs/src/examples/pendulum.md | 4 ++-- docs/src/examples/robot.md | 2 +- docs/src/examples/ropes_and_cables.md | 4 ++-- ext/Render.jl | 8 ++++---- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/src/examples/pendulum.md b/docs/src/examples/pendulum.md index 97676c8e..30ae0a04 100644 --- a/docs/src/examples/pendulum.md +++ b/docs/src/examples/pendulum.md @@ -199,8 +199,8 @@ W(args...; kwargs...) = Multibody.world world = W() shoulder_joint = Revolute(n = [0, 1, 0], isroot = true, axisflange = true) elbow_joint = Revolute(n = [0, 0, 1], isroot = true, axisflange = true, phi0=0.1) - upper_arm = BodyShape(; m = 0.1, isroot = false, r = [0, 0, 0.6], radius=0.05) - lower_arm = BodyShape(; m = 0.1, isroot = false, r = [0, 0.6, 0], radius=0.05) + upper_arm = BodyShape(; m = 0.1, isroot = false, r = [0, 0, 0.6], radius=0.04) + lower_arm = BodyShape(; m = 0.1, isroot = false, r = [0, 0.6, 0], radius=0.04) tip = Body(; m = 0.3, isroot = false) damper1 = RDamper(d = 0.07) diff --git a/docs/src/examples/robot.md b/docs/src/examples/robot.md index d25ea11b..cdd675a9 100644 --- a/docs/src/examples/robot.md +++ b/docs/src/examples/robot.md @@ -98,7 +98,7 @@ Multibody.jl supports automatic 3D rendering of mechanisms, we use this feature ```@example robot import CairoMakie -Multibody.render(robot, sol; filename = "robot.gif") +Multibody.render(robot, sol; y=2, lookat=[0,1,0], filename = "robot.gif") nothing # hide ``` diff --git a/docs/src/examples/ropes_and_cables.md b/docs/src/examples/ropes_and_cables.md index 9719609a..3b28f498 100644 --- a/docs/src/examples/ropes_and_cables.md +++ b/docs/src/examples/ropes_and_cables.md @@ -65,7 +65,7 @@ prob = ODEProblem(ssys, [ sol = solve(prob, Rodas4(autodiff=false); u0 = prob.u0 .+ 0.5); @test SciMLBase.successful_retcode(sol) -Multibody.render(flexible_rope, sol, filename = "flexible_rope.gif") # May take long time for n>=10 +Multibody.render(flexible_rope, sol, y = -3, x = -6, z = -6, lookat=[0, -3, 0], filename = "flexible_rope.gif") # May take long time for n>=10 ``` @@ -101,7 +101,7 @@ prob = ODEProblem(ssys, [ sol = solve(prob, Rodas4(autodiff=false)) @test SciMLBase.successful_retcode(sol) -Multibody.render(mounted_chain, sol, filename = "mounted_chain.gif") # May take long time for n>=10 +Multibody.render(mounted_chain, sol, x=3, filename = "mounted_chain.gif") # May take long time for n>=10 ``` ![mounted_chain animation](mounted_chain.gif) diff --git a/ext/Render.jl b/ext/Render.jl index 6e1adf24..6963e80c 100644 --- a/ext/Render.jl +++ b/ext/Render.jl @@ -89,7 +89,7 @@ function default_scene(x,y,z; lookat=Vec3f(0,0,0),up=Vec3f(0,1,0),show_axis=fals # scene = LScene(fig[1, 1], scenekw = (lights = [DirectionalLight(RGBf(1, 1, 1), Vec3f(-1, 0, 0))],)).scene # This causes a black background for CairoMakie, issue link above scene = LScene(fig[1, 1])#.scene # end - cam3d!(scene) + cam3d!(scene, center=false) # scene.scene.camera.view[] = [ # R [x,y,z]; 0 0 0 1 # ] @@ -103,9 +103,9 @@ end function render(model, sol, timevec::Union{AbstractVector, Nothing} = nothing; framerate = 30, - x = 3, - y = 0, - z = 3, + x = 2, + y = 0.5, + z = 2, lookat = Vec3f(0,0,0), up = Vec3f(0,1,0), show_axis = false,