@@ -250,3 +250,52 @@ def test_mirror_face(self):
250250 (bbBox .xlen , bbBox .ylen , bbBox .zlen ), (1.0 , 1.0 , 1.0 ), 4
251251 )
252252 self .assertAlmostEqual (r .findSolid ().Volume (), 1.0 , 5 )
253+
254+ def test_bezier_curve (self ):
255+ # Quadratic bezier
256+ r = (
257+ Workplane ("XZ" )
258+ .bezier ([(0 , 0 ), (1 , 2 ), (5 , 0 )])
259+ .bezier ([(1 , - 2 ), (0 , 0 )], includeCurrent = True )
260+ .close ()
261+ .extrude (1 )
262+ )
263+
264+ bbBox = r .findSolid ().BoundingBox ()
265+ # Why is the bounding box larger than expected?
266+ self .assertTupleAlmostEquals ((bbBox .xlen , bbBox .ylen , bbBox .zlen ), (5 , 1 , 2 ), 1 )
267+ self .assertAlmostEqual (r .findSolid ().Volume (), 6.6666667 , 4 )
268+
269+ r = Workplane ("XY" ).bezier ([(0 , 0 ), (1 , 2 ), (2 , - 1 ), (5 , 0 )])
270+ self .assertTrue (len (r .ctx .pendingEdges ) == 1 )
271+ r = (
272+ r .lineTo (5 , - 0.1 )
273+ .bezier ([(2 , - 3 ), (1 , 0 ), (0 , 0 )], includeCurrent = True )
274+ .close ()
275+ .extrude (1 )
276+ )
277+
278+ bbBox = r .findSolid ().BoundingBox ()
279+ self .assertTupleAlmostEquals (
280+ (bbBox .xlen , bbBox .ylen , bbBox .zlen ), (5 , 2.06767 , 1 ), 1
281+ )
282+ self .assertAlmostEqual (r .findSolid ().Volume (), 4.975 , 4 )
283+
284+ # Test makewire by translate and loft example like in
285+ # the documentation
286+ r = Workplane ("XY" ).bezier ([(0 , 0 ), (1 , 2 ), (1 , - 1 ), (0 , 0 )], makeWire = True )
287+
288+ self .assertTrue (len (r .ctx .pendingWires ) == 1 )
289+ r = r .translate ((0 , 0 , 0.2 )).toPending ().loft ()
290+ self .assertAlmostEqual (r .findSolid ().Volume (), 0.09 , 4 )
291+
292+ # Finally test forConstruction
293+ r = Workplane ("XY" ).bezier (
294+ [(0 , 0 ), (1 , 2 ), (1 , - 1 ), (0 , 0 )], makeWire = True , forConstruction = True
295+ )
296+ self .assertTrue (len (r .ctx .pendingWires ) == 0 )
297+
298+ r = Workplane ("XY" ).bezier (
299+ [(0 , 0 ), (1 , 2 ), (2 , - 1 ), (5 , 0 )], forConstruction = True
300+ )
301+ self .assertTrue (len (r .ctx .pendingEdges ) == 0 )
0 commit comments