Thanks, just get left with this error now.
Adjust the code here and get the id of the view in question, then look at the list of viewport ids from the link list, to verify the list structure contains the element.
I get the same error
import clr
clr.AddReference("RevitAPI")
from Autodesk.Revit.DB import FilteredElementCollector,BuiltInCategory,Viewport, View
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
## Convert an instance/list to a list
def tolist(obj1):
if hasattr(obj1,"__iter__"): return obj1
else: return [obj1]
def GetOwnerView(item):
if hasattr(item, "OwnerViewId"): return item.Document.GetElement(item.OwnerViewId)
else: return None
## Get an Element Parameter
def getParam(element,param):
value = []
try:
DB = element.GetParameters(param)
for i in DB:
if "Double" in str(i.StorageType):
# Metric Converstion
value.append(i.AsDouble()*304.8)
elif "Integer" in str(i.StorageType):
value.append(i.AsInteger())
elif "String" in str(i.StorageType):
value.append(i.AsString())
else:
elemId =i.AsElementId()
value.append(doc.GetElement(elemId))
except:
pass
return value
# Get All Viewports (Views on Sheets)
doc = DocumentManager.Instance.CurrentDBDocument
# Allow for link docs
linkInst = tolist(IN[1])
LviewNames = []
LviewportIds = []
Lviews = []
LviewIds = []
LviewRefs = []
# Allow for link docs
linkDocs = tolist(IN[1])
LviewNames = []
LviewportIds = []
Lviews = []
LviewIds = []
LviewRefs = []
for Ldoc in linkDocs:
Lviewports = FilteredElementCollector(Ldoc).OfCategory(BuiltInCategory.OST_Viewports).WhereElementIsNotElementType().ToElements()
# Map Viewports to View Names
for Lviewport in Lviewports:
LviewId = Lviewport.ViewId
Lv = Ldoc.GetElement(LviewId)
Lviews.append(Lv)
LviewIds.append(LviewId)
LviewNames.append(Lv.Name)
LviewportIds.append(Lviewport.Id)
# Construct Viewpoer Ref
LvpRefNum = str(getParam(Lv, "Detail Number")[0])
LvpRefSheet = str(getParam(Lv, "Sheet Number")[0])
LviewRefs.append(LvpRefNum+"-"+LvpRefSheet)
viewports = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Viewports).WhereElementIsNotElementType().ToElements()
viewNames = []
viewportIds = []
views = []
viewIds = []
viewRefs = []
# Map Viewports to View Names
for viewport in viewports:
viewId = viewport.ViewId
v = doc.GetElement(viewId)
views.append(v)
viewIds.append(viewId)
viewNames.append(v.Name)
viewportIds.append(viewport.Id)
# Construct Viewpoer Ref
vpRefNum = str(getParam(v, "Detail Number")[0])
vpRefSheet = str(getParam(v, "Sheet Number")[0])
viewRefs.append(vpRefNum+"-"+vpRefSheet)
# Input views to find which sheet they are placed on
elems = tolist(UnwrapElement(IN[0]))
eOwnerSheets = []
eOwnerViews = []
eViews = []
for e in elems:
try:
# Find view in current document
# Check if elem is a Viewport
if "Viewport" in str(e.GetType()):
# Get the owner Sheet
eOwnerSheet = GetOwnerView(e)
eOwnerSheets.append(eOwnerSheet)
# Get the associated View
vid = e.Id
vIndex = viewportIds.index(vid)
refView = views[vIndex]
eViews.append(refView)
# Get the Owner View
refViewD = str(getParam(refView, "Referencing Detail")[0])
refViewS = str(getParam(refView, "Referencing Sheet")[0])
find = refViewD+"-"+refViewS
refOwnerIndex = viewRefs.index(find)
refOwner = views[refOwnerIndex]
eOwnerViews.append(refOwner)
else:
# Get the view name
eName = e.Name
# Find the same name in the mapped names/viewports lists
eViewport = viewports[viewNames.index(eName)]
# Get the owner Sheet
eOwnerSheet = GetOwnerView(eViewport)
eOwnerSheets.append(eOwnerSheet)
# Get the associated View
vid = eViewport.Id
vIndex = viewportIds.index(vid)
refView = views[vIndex]
eViews.append(refView)
# Get the Owner View
refViewD = str(getParam(refView, "Referencing Detail")[0])
refViewS = str(getParam(refView, "Referencing Sheet")[0])
find = refViewD+"-"+refViewS
refOwnerIndex = viewRefs.index(find)
refOwner = views[refOwnerIndex]
eOwnerViews.append(refOwner)
except:
# Try to find view in link docs
# Check if elem is a Viewport
if "Viewport" in str(e.GetType()):
# Get the owner Sheet
eOwnerSheet = GetOwnerView(e)
eOwnerSheets.append(eOwnerSheet)
# Get the associated View
Lvid = e.Id
LvIndex = LviewportIds.index(Lvid)
LrefView = Lviews[LvIndex]
eViews.append(LrefView)
# Get the Owner View
LrefViewD = str(getParam(LrefView, "Referencing Detail")[0])
LrefViewS = str(getParam(LrefView, "Referencing Sheet")[0])
Lfind = LrefViewD+"-"+LrefViewS
LrefOwnerIndex = LviewRefs.index(Lfind)
LrefOwner = Lviews[LrefOwnerIndex]
eOwnerViews.append(LrefOwner)
else:
# Get the view name
eName = e.Name
# Find the same name in the mapped names/viewports lists
eViewport = Lviewports[LviewNames.index(eName)]
# Get the owner Sheet
eOwnerSheet = GetOwnerView(eViewport)
eOwnerSheets.append(eOwnerSheet)
# Get the associated View
Lvid = eViewport.Id
LvIndex = LviewportIds.index(Lvid)
"""
LrefView = Lviews[LvIndex]
eViews.append(LrefView)
# Get the Owner View
LrefViewD = str(getParam(LrefView, "Referencing Detail")[0])
LrefViewS = str(getParam(LrefView, "Referencing Sheet")[0])
Lfind = LrefViewD+"-"+LrefViewS
LrefOwnerIndex = LviewRefs.index(Lfind)
LrefOwner = Lviews[LrefOwnerIndex]
eOwnerViews.append(LrefOwner)
"""
OUT = eOwnerSheets,eOwnerViews,eViews,LviewportIds
opps I shall try be more vigilant
Think I’ve got it right this time but same error
import clr
clr.AddReference("RevitAPI")
from Autodesk.Revit.DB import FilteredElementCollector,BuiltInCategory,Viewport, View
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
## Convert an instance/list to a list
def tolist(obj1):
if hasattr(obj1,"__iter__"): return obj1
else: return [obj1]
def GetOwnerView(item):
if hasattr(item, "OwnerViewId"): return item.Document.GetElement(item.OwnerViewId)
else: return None
## Get an Element Parameter
def getParam(element,param):
value = []
try:
DB = element.GetParameters(param)
for i in DB:
if "Double" in str(i.StorageType):
# Metric Converstion
value.append(i.AsDouble()*304.8)
elif "Integer" in str(i.StorageType):
value.append(i.AsInteger())
elif "String" in str(i.StorageType):
value.append(i.AsString())
else:
elemId =i.AsElementId()
value.append(doc.GetElement(elemId))
except:
pass
return value
# Get All Viewports (Views on Sheets)
doc = DocumentManager.Instance.CurrentDBDocument
# Allow for link docs
linkInst = tolist(IN[1])
LviewNames = []
LviewportIds = []
Lviews = []
LviewIds = []
LviewRefs = []
# Allow for link docs
linkDocs = tolist(IN[1])
LviewNames = []
LviewportIds = []
Lviews = []
LviewIds = []
LviewRefs = []
for Ldoc in linkDocs:
Lviewports = FilteredElementCollector(Ldoc).OfCategory(BuiltInCategory.OST_Viewports).WhereElementIsNotElementType().ToElements()
# Map Viewports to View Names
for Lviewport in Lviewports:
LviewId = Lviewport.ViewId
Lv = Ldoc.GetElement(LviewId)
Lviews.append(Lv)
LviewIds.append(LviewId)
LviewNames.append(Lv.Name)
LviewportIds.append(Lviewport.Id)
# Construct Viewpoer Ref
LvpRefNum = str(getParam(Lv, "Detail Number")[0])
LvpRefSheet = str(getParam(Lv, "Sheet Number")[0])
LviewRefs.append(LvpRefNum+"-"+LvpRefSheet)
viewports = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Viewports).WhereElementIsNotElementType().ToElements()
viewNames = []
viewportIds = []
views = []
viewIds = []
viewRefs = []
# Map Viewports to View Names
for viewport in viewports:
viewId = viewport.ViewId
v = doc.GetElement(viewId)
views.append(v)
viewIds.append(viewId)
viewNames.append(v.Name)
viewportIds.append(viewport.Id)
# Construct Viewpoer Ref
vpRefNum = str(getParam(v, "Detail Number")[0])
vpRefSheet = str(getParam(v, "Sheet Number")[0])
viewRefs.append(vpRefNum+"-"+vpRefSheet)
# Input views to find which sheet they are placed on
elems = tolist(UnwrapElement(IN[0]))
eOwnerSheets = []
eOwnerViews = []
eViews = []
for e in elems:
try:
# Find view in current document
# Check if elem is a Viewport
if "Viewport" in str(e.GetType()):
# Get the owner Sheet
eOwnerSheet = GetOwnerView(e)
eOwnerSheets.append(eOwnerSheet)
# Get the associated View
vid = e.Id
vIndex = viewportIds.index(vid)
refView = views[vIndex]
eViews.append(refView)
# Get the Owner View
refViewD = str(getParam(refView, "Referencing Detail")[0])
refViewS = str(getParam(refView, "Referencing Sheet")[0])
find = refViewD+"-"+refViewS
refOwnerIndex = viewRefs.index(find)
refOwner = views[refOwnerIndex]
eOwnerViews.append(refOwner)
else:
# Get the view name
eName = e.Name
# Find the same name in the mapped names/viewports lists
eViewport = viewports[viewNames.index(eName)]
# Get the owner Sheet
eOwnerSheet = GetOwnerView(eViewport)
eOwnerSheets.append(eOwnerSheet)
# Get the associated View
vid = eViewport.Id
vIndex = viewportIds.index(vid)
refView = views[vIndex]
eViews.append(refView)
# Get the Owner View
refViewD = str(getParam(refView, "Referencing Detail")[0])
refViewS = str(getParam(refView, "Referencing Sheet")[0])
find = refViewD+"-"+refViewS
refOwnerIndex = viewRefs.index(find)
refOwner = views[refOwnerIndex]
eOwnerViews.append(refOwner)
except:
# Try to find view in link docs
# Check if elem is a Viewport
if "Viewport" in str(e.GetType()):
# Get the owner Sheet
eOwnerSheet = GetOwnerView(e)
eOwnerSheets.append(eOwnerSheet)
# Get the associated View
Lvid = e.Id
LvIndex = LviewportIds.index(Lvid)
LrefView = Lviews[LvIndex]
eViews.append(LrefView)
# Get the Owner View
LrefViewD = str(getParam(LrefView, "Referencing Detail")[0])
LrefViewS = str(getParam(LrefView, "Referencing Sheet")[0])
Lfind = LrefViewD+"-"+LrefViewS
LrefOwnerIndex = LviewRefs.index(Lfind)
LrefOwner = Lviews[LrefOwnerIndex]
eOwnerViews.append(LrefOwner)
else:
# Get the view name
eName = e.Name
# Find the same name in the mapped names/viewports lists
eViewport = Lviewports[LviewNames.index(eName)]
# Get the owner Sheet
eOwnerSheet = GetOwnerView(eViewport)
eOwnerSheets.append(eOwnerSheet)
# Get the associated View
Lvid = eViewport.Id
eViews.append(Lvid)
"""
LvIndex = LviewportIds.index(Lvid)
LrefView = Lviews[LvIndex]
eViews.append(LrefView)
# Get the Owner View
LrefViewD = str(getParam(LrefView, "Referencing Detail")[0])
LrefViewS = str(getParam(LrefView, "Referencing Sheet")[0])
Lfind = LrefViewD+"-"+LrefViewS
LrefOwnerIndex = LviewRefs.index(Lfind)
LrefOwner = Lviews[LrefOwnerIndex]
eOwnerViews.append(LrefOwner)
"""
OUT = eOwnerSheets,eOwnerViews,eViews,LviewportIds