From 45c4cea6aa27aa64f3676371eb2b9caec6b7e50d Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Tue, 1 Jul 2025 10:23:25 +0800 Subject: [PATCH] add setBackgroundImageFromTexture method to ThermionViewer --- .../src/ffi/src/thermion_viewer_ffi.dart | 9 +++++ .../src/viewer/src/thermion_viewer_base.dart | 33 +++++++++++-------- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/thermion_dart/lib/src/viewer/src/ffi/src/thermion_viewer_ffi.dart b/thermion_dart/lib/src/viewer/src/ffi/src/thermion_viewer_ffi.dart index c81bba43..9bbc1c6f 100644 --- a/thermion_dart/lib/src/viewer/src/ffi/src/thermion_viewer_ffi.dart +++ b/thermion_dart/lib/src/viewer/src/ffi/src/thermion_viewer_ffi.dart @@ -223,6 +223,14 @@ class ThermionViewerFFI extends ThermionViewer { return _backgroundImage!; } + /// + /// + /// + Future setBackgroundImageFromTexture(Texture texture) async { + var backgroundImage = await getBackgroundImage(); + await backgroundImage.setImageFromTexture(texture); + } + /// /// /// @@ -683,6 +691,7 @@ class ThermionViewerFFI extends ThermionViewer { /// Future setGridOverlayVisibility(bool visible) async { _grid ??= _grid = await GridOverlay.create(app, animationManager); + if (visible) { await scene.add(_grid!); await view.setLayerVisibility(VisibilityLayers.OVERLAY, true); diff --git a/thermion_dart/lib/src/viewer/src/thermion_viewer_base.dart b/thermion_dart/lib/src/viewer/src/thermion_viewer_base.dart index 97f9ca47..2c303acc 100644 --- a/thermion_dart/lib/src/viewer/src/thermion_viewer_base.dart +++ b/thermion_dart/lib/src/viewer/src/thermion_viewer_base.dart @@ -59,13 +59,18 @@ abstract class ThermionViewer { Future dispose(); /// - /// Set the background image to [path] (which should have a file extension .png, .jpg, or .ktx). - /// This will be rendered at the maximum depth (i.e. behind all other objects including the skybox). + /// Set the background image to [path] (which should be .png, .jpg, or .ktx + /// file). This will be rendered at the maximum depth (i.e. behind all other objects including the skybox). /// If [fillHeight] is false, the image will be rendered at its original size. Note this may cause issues with pixel density so be sure to specify the correct resolution /// If [fillHeight] is true, the image will be stretched/compressed to fit the height of the viewport. /// Future setBackgroundImage(String path, {bool fillHeight = false}); + /// + /// Set the background image from [texture]. + /// + Future setBackgroundImageFromTexture(Texture texture); + /// /// Moves the background image to the relative offset from the origin (bottom-left) specified by [x] and [y]. /// If [clamp] is true, the image cannot be positioned outside the bounds of the viewport. @@ -151,18 +156,18 @@ abstract class ThermionViewer { /// If [addToScene] is [true], all renderable entities (including lights) /// in the asset will be added to the scene. /// - /// The [initialInstances] argument determines the number of - /// instances created when the asset is first instantiated. If [keepData] is - /// false, no further instances will be able to be created. - /// - /// If [keepData] is true, additional instances can be created by calling - /// [createInstance] on the returned asset. - /// - /// Creating instances at asset load time is more efficient than dynamically + /// The [initialInstances] argument determines the number of + /// instances created when the asset is first instantiated. If [keepData] is + /// false, no further instances will be able to be created. + /// + /// If [keepData] is true, additional instances can be created by calling + /// [createInstance] on the returned asset. + /// + /// Creating instances at asset load time is more efficient than dynamically /// instantating at a later time. /// /// Instances can be retrieved with [getInstances]. - /// + /// /// If [loadResourcesAsync] is true, resources (textures, materials, etc) will /// be loaded asynchronously. Some material/texture pop-in is expected. /// @@ -174,7 +179,7 @@ abstract class ThermionViewer { bool loadAsync = false}); /// - /// Loads a gltf asset from the specified buffer (which contains the contents + /// Loads a gltf asset from the specified buffer (which contains the contents /// of a .glb file). /// /// See the [loadGltf] method for documentation on arguments. @@ -296,11 +301,11 @@ abstract class ThermionViewer { Future showBoundingBox(ThermionAsset asset); /// Removes the bounding box for [asset] from the scene. - /// + /// /// If [destroy] is true, the geometry and material instance for the asset /// will also be destroyed. /// - Future hideBoundingBox(ThermionAsset asset, { bool destroy = false}); + Future hideBoundingBox(ThermionAsset asset, {bool destroy = false}); /// /// Gets the 2D bounding box (in viewport coordinates) for the given entity.