anchor.diff:      let viewTrafo (c : CameraView) =
           c.ViewTrafo
   
  -    let location (c : CameraView) = c.Location
  -    let forward  (c : CameraView) = c.Forward
  -    let right    (c : CameraView) = c.Right
  -    let up       (c : CameraView) = c.Up
  -    let backward (c : CameraView) = c.Backward
  -    let left     (c : CameraView) = c.Left
  -    let down     (c : CameraView) = c.Down
  +
  +    let tryGetCenterOn (p : Plane3d) (c : CameraView) =
  +        let r = Ray3d(c.Location, c.Forward)
  +
  +        let mutable t = Double.PositiveInfinity
  +        if r.Intersects(p, &t) && t >= 0.0 then
  +            Some (r.GetPointOnRay t)
  +        else
  +            None
  +
  +
  +
  +    let inline location (c : CameraView) = c.Location
  +    let inline forward  (c : CameraView) = c.Forward
  +    let inline right    (c : CameraView) = c.Right
  +    let inline up       (c : CameraView) = c.Up
  +    let inline backward (c : CameraView) = c.Backward
  +    let inline left     (c : CameraView) = c.Left
  +    let inline down     (c : CameraView) = c.Down
   
   
   type Frustum = { left   : float
  
positive.code:                 )
          )
  
      let horizontalFieldOfViewInDegrees { left = l; right = r; near = near } = 
          let l,r = atan2 l near, atan2 r near
          Conversion.DegreesFromRadians(-l + r)
  
      let near   (f : Frustum) = f.near
      let far    (f : Frustum) = f.far
      let left   (f : Frustum) = f.left
      let right  (f : Frustum) = f.right
      let bottom (f : Frustum) = f.bottom
      let top    (f : Frustum) = f.top
  
      let aspect { left = l; right = r; top = t; bottom = b } = (r - l) / (t - b)
      let withAspect (newAspect : float) ( { left = l; right = r; top = t; bottom = b } as f )  = 
          let factor = 1.0 - (newAspect / aspect f)
          { f with right = factor * l + r; left  = factor * r + l }
  
      let unproject { near = n } (xyOnPlane : V2d) = Ray3d(V3d.Zero, V3d(xyOnPlane, -n))
          
      
negative.code:         let d = tan (0.5 * Conversion.RadiansFromDegrees horizontalFieldOfViewInDegrees) * near
          { left = -d; right = +d; bottom = -d / aspect; top = +d / aspect; near = near; far = far}
  
      let projTrafo { left = l; right = r; top = t; bottom = b; near = n; far = f} : Trafo3d = 
          Trafo3d(
              M44d(
                  (2.0 * n) / (r - l),                     0.0,     (r + l) / (r - l),                     0.0,
  