I have a short Python script that creates a cavity part from Boolean subtraction of 2 slabs. In Rhino 5 on a 4K display at the full screen size this takes less than a second but in the latest Rhino 6 WIP it requires over 4 sec. If the Rhino 6 window is shrunk to about 0.3 in size (both in X and Y), then the timing is similar. On a 4K screen Rhino 5 uses a 1536 x 864 resolution (the 4K display still runs at its native 3840 x 2160 resolution) which means there are 0.4X as many addressable pixels in X and Y compared to Rhino 6. Thus shrinking the Rhino 6 window to 0.3 of its full screen size makes it look more like Rhino 5 in terms of the number of pixels that have to be drawn. So supporting the 4K display appears to be slowing down Rhino 6 by over 4X compared to V5. Below is the Python script used to generate the timing data.
import rhinoscriptsyntax as rs
import Rhino.Geometry
import time
from time import time
P3d = Rhino.Geometry.Point3d
printTimes = True
def round_Rectangle(t, w, l, z, r):
if printTimes: startime = time()
C = r*(1 - 1/1.41421356)
l1 = rs.AddLine(P3d(t+r,t,z), P3d(t+w-r,t,z)) # Bottom line
if printTimes: addline1time = time(); print ' AddLine 1 time = {:.3f}'.format(addline1time - startime)
l2 = rs.AddLine(P3d(t+w,t+r,z), P3d(t+w,t+l-r,z)) # right line
if printTimes: addline2time = time(); print ' AddLine 2 time = {:.3f}'.format(addline2time - addline1time)
l3 = rs.AddLine(P3d(t+w-r,t+l,z), P3d(t+r,t+l,z)) # Top line
if printTimes: addline3time = time(); print ' AddLine 3 time = {:.3f}'.format(addline3time - addline2time)
l4 = rs.AddLine(P3d(t,t+l-r,z), P3d(t,t+r,z)) # Left line
if printTimes: addline4time = time(); print ' AddLine 4 time = {:.3f}'.format(addline4time - addline3time)
if r > 0.:
a1 = rs.AddArc3Pt(P3d(t,t+r,z), P3d(t+r,t,z), P3d(t+C,t+C,z)) # Bottom Left corner arc
if printTimes: addarc1time = time(); print ' AddArc 1 time = {:.3f}'.format(addarc1time - addline4time)
a2 = rs.AddArc3Pt(P3d(t+w-r,t,z), P3d(t+w,t+r,z), P3d(t+w-C,t+C,z)) # Bottom Right corner arc
if printTimes: addarc2time = time(); print ' AddArc 2 time = {:.3f}'.format(addarc2time - addarc1time)
a3 = rs.AddArc3Pt(P3d(t+w,t+l-r,z), P3d(t+w-r,t+l,z), P3d(t+w-C,t+l-C,z)) # Top Right corner arc
if printTimes: addarc3time = time(); print ' AddArc 3 time = {:.3f}'.format(addarc3time - addarc2time)
a4 = rs.AddArc3Pt(P3d(t+r,t+l,z), P3d(t,t+l-r,z), P3d(t+C,t+l-C,z)) # Top Left corner arc
if printTimes: addarc4time = time(); print ' AddArc 4 time = {:.3f}'.format(addarc4time - addarc3time)
# Put the 8 curves in one list: 4 lines and 4 arcs
curves = [l1,l2,l3,l4,a1,a2,a3,a4]
else:
# Put the 4 lines in one list.
curves = [l1,l2,l3,l4]
# Join the curves and delete the 8 input pieces
crvs = rs.JoinCurves(curves, True, None) ; rs.DeleteObjects(curves)
if printTimes: joincurvestime = time(); print ' JoinCurves time = {:.3f}'.format(joincurvestime - addarc4time)
if printTimes: print ' round_Rectangle time = {:.3f}'.format(time() - startime)
return crvs
def rounded_Slab(w, l, h, t, r):
if printTimes: startime = time()
crvs = round_Rectangle(t, w, l, t, r) # Arguments: Offset, w, l, z, Corner_Radius
if printTimes: roundrectangletime = time(); print ' round_Rectangle time = {:.3f}'.format(roundrectangletime - startime)
srfs = rs.AddPlanarSrf(crvs)
if printTimes: addplanarsrftime = time(); print ' AddPlanarSrf time = {:.3f}'.format(addplanarsrftime - roundrectangletime)
curve = rs.AddLine((t,t,t), (t,t,h)) # Create surface and curve for it to follow
if printTimes: addlinetime = time(); print ' AddLine time = {:.3f}'.format(addlinetime - addplanarsrftime)
slab = rs.ExtrudeSurface(srfs[0], curve)
if printTimes: extrudesurfacetime = time(); print ' ExtrudeSurface time = {:.3f}'.format(extrudesurfacetime - addlinetime)
rs.DeleteObjects(crvs) ; rs.DeleteObject(srfs) ; rs.DeleteObject(curve)
if printTimes: print 'rounded_Slab time = {:.3f}'.format(time() - startime)
return slab
start_time = time()
w,l,h,ro,ri,t = 100,150,25,2,8,5
rs.ZoomBoundingBox([P3d(0,0,0), P3d(w,0,0), P3d(w,l,0), P3d(0,l,0), P3d(0,0,h), P3d(w,0,0), P3d(w,l,h), P3d(0,l,h)], None, True)
rs.Command('NoEcho _Grid _ApplyTo=_AllViewport _Extents {} _EnterEnd'.format(max(w, l)*1.5))
for view in rs.ViewNames(): rs.ViewDisplayMode(view, 'Shaded')
base = rounded_Slab(w, l, h, 0, ro)
interior = rounded_Slab(w-2*t, l-2*t, h, t, ri) # interior is like base but shrunk by the thickness of the wall t.
bases = rs.BooleanDifference(base, interior)
print 'Total time = {:.3f}'.format(time() - start_time)