From 9120729d41f62d377d1a929d3f5019e04cb013eb Mon Sep 17 00:00:00 2001 From: IDONTSUDO Date: Tue, 23 Jul 2024 15:57:22 +0300 Subject: [PATCH] progress --- .../core/repository/file_system_repository.ts | 8 +++++--- .../src/core/usecases/delete_file_usecase.ts | 14 ++++++++++++++ .../features/scene/delete_scene_scenario.ts | 16 ++++++++++++++++ ui/src/core/model/camera_model.ts | 8 ++++---- ui/src/core/model/light_model.ts | 8 ++++---- ui/src/core/model/point_model.ts | 18 +++++++++--------- ui/src/core/model/robot_model.ts | 16 ++++++++-------- ui/src/core/model/scene_asset.ts | 10 +++++----- ui/src/core/model/solid_model.ts | 16 ++++++++-------- ui/src/core/model/zone_model.ts | 6 +++--- .../core/repository/core_three_repository.ts | 12 ++++++------ ui/src/core/ui/icons/icons.tsx | 8 +++++--- .../model/behavior_tree_model.ts | 5 +++-- .../behavior_tree_builder_store.tsx | 1 - .../data/scene_http_repository.ts | 7 ++----- .../presentation/forms/point/point_store.ts | 4 ++-- .../forms/robot_form/robot_form_store.ts | 2 +- .../forms/solid_body/solid_body_store.tsx | 2 +- .../presentation/scene_manager.tsx | 19 +++++++++++-------- .../presentation/scene_manager_store.ts | 18 ++++++++++++------ 20 files changed, 119 insertions(+), 79 deletions(-) create mode 100644 server/src/core/usecases/delete_file_usecase.ts create mode 100644 server/src/features/scene/delete_scene_scenario.ts diff --git a/server/src/core/repository/file_system_repository.ts b/server/src/core/repository/file_system_repository.ts index 7d89d4b..07537f7 100644 --- a/server/src/core/repository/file_system_repository.ts +++ b/server/src/core/repository/file_system_repository.ts @@ -1,6 +1,6 @@ import * as fs from "fs"; import { promisify } from "node:util"; -import { rimraf } from 'rimraf' +import { rimraf } from "rimraf"; export class FileSystemRepository { public createDir = promisify(fs.mkdir); @@ -8,6 +8,7 @@ export class FileSystemRepository { public writeFileAsync = promisify(fs.writeFile); public dirIsExists = promisify(fs.exists); public stat = promisify(fs.stat); + public deleteDir = promisify(fs.unlink); public readFileAsync = promisify(fs.readFile); public readdir = promisify(fs.readdir); public deleteDirRecursive = rimraf; @@ -21,7 +22,9 @@ export class FileSystemRepository { } return await this.readFileAsync(path); } - + deleteFile = async (path: string) => { + return await this.deleteDir(path); + }; readDirRecursive(path: string, filesToDir: string[] = []): string[] { const files = fs.readdirSync(path); files.forEach((file) => { @@ -41,5 +44,4 @@ export class FileSystemRepository { }); return filesToDir; } - } diff --git a/server/src/core/usecases/delete_file_usecase.ts b/server/src/core/usecases/delete_file_usecase.ts new file mode 100644 index 0000000..b301228 --- /dev/null +++ b/server/src/core/usecases/delete_file_usecase.ts @@ -0,0 +1,14 @@ +import { Result } from "../helpers/result"; +import { FileSystemRepository } from "../repository/file_system_repository"; + +export class DeleteFileUseCase { + fileSystemRepository = new FileSystemRepository(); + call = (path: string) => { + try { + this.fileSystemRepository.deleteFile(path); + return Result.ok("file delete"); + } catch { + return Result.error("Unknown error"); + } + }; +} diff --git a/server/src/features/scene/delete_scene_scenario.ts b/server/src/features/scene/delete_scene_scenario.ts new file mode 100644 index 0000000..ea1226d --- /dev/null +++ b/server/src/features/scene/delete_scene_scenario.ts @@ -0,0 +1,16 @@ +import { CallbackStrategyWithIdQuery, ResponseBase } from "../../core/controllers/http_controller"; +import { Result } from "../../core/helpers/result"; +import { DeleteDataBaseModelUseCase } from "../../core/usecases/delete_database_model_usecase"; +import { ReadByIdDataBaseModelUseCase } from "../../core/usecases/read_by_id_database_model_usecase"; +import { CoreValidation } from "../../core/validations/core_validation"; +import { MongoIdValidation } from "../../core/validations/mongo_id_validation"; +import { SceneModel } from "./create_new_scene_scenario"; + +export class DeleteSceneScenario extends CallbackStrategyWithIdQuery { + idValidationExpression: CoreValidation = new MongoIdValidation(); + call = async (id: string): ResponseBase => + (await new ReadByIdDataBaseModelUseCase(SceneModel).call(id)).map((sceneModel) => Result.ok() + // (await new DeleteDataBaseModelUseCase(SceneModel).call(id)).map(() => DeleteF ) + ); +} + diff --git a/ui/src/core/model/camera_model.ts b/ui/src/core/model/camera_model.ts index 01b0e99..81658f3 100644 --- a/ui/src/core/model/camera_model.ts +++ b/ui/src/core/model/camera_model.ts @@ -11,8 +11,8 @@ export class CameraModel implements Instance { type = SceneModelsTypes.CAMERA; jointType = 'fixed'; constructor( - public quaternion: number[], - public vector3: Vector3, + public orientation: number[], + public position: Vector3, public name: string, public cameraType: CameraTypes, public width: number, @@ -37,8 +37,8 @@ export class CameraModel implements Instance { } const perspectiveCamera = new PerspectiveCamera(this.fov, this.aspect, this.near, this.far); perspectiveCamera.name = this.name; - perspectiveCamera.position.copy(this.vector3); - perspectiveCamera.quaternion.copy(new Quaternion().fromArray(this.quaternion)); + perspectiveCamera.position.copy(this.position); + perspectiveCamera.quaternion.copy(new Quaternion().fromArray(this.orientation)); const cameraHelper = new CameraHelper(perspectiveCamera); cameraHelper.name = this.name + "camera_helper"; perspectiveCamera.userData[UserData.selectedObject] = true; diff --git a/ui/src/core/model/light_model.ts b/ui/src/core/model/light_model.ts index b4289ae..5b7aea9 100644 --- a/ui/src/core/model/light_model.ts +++ b/ui/src/core/model/light_model.ts @@ -21,8 +21,8 @@ export class LightModel implements Instance { penumbra: number; decay: number; @Type(() => Vector3) - vector3: Vector3; - quaternion: number[]; + position: Vector3; + orientation: number[]; constructor() {} update = (coreThreeRepository: CoreThreeRepository) => this.toWebGl(coreThreeRepository); icon: string = "Light"; @@ -48,8 +48,8 @@ export class LightModel implements Instance { ); light!.castShadow = true; - light!.position.copy(this.vector3); - light!.quaternion.copy(new Quaternion().fromArray(this.quaternion)); + light!.position.copy(this.position); + light!.quaternion.copy(new Quaternion().fromArray(this.orientation)); coreThreeRepository.scene.add(light!); }; diff --git a/ui/src/core/model/point_model.ts b/ui/src/core/model/point_model.ts index c77e71f..3ea2c58 100644 --- a/ui/src/core/model/point_model.ts +++ b/ui/src/core/model/point_model.ts @@ -11,10 +11,10 @@ export class PointModel implements Instance { type = SceneModelsTypes.POINT; name: string; @Type(() => Vector3) - vector3: Vector3; + position: Vector3; color: string = "#E91E63"; size: number = 0.01; - quaternion: number[]; + orientation: number[]; icon: string = "Point"; constructor() {} @@ -22,8 +22,8 @@ export class PointModel implements Instance { toWebGl = (coreThreeRepository: CoreThreeRepository) => coreThreeRepository.makePoint( this.name, - this.vector3, - new Quaternion().fromArray(this.quaternion), + this.position, + new Quaternion().fromArray(this.orientation), this.color, this.size ); @@ -38,12 +38,12 @@ export class PointModel implements Instance { toDependency = (): Pose => { return { name: this.name, - position: this.vector3, + position: this.position, orientation: { - x: this.quaternion[0], - y: this.quaternion[1], - z: this.quaternion[2], - w: this.quaternion[3], + x: this.orientation[0], + y: this.orientation[1], + z: this.orientation[2], + w: this.orientation[3], }, }; }; diff --git a/ui/src/core/model/robot_model.ts b/ui/src/core/model/robot_model.ts index 41960fd..215ff73 100644 --- a/ui/src/core/model/robot_model.ts +++ b/ui/src/core/model/robot_model.ts @@ -23,24 +23,24 @@ interface RobotJoint { export class RobotModel implements Instance { type = SceneModelsTypes.ROBOT; @Type(() => Vector3) - vector3: Vector3; + position: Vector3; jointPosition: RobotJoint[]; - quaternion: number[]; + orientation: number[]; name: string; httpUrl: string; nDof: number; toolType: string; constructor( - vector3: Vector3, - quaternion: number[], + position: Vector3, + orientation: number[], name: string, httpUrl: string, nDof: number, toolType: string, jointPosition: RobotJoint[] ) { - this.quaternion = quaternion; - this.vector3 = vector3; + this.orientation = orientation; + this.position = position; this.name = name; this.httpUrl = httpUrl; this.nDof = nDof; @@ -61,8 +61,8 @@ export class RobotModel implements Instance { }; update = (coreThreeRepository: CoreThreeRepository) => { const robot = coreThreeRepository.scene.getObjectByName(this.name) as URDFRobot; - robot.position.copy(this.vector3); - robot.quaternion.copy(new Quaternion().fromArray(this.quaternion)); + robot.position.copy(this.position); + robot.quaternion.copy(new Quaternion().fromArray(this.orientation)); this.jointPosition.forEach((el) => { robot.setJointValue(el.name, el.angle); }); diff --git a/ui/src/core/model/scene_asset.ts b/ui/src/core/model/scene_asset.ts index 0a87c1e..bd14192 100644 --- a/ui/src/core/model/scene_asset.ts +++ b/ui/src/core/model/scene_asset.ts @@ -1,4 +1,4 @@ -import { IsArray, IsEnum, IsNumber, IsOptional, IsString, ValidateNested } from "class-validator"; +import { IsArray } from "class-validator"; import { Type } from "class-transformer"; import { CameraModel } from "./camera_model"; import { SceneModelsTypes } from "./scene_models_type"; @@ -15,11 +15,11 @@ export abstract class Instance { type: string; abstract icon: string; @Type(() => Vector3) - vector3: Vector3; - quaternion: number[]; + position: Vector3; + orientation: number[]; name: string; - toWebGl = (coreThreeRepository: CoreThreeRepository) => {}; - update = (coreThreeRepository: CoreThreeRepository) => {}; + toWebGl = (_coreThreeRepository: CoreThreeRepository) => {}; + update = (_coreThreeRepository: CoreThreeRepository) => {}; } export class SceneAsset { diff --git a/ui/src/core/model/solid_model.ts b/ui/src/core/model/solid_model.ts index 6a94874..8f61087 100644 --- a/ui/src/core/model/solid_model.ts +++ b/ui/src/core/model/solid_model.ts @@ -10,17 +10,17 @@ export class SolidModel implements Instance { icon: string = "Solid"; type = SceneModelsTypes.SOLID; @Type(() => Vector3) - public vector3: Vector3; + public position: Vector3; constructor( vector3: Vector3, - public quaternion: number[], + public orientation: number[], public name: string, public solidType: string, public mesh: string, public collisionMesh: string, public spawnType: string ) { - this.vector3 = vector3; + this.position = vector3; } toSceneItems = (): SceneItems => { return { @@ -33,8 +33,8 @@ export class SolidModel implements Instance { update = (coreThreeRepository: CoreThreeRepository) => { const object = coreThreeRepository.getObjectsAtName(this.name) as Object3D; - object.position.copy(this.vector3) - object.quaternion.copy(new Quaternion().fromArray(this.quaternion)) + object.position.copy(this.position) + object.quaternion.copy(new Quaternion().fromArray(this.orientation)) }; @@ -45,12 +45,12 @@ export class SolidModel implements Instance { this.mesh, () => ( coreThreeRepository.raiseAnObjectAboveZeroVector(this.name), - (this.quaternion = coreThreeRepository.scene.getObjectByName(this.name)!.quaternion.toArray()), - (this.vector3 = coreThreeRepository.scene.getObjectByName(this.name)!.position) + (this.orientation = coreThreeRepository.scene.getObjectByName(this.name)!.quaternion.toArray()), + (this.position = coreThreeRepository.scene.getObjectByName(this.name)!.position) ), this.name, - this.vector3 + this.position ), () => console.log("UNKNOWN SPAWN TYPE SOLID MODEL") ); diff --git a/ui/src/core/model/zone_model.ts b/ui/src/core/model/zone_model.ts index 5dde601..3b269fe 100644 --- a/ui/src/core/model/zone_model.ts +++ b/ui/src/core/model/zone_model.ts @@ -9,17 +9,17 @@ export class ZoneModel implements Instance { type = SceneModelsTypes.ZONE; color: string = "#E91E63"; @Type(() => Vector3) - vector3: Vector3; + position: Vector3; constructor( vector3: Vector3, - public quaternion: number[], + public orientation: number[], public name: string, public width: number, public height: number, public length: number ) { - this.vector3 = vector3; + this.position = vector3; } update = (coreThreeRepository: CoreThreeRepository) => this.toWebGl(coreThreeRepository) icon: string = "Zone"; diff --git a/ui/src/core/repository/core_three_repository.ts b/ui/src/core/repository/core_three_repository.ts index 1d81c26..f7a720e 100644 --- a/ui/src/core/repository/core_three_repository.ts +++ b/ui/src/core/repository/core_three_repository.ts @@ -140,8 +140,8 @@ export class CoreThreeRepository extends TypedEvent { ); mesh.name = zoneModel.name; mesh.userData[UserData.selectedObject] = ""; - mesh.position.copy(zoneModel.vector3); - mesh.quaternion.copy(new Quaternion().fromArray(zoneModel.quaternion)); + mesh.position.copy(zoneModel.position); + mesh.quaternion.copy(new Quaternion().fromArray(zoneModel.orientation)); this.scene.add(mesh); }; makeCube(inc: number, vector?: Vector3, color?: string, size?: number) { @@ -188,8 +188,8 @@ export class CoreThreeRepository extends TypedEvent { this.urdfLoader.load(robotModel.httpUrl, (robot) => { robot.userData[UserData.selectedObject] = true; robot.name = robotModel.name; - if (robotModel.vector3) robot.position.copy(robotModel.vector3); - if (robotModel.quaternion) robot.quaternion.copy(new Quaternion().fromArray(robotModel.quaternion)); + if (robotModel.position) robot.position.copy(robotModel.position); + if (robotModel.orientation) robot.quaternion.copy(new Quaternion().fromArray(robotModel.orientation)); if (robotModel.jointPosition.isNotEmpty()) { robotModel.jointPosition.forEach((el) => { robot.setJointValue(el.name, el.angle); @@ -258,8 +258,8 @@ export class CoreThreeRepository extends TypedEvent { updateSolidBody = (solidBodyModel: SolidModel) => { const mesh = this.scene.getObjectByName(solidBodyModel.name); - mesh?.position.copy(solidBodyModel.vector3); - mesh?.quaternion.copy(new Quaternion().fromArray(solidBodyModel.quaternion)); + mesh?.position.copy(solidBodyModel.position); + mesh?.quaternion.copy(new Quaternion().fromArray(solidBodyModel.orientation)); }; disposeTransformControlsMode = () => this.transformControls.detach(); diff --git a/ui/src/core/ui/icons/icons.tsx b/ui/src/core/ui/icons/icons.tsx index 7484ed1..74df741 100644 --- a/ui/src/core/ui/icons/icons.tsx +++ b/ui/src/core/ui/icons/icons.tsx @@ -7,11 +7,12 @@ export interface IIconsProps extends IStyle { onClick?: Function; height?: number; width?: number; + color?: string; isNeedStopPropagation?: boolean; } export function Icon(props: IIconsProps) { - return getIconSvg(props.type, props.height, props.width).fold( + return getIconSvg(props.type, props.height, props.width, props.color).fold( (node) => { return (
=> { switch (type) { case "": @@ -385,7 +387,7 @@ const getIconSvg = ( fillRule="evenodd" clipRule="evenodd" d="M10 0C4.47 0 0 4.47 0 10C0 15.53 4.47 20 10 20C15.53 20 20 15.53 20 10C20 4.47 15.53 0 10 0ZM10 18C5.59 18 2 14.41 2 10C2 5.59 5.59 2 10 2C14.41 2 18 5.59 18 10C18 14.41 14.41 18 10 18ZM10 8.59L13.59 5L15 6.41L11.41 10L15 13.59L13.59 15L10 11.41L6.41 15L5 13.59L8.59 10L5 6.41L6.41 5L10 8.59Z" - fill="#49454F" + fill={color ?? "#49454F"} /> ); diff --git a/ui/src/features/behavior_tree_builder/model/behavior_tree_model.ts b/ui/src/features/behavior_tree_builder/model/behavior_tree_model.ts index 266a07c..cb28404 100644 --- a/ui/src/features/behavior_tree_builder/model/behavior_tree_model.ts +++ b/ui/src/features/behavior_tree_builder/model/behavior_tree_model.ts @@ -2,14 +2,15 @@ import { Type } from "class-transformer"; import { Result } from "../../../core/helper/result"; import { Skills } from "../../../core/model/skill_model"; import { NodeBehaviorTree } from "./node_behavior_tree"; -import { IsOptional } from "class-validator"; +import { IsOptional, IsString } from "class-validator"; import { BehaviorTreeBuilderHttpRepository } from "../data/behavior_tree_builder_repository"; import { message } from "antd"; export class BehaviorTreeModel { + @IsString() + public sceneId: string; @IsOptional() @Type(() => Skills) - public sceneId: string; public skills?: Skills; public scene: NodeBehaviorTree[] = []; public xml: string; diff --git a/ui/src/features/behavior_tree_builder/presentation/behavior_tree_builder_store.tsx b/ui/src/features/behavior_tree_builder/presentation/behavior_tree_builder_store.tsx index ef50682..cd9e392 100644 --- a/ui/src/features/behavior_tree_builder/presentation/behavior_tree_builder_store.tsx +++ b/ui/src/features/behavior_tree_builder/presentation/behavior_tree_builder_store.tsx @@ -326,7 +326,6 @@ export class BehaviorTreeBuilderStore extends UiDrawerFormState { - console.log(this.filledOutTemplates?.dependencyIsFilled) return this.filledOutTemplates?.dependencyIsFilled(type, sid) ?? false; }; getInputs(name: string) { diff --git a/ui/src/features/scene_manager/data/scene_http_repository.ts b/ui/src/features/scene_manager/data/scene_http_repository.ts index 2a87468..5779b02 100644 --- a/ui/src/features/scene_manager/data/scene_http_repository.ts +++ b/ui/src/features/scene_manager/data/scene_http_repository.ts @@ -7,10 +7,7 @@ import { SceneAsset } from "../../../core/model/scene_asset"; export class SceneHttpRepository extends CoreHttpRepository { editScene = (scene: SceneAsset) => this._jsonRequest(HttpMethod.PUT, "/scenes", scene); - - - - + deleteScene = (sceneId:string) => this._jsonRequest(HttpMethod.DELETE, '/scenes', ) newScene = (sceneViewModel: SceneViewModel) => this._jsonRequest(HttpMethod.POST, "/scenes", sceneViewModel) as unknown as Promise>; -} \ No newline at end of file +} diff --git a/ui/src/features/scene_manager/presentation/forms/point/point_store.ts b/ui/src/features/scene_manager/presentation/forms/point/point_store.ts index a486604..cefad83 100644 --- a/ui/src/features/scene_manager/presentation/forms/point/point_store.ts +++ b/ui/src/features/scene_manager/presentation/forms/point/point_store.ts @@ -29,8 +29,8 @@ export class PointStore extends FormState { clickLister = (event: MouseEvent) => this.storeType.isEqualR(PointStoreType.awaitClick).map(() => this.sceneMangerStore!.clickScene(event, this.sceneMangerStore!.canvasOffsetX).map((vector3) => { - this.viewModel.vector3 = vector3; - this.viewModel.quaternion = [0, 0, 0, 1]; + this.viewModel.position = vector3; + this.viewModel.orientation = [0, 0, 0, 1]; this.viewModel.toWebGl(this.sceneMangerStore.coreThreeRepository!); this.sceneMangerStore.activeFormType = undefined; this.sceneMangerStore.sceneItems.push(this.viewModel.toSceneItems(this.sceneMangerStore)); diff --git a/ui/src/features/scene_manager/presentation/forms/robot_form/robot_form_store.ts b/ui/src/features/scene_manager/presentation/forms/robot_form/robot_form_store.ts index 5e5def0..7defae3 100644 --- a/ui/src/features/scene_manager/presentation/forms/robot_form/robot_form_store.ts +++ b/ui/src/features/scene_manager/presentation/forms/robot_form/robot_form_store.ts @@ -23,7 +23,7 @@ export class RobotFormStore extends FormState { clickLister = (event: MouseEvent) => this.storeType.isEqualR(RobotStoreType.awaitMouseClick).map(() => this.sceneMangerStore!.clickScene(event, this.sceneMangerStore!.canvasOffsetX).map((vector3) => { - this.viewModel.vector3 = vector3; + this.viewModel.position = vector3; this.viewModel.toWebGl(this.sceneMangerStore.coreThreeRepository!); this.sceneMangerStore.activeFormType = undefined; this.sceneMangerStore.sceneItems.push(this.viewModel.toSceneItems(this.sceneMangerStore)); diff --git a/ui/src/features/scene_manager/presentation/forms/solid_body/solid_body_store.tsx b/ui/src/features/scene_manager/presentation/forms/solid_body/solid_body_store.tsx index 39e9d45..953e281 100644 --- a/ui/src/features/scene_manager/presentation/forms/solid_body/solid_body_store.tsx +++ b/ui/src/features/scene_manager/presentation/forms/solid_body/solid_body_store.tsx @@ -63,7 +63,7 @@ export class SolidBodyStore extends FormState { clickLister = (event: MouseEvent) => this.solidBodyStoreType.isEqualR(SolidBodyStoreType.spawn2DVector).map(() => this.sceneMangerStore!.clickScene(event, this.sceneMangerStore!.canvasOffsetX).map((vector3) => { - this.viewModel.vector3 = vector3; + this.viewModel.position = vector3; this.viewModel.spawnType = "BoundBox"; this.viewModel.toWebGl(this.sceneMangerStore.coreThreeRepository!); this.sceneMangerStore.sceneItems.push(this.viewModel.toSceneItems()); diff --git a/ui/src/features/scene_manager/presentation/scene_manager.tsx b/ui/src/features/scene_manager/presentation/scene_manager.tsx index e61cacc..0c03cea 100644 --- a/ui/src/features/scene_manager/presentation/scene_manager.tsx +++ b/ui/src/features/scene_manager/presentation/scene_manager.tsx @@ -209,14 +209,17 @@ export const SceneManger = observer(() => { }} > - { - navigate(`${SceneManagerPath}${el._id}`); - }} - textStyle={{ color: "black", textAlign: "center" }} - style={{ marginRight: 10, backgroundColor: "white", width: 126 }} - /> +
+ { + navigate(`${SceneManagerPath}${el._id}`); + }} + textStyle={{ color: "black", textAlign: "center" }} + style={{ marginRight: 10, backgroundColor: "white", width: 126 }} + /> + +
))} 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 3f1c1bf..03f7ffc 100644 --- a/ui/src/features/scene_manager/presentation/scene_manager_store.ts +++ b/ui/src/features/scene_manager/presentation/scene_manager_store.ts @@ -44,10 +44,9 @@ export interface SceneItems { icon: string; } - export class SceneMangerStore extends UiDrawerFormState { activeFormType?: string; - activeSceneId?: string; + activeSceneId: string = ""; selectedItemName?: string; activeFormDependency: Object = {}; viewModel: SceneViewModel = SceneViewModel.empty(); @@ -183,8 +182,8 @@ export class SceneMangerStore extends UiDrawerFormState { - model.vector3 = this.coreThreeRepository!.camera.position; - model.quaternion = this.coreThreeRepository!.camera.quaternion.toArray(); + model.position = this.coreThreeRepository!.camera.position; + model.orientation = this.coreThreeRepository!.camera.quaternion.toArray(); model.aspect = this.coreThreeRepository!.camera.aspect; this.sceneItems.push({ name: model.name, icon: "Camera", fn: () => {}, isSelected: false }); this.scene.push(model); @@ -207,6 +206,13 @@ export class SceneMangerStore extends UiDrawerFormState error.status.isEqualR(404).map(() => this.errors.push(new UiBaseError(`not found to project`))); + clickDeleteScene = async () => { + await this.messageHttp(this.sceneHttpRepository.deleteScene(this.activeSceneId), { + successMessage: "сцена удалена", + }); + this.mapOk("scenes", this.sceneHttpRepository.getAllScenes()); + }; + loadScene = (canvasRef: HTMLCanvasElement) => { this.canvasRef = canvasRef; this.storeMode.isEqualR(StoreMode.sceneInstance).map(() => this.loadWebGl(canvasRef)); @@ -258,8 +264,8 @@ export class SceneMangerStore extends UiDrawerFormState el.name.isEqualR(mesh.name).fold( () => { - el.vector3 = mesh.position; - el.quaternion = mesh.quaternion.toArray(); + el.position = mesh.position; + el.orientation = mesh.quaternion.toArray(); return el; }, () => el