背景
函数实现
addSurface[f_BSplineFunction][id_Integer] /; f["Rank"] == 2 := With[{P = f["ControlPoints"], W = f["Weights"], deg = f["Degree"], knots = f["Knots"]},
With[{U = knots[[1]], V = knots[[-1]], p = deg[[1]], q = deg[[-1]]},
If[W === Automatic,
addNurbsSurface[id, P, U, V, p, q],
(* else *)
addNurbsSurface[id, Join[P, Map[List, W, {-1}], 3], U, V, p, q]
]
]
]
writeNurbsSurfaceToIges[funs: {_BSplineFunction ..}, filename_] := Module[{expr = CreateManagedLibraryExpression["IgesWriter", IgesWriter]},
With[{id = ManagedLibraryExpressionID[expr]},
Scan[addSurface[#][id] &, funs];
writeIgesFile[id, filename]
]
]
实例展示
视频
基于Mathematica的NURBS曲面导出-IGES