Hello,
could you help me with some coding?.
I’m trying to code the same logic as in red circle in python.
Basically I don’t know how to processList intersection def.
Need output like from “list.map” after does.intersect node. Hope it does make sense to you 
Python warning:
"
Warning: IronPythonEvaluator.EvaluateIronPythonScript operation failed.
Traceback (most recent call last):
File “”, line 10, in
File “”, line 5, in ProcessList
File “”, line 5, in <lambda$170>
File “”, line 8, in Intersection
TypeError: Solid is not iterable
"
Tomasz,
The ProcessList()
method takes care of zipping the two arguments from lists. You don’t have to perform that inside your Intersection()
method. Basically change it to:
def Intersection(elA, elB):
return elA.DoesIntersect(elB)
Then call it like so:
OUT = ProcessList(Intersection, ducts, walls)
Make sure that the two lists ducts and walls are exactly of the same structure. It works like this:
ducts = [duct1, duct2, duct3]
walls = [wall1, wall2, wall3]
Calling ProcessList(Intersection, ducts, walls)
would result in a list [bool, bool, bool]
where bool is a true/false if duct1 intersected wall1, duct2 intersected wall2 and duct3 intersected wall3.
It WILL NOT run duct1 against ALL walls, just pair them up. That’s how Zip() works.
1 Like
That makes sense. Thank you!
As already explained by Konrad your ProcessList and zip() are comparable to how List.Combine works in Dynamo.
If you need List.map you can use a nested for loop:
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
solids1 = IN[0]
solids2 = IN[1]
OUT = []
for s1 in solids1:
sublist = []
for s2 in solids2:
sublist.append(s1.DoesIntersect(s2))
OUT.append(sublist)
List.map, cross-product lacing and this python script will return the same:
If you like map(), this will do the same:
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
OUT = map(lambda s1: map(lambda s2: s1.DoesIntersect(s2), IN[0]), IN[1])
7 Likes
That’s perfect. Thank you guys!