Autodesk Forge API与Streamlit集成可行性及示例咨询
Streamlit 与 Forge APIs 集成方案及示例
完全可以将Streamlit作为前端,对接Forge APIs实现集成。Streamlit的快速交互式界面搭建能力,搭配Forge的CAD数据处理、模型可视化等API能力,能快速构建轻量化的工程类Web应用。
核心集成步骤
- 注册Forge开发者应用,获取
Client ID和Client Secret,并为应用申请对应API权限(如数据管理、模型衍生、模型查看等) - 在Streamlit应用中实现Forge的鉴权逻辑,获取临时访问令牌(Access Token)
- 通过HTTP请求调用Forge APIs完成数据上传、模型格式转换、模型预览等操作,将结果嵌入Streamlit界面展示
示例代码
首先安装所需依赖:
pip install streamlit requests
以下是一个基础的集成示例,实现Forge鉴权、模型转换状态查询,并嵌入Forge Viewer展示模型:
import streamlit as st import requests import json # Forge鉴权函数 def get_forge_token(client_id, client_secret): url = "https://developer.api.autodesk.com/authentication/v1/authenticate" payload = { "client_id": client_id, "client_secret": client_secret, "grant_type": "client_credentials", "scope": "data:read data:write bucket:create bucket:read" } response = requests.post(url, data=payload) if response.status_code == 200: return response.json()["access_token"] else: st.error("Forge鉴权失败,请检查Client ID和Secret") return None # 主应用逻辑 st.title("Streamlit + Forge 集成示例") # 输入Forge凭证(实际部署建议用环境变量) client_id = st.text_input("Forge Client ID") client_secret = st.text_input("Forge Client Secret", type="password") if client_id and client_secret: token = get_forge_token(client_id, client_secret) if token: st.success("鉴权成功") # 示例:查询模型转换状态(需提前上传并发起转换任务) urn = st.text_input("输入模型URN(Base64编码)") if urn: status_url = f"https://developer.api.autodesk.com/modelderivative/v2/designdata/{urn}/manifest" headers = {"Authorization": f"Bearer {token}"} response = requests.get(status_url, headers=headers) if response.status_code == 200: manifest = response.json() st.subheader("模型转换状态") st.json(manifest["status"]) # 如果转换完成,嵌入Forge Viewer if manifest["status"] == "success": st.subheader("模型预览") viewer_html = f""" <div style="width: 100%; height: 600px;"> <script src="https://developer.api.autodesk.com/modelderivative/v2/viewers/7.*/viewer3D.min.js"></script> <link rel="stylesheet" href="https://developer.api.autodesk.com/modelderivative/v2/viewers/7.*/style.min.css"> <div id="forgeViewer"></div> <script> var viewer; var options = {{ env: 'AutodeskProduction', accessToken: '{token}' }}; Autodesk.Viewing.Initializer(options, function() {{ viewer = new Autodesk.Viewing.GuiViewer3D(document.getElementById('forgeViewer')); viewer.start(); var documentId = 'urn:{urn}'; Autodesk.Viewing.Document.load(documentId, function(doc) {{ var viewables = doc.getRoot().getDefaultGeometry(); viewer.loadDocumentNode(doc, viewables); }}, function(err) {{ console.error(err); }}); }}); </script> </div> """ st.components.v1.html(viewer_html, height=650) 内容的提问来源于stack exchange,提问作者Shafeekh Melangadi
相关产品推荐
相关产品推荐

