better preview on pivot, with axes
This commit is contained in:
@@ -2,11 +2,11 @@ import * as THREE from '/app/thirdparty/Three/three.module.js'
|
||||
|
||||
if(!app.helpers) app.helpers = {}
|
||||
/**
|
||||
* Mixing add-in methods to your view instance.
|
||||
* All of this should not be a helper, but inherited this from WindozDomContent, but not my framework anymore.
|
||||
*/
|
||||
* Mixing add-in methods to your view instance.
|
||||
* All of this should not be a helper, but inherited this from WindozDomContent, but not my framework anymore.
|
||||
*/
|
||||
app.helpers.helpers3D = {
|
||||
|
||||
|
||||
agentFromJSON(id, desc){
|
||||
let obj, wrapper
|
||||
if(desc.type === 'Mesh') {
|
||||
@@ -24,8 +24,8 @@ app.helpers.helpers3D = {
|
||||
matProps.color = parseInt(matProps.color)
|
||||
}
|
||||
const mat = new THREE[matType](matProps)
|
||||
|
||||
|
||||
|
||||
|
||||
obj = new THREE.Mesh(geom, mat)
|
||||
if(desc.translate){
|
||||
wrapper = new THREE.Object3D()
|
||||
@@ -34,7 +34,7 @@ app.helpers.helpers3D = {
|
||||
obj.position.y = desc.translate[1]
|
||||
obj.position.z = desc.translate[2]
|
||||
}
|
||||
|
||||
|
||||
} else if(desc.type === 'Group') {
|
||||
obj = new THREE.Group()
|
||||
} else {
|
||||
@@ -43,8 +43,8 @@ app.helpers.helpers3D = {
|
||||
|
||||
// Apply transforms
|
||||
if(desc.position) obj.position.set(...desc.position)
|
||||
if(desc.rotation) obj.rotation.set(...desc.rotation)
|
||||
if(desc.scale) obj.scale.set(...desc.scale)
|
||||
if(desc.rotation) obj.rotation.set(...desc.rotation)
|
||||
if(desc.scale) obj.scale.set(...desc.scale)
|
||||
|
||||
// Recursively add children
|
||||
if(desc.children) {
|
||||
@@ -57,7 +57,7 @@ app.helpers.helpers3D = {
|
||||
obj.name = id
|
||||
return obj
|
||||
},
|
||||
|
||||
|
||||
cameraAutoFrame(object, camera, offset = 1.5, controls) {
|
||||
const box = new THREE.Box3().setFromObject(object)
|
||||
const size = new THREE.Vector3()
|
||||
@@ -77,6 +77,37 @@ app.helpers.helpers3D = {
|
||||
controls.target.copy(center)
|
||||
controls.update()
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
getObjectCenter(object) {
|
||||
object.updateWorldMatrix(true, true)
|
||||
const box = new THREE.Box3().setFromObject(object)
|
||||
const center = new THREE.Vector3()
|
||||
box.getCenter(center) // world coords
|
||||
return center
|
||||
},
|
||||
|
||||
makePivotAtGeomCenter(object, scene) {
|
||||
object.updateWorldMatrix(true, true)
|
||||
const box = new THREE.Box3().setFromObject(object)
|
||||
const centerW = box.getCenter(new THREE.Vector3())
|
||||
|
||||
// Create pivot at world center of the object
|
||||
const pivot = new THREE.Object3D()
|
||||
pivot.position.copy(centerW)
|
||||
pivot.matrixAutoUpdate = true
|
||||
scene.add(pivot)
|
||||
|
||||
// Compute the center in the object's local space
|
||||
const centerLocal = object.worldToLocal(centerW.clone())
|
||||
|
||||
// Shift the object so its center sits at its own origin
|
||||
object.position.sub(centerLocal)
|
||||
|
||||
// Reparent under the pivot (world pose preserved)
|
||||
pivot.add(object)
|
||||
|
||||
return pivot
|
||||
},
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user