corrected typos, fixed a bug with object transfer

This commit is contained in:
IDONTSUDO 2024-01-24 15:08:52 +03:00
parent 9028186a74
commit 5dec799002
3 changed files with 60 additions and 53 deletions

View file

@ -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<Object3DEventMap>;
}
export class CoreThereRepository extends TypedEvent<BaseSceneItemModel> {
export class CoreThreeRepository extends TypedEvent<BaseSceneItemModel> {
scene = new Scene();
camera: PerspectiveCamera;
webGlRender: WebGLRenderer;
@ -100,16 +101,20 @@ export class CoreThereRepository extends TypedEvent<BaseSceneItemModel> {
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<BaseSceneItemModel> {
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) {

View file

@ -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 {

View file

@ -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<HttpError> {
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<HttpError> {
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<HttpError> {
}
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<HttpError> {
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;