@tomorrowevening/hermes
Version:
An extendable set of Web Tools controlled via a separate window for non-intereference with content.
2 lines (1 loc) • 2.23 kB
JavaScript
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react/jsx-runtime"),i=require("three"),h=require("react"),d=require("../InspectorGroup.cjs"),l=require("../../utils.cjs"),a=require("../../../multiView/MultiView.cjs"),s=require("../../../../utils/math.cjs");class n extends h.Component{static instance;matrix=new i.Matrix4;position=new i.Vector3;rotation=new i.Euler;scale=new i.Vector3;open=!1;constructor(t){super(t);const e=localStorage.getItem(this.expandedName),o=e!==null?e==="open":!1;this.open=o,this.saveExpanded(),this.state={lastUpdated:0,expanded:o},this.matrix.elements=t.object.matrix,t.object.uuid.length>0&&(this.position.setFromMatrixPosition(this.matrix),this.rotation.setFromRotationMatrix(this.matrix),this.scale.setFromMatrixScale(this.matrix)),n.instance=this}update(){if(a.instance){const t=a.instance.selectedItem;if(t===void 0)return;this.position.x=s.roundTo(t.position.x,3),this.position.y=s.roundTo(t.position.y,3),this.position.z=s.roundTo(t.position.z,3),this.rotation.copy(t.rotation),this.scale.x=s.roundTo(t.scale.x,3),this.scale.y=s.roundTo(t.scale.y,3),this.scale.z=s.roundTo(t.scale.z,3),this.setState({lastUpdated:Date.now()})}}render(){return c.jsx(d,{three:this.props.three,title:"Transform",expanded:this.open,items:[{title:"Position",prop:"position",type:"grid3",step:.1,value:this.position,onChange:this.updateTransform},{title:"Rotation",prop:"rotation",type:"euler",value:this.rotation,onChange:this.updateTransform},{title:"Scale",prop:"scale",type:"grid3",value:this.scale,onChange:this.updateTransform},{title:"Visible",prop:"visible",type:"boolean",value:this.props.object.visible,onChange:this.updateTransform}],onToggle:t=>{this.open=t,this.saveExpanded()}},this.state.lastUpdated)}updateTransform=(t,e)=>{const o=t==="rotation"?{x:e._x,y:e._y,z:e._z}:e;this.props.three.updateObject(this.props.object.uuid,t,o);const r=this.props.three.getScene(this.props.object.uuid);if(r){const p=r.getObjectByProperty("uuid",this.props.object.uuid);l.setItemProps(p,t,o)}};saveExpanded(){localStorage.setItem(this.expandedName,this.open?"open":"closed")}get expandedName(){return`${this.props.three.name}_transform`}}exports.InspectTransform=n;