The error tells you that the method expects a Surface but was given a List. In the last line you wrap Shaft_Surfaces in a list. That’s causing you problems. Just pass the surface as-is.
import sys
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
clr.AddReference('RevitNodes')
import Revit
from Revit.Elements import*
geo=Element.Geometry(IN[0])
surf=Geometry.Explode(geo[0])
curv=[Surface.PerimeterCurves(s) for s in surf]
OUT = geo,surf,curv
import sys
import clr
import math
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
clr.AddReference('RevitNodes')
import Revit
from Revit.Elements import *
Geo = Element.Geometry(IN[0])
Surf = Geometry.Explode(Geo[0])
Curvs = [Surface.PerimeterCurves(i) for i in Surf]
for i in Curvs:
for j in i:
Curv_length = [Curve.Length(j)]
OUT = Curv_length
import sys
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
clr.AddReference('RevitNodes')
import Revit
from Revit.Elements import*
geo=Element.Geometry(IN[0])
surf=Geometry.Explode(geo[0])
curv=[Surface.PerimeterCurves(s) for s in surf]
#You need an empty container to store your loop result
length_c=[]
temp=[]
for level_list in range(0,len(curv)):
for c in curv[level_list]:
temp.append(c.Length)
length_c.append(temp)
temp=[]
OUT = geo,surf,curv,length_c
edit: Don’t take this as a presumptuous message from me
check out this very informative post
Clear and instructive instruction