Recently I modify a bit of my previous script (capture using rect) to capture views with ViewNearCorners
.
However it was set up by using Active Viewports, meaning I have manually turn on Named Views one by one in order to capture those.
I wonder if there’s a way to do the capture without activating them?
import Rhino
import System.Drawing
import Rhino.Geometry as rg
import scriptcontext as sc
import rhinoscriptsyntax as rs
import Rhino.Display as rd
import System
for i in view:
RhinoDocument = Rhino.RhinoDoc.ActiveDoc
selectview = RhinoDocument.Views.Find(i, False)
viewcorner = rs.ViewNearCorners(i)
clientarea = selectview.ClientRectangle
pt0 = viewcorner[0]
pt1 = viewcorner[1]
pt2 = viewcorner[2]
pt3 = viewcorner[3]
width = clientarea.Width
height = clientarea.Height
fector = float(fector or '1')
size = 'w=' + str(int(width*fector)) + ', ' + 'h=' + str(int(height*fector))
def Capture():
RhinoDocument = Rhino.RhinoDoc.ActiveDoc
selectview = RhinoDocument.Views.Find(i, False)
size = System.Drawing.Size(int(width*fector), int(height*fector))
settings = rd.ViewCaptureSettings(selectview, size, 300) #view, size, dpi
settings.SetWindowRect(pt0, pt2)
settings.RasterMode = True
settings.DrawGrid = False
settings.DrawAxis = False
settings.DrawWallpaper = False
bitmap = rd.ViewCapture.CaptureToBitmap(settings)
bitmap.Save(path+str(filename)+".png")
if save:
for i in view:
RhinoDocument = Rhino.RhinoDoc.ActiveDoc
selectview = RhinoDocument.Views.Find(i, False)
rs.ViewDisplayMode(i, mode)
rd.RhinoView.Redraw(selectview)
Capture()
print(path+str(filename)+".png")