add getter for Aabb3 directly (getBoundingBox) on ThermionAsset

This commit is contained in:
Nick Fisher
2025-04-21 15:51:50 +08:00
parent afd8bff58e
commit 63e2dcd0ca
3 changed files with 26 additions and 10 deletions

View File

@@ -64,6 +64,13 @@ abstract class ThermionAsset {
/// ///
Future removeStencilHighlight(); Future removeStencilHighlight();
///
/// The dimensions of the bounding box for this asset.
/// This is independent of the boundingBoxAsset (which is used to visualize
/// the bounding box in the scene); you do not need to call
/// [createBoundingBoxAsset] before this method.
Future<Aabb3> getBoundingBox();
/// ///
/// The bounding box for this asset, as an actual renderable asset. /// The bounding box for this asset, as an actual renderable asset.
/// Null by default; call [createBoundingBoxAsset] first to create. /// Null by default; call [createBoundingBoxAsset] first to create.
@@ -72,9 +79,9 @@ abstract class ThermionAsset {
/// ///
/// Creates the renderable bounding box for this asset. /// Creates the renderable bounding box for this asset.
/// This is safe to call multiple times; if [boundingBoxAsset] is non-null, /// This is safe to call multiple times; if [boundingBoxAsset] is non-null,
/// this will simply return the existing bounding box asset. /// this will simply return the existing bounding box asset.
/// ///
/// You will still need to call [Scene.add] to add this to the scene. /// You will still need to call [Scene.add] to add this to the scene.
/// ///
Future<ThermionAsset> createBoundingBoxAsset(); Future<ThermionAsset> createBoundingBoxAsset();

View File

@@ -1,5 +1,5 @@
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:vector_math/vector_math_64.dart' as v64;
import 'package:animation_tools_dart/src/bone_animation_data.dart'; import 'package:animation_tools_dart/src/bone_animation_data.dart';
import 'package:animation_tools_dart/src/morph_animation_data.dart'; import 'package:animation_tools_dart/src/morph_animation_data.dart';
import 'package:thermion_dart/src/filament/src/layers.dart'; import 'package:thermion_dart/src/filament/src/layers.dart';
@@ -63,7 +63,7 @@ class BackgroundImage extends ThermionAsset {
await mi.setParameterFloat4("backgroundColor", r, g, b, a); await mi.setParameterFloat4("backgroundColor", r, g, b, a);
} }
Future hideImage() async { Future hideImage() async {
await mi.setParameterInt("showImage", 0); await mi.setParameterInt("showImage", 0);
} }
@@ -336,18 +336,21 @@ class BackgroundImage extends ThermionAsset {
// TODO: implement transformToUnitCube // TODO: implement transformToUnitCube
throw UnimplementedError(); throw UnimplementedError();
} }
@override @override
Future<MaterialInstance> getMaterialInstanceAt({ThermionEntity? entity, int index = 0}) { Future<MaterialInstance> getMaterialInstanceAt(
// TODO: implement getMaterialInstanceAt {ThermionEntity? entity, int index = 0}) {
throw UnimplementedError(); throw UnimplementedError();
} }
ThermionAsset? get boundingBoxAsset => throw UnimplementedError(); ThermionAsset? get boundingBoxAsset => throw UnimplementedError();
@override @override
Future<ThermionAsset> createBoundingBoxAsset() { Future<ThermionAsset> createBoundingBoxAsset() {
// TODO: implement getBoundingBoxAsset throw UnimplementedError();
}
Future<v64.Aabb3> getBoundingBox() {
throw UnimplementedError(); throw UnimplementedError();
} }
} }

View File

@@ -246,8 +246,14 @@ class FFIAsset extends ThermionAsset {
throw UnimplementedError(); throw UnimplementedError();
} }
///
///
///
ThermionAsset? boundingBoxAsset; ThermionAsset? boundingBoxAsset;
///
///
///
Future<v64.Aabb3> getBoundingBox() async { Future<v64.Aabb3> getBoundingBox() async {
final entities = <ThermionEntity>[]; final entities = <ThermionEntity>[];
if (RenderableManager_isRenderable(app.renderableManager, entity)) { if (RenderableManager_isRenderable(app.renderableManager, entity)) {