@vived/app 2.45.0 → 2.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/lib/Entities/ModelMesh.d.ts +53 -0
  2. package/lib/Entities/ModelMesh.js +106 -0
  3. package/lib/Entities/SceneModel.d.ts +7 -7
  4. package/lib/Entities/SceneModel.js +16 -14
  5. package/lib/Entities/SceneModelMesh.d.ts +65 -0
  6. package/lib/Entities/SceneModelMesh.js +159 -0
  7. package/lib/Entities/SceneObject.d.ts +1 -4
  8. package/lib/Entities/SceneObject.js +0 -17
  9. package/lib/Entities/SceneRoot.d.ts +19 -59
  10. package/lib/Entities/SceneRoot.js +94 -26
  11. package/lib/Entities/index.d.ts +1 -1
  12. package/lib/Entities/index.js +1 -1
  13. package/lib/PresentationManagers/SceneObject/SceneObjectPM.d.ts +17 -0
  14. package/lib/PresentationManagers/SceneObject/SceneObjectPM.js +40 -0
  15. package/lib/PresentationManagers/SceneObject/index.d.ts +1 -0
  16. package/lib/PresentationManagers/SceneObject/index.js +13 -0
  17. package/lib/PresentationManagers/index.d.ts +1 -0
  18. package/lib/PresentationManagers/index.js +1 -0
  19. package/lib/UseCases/SceneModel/PeelSceneMeshBase.d.ts +20 -0
  20. package/lib/UseCases/SceneModel/PeelSceneMeshBase.js +66 -0
  21. package/lib/UseCases/SceneModel/SerializeActiveModel.d.ts +18 -0
  22. package/lib/UseCases/SceneModel/SerializeActiveModel.js +74 -0
  23. package/lib/UseCases/SceneModel/SetMeshesEnabledHook.d.ts +7 -0
  24. package/lib/UseCases/SceneModel/SetMeshesEnabledHook.js +22 -0
  25. package/lib/UseCases/SceneModel/index.d.ts +4 -2
  26. package/lib/UseCases/SceneModel/index.js +3 -1
  27. package/lib/UseCases/SceneModel/loadNewModel.d.ts +2 -0
  28. package/lib/UseCases/SceneModel/loadNewModel.js +84 -0
  29. package/lib/UseCases/SceneModel/setActiveSceneModel.js +4 -3
  30. package/lib/UseCases/SceneModel/setupSceneModelFromData.d.ts +2 -0
  31. package/lib/UseCases/SceneModel/setupSceneModelFromData.js +72 -0
  32. package/lib/UseCases/SceneObjects/PeelSceneObject.d.ts +18 -0
  33. package/lib/UseCases/SceneObjects/PeelSceneObject.js +61 -0
  34. package/lib/UseCases/SceneObjects/index.d.ts +1 -0
  35. package/lib/UseCases/SceneObjects/index.js +13 -0
  36. package/lib/UseCases/SceneRoot/SerializeSceneRoot.d.ts +15 -0
  37. package/lib/UseCases/SceneRoot/SerializeSceneRoot.js +26 -7
  38. package/lib/UseCases/SceneRoot/index.d.ts +1 -0
  39. package/lib/UseCases/SceneRoot/index.js +1 -0
  40. package/lib/UseCases/SceneRoot/initializeSceneRoot.d.ts +2 -0
  41. package/lib/UseCases/SceneRoot/initializeSceneRoot.js +9 -0
  42. package/lib/UseCases/SceneRoot/setupSceneRoot.d.ts +2 -0
  43. package/lib/UseCases/SceneRoot/setupSceneRoot.js +11 -0
  44. package/lib/UseCases/index.d.ts +1 -1
  45. package/lib/UseCases/index.js +1 -1
  46. package/lib/ValueObjects/Vector3.d.ts +7 -10
  47. package/lib/ValueObjects/Vector3.js +1 -0
  48. package/package.json +1 -1
@@ -1,37 +1,46 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.makeSceneRoot = void 0;
3
+ exports.makeSceneRoot = exports.SceneRoot = exports.SCENE_ROOT_ID = void 0;
4
4
  const ValueObjects_1 = require("../ValueObjects");
