Test Intersection Points

The problem: raycaster do not intersect when THREE.Points has only 1 vertex or has vertexs arranged in line. In the line 90 you can find details about the bug

HTML

<script src="http://rawgit.com/mrdoob/three.js/dev/build/three.js"></script>

		<!-- Definition of shader material for the default particles -->
		<script type="x-shader/x-vertex" id="default-vertexshader">
		   attribute float alpha;
		   varying vec3 vColor;
			 varying vec2 vUv;
			 uniform float size;
			 uniform float scale;
			 //Maps textures
			 void main() {
					vUv = uv;
		      vColor = color;
		      vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );
					float sizeAttenuation = size * ( scale / length( mvPosition.xyz ) );
		      gl_PointSize = size * alpha * sizeAttenuation ; // alpha to vary point size
		      gl_Position = projectionMatrix * mvPosition;
				}
		</script>
		<script type="x-shader/x-fragment" id="default-fragmentshader">
		    varying vec3 vColor;
		    void main() {
		        gl_FragColor = vec4( vColor, 1.0 );
		    }
		</script>

CSS

body {
      color: #ffffff;
      font-family: Monospace;
      font-size: 13px;
      text-align: center;
      font-weight: bold;
      background-color: #000000;
      margin: 0px;
      overflow: hidden;
    }

JavaScript

var renderer, scene, camera, raycaster, pointSystemObj, mouse;
var overedColor = new THREE.Color(1,1,0);
init();
animate();

function init() {

  // renderer
  renderer = new THREE.WebGLRenderer();
  renderer.setSize(window.innerWidth, window.innerHeight);
  document.body.appendChild(renderer.domElement);

  // scene
  scene = new THREE.Scene();

  //camera
  camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 1000);
  camera.position.z = 400;

  // Create a point system
  //pointSystemObj = new PointSystem();
  var xPos = [0];// [-1,0,1];
  var yPos = [.5];//[0,0,0];
  var zPos = [0]; //[0,0,0];
  pointSystemObj = new PointSystem(200,xPos,yPos,zPos);
  scene.add( pointSystemObj.getSystem() );
  
  raycaster = new THREE.Raycaster();
  raycaster.params.Points.threshold = 10;
  mouse = new THREE.Vector2();
}

function animate() {

  requestAnimationFrame(animate);

  render();

}

function render() {
  pointSystemObj.raycastCalculation();
  renderer.render(scene, camera);

}

function PointSystem(sSize, listX, listY, listZ, col) {
  // System parameters
  
  var spaceSide = sSize || 200;
  var lx = listX || [-1, 1, 0, 0, 0, 0];
  var ly = listY || [0, 0, 1, -1, 0, 0];
  var lz = listZ || [0, 0, 0, 0, 1, -1];
  var pointCount = lx.length;
  this.color4all = col || new THREE.Color(1, 0, .8);
	var halfSide = spaceSide / 2;
  this.lastPointOvered = -1;
  
  // Buffer geometry attribues
  var geometry = new THREE.BufferGeometry();
  
  var positions = new Float32Array(pointCount * 3);
  var colors = new Float32Array(pointCount * 3);
  var alphas = new Float32Array(pointCount);

  for (var i = 0; i < pointCount; i++) {

    //  set position
    var x = lx[i] * halfSide;
    var y = ly[i] * halfSide;
    var z = lz[i] * halfSide;

    positions[i * 3 + 0] = x; //x;
    positions[i * 3 + 1] = y; // y;
    positions[i * 3 + 2] = z; //z;

    // colors
    colors[i * 3 + 0] = this.color4all.r;
    colors[i * 3 + 1] = this.color4all.g;
   ...