public static Intersection GetPrimitiveOnRay(Ray ray, Vector3 relViewPos, IEnumerable<IEditorPrimitive> primitives) { var items = RayPrimitivesIntersect(ray, relViewPos, primitives); Intersection[] isect = new Intersection[(int)PrimitiveType.MaxTypes]; foreach (var i in items) { //float dist = i.point.DistanceTo(camera.Position); float dist = ray.DistanceToPoint(i.point); float f = i.primitive.GetSelectFactor(ray.start, ray.dir, i.point); int sp = (int)i.primitive.PrimitiveType; if (isect [sp].primitive == null || f < i.primitive.GetSelectFactor (ray.start, ray.dir, isect[sp].point)) isect[sp] = i; } return isect.FirstOrDefault(i => i.primitive != null); }