Get Objects by Layout (PageView)

is there an easy way with RhinoCommon to get all objects which are on a certain layout page?
Thanks, Jess

1 Like

Hi Jess,
I’m thinking you need to look in the ObjectAttributes class for each object - there are for example the Space and ViewportId properties which might return a specific ID of a detail viewport to match… dunno, haven’t tried, myself… :wink:



Hi Mitch,

great, thanks! I knew about the Space attribute but I was missing the addition with the ViewportID.
This seems to work:

"""Returns identifiers of objects on a PageView by ID
  id: guid of the PageView
  include_lights (bool, optional): include light objects
  list(guid, ...): identifiers for objects on PageViewId.

import rhinoscriptsyntax as rs
import scriptcontext as sc
import Rhino

def ObjectsByPageView_id(id, include_lights=False, include_references=False):
    settings = Rhino.DocObjects.ObjectEnumeratorSettings()
    settings.HiddenObjects = True
    settings.DeletedObjects = False
    settings.IncludeGrips = False
    settings.IncludePhantoms = True
    settings.IncludeLights = include_lights
    settings.ReferenceObjects = include_references
    objects = sc.doc.Objects.GetObjectList(settings)
    ids = []
    for obj in objects:
        attr = objRef.Attributes
        if attr.ViewportId == id:
    if ids:
        return ids

if __name__=="__main__":
    page_views = sc.doc.Views.GetPageViews()
    if page_views:
        page_view_ids = []
        for page_view in page_views:
        page_view_id = rs.ListBox(page_view_ids,"Select Objects on Layout_ID","Objects by Layout")
        if page_view_id:
            objs = ObjectsByPageView_id(rs.coerceguid(page_view_id))
            print objs