Copying Views and details

Steam nodes are getting quite long in the tooth
Here is some python to copy filtered views from a single link document
Requires IronPython due to sub-classing to stop duplicate type warnings

import clr

clr.AddReference("RevitAPI")
from Autodesk.Revit.DB import *

clr.AddReference("RevitServices")
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

from System.Collections.Generic import List


class SuppressDuplicateTypeNames(IDuplicateTypeNamesHandler):
    def OnDuplicateTypeNamesFound(self, args):
        return DuplicateTypeAction.UseDestinationTypes


# ** Use IronPython **

doc = DocumentManager.Instance.CurrentDBDocument

link_doc = IN[0]
name_contains = IN[1]
copy_views = IN[2]

# Collect views
views = (
    FilteredElementCollector(link_doc)
    .OfCategory(BuiltInCategory.OST_Views)
    .ToElements()
)

# Filter views
views = list(filter(lambda v: name_contains in v.Name, views))
view_ids = List[ElementId](map(lambda e: e.Id, views))

# Copy views
if copy_views:
    options = CopyPasteOptions()
    options.SetDuplicateTypeNamesHandler(SuppressDuplicateTypeNames())

    TransactionManager.Instance.EnsureInTransaction(doc)

    views = ElementTransformUtils.CopyElements(link_doc, view_ids, doc, None, options)

    TransactionManager.Instance.TransactionTaskDone()

    OUT = [doc.GetElement(vid) for vid in views], views

else:
    OUT = views, view_ids
2 Likes