Iterating integers over a CommandLink to generate a list of Command/links

Im trying to create a custom node that will generate a list of CommandLink Buttons and results by measuring the list of inputs, creating a range, and iterating that range over the commandlink method. Im having some trouble and am wondering what my options are for iterating integers into functions or methods.

Here is the code and a screenshot of what I have been playing with -

import clr
import sys
import System
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import Clipboard
# import Revit API
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *

clr.AddReference("RevitAPIUI")
from Autodesk.Revit.UI import (TaskDialog, TaskDialogCommonButtons,
                               TaskDialogCommandLinkId, TaskDialogResult)
                               
title = IN[0]                               
buttonlists = IN[1]
resultslist = IN[2]
dialog = TaskDialog(title)
buttonNum = len(resultslist)

# Properties
dialog.MainInstruction = title
# dialog.ExpandedContent = expanded_content

# Settings and buttons
dialog.TitleAutoPrefix = False
dialog.AllowCancellation = True
dialog.CommonButtons = TaskDialogCommonButtons.Cancel
dialog.DefaultButton = TaskDialogResult.Cancel

# Add Command Link
for n in range(buttonNum+1):
	dialog.AddCommandLink(TaskDialogCommandLinkId.CommandLink+(n), buttontext+(n))
	result = dialog.Show()
	if result == TaskDialogResult.Cancel:
		OUT = 'Dialog was Cancelled'
	if result == TaskDialogResult.CommandLink(n):
		OUT = result(n)

	

Thanks!!!


logicgate test.dyn (13.2 KB)

I am currently doing this with Bools and it works fine just wondering for curiousities sake if its possible with iteration

Hi,
a slightly different example with Enum

test_cmdLink

import clr
import sys
import System
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import Clipboard
# import Revit API
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *

clr.AddReference("RevitAPIUI")
from Autodesk.Revit.UI import (TaskDialog, TaskDialogCommonButtons,
                               TaskDialogCommandLinkId, TaskDialogResult)
                               
array_CmdLink = System.Enum.GetValues(TaskDialogCommandLinkId)
array_CmdLinkName = System.Enum.GetNames(TaskDialogCommandLinkId)
#
lst_Result = [e for e in System.Enum.GetValues(TaskDialogResult) if System.Enum.GetName(TaskDialogResult, e) in array_CmdLinkName]
lst_Result.sort(key = lambda x : System.Array.IndexOf(array_CmdLinkName, System.Enum.GetName(TaskDialogResult, x)))
array_Result = System.Array[TaskDialogResult](lst_Result)
#
buttonlists = IN[0]
dialog = TaskDialog("MyTitle")
# Properties
dialog.MainInstruction = "MyTitle"
# dialog.ExpandedContent = expanded_content

# Settings and buttons
dialog.TitleAutoPrefix = False
dialog.AllowCancellation = True
dialog.CommonButtons = TaskDialogCommonButtons.Cancel
dialog.DefaultButton = TaskDialogResult.Cancel

# Add Command Link
for txt, cmdLink in zip(buttonlists, array_CmdLink):
	dialog.AddCommandLink(cmdLink, txt)
result = dialog.Show()
idxR = System.Array.IndexOf(array_Result, result)
if idxR != -1:
	OUT = buttonlists[idxR]
1 Like

Yo thanks for this! It was actually your basecode on an old Dynamo Forums post that I started with. This is awesome :slight_smile:

1 Like