From 5dec7990026e52c36ea7b118018f20f18c592ab7 Mon Sep 17 00:00:00 2001 From: IDONTSUDO Date: Wed, 24 Jan 2024 15:08:52 +0300 Subject: [PATCH] corrected typos, fixed a bug with object transfer --- ...repository.ts => core_three_repository.ts} | 101 ++++++++++-------- .../scene_manager/model/scene_assets.ts | 2 +- .../presentation/scene_manager_store.ts | 10 +- 3 files changed, 60 insertions(+), 53 deletions(-) rename ui/src/core/repository/{core_there_repository.ts => core_three_repository.ts} (87%) diff --git a/ui/src/core/repository/core_there_repository.ts b/ui/src/core/repository/core_three_repository.ts similarity index 87% rename from ui/src/core/repository/core_there_repository.ts rename to ui/src/core/repository/core_three_repository.ts index df7dca3..5034b57 100644 --- a/ui/src/core/repository/core_there_repository.ts +++ b/ui/src/core/repository/core_three_repository.ts @@ -18,6 +18,7 @@ import { Color, GridHelper, CameraHelper, + Quaternion, } from "three"; import { TypedEvent } from "../helper/typed_event"; import { Result } from "../helper/result"; @@ -51,7 +52,7 @@ interface IEmissiveCache { object3d: Object3D; } -export class CoreThereRepository extends TypedEvent { +export class CoreThreeRepository extends TypedEvent { scene = new Scene(); camera: PerspectiveCamera; webGlRender: WebGLRenderer; @@ -100,16 +101,20 @@ export class CoreThereRepository extends TypedEvent { loadInstances(robossemblerAssets: RobossemblerAssets) { robossemblerAssets.instances.forEach(async (el) => { - console.log(el); if (el instanceof InstanceRgbCamera) { const cameraModel = CameraViewModel.fromInstanceRgbCamera(el); cameraModel.mapPerspectiveCamera(this.htmlSceneWidth, this.htmlSceneHeight).forEach((el) => this.scene.add(el)); this.emit(cameraModel); } if (el instanceof SceneSimpleObject) { - console.log(el); const asset = robossemblerAssets.getAssetAtInstance(el.instanceAt as string); - this.loader([asset.meshPath], () => {}, asset.name); + this.loader( + asset.meshPath, + () => {}, + asset.name, + new Vector3(el.position.x, el.position.y, el.position.z), + new Quaternion(el.quaternion[0], el.quaternion[1], el.quaternion[2], el.quaternion[3]) + ); } }); } @@ -263,51 +268,53 @@ export class CoreThereRepository extends TypedEvent { return this.scene.children.filter((el) => el.name === name)[0]; } - loader(urls: string[], callBack: Function, name: string) { - urls.map((el) => { - const ext = el.split(/\./g).pop()!.toLowerCase(); + loader(url: string, callBack: Function, name: string, position?: Vector3, quaternion?: Quaternion) { + const ext = url.split(/\./g).pop()!.toLowerCase(); - switch (ext) { - case "gltf": - case "glb": - this.glbLoader.load( - el, - (result) => {}, - (err) => {} - ); - break; - case "obj": - this.objLoader.load( - el, - (result) => { - result.userData[UserData.selectedObject] = true; - result.children.forEach((el) => { - el.userData[UserData.selectedObject] = true; - el.name = name; - this.emit(new StaticAssetItemModel(el.name, el.position, el.quaternion)); - this.scene.add(el); - }); - }, - (err) => {} - ); - break; - case "dae": - this.daeLoader.load( - el, - (result) => {}, - (err) => {} - ); - break; - case "stl": - this.stlLoader.load( - el, - (result) => {}, + switch (ext) { + case "gltf": + case "glb": + this.glbLoader.load( + url, + (result) => {}, + (err) => {} + ); + break; + case "obj": + this.objLoader.load( + url, + (result) => { + result.userData[UserData.selectedObject] = true; + result.children.forEach((el) => { + el.userData[UserData.selectedObject] = true; + el.name = name; - (err) => {} - ); - break; - } - }); + if (position) el.position.copy(position); + if (quaternion) el.quaternion.copy(quaternion); + + this.emit(new StaticAssetItemModel(el.name, el.position, el.quaternion)); + this.scene.add(el); + }); + }, + (err) => {} + ); + break; + case "dae": + this.daeLoader.load( + url, + (result) => {}, + (err) => {} + ); + break; + case "stl": + this.stlLoader.load( + url, + (result) => {}, + + (err) => {} + ); + break; + } } fitCameraToCenteredObject(objects: string[], offset = 4) { diff --git a/ui/src/features/scene_manager/model/scene_assets.ts b/ui/src/features/scene_manager/model/scene_assets.ts index f37f883..8efc8de 100644 --- a/ui/src/features/scene_manager/model/scene_assets.ts +++ b/ui/src/features/scene_manager/model/scene_assets.ts @@ -1,6 +1,6 @@ import { CameraHelper, Object3D, PerspectiveCamera, Quaternion, Scene, Vector3 } from "three"; import { v4 as uuidv4 } from "uuid"; -import { UserData } from "../../../core/repository/core_there_repository"; +import { UserData } from "../../../core/repository/core_three_repository"; import { Asset, Instance, InstanceRgbCamera, InstanceType, SceneSimpleObject } from "./robossembler_assets"; export enum RobossemblerFiles { diff --git a/ui/src/features/scene_manager/presentation/scene_manager_store.ts b/ui/src/features/scene_manager/presentation/scene_manager_store.ts index 3e7572d..78df48f 100644 --- a/ui/src/features/scene_manager/presentation/scene_manager_store.ts +++ b/ui/src/features/scene_manager/presentation/scene_manager_store.ts @@ -1,5 +1,5 @@ import makeAutoObservable from "mobx-store-inheritance"; -import { CoreThereRepository } from "../../../core/repository/core_there_repository"; +import { CoreThreeRepository } from "../../../core/repository/core_three_repository"; import { Object3D, Vector2 } from "three"; import { HttpError } from "../../../core/repository/http_repository"; import { UiErrorState } from "../../../core/store/base_store"; @@ -14,7 +14,7 @@ export class SceneMangerStore extends UiErrorState { sceneMode: SceneMode; sceneMenu: SceneMenu; isVisibleSaveButton: boolean = false; - coreThereRepository: null | CoreThereRepository = null; + coreThereRepository: null | CoreThreeRepository = null; sceneHttpRepository: SceneHttpRepository; sceneModels: BaseSceneItemModel[] = []; isSceneMenuShow = false; @@ -68,7 +68,7 @@ export class SceneMangerStore extends UiErrorState { loadSceneRobossemblerAsset(name: string) { try { const assetPath = this.robossemblerAssets?.getAssetPath(name) as string; - this.coreThereRepository?.loader([assetPath], this.loaderWatcher, name); + this.coreThereRepository?.loader(assetPath, this.loaderWatcher, name); this.visibleSaveButton(); } catch (error) { message.error(String(error)); @@ -119,7 +119,7 @@ export class SceneMangerStore extends UiErrorState { } loadWebGl(canvasRef: HTMLCanvasElement): void { - this.coreThereRepository = new CoreThereRepository(canvasRef as HTMLCanvasElement, this.watcherSceneEditorObject); + this.coreThereRepository = new CoreThreeRepository(canvasRef as HTMLCanvasElement, this.watcherSceneEditorObject); this.coreThereRepository.on(this.watcherThereObjects); this.coreThereRepository.render(); this.sceneModels = this.coreThereRepository.getAllSceneModels(); @@ -155,7 +155,7 @@ export class SceneMangerStore extends UiErrorState { watcherSceneEditorObject = (mesh: Object3D) => { this.sceneModels = this.sceneModels.map((el) => { - if (el instanceof CameraViewModel || (el instanceof StaticAssetItemModel && el.name === mesh.name)) { + if (el.name === mesh.name) { el.position = mesh.position; el.quaternion = mesh.quaternion; return el;