# 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.

