corrected typos, fixed a bug with object transfer
This commit is contained in:
parent
9028186a74
commit
5dec799002
3 changed files with 60 additions and 53 deletions
|
@ -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) {
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue