{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import bpy\n", "from IPython.display import display\n", "from anywidget_3dviewer import Viewer\n", "import solara\n", "from pathlib import Path\n", "\n", "\n", "def make_gltf_model():\n", " bpy.ops.preferences.addon_enable(module=\"io_scene_gltf2\")\n", " bpy.ops.object.select_all(action=\"DESELECT\")\n", " bpy.ops.object.select_by_type(type=\"MESH\")\n", "\n", " bpy.ops.object.delete()\n", " bpy.ops.mesh.primitive_cube_add(size=2, align=\"WORLD\", location=(0, 1, 1))\n", " cube = bpy.context.active_object\n", " gltf_path = \"./model_cube.gltf\"\n", " bpy.ops.object.select_all(action=\"DESELECT\")\n", " cube.select_set(True)\n", " bpy.ops.export_scene.gltf(\n", " filepath=gltf_path, export_format=\"GLTF_EMBEDDED\", use_selection=True\n", " )\n", " gltf_path = Path() / \"model_cube.gltf\"\n", " data = gltf_path.read_bytes()\n", " gltf_path.unlink()\n", " return data\n", "\n", "\n", "data = make_gltf_model()\n", " \n", "\n", "do_render = solara.reactive(False)\n", "\n", "data = make_gltf_model()\n", "\n", "@solara.component\n", "def Page():\n", "\n", " def render():\n", " if do_render.value:\n", " return data\n", " \n", " result = solara.use_thread(render, [do_render.value])\n", " if not do_render.value:\n", " solara.Button(\"Start Rendering\", on_click=lambda: do_render.set(True), color=\"orange\")\n", " else:\n", " if result.state == solara.ResultState.RUNNING:\n", " solara.Info(\"Rendering in progress...\")\n", " solara.ProgressLinear()\n", " elif result.state == solara.ResultState.ERROR:\n", " solara.Error(\"Rendering failed!: %s\" % result.error)\n", " elif result.state == solara.ResultState.FINISHED:\n", " with solara.Column():\n", " solara.Success(\"Rendering complete. \")\n", " if result.value:\n", " viewer = Viewer(gltf_data=result.value)\n", " solara.FileDownload(data, filename=\"model_cube.gltf\", label=\"Download model_cube.gltf\")\n", "\n", " display(viewer)\n", "Page()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.13" } }, "nbformat": 4, "nbformat_minor": 2 }