Alignment.ByPoints works as a node but fails from Python Script — what am I missing?

# Load the Python Standard and DesignScript Libraries
import sys
import clr
import System
from System import Array   # para criar arrays .NET

# Add Assemblies for AutoCAD and Civil3D
clr.AddReference('AcMgd')
clr.AddReference('AcCoreMgd')
clr.AddReference('AcDbMgd')
clr.AddReference('AecBaseMgd')
clr.AddReference('AecPropDataMgd')
clr.AddReference('AeccDbMgd')

# Import references from AutoCAD
from Autodesk.AutoCAD.Runtime import *
from Autodesk.AutoCAD.ApplicationServices import *
from Autodesk.AutoCAD.EditorInput import *
from Autodesk.AutoCAD.DatabaseServices import *
from Autodesk.AutoCAD.Geometry import *
import Autodesk.AutoCAD.DynamoNodes as Auto

# Import references from Civil3D
from Autodesk.Civil.ApplicationServices import *
from Autodesk.Civil.DatabaseServices import *
import Autodesk.Civil.DynamoNodes as Civil
import CADNodes.Civil3D as CADN

# Import references from Dynamo
import Autodesk.DesignScript.Geometry as DS


# The inputs to this node will be stored as a list in the IN variables.
dataEnteringNode = IN
polyCadList = IN[0]
surface = IN[1]
surfaceOffset = IN[2]
pipeNetworkSelected = IN[3]
partListNameSelected = IN[4]
partSizeNameSelected = IN[5]
insertPoint = IN[6]

alignList = []
for i, polyCad in enumerate(polyCadList):
    lineList = []
    for line in polyCad.Geometry.Curves():
        try:
            startElevation = Civil.Surface.ElevationAtXY(surface, line.StartPoint.X, line.StartPoint.Y)
        except:
            startElevation = 0
            
        try:
            endElevation = Civil.Surface.ElevationAtXY(surface, line.EndPoint.X, line.EndPoint.Y)
        except:
            endElevation = 0
        
        obj = {
            "Curve": line,
            "Start": startElevation - surfaceOffset,
            "End": endElevation - surfaceOffset
        }
        lineList.append(obj)
    
    item = {
        "PolyCurve": polyCad.Geometry,
        "AlignName": "Alignment_" + partSizeNameSelected + " - " + str(i),
        "ProfileName": "PRF_" + partSizeNameSelected + " - " + str(i),
        "PipeInfoList": lineList
    }
    
    alignList.append(item)

for objectList in alignList:
    
    linelist = objectList["PipeInfoList"]
    
    for i, item in enumerate(linelist):
        
        if item["Start"] == 0:
            # look backwards
            for j in range(1, i):
                if linelist[i-j]["End"] != 0:
                    item["Start"] = linelist[i-j]["End"]  
                    break
                if linelist[i-j]["Start"] != 0:
                    item["Start"] = linelist[i-j]["Start"] 
                    break
                  
        if item["End"] == 0:
            # look forwards
            for j in range(1, i):
                if linelist[i+j]["Start"] != 0:
                    item["End"] = linelist[i+j]["Start"]  
                    break
                if linelist[i+j]["End"] != 0:
                    item["End"] = linelist[i-j]["End"] 
                    break  
alignments = []
accumulator = 0
for i, alignObj in enumerate(alignList):
    #Alignment Creation 
    pts = alignObj["PolyCurve"].Points
    alignName = "Alignment_" + partSizeNameSelected + " - " + str(i) 
    alignType = "Centerline" 
             
    align = Civil.Alignment.ByPoints(alignObj["PolyCurve"], alignName, 0, alignType, "")

# Assign your output to the OUT variable.
OUT = [alignList, alignments]

I’m trying to create an Alignment from a Python Script node by calling Autodesk.Civil.DynamoNodes.Alignment.ByPoints.
With the exact same inputs, the Alignment.ByPoints node works, but calling it from Python throws a “No method matches given arguments” error.

If you go to the Help documentation for the Alignment.ByPoints node (right-click > Help…) you should see a section for Inputs and Outputs that describes each of the inputs and their required types. Make sure those types match the object types you’re providing in Python.

Alignment.ByPoints need a .Net List<DesignScript.Geometry.Point> as parameter

static ByPoints(System.Collections.Generic.List1[Autodesk.DesignScript.Geometry.Point], System.String, Double, System.String, System.String) → Autodesk.Civil.DynamoNodes.Alignment

try this

import System
#import net library
from System import Array
from System.Collections.Generic import List, IList, Dictionary, HashSet
#
clr.AddReference('ProtoGeometry')
import Autodesk.DesignScript.Geometry as DS
#
align = Civil.Alignment.ByPoints(
                    List[DS.Point](alignObj["PolyCurve"].Points), 
                    alignName, 
                    0.0, 
                    alignType, 
                    "")
# Load the Python Standard and DesignScript Libraries
import sys
import clr

# Add Assemblies for AutoCAD and Civil3D
clr.AddReference('AcMgd')
clr.AddReference('AcCoreMgd')
clr.AddReference('AcDbMgd')
clr.AddReference('AecBaseMgd')
clr.AddReference('AecPropDataMgd')
clr.AddReference('AeccDbMgd')
clr.AddReference('ProtoGeometry')

# Import references from AutoCAD
from Autodesk.AutoCAD.Runtime import *
from Autodesk.AutoCAD.ApplicationServices import *
from Autodesk.AutoCAD.EditorInput import *
from Autodesk.AutoCAD.DatabaseServices import *
from Autodesk.AutoCAD.Geometry import *
import Autodesk.AutoCAD.DynamoNodes as Auto

# Import references from Civil3D
from Autodesk.Civil.ApplicationServices import *
from Autodesk.Civil.DatabaseServices import *
import Autodesk.Civil.DynamoNodes as Civil

# Import references from Dynamo
import Autodesk.DesignScript.Geometry as DS

# The inputs to this node will be stored as a list in the IN variables.
dataEnteringNode = IN


pt1 = DS.Point.ByCoordinates(0, 0)
pt2 = DS.Point.ByCoordinates(50, 0)
pt3 = DS.Point.ByCoordinates(100, 0)
pts = [pt1, pt2, pt3]

alignName = "test"
alignType = "Centerline"


align = Civil.Alignment.ByPoints(List[DS.Point](pts), alignName, 0.0, alignType, "")

# Assign your output to the OUT variable.
OUT = align

How can I import the List class?

I update my previous post
add / replace this at the top

import clr
import sys
import System
#import net library
from System.Collections.Generic import List

Thanks a lot. It’s now working perfectly.