From 1fe9e0d0947995df4d9c54259fde47f078ff1dee Mon Sep 17 00:00:00 2001 From: Rainer Rodrigues Date: Mon, 13 Apr 2026 11:40:17 +0100 Subject: [PATCH] Support arbitrary kwargs for materials (fixes #75) --- src/lowering.jl | 3 +++ src/objects.jl | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/src/lowering.jl b/src/lowering.jl index fc5eea0..a061697 100644 --- a/src/lowering.jl +++ b/src/lowering.jl @@ -239,6 +239,7 @@ function lower(material::GenericMaterial) if material.map !== nothing data["map"] = lower(material.map) end + merge!(data, material.kwargs) data end @@ -363,6 +364,7 @@ function lower(cloud::FatLineGeometry) if !isempty(cloud.color) data["color"] = lower(convert(Vector{RGB{Float32}}, cloud.color)) end + merge!(data, cloud.kwargs) data end @@ -384,5 +386,6 @@ function lower(material::FatLineMaterial) data["dashSize"] = material.dashSize data["gapSize"] = material.gapSize end + merge!(data, material.kwargs) data end diff --git a/src/objects.jl b/src/objects.jl index bc76429..c038d8b 100644 --- a/src/objects.jl +++ b/src/objects.jl @@ -45,6 +45,7 @@ PngImage(fname::AbstractString) = PngImage(open(read, fname)) image::PngImage wrap::Tuple{Int, Int} = (1001, 1001) # TODO: replace with enum repeat::Tuple{Int, Int} = (1, 1) # TODO: what does this mean? + kwargs::Dict{String, Any} = Dict{String, Any}() end @with_kw mutable struct GenericMaterial <: AbstractMaterial @@ -59,6 +60,7 @@ end side::Int = 2 # TODO: make an enum https://github.com/mrdoob/three.js/blob/d55897b8e9b2632896d8ac146a05b3b4be3668f8/src/constants.js#L14 wireframe::Bool = false wireframeLinewidth::Float64 = 1 + kwargs::Dict{String, Any} = Dict{String, Any}() end threejs_type(m::GenericMaterial) = m._type @@ -72,6 +74,7 @@ LineBasicMaterial(;kw...) = GenericMaterial(_type="LineBasicMaterial"; kw...) color::RGBA{Float32}=RGB(1., 1., 1.) size::Float32 = 0.002 vertexColors::Int = 2 + kwargs::Dict{String, Any} = Dict{String, Any}() end """ @@ -116,6 +119,7 @@ See also: [`FatLineGeometry`](@ref), [`FatLine`](@ref) dashSize::Float64 = 1.0 gapSize::Float64 = 1.0 worldUnits::Bool = false + kwargs::Dict{String, Any} = Dict{String, Any}() end """