跳到主要内容

快速开始

一、控制台准备​

  1. 注册账号并完成邮箱验证。
  2. 登录用户控制台,创建工程。
  3. 绑定有效证书并确认额度。
  4. 在工程设置中查看 Project Key。

平台转换支持:.prt、.prt.x、.step、.stp、.igs、.iges、.x_t、.sldprt、.catpart、.jt、.par、.psm、.sat、.sab。

请将 Project Key 放入服务端环境变量或密钥管理系统,不要写入浏览器代码、URL、LocalStorage 或 Cookie。

控制台截图应使用正式环境页面,并对邮箱、Project Key 和模型名称打码。线上 Demo:https://tiangongtuxue.com/manual/demo-app/。

接入流程图​

二、换取访问令牌​

export TUO_API_BASE_URL=https://tiangongtuxue.com/api
export TUO_PROJECT_KEY='在服务端配置,不要写入源码'
curl "$TUO_API_BASE_URL/app/projects/access-token" -H "Authorization: Bearer $TUO_PROJECT_KEY"

三、创建模型并取得上传授权​

ACCESS_TOKEN='从上一步响应读取并短期缓存'
UPLOAD=$(curl -s "$TUO_API_BASE_URL/v1/models/upload-token" \
-H "Authorization: Bearer $ACCESS_TOKEN" -H 'Content-Type: application/json' \
-d '{"name":"bracket.step","description":"quick start"}')
echo "$UPLOAD"

响应包含 modelId、uploadToken 和 uploadUrl。使用上传地址和凭证将文件直接上传到云存储,上传完成后平台会自动进入处理流程,不需要额外提交任务。

四、上传文件​

创建模型接口返回的 uploadUrl 和 uploadToken 是一组配套的上传授权。上传时必须使用这两个字段,不要自行拼接上传地址,也不要把上传凭证保存为长期凭据。

使用 curl 上传​

MODEL_ID=$(echo "$UPLOAD" | jq -r '.data.modelId')
UPLOAD_TOKEN=$(echo "$UPLOAD" | jq -r '.data.uploadToken')
UPLOAD_URL=$(echo "$UPLOAD" | jq -r '.data.uploadUrl')

curl --fail-with-body -X POST "$UPLOAD_URL" \
-F "token=$UPLOAD_TOKEN" \
-F "file=@bracket.step;filename=bracket.step"

表单字段说明:

字段类型说明
tokenstring创建模型接口返回的一次性上传凭证
filefile要上传的模型文件,文件名应与创建模型时的 name 对应

上传成功表示文件已提交到云存储;后续处理由平台自动触发,不需要再次调用“提交解析”接口。上传失败时请保留 modelId,根据 HTTP 状态和响应消息判断是否重新获取授权。

浏览器 JavaScript 上传​

async function uploadModelFile(grant, file) {
const form = new FormData();
form.append('token', grant.uploadToken);
form.append('file', file, file.name);

const response = await fetch(grant.uploadUrl, {
method: 'POST',
body: form,
});
if (!response.ok) {
throw new Error(`文件上传失败:${response.status}`);
}
}

不要手动设置 Content-Type,浏览器会自动补充 multipart boundary。大文件建议展示上传进度,并在失败后重新获取上传授权。

上传后的状态​

上传完成后,使用创建模型返回的 modelId 查询状态。上传回调尚未确认时可能仍为 uploading;文件确认后进入 uploaded,随后进入 queued 或 running。

五、查询状态和浏览结果​

MODEL_ID='上一步响应中的 modelId'
curl -H "Authorization: Bearer $ACCESS_TOKEN" "$TUO_API_BASE_URL/v1/models/$MODEL_ID/result"

只有 status 为 succeeded 时才使用 url 或 imageUrl。

六、使用 Viewer​

<div id="viewer" style="height:600px"></div>
<script>
let viewer;
async function loadTgvdata(resultUrl, accessToken) {
const asset = await fetch(resultUrl, {
headers: { Authorization: `Bearer ${accessToken}` },
});
if (!asset.ok) throw new Error(`三维结果获取失败:${asset.status}`);

// 解析完成后再按需加载 Viewer,避免页面启动阶段加载大型 UMD 包。
await new Promise((resolve, reject) => {
if (typeof window.TuoVisualViewer?.TuoVisualViewer === 'function') return resolve();
const script = document.createElement('script');
script.src = 'https://resource.api.tiangongtuxue.com/tuo-visual-viewer/1.0.0/tuo-visual-viewer.umd.js';
script.onload = () => typeof window.TuoVisualViewer?.TuoVisualViewer === 'function'
? resolve()
: reject(new Error('Viewer 构造函数未找到'));
script.onerror = () => reject(new Error('Viewer 脚本加载失败'));
document.head.appendChild(script);
});

viewer?.destroy();
viewer = new window.TuoVisualViewer.TuoVisualViewer(document.querySelector('#viewer'));
await viewer.load(await asset.blob(), { format: 'tgvdata' });
}
</script>

线上 Demo 已采用相同的按需加载方式:打开 Project Key 上传与 Viewer Demo。