5
- const ObserverList_1 = require("./ObserverList");
6
- const TransformNode_1 = require("./TransformNode");
5
+ const ObservableEntity_1 = require("./ObservableEntity");
6
+ exports.SCENE_ROOT_ID = "scene-root";
7
+ class SceneRoot extends ObservableEntity_1.ObservableEntity {
8
+ }
9
+ exports.SceneRoot = SceneRoot;
7
10
  function makeSceneRoot() {
8
11
  return new SceneRootImp();
9
12
  }
10
13
  exports.makeSceneRoot = makeSceneRoot;
11
- class SceneRootImp {
14
+ class SceneRootImp extends SceneRoot {
12
15
  constructor() {
13
- this.observers = new ObserverList_1.ObserverList();
16
+ super(...arguments);
14
17
  this._defaultPosition = ValueObjects_1.Vector3.Zero();
15
18
  this._defaultRoation = ValueObjects_1.Quaternion.Identity();
16
- this._defaultScale = ValueObjects_1.Vector3.One();
19
+ this._defaultScale = 1;
17
20
  this._minScale = 0.01;
18
21
  this._maxScale = 10;
19
- this._id = "scene_root";
20
22
  this.applyDefaultData = (data) => {
21
23
  this._defaultPosition = ValueObjects_1.Vector3.FromArray(data.position);
22
24
  this._defaultRoation = ValueObjects_1.Quaternion.FromArray(data.rotation);
23
- this._defaultScale = new ValueObjects_1.Vector3(data.scale, data.scale, data.scale);
25
+ this._defaultScale = data.scale;
24
26
  this._maxScale = data.maxScale;
25
27
  this._minScale = data.minScale;
26
- this._id = data.id;
27
28
  };
28
29
  this.centerOnPoint = (point, durationMS, easeFn, onCompleted) => {
29
- const finalPosition = ValueObjects_1.Vector3.Subtract(this.transform.worldPosition, point);
30
- this.transform.lerp(durationMS, easeFn, finalPosition, undefined, undefined, onCompleted);
30
+ if (!this.sceneObject) {
31
+ console.warn("SceneRoot does not have a scene object");
32
+ return;
33
+ }
34
+ const finalPosition = ValueObjects_1.Vector3.Subtract(this.sceneObject.transform.worldPosition, point);
35
+ this.sceneObject.transform.lerp(durationMS, easeFn, finalPosition, undefined, undefined, onCompleted);
31
36
  };
32
37
  this.bumpScaleAboutPoint = (amount, worldPoint) => {
33
- const localPickOffset = this.transform.worldPointToLocal(worldPoint);
34
- const currentScale = this.transform.worldScale.x;
38
+ if (!this.sceneObject) {
39
+ console.warn("SceneRoot does not have a scene object");
40
+ return;
41
+ }
42
+ const localPickOffset = this.sceneObject.transform.worldPointToLocal(worldPoint);
43
+ const currentScale = this.sceneObject.transform.worldScale.x;
35
44
  let newScale = currentScale + amount;
36
45
  if (newScale < this.minScale) {
37
46
  newScale = this.minScale;
@@ -39,22 +48,81 @@ class SceneRootImp {
39
48
  else if (newScale > this.maxScale) {
40
49
  newScale = this.maxScale;
41
50
  }
42
- this.transform.worldScale = new ValueObjects_1.Vector3(newScale, newScale, newScale);
43
- const worldPickOffset = this.transform.localPointToWorld(localPickOffset);
51
+ this.sceneObject.transform.worldScale = new ValueObjects_1.Vector3(newScale, newScale, newScale);
52
+ const worldPickOffset = this.sceneObject.transform.localPointToWorld(localPickOffset);
44
53
  const bump = ValueObjects_1.Vector3.Subtract(worldPoint, worldPickOffset);
45
- this.transform.worldPosition = ValueObjects_1.Vector3.Add(bump, this.transform.worldPosition);
54
+ this.sceneObject.transform.worldPosition = ValueObjects_1.Vector3.Add(bump, this.sceneObject.transform.worldPosition);
46
55
  };
47
56
  this.lerpToDefault = (durationMS, easeFn, onCompleted) => {
48
- this.transform.lerp(durationMS, easeFn, this.defaultPosition, this.defaultRoation, this.defaultScale, onCompleted);
49
- };
50
- this.addObserver = (observer) => {
51
- this.observers.add(observer);
52
- };
53
- this.removeObserver = (observer) => {
54
- this.observers.remove(observer);
57
+ if (!this.sceneObject) {
58
+ console.warn("SceneRoot does not have a scene object");
59
+ return;
60
+ }
61
+ this.sceneObject.transform.lerp(durationMS, easeFn, this.defaultPosition, this.defaultRoation, new ValueObjects_1.Vector3(this.defaultScale, this.defaultScale, this.defaultScale), onCompleted);
55
62
  };
56
- this.transform = TransformNode_1.makeTransformNode();
57
- this.transform.addObserver(this.observers.notify);
63
+ }
64
+ get position() {
65
+ if (this.sceneObject) {
66
+ return this.sceneObject.transform.localPosition;
67
+ }
68
+ else {
69
+ console.warn("SceneRoot does not have a scene object");
70
+ return ValueObjects_1.Vector3.Zero();
71
+ }
72
+ }
73
+ set position(p) {
74
+ if (this.sceneObject) {
75
+ this.sceneObject.transform.localPosition = p;
76
+ }
77
+ else {
78
+ console.warn("SceneRoot does not have a scene object");
79
+ }
80
+ }
81
+ get rotation() {
82
+ if (this.sceneObject) {
83
+ return this.sceneObject.transform.localRotation;
84
+ }
85
+ else {
86
+ console.warn("SceneRoot does not have a scene object");
87
+ return ValueObjects_1.Quaternion.Identity();
88
+ }
89
+ }
90
+ set rotation(r) {
91
+ if (this.sceneObject) {
92
+ this.sceneObject.transform.localRotation = r;
93
+ }
94
+ else {
95
+ console.warn("SceneRoot does not have a scene object");
96
+ }
97
+ }
98
+ get scale() {
99
+ if (this.sceneObject) {
100
+ return this.sceneObject.transform.localScale.x;
101
+ }
102
+ else {
103
+ console.warn("SceneRoot does not have a scene object");
104
+ return 1;
105
+ }
106
+ }
107
+ set scale(s) {
108
+ if (this.sceneObject) {
109
+ this.sceneObject.transform.localScale = new ValueObjects_1.Vector3(s, s, s);
110
+ }
111
+ else {
112
+ console.warn("SceneRoot does not have a scene object");
113
+ }
114
+ }
115
+ get sceneObject() {
116
+ return this._sceneObject;
117
+ }
118
+ set sceneObject(so) {
119
+ if (this._sceneObject) {
120
+ this._sceneObject.removeObserver(this.notify);
121
+ }
122
+ this._sceneObject = so;
123
+ if (this._sceneObject) {
124
+ this._sceneObject.addObserver(this.notify);
125
+ }
58
126
  }
59
127
  get defaultPosition() {
60
128
  return this._defaultPosition;
@@ -72,6 +140,6 @@ class SceneRootImp {
72
140
  return this._maxScale;
73
141
  }
74
142
  get id() {
75
- return this._id;
143
+ return exports.SCENE_ROOT_ID;
76
144
  }
77
145
  }
@@ -22,7 +22,7 @@ export * from "./ObserverList";
22
22
  export * from "./QuestionChallenge";
23
23
  export * from "./QuestionChallengeAnswer";
24
24
  export * from "./SceneModel";
25
- export * from "./SceneModelObject";
25
+ export * from "./SceneModelMesh";
26
26
  export * from "./SceneModelRepo";
27
27
  export * from "./SceneObject";
28
28
  export * from "./SceneObjectsRepo";
@@ -34,7 +34,7 @@ __exportStar(require("./ObserverList"), exports);
34
34
  __exportStar(require("./QuestionChallenge"), exports);
35
35
  __exportStar(require("./QuestionChallengeAnswer"), exports);
36
36
  __exportStar(require("./SceneModel"), exports);
37
- __exportStar(require("./SceneModelObject"), exports);
37
+ __exportStar(require("./SceneModelMesh"), exports);
38
38
  __exportStar(require("./SceneModelRepo"), exports);
39
39
  __exportStar(require("./SceneObject"), exports);
40
40
  __exportStar(require("./SceneObjectsRepo"), exports);
@@ -0,0 +1,17 @@
1
+ import { SceneObject } from "../../Entities";
2
+ import { Quaternion, Vector3 } from "../../ValueObjects";
3
+ import { PresentionManager } from "../PresentationManager";
4
+ export interface SceneObjectVM {
5
+ position: Vector3;
6
+ rotation: Quaternion;
7
+ scale: Vector3;
8
+ enabled: boolean;
9
+ }
10
+ export declare class SceneObjectPM extends PresentionManager {
11
+ private sceneObject;
12
+ private updateView;
13
+ private lastVM?;
14
+ doUpdateView: () => void;
15
+ private vmHasChanged;
16
+ constructor(sceneObject: SceneObject, updateView: (vm: SceneObjectVM) => void);
17
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SceneObjectPM = void 0;
4
+ const ValueObjects_1 = require("../../ValueObjects");
5
+ const PresentationManager_1 = require("../PresentationManager");
6
+ class SceneObjectPM extends PresentationManager_1.PresentionManager {
7
+ constructor(sceneObject, updateView) {
8
+ super(sceneObject);
9
+ this.sceneObject = sceneObject;
10
+ this.updateView = updateView;
11
+ this.doUpdateView = () => {
12
+ const enabled = this.sceneObject.shown && this.sceneObject.enabled;
13
+ const vm = {
14
+ position: this.sceneObject.transform.localPosition,
15
+ rotation: this.sceneObject.transform.localRotation,
16
+ scale: this.sceneObject.transform.localScale,
17
+ enabled,
18
+ };
19
+ if (this.vmHasChanged(vm)) {
20
+ this.updateView(vm);
21
+ this.lastVM = vm;
22
+ }
23
+ };
24
+ this.doUpdateView();
25
+ }
26
+ vmHasChanged(newVM) {
27
+ if (this.lastVM === undefined)
28
+ return true;
29
+ if (this.lastVM.enabled !== newVM.enabled)
30
+ return true;
31
+ if (!ValueObjects_1.Vector3.Equal(this.lastVM.position, newVM.position))
32
+ return true;
33
+ if (!ValueObjects_1.Vector3.Equal(this.lastVM.scale, newVM.scale))
34
+ return true;
35
+ if (!ValueObjects_1.Quaternion.Close(this.lastVM.rotation, newVM.rotation))
36
+ return true;
37
+ return false;
38
+ }
39
+ }
40
+ exports.SceneObjectPM = SceneObjectPM;
@@ -0,0 +1 @@
1
+ export * from "./SceneObjectPM";
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./SceneObjectPM"), exports);
@@ -6,6 +6,7 @@ export * from "./ShowBabylonInspectorPM";
6
6
  export * from "./HasRedoPM";
7
7
  export * from "./HasUndoPM";
8
8
  export * from "./QuestionChallenge";
9
+ export * from "./SceneObject";
9
10
  export * from "./ToolPM";
10
11
  export * from "./TransformNodePM";
11
12
  export * from "./HoverLabels";
@@ -18,6 +18,7 @@ __exportStar(require("./ShowBabylonInspectorPM"), exports);
18
18
  __exportStar(require("./HasRedoPM"), exports);
19
19
  __exportStar(require("./HasUndoPM"), exports);
20
20
  __exportStar(require("./QuestionChallenge"), exports);
21
+ __exportStar(require("./SceneObject"), exports);
21
22
  __exportStar(require("./ToolPM"), exports);
22
23
  __exportStar(require("./TransformNodePM"), exports);
23
24
  __exportStar(require("./HoverLabels"), exports);
@@ -0,0 +1,20 @@
1
+ import { Babylon, SceneModelRepo, TransformNode } from "../../Entities";
2
+ import { ParametricLine } from "../../ValueObjects";
3
+ export declare class PeelSceneMeshBase {
4
+ private babylon;
5
+ private sceneModelRepo;
6
+ get peeledSceneObjectID(): string | undefined;
7
+ private _sceneObject;
8
+ private _didPeel;
9
+ get didPeel(): boolean;
10
+ private _doPeel;
11
+ private _transformToPeel;
12
+ get peelingTransform(): TransformNode | undefined;
13
+ private _rootPos;
14
+ private _peelPlane;
15
+ private _pickOffset;
16
+ tryInitializePeel: (pickRay: ParametricLine) => void;
17
+ updatePeel: (pickRay: ParametricLine) => void;
18
+ stopPeel: () => void;
19
+ constructor(babylon: Babylon, sceneModelRepo: SceneModelRepo);
20
+ }
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PeelSceneMeshBase = void 0;
4
+ const ValueObjects_1 = require("../../ValueObjects");
5
+ class PeelSceneMeshBase {
6
+ constructor(babylon, sceneModelRepo) {
7
+ this.babylon = babylon;
8
+ this.sceneModelRepo = sceneModelRepo;
9
+ this._didPeel = false;
10
+ this._doPeel = false;
11
+ this._transformToPeel = undefined;
12
+ this._peelPlane = ValueObjects_1.ParametricPlane.XY();
13
+ this._pickOffset = ValueObjects_1.Vector3.Zero();
14
+ this.tryInitializePeel = (pickRay) => {
15
+ var _a, _b, _c, _d;
16
+ this._doPeel = false;
17
+ this._didPeel = false;
18
+ this._transformToPeel = undefined;
19
+ const sceneObjectID = this.babylon.sceneObjectRayPick(pickRay);
20
+ if (!sceneObjectID)
21
+ return;
22
+ const sceneObject = (_b = (_a = this.sceneModelRepo.activeModel) === null || _a === void 0 ? void 0 : _a.getMeshById(sceneObjectID)) === null || _b === void 0 ? void 0 : _b.sceneObject;
23
+ if (!sceneObject)
24
+ return;
25
+ this._sceneObject = sceneObject;
26
+ this._transformToPeel = sceneObject.transform;
27
+ const scenePick = this.babylon.sceneRayPick(pickRay);
28
+ if (!scenePick)
29
+ return;
30
+ const pickPlaneDirection = ValueObjects_1.Vector3.Backward();
31
+ const planePickPos = (_c = scenePick.worldPickPoint) !== null && _c !== void 0 ? _c : ValueObjects_1.Vector3.Zero();
32
+ this._peelPlane = ValueObjects_1.ParametricPlane.FromPointNormal(planePickPos, pickPlaneDirection);
33
+ const pick = (_d = this._peelPlane.intersectLine(pickRay)) !== null && _d !== void 0 ? _d : ValueObjects_1.Vector3.Zero();
34
+ this._rootPos = this._transformToPeel.worldPosition;
35
+ this._pickOffset = ValueObjects_1.Vector3.Subtract(this._rootPos, pick);
36
+ this._doPeel = true;
37
+ };
38
+ this.updatePeel = (pickRay) => {
39
+ var _a;
40
+ if (!this._doPeel)
41
+ return;
42
+ if (!this._transformToPeel)
43
+ return;
44
+ const pick = (_a = this._peelPlane.intersectLine(pickRay)) !== null && _a !== void 0 ? _a : ValueObjects_1.Vector3.Zero();
45
+ this._transformToPeel.worldPosition = ValueObjects_1.Vector3.Add(pick, this._pickOffset);
46
+ this._didPeel = true;
47
+ };
48
+ this.stopPeel = () => {
49
+ this._doPeel = false;
50
+ this._didPeel = false;
51
+ this._transformToPeel = undefined;
52
+ this._rootPos = undefined;
53
+ };
54
+ }
55
+ get peeledSceneObjectID() {
56
+ var _a;
57
+ return (_a = this._sceneObject) === null || _a === void 0 ? void 0 : _a.id;
58
+ }
59
+ get didPeel() {
60
+ return this._didPeel;
61
+ }
62
+ get peelingTransform() {
63
+ return this._transformToPeel;
64
+ }
65
+ }
66
+ exports.PeelSceneMeshBase = PeelSceneMeshBase;
@@ -0,0 +1,18 @@
1
+ import { StateMachine, SceneModelMeshStateDTO, SerializedSystem, SceneModelRepo } from "../../Entities";
2
+ export declare class SerializeActiveModel implements SerializedSystem {
3
+ private sceneModelRepo;
4
+ private easeFn;
5
+ name: string;
6
+ seriliziationVersion: number;
7
+ loadNewModel: (modelID: string, initialStateLookup: Map<string, SceneModelMeshStateDTO>) => void;
8
+ selectActiveModel: () => void;
9
+ getSystemState(): object;
10
+ applySystemState(state: object, version: number, transitionDurationSec: number): void;
11
+ private applyStateV1;
12
+ applyDefaultState: () => void;
13
+ constructor(sceneModelRepo: SceneModelRepo, easeFn: (normalizedTime: number) => number, stateMachine: StateMachine);
14
+ }
15
+ export interface SerializedActiveModelV1 {
16
+ modelID: string;
17
+ meshModelStates: SceneModelMeshStateDTO[];
18
+ }
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SerializeActiveModel = void 0;
4
+ const ValueObjects_1 = require("../../ValueObjects");
5
+ class SerializeActiveModel {
6
+ constructor(sceneModelRepo, easeFn, stateMachine) {
7
+ this.sceneModelRepo = sceneModelRepo;
8
+ this.easeFn = easeFn;
9
+ this.name = "active-model";
10
+ this.seriliziationVersion = 1;
11
+ this.loadNewModel = () => {
12
+ throw new Error("setActiveModel has not been injected into SerializeActiveModel serializer");
13
+ };
14
+ this.selectActiveModel = () => {
15
+ throw new Error("selectActiveModel has not been injected into SerializeActiveModel serializer");
16
+ };
17
+ this.applyDefaultState = () => {
18
+ this.selectActiveModel();
19
+ };
20
+ stateMachine.registerSerializedSystem(this);
21
+ }
22
+ getSystemState() {
23
+ const modelStates = [];
24
+ if (this.sceneModelRepo.activeModel) {
25
+ this.sceneModelRepo.activeModel.getAllMeshes().forEach((mesh) => {
26
+ const meshState = mesh.getState();
27
+ if (meshState !== null) {
28
+ modelStates.push(meshState);
29
+ }
30
+ });
31
+ }
32
+ const state = {
33
+ modelID: this.sceneModelRepo.activeModelID,
34
+ meshModelStates: modelStates,
35
+ };
36
+ return state;
37
+ }
38
+ applySystemState(state, version, transitionDurationSec) {
39
+ if (version === 1) {
40
+ this.applyStateV1(state, transitionDurationSec);
41
+ }
42
+ else {
43
+ this.applyDefaultState();
44
+ }
45
+ }
46
+ applyStateV1(state, transitionDurationSec) {
47
+ const { meshModelStates, modelID } = state;
48
+ if (meshModelStates === undefined || modelID === undefined) {
49
+ console.warn("[SerializeActiveModel] Unable to parse state: ", JSON.stringify(state));
50
+ this.applyDefaultState();
51
+ return;
52
+ }
53
+ const stateLookup = new Map();
54
+ meshModelStates.forEach((mmState) => {
55
+ stateLookup.set(mmState.id, mmState);
56
+ });
57
+ const existingModel = this.sceneModelRepo.get(modelID);
58
+ if (existingModel) {
59
+ this.sceneModelRepo.activeModelID = modelID;
60
+ existingModel.getAllMeshes().forEach((meshModel) => {
61
+ const mmState = stateLookup.get(meshModel.id);
62
+ const pos = mmState
63
+ ? ValueObjects_1.Vector3.FromDTO(mmState.position)
64
+ : ValueObjects_1.Vector3.Zero();
65
+ meshModel.moveTo(pos, transitionDurationSec * 1000, this.easeFn);
66
+ meshModel.shown = mmState ? mmState.shown : true;
67
+ });
68
+ }
69
+ else {
70
+ this.loadNewModel(modelID, stateLookup);
71
+ }
72
+ }
73
+ }
74
+ exports.SerializeActiveModel = SerializeActiveModel;
@@ -0,0 +1,7 @@
1
+ import { SceneModelRepo } from "../../Entities";
2
+ export declare class SetMeshesEnabledHook {
3
+ private sceneModelRepo;
4
+ private lastActiveModelID;
5
+ onSceneModelRepoChange: () => void;
6
+ constructor(sceneModelRepo: SceneModelRepo);
7
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SetMeshesEnabledHook = void 0;
4
+ class SetMeshesEnabledHook {
5
+ constructor(sceneModelRepo) {
6
+ this.sceneModelRepo = sceneModelRepo;
7
+ this.onSceneModelRepoChange = () => {
8
+ if (this.lastActiveModelID === this.sceneModelRepo.activeModelID)
9
+ return;
10
+ this.lastActiveModelID = this.sceneModelRepo.activeModelID;
11
+ this.sceneModelRepo.getAll().forEach((sceneModel) => {
12
+ const enabled = sceneModel.id === this.sceneModelRepo.activeModelID;
13
+ sceneModel.getAllMeshes().forEach((mesh) => {
14
+ if (mesh.sceneObject)
15
+ mesh.sceneObject.enabled = enabled;
16
+ });
17
+ });
18
+ };
19
+ sceneModelRepo.addObserver(this.onSceneModelRepoChange);
20
+ }
21
+ }
22
+ exports.SetMeshesEnabledHook = SetMeshesEnabledHook;
@@ -1,2 +1,4 @@
1
- export * from './modelDataLoader';
2
- export * from './setActiveSceneModel';
1
+ export * from "./modelDataLoader";
2
+ export * from "./loadNewModel";
3
+ export * from "./SerializeActiveModel";
4
+ export * from "./SetMeshesEnabledHook";
@@ -11,4 +11,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  __exportStar(require("./modelDataLoader"), exports);
14
- __exportStar(require("./setActiveSceneModel"), exports);
14
+ __exportStar(require("./loadNewModel"), exports);
15
+ __exportStar(require("./SerializeActiveModel"), exports);
16
+ __exportStar(require("./SetMeshesEnabledHook"), exports);
@@ -0,0 +1,2 @@
1
+ import { AppDispatcher, SceneModel, SceneModelMeshStateDTO, SceneModelRepo, SceneObjectsRepo, SceneRoot } from "../../Entities";
2
+ export declare function makeLoadNewModel(sceneModelRepo: SceneModelRepo, sceneObjectRepo: SceneObjectsRepo, sceneRoot: SceneRoot, appDispatcher: AppDispatcher): (modelID: string, initialStateLookup: Map<string, SceneModelMeshStateDTO>) => Promise<SceneModel>;
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.makeLoadNewModel = void 0;
13
+ const Entities_1 = require("../../Entities");
14
+ const ValueObjects_1 = require("../../ValueObjects");
15
+ function makeLoadNewModel(sceneModelRepo, sceneObjectRepo, sceneRoot, appDispatcher) {
16
+ return function loadNewModel(modelID, initialStateLookup) {
17
+ return __awaiter(this, void 0, void 0, function* () {
18
+ let sceneModel = sceneModelRepo.get(modelID);
19
+ if (sceneModel === undefined) {
20
+ sceneModel = Entities_1.makeSceneModel(modelID);
21
+ sceneModelRepo.add(modelID, sceneModel);
22
+ }
23
+ sceneModelRepo.activeModelID = modelID;
24
+ if (sceneModel.state === Entities_1.SceneModelState.LOADING) {
25
+ return Promise.resolve(sceneModel);
26
+ }
27
+ if (sceneModel.state === Entities_1.SceneModelState.READY) {
28
+ return Promise.resolve(sceneModel);
29
+ }
30
+ sceneModel.error = undefined;
31
+ sceneModel.state = Entities_1.SceneModelState.LOADING;
32
+ sceneModelRepo.isLoadingSceneModel = true;
33
+ const dto = {
34
+ title: "Loading active model and data",
35
+ message: "Loading...",
36
+ };
37
+ const closeSpinner = yield appDispatcher.showSpinner(dto);
38
+ try {
39
+ const dataDTO = yield sceneModelRepo.dataLoader(modelID);
40
+ sceneModel.applyData(dataDTO);
41
+ sceneModel.getAllMeshes().forEach((meshObject) => {
42
+ var _a;
43
+ let so = sceneObjectRepo.get(meshObject.id);
44
+ if (!so) {
45
+ so = Entities_1.makeSceneObject(meshObject.id);
46
+ sceneObjectRepo.add(meshObject.id, so);
47
+ }
48
+ so.transform.parent = (_a = sceneRoot.sceneObject) === null || _a === void 0 ? void 0 : _a.transform;
49
+ meshObject.sceneObject = so;
50
+ const initialState = initialStateLookup.get(meshObject.id);
51
+ meshObject.position = initialState
52
+ ? ValueObjects_1.Vector3.FromDTO(initialState.position)
53
+ : ValueObjects_1.Vector3.Zero();
54
+ meshObject.shown = initialState ? initialState.shown : true;
55
+ so.transform.localRotation = ValueObjects_1.Quaternion.Identity();
56
+ so.transform.localScale = ValueObjects_1.Vector3.One();
57
+ });
58
+ yield sceneModelRepo.modelLoader(modelID);
59
+ sceneModel.state = Entities_1.SceneModelState.READY;
60
+ sceneModelRepo.isLoadingSceneModel = false;
61
+ closeSpinner();
62
+ return Promise.resolve(sceneModel);
63
+ }
64
+ catch (e) {
65
+ const error = e;
66
+ sceneModelRepo.isLoadingSceneModel = false;
67
+ sceneModelRepo.clearActiveModel();
68
+ sceneModel.error = error;
69
+ closeSpinner();
70
+ const alertDTO = {
71
+ title: "Load Error",
72
+ message: `Failed to Load the Model and Data. Error message: ${error.message}`,
73
+ closeButtonLabel: "OK",
74
+ closeCallback: () => {
75
+ // nada
76
+ },
77
+ };
78
+ appDispatcher.showAlert(alertDTO);
79
+ return Promise.reject(error);
80
+ }
81
+ });
82
+ };
83
+ }
84
+ exports.makeLoadNewModel = makeLoadNewModel;
@@ -38,14 +38,15 @@ function makeSetActiveModel(sceneModelRepo, sceneObjectRepo, sceneRoot, appDispa
38
38
  try {
39
39
  const dataDTO = yield sceneModelRepo.dataLoader(modelID);
40
40
  sceneModel.applyData(dataDTO);
41
- sceneModel.getAllObjects().forEach((meshObject) => {
41
+ sceneModel.getAllMeshes().forEach((meshObject) => {
42
+ var _a;
42
43
  let so = sceneObjectRepo.get(meshObject.id);
43
44
  if (!so) {
44
45
  so = Entities_1.makeSceneObject(meshObject.id);
45
46
  sceneObjectRepo.add(meshObject.id, so);
46
47
  }
47
48
  so.label = meshObject.label;
48
- so.transform.parent = sceneRoot.transform;
49
+ so.transform.parent = (_a = sceneRoot.sceneObject) === null || _a === void 0 ? void 0 : _a.transform;
49
50
  so.notify();
50
51
  });
51
52
  yield sceneModelRepo.modelLoader(modelID);
@@ -79,7 +80,7 @@ exports.makeSetActiveModel = makeSetActiveModel;
79
80
  function setSceneObjectsEnabled(sceneObjectRepo, activeModel) {
80
81
  const allSOs = sceneObjectRepo.getAll();
81
82
  allSOs.forEach(so => {
82
- if (activeModel.hasObject(so.id)) {
83
+ if (activeModel.hasMesh(so.id)) {
83
84
  so.enabled = true;
84
85
  }
85
86
  else {
@@ -0,0 +1,2 @@
1
+ import { SceneModel, SceneModelDTO, SceneObjectsRepo } from "../../Entities";
2
+ export declare function makeSetupSceneModelFromData(sceneObjectRepo: SceneObjectsRepo): (sceneModel: SceneModel, data: SceneModelDTO) => void;