Visionner les web-conférences HEXABIM

Nous sommes +16 000 professionnels du BIM !

Rejoignez-nous >
Vous avez une question ?

Besoin de support technique, d'un avis ou un conseil ?


  1. Camille AUBERT
  2. BIM Management
  3. mardi 31 décembre 2019
  4.  Suivre par E-mail
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
Pièces jointes


Cette discussion ne contient encore aucune réponse.
Soyez le premier à y répondre !
Vous avez une question ?

Besoin de support technique, d'un avis ou un conseil ?


REJOIGNEZ +17 000 ADHERENTS !

Pas encore adhérent au réseau HEXABIM ? Plus de 17 000 professionnels ont rejoint la plateforme pour s'informer, apprendre et échanger autour du BIM et de la transition numérique.

L'adhésion est totalement gratuite, il suffit de demander votre invitation ci-après pour vous inscrire et accéder par la suite à toutes les ressources de la plateforme !

Découvrez les services Hexabim

recrutement

Recrutement

En savoir plus

Publicité

Publicité

En savoir plus

communication

Communication

En savoir plus

Hexabim

Se connecter