123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- import axios from "./instance";
- import {
- FUSE_MODEL_LIST,
- FUSE_INSERT_MODEL,
- FUSE_UPDATE_MODEL,
- FUSE_DELETE_MODEL,
- } from "./constant";
- import { params } from "@/env";
- import { Scene, SceneStatus, SceneType } from "./scene";
- export interface FuseModelAttrs {
- show: boolean;
- scale: number;
- opacity: number;
- bottom: number;
- position: SceneLocalPos;
- rotation: SceneLocalPos;
- }
- export interface FuseModel extends FuseModelAttrs {
- id: string;
- modelId: number;
- fusionNumId: number;
- url: string[];
- title: string;
- fusionId: number;
- modelType: string;
- type: SceneType;
- size: number;
- status: SceneStatus;
- raw?: any;
- time: string;
- }
- interface ServiceFuseModel {
- fusionId: number;
- hide: number;
- opacity: number;
- bottom: number;
- fusionNumId: number;
- transform: {
- position: SceneLocalPos;
- rotation: SceneLocalPos;
- scale: [number, number, number];
- };
- sceneData: Scene;
- }
- export const uploadMaterialToModel = async (uploadId: number) => {
- const model = await axios.post<{modelId: number}>('/fusion/model/addByMediaLibrary', {caseId: params.caseId, uploadId})
- return model
- }
- export const getSceneUrl = (sceneData: Scene) => {
- let url: any = [""];
- if (
- [SceneType.SWSS, SceneType.SWYDSS].includes(sceneData.type)
- ) {
- url = [sceneData.num];
- } else {
- switch (sceneData.modelDateType) {
- case "3dgs":
- url = sceneData.model3dgsUrl;
- break;
- case "shp":
- url = sceneData.modelGlbUrl;
- break;
- default:
- url = sceneData.modelGlbUrl;
- }
- try {
- url = JSON.parse(url);
- } catch (e) {
- if (typeof url === 'string') {
- url = [url]
- }
- console.error(url, e);
- }
- }
- return url
- }
- const serviceToLocal = (
- serviceModel: ServiceFuseModel,
- test = false
- ): FuseModel => {
- return {
- show: true,
- scale: serviceModel.transform.scale[0],
- opacity: serviceModel.opacity || 1,
- bottom: serviceModel.bottom || 0,
- fusionNumId: serviceModel.fusionNumId,
- modelType: serviceModel.sceneData?.modelDateType,
- position: serviceModel.transform.position,
- rotation: serviceModel.transform.rotation,
- id: serviceModel.fusionNumId.toString(),
- url: getSceneUrl(serviceModel.sceneData),
- title: serviceModel.sceneData
- ? serviceModel.sceneData?.name ||
- serviceModel.sceneData.sceneName ||
- serviceModel.sceneData.modelTitle
- : "-",
- modelId: serviceModel.sceneData?.modelId,
- fusionId: serviceModel.fusionId,
- type: serviceModel.sceneData?.type,
- size: serviceModel.sceneData?.modelSize,
- raw: serviceModel.sceneData,
- time: serviceModel.sceneData?.createTime,
- status: serviceModel.sceneData
- ? serviceModel.sceneData.status
- : SceneStatus.ERR,
- };
- };
- const localToService = (
- model: FuseModel
- ): Omit<ServiceFuseModel, "sceneData"> => ({
- fusionId: model.fusionId,
- hide: Number(!model.show),
- opacity: model.opacity,
- fusionNumId: model.fusionNumId,
- bottom: model.bottom,
- transform: {
- position: model.position,
- rotation: model.rotation,
- scale: [model.scale, model.scale, model.scale],
- },
- });
- export type FuseModels = FuseModel[];
- export const fetchFuseModels = async () => {
- const serviceModels = await axios.get<ServiceFuseModel[]>(FUSE_MODEL_LIST, {
- params: { caseId: params.caseId },
- });
- console.error(
- serviceModels.map((item, index) => serviceToLocal(item, index == 0))
- );
- return serviceModels.map((item, index) => serviceToLocal(item, index == 0));
- };
- export const postAddFuseModel = async (model: FuseModel) => {
- const upload = localToService(model);
- const serviceModel = await axios<ServiceFuseModel>({
- url: FUSE_INSERT_MODEL,
- method: "POST",
- data: {
- caseId: params.caseId,
- modelId: model.modelId,
- hide: upload.hide,
- transform: upload.transform,
- opacity: upload.opacity,
- bottom: upload.bottom,
- },
- });
- return serviceToLocal(serviceModel);
- };
- export const postUpdateFuseModels = (model: FuseModel) => {
- const upload = localToService(model);
- return axios.post<undefined>(FUSE_UPDATE_MODEL, {
- fusionNumId: upload.fusionNumId,
- hide: upload.hide,
- transform: upload.transform,
- opacity: upload.opacity,
- bottom: upload.bottom,
- });
- };
- export const postDeleteFuseModel = (model: FuseModel) => {
- return axios.post<undefined>(FUSE_DELETE_MODEL, {
- fusionNumId: model.fusionNumId,
- });
- };
|