diff --git a/lib/src/controllers/flutter_3d_controller.dart b/lib/src/controllers/flutter_3d_controller.dart index 86c67f9..44b3f39 100644 --- a/lib/src/controllers/flutter_3d_controller.dart +++ b/lib/src/controllers/flutter_3d_controller.dart @@ -99,9 +99,9 @@ class Flutter3DController extends IFlutter3DController { } @override - void setCameraOrbit(double theta, double phi, double radius) { + void setCameraOrbit(double theta, double phi, double radius, {bool isAnimate = true}) { if (onModelLoaded.value) { - _repository?.setCameraOrbit(theta, phi, radius); + _repository?.setCameraOrbit(theta, phi, radius, isAnimate); } else { throw Flutter3dControllerLoadingException(); } diff --git a/lib/src/data/datasources/flutter_3d_datasource_mobile.dart b/lib/src/data/datasources/flutter_3d_datasource_mobile.dart index 4bfcfba..c036bad 100644 --- a/lib/src/data/datasources/flutter_3d_datasource_mobile.dart +++ b/lib/src/data/datasources/flutter_3d_datasource_mobile.dart @@ -131,14 +131,25 @@ class Flutter3DDatasource implements IFlutter3DDatasource { } @override - void setCameraOrbit(double theta, double phi, double radius) { - executeCustomJsCode( - "const modelViewer = document.getElementById(\"$_viewerId\");" - "modelViewer.cameraOrbit = \"${theta}deg ${phi}deg $radius%\";", - 100, - 400, - _activeGestureInterceptor, - ); + void setCameraOrbit(double theta, double phi, double radius, bool isAnimate) { + if (isAnimate) { + executeCustomJsCode( + "const modelViewer = document.getElementById(\"$_viewerId\");" + "modelViewer.cameraOrbit = \"${theta}deg ${phi}deg $radius%\";", + 100, + 400, + _activeGestureInterceptor, + ); + } else { + executeCustomJsCode( + "const modelViewer = document.getElementById(\"$_viewerId\");" + "modelViewer.cameraOrbit = \"${theta}deg ${phi}deg $radius%\";" + "modelViewer.jumpCameraToGoal();", + 100, + 400, + _activeGestureInterceptor, + ); + } } @override diff --git a/lib/src/data/datasources/flutter_3d_datasource_web.dart b/lib/src/data/datasources/flutter_3d_datasource_web.dart index e51b248..7f3fcba 100644 --- a/lib/src/data/datasources/flutter_3d_datasource_web.dart +++ b/lib/src/data/datasources/flutter_3d_datasource_web.dart @@ -107,11 +107,19 @@ class Flutter3DDatasource implements IFlutter3DDatasource { } @override - void setCameraOrbit(double theta, double phi, double radius) { - executeCustomJsCode( - "const modelViewer = document.getElementById(\"$_viewerId\");" - "modelViewer.cameraOrbit = \"${theta}deg ${phi}deg $radius%\";", - ); + void setCameraOrbit(double theta, double phi, double radius, bool isAnimate) { + if (isAnimate) { + executeCustomJsCode( + "const modelViewer = document.getElementById(\"$_viewerId\");" + "modelViewer.cameraOrbit = \"${theta}deg ${phi}deg $radius%\";", + ); + } else { + executeCustomJsCode( + "const modelViewer = document.getElementById(\"$_viewerId\");" + "modelViewer.cameraOrbit = \"${theta}deg ${phi}deg $radius%\";" + "modelViewer.jumpCameraToGoal();", + ); + } } @override diff --git a/lib/src/data/datasources/i_flutter_3d_datasource.dart b/lib/src/data/datasources/i_flutter_3d_datasource.dart index eea7c14..9fd0f32 100644 --- a/lib/src/data/datasources/i_flutter_3d_datasource.dart +++ b/lib/src/data/datasources/i_flutter_3d_datasource.dart @@ -40,7 +40,7 @@ abstract class IFlutter3DDatasource { void resetCameraTarget(); /// It will change camera orbit - void setCameraOrbit(double theta, double phi, double radius); + void setCameraOrbit(double theta, double phi, double radius, bool isAnimate); /// Causes camera target reset to default value void resetCameraOrbit(); diff --git a/lib/src/data/repositories/flutter_3d_repository.dart b/lib/src/data/repositories/flutter_3d_repository.dart index 9403fa5..91a5a65 100644 --- a/lib/src/data/repositories/flutter_3d_repository.dart +++ b/lib/src/data/repositories/flutter_3d_repository.dart @@ -55,8 +55,8 @@ class Flutter3DRepository extends IFlutter3DRepository { } @override - void setCameraOrbit(double theta, double phi, double radius) { - _datasource.setCameraOrbit(theta, phi, radius); + void setCameraOrbit(double theta, double phi, double radius, bool isAnimate) { + _datasource.setCameraOrbit(theta, phi, radius, isAnimate); } @override diff --git a/lib/src/data/repositories/i_flutter_3d_repository.dart b/lib/src/data/repositories/i_flutter_3d_repository.dart index 5e08130..eed927b 100644 --- a/lib/src/data/repositories/i_flutter_3d_repository.dart +++ b/lib/src/data/repositories/i_flutter_3d_repository.dart @@ -37,7 +37,7 @@ abstract class IFlutter3DRepository { void resetCameraTarget(); /// It will change camera orbit - void setCameraOrbit(double theta, double phi, double radius); + void setCameraOrbit(double theta, double phi, double radius, bool isAnimate); /// Causes camera target reset to default value void resetCameraOrbit();