Skip to content
This repository has been archived by the owner on Aug 21, 2019. It is now read-only.

Commit

Permalink
automatically center model in viewer - cc #8
Browse files Browse the repository at this point in the history
  • Loading branch information
afeld committed Sep 17, 2014
1 parent dd9b5d0 commit c54ca92
Showing 1 changed file with 32 additions and 4 deletions.
36 changes: 32 additions & 4 deletions js/viewer/model.js
@@ -1,16 +1,44 @@
require('../vendor/STLLoader');

// https://github.com/mrdoob/three.js/issues/447#issuecomment-55111928
var getCentroid = function(boundingBox) {
var centroid = boundingBox.min.clone();
centroid.add(boundingBox.max);
centroid.divideScalar(2);

return centroid;
};

var getBoxSize = function(boundingBox) {
var sizeVector = boundingBox.max.clone();
sizeVector.sub(boundingBox.min);
return sizeVector.length();
};

var placeInCenter = function(mesh) {
mesh.geometry.computeBoundingBox();

var offset = new THREE.Vector3(0, -1, -1);
var centroid = getCentroid(mesh.geometry.boundingBox);
offset.add(centroid);
mesh.position.copy(offset);

var boxSize = getBoxSize(mesh.geometry.boundingBox);
var sizeScalar = 150 / boxSize;
mesh.scale.set( sizeScalar, sizeScalar, sizeScalar );

mesh.rotation.set( - Math.PI / 2, 0, 0 );
};


var material = new THREE.MeshPhongMaterial( { ambient: 0x555555, color: 0xAAAAAA, specular: 0x111111, shininess: 200 } );

var load = function(callback) {
var loader = new THREE.STLLoader();
loader.addEventListener('load', function(event) {
var geometry = event.content;
var mesh = new THREE.Mesh(geometry, material);

mesh.position.set( 0, - 0.37, - 0.6 );
mesh.rotation.set( - Math.PI / 2, 0, 0 );
mesh.scale.set( 2, 2, 2 );
placeInCenter(mesh);

mesh.castShadow = true;
mesh.receiveShadow = true;
Expand Down

0 comments on commit c54ca92

Please sign in to comment.