Hi, attached a partial copy of the script, it seems that the parameters are not kept between the source and destination copy (ElementTransformUtils class)
Id number different from the parameter
Source Id : 458851
Copy Id:458855
Does this come from the python script?
import clr
import sys
import System
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
import Autodesk.Revit.DB as DB
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)
from System.Collections.Generic import List
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
uidoc = uiapp.ActiveUIDocument
vec=IN[1]
stock=[]
element_select=UnwrapElement(IN[0])
setids=List[ElementId]()
for e in element_select:
a=e.Id
setids.Add(a)
TransactionManager.Instance.EnsureInTransaction(doc)
for v in vec:
c=ElementTransformUtils.CopyElements(doc,setids,v.ToRevitType())
stock.append(c)
TransactionManager.Instance.TransactionTaskDone()
OUT = stock
I sincerely thank you in advance
christian.stan
I think that phase data may be an exception to the rule. Is that perhaps the last phase of the project?
1 Like
hi, thank you for the hypothesis, no on other parameters of the family, I have the same different results (default value, data not transmitted), and the phase was not the last of the project
Sincerely
christian.stan
Hmmm… do you have a simple reproducible case?
hi, here is the link with file (I tried to keep it as small as possible, I think I have work to do on this aspect) and script
edit: I am using Revit 2023 try launching it from the player, you should have a pick point of 3 points
filesender.renater.fr/?s=download&token=84a45361-1a29-44e2-b2e3-5b4ffcc41469
cordially
christian.stan
Hi,
instead, you can set the PHASE parameters in the same python node
import clr
import sys
import System
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
import Autodesk.Revit.DB as DB
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)
from System.Collections.Generic import List
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
uidoc = uiapp.ActiveUIDocument
vec=IN[1]
stock=[]
element_select=UnwrapElement(IN[0])
setids=List[ElementId]()
for e in element_select:
a=e.Id
setids.Add(a)
TransactionManager.Instance.EnsureInTransaction(doc)
for v in vec:
lst_copyIds=ElementTransformUtils.CopyElements(doc,setids,v.ToRevitType())
doc.Regenerate()
for copyId, sourceElem in zip(lst_copyIds, element_select):
copyElem = doc.GetElement(copyId)
copyElem.get_Parameter(BuiltInParameter.PHASE_CREATED).Set(sourceElem.get_Parameter(BuiltInParameter.PHASE_CREATED).AsElementId())
copyElem.get_Parameter(BuiltInParameter.PHASE_DEMOLISHED).Set(sourceElem.get_Parameter(BuiltInParameter.PHASE_DEMOLISHED).AsElementId())
stock.append(lst_copyIds)
TransactionManager.Instance.TransactionTaskDone()
OUT = stock
1 Like
Hi,
By using the copy natively

the phases do not follow so the result remains normal thank you for your feedback
a get from the source and set to the copy.
Why the doc.Regenerate()?
It seems that copying elements with the assignment of certain parameters specific to the family is a little chaotic too (see image)
I might put it down to the family, I don’t really know, I’m still perplexed.
thank you, I validate your answer as a solution
thank M. Jacob too
Sincerely
christian.stan
2 Likes
I don’t think it’s mandatory here, but on certain types of elements, I had to regenerate the document to be able to modify them in the rest of the code.
1 Like