Bonjour à tous,
Afin de mieux gérer les paramètres de projets que je souhaite utiliser, j'aimerai me créer un dynamo permettant de créer à la chaîne plusieurs paramètres partagés.
Je me suis donc créer un excel avec le listing de tous mes paramètres, et avec leurs catégories d'applications (Gaine, Canalisations ....)
Un paramètre pouvant être appliqué à plusieurs catégories, j'aimerai que pour chaque paramètre avoir la possibilité d'appeler une liste de catégories crée au sein de mon excel. (colonnes V crées à partir des colonnes R et T).
C'est ici que je bloque, je n'arrive pas à affecter ces listes de catégories à mes paramètres....
Par ailleurs je m’aperçois que dans ce code, l'application par type et ou occurrence ne fonctionne pas correctement .
En effet, tous les paramètres sont appliqués par occurrence (colonne L).
J'ai bien conscience que le dynamo que je propose ne permet pas de gérer la pluralité de catégorie au sein d'un paramétres ....
Avez des solutions pour que cela fonctionne correctement ?
Par avance merci et bonnes fêtes de fin d'années à tous .
Code Python :
#Copyright(c) 2015, Konrad Sobon
# @arch_laboratory, http://archi-lab.net
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
# Import DocumentManager and TransactionManager
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
# Import RevitAPI
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application
from System.Collections.Generic import *
# Import ToDSType(bool) extension method
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
import System
#The inputs to this node will be stored as a list in the IN variable.
dataEnteringNode = IN
_paramName = IN[0]
_groupName = IN[1]
_paramType = IN[2]
_visible = IN[3]
_category = IN[4]
_paramGroup = IN[5]
_instance = IN[6]
def ParamBindingExists(_doc, _paramName, _paramType):
map = doc.ParameterBindings
iterator = map.ForwardIterator()
iterator.Reset()
while iterator.MoveNext():
if iterator.Key != None and iterator.Key.Name == _paramName and iterator.Key.ParameterType == _paramType:
paramExists = True
break
else:
paramExists = False
return paramExists
def RemoveParamBinding(_doc, _paramName, _paramType):
map = doc.ParameterBindings
iterator = map.ForwardIterator()
iterator.Reset()
while iterator.MoveNext():
if iterator.Key != None and iterator.Key.Name == _paramName and iterator.Key.ParameterType == _paramType:
definition = iterator.Key
break
message = None
if definition != None:
map.Remove(definition)
message = "Success"
return message
def addParam(doc, _paramName, _visible, _instance, _groupName, _paramGroup,k):
message = None
if ParamBindingExists(doc, _paramName, _paramType):
if not RemoveParamBinding(doc, _paramName, _paramType) == "Success":
message = "Param Binding Not Removed Successfully"
else:
message = None
group = file.Groups.get_Item(_groupName)
if group == None:
group = file.Groups.Create(_groupName)
if group.Definitions.Contains(group.Definitions.Item[_paramName]):
_def = group.Definitions.Item[_paramName]
else:
_def = group.Definitions.Create(opt)
param = doc.ParameterBindings.Insert(_def, bind, _paramGroup)
return message
#"Start" the transaction
TransactionManager.Instance.EnsureInTransaction(doc)
try:
file = app.OpenSharedParameterFile()
except:
message = "No Shared Parameter file found."
pass
k=0
while k<_paramName.Count:
builtInCategory = System.Enum.ToObject(BuiltInCategory, _category[k].Id)
cats = app.Create.NewCategorySet()
cats.Insert(doc.Settings.Categories.get_Item(builtInCategory))
if _instance[k]:
bind = app.Create.NewInstanceBinding(cats)
else:
bind = app.Create.NewTypeBinding(cats)
opt = ExternalDefinitionCreationOptions(_paramName[k], _paramType[k])
opt.Visible = _visible[k]
if isinstance(_paramName[k], list):
for i in _paramName[k]:
message = addParam(doc, i, _visible[k], _instance[k], _groupName[k], _paramGroup[k], k)
else:
message = addParam(doc, _paramName[k], _visible[k], _instance[k], _groupName[k], _paramGroup[k],k)
k=k+1
# "End" the transaction
TransactionManager.Instance.TransactionTaskDone()
#Assign your output to the OUT variable
if message == None:
OUT = "Success"
else:
OUT = message
Afin de mieux gérer les paramètres de projets que je souhaite utiliser, j'aimerai me créer un dynamo permettant de créer à la chaîne plusieurs paramètres partagés.
Je me suis donc créer un excel avec le listing de tous mes paramètres, et avec leurs catégories d'applications (Gaine, Canalisations ....)
Un paramètre pouvant être appliqué à plusieurs catégories, j'aimerai que pour chaque paramètre avoir la possibilité d'appeler une liste de catégories crée au sein de mon excel. (colonnes V crées à partir des colonnes R et T).
C'est ici que je bloque, je n'arrive pas à affecter ces listes de catégories à mes paramètres....
Par ailleurs je m’aperçois que dans ce code, l'application par type et ou occurrence ne fonctionne pas correctement .
En effet, tous les paramètres sont appliqués par occurrence (colonne L).
J'ai bien conscience que le dynamo que je propose ne permet pas de gérer la pluralité de catégorie au sein d'un paramétres ....
Avez des solutions pour que cela fonctionne correctement ?
Par avance merci et bonnes fêtes de fin d'années à tous .
Code Python :
#Copyright(c) 2015, Konrad Sobon
# @arch_laboratory, http://archi-lab.net
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
# Import DocumentManager and TransactionManager
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
# Import RevitAPI
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application
from System.Collections.Generic import *
# Import ToDSType(bool) extension method
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
import System
#The inputs to this node will be stored as a list in the IN variable.
dataEnteringNode = IN
_paramName = IN[0]
_groupName = IN[1]
_paramType = IN[2]
_visible = IN[3]
_category = IN[4]
_paramGroup = IN[5]
_instance = IN[6]
def ParamBindingExists(_doc, _paramName, _paramType):
map = doc.ParameterBindings
iterator = map.ForwardIterator()
iterator.Reset()
while iterator.MoveNext():
if iterator.Key != None and iterator.Key.Name == _paramName and iterator.Key.ParameterType == _paramType:
paramExists = True
break
else:
paramExists = False
return paramExists
def RemoveParamBinding(_doc, _paramName, _paramType):
map = doc.ParameterBindings
iterator = map.ForwardIterator()
iterator.Reset()
while iterator.MoveNext():
if iterator.Key != None and iterator.Key.Name == _paramName and iterator.Key.ParameterType == _paramType:
definition = iterator.Key
break
message = None
if definition != None:
map.Remove(definition)
message = "Success"
return message
def addParam(doc, _paramName, _visible, _instance, _groupName, _paramGroup,k):
message = None
if ParamBindingExists(doc, _paramName, _paramType):
if not RemoveParamBinding(doc, _paramName, _paramType) == "Success":
message = "Param Binding Not Removed Successfully"
else:
message = None
group = file.Groups.get_Item(_groupName)
if group == None:
group = file.Groups.Create(_groupName)
if group.Definitions.Contains(group.Definitions.Item[_paramName]):
_def = group.Definitions.Item[_paramName]
else:
_def = group.Definitions.Create(opt)
param = doc.ParameterBindings.Insert(_def, bind, _paramGroup)
return message
#"Start" the transaction
TransactionManager.Instance.EnsureInTransaction(doc)
try:
file = app.OpenSharedParameterFile()
except:
message = "No Shared Parameter file found."
pass
k=0
while k<_paramName.Count:
builtInCategory = System.Enum.ToObject(BuiltInCategory, _category[k].Id)
cats = app.Create.NewCategorySet()
cats.Insert(doc.Settings.Categories.get_Item(builtInCategory))
if _instance[k]:
bind = app.Create.NewInstanceBinding(cats)
else:
bind = app.Create.NewTypeBinding(cats)
opt = ExternalDefinitionCreationOptions(_paramName[k], _paramType[k])
opt.Visible = _visible[k]
if isinstance(_paramName[k], list):
for i in _paramName[k]:
message = addParam(doc, i, _visible[k], _instance[k], _groupName[k], _paramGroup[k], k)
else:
message = addParam(doc, _paramName[k], _visible[k], _instance[k], _groupName[k], _paramGroup[k],k)
k=k+1
# "End" the transaction
TransactionManager.Instance.TransactionTaskDone()
#Assign your output to the OUT variable
if message == None:
OUT = "Success"
else:
OUT = message