
- 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.