- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
I have tried two methods using Dynamo to create a project parameter:
- By adding new shared parameters only bound to the category "Project Information" with the custom node below.
- By using the node "Create Project parameter".
In both cases the project parameter is available, but the binding with for instance a title block containing the same shared parameter is not working. As if the parameter has a GUID mismatch, but they both come from the same external shared parameter file.
Is there anything I'm missing? The active shared parameter file is correct, and the specific parameters have been added to the title block family. Any of the added project parameters can not be edited in the sheet's title block.
For the first option I'm using a modified version of Konrad's solution to create shared parameters. This one can handle multiple categories.
#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:
cats = app.Create.NewCategorySet()
# Insert each category instead of one here...
for CaT in _category[k]:
builtInCategory = System.Enum.ToObject(BuiltInCategory, CaT.Id)
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
Solved! Go to Solution.