@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
52 lines (51 loc) • 1.89 kB
JavaScript
;
import { TypeAssert } from "../engine/poly/Assert";
import { isObject3D } from "./geometry/ObjectContent";
export var ObjectTransformSpace = /* @__PURE__ */ ((ObjectTransformSpace2) => {
ObjectTransformSpace2["PARENT"] = "parent";
ObjectTransformSpace2["LOCAL"] = "local";
return ObjectTransformSpace2;
})(ObjectTransformSpace || {});
export var ObjectTransformMode = /* @__PURE__ */ ((ObjectTransformMode2) => {
ObjectTransformMode2["SET"] = "set matrix";
ObjectTransformMode2["MULT"] = "multiply matrix";
return ObjectTransformMode2;
})(ObjectTransformMode || {});
export const OBJECT_TRANSFORM_SPACES = [
"parent" /* PARENT */,
"local" /* LOCAL */
];
export const OBJECT_TRANSFORM_MODES = ["set matrix" /* SET */, "multiply matrix" /* MULT */];
export const OBJECT_TRANSFORM_SPACE_MENU_ENTRIES = [
{ name: "parent", value: OBJECT_TRANSFORM_SPACES.indexOf("parent" /* PARENT */) },
{ name: "local", value: OBJECT_TRANSFORM_SPACES.indexOf("local" /* LOCAL */) }
];
export function applyTransformWithSpaceToObject(object, matrix, transformSpace, transformMode) {
switch (transformSpace) {
case "parent" /* PARENT */: {
if (isObject3D(object)) {
object.updateMatrix();
object.applyMatrix4(matrix);
object.matrix.decompose(object.position, object.quaternion, object.scale);
} else {
object.applyMatrix4(matrix);
}
return;
}
case "local" /* LOCAL */: {
if (isObject3D(object)) {
object.updateMatrix();
if (transformMode == "set matrix" /* SET */) {
object.matrix.copy(matrix);
} else {
object.matrix.multiply(matrix);
}
object.matrix.decompose(object.position, object.quaternion, object.scale);
} else {
object.applyMatrix4(matrix);
}
return;
}
}
TypeAssert.unreachable(transformSpace);
}