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,
|
Color,
|
||||||
GridHelper,
|
GridHelper,
|
||||||
CameraHelper,
|
CameraHelper,
|
||||||
|
Quaternion,
|
||||||
} from "three";
|
} from "three";
|
||||||
import { TypedEvent } from "../helper/typed_event";
|
import { TypedEvent } from "../helper/typed_event";
|
||||||
import { Result } from "../helper/result";
|
import { Result } from "../helper/result";
|
||||||
|
@ -51,7 +52,7 @@ interface IEmissiveCache {
|
||||||
object3d: Object3D<Object3DEventMap>;
|
object3d: Object3D<Object3DEventMap>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class CoreThereRepository extends TypedEvent<BaseSceneItemModel> {
|
export class CoreThreeRepository extends TypedEvent<BaseSceneItemModel> {
|
||||||
scene = new Scene();
|
scene = new Scene();
|
||||||
camera: PerspectiveCamera;
|
camera: PerspectiveCamera;
|
||||||
webGlRender: WebGLRenderer;
|
webGlRender: WebGLRenderer;
|
||||||
|
@ -100,16 +101,20 @@ export class CoreThereRepository extends TypedEvent<BaseSceneItemModel> {
|
||||||
|
|
||||||
loadInstances(robossemblerAssets: RobossemblerAssets) {
|
loadInstances(robossemblerAssets: RobossemblerAssets) {
|
||||||
robossemblerAssets.instances.forEach(async (el) => {
|
robossemblerAssets.instances.forEach(async (el) => {
|
||||||
console.log(el);
|
|
||||||
if (el instanceof InstanceRgbCamera) {
|
if (el instanceof InstanceRgbCamera) {
|
||||||
const cameraModel = CameraViewModel.fromInstanceRgbCamera(el);
|
const cameraModel = CameraViewModel.fromInstanceRgbCamera(el);
|
||||||
cameraModel.mapPerspectiveCamera(this.htmlSceneWidth, this.htmlSceneHeight).forEach((el) => this.scene.add(el));
|
cameraModel.mapPerspectiveCamera(this.htmlSceneWidth, this.htmlSceneHeight).forEach((el) => this.scene.add(el));
|
||||||
this.emit(cameraModel);
|
this.emit(cameraModel);
|
||||||
}
|
}
|
||||||
if (el instanceof SceneSimpleObject) {
|
if (el instanceof SceneSimpleObject) {
|
||||||
console.log(el);
|
|
||||||
const asset = robossemblerAssets.getAssetAtInstance(el.instanceAt as string);
|
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];
|
return this.scene.children.filter((el) => el.name === name)[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
loader(urls: string[], callBack: Function, name: string) {
|
loader(url: string, callBack: Function, name: string, position?: Vector3, quaternion?: Quaternion) {
|
||||||
urls.map((el) => {
|
const ext = url.split(/\./g).pop()!.toLowerCase();
|
||||||
const ext = el.split(/\./g).pop()!.toLowerCase();
|
|
||||||
|
|
||||||
switch (ext) {
|
switch (ext) {
|
||||||
case "gltf":
|
case "gltf":
|
||||||
case "glb":
|
case "glb":
|
||||||
this.glbLoader.load(
|
this.glbLoader.load(
|
||||||
el,
|
url,
|
||||||
(result) => {},
|
(result) => {},
|
||||||
(err) => {}
|
(err) => {}
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
case "obj":
|
case "obj":
|
||||||
this.objLoader.load(
|
this.objLoader.load(
|
||||||
el,
|
url,
|
||||||
(result) => {
|
(result) => {
|
||||||
result.userData[UserData.selectedObject] = true;
|
result.userData[UserData.selectedObject] = true;
|
||||||
result.children.forEach((el) => {
|
result.children.forEach((el) => {
|
||||||
el.userData[UserData.selectedObject] = true;
|
el.userData[UserData.selectedObject] = true;
|
||||||
el.name = name;
|
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) => {},
|
|
||||||
|
|
||||||
(err) => {}
|
if (position) el.position.copy(position);
|
||||||
);
|
if (quaternion) el.quaternion.copy(quaternion);
|
||||||
break;
|
|
||||||
}
|
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) {
|
fitCameraToCenteredObject(objects: string[], offset = 4) {
|
|
@ -1,6 +1,6 @@
|
||||||
import { CameraHelper, Object3D, PerspectiveCamera, Quaternion, Scene, Vector3 } from "three";
|
import { CameraHelper, Object3D, PerspectiveCamera, Quaternion, Scene, Vector3 } from "three";
|
||||||
import { v4 as uuidv4 } from "uuid";
|
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";
|
import { Asset, Instance, InstanceRgbCamera, InstanceType, SceneSimpleObject } from "./robossembler_assets";
|
||||||
|
|
||||||
export enum RobossemblerFiles {
|
export enum RobossemblerFiles {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import makeAutoObservable from "mobx-store-inheritance";
|
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 { Object3D, Vector2 } from "three";
|
||||||
import { HttpError } from "../../../core/repository/http_repository";
|
import { HttpError } from "../../../core/repository/http_repository";
|
||||||
import { UiErrorState } from "../../../core/store/base_store";
|
import { UiErrorState } from "../../../core/store/base_store";
|
||||||
|
@ -14,7 +14,7 @@ export class SceneMangerStore extends UiErrorState<HttpError> {
|
||||||
sceneMode: SceneMode;
|
sceneMode: SceneMode;
|
||||||
sceneMenu: SceneMenu;
|
sceneMenu: SceneMenu;
|
||||||
isVisibleSaveButton: boolean = false;
|
isVisibleSaveButton: boolean = false;
|
||||||
coreThereRepository: null | CoreThereRepository = null;
|
coreThereRepository: null | CoreThreeRepository = null;
|
||||||
sceneHttpRepository: SceneHttpRepository;
|
sceneHttpRepository: SceneHttpRepository;
|
||||||
sceneModels: BaseSceneItemModel[] = [];
|
sceneModels: BaseSceneItemModel[] = [];
|
||||||
isSceneMenuShow = false;
|
isSceneMenuShow = false;
|
||||||
|
@ -68,7 +68,7 @@ export class SceneMangerStore extends UiErrorState<HttpError> {
|
||||||
loadSceneRobossemblerAsset(name: string) {
|
loadSceneRobossemblerAsset(name: string) {
|
||||||
try {
|
try {
|
||||||
const assetPath = this.robossemblerAssets?.getAssetPath(name) as string;
|
const assetPath = this.robossemblerAssets?.getAssetPath(name) as string;
|
||||||
this.coreThereRepository?.loader([assetPath], this.loaderWatcher, name);
|
this.coreThereRepository?.loader(assetPath, this.loaderWatcher, name);
|
||||||
this.visibleSaveButton();
|
this.visibleSaveButton();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
message.error(String(error));
|
message.error(String(error));
|
||||||
|
@ -119,7 +119,7 @@ export class SceneMangerStore extends UiErrorState<HttpError> {
|
||||||
}
|
}
|
||||||
|
|
||||||
loadWebGl(canvasRef: HTMLCanvasElement): void {
|
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.on(this.watcherThereObjects);
|
||||||
this.coreThereRepository.render();
|
this.coreThereRepository.render();
|
||||||
this.sceneModels = this.coreThereRepository.getAllSceneModels();
|
this.sceneModels = this.coreThereRepository.getAllSceneModels();
|
||||||
|
@ -155,7 +155,7 @@ export class SceneMangerStore extends UiErrorState<HttpError> {
|
||||||
|
|
||||||
watcherSceneEditorObject = (mesh: Object3D) => {
|
watcherSceneEditorObject = (mesh: Object3D) => {
|
||||||
this.sceneModels = this.sceneModels.map((el) => {
|
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.position = mesh.position;
|
||||||
el.quaternion = mesh.quaternion;
|
el.quaternion = mesh.quaternion;
|
||||||
return el;
|
return el;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue