updating mesh visuals
add document history
This commit is contained in:
parent
a17128ee87
commit
913977ec64
18 changed files with 1050 additions and 274 deletions
|
|
@ -235,15 +235,33 @@ class Orbit extends EventDispatcher {
|
|||
this.setPosition = function(set) {
|
||||
thetaSet = firstValue([set.left, set.theta, thetaSet]);
|
||||
phiSet = firstValue([set.up, set.phi, phiSet]);
|
||||
if (set.panX !== undefined) this.target.x = set.panX;
|
||||
if (set.panY !== undefined) this.target.y = set.panY;
|
||||
if (set.panZ !== undefined) this.target.z = set.panZ;
|
||||
let target = this.target;
|
||||
let position = this.object.position;
|
||||
if (set.posX !== undefined) position.x = set.posX;
|
||||
if (set.posY !== undefined) position.y = set.posY;
|
||||
if (set.posZ !== undefined) position.z = set.posZ;
|
||||
if (set.panX !== undefined) target.x = set.panX;
|
||||
if (set.panY !== undefined) target.y = set.panY;
|
||||
if (set.panZ !== undefined) target.z = set.panZ;
|
||||
if (set.scale !== undefined) scale = set.scale;
|
||||
else scale = 1;
|
||||
this.update();
|
||||
};
|
||||
|
||||
this.getPosition = function(scaled) {
|
||||
this.getPosition = function({ scaled } = { scaled: false }) {
|
||||
let t = this.target,
|
||||
pos = { left:theta, up:phi, panX:t.x, panY:t.y, panZ:t.z, scale:scaled ? scaleSave : 1 };
|
||||
p = this.object.position,
|
||||
pos = {
|
||||
left: theta,
|
||||
up: phi,
|
||||
panX: t.x,
|
||||
panY: t.y,
|
||||
panZ: t.z,
|
||||
posX: p.x,
|
||||
posY: p.y,
|
||||
posZ: p.z,
|
||||
scale: scaled ? scaleSave : undefined
|
||||
};
|
||||
return pos;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1560,26 +1560,49 @@ let Space = {
|
|||
front: (then) => { runPreset(0, PI2, then) },
|
||||
right: (then) => { runPreset(PI2, PI2, then) },
|
||||
left: (then) => { runPreset(-PI2, PI2, then) },
|
||||
reset: () => { viewControl.reset(); requestRefresh() },
|
||||
load: (cam) => { viewControl.setPosition(cam); requestRefresh() },
|
||||
save: () => { return viewControl.getPosition(true) },
|
||||
panTo: (x,y,z,l,u,t,upVec) => { tweenCamPan(x,y,z,l,u,t,upVec) },
|
||||
setZoom: (r,v) => { viewControl.setZoom(r,v) },
|
||||
fit: (then, opts = {}) => {
|
||||
reset: () => {
|
||||
viewControl.reset();
|
||||
requestRefresh()
|
||||
},
|
||||
load: (cam) => {
|
||||
viewControl.setPosition(cam);
|
||||
requestRefresh();
|
||||
},
|
||||
save: () => {
|
||||
return viewControl.getPosition(true);
|
||||
},
|
||||
panTo: (x,y,z,l,u,t,upVec) => {
|
||||
tweenCamPan(x,y,z,l,u,t,upVec);
|
||||
},
|
||||
setZoom: (r,v) => {
|
||||
viewControl.setZoom(r,v);
|
||||
},
|
||||
fit: (then, opts = {}) => {
|
||||
// Calculate bounding box of all objects in the workspace
|
||||
const box = new THREE.Box3();
|
||||
let hasObjects = false;
|
||||
const visibleOnly = opts.visibleOnly !== undefined ? !!opts.visibleOnly : fitVisibleOnly;
|
||||
const targetObjects = Array.isArray(opts.objects) ? opts.objects.filter(Boolean) : null;
|
||||
|
||||
// Recursively expand box for all visible objects with geometry
|
||||
WORLD.traverse(obj => {
|
||||
if (!obj.geometry) return;
|
||||
if (visibleOnly && !isEffectivelyVisible(obj)) return;
|
||||
if (obj.visible) {
|
||||
if (targetObjects && targetObjects.length) {
|
||||
// Fit only the supplied objects (selection-driven fit in app code)
|
||||
for (const obj of targetObjects) {
|
||||
if (!obj) continue;
|
||||
if (visibleOnly && !isEffectivelyVisible(obj)) continue;
|
||||
box.expandByObject(obj);
|
||||
hasObjects = true;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// Recursively expand box for all visible objects with geometry
|
||||
WORLD.traverse(obj => {
|
||||
if (!obj.geometry) return;
|
||||
if (visibleOnly && !isEffectivelyVisible(obj)) return;
|
||||
if (obj.visible) {
|
||||
box.expandByObject(obj);
|
||||
hasObjects = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// If no objects, fall back to platform bounds
|
||||
if (!hasObjects) {
|
||||
|
|
@ -1690,7 +1713,7 @@ let Space = {
|
|||
const newPanX = center.x;
|
||||
const newPanY = center.y;
|
||||
const newPanZ = center.z;
|
||||
const currentScaleSave = viewControl.getPosition(true).scale || 1;
|
||||
const currentScaleSave = viewControl.getPosition({ scaled: true }).scale || 1;
|
||||
const currentDistToCenter = camera.position.distanceTo(center);
|
||||
|
||||
const fitPos = {
|
||||
|
|
|
|||
Loading…
Reference in a new issue