OBB

option 2

HTML

<script src="//cdnjs.cloudflare.com/ajax/libs/three.js/r70/three.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0-alpha1/jquery.min.js">


</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/numeric/1.2.6/numeric.min.js"></script>

CSS

#info {
  position: absolute;
  top: 0px;
  width: 100%;
  padding: 10px;
  text-align: center;
  color: #ffff00
}

JavaScript

var camera, scene, renderer;
var arm, arm2;
var angle = 0.5;
var endEffector;
var obbLine;

init();
animate();

function init() {
scene = new THREE.Scene();

let axes = new THREE.AxisHelper( 20 );
scene.add( axes );


camera = new THREE.PerspectiveCamera( 40, 830 / 430, 1, 1000 );
camera.position.set(30, 30, 30);
camera.lookAt(new THREE.Vector3(0,0,0));

//  camera = new THREE.OrthographicCamera(-50, 50, 50, -50, -10, 10);
//  camera.position.z = 10;
  scene.add(camera);
  ///////////////////////////////////////////////////////////

  arm = new THREE.Object3D();
  scene.add(arm);

  var mesh = new THREE.Mesh(new THREE.PlaneGeometry(20, 5),
    new THREE.MeshBasicMaterial());
  mesh.position.set(10, 0, 0);
  arm.add(mesh);

  arm2 = arm.clone();
  arm.add(arm2);

/* 	var gridXZ = new THREE.GridHelper(100, 10);
	  gridXZ.setColors(new THREE.Color(0xff0000), new THREE.Color(0xffffff));
	  scene.add(gridXZ);
	  gridXZ.rotation.x = Math.PI / 2;
	 */
  renderer = new THREE.WebGLRenderer();
  renderer.setSize(window.innerWidth, window.innerHeight);
  renderer.setClearColor(0x888888);

  document.body.appendChild(renderer.domElement);

  computeArmOBB();
  scene.add(obbLine);
}

function computeArmOBB() {
  // prepare data for OBB
  var points = [];

  if (obbLine) scene.remove(obbLine);

  points.push(arm2.children[0].localToWorld(new THREE.Vector3(10,2.5,0)));
  points.push(arm2.children[0].localToWorld(new THREE.Vector3(10,-2.5,0)));
  points.push(arm2.children[0].localToWorld(new THREE.Vector3(-10,-2.5,0)));
  points.push(arm2.children[0].localToWorld(new THREE.Vector3(-10,2.5,0)));

	points.push(arm.children[0].localToWorld(new THREE.Vector3(10,2.5,0)));
  points.push(arm.children[0].localToWorld(new THREE.Vector3(10,-2.5,0)));
  points.push(arm.children[0].localToWorld(new THREE.Vector3(-10,-2.5,0)));
  points.push(arm.children[0].localToWorld(new THREE.Vector3(-10,2.5,0)));

  var obb = findOBB(points);
  console.log(obb);
  obbLine = drawOBB(obb);
}

function...