(self)
| 5172 | f = Face.makeFromWires(w0, [w1]) |
| 5173 | |
| 5174 | def testSplineApprox(self): |
| 5175 | |
| 5176 | from .naca import naca5305 |
| 5177 | from math import pi, cos |
| 5178 | |
| 5179 | pts = [Vector(e[0], e[1], 0) for e in naca5305] |
| 5180 | |
| 5181 | # spline |
| 5182 | |
| 5183 | e1 = Edge.makeSplineApprox(pts, 1e-6, maxDeg=6, smoothing=(1, 1, 1)) |
| 5184 | e2 = Edge.makeSplineApprox(pts, 1e-6, minDeg=2, maxDeg=6) |
| 5185 | |
| 5186 | self.assertTrue(e1.isValid()) |
| 5187 | self.assertTrue(e2.isValid()) |
| 5188 | self.assertTrue(e1.Length() > e2.Length()) |
| 5189 | |
| 5190 | with raises(ValueError): |
| 5191 | e4 = Edge.makeSplineApprox(pts, 1e-6, maxDeg=3, smoothing=(1, 1, 1.0)) |
| 5192 | |
| 5193 | pts_closed = pts + [pts[0]] |
| 5194 | |
| 5195 | e3 = Edge.makeSplineApprox(pts_closed) |
| 5196 | w = Edge.makeSplineApprox(pts).close() |
| 5197 | |
| 5198 | self.assertTrue(e3.IsClosed()) |
| 5199 | self.assertTrue(w.IsClosed()) |
| 5200 | |
| 5201 | # Workplane method |
| 5202 | |
| 5203 | w1 = Workplane().splineApprox(pts) |
| 5204 | w2 = Workplane().splineApprox(pts, forConstruction=True) |
| 5205 | w3 = Workplane().splineApprox(pts, makeWire=True) |
| 5206 | w4 = Workplane().splineApprox(pts, makeWire=True, forConstruction=True) |
| 5207 | |
| 5208 | self.assertEqual(w1.edges().size(), 1) |
| 5209 | self.assertEqual(len(w1.ctx.pendingEdges), 1) |
| 5210 | self.assertEqual(w2.edges().size(), 1) |
| 5211 | self.assertEqual(len(w2.ctx.pendingEdges), 0) |
| 5212 | self.assertEqual(w3.wires().size(), 1) |
| 5213 | self.assertEqual(len(w3.ctx.pendingWires), 1) |
| 5214 | self.assertEqual(w4.wires().size(), 1) |
| 5215 | self.assertEqual(len(w4.ctx.pendingWires), 0) |
| 5216 | |
| 5217 | # spline surface |
| 5218 | |
| 5219 | N = 40 |
| 5220 | T = 20 |
| 5221 | A = 5 |
| 5222 | |
| 5223 | pts = [ |
| 5224 | [ |
| 5225 | Vector(i, j, A * cos(2 * pi * i / T) * cos(2 * pi * j / T)) |
| 5226 | for i in range(N + 1) |
| 5227 | ] |
| 5228 | for j in range(N + 1) |
| 5229 | ] |
| 5230 | |
| 5231 | f1 = Face.makeSplineApprox(pts, smoothing=(1, 1, 1), maxDeg=6) |
nothing calls this directly
no test coverage detected