When one would like to programmatically tag rooms in linked files it is can be confusing as the element ID’s that get generated in the container file. This is a short number. However, there is also a Unique Global Identifier for the element. This is a long number. Either can be used to identify the element.
It is quite possible that an element in one file has the same ID as a different element in another file. When linked file elements need to be tagged, their parent ID is not enough, and one must get the child ID (it is not the same Id as the parent file).
It is simple to obtain this Id. One needs the Linked Document Id and the Room Id within the container as input.
linkElementId = LinkElementId(linkDocId, ElementId)
In the script below the existing floor plans are inspected end linked room Id’s are extracted from them.
Whatever linked file elements you need to access, this would be the method to follow.
If you need assistance with your automation in Revit models using Dynamo, Micrographics can assist you with training or consultation. Consider that over some projects, potentially hundreds of man hours can be saved during production, which translated into hours your human capital can spend more productively. Teach your workforce new skills and let them enter the 4th industrial revolution. The rest of the world is doing exactly that, and this is what your company will be competing against, if you enter onto the international stage.
#2019
#paul@mgfx.co.za, mgfx.co.za
import clr
import sys
clr.AddReference(“ProtoGeometry”)
from Autodesk.DesignScript.Geometry import *
import math
sys.path.append(r’C:\Program Files (x86)\IronPython 2.7\Lib’)
clr.AddReference(“RevitNodes”)
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)
clr.AddReference(“RevitServices”) # Import DocumentManager
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
import traceback
clr.AddReference(‘RevitAPI’) #import clr
import Autodesk
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Plumbing import *
from Autodesk.Revit.DB.Electrical import *
from Autodesk.Revit.DB.Mechanical import *
from Autodesk.Revit.DB.Lighting import *
clr.ImportExtensions(Revit.Elements)
import System
from System.Collections.Generic import *
clr.AddReference(“DSCoreNodes”)
from DSCore import *
doc = DocumentManager.Instance.CurrentDBDocument
linkDoc = UnwrapElement(IN[0])
category = IN[1]
linkinstance = UnwrapElement(IN[2])
TransactionManager.Instance.EnsureInTransaction(doc)
linkDocId = linkinstance.Id
#elements =[]
elementCategoryFilter = ElementCategoryFilter(System.Enum.ToObject(BuiltInCategory, category.Id))
linkedRooms = FilteredElementCollector(linkDoc).WherePasses(elementCategoryFilter).WhereElementIsNotElementType().ToElements()
viewPlans = []
viewPlanIds = []
viewPlanLevels = []
out = []
possibleViewPlans = FilteredElementCollector(doc).OfClass(ViewPlan).OfCategory(BuiltInCategory.OST_Views).ToElements()#.WherePasses(filter) #THIS GETS THE PLACED FAMILY TYPE INSTANCES
for possibleViewPlan in possibleViewPlans:
if not possibleViewPlan.IsTemplate:
for linkedRoom in linkedRooms:
if linkedRoom.Location != None:
if linkedRoom.get_Parameter(BuiltInParameter.LEVEL_NAME).AsString() == possibleViewPlan.get_Parameter(BuiltInParameter.PLAN_VIEW_LEVEL).AsString():
linkedRoomReferenceId = LinkElementId(linkDocId, linkedRoom.Id)
doc.Create.NewRoomTag(linkedRoomReferenceId, UV(linkedRoom.Location.Point.X, linkedRoom.Location.Point.Y), possibleViewPlan.Id)
#LinkElementId(ElementId, ElementId)
TransactionManager.Instance.TransactionTaskDone()
OUT = linkedRoomReferenceId#,1,1,1#viewPlans, viewPlanIds, viewPlanLevels, linkedRooms#, linkedRoomLevels