Hi,
I’m looking for a method to obtain the views which are associated with an Assembly.
The way I thought of doing this was to obtain all the Assembly Types, using the AssemblyType Class and then obtain their associated views.
This gets the Assembly Types:
allassem = FilteredElementCollector(doc).OfClass(AssemblyType)
#Convert room list to elements
allassemt = allassem.ToElements()
nameslist = []
for f in allassemt:
param = f.LookupParameter("Type Name")
nameslist.append(param.AsString())
OUT = [nameslist]
But I can’t see that the AssemblyType class has any method of getting the views… Is there a better way to do this?
Thanks.
OK, worked it out myself:
The ViewPlan class has a method called ‘AssociatedAssemblyInstanceId’ which obtains a views assembly.
That was easy!
1 Like
can you elaborate on this, not verse on python, but could really use this on some assembly graphs i use.
Wuillian, this is the routine I produced, I’m unsure if it does what you want though - it renames all Assembly 3D views to match the Assembly name:
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
# Import RevitNodes
clr.AddReference("RevitNodes")
import Revit
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
clr.AddReference("RevitAPIUI")
from Autodesk.Revit.UI import *
# Import Revit elements
from Revit.Elements import *
# Import DocumentManager
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
import sys
sys.path.append('C:/Program Files (x86)/IronPython 2.7/Lib')
import random
import System
import time
starttime = time.clock()
from math import atan2, radians, cos, sin, degrees, sqrt, ceil
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application
adoc = doc.ActiveView
#Variables
# allviews = A FEC of the View Class
# allviewsel = A FEC of the View Class converted to Elements
# vgettype = States what type of view the view is - GetType
# vgettos = The views 'Title on Sheet' parameter <<< NOT USED
# axolist = A list of axonometric assembly views
# axoassocassem = A list of assemblys associated to the axolist views
# assnames = A list of assembly names
# donerename = A counter which records if a rename has happened
# faillist = A counter which records if any renames have failed
#User message
TaskDialog.Show("Rename Assembly Axonometric Views", "This routine will rename all Assembly Axonometric views names to match the Assembly name.")
#Create FEC of views within database
allviews = FilteredElementCollector(doc).OfClass(View)
#Convert room list to elements
allviewel = allviews.ToElements()
#Get list of assembly axo views
axolist = []
for f in allviewel:
#vgettos = f.LookupParameter("Title on Sheet")
if f.GetType() == View3D and f.IsAssemblyView == True:
axolist.append(f)
#Get list of assemblys related to the assembly axo views
axoassocassem = []
for f in axolist:
axoassocassem.append(f.AssociatedAssemblyInstanceId.IntegerValue)
#Get list of assembly names
assnames = []
for f in axoassocassem:
ele = ElementId(f)
elefromdb = doc.GetElement(ele)
asstype = elefromdb.LookupParameter("Type").AsElementId()
assnameele = doc.GetElement(asstype)
assnames.append(assnameele.LookupParameter("Type Name").AsString())
#Rename axo view names to match assembly name
faillist = 0
donerename = 0
TransactionManager.Instance.EnsureInTransaction(doc)
for f in range(len(axolist)):
if axolist[f].Name != assnames[f]:
donerename += 1
try:
axolist[f].Name = assnames[f]
except:
faillist += 1
TransactionManager.Instance.TransactionTaskDone()
#User message
finalmessage = "Found " + str(len(axolist)) + " Assembly axonometric views\n\n" + "Renamed " + str(donerename) + " Assembly views\n\n" + str(faillist) + " Rename failures"
TaskDialog.Show("Rename Assembly Axonometric Views", finalmessage)
OUT = [axolist, axoassocassem, assnames, donerename, faillist]
4 Likes
I was looking for just filtering the assembly Views, so that I can apply a view template. So far I filter all detail views which includes some plan, section views. Can I chop this code down to use to identify all associated assembly views?
Yes you can always play around with code - its a good way of learning how it works.
Be sure to look at the API help which will explain what each bit does (use the search).
http://www.revitapidocs.com/
Thank you so much for this! Manipulated the code a bit to add the assembly name to the end of my detail view. Many thank yous again!
I know this is a really old post, but this helped me out so much. I was able to manipulate the code to get my Sheet, Detail Views are original 3D Ortho Views converted to AutoCAD during our Revit conversion! Sooooo helpful!!