Aneesh Carvalho Posted May 5, 2021 Share Posted May 5, 2021 Hello, I'm trying to create a script for building kitchen cabinetry using pre-built "sections" as symbols. I'm trying to prompt the user to enter the number of sections and then select the section from a drop-down list using the popup dialog. I'm not sure how to use the series node to make this work for me though. For example, if the user enters "3" when prompted to enter number of sections, they should be able to select the 3 different sections from a list (popup dialog) Appreciate your help. Thank You Cabinetry Tool.vwx Quote Link to comment
Aneesh Carvalho Posted May 7, 2021 Author Share Posted May 7, 2021 Hi All, I'm still struggling at getting the popup dialog to prompt the user 'n' number of times to get a list of items. Any help would be greatly appreciated. Thank You Quote Link to comment
Aneesh Carvalho Posted May 8, 2021 Author Share Posted May 8, 2021 I tried editing the script to get the node to accept a list and it kinda works the way I'd like it to work however, the first item in the List of choices get's exploded into a list of letter. Below if the code for the node: #Created April 2017 @Marionette.NodeDefinition class Params(metaclass = Marionette.OrderedClass): #APPEARANCE #Name this = Marionette.Node( "Selection Dialog" ) this.SetDescription( 'String Dialog, displays a dialog box which ' + 'requests the user to enter a string value.' ) #Input Ports dListItems = Marionette.PortIn ( [], 'Choices') dListItems.SetDescription('Default value for input field') int = Marionette.PortIn(0, 'iDefault') int.SetDescription('Default value for input field') #OIP Controls Title = Marionette.OIPControl( 'Dialog Title', Marionette.WidgetType.Text, 'Dialog') Title.SetDescription('The name of the popup dialog -- it should advise the user as to the choice.') OK_s = Marionette.OIPControl( 'OK string', Marionette.WidgetType.Text, 'OK') OK_s.SetDescription('Localized label for the OK button.') Cancel_s = Marionette.OIPControl( 'Cancel string', Marionette.WidgetType.Text, 'Cancel') Cancel_s.SetDescription('Localized label for the Cancel button.') #Output Ports s_choice = Marionette.PortOut('sChoice') s_choice.SetDescription( "The string of the chosen item. If the dialog was canceled, this will be None." ) #BEHAVIOR #this.SetListAbsorb() def RunNode(self): #inputs dlogName = self.Params.Title.value dlogOK = self.Params.OK_s.value dlogCancel = self.Params.Cancel_s.value dlogList = self.Params.dListItems.value global result_i global result_s dialog = 0 debug = False #script def CreateDialog(): dlogID = vs.CreateLayout(dlogName, False, dlogOK, dlogCancel) vs.CreatePullDownMenu(dlogID, 4, 24) vs.SetFirstLayoutItem(dlogID, 4) return dlogID def Dialog_handler(item, data): global result_i global result_s if (item == 12255): #AKA SetupDialogC for x in range (0, len(dlogList)): vs.AddChoice(dialog, 4, dlogList[x], x ) elif (item == 1): (result_i, result_s) = vs.GetSelectedChoiceInfo(dialog, 4, 0) if debug: vs.AlrtDialog("result_s is ", result_s) vs.AlrtDialog("result_i is ", result_i) dialog = CreateDialog() dlog_result = False if vs.RunLayoutDialog(dialog, Dialog_handler) == 1: dlog_result = True elif vs.RunLayoutDialog(dialog, Dialog_handler) != 1: result_s = None result_i = None #outputs self.Params.s_choice.value = result_s Cabinetry Tool v2.vwx Quote Link to comment
DomC Posted May 14, 2021 Share Posted May 14, 2021 Hi In you code you have: if dlogList would be 'hello' and x was 2, the result is 'l'. Your dlogList is not a List is is just a string. You can solve it this way in your node: Quote Link to comment
Aneesh Carvalho Posted May 14, 2021 Author Share Posted May 14, 2021 Hi @DomC Thank You for your response. I did include the Listabsorb() into the code however, it asks the user to input "n" number of items but returns only one item in the list, when it should return "n" number of items and ask the user to select the item from the list "n" number of times. For example, when running the script, the user is prompted "Enter the number of units". If the user enters 4, then the dropdown popup dialog should run 4 times so the user can select 4 of the 3 currently available options from the menu and return a list of all 4 items. However, currently, it only prompts the user once and return just one item. Thank You Quote Link to comment
DomC Posted May 14, 2021 Share Posted May 14, 2021 The Popup list you generate delivers 3 string variables into the network. But for a popup, you need those 3 strings nested into a list as Example ['choice1', 'choice2', 'choice3'] If you run the node without list absorbing, the input with the choice would deliver 'choice1' the first time the node runs, 'choice2' the second time etc. that's how the Marionette Data-Flow works. The node repeats as many times as one input delivers values. "list absorb", is merging all inputs into a sequence and the node just run once. So the popup there will work. But because the node run just one, your dialog run just once. you could loop through the number of dialog you want to have with the integer input you have in the node itself. Or just leave the node how it is and merge the popup into one list. I would recommend this: 2 Quote Link to comment
Aneesh Carvalho Posted May 14, 2021 Author Share Posted May 14, 2021 Thank You @DomC This is exactly what I was looking for. Cheers for all your help. 1 Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.