Thanks for the suggestions. Having dots in the names of the curves was a problem, and so was the way that I was trying to define ranges. Here is my current code, which is now working as expected.
Code:
slider = joystick[2].sliders[0]
if (0 <= slider <= 204.8):
x = Cyclic100.getY(joystick[1].x)
y = Cyclic100.getY(joystick[1].y)
z = Rudder100.getY(joystick[6].zRotation)
if (204.9 <= slider <= 409.6):
x = Cyclic90.getY(joystick[1].x)
y = Cyclic90.getY(joystick[1].y)
z = Rudder90.getY(joystick[6].zRotation)
if (409.7 <= slider <= 614.4):
x = Cyclic80.getY(joystick[1].x)
y = Cyclic80.getY(joystick[1].y)
z = Rudder80.getY(joystick[6].zRotation)
if (614.5 <= slider <= 819.2):
x = Cyclic70.getY(joystick[1].x)
y = Cyclic70.getY(joystick[1].y)
z = Rudder70.getY(joystick[6].zRotation)
if (819.3 <= slider <= 1024):
x = Cyclic60.getY(joystick[1].x)
y = Cyclic60.getY(joystick[1].y)
z = Rudder60.getY(joystick[6].zRotation)
if (1024.1 <= slider <= 1228.8):
x = Cyclic50.getY(joystick[1].x)
y = Cyclic50.getY(joystick[1].y)
z = Rudder50.getY(joystick[6].zRotation)
if (1228.9 <= slider <= 1433.6):
x = Cyclic40.getY(joystick[1].x)
y = Cyclic40.getY(joystick[1].y)
z = Rudder40.getY(joystick[6].zRotation)
if (1433.7 <= slider <= 1638.4):
x = Cyclic30.getY(joystick[1].x)
y = Cyclic30.getY(joystick[1].y)
z = Rudder30.getY(joystick[6].zRotation)
if (1638.5 <= slider <= 1843.2):
x = Cyclic20.getY(joystick[1].x)
y = Cyclic20.getY(joystick[1].y)
z = Rudder20.getY(joystick[6].zRotation)
if (1843.3 <= slider <= 2048):
x = Cyclic10.getY(joystick[1].x)
y = Cyclic10.getY(joystick[1].y)
z = Rudder10.getY(joystick[6].zRotation)
I'm making progress, but the behavior is still not quite right. The problem seems to be with the curves themselves. I've defined a series of curves to limit output when given maximum input. As an example, here's my least aggressive cyclic curve.
Code:
<Curve>
<Name>Cyclic10</Name>
<Points>
<Point>
<X>0</X>
<Y>921.6</Y>
</Point>
<Point>
<X>42.5</X>
<Y>937.8</Y>
</Point>
<Point>
<X>98.3</X>
<Y>952.7</Y>
</Point>
<Point>
<X>167.4</X>
<Y>966.3</Y>
</Point>
<Point>
<X>249.9</X>
<Y>978.5</Y>
</Point>
<Point>
<X>345.6</X>
<Y>989.4</Y>
</Point>
<Point>
<X>454.7</X>
<Y>999</Y>
</Point>
<Point>
<X>577</X>
<Y>1007.3</Y>
</Point>
<Point>
<X>712.7</X>
<Y>1014.2</Y>
</Point>
<Point>
<X>861.7</X>
<Y>1019.8</Y>
</Point>
<Point>
<X>1024</X>
<Y>1024</Y>
</Point>
<Point>
<X>1186.3</X>
<Y>1028.2</Y>
</Point>
<Point>
<X>1335.3</X>
<Y>1033.8</Y>
</Point>
<Point>
<X>1471</X>
<Y>1040.7</Y>
</Point>
<Point>
<X>1593.3</X>
<Y>1049</Y>
</Point>
<Point>
<X>1702.4</X>
<Y>1058.6</Y>
</Point>
<Point>
<X>1798.1</X>
<Y>1069.5</Y>
</Point>
<Point>
<X>1880.6</X>
<Y>1081.7</Y>
</Point>
<Point>
<X>1949.7</X>
<Y>1095.3</Y>
</Point>
<Point>
<X>2005.5</X>
<Y>1110.2</Y>
</Point>
<Point>
<X>2048</X>
<Y>1126.4</Y>
</Point>
</Points>
<ValidateCurve>true</ValidateCurve>
</Curve>
Despite the first point being defined as 0,921.6, it seems to behave as if the first point is 0,0. As a result, moving the stick full right or full down limits the output range, but moving the stick full left or full up does not. The curve is limiting the output range effectively until full deflection, at which point it abruptly transitions from limited output to full. I've tried a few hacks at limiting the range, but none of my efforts have succeeded. Any ideas?