I get a weird outcome from this script. The first dependent view has strange settings that do not match the parent or other dependent views. This even happens for parameter controlled by the view template.
- Sometimes the scale differs
- Discipline changes to coordination
- Parameters for view organization like sub-discipline and view use are empty
- Detail level sometimes changes
- There is additional parameter (I think this probably indicates something important) called “Column Symbolic Offset”
Please excuse my self taught sloppy code. ![]()
# Creates view with dependents
# Import libraries
from pyrevit import DB, revit, script, forms
from Autodesk.Revit.DB import (FilteredElementCollector, Transaction, View, BuiltInCategory, ViewPlan,
ViewFamily, Level, ElementId, ViewDuplicateOption, BuiltInParameter)
# Current document
doc = __revit__.ActiveUIDocument.Document
cView = doc.ActiveView
allPhases = list(doc.Phases)
phase = allPhases[-1]
# output clicky
output = script.get_output()
###############################################################
#############Levels
levels = FilteredElementCollector(doc).OfClass(Level).ToElements()
leveldic = {}
for l in levels:
leveldic[l.Name] = l.Id
selected_level = forms.SelectFromList.show(
leveldic.viewkeys(),
title="Select a level",
width=500,
height=400)
level = leveldic.get(selected_level)
###############################################################
### view family type
vfts_all = (DB.FilteredElementCollector(doc).
OfClass(DB.ViewFamilyType).
WhereElementIsElementType().
ToElements())
# for vA in vfts_all:
# print(vA.FamilyName)
# extract view family types for floor plans
vft_data = []
vft_name = []
vftInfo = {}
for vft in vfts_all:
if vft.ViewFamily == ViewFamily.FloorPlan or vft.ViewFamily == ViewFamily.CeilingPlan:
vftInfo[vft.FamilyName] = vft.Id
vft_data.append(vft.Id)
vft_name.append(vft.FamilyName)
# print(vft_name)
# print(vftInfo)
# display a dialog to select a view family type
selected_vft = forms.SelectFromList.show(
vft_name,
title="Select a view family type",
width=500,
height=200)
vft = vftInfo.get(selected_vft)
###############################################################
############View Template
views = FilteredElementCollector(doc).OfClass(View).ToElements()
viewTemplates = []
nonTemplateViewNames = []
for v in views:
if v.IsTemplate == True:
viewTemplates.append(v)
else:
nonTemplateViewNames.append(v.Name)
viewTemplateNames = []
for vT in viewTemplates:
viewTemplateNames.append(vT.Name)
viewTemplateNames = sorted(viewTemplateNames)
selectViewTemplateName = forms.SelectFromList.show(viewTemplateNames, title="Select View Template")
selectViewTemplate = 0
for vT in viewTemplates:
if vT.Name == selectViewTemplateName:
selectViewTemplate = vT
else:
pass
###############################################################
# ###########View Name - Parent
namePrefix = forms.ask_for_unique_string(reserved_values=nonTemplateViewNames,
prompt="Provide name for parent view. \"OK\" "
"button only works when a unique name is chosen",
title="View Name")
###############################################################
# ###########View Name - Dependent
nameDependentPrefix = forms.ask_for_string(default=namePrefix,prompt="Provide name for dependent views. A suffix will "
"be added based on the scope box name.",
title="Dependent View Name")
###############################################################
# ############Scope Boxes
scopeBoxes = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_VolumeOfInterest)
scopeBoxNames = []
scopeDic = {}
for sB in scopeBoxes:
scopeBoxNames.append(sB.Name)
scopeboxNames = sorted(scopeBoxNames)
selectScopeBoxesName = forms.SelectFromList.show(scopeboxNames, title="Select Scope Boxes",multiselect=True, height=400)
selectScopeBoxes = []
for sB in scopeBoxes:
for sSBN in selectScopeBoxesName:
if sB.Name == sSBN:
selectScopeBoxes.append(sB)
###############################################################
#############Transaction
t = Transaction(doc, "pyRevit - Create view with duplicates by scope boxes")
t.Start()
#print(doc)
#print(vft)
#print(level)
view = ViewPlan.Create(doc, vft, level)
#print(view)
#print(selectViewTemplate)
view.LookupParameter("View Template").Set(selectViewTemplate.Id)
view.LookupParameter("View Name").Set(namePrefix)
for sSB in selectScopeBoxes:
view_dup = view.Duplicate(ViewDuplicateOption.AsDependent)
newView = doc.GetElement(view_dup)
newView.get_Parameter(BuiltInParameter.VIEWER_VOLUME_OF_INTEREST_CROP).Set(sSB.Id)
new_view_name = nameDependentPrefix + " - " + sSB.Name
view_name = newView.get_Parameter(BuiltInParameter.VIEW_NAME).Set(new_view_name)
#Testing
#viewtwo = ViewPlan.Create(doc, ElementId(75905), ElementId(30))
t.Commit()
forms.alert("Views created.", title="Views Created")