UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

52 lines (51 loc) 1.89 kB
"use strict"; 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); }