- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Tengo la necesidad de renombrar unos parámetros compartidos por cambios en la nomenclatura de los nombres.
El problema es que al hacer los nuevos parámetros se utilizo el mismo GUID de los anteriores y eso genera errores al intentar cargarlos directamente.
Estoy desarrollando un pequeño script en python que comparto más abajo para intentar realizar esta tarea. La idea es convertir el parámetro original en un parámetro de familia, renombrarlo y volver a convertirlo en parámetro de familia.
Todo el proceso se realiza sin problemas hasta el último paso, donde se vuelve a convertir a parámetro compartido. Este último paso arroja un error muy poco descriptivo (Parameter replacement failed) por lo que no se como arreglarlo:
[ERROR] Error in Transaction Context: has rolled back.
Exception : Autodesk.Revit.Exceptions.InvalidOperationException: Parameter replacement failed.
at Microsoft.Scripting.Interpreter.ThrowInstruction.Run(InterpretedFrame frame)
at Microsoft.Scripting.Interpreter.Interpreter.HandleException(InterpretedFrame frame, Exception exception)
at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
at Microsoft.Scripting.Interpreter.LightLambda.Run2[T0,T1,TRet](T0 arg0, T1 arg1)
at IronPython.Compiler.PythonScriptCode.RunWorker(CodeContext ctx)
at Microsoft.Scripting.Hosting.ScriptSource.Execute(ScriptScope scope)
at Microsoft.Scripting.Hosting.ScriptSource.ExecuteAndWrap(ScriptScope scope, ObjectHandle& exception)El código:
"pruebas de cambio de nombre de parametros compartidos"
from rpw import revit, db, ui, DB, UI
# Acceso global al FamilyManager
fm = doc.FamilyManager
# Obtenemos un parámetro compartido del archivo actual
def obtener_parametro_compartido(grupo, nombre):
try:
spFile = revit.app.OpenSharedParameterFile()
spGroup = spFile.Groups.get_Item(grupo)
spParam = spGroup.Definitions.get_Item(nombre)
return spParam
except:
print(f"Parámetro {nombre} no encontrado.")
# Renombramos el parámetro compartido indicado
def renombrar_parametro_compartido (param, nombre):
grupo = param.Definition.ParameterGroup
deInstancia = param.IsInstance
spGrupo = "220_CTN_ContentSTR"
# Convertir en nuevo parámetro no compartido
new_param = fm.ReplaceParameter(param, nombre, grupo, deInstancia)
# Borrar el parámetro compartido anterior
fm.RemoveParameter(param)
# Volver a convertir a parámetro compartido
spParam = obtener_parametro_compartido(spGrupo, "SNR_STR_Waterproof")
fm.ReplaceParameter(new_param, spParam, grupo, deInstancia)
print(f"\nParámetro renombrado: {new_param.Definition.Name}")
with db.Transaction("Nombre"):
for param in fm.GetParameters():
if param.Definition.Name == "SNR_Waterproof":
renombrar_parametro_compartido(param, "SNR_STR_Waterproof")El error se produce en la línea 29, donde se vuelve a generar el parámetro compartido.
(He probado como macro en C# y arroja el mismo error)
Gracias de antemano a quien me pueda ayudar
Solved! Go to Solution.
Developer Advocacy and Support +