(PACKAGE DEPRECATED)
Parent Topic : Quasar Package Guide
Quasar Package Guide – PART – C
ElementActiveViewByCategory
collect all elements from an active view of a given category.

# dynamo version - 1.3.4
import clr,System
clr.AddReference("RevitAPI")
clr.AddReference("RevitServices")
from Autodesk.Revit.DB import *
from RevitServices.Persistence import DocumentManager
# document
doc = DocumentManager.Instance.CurrentDBDocument
# category input
category = UnwrapElement(IN[0])
# all BuiltInCategory object
builtInCategories = System.Enum.GetValues(BuiltInCategory)
# check matching id to collect BIC object
for bic in builtInCategories:
# if match
if ElementId(bic) == category.Id:
catObj = bic
break
# collect elements
elements = FilteredElementCollector(doc, doc.ActiveView.Id).OfCategory(catObj).ToElements()
# output
OUT = elements
RoomTagToRoom
Relocate Room’s Tag to the location of the room.

# dynamo version - 1.3.4
import clr
#clr.AddReference('RevitAPI')
clr.AddReference('RevitServices')
#from Autodesk.Revit.DB import *
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
elems = IN[0];
if not isinstance(elems,list):
elems = UnwrapElement([elem])
else:
elems = UnwrapElement(elems)
#room_tags = FilteredElementCollector(doc).OfClass(SpatialElementTag).ToElements()
TransactionManager.Instance.EnsureInTransaction(doc)
for i in elems:
room_loc = i.Room.Location.Point
new_loc = room_loc - i.Location.Point
i.Location.Move(new_loc)
TransactionManager.Instance.TransactionTaskDone()
OUT = elems
RoomCollector
Check/Collect the room by its status; Place , Unplaced, NotEnclosed & Redundant.

# dynamo version - 1.3.4
import clr
clr.AddReference("RevitAPI")
clr.AddReference("RevitServices")
# import all classes from Revit DB
from Autodesk.Revit.DB import *
# import document manager
from RevitServices.Persistence import DocumentManager
# import transaction manager
from RevitServices.Transactions import TransactionManager
# instantiate current document
doc = DocumentManager.Instance.CurrentDBDocument
# if provided input[0]
if IN[0]:
rooms = UnwrapElement(IN[0])
# if no input, collect all rooms
else:
# collect all rooms
rooms = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Rooms).ToElements()
# room status list for output
placed,notplaced,notenclosed,redundant = [],[],[],[]
# loop rooms
for r in rooms:
# get room boundary need one argument(opts)
s = r.GetBoundarySegments(SpatialElementBoundaryOptions())
# get location of room
l = r.Location
# if location is none
if l == None:
# append to not placed
notplaced.append(r)
# elif no boundary segments
elif len(s)<1:
# append to not enclosed
notenclosed.append(r)
# elif area zero
elif r.Area == 0:
# append to redundant
redundant.append(r)
# passed all conditions
else:
# append to placed
placed.append(r)
OUT = placed,notplaced,notenclosed,redundant
DuplicateSheetWithViews
Duplicate the given sheet(s) and its associate views by sheet name(s), sheet number(s) & a titleblock.

import clr
clr.AddReference('RevitAPI')
clr.AddReference("RevitServices")
clr.AddReference("RevitNodes")
from Autodesk.Revit.DB import *
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
# document
doc = DocumentManager.Instance.CurrentDBDocument
# unwrap function
def lst(l):
if isinstance(l, list):
return l
else:
return [l]
# sheets
sheets = UnwrapElement(lst(IN[0]))
# new sheet names
names = lst(IN[1])
# new sheet numbers
numbers = lst(IN[2])
# titleblocks
titleblock = UnwrapElement(IN[3])
# new sheets list
new_sheets = []
# output list
out = []
# transaction start
TransactionManager.Instance.EnsureInTransaction(doc)
# name, number iteration
for (name, number) in zip(names,numbers):
# create new sheet
newSheet = ViewSheet.Create(doc, titleblock.Id)
# set sheet number
newSheet.SheetNumber = number
# set sheet name
newSheet.Name = name
# append to new sheets list
new_sheets.append(newSheet)
# sheet , new sheet iteration
for sheet,nSheet in zip(sheets,new_sheets):
# view list
views = []
# get view ports
vPorts = sheet.GetAllViewports()
# iterate view ports
for ele in vPorts:
# get view port
ele = doc.GetElement(ele)
# duplicate option
vOpt = ViewDuplicateOption.WithDetailing
# get viewport location
viewLoc = ele.GetBoxCenter()
# get type Id
vptype = ele.GetTypeId()
# get view
view = doc.GetElement(ele.ViewId)
# check view type
if not view.ViewType == ViewType.Legend or view.ViewType==ViewType.Schedule:
# view duplicate
v = view.Duplicate(vOpt)
# get view
dup_view = doc.GetElement(v)
try:
# set view name
dup_view.Name = ele.LookupParameter("View Name").AsString().ToString()
except:
pass
else:
# get view id
v = view.Id
# create new view port
newPort = Viewport.Create(doc,nSheet.Id, v, viewLoc)
# append to views list
views.append(newPort)
# change viewport type
newPort.ChangeTypeId(vptype)
# append to output
out.append(views)
# transaction end
TransactionManager.Instance.TransactionTaskDone()
# output result
OUT = out
ViewPortAlignment
Views arrange and align on sheets based on the given template sheet view ports position and location.

# dynamo version - 1.3.0
import clr
clr.AddReference("RevitAPI")
clr.AddReference("RevitNodes")
clr.AddReference("RevitServices")
from Autodesk.Revit.DB import *
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
template = UnwrapElement(IN[0]);
sheets = IN[1];
result = [];
if not isinstance(sheets,list):
sheets = UnwrapElement([sheets]);
else:
sheets = UnwrapElement(sheets);
TransactionManager.Instance.EnsureInTransaction(doc);
sub =[]
for s in sheets:
#collect all viewports from template sheet
temp_ports = FilteredElementCollector(doc).OwnedByView(template.Id);
#collect all viewports from current sheet
view_ports = FilteredElementCollector(doc).OwnedByView(s.Id);
#template sheet schedule views
temp_schedules = [i for i in temp_ports if i.Category != None and i.Category.Name == "Schedule Graphics" and i.IsTitleblockRevisionSchedule == False];
#template sheet viewports
temp_views = [i for i in temp_ports if i.Category != None and i.Category.Name == "Viewports"];
#sheet schedule views
s_schedules = [i for i in view_ports if i.Category != None and i.Category.Name == "Schedule Graphics" and i.IsTitleblockRevisionSchedule == False];
#sheet viewports
s_views = [i for i in view_ports if i.Category != None and i.Category.Name == "Viewports"];
#get/set location
for ts,ss in zip(temp_schedules,s_schedules):
ss.Point = ts.Point;
for tv,vv in zip(temp_views,s_views):
temploc = tv.GetBoxCenter();
vv.SetBoxCenter(temploc);
sub.append([s_schedules,s_views]);
TransactionManager.Instance.TransactionTaskDone();
OUT = sub;