I found the cause of the problem.
The curve has non-uniform knots. Both surfaces have control points in identical locations. But the order of the control points is reversed for the incorrect result while the knot vector is the same. Since the knots are non-uniform the order of the control points relative to the knot vector is important. Apparently the location of the selection of the input curve determines the order of the control points. It appears to only occur when a point and single curve are used as input to Loft.
Results of List for the input curve.
Rhino object: curve
DEVELOPER DEBUGGING INFORMATION ONLY
Use the Rhino “What” command.
Runtime serial number: 21683
name: “”
id: 94B3E679-8CA2-4d3a-A670-669BD5CF2E0D
layer index: 6
render material index: -1 (from layer)
ON_NurbsCurve dim = 3 is_rat = 0
order = 4 cv_count = 6
Knot Vector ( 8 knots )
index value mult delta
0 -0.13928117378768429 3
3 1 1 1.139
4 1.5000000000000004 1 0.5
5 2.1348588519826133 3 0.6349
Control Points 6 non-rational points
index value
CV[ 0] (10.780814273295119, 14.28070692671632, 7.5217582344216076)
CV[ 1] (41.735297066317102, 22.320870941518013, 3.667117704487254)
CV[ 2] (89.473185780838662, 27.455290697777677, 0.6547844885216092)
CV[ 3] (153.22551927025751, 15.420011139079213, 1.9508174434699974)
CV[ 4] (183.53335187533142, 3.2019973336466134, 3.9839054119284971)
CV[ 5] (200.26243098127392, -5.0743053908031364, 5.3543846938331443)
Results of List for the incorrect result:
Rhino object: surface
DEVELOPER DEBUGGING INFORMATION ONLY
Use the Rhino “What” command.
Runtime serial number: 38489
name: “”
id: C5F887BC-3C34-48bf-8533-CEFEDECA8F84
layer index: 3
render material index: -1 (from layer)
ON_Brep:
(B-rep geometry is the same as underlying surface.)
surfaces: 1
3d curve: 3
2d curves: 4
vertices: 3
edges: 3
trims: 4
loops: 1
faces: 1
curve2d[ 0]: TL_NurbsCurve domain(0,113.452) start(0,0) end(113.452,0)
curve2d[ 1]: TL_NurbsCurve domain(0,196.668) start(113.452,0) end(113.452,196.668)
curve2d[ 2]: TL_NurbsCurve domain(0,113.452) start(113.452,196.668) end(0,196.668)
curve2d[ 3]: TL_NurbsCurve domain(0,196.668) start(0,196.668) end(0,0)
curve3d[ 0]: TL_NurbsCurve domain(0,113.452) start(106.814,10.3971,-52.7598) end(200.262,-5.07431,5.35438)
curve3d[ 1]: TL_NurbsCurve domain(0,196.668) start(200.262,-5.07431,5.35438) end(10.7808,14.2807,7.52176)
curve3d[ 2]: TL_NurbsCurve domain(-113.452,-0) start(10.7808,14.2807,7.52176) end(106.814,10.3971,-52.7598)
surface[ 0]: TL_NurbsSurface u(0,113.452) v(0,196.668)
surface details:
ON_NurbsSurface dim = 3 is_rat = 0
order = 2 X 4 cv_count = 2 X 6
Knot Vector 0 ( 2 knots )
index value mult delta
0 0 1
1 113.45202334374729 1 113.5
Knot Vector 1 ( 8 knots )
index value mult delta
0 0 3
3 98.525098343982947 1 98.53
4 141.76512574495538 1 43.24
5 196.6677540559115 3 54.9
Control Points 12 non-rational points
index value
CV[ 0][ 0] (106.8142332161097, 10.397114608006019, -52.759762629323156)
CV[ 0][ 1] (106.8142332161097, 10.397114608006019, -52.759762629323156)
CV[ 0][ 2] (106.8142332161097, 10.397114608006019, -52.759762629323156)
CV[ 0][ 3] (106.8142332161097, 10.397114608006019, -52.759762629323156)
CV[ 0][ 4] (106.8142332161097, 10.397114608006019, -52.759762629323156)
CV[ 0][ 5] (106.8142332161097, 10.397114608006019, -52.759762629323156)
CV[ 1][ 0] (200.26243098127392, -5.0743053908031364, 5.3543846938331443)
CV[ 1][ 1] (183.53335187533142, 3.2019973336466134, 3.9839054119284971)
CV[ 1][ 2] (153.22551927025751, 15.420011139079213, 1.9508174434699974)
CV[ 1][ 3] (89.473185780838662, 27.455290697777677, 0.6547844885216092)
CV[ 1][ 4] (41.735297066317102, 22.320870941518013, 3.667117704487254)
CV[ 1][ 5] (10.780814273295119, 14.28070692671632, 7.5217582344216076)
vertex[ 0]: (106.814233 10.397115 -52.759763) tolerance(0)
edges (0,2)
vertex[ 1]: (200.262431 -5.074305 5.354385) tolerance(0)
edges (0,1)
vertex[ 2]: (10.780814 14.280707 7.521758) tolerance(0)
edges (1,2)
edge[ 0]: v0( 0) v1( 1) 3d_curve(0) tolerance(0)
domain(0,113.452) start(106.814,10.3971,-52.7598) end(200.262,-5.07431,5.35438)
trims (+0)
edge[ 1]: v0( 1) v1( 2) 3d_curve(1) tolerance(0)
domain(0,196.668) start(200.262,-5.07431,5.35438) end(10.7808,14.2807,7.52176)
trims (+1)
edge[ 2]: v0( 2) v1( 0) 3d_curve(2) tolerance(0)
domain(-113.452,-0) start(10.7808,14.2807,7.52176) end(106.814,10.3971,-52.7598)
trims (+2)
face[ 0]: surface(0) reverse(0) loops(0)
Custom render mesh: 2977 polygons
(Face geometry is the same as underlying surface.)
loop[ 0]: type(outer) 4 trims(0,1,2,3)
trim[ 0]: edge( 0) v0( 0) v1( 1) tolerance(0,0)
type(boundary-south side iso) rev3d(0) 2d_curve(0)
domain(0,113.452) start(0,0) end(113.452,0)
surface points start(106.814,10.3971,-52.7598) end(200.262,-5.07431,5.35438)
trim[ 1]: edge( 1) v0( 1) v1( 2) tolerance(0,0)
type(boundary-east side iso) rev3d(0) 2d_curve(1)
domain(0,196.668) start(113.452,0) end(113.452,196.668)
surface points start(200.262,-5.07431,5.35438) end(10.7808,14.2807,7.52176)
trim[ 2]: edge( 2) v0( 2) v1( 0) tolerance(0,0)
type(boundary-north side iso) rev3d(0) 2d_curve(2)
domain(0,113.452) start(113.452,196.668) end(0,196.668)
surface points start(10.7808,14.2807,7.52176) end(106.814,10.3971,-52.7598)
trim[ 3]: edge(-1) v0( 0) v1( 0) tolerance(0,0)
type(singular-west side iso) rev3d(0) 2d_curve(3)
domain(0,196.668) start(0,196.668) end(0,0)
surface points start(106.814,10.3971,-52.7598) end(106.814,10.3971,-52.7598)
Results of List for the correct result:
Rhino object: surface
DEVELOPER DEBUGGING INFORMATION ONLY
Use the Rhino “What” command.
Runtime serial number: 63413
name: “”
id: 10735D05-F007-4d8a-87E5-E9CB0059D8B9
layer index: 29
render material index: -1 (from layer)
ON_Brep:
(B-rep geometry is the same as underlying surface.)
surfaces: 1
3d curve: 3
2d curves: 4
vertices: 3
edges: 3
trims: 4
loops: 1
faces: 1
curve2d[ 0]: TL_NurbsCurve domain(0,113.452) start(0,0) end(113.452,0)
curve2d[ 1]: TL_NurbsCurve domain(0,196.668) start(113.452,0) end(113.452,196.668)
curve2d[ 2]: TL_NurbsCurve domain(0,113.452) start(113.452,196.668) end(0,196.668)
curve2d[ 3]: TL_NurbsCurve domain(0,196.668) start(0,196.668) end(0,0)
curve3d[ 0]: TL_NurbsCurve domain(0,113.452) start(106.814,10.3971,-52.7598) end(10.7808,14.2807,7.52176)
curve3d[ 1]: TL_NurbsCurve domain(0,196.668) start(10.7808,14.2807,7.52176) end(200.262,-5.07431,5.35438)
curve3d[ 2]: TL_NurbsCurve domain(-113.452,-0) start(200.262,-5.07431,5.35438) end(106.814,10.3971,-52.7598)
surface[ 0]: TL_NurbsSurface u(0,113.452) v(0,196.668)
surface details:
ON_NurbsSurface dim = 3 is_rat = 0
order = 2 X 4 cv_count = 2 X 6
Knot Vector 0 ( 2 knots )
index value mult delta
0 0 1
1 113.45202334374729 1 113.5
Knot Vector 1 ( 8 knots )
index value mult delta
0 0 3
3 98.525098343982947 1 98.53
4 141.76512574495538 1 43.24
5 196.6677540559115 3 54.9
Control Points 12 non-rational points
index value
CV[ 0][ 0] (106.8142332161097, 10.397114608006019, -52.759762629323156)
CV[ 0][ 1] (106.8142332161097, 10.397114608006019, -52.759762629323156)
CV[ 0][ 2] (106.8142332161097, 10.397114608006019, -52.759762629323156)
CV[ 0][ 3] (106.8142332161097, 10.397114608006019, -52.759762629323156)
CV[ 0][ 4] (106.8142332161097, 10.397114608006019, -52.759762629323156)
CV[ 0][ 5] (106.8142332161097, 10.397114608006019, -52.759762629323156)
CV[ 1][ 0] (10.780814273295119, 14.28070692671632, 7.5217582344216076)
CV[ 1][ 1] (41.735297066317102, 22.320870941518013, 3.667117704487254)
CV[ 1][ 2] (89.473185780838662, 27.455290697777677, 0.6547844885216092)
CV[ 1][ 3] (153.22551927025751, 15.420011139079213, 1.9508174434699974)
CV[ 1][ 4] (183.53335187533142, 3.2019973336466134, 3.9839054119284971)
CV[ 1][ 5] (200.26243098127392, -5.0743053908031364, 5.3543846938331443)
vertex[ 0]: (106.814233 10.397115 -52.759763) tolerance(0)
edges (0,2)
vertex[ 1]: (10.780814 14.280707 7.521758) tolerance(0)
edges (0,1)
vertex[ 2]: (200.262431 -5.074305 5.354385) tolerance(0)
edges (1,2)
edge[ 0]: v0( 0) v1( 1) 3d_curve(0) tolerance(0)
domain(0,113.452) start(106.814,10.3971,-52.7598) end(10.7808,14.2807,7.52176)
trims (+0)
edge[ 1]: v0( 1) v1( 2) 3d_curve(1) tolerance(0)
domain(0,196.668) start(10.7808,14.2807,7.52176) end(200.262,-5.07431,5.35438)
trims (+1)
edge[ 2]: v0( 2) v1( 0) 3d_curve(2) tolerance(0)
domain(-113.452,-0) start(200.262,-5.07431,5.35438) end(106.814,10.3971,-52.7598)
trims (+2)
face[ 0]: surface(0) reverse(1) loops(0)
Custom render mesh: 1766 polygons
(Face geometry is the same as underlying surface.)
loop[ 0]: type(outer) 4 trims(0,1,2,3)
trim[ 0]: edge( 0) v0( 0) v1( 1) tolerance(0,0)
type(boundary-south side iso) rev3d(0) 2d_curve(0)
domain(0,113.452) start(0,0) end(113.452,0)
surface points start(106.814,10.3971,-52.7598) end(10.7808,14.2807,7.52176)
trim[ 1]: edge( 1) v0( 1) v1( 2) tolerance(0,0)
type(boundary-east side iso) rev3d(0) 2d_curve(1)
domain(0,196.668) start(113.452,0) end(113.452,196.668)
surface points start(10.7808,14.2807,7.52176) end(200.262,-5.07431,5.35438)
trim[ 2]: edge( 2) v0( 2) v1( 0) tolerance(0,0)
type(boundary-north side iso) rev3d(0) 2d_curve(2)
domain(0,113.452) start(113.452,196.668) end(0,196.668)
surface points start(200.262,-5.07431,5.35438) end(106.814,10.3971,-52.7598)
trim[ 3]: edge(-1) v0( 0) v1( 0) tolerance(0,0)
type(singular-west side iso) rev3d(0) 2d_curve(3)
domain(0,196.668) start(0,196.668) end(0,0)
surface points start(106.814,10.3971,-52.7598) end(106.814,10.3971,-52.7598)