private static void NegativeNearClippingHelper(double near_dist, double far_dist, ViewportInfo vp) { double n = near_dist; double f = far_dist; double min_near_dist = 0.000100; if ( double.IsNaN(min_near_dist) || min_near_dist < 1.0e-6 ) min_near_dist = 1.0e-6; if ( vp.IsParallelProjection && n < min_near_dist ) { // move camera back in ortho projection so everything shows double d = 1.00001*min_near_dist - n; if ( d < 0.005 ) d = 0.005; n += d; f += d; if ( double.IsNaN(d) || d <= 0.0 || double.IsNaN(n) || double.IsNaN(f) || n < min_near_dist || f <= n ) { // Just give up but ... refuse to accept garbage n = 0.005; f = 1000.0; } else { Rhino.Geometry.Point3d new_loc = vp.CameraLocation + d*vp.CameraZ; vp.SetCameraLocation( new_loc ); } near_dist = n; far_dist = f; } }