# ports: список элементов портов одной панели
# origin, basisX, basisY: трансформ хоста-панели
def local_xy(p, origin, basisX, basisY):
v = p.Location.Point - origin
return (v.DotProduct(basisX), v.DotProduct(basisY))
sorted_ports = sorted(ports, key=lambda p: local_xy(p, origin, basisX, basisY))
for i, p in enumerate(sorted_ports, start=1):
p.LookupParameter("PortNumber").Set("{:02d}".format(i))