{"version":3,"file":"Projection3d.mjs","sources":["../../src/proj3d/Projection3d.ts"],"sourcesContent":["import { LinearProjection } from '../base';\r\nimport { ObservablePoint3d } from './Point3d';\r\nimport { Matrix, Transform } from '@pixi/math';\r\nimport { Matrix3d } from './Matrix3d';\r\nimport { ObservableEuler } from './ObservableEuler';\r\n\r\nconst tempMat = new Matrix3d();\r\n\r\nexport class Projection3d extends LinearProjection<Matrix3d>\r\n{\r\n    constructor(legacy: Transform, enable?: boolean)\r\n    {\r\n        super(legacy, enable);\r\n        this.local = new Matrix3d();\r\n        this.world = new Matrix3d();\r\n\r\n        this.local.cacheInverse = true;\r\n        this.world.cacheInverse = true;\r\n\r\n        this.position._z = 0;\r\n        this.scale._z = 1;\r\n        this.pivot._z = 0;\r\n    }\r\n\r\n    cameraMatrix: Matrix3d = null;\r\n\r\n    _cameraMode = false;\r\n\r\n    get cameraMode(): boolean\r\n    {\r\n        return this._cameraMode;\r\n    }\r\n\r\n    set cameraMode(value: boolean)\r\n    {\r\n        if (this._cameraMode === value)\r\n        {\r\n            return;\r\n        }\r\n        this._cameraMode = value;\r\n\r\n        this.euler._sign = this._cameraMode ? -1 : 1;\r\n        this.euler._quatDirtyId++;\r\n\r\n        if (value)\r\n        {\r\n            this.cameraMatrix = new Matrix3d();\r\n        }\r\n    }\r\n\r\n    position = new ObservablePoint3d(this.onChange, this, 0, 0);\r\n    scale = new ObservablePoint3d(this.onChange, this, 1, 1);\r\n    euler = new ObservableEuler(this.onChange, this, 0, 0, 0);\r\n    pivot = new ObservablePoint3d(this.onChange, this, 0, 0);\r\n\r\n    onChange(): void\r\n    {\r\n        this._projID++;\r\n    }\r\n\r\n    clear(): void\r\n    {\r\n        if (this.cameraMatrix)\r\n        {\r\n            this.cameraMatrix.identity();\r\n        }\r\n        this.position.set(0, 0, 0);\r\n        this.scale.set(1, 1, 1);\r\n        this.euler.set(0, 0, 0);\r\n        this.pivot.set(0, 0, 0);\r\n        super.clear();\r\n    }\r\n\r\n    updateLocalTransform(lt: Matrix): void\r\n    {\r\n        if (this._projID === 0)\r\n        {\r\n            this.local.copyFrom(lt);\r\n\r\n            return;\r\n        }\r\n        const matrix = this.local;\r\n        const euler = this.euler;\r\n        const pos = this.position;\r\n        const scale = this.scale;\r\n        const pivot = this.pivot;\r\n\r\n        euler.update();\r\n\r\n        if (!this.cameraMode)\r\n        {\r\n            matrix.setToRotationTranslationScale(euler.quaternion, pos._x, pos._y, pos._z, scale._x, scale._y, scale._z);\r\n            matrix.translate(-pivot._x, -pivot._y, -pivot._z);\r\n            matrix.setToMultLegacy(lt, matrix);\r\n\r\n            return;\r\n        }\r\n\r\n        matrix.setToMultLegacy(lt, this.cameraMatrix);\r\n        matrix.translate(pivot._x, pivot._y, pivot._z);\r\n        matrix.scale(1.0 / scale._x, 1.0 / scale._y, 1.0 / scale._z);\r\n        tempMat.setToRotationTranslationScale(euler.quaternion, 0, 0, 0, 1, 1, 1);\r\n        matrix.setToMult(matrix, tempMat);\r\n        matrix.translate(-pos._x, -pos._y, -pos._z);\r\n\r\n        this.local._dirtyId++;\r\n    }\r\n}\r\n"],"names":[],"mappings":"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"}