First time on the forum and quite a newbie regarding dynamo and python, but I’m trying my best.
I’m creating a graph that basically gets AutoCAD block locations from an excel, matches block names with Revit groups names and moves the Revit groups to the block locations.
on the image below you can see the lists I use, on the python script I get the list of groups directly from Revit and with a for loop check if the group names are the same as the block names to return a list with the groups to be place and its location.
This is the full script:
# Enable Python support and load DesignScript library import clr import math clr.AddReference("ProtoGeometry") from Autodesk.DesignScript.Geometry import * clr.AddReference("RevitNodes") import Revit clr.ImportExtensions(Revit.Elements) clr.ImportExtensions(Revit.GeometryConversion) clr.AddReference("RevitAPI") import Autodesk from Autodesk.Revit.DB import * clr.AddReference("RevitServices") import RevitServices from RevitServices.Persistence import DocumentManager from RevitServices.Transactions import TransactionManager def tolist(obj1): if hasattr(obj1,"__iter__"): return obj1 else: return [obj1] doc = DocumentManager.Instance.CurrentDBDocument blocks = IN locations = IN mglist =  loclist =  #Gets groups from Revit collector = FilteredElementCollector(doc, doc.ActiveView.Id) filter = ElementCategoryFilter(BuiltInCategory.OST_IOSModelGroups) mgroups = collector.WherePasses(filter).ToElements() #Gets a list with groups to be placed and locations for mg in mgroups: for block in blocks: if mg.GroupType.ToDSType(True).Name == block: mglist.append(mg.GroupType) bindex = blocks.index(block) newloc = locations[bindex] loclist.append(newloc) #place the groups outList =  i = 0 locs = tolist(loclist) if len(mglist) == len(locs): for g in mglist: loc = locs[i].ToRevitType(True) TransactionManager.Instance.EnsureInTransaction(doc) newGrp = doc.Create.PlaceGroup(loc, g) outList.append(newGrp) TransactionManager.Instance.TransactionTaskDone() i = i+1 else: outList.append("Could not Create Groups") # Assign your output to the OUT variable. OUT = outList
And Dynamo file:
Place & Rotate Model groups.dyn (86.0 KB)
The issue that I detect happens on this part:
#Gets a list with groups to be placed and locations for mg in mgroups: for block in blocks: if mg.GroupType.ToDSType(True).Name == block: mglist.append(mg.GroupType) bindex = blocks.index(block) newloc = locations[bindex] loclist.append(newloc)
On the image below you can see that group T6_AS matches index 5 and 9 of block list, next to it you can see their respective locations, but on the OUT it duplicates location of index 5 instead of append locations on index 5 and 9.
I thinks it has something to do on how the for loop works, I tried to find a solution but I can not find anything.
Any ideas? Thanks for the help in advance!