I am trying to make a script that checks for duplicate parameter values, like Mark and ElementID, then overwrites them with new unique values. I have it mostly done but I would like to add an option to check the changes in a spreadsheet before you finalize the changes to the model.
What I really need is and if gate that goes something like this
I’m pretty new to dynamo, and this is my first post on this forum, so if you have any suggestions or if there is a package that you could point me to it would be greatly appreciated.
-Thanks
You could try the ScopeIf node as Sean suggested, or List.FilterByBoolMask (similar to a dispatch node in grasshopper). However, if you want more than two outputs, it gets more complicated. You could string together a series of logic gates, but this could get really messy. You might be better off doing your tests in Python and splitting the data outside of the node:
def test_1(var):
if 0 <= var < 4:
return True
return False
def test_2(var):
if 4 <= var < 7:
return True
return False
def test_3(var): # True if var is even number
if var % 2 == 0:
return True
return False
data = IN[0]
valid_1 = []
valid_2 = []
valid_3 = []
valid_none = []
for cell in data:
cond_1 = test_1(cell)
cond_2 = test_2(cell)
cond_3 = test_3(cell)
if cond_1:
valid_1.append(cell)
if cond_2:
valid_2.append(cell)
if cond_3:
valid_3.append(cell)
if not any([cond_1, cond_2, cond_3]):
valid_none.append(cell)
OUT = [valid_1, valid_2, valid_3, valid_none]
There seems to only be one output out of the ScopeIf node, and I don’t know how or if you can control what node you want it to go to on a true condition opposed to a false condition.
Let me clarify a bit, I would like the gate to be controlled independently from the data that it is pushing through it, and the gate to change the destination node based on that independent variable. I want to be able to select which node I push this data to, in this case either to the model from via a Element.SetParameterByName node or to Excel via the Data.ExportExcel node. I would like to see some sort of gate or flow control like this introduced to dynamo, I feel like it could apply in some autonomous modeling situations where you have some base input data, a gate, and then a choice of workflows following that gate.
I think I’m now realizing that it will just be far easier for me to just freeze the node that I don’t want to use and make a note of that for future users of the script.
condition = IN[0]
data = IN[1]
if condition:
OUT = [data, []]
else:
OUT = [[], data]
In your case, you’d have to send all of your data (element, parameterName, value) through the gate and break it back out using a similar method illustrated above.
Partly true, but you can prevent a certain up stream flow from executing by using the scopeif, mind it is a little tricky to get right and one have to be careful to have completely separate true and false tracks but it is possible to only have one branch execute!
But I think that what is sought here is more in the like of your answer or a basic code block
As @Jonathan.Olesen noted, you’re likely nest off using a single code block here. If you’re looking to split your data lists into multiple tracks and do a bunch of processing on both sets, List.FilterByBoolMask would also work.
False alarm! It’s working now, I’m not sure what was going on but your code works as intended, and I even figured out how to do the multiple option thing that I purposed.