Hi EveryOne, I am working to create parameters and set values to the familydocs data from excel, but when i do so the order is automatically getting sorted from a to z eventhough i am adding the parameter in my desired order and then i tried adding reorder parameters code as well eventhen it is coming in that way. i have attached the code, can anyone tell me where i am going wrong??
Thanks in Advance
import clr
import sys
import System
from System.Collections.Generic import *
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
clr.AddReference("RevitAPI")
clr.AddReference("RevitAPIUI")
import Autodesk
from Autodesk.Revit.DB import *
from Autodesk.Revit.UI import *
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application
uidoc = uiapp.ActiveUIDocument
def tolist(obj1):
if hasattr(obj1,"__iter__"): return obj1
else: return [obj1]
def reorder_list(list1, list2):
# Create a dictionary for the order of elements in list2
order_dict = {item: idx for idx, item in enumerate(list2)}
# Separate elements in list1 that are in list2 and those that are not
in_list2 = [item for item in list1 if item in list2]
not_in_list2 = [item for item in list1 if item not in list2]
# Sort the elements in list1 that are in list2 according to the order in list2
sorted_in_list2 = sorted(in_list2, key=lambda x: order_dict[x])
# Combine the sorted elements with the ones not in list2
return sorted_in_list2 + not_in_list2
#Close all transactions
trans = TransactionManager.Instance
trans.ForceCloseTransaction()
fams = UnwrapElement(IN[0])
paths = IN[1]
pNameLst = UnwrapElement(IN[2])
pValues = IN[3]
pNames = IN[4]
#unwrap the Dynamo elements
output=[]
test=[]
for i in range(len(fams)):
pmngs,pmdgs,pmds,pmdd = [],[],[],[]
famDoc = doc.EditFamily(fams[i])
fm = famDoc.FamilyManager
trs=Transaction(famDoc, 'create parameter')
trs.Start()
for j, value in zip(pNameLst[i], pValues[i]):
try:
fm.AddParameter(j, SpecTypeId.String.Text, False)
fm.Set(fm.get_Parameter(j), str(value))
output.append('Parameter was successfully created')
except:
output.append('Operation Failed')
pms=fm.GetParameters()
pmngs=[p.Definition.Name for p in pms]
reorderedpmngs = reorder_list(pmngs,pNames)
for repgs in reorderedpmngs:
for pmn,pmd in zip(pmngs,pms):
if repgs==pmn:
pmdd.append(pmd)
break
fm.ReorderParameters(pmdd)
trs.Commit()
famDoc.SaveAs(paths[i])
famDoc.Close(False)
OUT =output